@githolon/runtime 0.119.12 → 0.119.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -55,7 +55,7 @@
55
55
  var define_NOMOS_KERNEL_RELEASE_default;
56
56
  var init_define_NOMOS_KERNEL_RELEASE = __esm({
57
57
  "<define:__NOMOS_KERNEL_RELEASE__>"() {
58
- define_NOMOS_KERNEL_RELEASE_default = { contracts: { "nomos.kernel.v1": "1.0.0" }, descriptorSha256: "80e9dec7aedf8171e3e4ec130cf6935469868c3ad7586d82975c3e9831da572f" };
58
+ define_NOMOS_KERNEL_RELEASE_default = { contracts: { "nomos.kernel.v1": "1.0.0" }, descriptorSha256: "3c8284fd934d34b45072e1604f4ac8aa85980e704ad28e5dc937d61eb6352972" };
59
59
  }
60
60
  });
61
61
 
@@ -3153,6 +3153,127 @@
3153
3153
  init_define_NOMOS_KERNEL_RELEASE();
3154
3154
  init_shims();
3155
3155
 
3156
+ // ../../platform-shells/browser/law_preparation.ts
3157
+ init_define_NOMOS_KERNEL_RELEASE();
3158
+ init_shims();
3159
+ var namespace = "physical-law-preparation-v1";
3160
+ var productsRoot = "/work/.nomos-kernel/prepared-law/";
3161
+ var chunkBytes = 1024 * 1024;
3162
+ var pause = () => new Promise((resolve) => setTimeout(resolve, 0));
3163
+ var inputFile = (path) => path.startsWith(productsRoot) || /^\/work\/ws\/[^/]+\/nomos\.git\/(?:objects\/|refs\/|HEAD$|config$|packed-refs$|shallow$)/.test(path);
3164
+ var _running, _tail, _closed, _worker, _cancel, _BrowserLawPreparation_instances, run_fn;
3165
+ var BrowserLawPreparation = class {
3166
+ constructor(source, storage, workerFactory = () => {
3167
+ const url = URL.createObjectURL(new Blob(['"use strict";\n(() => {\n var __create = Object.create;\n var __defProp = Object.defineProperty;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __getProtoOf = Object.getPrototypeOf;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n };\n var __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n };\n var __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n };\n var __copyProps = (to, from, except, desc) => {\n if (from && typeof from === "object" || typeof from === "function") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n };\n var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. "__esModule" has not been set), then set\n // "default" to the CommonJS "module.exports" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,\n mod\n ));\n\n // ../../node_modules/base64-js/index.js\n var require_base64_js = __commonJS({\n "../../node_modules/base64-js/index.js"(exports) {\n "use strict";\n init_shims();\n exports.byteLength = byteLength;\n exports.toByteArray = toByteArray;\n exports.fromByteArray = fromByteArray;\n var lookup = [];\n var revLookup = [];\n var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array;\n var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";\n for (i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n }\n var i;\n var len;\n revLookup["-".charCodeAt(0)] = 62;\n revLookup["_".charCodeAt(0)] = 63;\n function getLens(b64) {\n var len2 = b64.length;\n if (len2 % 4 > 0) {\n throw new Error("Invalid string. Length must be a multiple of 4");\n }\n var validLen = b64.indexOf("=");\n if (validLen === -1) validLen = len2;\n var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4;\n return [validLen, placeHoldersLen];\n }\n function byteLength(b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n function _byteLength(b64, validLen, placeHoldersLen) {\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n function toByteArray(b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n var curByte = 0;\n var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen;\n var i2;\n for (i2 = 0; i2 < len2; i2 += 4) {\n tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)];\n arr[curByte++] = tmp >> 16 & 255;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n if (placeHoldersLen === 2) {\n tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4;\n arr[curByte++] = tmp & 255;\n }\n if (placeHoldersLen === 1) {\n tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n return arr;\n }\n function tripletToBase64(num) {\n return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];\n }\n function encodeChunk(uint8, start, end) {\n var tmp;\n var output = [];\n for (var i2 = start; i2 < end; i2 += 3) {\n tmp = (uint8[i2] << 16 & 16711680) + (uint8[i2 + 1] << 8 & 65280) + (uint8[i2 + 2] & 255);\n output.push(tripletToBase64(tmp));\n }\n return output.join("");\n }\n function fromByteArray(uint8) {\n var tmp;\n var len2 = uint8.length;\n var extraBytes = len2 % 3;\n var parts = [];\n var maxChunkLength = 16383;\n for (var i2 = 0, len22 = len2 - extraBytes; i2 < len22; i2 += maxChunkLength) {\n parts.push(encodeChunk(uint8, i2, i2 + maxChunkLength > len22 ? len22 : i2 + maxChunkLength));\n }\n if (extraBytes === 1) {\n tmp = uint8[len2 - 1];\n parts.push(\n lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "=="\n );\n } else if (extraBytes === 2) {\n tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1];\n parts.push(\n lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "="\n );\n }\n return parts.join("");\n }\n }\n });\n\n // ../../node_modules/ieee754/index.js\n var require_ieee754 = __commonJS({\n "../../node_modules/ieee754/index.js"(exports) {\n init_shims();\n exports.read = function(buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? nBytes - 1 : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n i += d;\n e = s & (1 << -nBits) - 1;\n s >>= -nBits;\n nBits += eLen;\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {\n }\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {\n }\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : (s ? -1 : 1) * Infinity;\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n };\n exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n var i = isLE ? 0 : nBytes - 1;\n var d = isLE ? 1 : -1;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n value = Math.abs(value);\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[offset + i] = m & 255, i += d, m /= 256, mLen -= 8) {\n }\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) {\n }\n buffer[offset + i - d] |= s * 128;\n };\n }\n });\n\n // ../../node_modules/buffer/index.js\n var require_buffer = __commonJS({\n "../../node_modules/buffer/index.js"(exports) {\n "use strict";\n init_shims();\n var base64 = require_base64_js();\n var ieee754 = require_ieee754();\n var customInspectSymbol = typeof Symbol === "function" && typeof Symbol["for"] === "function" ? Symbol["for"]("nodejs.util.inspect.custom") : null;\n exports.Buffer = Buffer3;\n exports.SlowBuffer = SlowBuffer;\n exports.INSPECT_MAX_BYTES = 50;\n var K_MAX_LENGTH = 2147483647;\n exports.kMaxLength = K_MAX_LENGTH;\n Buffer3.TYPED_ARRAY_SUPPORT = typedArraySupport();\n if (!Buffer3.TYPED_ARRAY_SUPPORT && typeof console !== "undefined" && typeof console.error === "function") {\n console.error(\n "This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."\n );\n }\n function typedArraySupport() {\n try {\n const arr = new Uint8Array(1);\n const proto = { foo: function() {\n return 42;\n } };\n Object.setPrototypeOf(proto, Uint8Array.prototype);\n Object.setPrototypeOf(arr, proto);\n return arr.foo() === 42;\n } catch (e) {\n return false;\n }\n }\n Object.defineProperty(Buffer3.prototype, "parent", {\n enumerable: true,\n get: function() {\n if (!Buffer3.isBuffer(this)) return void 0;\n return this.buffer;\n }\n });\n Object.defineProperty(Buffer3.prototype, "offset", {\n enumerable: true,\n get: function() {\n if (!Buffer3.isBuffer(this)) return void 0;\n return this.byteOffset;\n }\n });\n function createBuffer(length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError(\'The value "\' + length + \'" is invalid for option "size"\');\n }\n const buf = new Uint8Array(length);\n Object.setPrototypeOf(buf, Buffer3.prototype);\n return buf;\n }\n function Buffer3(arg, encodingOrOffset, length) {\n if (typeof arg === "number") {\n if (typeof encodingOrOffset === "string") {\n throw new TypeError(\n \'The "string" argument must be of type string. Received type number\'\n );\n }\n return allocUnsafe(arg);\n }\n return from(arg, encodingOrOffset, length);\n }\n Buffer3.poolSize = 8192;\n function from(value, encodingOrOffset, length) {\n if (typeof value === "string") {\n return fromString(value, encodingOrOffset);\n }\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value);\n }\n if (value == null) {\n throw new TypeError(\n "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value\n );\n }\n if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n if (typeof SharedArrayBuffer !== "undefined" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n if (typeof value === "number") {\n throw new TypeError(\n \'The "value" argument must not be of type number. Received type number\'\n );\n }\n const valueOf = value.valueOf && value.valueOf();\n if (valueOf != null && valueOf !== value) {\n return Buffer3.from(valueOf, encodingOrOffset, length);\n }\n const b = fromObject(value);\n if (b) return b;\n if (typeof Symbol !== "undefined" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === "function") {\n return Buffer3.from(value[Symbol.toPrimitive]("string"), encodingOrOffset, length);\n }\n throw new TypeError(\n "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value\n );\n }\n Buffer3.from = function(value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length);\n };\n Object.setPrototypeOf(Buffer3.prototype, Uint8Array.prototype);\n Object.setPrototypeOf(Buffer3, Uint8Array);\n function assertSize(size) {\n if (typeof size !== "number") {\n throw new TypeError(\'"size" argument must be of type number\');\n } else if (size < 0) {\n throw new RangeError(\'The value "\' + size + \'" is invalid for option "size"\');\n }\n }\n function alloc(size, fill, encoding) {\n assertSize(size);\n if (size <= 0) {\n return createBuffer(size);\n }\n if (fill !== void 0) {\n return typeof encoding === "string" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);\n }\n return createBuffer(size);\n }\n Buffer3.alloc = function(size, fill, encoding) {\n return alloc(size, fill, encoding);\n };\n function allocUnsafe(size) {\n assertSize(size);\n return createBuffer(size < 0 ? 0 : checked(size) | 0);\n }\n Buffer3.allocUnsafe = function(size) {\n return allocUnsafe(size);\n };\n Buffer3.allocUnsafeSlow = function(size) {\n return allocUnsafe(size);\n };\n function fromString(string, encoding) {\n if (typeof encoding !== "string" || encoding === "") {\n encoding = "utf8";\n }\n if (!Buffer3.isEncoding(encoding)) {\n throw new TypeError("Unknown encoding: " + encoding);\n }\n const length = byteLength(string, encoding) | 0;\n let buf = createBuffer(length);\n const actual = buf.write(string, encoding);\n if (actual !== length) {\n buf = buf.slice(0, actual);\n }\n return buf;\n }\n function fromArrayLike(array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0;\n const buf = createBuffer(length);\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255;\n }\n return buf;\n }\n function fromArrayView(arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView);\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);\n }\n return fromArrayLike(arrayView);\n }\n function fromArrayBuffer(array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError(\'"offset" is outside of buffer bounds\');\n }\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError(\'"length" is outside of buffer bounds\');\n }\n let buf;\n if (byteOffset === void 0 && length === void 0) {\n buf = new Uint8Array(array);\n } else if (length === void 0) {\n buf = new Uint8Array(array, byteOffset);\n } else {\n buf = new Uint8Array(array, byteOffset, length);\n }\n Object.setPrototypeOf(buf, Buffer3.prototype);\n return buf;\n }\n function fromObject(obj) {\n if (Buffer3.isBuffer(obj)) {\n const len = checked(obj.length) | 0;\n const buf = createBuffer(len);\n if (buf.length === 0) {\n return buf;\n }\n obj.copy(buf, 0, 0, len);\n return buf;\n }\n if (obj.length !== void 0) {\n if (typeof obj.length !== "number" || numberIsNaN(obj.length)) {\n return createBuffer(0);\n }\n return fromArrayLike(obj);\n }\n if (obj.type === "Buffer" && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data);\n }\n }\n function checked(length) {\n if (length >= K_MAX_LENGTH) {\n throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + K_MAX_LENGTH.toString(16) + " bytes");\n }\n return length | 0;\n }\n function SlowBuffer(length) {\n if (+length != length) {\n length = 0;\n }\n return Buffer3.alloc(+length);\n }\n Buffer3.isBuffer = function isBuffer(b) {\n return b != null && b._isBuffer === true && b !== Buffer3.prototype;\n };\n Buffer3.compare = function compare(a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer3.from(a, a.offset, a.byteLength);\n if (isInstance(b, Uint8Array)) b = Buffer3.from(b, b.offset, b.byteLength);\n if (!Buffer3.isBuffer(a) || !Buffer3.isBuffer(b)) {\n throw new TypeError(\n \'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array\'\n );\n }\n if (a === b) return 0;\n let x = a.length;\n let y = b.length;\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n };\n Buffer3.isEncoding = function isEncoding(encoding) {\n switch (String(encoding).toLowerCase()) {\n case "hex":\n case "utf8":\n case "utf-8":\n case "ascii":\n case "latin1":\n case "binary":\n case "base64":\n case "ucs2":\n case "ucs-2":\n case "utf16le":\n case "utf-16le":\n return true;\n default:\n return false;\n }\n };\n Buffer3.concat = function concat(list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError(\'"list" argument must be an Array of Buffers\');\n }\n if (list.length === 0) {\n return Buffer3.alloc(0);\n }\n let i;\n if (length === void 0) {\n length = 0;\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n const buffer = Buffer3.allocUnsafe(length);\n let pos = 0;\n for (i = 0; i < list.length; ++i) {\n let buf = list[i];\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer3.isBuffer(buf)) buf = Buffer3.from(buf);\n buf.copy(buffer, pos);\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n );\n }\n } else if (!Buffer3.isBuffer(buf)) {\n throw new TypeError(\'"list" argument must be an Array of Buffers\');\n } else {\n buf.copy(buffer, pos);\n }\n pos += buf.length;\n }\n return buffer;\n };\n function byteLength(string, encoding) {\n if (Buffer3.isBuffer(string)) {\n return string.length;\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength;\n }\n if (typeof string !== "string") {\n throw new TypeError(\n \'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type \' + typeof string\n );\n }\n const len = string.length;\n const mustMatch = arguments.length > 2 && arguments[2] === true;\n if (!mustMatch && len === 0) return 0;\n let loweredCase = false;\n for (; ; ) {\n switch (encoding) {\n case "ascii":\n case "latin1":\n case "binary":\n return len;\n case "utf8":\n case "utf-8":\n return utf8ToBytes(string).length;\n case "ucs2":\n case "ucs-2":\n case "utf16le":\n case "utf-16le":\n return len * 2;\n case "hex":\n return len >>> 1;\n case "base64":\n return base64ToBytes(string).length;\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length;\n }\n encoding = ("" + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n }\n Buffer3.byteLength = byteLength;\n function slowToString(encoding, start, end) {\n let loweredCase = false;\n if (start === void 0 || start < 0) {\n start = 0;\n }\n if (start > this.length) {\n return "";\n }\n if (end === void 0 || end > this.length) {\n end = this.length;\n }\n if (end <= 0) {\n return "";\n }\n end >>>= 0;\n start >>>= 0;\n if (end <= start) {\n return "";\n }\n if (!encoding) encoding = "utf8";\n while (true) {\n switch (encoding) {\n case "hex":\n return hexSlice(this, start, end);\n case "utf8":\n case "utf-8":\n return utf8Slice(this, start, end);\n case "ascii":\n return asciiSlice(this, start, end);\n case "latin1":\n case "binary":\n return latin1Slice(this, start, end);\n case "base64":\n return base64Slice(this, start, end);\n case "ucs2":\n case "ucs-2":\n case "utf16le":\n case "utf-16le":\n return utf16leSlice(this, start, end);\n default:\n if (loweredCase) throw new TypeError("Unknown encoding: " + encoding);\n encoding = (encoding + "").toLowerCase();\n loweredCase = true;\n }\n }\n }\n Buffer3.prototype._isBuffer = true;\n function swap(b, n, m) {\n const i = b[n];\n b[n] = b[m];\n b[m] = i;\n }\n Buffer3.prototype.swap16 = function swap16() {\n const len = this.length;\n if (len % 2 !== 0) {\n throw new RangeError("Buffer size must be a multiple of 16-bits");\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n return this;\n };\n Buffer3.prototype.swap32 = function swap32() {\n const len = this.length;\n if (len % 4 !== 0) {\n throw new RangeError("Buffer size must be a multiple of 32-bits");\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n return this;\n };\n Buffer3.prototype.swap64 = function swap64() {\n const len = this.length;\n if (len % 8 !== 0) {\n throw new RangeError("Buffer size must be a multiple of 64-bits");\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n return this;\n };\n Buffer3.prototype.toString = function toString() {\n const length = this.length;\n if (length === 0) return "";\n if (arguments.length === 0) return utf8Slice(this, 0, length);\n return slowToString.apply(this, arguments);\n };\n Buffer3.prototype.toLocaleString = Buffer3.prototype.toString;\n Buffer3.prototype.equals = function equals(b) {\n if (!Buffer3.isBuffer(b)) throw new TypeError("Argument must be a Buffer");\n if (this === b) return true;\n return Buffer3.compare(this, b) === 0;\n };\n Buffer3.prototype.inspect = function inspect() {\n let str = "";\n const max = exports.INSPECT_MAX_BYTES;\n str = this.toString("hex", 0, max).replace(/(.{2})/g, "$1 ").trim();\n if (this.length > max) str += " ... ";\n return "<Buffer " + str + ">";\n };\n if (customInspectSymbol) {\n Buffer3.prototype[customInspectSymbol] = Buffer3.prototype.inspect;\n }\n Buffer3.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer3.from(target, target.offset, target.byteLength);\n }\n if (!Buffer3.isBuffer(target)) {\n throw new TypeError(\n \'The "target" argument must be one of type Buffer or Uint8Array. Received type \' + typeof target\n );\n }\n if (start === void 0) {\n start = 0;\n }\n if (end === void 0) {\n end = target ? target.length : 0;\n }\n if (thisStart === void 0) {\n thisStart = 0;\n }\n if (thisEnd === void 0) {\n thisEnd = this.length;\n }\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError("out of range index");\n }\n if (thisStart >= thisEnd && start >= end) {\n return 0;\n }\n if (thisStart >= thisEnd) {\n return -1;\n }\n if (start >= end) {\n return 1;\n }\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n if (this === target) return 0;\n let x = thisEnd - thisStart;\n let y = end - start;\n const len = Math.min(x, y);\n const thisCopy = this.slice(thisStart, thisEnd);\n const targetCopy = target.slice(start, end);\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break;\n }\n }\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n };\n function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n if (buffer.length === 0) return -1;\n if (typeof byteOffset === "string") {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 2147483647) {\n byteOffset = 2147483647;\n } else if (byteOffset < -2147483648) {\n byteOffset = -2147483648;\n }\n byteOffset = +byteOffset;\n if (numberIsNaN(byteOffset)) {\n byteOffset = dir ? 0 : buffer.length - 1;\n }\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n if (byteOffset >= buffer.length) {\n if (dir) return -1;\n else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;\n else return -1;\n }\n if (typeof val === "string") {\n val = Buffer3.from(val, encoding);\n }\n if (Buffer3.isBuffer(val)) {\n if (val.length === 0) {\n return -1;\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n } else if (typeof val === "number") {\n val = val & 255;\n if (typeof Uint8Array.prototype.indexOf === "function") {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n }\n throw new TypeError("val must be string, number or Buffer");\n }\n function arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n let indexSize = 1;\n let arrLength = arr.length;\n let valLength = val.length;\n if (encoding !== void 0) {\n encoding = String(encoding).toLowerCase();\n if (encoding === "ucs2" || encoding === "ucs-2" || encoding === "utf16le" || encoding === "utf-16le") {\n if (arr.length < 2 || val.length < 2) {\n return -1;\n }\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n function read(buf, i2) {\n if (indexSize === 1) {\n return buf[i2];\n } else {\n return buf.readUInt16BE(i2 * indexSize);\n }\n }\n let i;\n if (dir) {\n let foundIndex = -1;\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n for (i = byteOffset; i >= 0; i--) {\n let found = true;\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break;\n }\n }\n if (found) return i;\n }\n }\n return -1;\n }\n Buffer3.prototype.includes = function includes(val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1;\n };\n Buffer3.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n };\n Buffer3.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n };\n function hexWrite(buf, string, offset, length) {\n offset = Number(offset) || 0;\n const remaining = buf.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n if (length > remaining) {\n length = remaining;\n }\n }\n const strLen = string.length;\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n let i;\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16);\n if (numberIsNaN(parsed)) return i;\n buf[offset + i] = parsed;\n }\n return i;\n }\n function utf8Write(buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n }\n function asciiWrite(buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length);\n }\n function base64Write(buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length);\n }\n function ucs2Write(buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n }\n Buffer3.prototype.write = function write(string, offset, length, encoding) {\n if (offset === void 0) {\n encoding = "utf8";\n length = this.length;\n offset = 0;\n } else if (length === void 0 && typeof offset === "string") {\n encoding = offset;\n length = this.length;\n offset = 0;\n } else if (isFinite(offset)) {\n offset = offset >>> 0;\n if (isFinite(length)) {\n length = length >>> 0;\n if (encoding === void 0) encoding = "utf8";\n } else {\n encoding = length;\n length = void 0;\n }\n } else {\n throw new Error(\n "Buffer.write(string, encoding, offset[, length]) is no longer supported"\n );\n }\n const remaining = this.length - offset;\n if (length === void 0 || length > remaining) length = remaining;\n if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n throw new RangeError("Attempt to write outside buffer bounds");\n }\n if (!encoding) encoding = "utf8";\n let loweredCase = false;\n for (; ; ) {\n switch (encoding) {\n case "hex":\n return hexWrite(this, string, offset, length);\n case "utf8":\n case "utf-8":\n return utf8Write(this, string, offset, length);\n case "ascii":\n case "latin1":\n case "binary":\n return asciiWrite(this, string, offset, length);\n case "base64":\n return base64Write(this, string, offset, length);\n case "ucs2":\n case "ucs-2":\n case "utf16le":\n case "utf-16le":\n return ucs2Write(this, string, offset, length);\n default:\n if (loweredCase) throw new TypeError("Unknown encoding: " + encoding);\n encoding = ("" + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n };\n Buffer3.prototype.toJSON = function toJSON() {\n return {\n type: "Buffer",\n data: Array.prototype.slice.call(this._arr || this, 0)\n };\n };\n function base64Slice(buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf);\n } else {\n return base64.fromByteArray(buf.slice(start, end));\n }\n }\n function utf8Slice(buf, start, end) {\n end = Math.min(buf.length, end);\n const res = [];\n let i = start;\n while (i < end) {\n const firstByte = buf[i];\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n break;\n case 2:\n secondByte = buf[i + 1];\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n if (tempCodePoint > 127) {\n codePoint = tempCodePoint;\n }\n }\n break;\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n codePoint = tempCodePoint;\n }\n }\n break;\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n if (codePoint === null) {\n codePoint = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n codePoint -= 65536;\n res.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n res.push(codePoint);\n i += bytesPerSequence;\n }\n return decodeCodePointsArray(res);\n }\n var MAX_ARGUMENTS_LENGTH = 4096;\n function decodeCodePointsArray(codePoints) {\n const len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints);\n }\n let res = "";\n let i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n );\n }\n return res;\n }\n function asciiSlice(buf, start, end) {\n let ret = "";\n end = Math.min(buf.length, end);\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 127);\n }\n return ret;\n }\n function latin1Slice(buf, start, end) {\n let ret = "";\n end = Math.min(buf.length, end);\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n return ret;\n }\n function hexSlice(buf, start, end) {\n const len = buf.length;\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n let out = "";\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]];\n }\n return out;\n }\n function utf16leSlice(buf, start, end) {\n const bytes = buf.slice(start, end);\n let res = "";\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n return res;\n }\n Buffer3.prototype.slice = function slice(start, end) {\n const len = this.length;\n start = ~~start;\n end = end === void 0 ? len : ~~end;\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n if (end < start) end = start;\n const newBuf = this.subarray(start, end);\n Object.setPrototypeOf(newBuf, Buffer3.prototype);\n return newBuf;\n };\n function checkOffset(offset, ext, length) {\n if (offset % 1 !== 0 || offset < 0) throw new RangeError("offset is not uint");\n if (offset + ext > length) throw new RangeError("Trying to access beyond buffer length");\n }\n Buffer3.prototype.readUintLE = Buffer3.prototype.readUIntLE = function readUIntLE(offset, byteLength2, noAssert) {\n offset = offset >>> 0;\n byteLength2 = byteLength2 >>> 0;\n if (!noAssert) checkOffset(offset, byteLength2, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n while (++i < byteLength2 && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n return val;\n };\n Buffer3.prototype.readUintBE = Buffer3.prototype.readUIntBE = function readUIntBE(offset, byteLength2, noAssert) {\n offset = offset >>> 0;\n byteLength2 = byteLength2 >>> 0;\n if (!noAssert) {\n checkOffset(offset, byteLength2, this.length);\n }\n let val = this[offset + --byteLength2];\n let mul = 1;\n while (byteLength2 > 0 && (mul *= 256)) {\n val += this[offset + --byteLength2] * mul;\n }\n return val;\n };\n Buffer3.prototype.readUint8 = Buffer3.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset];\n };\n Buffer3.prototype.readUint16LE = Buffer3.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | this[offset + 1] << 8;\n };\n Buffer3.prototype.readUint16BE = Buffer3.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] << 8 | this[offset + 1];\n };\n Buffer3.prototype.readUint32LE = Buffer3.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;\n };\n Buffer3.prototype.readUint32BE = Buffer3.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n };\n Buffer3.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, "offset");\n const first = this[offset];\n const last = this[offset + 7];\n if (first === void 0 || last === void 0) {\n boundsError(offset, this.length - 8);\n }\n const lo = first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24;\n const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last * 2 ** 24;\n return BigInt(lo) + (BigInt(hi) << BigInt(32));\n });\n Buffer3.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, "offset");\n const first = this[offset];\n const last = this[offset + 7];\n if (first === void 0 || last === void 0) {\n boundsError(offset, this.length - 8);\n }\n const hi = first * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last;\n return (BigInt(hi) << BigInt(32)) + BigInt(lo);\n });\n Buffer3.prototype.readIntLE = function readIntLE(offset, byteLength2, noAssert) {\n offset = offset >>> 0;\n byteLength2 = byteLength2 >>> 0;\n if (!noAssert) checkOffset(offset, byteLength2, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n while (++i < byteLength2 && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength2);\n return val;\n };\n Buffer3.prototype.readIntBE = function readIntBE(offset, byteLength2, noAssert) {\n offset = offset >>> 0;\n byteLength2 = byteLength2 >>> 0;\n if (!noAssert) checkOffset(offset, byteLength2, this.length);\n let i = byteLength2;\n let mul = 1;\n let val = this[offset + --i];\n while (i > 0 && (mul *= 256)) {\n val += this[offset + --i] * mul;\n }\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength2);\n return val;\n };\n Buffer3.prototype.readInt8 = function readInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 128)) return this[offset];\n return (255 - this[offset] + 1) * -1;\n };\n Buffer3.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset] | this[offset + 1] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n Buffer3.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset + 1] | this[offset] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n Buffer3.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n };\n Buffer3.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n };\n Buffer3.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, "offset");\n const first = this[offset];\n const last = this[offset + 7];\n if (first === void 0 || last === void 0) {\n boundsError(offset, this.length - 8);\n }\n const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last << 24);\n return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24);\n });\n Buffer3.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, "offset");\n const first = this[offset];\n const last = this[offset + 7];\n if (first === void 0 || last === void 0) {\n boundsError(offset, this.length - 8);\n }\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last);\n });\n Buffer3.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, true, 23, 4);\n };\n Buffer3.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, false, 23, 4);\n };\n Buffer3.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, true, 52, 8);\n };\n Buffer3.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, false, 52, 8);\n };\n function checkInt(buf, value, offset, ext, max, min) {\n if (!Buffer3.isBuffer(buf)) throw new TypeError(\'"buffer" argument must be a Buffer instance\');\n if (value > max || value < min) throw new RangeError(\'"value" argument is out of bounds\');\n if (offset + ext > buf.length) throw new RangeError("Index out of range");\n }\n Buffer3.prototype.writeUintLE = Buffer3.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength2, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength2 = byteLength2 >>> 0;\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength2) - 1;\n checkInt(this, value, offset, byteLength2, maxBytes, 0);\n }\n let mul = 1;\n let i = 0;\n this[offset] = value & 255;\n while (++i < byteLength2 && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n return offset + byteLength2;\n };\n Buffer3.prototype.writeUintBE = Buffer3.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength2, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength2 = byteLength2 >>> 0;\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength2) - 1;\n checkInt(this, value, offset, byteLength2, maxBytes, 0);\n }\n let i = byteLength2 - 1;\n let mul = 1;\n this[offset + i] = value & 255;\n while (--i >= 0 && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n return offset + byteLength2;\n };\n Buffer3.prototype.writeUint8 = Buffer3.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 255, 0);\n this[offset] = value & 255;\n return offset + 1;\n };\n Buffer3.prototype.writeUint16LE = Buffer3.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n Buffer3.prototype.writeUint16BE = Buffer3.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n Buffer3.prototype.writeUint32LE = Buffer3.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset + 3] = value >>> 24;\n this[offset + 2] = value >>> 16;\n this[offset + 1] = value >>> 8;\n this[offset] = value & 255;\n return offset + 4;\n };\n Buffer3.prototype.writeUint32BE = Buffer3.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n function wrtBigUInt64LE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n return offset;\n }\n function wrtBigUInt64BE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset + 7] = lo;\n lo = lo >> 8;\n buf[offset + 6] = lo;\n lo = lo >> 8;\n buf[offset + 5] = lo;\n lo = lo >> 8;\n buf[offset + 4] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset + 3] = hi;\n hi = hi >> 8;\n buf[offset + 2] = hi;\n hi = hi >> 8;\n buf[offset + 1] = hi;\n hi = hi >> 8;\n buf[offset] = hi;\n return offset + 8;\n }\n Buffer3.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff"));\n });\n Buffer3.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff"));\n });\n Buffer3.prototype.writeIntLE = function writeIntLE(value, offset, byteLength2, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength2 - 1);\n checkInt(this, value, offset, byteLength2, limit - 1, -limit);\n }\n let i = 0;\n let mul = 1;\n let sub = 0;\n this[offset] = value & 255;\n while (++i < byteLength2 && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n return offset + byteLength2;\n };\n Buffer3.prototype.writeIntBE = function writeIntBE(value, offset, byteLength2, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength2 - 1);\n checkInt(this, value, offset, byteLength2, limit - 1, -limit);\n }\n let i = byteLength2 - 1;\n let mul = 1;\n let sub = 0;\n this[offset + i] = value & 255;\n while (--i >= 0 && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n return offset + byteLength2;\n };\n Buffer3.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 127, -128);\n if (value < 0) value = 255 + value + 1;\n this[offset] = value & 255;\n return offset + 1;\n };\n Buffer3.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n Buffer3.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n Buffer3.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n this[offset + 2] = value >>> 16;\n this[offset + 3] = value >>> 24;\n return offset + 4;\n };\n Buffer3.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n if (value < 0) value = 4294967295 + value + 1;\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n Buffer3.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff"));\n });\n Buffer3.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff"));\n });\n function checkIEEE754(buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError("Index out of range");\n if (offset < 0) throw new RangeError("Index out of range");\n }\n function writeFloat(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 34028234663852886e22, -34028234663852886e22);\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4;\n }\n Buffer3.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert);\n };\n Buffer3.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert);\n };\n function writeDouble(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 17976931348623157e292, -17976931348623157e292);\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8;\n }\n Buffer3.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert);\n };\n Buffer3.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert);\n };\n Buffer3.prototype.copy = function copy(target, targetStart, start, end) {\n if (!Buffer3.isBuffer(target)) throw new TypeError("argument should be a Buffer");\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start;\n if (end === start) return 0;\n if (target.length === 0 || this.length === 0) return 0;\n if (targetStart < 0) {\n throw new RangeError("targetStart out of bounds");\n }\n if (start < 0 || start >= this.length) throw new RangeError("Index out of range");\n if (end < 0) throw new RangeError("sourceEnd out of bounds");\n if (end > this.length) end = this.length;\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n const len = end - start;\n if (this === target && typeof Uint8Array.prototype.copyWithin === "function") {\n this.copyWithin(targetStart, start, end);\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n );\n }\n return len;\n };\n Buffer3.prototype.fill = function fill(val, start, end, encoding) {\n if (typeof val === "string") {\n if (typeof start === "string") {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === "string") {\n encoding = end;\n end = this.length;\n }\n if (encoding !== void 0 && typeof encoding !== "string") {\n throw new TypeError("encoding must be a string");\n }\n if (typeof encoding === "string" && !Buffer3.isEncoding(encoding)) {\n throw new TypeError("Unknown encoding: " + encoding);\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0);\n if (encoding === "utf8" && code < 128 || encoding === "latin1") {\n val = code;\n }\n }\n } else if (typeof val === "number") {\n val = val & 255;\n } else if (typeof val === "boolean") {\n val = Number(val);\n }\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError("Out of range index");\n }\n if (end <= start) {\n return this;\n }\n start = start >>> 0;\n end = end === void 0 ? this.length : end >>> 0;\n if (!val) val = 0;\n let i;\n if (typeof val === "number") {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n const bytes = Buffer3.isBuffer(val) ? val : Buffer3.from(val, encoding);\n const len = bytes.length;\n if (len === 0) {\n throw new TypeError(\'The value "\' + val + \'" is invalid for argument "value"\');\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n return this;\n };\n var errors = {};\n function E(sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor() {\n super();\n Object.defineProperty(this, "message", {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n });\n this.name = `${this.name} [${sym}]`;\n this.stack;\n delete this.name;\n }\n get code() {\n return sym;\n }\n set code(value) {\n Object.defineProperty(this, "code", {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n }\n toString() {\n return `${this.name} [${sym}]: ${this.message}`;\n }\n };\n }\n E(\n "ERR_BUFFER_OUT_OF_BOUNDS",\n function(name) {\n if (name) {\n return `${name} is outside of buffer bounds`;\n }\n return "Attempt to access memory outside buffer bounds";\n },\n RangeError\n );\n E(\n "ERR_INVALID_ARG_TYPE",\n function(name, actual) {\n return `The "${name}" argument must be of type number. Received type ${typeof actual}`;\n },\n TypeError\n );\n E(\n "ERR_OUT_OF_RANGE",\n function(str, range, input) {\n let msg = `The value of "${str}" is out of range.`;\n let received = input;\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input));\n } else if (typeof input === "bigint") {\n received = String(input);\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received);\n }\n received += "n";\n }\n msg += ` It must be ${range}. Received ${received}`;\n return msg;\n },\n RangeError\n );\n function addNumericalSeparator(val) {\n let res = "";\n let i = val.length;\n const start = val[0] === "-" ? 1 : 0;\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`;\n }\n return `${val.slice(0, i)}${res}`;\n }\n function checkBounds(buf, offset, byteLength2) {\n validateNumber(offset, "offset");\n if (buf[offset] === void 0 || buf[offset + byteLength2] === void 0) {\n boundsError(offset, buf.length - (byteLength2 + 1));\n }\n }\n function checkIntBI(value, min, max, buf, offset, byteLength2) {\n if (value > max || value < min) {\n const n = typeof min === "bigint" ? "n" : "";\n let range;\n if (byteLength2 > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength2 + 1) * 8}${n}`;\n } else {\n range = `>= -(2${n} ** ${(byteLength2 + 1) * 8 - 1}${n}) and < 2 ** ${(byteLength2 + 1) * 8 - 1}${n}`;\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`;\n }\n throw new errors.ERR_OUT_OF_RANGE("value", range, value);\n }\n checkBounds(buf, offset, byteLength2);\n }\n function validateNumber(value, name) {\n if (typeof value !== "number") {\n throw new errors.ERR_INVALID_ARG_TYPE(name, "number", value);\n }\n }\n function boundsError(value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type);\n throw new errors.ERR_OUT_OF_RANGE(type || "offset", "an integer", value);\n }\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();\n }\n throw new errors.ERR_OUT_OF_RANGE(\n type || "offset",\n `>= ${type ? 1 : 0} and <= ${length}`,\n value\n );\n }\n var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\n function base64clean(str) {\n str = str.split("=")[0];\n str = str.trim().replace(INVALID_BASE64_RE, "");\n if (str.length < 2) return "";\n while (str.length % 4 !== 0) {\n str = str + "=";\n }\n return str;\n }\n function utf8ToBytes(string, units) {\n units = units || Infinity;\n let codePoint;\n const length = string.length;\n let leadSurrogate = null;\n const bytes = [];\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n if (codePoint > 55295 && codePoint < 57344) {\n if (!leadSurrogate) {\n if (codePoint > 56319) {\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n } else if (i + 1 === length) {\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n }\n leadSurrogate = codePoint;\n continue;\n }\n if (codePoint < 56320) {\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n leadSurrogate = codePoint;\n continue;\n }\n codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n } else if (leadSurrogate) {\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n }\n leadSurrogate = null;\n if (codePoint < 128) {\n if ((units -= 1) < 0) break;\n bytes.push(codePoint);\n } else if (codePoint < 2048) {\n if ((units -= 2) < 0) break;\n bytes.push(\n codePoint >> 6 | 192,\n codePoint & 63 | 128\n );\n } else if (codePoint < 65536) {\n if ((units -= 3) < 0) break;\n bytes.push(\n codePoint >> 12 | 224,\n codePoint >> 6 & 63 | 128,\n codePoint & 63 | 128\n );\n } else if (codePoint < 1114112) {\n if ((units -= 4) < 0) break;\n bytes.push(\n codePoint >> 18 | 240,\n codePoint >> 12 & 63 | 128,\n codePoint >> 6 & 63 | 128,\n codePoint & 63 | 128\n );\n } else {\n throw new Error("Invalid code point");\n }\n }\n return bytes;\n }\n function asciiToBytes(str) {\n const byteArray = [];\n for (let i = 0; i < str.length; ++i) {\n byteArray.push(str.charCodeAt(i) & 255);\n }\n return byteArray;\n }\n function utf16leToBytes(str, units) {\n let c, hi, lo;\n const byteArray = [];\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break;\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n return byteArray;\n }\n function base64ToBytes(str) {\n return base64.toByteArray(base64clean(str));\n }\n function blitBuffer(src, dst, offset, length) {\n let i;\n for (i = 0; i < length; ++i) {\n if (i + offset >= dst.length || i >= src.length) break;\n dst[i + offset] = src[i];\n }\n return i;\n }\n function isInstance(obj, type) {\n return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;\n }\n function numberIsNaN(obj) {\n return obj !== obj;\n }\n var hexSliceLookupTable = function() {\n const alphabet = "0123456789abcdef";\n const table = new Array(256);\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16;\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n return table;\n }();\n function defineBigIntMethod(fn) {\n return typeof BigInt === "undefined" ? BufferBigIntNotDefined : fn;\n }\n function BufferBigIntNotDefined() {\n throw new Error("BigInt not supported");\n }\n }\n });\n\n // runner/shims.js\n var import_buffer;\n var init_shims = __esm({\n "runner/shims.js"() {\n "use strict";\n import_buffer = __toESM(require_buffer(), 1);\n globalThis.Buffer = globalThis.Buffer || import_buffer.Buffer;\n if (typeof globalThis.queueMicrotask !== "function") {\n globalThis.queueMicrotask = (callback) => {\n if (typeof callback !== "function") {\n throw new TypeError("queueMicrotask callback must be a function");\n }\n Promise.resolve().then(callback);\n };\n }\n globalThis.process = globalThis.process || { env: {}, platform: "browser", browser: true, version: "", versions: {}, nextTick: (fn, ...a) => queueMicrotask(() => fn(...a)) };\n }\n });\n\n // ../../platform-shells/browser/law_preparation_worker.ts\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/index.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/is-message.js\n init_shims();\n function isMessage(arg, schema) {\n const isMessage2 = arg !== null && typeof arg == "object" && "$typeName" in arg && typeof arg.$typeName == "string";\n if (!isMessage2) {\n return false;\n }\n if (schema === void 0) {\n return true;\n }\n return schema.typeName === arg.$typeName;\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/create.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/descriptors.js\n init_shims();\n var ScalarType;\n (function(ScalarType2) {\n ScalarType2[ScalarType2["DOUBLE"] = 1] = "DOUBLE";\n ScalarType2[ScalarType2["FLOAT"] = 2] = "FLOAT";\n ScalarType2[ScalarType2["INT64"] = 3] = "INT64";\n ScalarType2[ScalarType2["UINT64"] = 4] = "UINT64";\n ScalarType2[ScalarType2["INT32"] = 5] = "INT32";\n ScalarType2[ScalarType2["FIXED64"] = 6] = "FIXED64";\n ScalarType2[ScalarType2["FIXED32"] = 7] = "FIXED32";\n ScalarType2[ScalarType2["BOOL"] = 8] = "BOOL";\n ScalarType2[ScalarType2["STRING"] = 9] = "STRING";\n ScalarType2[ScalarType2["BYTES"] = 12] = "BYTES";\n ScalarType2[ScalarType2["UINT32"] = 13] = "UINT32";\n ScalarType2[ScalarType2["SFIXED32"] = 15] = "SFIXED32";\n ScalarType2[ScalarType2["SFIXED64"] = 16] = "SFIXED64";\n ScalarType2[ScalarType2["SINT32"] = 17] = "SINT32";\n ScalarType2[ScalarType2["SINT64"] = 18] = "SINT64";\n })(ScalarType || (ScalarType = {}));\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js\n init_shims();\n function varint64read() {\n let lowBits = 0;\n let highBits = 0;\n for (let shift = 0; shift < 28; shift += 7) {\n let b = this.buf[this.pos++];\n lowBits |= (b & 127) << shift;\n if ((b & 128) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n let middleByte = this.buf[this.pos++];\n lowBits |= (middleByte & 15) << 28;\n highBits = (middleByte & 112) >> 4;\n if ((middleByte & 128) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n for (let shift = 3; shift <= 31; shift += 7) {\n let b = this.buf[this.pos++];\n highBits |= (b & 127) << shift;\n if ((b & 128) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n throw new Error("invalid varint");\n }\n function varint64write(lo, hi, bytes) {\n for (let i = 0; i < 28; i = i + 7) {\n const shift = lo >>> i;\n const hasNext = !(shift >>> 7 == 0 && hi == 0);\n const byte = (hasNext ? shift | 128 : shift) & 255;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n const splitBits = lo >>> 28 & 15 | (hi & 7) << 4;\n const hasMoreBits = !(hi >> 3 == 0);\n bytes.push((hasMoreBits ? splitBits | 128 : splitBits) & 255);\n if (!hasMoreBits) {\n return;\n }\n for (let i = 3; i < 31; i = i + 7) {\n const shift = hi >>> i;\n const hasNext = !(shift >>> 7 == 0);\n const byte = (hasNext ? shift | 128 : shift) & 255;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n bytes.push(hi >>> 31 & 1);\n }\n var TWO_PWR_32_DBL = 4294967296;\n function int64FromString(dec) {\n const minus = dec[0] === "-";\n if (minus) {\n dec = dec.slice(1);\n }\n const base = 1e6;\n let lowBits = 0;\n let highBits = 0;\n function add1e6digit(begin, end) {\n const digit1e6 = Number(dec.slice(begin, end));\n highBits *= base;\n lowBits = lowBits * base + digit1e6;\n if (lowBits >= TWO_PWR_32_DBL) {\n highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);\n lowBits = lowBits % TWO_PWR_32_DBL;\n }\n }\n add1e6digit(-24, -18);\n add1e6digit(-18, -12);\n add1e6digit(-12, -6);\n add1e6digit(-6);\n return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);\n }\n function int64ToString(lo, hi) {\n let bits = newBits(lo, hi);\n const negative = bits.hi & 2147483648;\n if (negative) {\n bits = negate(bits.lo, bits.hi);\n }\n const result2 = uInt64ToString(bits.lo, bits.hi);\n return negative ? "-" + result2 : result2;\n }\n function uInt64ToString(lo, hi) {\n ({ lo, hi } = toUnsigned(lo, hi));\n if (hi <= 2097151) {\n return String(TWO_PWR_32_DBL * hi + lo);\n }\n const low = lo & 16777215;\n const mid = (lo >>> 24 | hi << 8) & 16777215;\n const high = hi >> 16 & 65535;\n let digitA = low + mid * 6777216 + high * 6710656;\n let digitB = mid + high * 8147497;\n let digitC = high * 2;\n const base = 1e7;\n if (digitA >= base) {\n digitB += Math.floor(digitA / base);\n digitA %= base;\n }\n if (digitB >= base) {\n digitC += Math.floor(digitB / base);\n digitB %= base;\n }\n return digitC.toString() + decimalFrom1e7WithLeadingZeros(digitB) + decimalFrom1e7WithLeadingZeros(digitA);\n }\n function toUnsigned(lo, hi) {\n return { lo: lo >>> 0, hi: hi >>> 0 };\n }\n function newBits(lo, hi) {\n return { lo: lo | 0, hi: hi | 0 };\n }\n function negate(lowBits, highBits) {\n highBits = ~highBits;\n if (lowBits) {\n lowBits = ~lowBits + 1;\n } else {\n highBits += 1;\n }\n return newBits(lowBits, highBits);\n }\n var decimalFrom1e7WithLeadingZeros = (digit1e7) => {\n const partial = String(digit1e7);\n return "0000000".slice(partial.length) + partial;\n };\n function varint32write(value, bytes) {\n if (value >= 0) {\n while (value > 127) {\n bytes.push(value & 127 | 128);\n value = value >>> 7;\n }\n bytes.push(value);\n } else {\n for (let i = 0; i < 9; i++) {\n bytes.push(value & 127 | 128);\n value = value >> 7;\n }\n bytes.push(1);\n }\n }\n function varint32read() {\n let b = this.buf[this.pos++];\n let result2 = b & 127;\n if ((b & 128) == 0) {\n this.assertBounds();\n return result2;\n }\n b = this.buf[this.pos++];\n result2 |= (b & 127) << 7;\n if ((b & 128) == 0) {\n this.assertBounds();\n return result2;\n }\n b = this.buf[this.pos++];\n result2 |= (b & 127) << 14;\n if ((b & 128) == 0) {\n this.assertBounds();\n return result2;\n }\n b = this.buf[this.pos++];\n result2 |= (b & 127) << 21;\n if ((b & 128) == 0) {\n this.assertBounds();\n return result2;\n }\n b = this.buf[this.pos++];\n result2 |= (b & 15) << 28;\n for (let readBytes = 5; (b & 128) !== 0 && readBytes < 10; readBytes++)\n b = this.buf[this.pos++];\n if ((b & 128) != 0)\n throw new Error("invalid varint");\n this.assertBounds();\n return result2 >>> 0;\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js\n var protoInt64 = /* @__PURE__ */ makeInt64Support();\n function makeInt64Support() {\n const dv = new DataView(new ArrayBuffer(8));\n const ok = typeof BigInt === "function" && typeof dv.getBigInt64 === "function" && typeof dv.getBigUint64 === "function" && typeof dv.setBigInt64 === "function" && typeof dv.setBigUint64 === "function" && (!!globalThis.Deno || !!globalThis.Bun || typeof process != "object" || typeof process.env != "object" || process.env.BUF_BIGINT_DISABLE !== "1");\n if (ok) {\n const MIN = BigInt("-9223372036854775808");\n const MAX = BigInt("9223372036854775807");\n const UMIN = BigInt("0");\n const UMAX = BigInt("18446744073709551615");\n return {\n zero: BigInt(0),\n supported: true,\n parse(value) {\n const bi = typeof value == "bigint" ? value : BigInt(value);\n if (bi > MAX || bi < MIN) {\n throw new Error(`invalid int64: ${value}`);\n }\n return bi;\n },\n uParse(value) {\n const bi = typeof value == "bigint" ? value : BigInt(value);\n if (bi > UMAX || bi < UMIN) {\n throw new Error(`invalid uint64: ${value}`);\n }\n return bi;\n },\n enc(value) {\n dv.setBigInt64(0, this.parse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true)\n };\n },\n uEnc(value) {\n dv.setBigInt64(0, this.uParse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true)\n };\n },\n dec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigInt64(0, true);\n },\n uDec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigUint64(0, true);\n }\n };\n }\n return {\n zero: "0",\n supported: false,\n parse(value) {\n if (typeof value != "string") {\n value = value.toString();\n }\n assertInt64String(value);\n return value;\n },\n uParse(value) {\n if (typeof value != "string") {\n value = value.toString();\n }\n assertUInt64String(value);\n return value;\n },\n enc(value) {\n if (typeof value != "string") {\n value = value.toString();\n }\n assertInt64String(value);\n return int64FromString(value);\n },\n uEnc(value) {\n if (typeof value != "string") {\n value = value.toString();\n }\n assertUInt64String(value);\n return int64FromString(value);\n },\n dec(lo, hi) {\n return int64ToString(lo, hi);\n },\n uDec(lo, hi) {\n return uInt64ToString(lo, hi);\n }\n };\n }\n function assertInt64String(value) {\n if (!/^-?[0-9]+$/.test(value)) {\n throw new Error("invalid int64: " + value);\n }\n }\n function assertUInt64String(value) {\n if (!/^[0-9]+$/.test(value)) {\n throw new Error("invalid uint64: " + value);\n }\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js\n function scalarZeroValue(type, longAsString) {\n switch (type) {\n case ScalarType.STRING:\n return "";\n case ScalarType.BOOL:\n return false;\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n return 0;\n case ScalarType.INT64:\n case ScalarType.UINT64:\n case ScalarType.SFIXED64:\n case ScalarType.FIXED64:\n case ScalarType.SINT64:\n return longAsString ? "0" : protoInt64.zero;\n case ScalarType.BYTES:\n return new Uint8Array(0);\n default:\n return 0;\n }\n }\n function isScalarZeroValue(type, value) {\n switch (type) {\n case ScalarType.BOOL:\n return value === false;\n case ScalarType.STRING:\n return value === "";\n case ScalarType.BYTES:\n return value instanceof Uint8Array && !value.byteLength;\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n return Object.is(value, 0);\n default:\n return value == 0;\n }\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js\n init_shims();\n var IMPLICIT = 2;\n var unsafeLocal = Symbol.for("reflect unsafe local");\n function unsafeOneofCase(target, oneof) {\n const c = target[oneof.localName].case;\n if (c === void 0) {\n return c;\n }\n return oneof.fields.find((f) => f.localName === c);\n }\n function unsafeIsSet(target, field) {\n const name = field.localName;\n if (field.oneof) {\n return target[field.oneof.localName].case === name;\n }\n if (field.presence != IMPLICIT) {\n return target[name] !== void 0 && Object.prototype.hasOwnProperty.call(target, name);\n }\n switch (field.fieldKind) {\n case "list":\n return target[name].length > 0;\n case "map":\n return Object.keys(target[name]).length > 0;\n case "scalar":\n return !isScalarZeroValue(field.scalar, target[name]);\n case "enum":\n return target[name] !== field.enum.values[0].number;\n }\n throw new Error("message field with implicit presence");\n }\n function unsafeIsSetExplicit(target, localName) {\n return Object.prototype.hasOwnProperty.call(target, localName) && target[localName] !== void 0;\n }\n function unsafeGet(target, field) {\n if (field.oneof) {\n const oneof = target[field.oneof.localName];\n if (oneof.case === field.localName) {\n return oneof.value;\n }\n return void 0;\n }\n return target[field.localName];\n }\n function unsafeSet(target, field, value) {\n if (field.oneof) {\n target[field.oneof.localName] = {\n case: field.localName,\n value\n };\n } else {\n target[field.localName] = value;\n }\n }\n function unsafeClear(target, field) {\n const name = field.localName;\n if (field.oneof) {\n const oneofLocalName = field.oneof.localName;\n if (target[oneofLocalName].case === name) {\n target[oneofLocalName] = { case: void 0 };\n }\n } else if (field.presence != IMPLICIT) {\n delete target[name];\n } else {\n switch (field.fieldKind) {\n case "map":\n target[name] = {};\n break;\n case "list":\n target[name] = [];\n break;\n case "enum":\n target[name] = field.enum.values[0].number;\n break;\n case "scalar":\n target[name] = scalarZeroValue(field.scalar, field.longAsString);\n break;\n }\n }\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js\n function isObject(arg) {\n return arg !== null && typeof arg == "object" && !Array.isArray(arg);\n }\n function isReflectList(arg, field) {\n var _a, _b, _c, _d;\n if (isObject(arg) && unsafeLocal in arg && "add" in arg && "field" in arg && typeof arg.field == "function") {\n if (field !== void 0) {\n const a = field;\n const b = arg.field();\n return a.listKind == b.listKind && a.scalar === b.scalar && ((_a = a.message) === null || _a === void 0 ? void 0 : _a.typeName) === ((_b = b.message) === null || _b === void 0 ? void 0 : _b.typeName) && ((_c = a.enum) === null || _c === void 0 ? void 0 : _c.typeName) === ((_d = b.enum) === null || _d === void 0 ? void 0 : _d.typeName);\n }\n return true;\n }\n return false;\n }\n function isReflectMap(arg, field) {\n var _a, _b, _c, _d;\n if (isObject(arg) && unsafeLocal in arg && "has" in arg && "field" in arg && typeof arg.field == "function") {\n if (field !== void 0) {\n const a = field, b = arg.field();\n return a.mapKey === b.mapKey && a.mapKind == b.mapKind && a.scalar === b.scalar && ((_a = a.message) === null || _a === void 0 ? void 0 : _a.typeName) === ((_b = b.message) === null || _b === void 0 ? void 0 : _b.typeName) && ((_c = a.enum) === null || _c === void 0 ? void 0 : _c.typeName) === ((_d = b.enum) === null || _d === void 0 ? void 0 : _d.typeName);\n }\n return true;\n }\n return false;\n }\n function isReflectMessage(arg, messageDesc2) {\n return isObject(arg) && unsafeLocal in arg && "desc" in arg && isObject(arg.desc) && arg.desc.kind === "message" && (messageDesc2 === void 0 || arg.desc.typeName == messageDesc2.typeName);\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js\n init_shims();\n function isWrapper(arg) {\n return isWrapperTypeName(arg.$typeName);\n }\n function isWrapperDesc(messageDesc2) {\n const f = messageDesc2.fields[0];\n return isWrapperTypeName(messageDesc2.typeName) && f !== void 0 && f.fieldKind == "scalar" && f.name == "value" && f.number == 1;\n }\n function isWrapperTypeName(name) {\n return name.startsWith("google.protobuf.") && [\n "DoubleValue",\n "FloatValue",\n "Int64Value",\n "UInt64Value",\n "Int32Value",\n "UInt32Value",\n "BoolValue",\n "StringValue",\n "BytesValue"\n ].includes(name.substring(16));\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/create.js\n var EDITION_PROTO3 = 999;\n var EDITION_PROTO2 = 998;\n var IMPLICIT2 = 2;\n function create(schema, init) {\n if (isMessage(init, schema)) {\n return init;\n }\n const message = createZeroMessage(schema);\n if (init !== void 0) {\n initMessage(schema, message, init);\n }\n return message;\n }\n function initMessage(messageDesc2, message, init) {\n for (const member of messageDesc2.members) {\n let value = init[member.localName];\n if (value == null) {\n continue;\n }\n let field;\n if (member.kind == "oneof") {\n const oneofField = unsafeOneofCase(init, member);\n if (!oneofField) {\n continue;\n }\n field = oneofField;\n value = unsafeGet(init, oneofField);\n } else {\n field = member;\n }\n switch (field.fieldKind) {\n case "message":\n value = toMessage(field, value);\n break;\n case "scalar":\n value = initScalar(field, value);\n break;\n case "list":\n value = initList(field, value);\n break;\n case "map":\n value = initMap(field, value);\n break;\n }\n unsafeSet(message, field, value);\n }\n return message;\n }\n function initScalar(field, value) {\n if (field.scalar == ScalarType.BYTES) {\n return toU8Arr(value);\n }\n return value;\n }\n function initMap(field, value) {\n if (isObject(value)) {\n if (field.scalar == ScalarType.BYTES) {\n return convertObjectValues(value, toU8Arr);\n }\n if (field.mapKind == "message") {\n return convertObjectValues(value, (val) => toMessage(field, val));\n }\n }\n return value;\n }\n function initList(field, value) {\n if (Array.isArray(value)) {\n if (field.scalar == ScalarType.BYTES) {\n return value.map(toU8Arr);\n }\n if (field.listKind == "message") {\n return value.map((item) => toMessage(field, item));\n }\n }\n return value;\n }\n function toMessage(field, value) {\n if (field.fieldKind == "message" && !field.oneof && isWrapperDesc(field.message)) {\n return initScalar(field.message.fields[0], value);\n }\n if (isObject(value)) {\n if (field.message.typeName == "google.protobuf.Struct" && field.parent.typeName !== "google.protobuf.Value") {\n return value;\n }\n if (!isMessage(value, field.message)) {\n return create(field.message, value);\n }\n }\n return value;\n }\n function toU8Arr(value) {\n return Array.isArray(value) ? new Uint8Array(value) : value;\n }\n function convertObjectValues(obj, fn) {\n const ret = {};\n for (const entry of Object.entries(obj)) {\n ret[entry[0]] = fn(entry[1]);\n }\n return ret;\n }\n var tokenZeroMessageField = Symbol();\n var messagePrototypes = /* @__PURE__ */ new WeakMap();\n function createZeroMessage(desc) {\n let msg;\n if (!needsPrototypeChain(desc)) {\n msg = {\n $typeName: desc.typeName\n };\n for (const member of desc.members) {\n if (member.kind == "oneof" || member.presence == IMPLICIT2) {\n msg[member.localName] = createZeroField(member);\n }\n }\n } else {\n const cached = messagePrototypes.get(desc);\n let prototype;\n let members;\n if (cached) {\n ({ prototype, members } = cached);\n } else {\n prototype = {};\n members = /* @__PURE__ */ new Set();\n for (const member of desc.members) {\n if (member.kind == "oneof") {\n continue;\n }\n if (member.fieldKind != "scalar" && member.fieldKind != "enum") {\n continue;\n }\n if (member.presence == IMPLICIT2) {\n continue;\n }\n members.add(member);\n prototype[member.localName] = createZeroField(member);\n }\n messagePrototypes.set(desc, { prototype, members });\n }\n msg = Object.create(prototype);\n msg.$typeName = desc.typeName;\n for (const member of desc.members) {\n if (members.has(member)) {\n continue;\n }\n if (member.kind == "field") {\n if (member.fieldKind == "message") {\n continue;\n }\n if (member.fieldKind == "scalar" || member.fieldKind == "enum") {\n if (member.presence != IMPLICIT2) {\n continue;\n }\n }\n }\n msg[member.localName] = createZeroField(member);\n }\n }\n return msg;\n }\n function needsPrototypeChain(desc) {\n switch (desc.file.edition) {\n case EDITION_PROTO3:\n return false;\n case EDITION_PROTO2:\n return true;\n default:\n return desc.fields.some((f) => f.presence != IMPLICIT2 && f.fieldKind != "message" && !f.oneof);\n }\n }\n function createZeroField(field) {\n if (field.kind == "oneof") {\n return { case: void 0 };\n }\n if (field.fieldKind == "list") {\n return [];\n }\n if (field.fieldKind == "map") {\n return {};\n }\n if (field.fieldKind == "message") {\n return tokenZeroMessageField;\n }\n const defaultValue = field.getDefaultValue();\n if (defaultValue !== void 0) {\n return field.fieldKind == "scalar" && field.longAsString ? defaultValue.toString() : defaultValue;\n }\n return field.fieldKind == "scalar" ? scalarZeroValue(field.scalar, field.longAsString) : field.enum.values[0].number;\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js\n init_shims();\n var FieldError = class extends Error {\n constructor(fieldOrOneof, message, name = "FieldValueInvalidError") {\n super(message);\n this.name = name;\n this.field = () => fieldOrOneof;\n }\n };\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js\n init_shims();\n var symbol = Symbol.for("@bufbuild/protobuf/text-encoding");\n function getTextEncoding() {\n if (globalThis[symbol] == void 0) {\n const te = new globalThis.TextEncoder();\n const td = new globalThis.TextDecoder();\n let tdStrict;\n globalThis[symbol] = {\n encodeUtf8(text) {\n return te.encode(text);\n },\n decodeUtf8(bytes, strict) {\n if (strict) {\n if (tdStrict === void 0) {\n tdStrict = new globalThis.TextDecoder("utf-8", { fatal: true });\n }\n return tdStrict.decode(bytes);\n }\n return td.decode(bytes);\n },\n checkUtf8(text) {\n try {\n encodeURIComponent(text);\n return true;\n } catch (_) {\n return false;\n }\n }\n };\n }\n return globalThis[symbol];\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js\n var WireType;\n (function(WireType2) {\n WireType2[WireType2["Varint"] = 0] = "Varint";\n WireType2[WireType2["Bit64"] = 1] = "Bit64";\n WireType2[WireType2["LengthDelimited"] = 2] = "LengthDelimited";\n WireType2[WireType2["StartGroup"] = 3] = "StartGroup";\n WireType2[WireType2["EndGroup"] = 4] = "EndGroup";\n WireType2[WireType2["Bit32"] = 5] = "Bit32";\n })(WireType || (WireType = {}));\n var FLOAT32_MAX = 34028234663852886e22;\n var FLOAT32_MIN = -34028234663852886e22;\n var UINT32_MAX = 4294967295;\n var INT32_MAX = 2147483647;\n var INT32_MIN = -2147483648;\n var BinaryWriter = class {\n constructor(encodeUtf8 = getTextEncoding().encodeUtf8) {\n this.encodeUtf8 = encodeUtf8;\n this.stack = [];\n this.chunks = [];\n this.buf = [];\n }\n /**\n * Return all bytes written and reset this writer.\n */\n finish() {\n if (this.buf.length) {\n this.chunks.push(new Uint8Array(this.buf));\n this.buf = [];\n }\n let len = 0;\n for (let i = 0; i < this.chunks.length; i++)\n len += this.chunks[i].length;\n let bytes = new Uint8Array(len);\n let offset = 0;\n for (let i = 0; i < this.chunks.length; i++) {\n bytes.set(this.chunks[i], offset);\n offset += this.chunks[i].length;\n }\n this.chunks = [];\n return bytes;\n }\n /**\n * Start a new fork for length-delimited data like a message\n * or a packed repeated field.\n *\n * Must be joined later with `join()`.\n */\n fork() {\n this.stack.push({ chunks: this.chunks, buf: this.buf });\n this.chunks = [];\n this.buf = [];\n return this;\n }\n /**\n * Join the last fork. Write its length and bytes, then\n * return to the previous state.\n */\n join() {\n let chunk = this.finish();\n let prev = this.stack.pop();\n if (!prev)\n throw new Error("invalid state, fork stack empty");\n this.chunks = prev.chunks;\n this.buf = prev.buf;\n this.uint32(chunk.byteLength);\n return this.raw(chunk);\n }\n /**\n * Writes a tag (field number and wire type).\n *\n * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n *\n * Generated code should compute the tag ahead of time and call `uint32()`.\n */\n tag(fieldNo, type) {\n return this.uint32((fieldNo << 3 | type) >>> 0);\n }\n /**\n * Write a chunk of raw bytes.\n */\n raw(chunk) {\n if (this.buf.length) {\n this.chunks.push(new Uint8Array(this.buf));\n this.buf = [];\n }\n this.chunks.push(chunk);\n return this;\n }\n /**\n * Write a `uint32` value, an unsigned 32 bit varint.\n */\n uint32(value) {\n assertUInt32(value);\n while (value > 127) {\n this.buf.push(value & 127 | 128);\n value = value >>> 7;\n }\n this.buf.push(value);\n return this;\n }\n /**\n * Write a `int32` value, a signed 32 bit varint.\n */\n int32(value) {\n assertInt32(value);\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `bool` value, a varint.\n */\n bool(value) {\n this.buf.push(value ? 1 : 0);\n return this;\n }\n /**\n * Write a `bytes` value, length-delimited arbitrary data.\n */\n bytes(value) {\n this.uint32(value.byteLength);\n return this.raw(value);\n }\n /**\n * Write a `string` value, length-delimited data converted to UTF-8 text.\n */\n string(value) {\n let chunk = this.encodeUtf8(value);\n this.uint32(chunk.byteLength);\n return this.raw(chunk);\n }\n /**\n * Write a `float` value, 32-bit floating point number.\n */\n float(value) {\n assertFloat32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setFloat32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `double` value, a 64-bit floating point number.\n */\n double(value) {\n let chunk = new Uint8Array(8);\n new DataView(chunk.buffer).setFloat64(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n */\n fixed32(value) {\n assertUInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setUint32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n */\n sfixed32(value) {\n assertInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setInt32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n */\n sint32(value) {\n assertInt32(value);\n value = (value << 1 ^ value >> 31) >>> 0;\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `sfixed64` value, a signed, fixed-length 64-bit integer.\n */\n sfixed64(value) {\n let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.enc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n */\n fixed64(value) {\n let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.uEnc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `int64` value, a signed 64-bit varint.\n */\n int64(value) {\n let tc = protoInt64.enc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n /**\n * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64(value) {\n const tc = protoInt64.enc(value), sign = tc.hi >> 31, lo = tc.lo << 1 ^ sign, hi = (tc.hi << 1 | tc.lo >>> 31) ^ sign;\n varint64write(lo, hi, this.buf);\n return this;\n }\n /**\n * Write a `uint64` value, an unsigned 64-bit varint.\n */\n uint64(value) {\n const tc = protoInt64.uEnc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n };\n var BinaryReader = class {\n constructor(buf, decodeUtf8 = getTextEncoding().decodeUtf8) {\n this.decodeUtf8 = decodeUtf8;\n this.varint64 = varint64read;\n this.uint32 = varint32read;\n this.buf = buf;\n this.len = buf.length;\n this.pos = 0;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n /**\n * Reads a tag - field number and wire type. Tags are uint32 varints; values\n * that do not fit in uint32 are rejected.\n */\n tag() {\n const start = this.pos;\n const tag = this.uint32();\n const bytesRead = this.pos - start;\n if (bytesRead > 5 || bytesRead == 5 && this.buf[this.pos - 1] > 15) {\n throw new Error("illegal tag: varint overflows uint32");\n }\n const fieldNo = tag >>> 3;\n const wireType = tag & 7;\n if (fieldNo <= 0 || wireType > 5) {\n throw new Error("illegal tag: field no " + fieldNo + " wire type " + wireType);\n }\n return [fieldNo, wireType];\n }\n /**\n * Skip one element and return the skipped data.\n *\n * When skipping StartGroup, provide the tags field number to check for\n * matching field number in the EndGroup tag. Recursion into nested groups\n * is guarded by the `recursionLimit` argument: When the limit is reached,\n * this method throws.\n */\n skip(wireType, fieldNo, recursionLimit = 100) {\n let start = this.pos;\n switch (wireType) {\n case WireType.Varint:\n while (this.buf[this.pos++] & 128) {\n }\n break;\n // @ts-ignore TS7029: Fallthrough case in switch -- ignore instead of expect-error for compiler settings without noFallthroughCasesInSwitch: true\n case WireType.Bit64:\n this.pos += 4;\n case WireType.Bit32:\n this.pos += 4;\n break;\n case WireType.LengthDelimited:\n let len = this.uint32();\n this.pos += len;\n break;\n case WireType.StartGroup:\n if (recursionLimit <= 0) {\n throw new Error("maximum recursion depth reached");\n }\n for (; ; ) {\n const [fn, wt] = this.tag();\n if (wt === WireType.EndGroup) {\n if (fieldNo !== void 0 && fn !== fieldNo) {\n throw new Error("invalid end group tag");\n }\n break;\n }\n this.skip(wt, fn, recursionLimit - 1);\n }\n break;\n default:\n throw new Error("cant skip wire type " + wireType);\n }\n this.assertBounds();\n return this.buf.subarray(start, this.pos);\n }\n /**\n * Throws error if position in byte array is out of range.\n */\n assertBounds() {\n if (this.pos > this.len)\n throw new RangeError("premature EOF");\n }\n /**\n * Read a `int32` field, a signed 32 bit varint.\n */\n int32() {\n return this.uint32() | 0;\n }\n /**\n * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n */\n sint32() {\n let zze = this.uint32();\n return zze >>> 1 ^ -(zze & 1);\n }\n /**\n * Read a `int64` field, a signed 64-bit varint.\n */\n int64() {\n return protoInt64.dec(...this.varint64());\n }\n /**\n * Read a `uint64` field, an unsigned 64-bit varint.\n */\n uint64() {\n return protoInt64.uDec(...this.varint64());\n }\n /**\n * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64() {\n let [lo, hi] = this.varint64();\n let s = -(lo & 1);\n lo = (lo >>> 1 | (hi & 1) << 31) ^ s;\n hi = hi >>> 1 ^ s;\n return protoInt64.dec(lo, hi);\n }\n /**\n * Read a `bool` field, a variant.\n */\n bool() {\n let [lo, hi] = this.varint64();\n return lo !== 0 || hi !== 0;\n }\n /**\n * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n */\n fixed32() {\n return this.view.getUint32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n */\n sfixed32() {\n return this.view.getInt32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n */\n fixed64() {\n return protoInt64.uDec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n */\n sfixed64() {\n return protoInt64.dec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `float` field, 32-bit floating point number.\n */\n float() {\n return this.view.getFloat32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `double` field, a 64-bit floating point number.\n */\n double() {\n return this.view.getFloat64((this.pos += 8) - 8, true);\n }\n /**\n * Read a `bytes` field, length-delimited arbitrary data.\n */\n bytes() {\n let len = this.uint32(), start = this.pos;\n this.pos += len;\n this.assertBounds();\n return this.buf.subarray(start, start + len);\n }\n /**\n * Read a `string` field, length-delimited data converted to UTF-8 text. If\n * `strict` is true, throw on invalid UTF-8 instead of substituting U+FFFD.\n */\n string(strict) {\n return this.decodeUtf8(this.bytes(), strict);\n }\n };\n function assertInt32(arg) {\n if (typeof arg == "string") {\n arg = Number(arg);\n } else if (typeof arg != "number") {\n throw new Error("invalid int32: " + typeof arg);\n }\n if (!Number.isInteger(arg) || arg > INT32_MAX || arg < INT32_MIN)\n throw new Error("invalid int32: " + arg);\n }\n function assertUInt32(arg) {\n if (typeof arg == "string") {\n arg = Number(arg);\n } else if (typeof arg != "number") {\n throw new Error("invalid uint32: " + typeof arg);\n }\n if (!Number.isInteger(arg) || arg > UINT32_MAX || arg < 0)\n throw new Error("invalid uint32: " + arg);\n }\n function assertFloat32(arg) {\n if (typeof arg == "string") {\n const o = arg;\n arg = Number(arg);\n if (Number.isNaN(arg) && o !== "NaN") {\n throw new Error("invalid float32: " + o);\n }\n } else if (typeof arg != "number") {\n throw new Error("invalid float32: " + typeof arg);\n }\n if (Number.isFinite(arg) && (arg > FLOAT32_MAX || arg < FLOAT32_MIN))\n throw new Error("invalid float32: " + arg);\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js\n function checkField(field, value) {\n const check = field.fieldKind == "list" ? isReflectList(value, field) : field.fieldKind == "map" ? isReflectMap(value, field) : checkSingular(field, value);\n if (check === true) {\n return void 0;\n }\n let reason;\n switch (field.fieldKind) {\n case "list":\n reason = `expected ${formatReflectList(field)}, got ${formatVal(value)}`;\n break;\n case "map":\n reason = `expected ${formatReflectMap(field)}, got ${formatVal(value)}`;\n break;\n default: {\n reason = reasonSingular(field, value, check);\n }\n }\n return new FieldError(field, reason);\n }\n function checkListItem(field, index, value) {\n const check = checkSingular(field, value);\n if (check !== true) {\n return new FieldError(field, `list item #${index + 1}: ${reasonSingular(field, value, check)}`);\n }\n return void 0;\n }\n function checkMapEntry(field, key, value) {\n const checkKey = checkScalarValue(key, field.mapKey);\n if (checkKey !== true) {\n return new FieldError(field, `invalid map key: ${reasonSingular({ scalar: field.mapKey }, key, checkKey)}`);\n }\n const checkVal = checkSingular(field, value);\n if (checkVal !== true) {\n return new FieldError(field, `map entry ${formatVal(key)}: ${reasonSingular(field, value, checkVal)}`);\n }\n return void 0;\n }\n function checkSingular(field, value) {\n if (field.scalar !== void 0) {\n return checkScalarValue(value, field.scalar);\n }\n if (field.enum !== void 0) {\n if (field.enum.open) {\n return checkScalarValue(value, ScalarType.INT32);\n }\n return field.enum.values.some((v) => v.number === value);\n }\n return isReflectMessage(value, field.message);\n }\n function checkScalarValue(value, scalar) {\n switch (scalar) {\n case ScalarType.DOUBLE:\n return typeof value == "number";\n case ScalarType.FLOAT:\n if (typeof value != "number") {\n return false;\n }\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return true;\n }\n if (value > FLOAT32_MAX || value < FLOAT32_MIN) {\n return `${value.toFixed()} out of range`;\n }\n return true;\n case ScalarType.INT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n if (typeof value !== "number" || !Number.isInteger(value)) {\n return false;\n }\n if (value > INT32_MAX || value < INT32_MIN) {\n return `${value.toFixed()} out of range`;\n }\n return true;\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n if (typeof value !== "number" || !Number.isInteger(value)) {\n return false;\n }\n if (value > UINT32_MAX || value < 0) {\n return `${value.toFixed()} out of range`;\n }\n return true;\n case ScalarType.BOOL:\n return typeof value == "boolean";\n case ScalarType.STRING:\n if (typeof value != "string") {\n return false;\n }\n return getTextEncoding().checkUtf8(value) || "invalid UTF8";\n case ScalarType.BYTES:\n return value instanceof Uint8Array;\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if (typeof value == "bigint" || typeof value == "number" || typeof value == "string" && value.length > 0) {\n try {\n protoInt64.parse(value);\n return true;\n } catch (_) {\n return `${value} out of range`;\n }\n }\n return false;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if (typeof value == "bigint" || typeof value == "number" || typeof value == "string" && value.length > 0) {\n try {\n protoInt64.uParse(value);\n return true;\n } catch (_) {\n return `${value} out of range`;\n }\n }\n return false;\n }\n }\n function reasonSingular(field, val, details) {\n details = typeof details == "string" ? `: ${details}` : `, got ${formatVal(val)}`;\n if (field.scalar !== void 0) {\n return `expected ${scalarTypeDescription(field.scalar)}` + details;\n }\n if (field.enum !== void 0) {\n return `expected ${field.enum.toString()}` + details;\n }\n return `expected ${formatReflectMessage(field.message)}` + details;\n }\n function formatVal(val) {\n switch (typeof val) {\n case "object":\n if (val === null) {\n return "null";\n }\n if (val instanceof Uint8Array) {\n return `Uint8Array(${val.length})`;\n }\n if (Array.isArray(val)) {\n return `Array(${val.length})`;\n }\n if (isReflectList(val)) {\n return formatReflectList(val.field());\n }\n if (isReflectMap(val)) {\n return formatReflectMap(val.field());\n }\n if (isReflectMessage(val)) {\n return formatReflectMessage(val.desc);\n }\n if (isMessage(val)) {\n return `message ${val.$typeName}`;\n }\n return "object";\n case "string":\n return val.length > 30 ? "string" : `"${val.split(\'"\').join(\'\\\\"\')}"`;\n case "boolean":\n return String(val);\n case "number":\n return String(val);\n case "bigint":\n return String(val) + "n";\n default:\n return typeof val;\n }\n }\n function formatReflectMessage(desc) {\n return `ReflectMessage (${desc.typeName})`;\n }\n function formatReflectList(field) {\n switch (field.listKind) {\n case "message":\n return `ReflectList (${field.message.toString()})`;\n case "enum":\n return `ReflectList (${field.enum.toString()})`;\n case "scalar":\n return `ReflectList (${ScalarType[field.scalar]})`;\n }\n }\n function formatReflectMap(field) {\n switch (field.mapKind) {\n case "message":\n return `ReflectMap (${ScalarType[field.mapKey]}, ${field.message.toString()})`;\n case "enum":\n return `ReflectMap (${ScalarType[field.mapKey]}, ${field.enum.toString()})`;\n case "scalar":\n return `ReflectMap (${ScalarType[field.mapKey]}, ${ScalarType[field.scalar]})`;\n }\n }\n function scalarTypeDescription(scalar) {\n switch (scalar) {\n case ScalarType.STRING:\n return "string";\n case ScalarType.BOOL:\n return "boolean";\n case ScalarType.INT64:\n case ScalarType.SINT64:\n case ScalarType.SFIXED64:\n return "bigint (int64)";\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n return "bigint (uint64)";\n case ScalarType.BYTES:\n return "Uint8Array";\n case ScalarType.DOUBLE:\n return "number (float64)";\n case ScalarType.FLOAT:\n return "number (float32)";\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n return "number (uint32)";\n case ScalarType.INT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n return "number (int32)";\n }\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js\n var NULL_VALUE = 0;\n function reflect(messageDesc2, message, check = true) {\n return new ReflectMessageImpl(messageDesc2, message, check);\n }\n var messageSortedFields = /* @__PURE__ */ new WeakMap();\n var ReflectMessageImpl = class {\n get sortedFields() {\n const cached = messageSortedFields.get(this.desc);\n if (cached) {\n return cached;\n }\n const sortedFields = this.desc.fields.concat().sort((a, b) => a.number - b.number);\n messageSortedFields.set(this.desc, sortedFields);\n return sortedFields;\n }\n constructor(messageDesc2, message, check = true) {\n this.lists = /* @__PURE__ */ new Map();\n this.maps = /* @__PURE__ */ new Map();\n this.check = check;\n this.desc = messageDesc2;\n this.message = this[unsafeLocal] = message !== null && message !== void 0 ? message : create(messageDesc2);\n this.fields = messageDesc2.fields;\n this.oneofs = messageDesc2.oneofs;\n this.members = messageDesc2.members;\n }\n findNumber(number) {\n if (!this._fieldsByNumber) {\n this._fieldsByNumber = new Map(this.desc.fields.map((f) => [f.number, f]));\n }\n return this._fieldsByNumber.get(number);\n }\n oneofCase(oneof) {\n assertOwn(this.message, oneof);\n return unsafeOneofCase(this.message, oneof);\n }\n isSet(field) {\n assertOwn(this.message, field);\n return unsafeIsSet(this.message, field);\n }\n clear(field) {\n assertOwn(this.message, field);\n unsafeClear(this.message, field);\n }\n get(field) {\n assertOwn(this.message, field);\n const value = unsafeGet(this.message, field);\n switch (field.fieldKind) {\n case "list":\n let list = this.lists.get(field);\n if (!list || list[unsafeLocal] !== value) {\n this.lists.set(\n field,\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n list = new ReflectListImpl(field, value, this.check)\n );\n }\n return list;\n case "map":\n let map = this.maps.get(field);\n if (!map || map[unsafeLocal] !== value) {\n this.maps.set(\n field,\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n map = new ReflectMapImpl(field, value, this.check)\n );\n }\n return map;\n case "message":\n return messageToReflect(field, value, this.check);\n case "scalar":\n return value === void 0 ? scalarZeroValue(field.scalar, false) : longToReflect(field, value);\n case "enum":\n return value !== null && value !== void 0 ? value : field.enum.values[0].number;\n }\n }\n set(field, value) {\n assertOwn(this.message, field);\n if (this.check) {\n const err = checkField(field, value);\n if (err) {\n throw err;\n }\n }\n let local;\n if (field.fieldKind == "message") {\n local = messageToLocal(field, value);\n } else if (isReflectMap(value) || isReflectList(value)) {\n local = value[unsafeLocal];\n } else {\n local = longToLocal(field, value);\n }\n unsafeSet(this.message, field, local);\n }\n getUnknown() {\n return this.message.$unknown;\n }\n setUnknown(value) {\n this.message.$unknown = value;\n }\n };\n function assertOwn(owner, member) {\n if (member.parent.typeName !== owner.$typeName) {\n throw new FieldError(member, `cannot use ${member.toString()} with message ${owner.$typeName}`, "ForeignFieldError");\n }\n }\n var ReflectListImpl = class {\n field() {\n return this._field;\n }\n get size() {\n return this._arr.length;\n }\n constructor(field, unsafeInput, check) {\n this._field = field;\n this._arr = this[unsafeLocal] = unsafeInput;\n this.check = check;\n }\n get(index) {\n const item = this._arr[index];\n return item === void 0 ? void 0 : listItemToReflect(this._field, item, this.check);\n }\n set(index, item) {\n if (index < 0 || index >= this._arr.length) {\n throw new FieldError(this._field, `list item #${index + 1}: out of range`);\n }\n if (this.check) {\n const err = checkListItem(this._field, index, item);\n if (err) {\n throw err;\n }\n }\n this._arr[index] = listItemToLocal(this._field, item);\n }\n add(item) {\n if (this.check) {\n const err = checkListItem(this._field, this._arr.length, item);\n if (err) {\n throw err;\n }\n }\n this._arr.push(listItemToLocal(this._field, item));\n return void 0;\n }\n clear() {\n this._arr.splice(0, this._arr.length);\n }\n [Symbol.iterator]() {\n return this.values();\n }\n keys() {\n return this._arr.keys();\n }\n *values() {\n for (const item of this._arr) {\n yield listItemToReflect(this._field, item, this.check);\n }\n }\n *entries() {\n for (let i = 0; i < this._arr.length; i++) {\n yield [i, listItemToReflect(this._field, this._arr[i], this.check)];\n }\n }\n };\n var ReflectMapImpl = class {\n constructor(field, unsafeInput, check = true) {\n this.obj = this[unsafeLocal] = unsafeInput !== null && unsafeInput !== void 0 ? unsafeInput : {};\n this.check = check;\n this._field = field;\n }\n field() {\n return this._field;\n }\n set(key, value) {\n if (this.check) {\n const err = checkMapEntry(this._field, key, value);\n if (err) {\n throw err;\n }\n }\n this.obj[mapKeyToLocal(key)] = mapValueToLocal(this._field, value);\n return this;\n }\n delete(key) {\n const k = mapKeyToLocal(key);\n const has = Object.prototype.hasOwnProperty.call(this.obj, k);\n if (has) {\n delete this.obj[k];\n }\n return has;\n }\n clear() {\n for (const key of Object.keys(this.obj)) {\n delete this.obj[key];\n }\n }\n get(key) {\n let val = this.obj[mapKeyToLocal(key)];\n if (val !== void 0) {\n val = mapValueToReflect(this._field, val, this.check);\n }\n return val;\n }\n has(key) {\n return Object.prototype.hasOwnProperty.call(this.obj, mapKeyToLocal(key));\n }\n *keys() {\n for (const objKey of Object.keys(this.obj)) {\n yield mapKeyToReflect(objKey, this._field.mapKey);\n }\n }\n *entries() {\n for (const objEntry of Object.entries(this.obj)) {\n yield [\n mapKeyToReflect(objEntry[0], this._field.mapKey),\n mapValueToReflect(this._field, objEntry[1], this.check)\n ];\n }\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n get size() {\n return Object.keys(this.obj).length;\n }\n *values() {\n for (const val of Object.values(this.obj)) {\n yield mapValueToReflect(this._field, val, this.check);\n }\n }\n forEach(callbackfn, thisArg) {\n for (const mapEntry of this.entries()) {\n callbackfn.call(thisArg, mapEntry[1], mapEntry[0], this);\n }\n }\n };\n function messageToLocal(field, value) {\n if (!isReflectMessage(value)) {\n return value;\n }\n if (isWrapper(value.message) && !field.oneof && field.fieldKind == "message") {\n return value.message.value;\n }\n if (value.desc.typeName == "google.protobuf.Struct" && field.parent.typeName != "google.protobuf.Value") {\n return wktStructToLocal(value.message);\n }\n return value.message;\n }\n function messageToReflect(field, value, check) {\n if (value !== void 0) {\n if (isWrapperDesc(field.message) && !field.oneof && field.fieldKind == "message") {\n value = {\n $typeName: field.message.typeName,\n value: longToReflect(field.message.fields[0], value)\n };\n } else if (field.message.typeName == "google.protobuf.Struct" && field.parent.typeName != "google.protobuf.Value" && isObject(value)) {\n value = wktStructToReflect(value);\n }\n }\n return new ReflectMessageImpl(field.message, value, check);\n }\n function listItemToLocal(field, value) {\n if (field.listKind == "message") {\n return messageToLocal(field, value);\n }\n return longToLocal(field, value);\n }\n function listItemToReflect(field, value, check) {\n if (field.listKind == "message") {\n return messageToReflect(field, value, check);\n }\n return longToReflect(field, value);\n }\n function mapValueToLocal(field, value) {\n if (field.mapKind == "message") {\n return messageToLocal(field, value);\n }\n return longToLocal(field, value);\n }\n function mapValueToReflect(field, value, check) {\n if (field.mapKind == "message") {\n return messageToReflect(field, value, check);\n }\n return value;\n }\n function mapKeyToLocal(key) {\n return typeof key == "string" || typeof key == "number" ? key : String(key);\n }\n function mapKeyToReflect(key, type) {\n switch (type) {\n case ScalarType.STRING:\n return key;\n case ScalarType.INT32:\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32: {\n const n = Number.parseInt(key);\n if (Number.isFinite(n)) {\n return n;\n }\n break;\n }\n case ScalarType.BOOL:\n switch (key) {\n case "true":\n return true;\n case "false":\n return false;\n }\n break;\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n try {\n return protoInt64.uParse(key);\n } catch (_a) {\n }\n break;\n default:\n try {\n return protoInt64.parse(key);\n } catch (_b) {\n }\n break;\n }\n return key;\n }\n function longToReflect(field, value) {\n switch (field.scalar) {\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if ("longAsString" in field && field.longAsString && typeof value == "string") {\n value = protoInt64.parse(value);\n }\n break;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if ("longAsString" in field && field.longAsString && typeof value == "string") {\n value = protoInt64.uParse(value);\n }\n break;\n }\n return value;\n }\n function longToLocal(field, value) {\n switch (field.scalar) {\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if ("longAsString" in field && field.longAsString) {\n value = String(value);\n } else if (typeof value == "string" || typeof value == "number") {\n value = protoInt64.parse(value);\n }\n break;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if ("longAsString" in field && field.longAsString) {\n value = String(value);\n } else if (typeof value == "string" || typeof value == "number") {\n value = protoInt64.uParse(value);\n }\n break;\n }\n return value;\n }\n function wktStructToReflect(json) {\n const struct = {\n $typeName: "google.protobuf.Struct",\n fields: {}\n };\n if (isObject(json)) {\n for (const [k, v] of Object.entries(json)) {\n struct.fields[k] = wktValueToReflect(v);\n }\n }\n return struct;\n }\n function wktStructToLocal(val) {\n const json = {};\n for (const [k, v] of Object.entries(val.fields)) {\n json[k] = wktValueToLocal(v);\n }\n return json;\n }\n function wktValueToLocal(val) {\n switch (val.kind.case) {\n case "structValue":\n return wktStructToLocal(val.kind.value);\n case "listValue":\n return val.kind.value.values.map(wktValueToLocal);\n case "nullValue":\n case void 0:\n return null;\n default:\n return val.kind.value;\n }\n }\n function wktValueToReflect(json) {\n const value = {\n $typeName: "google.protobuf.Value",\n kind: { case: void 0 }\n };\n switch (typeof json) {\n case "number":\n value.kind = { case: "numberValue", value: json };\n break;\n case "string":\n value.kind = { case: "stringValue", value: json };\n break;\n case "boolean":\n value.kind = { case: "boolValue", value: json };\n break;\n case "object":\n if (json === null) {\n value.kind = { case: "nullValue", value: NULL_VALUE };\n } else if (Array.isArray(json)) {\n const listValue = {\n $typeName: "google.protobuf.ListValue",\n values: []\n };\n if (Array.isArray(json)) {\n for (const e of json) {\n listValue.values.push(wktValueToReflect(e));\n }\n }\n value.kind = {\n case: "listValue",\n value: listValue\n };\n } else {\n value.kind = {\n case: "structValue",\n value: wktStructToReflect(json)\n };\n }\n break;\n }\n return value;\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js\n init_shims();\n function base64Decode(base64Str) {\n const table = getDecodeTable();\n let es = base64Str.length * 3 / 4;\n if (base64Str[base64Str.length - 2] == "=")\n es -= 2;\n else if (base64Str[base64Str.length - 1] == "=")\n es -= 1;\n let bytes = new Uint8Array(es), bytePos = 0, groupPos = 0, b, p = 0;\n for (let i = 0; i < base64Str.length; i++) {\n b = table[base64Str.charCodeAt(i)];\n if (b === void 0) {\n switch (base64Str[i]) {\n // @ts-ignore TS7029: Fallthrough case in switch -- ignore instead of expect-error for compiler settings without noFallthroughCasesInSwitch: true\n case "=":\n groupPos = 0;\n // reset state when padding found\n case "\\n":\n case "\\r":\n case " ":\n case " ":\n continue;\n // skip white-space, and padding\n default:\n throw Error("invalid base64 string");\n }\n }\n switch (groupPos) {\n case 0:\n p = b;\n groupPos = 1;\n break;\n case 1:\n bytes[bytePos++] = p << 2 | (b & 48) >> 4;\n p = b;\n groupPos = 2;\n break;\n case 2:\n bytes[bytePos++] = (p & 15) << 4 | (b & 60) >> 2;\n p = b;\n groupPos = 3;\n break;\n case 3:\n bytes[bytePos++] = (p & 3) << 6 | b;\n groupPos = 0;\n break;\n }\n }\n if (groupPos == 1)\n throw Error("invalid base64 string");\n return bytes.subarray(0, bytePos);\n }\n var encodeTableStd;\n var encodeTableUrl;\n var decodeTable;\n function getEncodeTable(encoding) {\n if (!encodeTableStd) {\n encodeTableStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");\n encodeTableUrl = encodeTableStd.slice(0, -2).concat("-", "_");\n }\n return encoding == "url" ? (\n // biome-ignore lint/style/noNonNullAssertion: TS fails to narrow down\n encodeTableUrl\n ) : encodeTableStd;\n }\n function getDecodeTable() {\n if (!decodeTable) {\n decodeTable = [];\n const encodeTable = getEncodeTable("std");\n for (let i = 0; i < encodeTable.length; i++)\n decodeTable[encodeTable[i].charCodeAt(0)] = i;\n decodeTable["-".charCodeAt(0)] = encodeTable.indexOf("+");\n decodeTable["_".charCodeAt(0)] = encodeTable.indexOf("/");\n }\n return decodeTable;\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/names.js\n init_shims();\n function protoCamelCase(snakeCase) {\n let capNext = false;\n const b = [];\n for (let i = 0; i < snakeCase.length; i++) {\n let c = snakeCase.charAt(i);\n switch (c) {\n case "_":\n capNext = true;\n break;\n case "0":\n case "1":\n case "2":\n case "3":\n case "4":\n case "5":\n case "6":\n case "7":\n case "8":\n case "9":\n b.push(c);\n capNext = false;\n break;\n default:\n if (capNext) {\n capNext = false;\n c = c.toUpperCase();\n }\n b.push(c);\n break;\n }\n }\n return b.join("");\n }\n var reservedObjectProperties = /* @__PURE__ */ new Set([\n // names reserved by JavaScript\n "constructor",\n "toString",\n "toJSON",\n "valueOf"\n ]);\n function safeObjectProperty(name) {\n return reservedObjectProperties.has(name) ? name + "$" : name;\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js\n function restoreJsonNames(message) {\n for (const f of message.field) {\n if (!unsafeIsSetExplicit(f, "jsonName")) {\n f.jsonName = protoCamelCase(f.name);\n }\n }\n message.nestedType.forEach(restoreJsonNames);\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/registry.js\n init_shims();\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.js\n init_shims();\n function parseTextFormatEnumValue(descEnum, value) {\n const enumValue = descEnum.values.find((v) => v.name === value);\n if (!enumValue) {\n throw new Error(`cannot parse ${descEnum} default value: ${value}`);\n }\n return enumValue.number;\n }\n function parseTextFormatScalarValue(type, value) {\n switch (type) {\n case ScalarType.STRING:\n return value;\n case ScalarType.BYTES: {\n const u = unescapeBytesDefaultValue(value);\n if (u === false) {\n throw new Error(`cannot parse ${ScalarType[type]} default value: ${value}`);\n }\n return u;\n }\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n return protoInt64.parse(value);\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n return protoInt64.uParse(value);\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n switch (value) {\n case "inf":\n return Number.POSITIVE_INFINITY;\n case "-inf":\n return Number.NEGATIVE_INFINITY;\n case "nan":\n return Number.NaN;\n default:\n return parseFloat(value);\n }\n case ScalarType.BOOL:\n return value === "true";\n case ScalarType.INT32:\n case ScalarType.UINT32:\n case ScalarType.SINT32:\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n return parseInt(value, 10);\n }\n }\n function unescapeBytesDefaultValue(str) {\n const b = [];\n const input = {\n tail: str,\n c: "",\n next() {\n if (this.tail.length == 0) {\n return false;\n }\n this.c = this.tail[0];\n this.tail = this.tail.substring(1);\n return true;\n },\n take(n) {\n if (this.tail.length >= n) {\n const r = this.tail.substring(0, n);\n this.tail = this.tail.substring(n);\n return r;\n }\n return false;\n }\n };\n while (input.next()) {\n switch (input.c) {\n case "\\\\":\n if (input.next()) {\n switch (input.c) {\n case "\\\\":\n b.push(input.c.charCodeAt(0));\n break;\n case "b":\n b.push(8);\n break;\n case "f":\n b.push(12);\n break;\n case "n":\n b.push(10);\n break;\n case "r":\n b.push(13);\n break;\n case "t":\n b.push(9);\n break;\n case "v":\n b.push(11);\n break;\n case "0":\n case "1":\n case "2":\n case "3":\n case "4":\n case "5":\n case "6":\n case "7": {\n const s = input.c;\n const t = input.take(2);\n if (t === false) {\n return false;\n }\n const n = parseInt(s + t, 8);\n if (Number.isNaN(n)) {\n return false;\n }\n b.push(n);\n break;\n }\n case "x": {\n const s = input.c;\n const t = input.take(2);\n if (t === false) {\n return false;\n }\n const n = parseInt(s + t, 16);\n if (Number.isNaN(n)) {\n return false;\n }\n b.push(n);\n break;\n }\n case "u": {\n const s = input.c;\n const t = input.take(4);\n if (t === false) {\n return false;\n }\n const n = parseInt(s + t, 16);\n if (Number.isNaN(n)) {\n return false;\n }\n const chunk = new Uint8Array(4);\n const view = new DataView(chunk.buffer);\n view.setInt32(0, n, true);\n b.push(chunk[0], chunk[1], chunk[2], chunk[3]);\n break;\n }\n case "U": {\n const s = input.c;\n const t = input.take(8);\n if (t === false) {\n return false;\n }\n const tc = protoInt64.uEnc(s + t);\n const chunk = new Uint8Array(8);\n const view = new DataView(chunk.buffer);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n b.push(chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], chunk[5], chunk[6], chunk[7]);\n break;\n }\n }\n }\n break;\n default:\n b.push(input.c.charCodeAt(0));\n }\n }\n return new Uint8Array(b);\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js\n init_shims();\n function* nestedTypes(desc) {\n switch (desc.kind) {\n case "file":\n for (const message of desc.messages) {\n yield message;\n yield* nestedTypes(message);\n }\n yield* desc.enums;\n yield* desc.services;\n yield* desc.extensions;\n break;\n case "message":\n for (const message of desc.nestedMessages) {\n yield message;\n yield* nestedTypes(message);\n }\n yield* desc.nestedEnums;\n yield* desc.nestedExtensions;\n break;\n }\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/registry.js\n function createFileRegistry(...args) {\n const registry = createBaseRegistry();\n if (!args.length) {\n return registry;\n }\n if ("$typeName" in args[0] && args[0].$typeName == "google.protobuf.FileDescriptorSet") {\n for (const file of args[0].file) {\n addFile(file, registry);\n }\n return registry;\n }\n if ("$typeName" in args[0]) {\n let recurseDeps = function(file) {\n const deps = [];\n for (const protoFileName of file.dependency) {\n if (registry.getFile(protoFileName) != void 0) {\n continue;\n }\n if (seen.has(protoFileName)) {\n continue;\n }\n const dep = resolve(protoFileName);\n if (!dep) {\n throw new Error(`Unable to resolve ${protoFileName}, imported by ${file.name}`);\n }\n if ("kind" in dep) {\n registry.addFile(dep, false, true);\n } else {\n seen.add(dep.name);\n deps.push(dep);\n }\n }\n return deps.concat(...deps.map(recurseDeps));\n };\n const input = args[0];\n const resolve = args[1];\n const seen = /* @__PURE__ */ new Set();\n for (const file of [input, ...recurseDeps(input)].reverse()) {\n addFile(file, registry);\n }\n } else {\n for (const fileReg of args) {\n for (const file of fileReg.files) {\n registry.addFile(file);\n }\n }\n }\n return registry;\n }\n function createBaseRegistry() {\n const types = /* @__PURE__ */ new Map();\n const extendees = /* @__PURE__ */ new Map();\n const files2 = /* @__PURE__ */ new Map();\n return {\n kind: "registry",\n types,\n extendees,\n [Symbol.iterator]() {\n return types.values();\n },\n get files() {\n return files2.values();\n },\n addFile(file, skipTypes, withDeps) {\n files2.set(file.proto.name, file);\n if (!skipTypes) {\n for (const type of nestedTypes(file)) {\n this.add(type);\n }\n }\n if (withDeps) {\n for (const f of file.dependencies) {\n this.addFile(f, skipTypes, withDeps);\n }\n }\n },\n add(desc) {\n if (desc.kind == "extension") {\n let numberToExt = extendees.get(desc.extendee.typeName);\n if (!numberToExt) {\n extendees.set(\n desc.extendee.typeName,\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n numberToExt = /* @__PURE__ */ new Map()\n );\n }\n numberToExt.set(desc.number, desc);\n }\n types.set(desc.typeName, desc);\n },\n get(typeName) {\n return types.get(typeName);\n },\n getFile(fileName) {\n return files2.get(fileName);\n },\n getMessage(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == "message" ? t : void 0;\n },\n getEnum(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == "enum" ? t : void 0;\n },\n getExtension(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == "extension" ? t : void 0;\n },\n getExtensionFor(extendee, no) {\n var _a;\n return (_a = extendees.get(extendee.typeName)) === null || _a === void 0 ? void 0 : _a.get(no);\n },\n getService(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == "service" ? t : void 0;\n }\n };\n }\n var EDITION_PROTO22 = 998;\n var EDITION_PROTO32 = 999;\n var EDITION_UNSTABLE = 9999;\n var TYPE_STRING = 9;\n var TYPE_GROUP = 10;\n var TYPE_MESSAGE = 11;\n var TYPE_BYTES = 12;\n var TYPE_ENUM = 14;\n var LABEL_REPEATED = 3;\n var LABEL_REQUIRED = 2;\n var JS_STRING = 1;\n var IDEMPOTENCY_UNKNOWN = 0;\n var EXPLICIT = 1;\n var IMPLICIT3 = 2;\n var LEGACY_REQUIRED = 3;\n var PACKED = 1;\n var DELIMITED = 2;\n var OPEN = 1;\n var VERIFY = 2;\n var maximumEdition = 1001;\n var featureDefaults = {\n // EDITION_PROTO2\n 998: {\n fieldPresence: 1,\n // EXPLICIT,\n enumType: 2,\n // CLOSED,\n repeatedFieldEncoding: 2,\n // EXPANDED,\n utf8Validation: 3,\n // NONE,\n messageEncoding: 1,\n // LENGTH_PREFIXED,\n jsonFormat: 2,\n // LEGACY_BEST_EFFORT,\n enforceNamingStyle: 2,\n // STYLE_LEGACY,\n defaultSymbolVisibility: 1\n // EXPORT_ALL,\n },\n // EDITION_PROTO3\n 999: {\n fieldPresence: 2,\n // IMPLICIT,\n enumType: 1,\n // OPEN,\n repeatedFieldEncoding: 1,\n // PACKED,\n utf8Validation: 2,\n // VERIFY,\n messageEncoding: 1,\n // LENGTH_PREFIXED,\n jsonFormat: 1,\n // ALLOW,\n enforceNamingStyle: 2,\n // STYLE_LEGACY,\n defaultSymbolVisibility: 1\n // EXPORT_ALL,\n },\n // EDITION_2023\n 1e3: {\n fieldPresence: 1,\n // EXPLICIT,\n enumType: 1,\n // OPEN,\n repeatedFieldEncoding: 1,\n // PACKED,\n utf8Validation: 2,\n // VERIFY,\n messageEncoding: 1,\n // LENGTH_PREFIXED,\n jsonFormat: 1,\n // ALLOW,\n enforceNamingStyle: 2,\n // STYLE_LEGACY,\n defaultSymbolVisibility: 1\n // EXPORT_ALL,\n },\n // EDITION_2024\n 1001: {\n fieldPresence: 1,\n // EXPLICIT,\n enumType: 1,\n // OPEN,\n repeatedFieldEncoding: 1,\n // PACKED,\n utf8Validation: 2,\n // VERIFY,\n messageEncoding: 1,\n // LENGTH_PREFIXED,\n jsonFormat: 1,\n // ALLOW,\n enforceNamingStyle: 1,\n // STYLE2024,\n defaultSymbolVisibility: 2\n // EXPORT_TOP_LEVEL,\n }\n };\n function addFile(proto, reg) {\n var _a, _b;\n const file = {\n kind: "file",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n edition: getFileEdition(proto),\n name: proto.name.replace(/\\.proto$/, ""),\n dependencies: findFileDependencies(proto, reg),\n enums: [],\n messages: [],\n extensions: [],\n services: [],\n toString() {\n return `file ${proto.name}`;\n }\n };\n const mapEntriesStore = /* @__PURE__ */ new Map();\n const mapEntries = {\n get(typeName) {\n return mapEntriesStore.get(typeName);\n },\n add(desc) {\n var _a2;\n assert(((_a2 = desc.proto.options) === null || _a2 === void 0 ? void 0 : _a2.mapEntry) === true);\n mapEntriesStore.set(desc.typeName, desc);\n }\n };\n for (const enumProto of proto.enumType) {\n addEnum(enumProto, file, void 0, reg);\n }\n for (const messageProto of proto.messageType) {\n addMessage(messageProto, file, void 0, reg, mapEntries);\n }\n for (const serviceProto of proto.service) {\n addService(serviceProto, file, reg);\n }\n addExtensions(file, reg);\n for (const mapEntry of mapEntriesStore.values()) {\n addFields(mapEntry, reg, mapEntries);\n }\n for (const message of file.messages) {\n addFields(message, reg, mapEntries);\n addExtensions(message, reg);\n }\n reg.addFile(file, true);\n }\n function addExtensions(desc, reg) {\n switch (desc.kind) {\n case "file":\n for (const proto of desc.proto.extension) {\n const ext = newField(proto, desc, reg);\n desc.extensions.push(ext);\n reg.add(ext);\n }\n break;\n case "message":\n for (const proto of desc.proto.extension) {\n const ext = newField(proto, desc, reg);\n desc.nestedExtensions.push(ext);\n reg.add(ext);\n }\n for (const message of desc.nestedMessages) {\n addExtensions(message, reg);\n }\n break;\n }\n }\n function addFields(message, reg, mapEntries) {\n const allOneofs = message.proto.oneofDecl.map((proto) => newOneof(proto, message));\n const oneofsSeen = /* @__PURE__ */ new Set();\n for (const proto of message.proto.field) {\n const oneof = findOneof(proto, allOneofs);\n const field = newField(proto, message, reg, oneof, mapEntries);\n message.fields.push(field);\n message.field[field.localName] = field;\n if (oneof === void 0) {\n message.members.push(field);\n } else {\n oneof.fields.push(field);\n if (!oneofsSeen.has(oneof)) {\n oneofsSeen.add(oneof);\n message.members.push(oneof);\n }\n }\n }\n for (const oneof of allOneofs.filter((o) => oneofsSeen.has(o))) {\n message.oneofs.push(oneof);\n }\n for (const child of message.nestedMessages) {\n addFields(child, reg, mapEntries);\n }\n }\n function addEnum(proto, file, parent2, reg) {\n var _a, _b, _c, _d, _e;\n const sharedPrefix = findEnumSharedPrefix(proto.name, proto.value);\n const desc = {\n kind: "enum",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n file,\n parent: parent2,\n open: true,\n name: proto.name,\n typeName: makeTypeName(proto, parent2, file),\n value: {},\n values: [],\n sharedPrefix,\n toString() {\n return `enum ${this.typeName}`;\n }\n };\n desc.open = isEnumOpen(desc);\n reg.add(desc);\n for (const p of proto.value) {\n const name = p.name;\n desc.values.push(\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n desc.value[p.number] = {\n kind: "enum_value",\n proto: p,\n deprecated: (_d = (_c = p.options) === null || _c === void 0 ? void 0 : _c.deprecated) !== null && _d !== void 0 ? _d : false,\n parent: desc,\n name,\n localName: safeObjectProperty(sharedPrefix == void 0 ? name : name.substring(sharedPrefix.length)),\n number: p.number,\n toString() {\n return `enum value ${desc.typeName}.${name}`;\n }\n }\n );\n }\n ((_e = parent2 === null || parent2 === void 0 ? void 0 : parent2.nestedEnums) !== null && _e !== void 0 ? _e : file.enums).push(desc);\n }\n function addMessage(proto, file, parent2, reg, mapEntries) {\n var _a, _b, _c, _d;\n const desc = {\n kind: "message",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n file,\n parent: parent2,\n name: proto.name,\n typeName: makeTypeName(proto, parent2, file),\n fields: [],\n field: {},\n oneofs: [],\n members: [],\n nestedEnums: [],\n nestedMessages: [],\n nestedExtensions: [],\n toString() {\n return `message ${this.typeName}`;\n }\n };\n if (((_c = proto.options) === null || _c === void 0 ? void 0 : _c.mapEntry) === true) {\n mapEntries.add(desc);\n } else {\n ((_d = parent2 === null || parent2 === void 0 ? void 0 : parent2.nestedMessages) !== null && _d !== void 0 ? _d : file.messages).push(desc);\n reg.add(desc);\n }\n for (const enumProto of proto.enumType) {\n addEnum(enumProto, file, desc, reg);\n }\n for (const messageProto of proto.nestedType) {\n addMessage(messageProto, file, desc, reg, mapEntries);\n }\n }\n function addService(proto, file, reg) {\n var _a, _b;\n const desc = {\n kind: "service",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n file,\n name: proto.name,\n typeName: makeTypeName(proto, void 0, file),\n methods: [],\n method: {},\n toString() {\n return `service ${this.typeName}`;\n }\n };\n file.services.push(desc);\n reg.add(desc);\n for (const methodProto of proto.method) {\n const method = newMethod(methodProto, desc, reg);\n desc.methods.push(method);\n desc.method[method.localName] = method;\n }\n }\n function newMethod(proto, parent2, reg) {\n var _a, _b, _c, _d;\n let methodKind;\n if (proto.clientStreaming && proto.serverStreaming) {\n methodKind = "bidi_streaming";\n } else if (proto.clientStreaming) {\n methodKind = "client_streaming";\n } else if (proto.serverStreaming) {\n methodKind = "server_streaming";\n } else {\n methodKind = "unary";\n }\n const input = reg.getMessage(trimLeadingDot(proto.inputType));\n const output = reg.getMessage(trimLeadingDot(proto.outputType));\n assert(input, `invalid MethodDescriptorProto: input_type ${proto.inputType} not found`);\n assert(output, `invalid MethodDescriptorProto: output_type ${proto.inputType} not found`);\n const name = proto.name;\n return {\n kind: "rpc",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n parent: parent2,\n name,\n localName: safeObjectProperty(name.length ? safeObjectProperty(name[0].toLowerCase() + name.substring(1)) : name),\n methodKind,\n input,\n output,\n idempotency: (_d = (_c = proto.options) === null || _c === void 0 ? void 0 : _c.idempotencyLevel) !== null && _d !== void 0 ? _d : IDEMPOTENCY_UNKNOWN,\n toString() {\n return `rpc ${parent2.typeName}.${name}`;\n }\n };\n }\n function newOneof(proto, parent2) {\n return {\n kind: "oneof",\n proto,\n deprecated: false,\n parent: parent2,\n fields: [],\n name: proto.name,\n localName: safeObjectProperty(protoCamelCase(proto.name)),\n toString() {\n return `oneof ${parent2.typeName}.${this.name}`;\n }\n };\n }\n function newField(proto, parentOrFile, reg, oneof, mapEntries) {\n var _a, _b, _c;\n const isExtension = mapEntries === void 0;\n const field = {\n kind: "field",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n name: proto.name,\n number: proto.number,\n scalar: void 0,\n message: void 0,\n enum: void 0,\n presence: getFieldPresence(proto, oneof, isExtension, parentOrFile),\n utf8Validation: isUtf8Validated(proto, parentOrFile),\n listKind: void 0,\n mapKind: void 0,\n mapKey: void 0,\n delimitedEncoding: void 0,\n packed: void 0,\n longAsString: false,\n getDefaultValue: void 0\n };\n if (isExtension) {\n const file = parentOrFile.kind == "file" ? parentOrFile : parentOrFile.file;\n const parent2 = parentOrFile.kind == "file" ? void 0 : parentOrFile;\n const typeName = makeTypeName(proto, parent2, file);\n field.kind = "extension";\n field.file = file;\n field.parent = parent2;\n field.oneof = void 0;\n field.typeName = typeName;\n field.jsonName = `[${typeName}]`;\n field.toString = () => `extension ${typeName}`;\n const extendee = reg.getMessage(trimLeadingDot(proto.extendee));\n assert(extendee, `invalid FieldDescriptorProto: extendee ${proto.extendee} not found`);\n field.extendee = extendee;\n } else {\n const parent2 = parentOrFile;\n assert(parent2.kind == "message");\n field.parent = parent2;\n field.oneof = oneof;\n field.localName = oneof ? protoCamelCase(proto.name) : safeObjectProperty(protoCamelCase(proto.name));\n field.jsonName = proto.jsonName;\n field.toString = () => `field ${parent2.typeName}.${proto.name}`;\n }\n const label = proto.label;\n const type = proto.type;\n const jstype = (_c = proto.options) === null || _c === void 0 ? void 0 : _c.jstype;\n if (label === LABEL_REPEATED) {\n const mapEntry = type == TYPE_MESSAGE ? mapEntries === null || mapEntries === void 0 ? void 0 : mapEntries.get(trimLeadingDot(proto.typeName)) : void 0;\n if (mapEntry) {\n field.fieldKind = "map";\n const { key, value } = findMapEntryFields(mapEntry);\n field.mapKey = key.scalar;\n field.mapKind = value.fieldKind;\n field.message = value.message;\n field.delimitedEncoding = false;\n field.enum = value.enum;\n field.scalar = value.scalar;\n return field;\n }\n field.fieldKind = "list";\n switch (type) {\n case TYPE_MESSAGE:\n case TYPE_GROUP:\n field.listKind = "message";\n field.message = reg.getMessage(trimLeadingDot(proto.typeName));\n assert(field.message);\n field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);\n break;\n case TYPE_ENUM:\n field.listKind = "enum";\n field.enum = reg.getEnum(trimLeadingDot(proto.typeName));\n assert(field.enum);\n break;\n default:\n field.listKind = "scalar";\n field.scalar = type;\n field.longAsString = jstype == JS_STRING;\n break;\n }\n field.packed = isPackedField(proto, parentOrFile);\n return field;\n }\n switch (type) {\n case TYPE_MESSAGE:\n case TYPE_GROUP:\n field.fieldKind = "message";\n field.message = reg.getMessage(trimLeadingDot(proto.typeName));\n assert(field.message, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);\n field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);\n field.getDefaultValue = () => void 0;\n break;\n case TYPE_ENUM: {\n const enumeration = reg.getEnum(trimLeadingDot(proto.typeName));\n assert(enumeration !== void 0, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);\n field.fieldKind = "enum";\n field.enum = reg.getEnum(trimLeadingDot(proto.typeName));\n field.getDefaultValue = () => {\n return unsafeIsSetExplicit(proto, "defaultValue") ? parseTextFormatEnumValue(enumeration, proto.defaultValue) : void 0;\n };\n break;\n }\n default: {\n field.fieldKind = "scalar";\n field.scalar = type;\n field.longAsString = jstype == JS_STRING;\n field.getDefaultValue = () => {\n return unsafeIsSetExplicit(proto, "defaultValue") ? parseTextFormatScalarValue(type, proto.defaultValue) : void 0;\n };\n break;\n }\n }\n return field;\n }\n function getFileEdition(proto) {\n switch (proto.syntax) {\n case "":\n case "proto2":\n return EDITION_PROTO22;\n case "proto3":\n return EDITION_PROTO32;\n case "editions":\n if (proto.edition === EDITION_UNSTABLE) {\n return maximumEdition;\n }\n if (proto.edition in featureDefaults) {\n return proto.edition;\n }\n throw new Error(`${proto.name}: unsupported edition`);\n default:\n throw new Error(`${proto.name}: unsupported syntax "${proto.syntax}"`);\n }\n }\n function findFileDependencies(proto, reg) {\n return proto.dependency.map((wantName) => {\n const dep = reg.getFile(wantName);\n if (!dep) {\n throw new Error(`Cannot find ${wantName}, imported by ${proto.name}`);\n }\n return dep;\n });\n }\n function findEnumSharedPrefix(enumName, values) {\n const prefix = camelToSnakeCase(enumName) + "_";\n for (const value of values) {\n if (!value.name.toLowerCase().startsWith(prefix)) {\n return void 0;\n }\n const shortName = value.name.substring(prefix.length);\n if (shortName.length == 0) {\n return void 0;\n }\n if (/^\\d/.test(shortName)) {\n return void 0;\n }\n }\n return prefix;\n }\n function camelToSnakeCase(camel) {\n return (camel.substring(0, 1) + camel.substring(1).replace(/[A-Z]/g, (c) => "_" + c)).toLowerCase();\n }\n function makeTypeName(proto, parent2, file) {\n let typeName;\n if (parent2) {\n typeName = `${parent2.typeName}.${proto.name}`;\n } else if (file.proto.package.length > 0) {\n typeName = `${file.proto.package}.${proto.name}`;\n } else {\n typeName = `${proto.name}`;\n }\n return typeName;\n }\n function trimLeadingDot(typeName) {\n return typeName.startsWith(".") ? typeName.substring(1) : typeName;\n }\n function findOneof(proto, allOneofs) {\n if (!unsafeIsSetExplicit(proto, "oneofIndex")) {\n return void 0;\n }\n if (proto.proto3Optional) {\n return void 0;\n }\n const oneof = allOneofs[proto.oneofIndex];\n assert(oneof, `invalid FieldDescriptorProto: oneof #${proto.oneofIndex} for field #${proto.number} not found`);\n return oneof;\n }\n function getFieldPresence(proto, oneof, isExtension, parent2) {\n if (proto.label == LABEL_REQUIRED) {\n return LEGACY_REQUIRED;\n }\n if (proto.label == LABEL_REPEATED) {\n return IMPLICIT3;\n }\n if (!!oneof || proto.proto3Optional) {\n return EXPLICIT;\n }\n if (isExtension) {\n return EXPLICIT;\n }\n const resolved = resolveFeature("fieldPresence", { proto, parent: parent2 });\n if (resolved == IMPLICIT3 && (proto.type == TYPE_MESSAGE || proto.type == TYPE_GROUP)) {\n return EXPLICIT;\n }\n return resolved;\n }\n function isPackedField(proto, parent2) {\n if (proto.label != LABEL_REPEATED) {\n return false;\n }\n switch (proto.type) {\n case TYPE_STRING:\n case TYPE_BYTES:\n case TYPE_GROUP:\n case TYPE_MESSAGE:\n return false;\n }\n const o = proto.options;\n if (o && unsafeIsSetExplicit(o, "packed")) {\n return o.packed;\n }\n return PACKED == resolveFeature("repeatedFieldEncoding", {\n proto,\n parent: parent2\n });\n }\n function findMapEntryFields(mapEntry) {\n const key = mapEntry.fields.find((f) => f.number === 1);\n const value = mapEntry.fields.find((f) => f.number === 2);\n assert(key && key.fieldKind == "scalar" && key.scalar != ScalarType.BYTES && key.scalar != ScalarType.FLOAT && key.scalar != ScalarType.DOUBLE && value && value.fieldKind != "list" && value.fieldKind != "map");\n return { key, value };\n }\n function isEnumOpen(desc) {\n var _a;\n return OPEN == resolveFeature("enumType", {\n proto: desc.proto,\n parent: (_a = desc.parent) !== null && _a !== void 0 ? _a : desc.file\n });\n }\n function isDelimitedEncoding(proto, parent2) {\n if (proto.type == TYPE_GROUP) {\n return true;\n }\n return DELIMITED == resolveFeature("messageEncoding", {\n proto,\n parent: parent2\n });\n }\n function isUtf8Validated(proto, parent2) {\n return VERIFY == resolveFeature("utf8Validation", {\n proto,\n parent: parent2\n });\n }\n function resolveFeature(name, ref) {\n var _a, _b;\n const featureSet = (_a = ref.proto.options) === null || _a === void 0 ? void 0 : _a.features;\n if (featureSet) {\n const val = featureSet[name];\n if (val != 0) {\n return val;\n }\n }\n if ("kind" in ref) {\n if (ref.kind == "message") {\n return resolveFeature(name, (_b = ref.parent) !== null && _b !== void 0 ? _b : ref.file);\n }\n const editionDefaults = featureDefaults[ref.edition];\n if (!editionDefaults) {\n throw new Error(`feature default for edition ${ref.edition} not found`);\n }\n return editionDefaults[name];\n }\n return resolveFeature(name, ref.parent);\n }\n function assert(condition, msg) {\n if (!condition) {\n throw new Error(msg);\n }\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js\n function boot(boot2) {\n const root = bootFileDescriptorProto(boot2);\n root.messageType.forEach(restoreJsonNames);\n const reg = createFileRegistry(root, () => void 0);\n return reg.getFile(root.name);\n }\n function bootFileDescriptorProto(init) {\n const proto = /* @__PURE__ */ Object.create({\n syntax: "",\n edition: 0\n });\n return Object.assign(proto, Object.assign(Object.assign({ $typeName: "google.protobuf.FileDescriptorProto", dependency: [], publicDependency: [], weakDependency: [], optionDependency: [], service: [], extension: [] }, init), { messageType: init.messageType.map(bootDescriptorProto), enumType: init.enumType.map(bootEnumDescriptorProto) }));\n }\n function bootDescriptorProto(init) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const proto = /* @__PURE__ */ Object.create({\n visibility: 0\n });\n return Object.assign(proto, {\n $typeName: "google.protobuf.DescriptorProto",\n name: init.name,\n field: (_b = (_a = init.field) === null || _a === void 0 ? void 0 : _a.map(bootFieldDescriptorProto)) !== null && _b !== void 0 ? _b : [],\n extension: [],\n nestedType: (_d = (_c = init.nestedType) === null || _c === void 0 ? void 0 : _c.map(bootDescriptorProto)) !== null && _d !== void 0 ? _d : [],\n enumType: (_f = (_e = init.enumType) === null || _e === void 0 ? void 0 : _e.map(bootEnumDescriptorProto)) !== null && _f !== void 0 ? _f : [],\n extensionRange: (_h = (_g = init.extensionRange) === null || _g === void 0 ? void 0 : _g.map((e) => Object.assign({ $typeName: "google.protobuf.DescriptorProto.ExtensionRange" }, e))) !== null && _h !== void 0 ? _h : [],\n oneofDecl: [],\n reservedRange: [],\n reservedName: []\n });\n }\n function bootFieldDescriptorProto(init) {\n const proto = /* @__PURE__ */ Object.create({\n label: 1,\n typeName: "",\n extendee: "",\n defaultValue: "",\n oneofIndex: 0,\n jsonName: "",\n proto3Optional: false\n });\n return Object.assign(proto, Object.assign(Object.assign({ $typeName: "google.protobuf.FieldDescriptorProto" }, init), { options: init.options ? bootFieldOptions(init.options) : void 0 }));\n }\n function bootFieldOptions(init) {\n var _a, _b, _c;\n const proto = /* @__PURE__ */ Object.create({\n ctype: 0,\n packed: false,\n jstype: 0,\n lazy: false,\n unverifiedLazy: false,\n deprecated: false,\n weak: false,\n debugRedact: false,\n retention: 0\n });\n return Object.assign(proto, Object.assign(Object.assign({ $typeName: "google.protobuf.FieldOptions" }, init), { targets: (_a = init.targets) !== null && _a !== void 0 ? _a : [], editionDefaults: (_c = (_b = init.editionDefaults) === null || _b === void 0 ? void 0 : _b.map((e) => Object.assign({ $typeName: "google.protobuf.FieldOptions.EditionDefault" }, e))) !== null && _c !== void 0 ? _c : [], uninterpretedOption: [] }));\n }\n function bootEnumDescriptorProto(init) {\n const proto = /* @__PURE__ */ Object.create({\n visibility: 0\n });\n return Object.assign(proto, {\n $typeName: "google.protobuf.EnumDescriptorProto",\n name: init.name,\n reservedName: [],\n reservedRange: [],\n value: init.value.map((e) => Object.assign({ $typeName: "google.protobuf.EnumValueDescriptorProto" }, e))\n });\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.js\n init_shims();\n function messageDesc(file, path, ...paths) {\n return paths.reduce((acc, cur) => acc.nestedMessages[cur], file.messages[path]);\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.js\n init_shims();\n function enumDesc(file, path, ...paths) {\n if (paths.length == 0) {\n return file.enums[path];\n }\n const e = paths.pop();\n return paths.reduce((acc, cur) => acc.nestedMessages[cur], file.messages[path]).nestedEnums[e];\n }\n function tsEnum(desc) {\n const enumObject = {};\n for (const value of desc.values) {\n enumObject[value.localName] = value.number;\n enumObject[value.number] = value.localName;\n }\n return enumObject;\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js\n var file_google_protobuf_descriptor = /* @__PURE__ */ boot({ "name": "google/protobuf/descriptor.proto", "package": "google.protobuf", "messageType": [{ "name": "FileDescriptorSet", "field": [{ "name": "file", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.FileDescriptorProto" }], "extensionRange": [{ "start": 536e6, "end": 536000001 }] }, { "name": "FileDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "package", "number": 2, "type": 9, "label": 1 }, { "name": "dependency", "number": 3, "type": 9, "label": 3 }, { "name": "public_dependency", "number": 10, "type": 5, "label": 3 }, { "name": "weak_dependency", "number": 11, "type": 5, "label": 3 }, { "name": "option_dependency", "number": 15, "type": 9, "label": 3 }, { "name": "message_type", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto" }, { "name": "enum_type", "number": 5, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto" }, { "name": "service", "number": 6, "type": 11, "label": 3, "typeName": ".google.protobuf.ServiceDescriptorProto" }, { "name": "extension", "number": 7, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "options", "number": 8, "type": 11, "label": 1, "typeName": ".google.protobuf.FileOptions" }, { "name": "source_code_info", "number": 9, "type": 11, "label": 1, "typeName": ".google.protobuf.SourceCodeInfo" }, { "name": "syntax", "number": 12, "type": 9, "label": 1 }, { "name": "edition", "number": 14, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }] }, { "name": "DescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "field", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "extension", "number": 6, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "nested_type", "number": 3, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto" }, { "name": "enum_type", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto" }, { "name": "extension_range", "number": 5, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto.ExtensionRange" }, { "name": "oneof_decl", "number": 8, "type": 11, "label": 3, "typeName": ".google.protobuf.OneofDescriptorProto" }, { "name": "options", "number": 7, "type": 11, "label": 1, "typeName": ".google.protobuf.MessageOptions" }, { "name": "reserved_range", "number": 9, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto.ReservedRange" }, { "name": "reserved_name", "number": 10, "type": 9, "label": 3 }, { "name": "visibility", "number": 11, "type": 14, "label": 1, "typeName": ".google.protobuf.SymbolVisibility" }], "nestedType": [{ "name": "ExtensionRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.ExtensionRangeOptions" }] }, { "name": "ReservedRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }] }] }, { "name": "ExtensionRangeOptions", "field": [{ "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }, { "name": "declaration", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.ExtensionRangeOptions.Declaration", "options": { "retention": 2 } }, { "name": "features", "number": 50, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "verification", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.ExtensionRangeOptions.VerificationState", "defaultValue": "UNVERIFIED", "options": { "retention": 2 } }], "nestedType": [{ "name": "Declaration", "field": [{ "name": "number", "number": 1, "type": 5, "label": 1 }, { "name": "full_name", "number": 2, "type": 9, "label": 1 }, { "name": "type", "number": 3, "type": 9, "label": 1 }, { "name": "reserved", "number": 5, "type": 8, "label": 1 }, { "name": "repeated", "number": 6, "type": 8, "label": 1 }] }], "enumType": [{ "name": "VerificationState", "value": [{ "name": "DECLARATION", "number": 0 }, { "name": "UNVERIFIED", "number": 1 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "FieldDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "number", "number": 3, "type": 5, "label": 1 }, { "name": "label", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldDescriptorProto.Label" }, { "name": "type", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldDescriptorProto.Type" }, { "name": "type_name", "number": 6, "type": 9, "label": 1 }, { "name": "extendee", "number": 2, "type": 9, "label": 1 }, { "name": "default_value", "number": 7, "type": 9, "label": 1 }, { "name": "oneof_index", "number": 9, "type": 5, "label": 1 }, { "name": "json_name", "number": 10, "type": 9, "label": 1 }, { "name": "options", "number": 8, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions" }, { "name": "proto3_optional", "number": 17, "type": 8, "label": 1 }], "enumType": [{ "name": "Type", "value": [{ "name": "TYPE_DOUBLE", "number": 1 }, { "name": "TYPE_FLOAT", "number": 2 }, { "name": "TYPE_INT64", "number": 3 }, { "name": "TYPE_UINT64", "number": 4 }, { "name": "TYPE_INT32", "number": 5 }, { "name": "TYPE_FIXED64", "number": 6 }, { "name": "TYPE_FIXED32", "number": 7 }, { "name": "TYPE_BOOL", "number": 8 }, { "name": "TYPE_STRING", "number": 9 }, { "name": "TYPE_GROUP", "number": 10 }, { "name": "TYPE_MESSAGE", "number": 11 }, { "name": "TYPE_BYTES", "number": 12 }, { "name": "TYPE_UINT32", "number": 13 }, { "name": "TYPE_ENUM", "number": 14 }, { "name": "TYPE_SFIXED32", "number": 15 }, { "name": "TYPE_SFIXED64", "number": 16 }, { "name": "TYPE_SINT32", "number": 17 }, { "name": "TYPE_SINT64", "number": 18 }] }, { "name": "Label", "value": [{ "name": "LABEL_OPTIONAL", "number": 1 }, { "name": "LABEL_REPEATED", "number": 3 }, { "name": "LABEL_REQUIRED", "number": 2 }] }] }, { "name": "OneofDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "options", "number": 2, "type": 11, "label": 1, "typeName": ".google.protobuf.OneofOptions" }] }, { "name": "EnumDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "value", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumValueDescriptorProto" }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.EnumOptions" }, { "name": "reserved_range", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto.EnumReservedRange" }, { "name": "reserved_name", "number": 5, "type": 9, "label": 3 }, { "name": "visibility", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.SymbolVisibility" }], "nestedType": [{ "name": "EnumReservedRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }] }] }, { "name": "EnumValueDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "number", "number": 2, "type": 5, "label": 1 }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.EnumValueOptions" }] }, { "name": "ServiceDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "method", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.MethodDescriptorProto" }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.ServiceOptions" }] }, { "name": "MethodDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "input_type", "number": 2, "type": 9, "label": 1 }, { "name": "output_type", "number": 3, "type": 9, "label": 1 }, { "name": "options", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.MethodOptions" }, { "name": "client_streaming", "number": 5, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "server_streaming", "number": 6, "type": 8, "label": 1, "defaultValue": "false" }] }, { "name": "FileOptions", "field": [{ "name": "java_package", "number": 1, "type": 9, "label": 1 }, { "name": "java_outer_classname", "number": 8, "type": 9, "label": 1 }, { "name": "java_multiple_files", "number": 10, "type": 8, "label": 1, "defaultValue": "false", "options": {} }, { "name": "java_generate_equals_and_hash", "number": 20, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "java_string_check_utf8", "number": 27, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "optimize_for", "number": 9, "type": 14, "label": 1, "typeName": ".google.protobuf.FileOptions.OptimizeMode", "defaultValue": "SPEED" }, { "name": "go_package", "number": 11, "type": 9, "label": 1 }, { "name": "cc_generic_services", "number": 16, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "java_generic_services", "number": 17, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "py_generic_services", "number": 18, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 23, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "cc_enable_arenas", "number": 31, "type": 8, "label": 1, "defaultValue": "true" }, { "name": "objc_class_prefix", "number": 36, "type": 9, "label": 1 }, { "name": "csharp_namespace", "number": 37, "type": 9, "label": 1 }, { "name": "swift_prefix", "number": 39, "type": 9, "label": 1 }, { "name": "php_class_prefix", "number": 40, "type": 9, "label": 1 }, { "name": "php_namespace", "number": 41, "type": 9, "label": 1 }, { "name": "php_metadata_namespace", "number": 44, "type": 9, "label": 1 }, { "name": "ruby_package", "number": 45, "type": 9, "label": 1 }, { "name": "features", "number": 50, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "enumType": [{ "name": "OptimizeMode", "value": [{ "name": "SPEED", "number": 1 }, { "name": "CODE_SIZE", "number": 2 }, { "name": "LITE_RUNTIME", "number": 3 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "MessageOptions", "field": [{ "name": "message_set_wire_format", "number": 1, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "no_standard_descriptor_accessor", "number": 2, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "map_entry", "number": 7, "type": 8, "label": 1 }, { "name": "deprecated_legacy_json_field_conflicts", "number": 11, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "features", "number": 12, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "FieldOptions", "field": [{ "name": "ctype", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.CType", "defaultValue": "STRING" }, { "name": "packed", "number": 2, "type": 8, "label": 1 }, { "name": "jstype", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.JSType", "defaultValue": "JS_NORMAL" }, { "name": "lazy", "number": 5, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "unverified_lazy", "number": 15, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "weak", "number": 10, "type": 8, "label": 1, "defaultValue": "false", "options": { "deprecated": true } }, { "name": "debug_redact", "number": 16, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "retention", "number": 17, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.OptionRetention" }, { "name": "targets", "number": 19, "type": 14, "label": 3, "typeName": ".google.protobuf.FieldOptions.OptionTargetType" }, { "name": "edition_defaults", "number": 20, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldOptions.EditionDefault" }, { "name": "features", "number": 21, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "feature_support", "number": 22, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions.FeatureSupport" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "nestedType": [{ "name": "EditionDefault", "field": [{ "name": "edition", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "value", "number": 2, "type": 9, "label": 1 }] }, { "name": "FeatureSupport", "field": [{ "name": "edition_introduced", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "edition_deprecated", "number": 2, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "deprecation_warning", "number": 3, "type": 9, "label": 1 }, { "name": "edition_removed", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "removal_error", "number": 5, "type": 9, "label": 1 }] }], "enumType": [{ "name": "CType", "value": [{ "name": "STRING", "number": 0 }, { "name": "CORD", "number": 1 }, { "name": "STRING_PIECE", "number": 2 }] }, { "name": "JSType", "value": [{ "name": "JS_NORMAL", "number": 0 }, { "name": "JS_STRING", "number": 1 }, { "name": "JS_NUMBER", "number": 2 }] }, { "name": "OptionRetention", "value": [{ "name": "RETENTION_UNKNOWN", "number": 0 }, { "name": "RETENTION_RUNTIME", "number": 1 }, { "name": "RETENTION_SOURCE", "number": 2 }] }, { "name": "OptionTargetType", "value": [{ "name": "TARGET_TYPE_UNKNOWN", "number": 0 }, { "name": "TARGET_TYPE_FILE", "number": 1 }, { "name": "TARGET_TYPE_EXTENSION_RANGE", "number": 2 }, { "name": "TARGET_TYPE_MESSAGE", "number": 3 }, { "name": "TARGET_TYPE_FIELD", "number": 4 }, { "name": "TARGET_TYPE_ONEOF", "number": 5 }, { "name": "TARGET_TYPE_ENUM", "number": 6 }, { "name": "TARGET_TYPE_ENUM_ENTRY", "number": 7 }, { "name": "TARGET_TYPE_SERVICE", "number": 8 }, { "name": "TARGET_TYPE_METHOD", "number": 9 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "OneofOptions", "field": [{ "name": "features", "number": 1, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "EnumOptions", "field": [{ "name": "allow_alias", "number": 2, "type": 8, "label": 1 }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated_legacy_json_field_conflicts", "number": 6, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "features", "number": 7, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "EnumValueOptions", "field": [{ "name": "deprecated", "number": 1, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "features", "number": 2, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "debug_redact", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "feature_support", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions.FeatureSupport" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "ServiceOptions", "field": [{ "name": "features", "number": 34, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "deprecated", "number": 33, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "MethodOptions", "field": [{ "name": "deprecated", "number": 33, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "idempotency_level", "number": 34, "type": 14, "label": 1, "typeName": ".google.protobuf.MethodOptions.IdempotencyLevel", "defaultValue": "IDEMPOTENCY_UNKNOWN" }, { "name": "features", "number": 35, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "enumType": [{ "name": "IdempotencyLevel", "value": [{ "name": "IDEMPOTENCY_UNKNOWN", "number": 0 }, { "name": "NO_SIDE_EFFECTS", "number": 1 }, { "name": "IDEMPOTENT", "number": 2 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "UninterpretedOption", "field": [{ "name": "name", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption.NamePart" }, { "name": "identifier_value", "number": 3, "type": 9, "label": 1 }, { "name": "positive_int_value", "number": 4, "type": 4, "label": 1 }, { "name": "negative_int_value", "number": 5, "type": 3, "label": 1 }, { "name": "double_value", "number": 6, "type": 1, "label": 1 }, { "name": "string_value", "number": 7, "type": 12, "label": 1 }, { "name": "aggregate_value", "number": 8, "type": 9, "label": 1 }], "nestedType": [{ "name": "NamePart", "field": [{ "name": "name_part", "number": 1, "type": 9, "label": 2 }, { "name": "is_extension", "number": 2, "type": 8, "label": 2 }] }] }, { "name": "FeatureSet", "field": [{ "name": "field_presence", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.FieldPresence", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "EXPLICIT", "edition": 900 }, { "value": "IMPLICIT", "edition": 999 }, { "value": "EXPLICIT", "edition": 1e3 }] } }, { "name": "enum_type", "number": 2, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.EnumType", "options": { "retention": 1, "targets": [6, 1], "editionDefaults": [{ "value": "CLOSED", "edition": 900 }, { "value": "OPEN", "edition": 999 }] } }, { "name": "repeated_field_encoding", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.RepeatedFieldEncoding", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "EXPANDED", "edition": 900 }, { "value": "PACKED", "edition": 999 }] } }, { "name": "utf8_validation", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.Utf8Validation", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "NONE", "edition": 900 }, { "value": "VERIFY", "edition": 999 }] } }, { "name": "message_encoding", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.MessageEncoding", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "LENGTH_PREFIXED", "edition": 900 }] } }, { "name": "json_format", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.JsonFormat", "options": { "retention": 1, "targets": [3, 6, 1], "editionDefaults": [{ "value": "LEGACY_BEST_EFFORT", "edition": 900 }, { "value": "ALLOW", "edition": 999 }] } }, { "name": "enforce_naming_style", "number": 7, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.EnforceNamingStyle", "options": { "retention": 2, "targets": [1, 2, 3, 4, 5, 6, 7, 8, 9], "editionDefaults": [{ "value": "STYLE_LEGACY", "edition": 900 }, { "value": "STYLE2024", "edition": 1001 }] } }, { "name": "default_symbol_visibility", "number": 8, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility", "options": { "retention": 2, "targets": [1], "editionDefaults": [{ "value": "EXPORT_ALL", "edition": 900 }, { "value": "EXPORT_TOP_LEVEL", "edition": 1001 }] } }], "nestedType": [{ "name": "VisibilityFeature", "enumType": [{ "name": "DefaultSymbolVisibility", "value": [{ "name": "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN", "number": 0 }, { "name": "EXPORT_ALL", "number": 1 }, { "name": "EXPORT_TOP_LEVEL", "number": 2 }, { "name": "LOCAL_ALL", "number": 3 }, { "name": "STRICT", "number": 4 }] }] }], "enumType": [{ "name": "FieldPresence", "value": [{ "name": "FIELD_PRESENCE_UNKNOWN", "number": 0 }, { "name": "EXPLICIT", "number": 1 }, { "name": "IMPLICIT", "number": 2 }, { "name": "LEGACY_REQUIRED", "number": 3 }] }, { "name": "EnumType", "value": [{ "name": "ENUM_TYPE_UNKNOWN", "number": 0 }, { "name": "OPEN", "number": 1 }, { "name": "CLOSED", "number": 2 }] }, { "name": "RepeatedFieldEncoding", "value": [{ "name": "REPEATED_FIELD_ENCODING_UNKNOWN", "number": 0 }, { "name": "PACKED", "number": 1 }, { "name": "EXPANDED", "number": 2 }] }, { "name": "Utf8Validation", "value": [{ "name": "UTF8_VALIDATION_UNKNOWN", "number": 0 }, { "name": "VERIFY", "number": 2 }, { "name": "NONE", "number": 3 }] }, { "name": "MessageEncoding", "value": [{ "name": "MESSAGE_ENCODING_UNKNOWN", "number": 0 }, { "name": "LENGTH_PREFIXED", "number": 1 }, { "name": "DELIMITED", "number": 2 }] }, { "name": "JsonFormat", "value": [{ "name": "JSON_FORMAT_UNKNOWN", "number": 0 }, { "name": "ALLOW", "number": 1 }, { "name": "LEGACY_BEST_EFFORT", "number": 2 }] }, { "name": "EnforceNamingStyle", "value": [{ "name": "ENFORCE_NAMING_STYLE_UNKNOWN", "number": 0 }, { "name": "STYLE2024", "number": 1 }, { "name": "STYLE_LEGACY", "number": 2 }] }], "extensionRange": [{ "start": 1e3, "end": 9995 }, { "start": 9995, "end": 1e4 }, { "start": 1e4, "end": 10001 }] }, { "name": "FeatureSetDefaults", "field": [{ "name": "defaults", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault" }, { "name": "minimum_edition", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "maximum_edition", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }], "nestedType": [{ "name": "FeatureSetEditionDefault", "field": [{ "name": "edition", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "overridable_features", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "fixed_features", "number": 5, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }] }] }, { "name": "SourceCodeInfo", "field": [{ "name": "location", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.SourceCodeInfo.Location" }], "nestedType": [{ "name": "Location", "field": [{ "name": "path", "number": 1, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "span", "number": 2, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "leading_comments", "number": 3, "type": 9, "label": 1 }, { "name": "trailing_comments", "number": 4, "type": 9, "label": 1 }, { "name": "leading_detached_comments", "number": 6, "type": 9, "label": 3 }] }], "extensionRange": [{ "start": 536e6, "end": 536000001 }] }, { "name": "GeneratedCodeInfo", "field": [{ "name": "annotation", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.GeneratedCodeInfo.Annotation" }], "nestedType": [{ "name": "Annotation", "field": [{ "name": "path", "number": 1, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "source_file", "number": 2, "type": 9, "label": 1 }, { "name": "begin", "number": 3, "type": 5, "label": 1 }, { "name": "end", "number": 4, "type": 5, "label": 1 }, { "name": "semantic", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.GeneratedCodeInfo.Annotation.Semantic" }], "enumType": [{ "name": "Semantic", "value": [{ "name": "NONE", "number": 0 }, { "name": "SET", "number": 1 }, { "name": "ALIAS", "number": 2 }] }] }] }], "enumType": [{ "name": "Edition", "value": [{ "name": "EDITION_UNKNOWN", "number": 0 }, { "name": "EDITION_LEGACY", "number": 900 }, { "name": "EDITION_PROTO2", "number": 998 }, { "name": "EDITION_PROTO3", "number": 999 }, { "name": "EDITION_2023", "number": 1e3 }, { "name": "EDITION_2024", "number": 1001 }, { "name": "EDITION_UNSTABLE", "number": 9999 }, { "name": "EDITION_1_TEST_ONLY", "number": 1 }, { "name": "EDITION_2_TEST_ONLY", "number": 2 }, { "name": "EDITION_99997_TEST_ONLY", "number": 99997 }, { "name": "EDITION_99998_TEST_ONLY", "number": 99998 }, { "name": "EDITION_99999_TEST_ONLY", "number": 99999 }, { "name": "EDITION_MAX", "number": 2147483647 }] }, { "name": "SymbolVisibility", "value": [{ "name": "VISIBILITY_UNSET", "number": 0 }, { "name": "VISIBILITY_LOCAL", "number": 1 }, { "name": "VISIBILITY_EXPORT", "number": 2 }] }] });\n var FileDescriptorProtoSchema = /* @__PURE__ */ messageDesc(file_google_protobuf_descriptor, 1);\n var ExtensionRangeOptions_VerificationState;\n (function(ExtensionRangeOptions_VerificationState2) {\n ExtensionRangeOptions_VerificationState2[ExtensionRangeOptions_VerificationState2["DECLARATION"] = 0] = "DECLARATION";\n ExtensionRangeOptions_VerificationState2[ExtensionRangeOptions_VerificationState2["UNVERIFIED"] = 1] = "UNVERIFIED";\n })(ExtensionRangeOptions_VerificationState || (ExtensionRangeOptions_VerificationState = {}));\n var FieldDescriptorProto_Type;\n (function(FieldDescriptorProto_Type2) {\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["DOUBLE"] = 1] = "DOUBLE";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["FLOAT"] = 2] = "FLOAT";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["INT64"] = 3] = "INT64";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["UINT64"] = 4] = "UINT64";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["INT32"] = 5] = "INT32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["FIXED64"] = 6] = "FIXED64";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["FIXED32"] = 7] = "FIXED32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["BOOL"] = 8] = "BOOL";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["STRING"] = 9] = "STRING";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["GROUP"] = 10] = "GROUP";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["MESSAGE"] = 11] = "MESSAGE";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["BYTES"] = 12] = "BYTES";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["UINT32"] = 13] = "UINT32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["ENUM"] = 14] = "ENUM";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["SFIXED32"] = 15] = "SFIXED32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["SFIXED64"] = 16] = "SFIXED64";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["SINT32"] = 17] = "SINT32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["SINT64"] = 18] = "SINT64";\n })(FieldDescriptorProto_Type || (FieldDescriptorProto_Type = {}));\n var FieldDescriptorProto_Label;\n (function(FieldDescriptorProto_Label2) {\n FieldDescriptorProto_Label2[FieldDescriptorProto_Label2["OPTIONAL"] = 1] = "OPTIONAL";\n FieldDescriptorProto_Label2[FieldDescriptorProto_Label2["REPEATED"] = 3] = "REPEATED";\n FieldDescriptorProto_Label2[FieldDescriptorProto_Label2["REQUIRED"] = 2] = "REQUIRED";\n })(FieldDescriptorProto_Label || (FieldDescriptorProto_Label = {}));\n var FileOptions_OptimizeMode;\n (function(FileOptions_OptimizeMode2) {\n FileOptions_OptimizeMode2[FileOptions_OptimizeMode2["SPEED"] = 1] = "SPEED";\n FileOptions_OptimizeMode2[FileOptions_OptimizeMode2["CODE_SIZE"] = 2] = "CODE_SIZE";\n FileOptions_OptimizeMode2[FileOptions_OptimizeMode2["LITE_RUNTIME"] = 3] = "LITE_RUNTIME";\n })(FileOptions_OptimizeMode || (FileOptions_OptimizeMode = {}));\n var FieldOptions_CType;\n (function(FieldOptions_CType2) {\n FieldOptions_CType2[FieldOptions_CType2["STRING"] = 0] = "STRING";\n FieldOptions_CType2[FieldOptions_CType2["CORD"] = 1] = "CORD";\n FieldOptions_CType2[FieldOptions_CType2["STRING_PIECE"] = 2] = "STRING_PIECE";\n })(FieldOptions_CType || (FieldOptions_CType = {}));\n var FieldOptions_JSType;\n (function(FieldOptions_JSType2) {\n FieldOptions_JSType2[FieldOptions_JSType2["JS_NORMAL"] = 0] = "JS_NORMAL";\n FieldOptions_JSType2[FieldOptions_JSType2["JS_STRING"] = 1] = "JS_STRING";\n FieldOptions_JSType2[FieldOptions_JSType2["JS_NUMBER"] = 2] = "JS_NUMBER";\n })(FieldOptions_JSType || (FieldOptions_JSType = {}));\n var FieldOptions_OptionRetention;\n (function(FieldOptions_OptionRetention2) {\n FieldOptions_OptionRetention2[FieldOptions_OptionRetention2["RETENTION_UNKNOWN"] = 0] = "RETENTION_UNKNOWN";\n FieldOptions_OptionRetention2[FieldOptions_OptionRetention2["RETENTION_RUNTIME"] = 1] = "RETENTION_RUNTIME";\n FieldOptions_OptionRetention2[FieldOptions_OptionRetention2["RETENTION_SOURCE"] = 2] = "RETENTION_SOURCE";\n })(FieldOptions_OptionRetention || (FieldOptions_OptionRetention = {}));\n var FieldOptions_OptionTargetType;\n (function(FieldOptions_OptionTargetType2) {\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_UNKNOWN"] = 0] = "TARGET_TYPE_UNKNOWN";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_FILE"] = 1] = "TARGET_TYPE_FILE";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_EXTENSION_RANGE"] = 2] = "TARGET_TYPE_EXTENSION_RANGE";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_MESSAGE"] = 3] = "TARGET_TYPE_MESSAGE";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_FIELD"] = 4] = "TARGET_TYPE_FIELD";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_ONEOF"] = 5] = "TARGET_TYPE_ONEOF";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_ENUM"] = 6] = "TARGET_TYPE_ENUM";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_ENUM_ENTRY"] = 7] = "TARGET_TYPE_ENUM_ENTRY";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_SERVICE"] = 8] = "TARGET_TYPE_SERVICE";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_METHOD"] = 9] = "TARGET_TYPE_METHOD";\n })(FieldOptions_OptionTargetType || (FieldOptions_OptionTargetType = {}));\n var MethodOptions_IdempotencyLevel;\n (function(MethodOptions_IdempotencyLevel2) {\n MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2["IDEMPOTENCY_UNKNOWN"] = 0] = "IDEMPOTENCY_UNKNOWN";\n MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2["NO_SIDE_EFFECTS"] = 1] = "NO_SIDE_EFFECTS";\n MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2["IDEMPOTENT"] = 2] = "IDEMPOTENT";\n })(MethodOptions_IdempotencyLevel || (MethodOptions_IdempotencyLevel = {}));\n var FeatureSet_VisibilityFeature_DefaultSymbolVisibility;\n (function(FeatureSet_VisibilityFeature_DefaultSymbolVisibility2) {\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["DEFAULT_SYMBOL_VISIBILITY_UNKNOWN"] = 0] = "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN";\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["EXPORT_ALL"] = 1] = "EXPORT_ALL";\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["EXPORT_TOP_LEVEL"] = 2] = "EXPORT_TOP_LEVEL";\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["LOCAL_ALL"] = 3] = "LOCAL_ALL";\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["STRICT"] = 4] = "STRICT";\n })(FeatureSet_VisibilityFeature_DefaultSymbolVisibility || (FeatureSet_VisibilityFeature_DefaultSymbolVisibility = {}));\n var FeatureSet_FieldPresence;\n (function(FeatureSet_FieldPresence2) {\n FeatureSet_FieldPresence2[FeatureSet_FieldPresence2["FIELD_PRESENCE_UNKNOWN"] = 0] = "FIELD_PRESENCE_UNKNOWN";\n FeatureSet_FieldPresence2[FeatureSet_FieldPresence2["EXPLICIT"] = 1] = "EXPLICIT";\n FeatureSet_FieldPresence2[FeatureSet_FieldPresence2["IMPLICIT"] = 2] = "IMPLICIT";\n FeatureSet_FieldPresence2[FeatureSet_FieldPresence2["LEGACY_REQUIRED"] = 3] = "LEGACY_REQUIRED";\n })(FeatureSet_FieldPresence || (FeatureSet_FieldPresence = {}));\n var FeatureSet_EnumType;\n (function(FeatureSet_EnumType2) {\n FeatureSet_EnumType2[FeatureSet_EnumType2["ENUM_TYPE_UNKNOWN"] = 0] = "ENUM_TYPE_UNKNOWN";\n FeatureSet_EnumType2[FeatureSet_EnumType2["OPEN"] = 1] = "OPEN";\n FeatureSet_EnumType2[FeatureSet_EnumType2["CLOSED"] = 2] = "CLOSED";\n })(FeatureSet_EnumType || (FeatureSet_EnumType = {}));\n var FeatureSet_RepeatedFieldEncoding;\n (function(FeatureSet_RepeatedFieldEncoding2) {\n FeatureSet_RepeatedFieldEncoding2[FeatureSet_RepeatedFieldEncoding2["REPEATED_FIELD_ENCODING_UNKNOWN"] = 0] = "REPEATED_FIELD_ENCODING_UNKNOWN";\n FeatureSet_RepeatedFieldEncoding2[FeatureSet_RepeatedFieldEncoding2["PACKED"] = 1] = "PACKED";\n FeatureSet_RepeatedFieldEncoding2[FeatureSet_RepeatedFieldEncoding2["EXPANDED"] = 2] = "EXPANDED";\n })(FeatureSet_RepeatedFieldEncoding || (FeatureSet_RepeatedFieldEncoding = {}));\n var FeatureSet_Utf8Validation;\n (function(FeatureSet_Utf8Validation2) {\n FeatureSet_Utf8Validation2[FeatureSet_Utf8Validation2["UTF8_VALIDATION_UNKNOWN"] = 0] = "UTF8_VALIDATION_UNKNOWN";\n FeatureSet_Utf8Validation2[FeatureSet_Utf8Validation2["VERIFY"] = 2] = "VERIFY";\n FeatureSet_Utf8Validation2[FeatureSet_Utf8Validation2["NONE"] = 3] = "NONE";\n })(FeatureSet_Utf8Validation || (FeatureSet_Utf8Validation = {}));\n var FeatureSet_MessageEncoding;\n (function(FeatureSet_MessageEncoding2) {\n FeatureSet_MessageEncoding2[FeatureSet_MessageEncoding2["MESSAGE_ENCODING_UNKNOWN"] = 0] = "MESSAGE_ENCODING_UNKNOWN";\n FeatureSet_MessageEncoding2[FeatureSet_MessageEncoding2["LENGTH_PREFIXED"] = 1] = "LENGTH_PREFIXED";\n FeatureSet_MessageEncoding2[FeatureSet_MessageEncoding2["DELIMITED"] = 2] = "DELIMITED";\n })(FeatureSet_MessageEncoding || (FeatureSet_MessageEncoding = {}));\n var FeatureSet_JsonFormat;\n (function(FeatureSet_JsonFormat2) {\n FeatureSet_JsonFormat2[FeatureSet_JsonFormat2["JSON_FORMAT_UNKNOWN"] = 0] = "JSON_FORMAT_UNKNOWN";\n FeatureSet_JsonFormat2[FeatureSet_JsonFormat2["ALLOW"] = 1] = "ALLOW";\n FeatureSet_JsonFormat2[FeatureSet_JsonFormat2["LEGACY_BEST_EFFORT"] = 2] = "LEGACY_BEST_EFFORT";\n })(FeatureSet_JsonFormat || (FeatureSet_JsonFormat = {}));\n var FeatureSet_EnforceNamingStyle;\n (function(FeatureSet_EnforceNamingStyle2) {\n FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2["ENFORCE_NAMING_STYLE_UNKNOWN"] = 0] = "ENFORCE_NAMING_STYLE_UNKNOWN";\n FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2["STYLE2024"] = 1] = "STYLE2024";\n FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2["STYLE_LEGACY"] = 2] = "STYLE_LEGACY";\n })(FeatureSet_EnforceNamingStyle || (FeatureSet_EnforceNamingStyle = {}));\n var GeneratedCodeInfo_Annotation_Semantic;\n (function(GeneratedCodeInfo_Annotation_Semantic2) {\n GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2["NONE"] = 0] = "NONE";\n GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2["SET"] = 1] = "SET";\n GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2["ALIAS"] = 2] = "ALIAS";\n })(GeneratedCodeInfo_Annotation_Semantic || (GeneratedCodeInfo_Annotation_Semantic = {}));\n var Edition;\n (function(Edition2) {\n Edition2[Edition2["EDITION_UNKNOWN"] = 0] = "EDITION_UNKNOWN";\n Edition2[Edition2["EDITION_LEGACY"] = 900] = "EDITION_LEGACY";\n Edition2[Edition2["EDITION_PROTO2"] = 998] = "EDITION_PROTO2";\n Edition2[Edition2["EDITION_PROTO3"] = 999] = "EDITION_PROTO3";\n Edition2[Edition2["EDITION_2023"] = 1e3] = "EDITION_2023";\n Edition2[Edition2["EDITION_2024"] = 1001] = "EDITION_2024";\n Edition2[Edition2["EDITION_UNSTABLE"] = 9999] = "EDITION_UNSTABLE";\n Edition2[Edition2["EDITION_1_TEST_ONLY"] = 1] = "EDITION_1_TEST_ONLY";\n Edition2[Edition2["EDITION_2_TEST_ONLY"] = 2] = "EDITION_2_TEST_ONLY";\n Edition2[Edition2["EDITION_99997_TEST_ONLY"] = 99997] = "EDITION_99997_TEST_ONLY";\n Edition2[Edition2["EDITION_99998_TEST_ONLY"] = 99998] = "EDITION_99998_TEST_ONLY";\n Edition2[Edition2["EDITION_99999_TEST_ONLY"] = 99999] = "EDITION_99999_TEST_ONLY";\n Edition2[Edition2["EDITION_MAX"] = 2147483647] = "EDITION_MAX";\n })(Edition || (Edition = {}));\n var SymbolVisibility;\n (function(SymbolVisibility2) {\n SymbolVisibility2[SymbolVisibility2["VISIBILITY_UNSET"] = 0] = "VISIBILITY_UNSET";\n SymbolVisibility2[SymbolVisibility2["VISIBILITY_LOCAL"] = 1] = "VISIBILITY_LOCAL";\n SymbolVisibility2[SymbolVisibility2["VISIBILITY_EXPORT"] = 2] = "VISIBILITY_EXPORT";\n })(SymbolVisibility || (SymbolVisibility = {}));\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/from-binary.js\n init_shims();\n function makeReadContext(options) {\n return Object.assign(Object.assign({ readUnknownFields: true, recursionLimit: 100 }, options), { depth: 0 });\n }\n function fromBinary(schema, bytes, options) {\n const msg = reflect(schema, void 0, false);\n readMessage(msg, new BinaryReader(bytes), makeReadContext(options), false, bytes.byteLength);\n return msg.message;\n }\n function readMessage(message, reader, ctx, delimited, lengthOrDelimitedFieldNo) {\n var _a;\n if (++ctx.depth > ctx.recursionLimit) {\n throw new Error(`cannot decode ${message.desc} from binary: maximum recursion depth of ${ctx.recursionLimit} reached`);\n }\n const end = delimited ? reader.len : reader.pos + lengthOrDelimitedFieldNo;\n let fieldNo;\n let wireType;\n const unknownFields = (_a = message.getUnknown()) !== null && _a !== void 0 ? _a : [];\n while (reader.pos < end) {\n [fieldNo, wireType] = reader.tag();\n if (delimited && wireType == WireType.EndGroup) {\n break;\n }\n const field = message.findNumber(fieldNo);\n if (!field) {\n const recursionLimit = ctx.recursionLimit - ctx.depth;\n const data = reader.skip(wireType, fieldNo, recursionLimit);\n if (ctx.readUnknownFields) {\n unknownFields.push({ no: fieldNo, wireType, data });\n }\n continue;\n }\n readField(message, reader, field, wireType, ctx);\n }\n if (delimited) {\n if (wireType != WireType.EndGroup || fieldNo !== lengthOrDelimitedFieldNo) {\n throw new Error("invalid end group tag");\n }\n }\n if (unknownFields.length > 0) {\n message.setUnknown(unknownFields);\n }\n ctx.depth--;\n }\n function readField(message, reader, field, wireType, ctx) {\n var _a;\n switch (field.fieldKind) {\n case "scalar":\n message.set(field, readScalar(reader, field.scalar, field.utf8Validation));\n break;\n case "enum":\n const val = readScalar(reader, ScalarType.INT32);\n if (field.enum.open) {\n message.set(field, val);\n } else {\n const ok = field.enum.values.some((v) => v.number === val);\n if (ok) {\n message.set(field, val);\n } else if (ctx.readUnknownFields) {\n const bytes = [];\n varint32write(val, bytes);\n const unknownFields = (_a = message.getUnknown()) !== null && _a !== void 0 ? _a : [];\n unknownFields.push({\n no: field.number,\n wireType,\n data: new Uint8Array(bytes)\n });\n message.setUnknown(unknownFields);\n }\n }\n break;\n case "message":\n message.set(field, readMessageField(reader, ctx, field, message.get(field)));\n break;\n case "list":\n readListField(reader, wireType, message.get(field), ctx);\n break;\n case "map":\n readMapEntry(reader, message.get(field), ctx);\n break;\n }\n }\n function readMapEntry(reader, map, ctx) {\n const field = map.field();\n let key;\n let val;\n const len = reader.uint32();\n const end = reader.pos + len;\n while (reader.pos < end) {\n const [fieldNo] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = readScalar(reader, field.mapKey, field.utf8Validation);\n break;\n case 2:\n switch (field.mapKind) {\n case "scalar":\n val = readScalar(reader, field.scalar, field.utf8Validation);\n break;\n case "enum":\n val = reader.int32();\n break;\n case "message":\n val = readMessageField(reader, ctx, field);\n break;\n }\n break;\n }\n }\n if (key === void 0) {\n key = scalarZeroValue(field.mapKey, false);\n }\n if (val === void 0) {\n switch (field.mapKind) {\n case "scalar":\n val = scalarZeroValue(field.scalar, false);\n break;\n case "enum":\n val = field.enum.values[0].number;\n break;\n case "message":\n val = reflect(field.message, void 0, false);\n break;\n }\n }\n map.set(key, val);\n }\n function readListField(reader, wireType, list, ctx) {\n var _a;\n const field = list.field();\n if (field.listKind === "message") {\n list.add(readMessageField(reader, ctx, field));\n return;\n }\n const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32;\n const packed = wireType == WireType.LengthDelimited && scalarType != ScalarType.STRING && scalarType != ScalarType.BYTES;\n if (!packed) {\n list.add(readScalar(reader, scalarType, field.utf8Validation));\n return;\n }\n const e = reader.uint32() + reader.pos;\n while (reader.pos < e) {\n list.add(readScalar(reader, scalarType, field.utf8Validation));\n }\n }\n function readMessageField(reader, ctx, field, mergeMessage) {\n const delimited = field.delimitedEncoding;\n const message = mergeMessage !== null && mergeMessage !== void 0 ? mergeMessage : reflect(field.message, void 0, false);\n readMessage(message, reader, ctx, delimited, delimited ? field.number : reader.uint32());\n return message;\n }\n function readScalar(reader, type, validateUtf8 = false) {\n switch (type) {\n case ScalarType.STRING:\n return reader.string(validateUtf8);\n case ScalarType.BOOL:\n return reader.bool();\n case ScalarType.DOUBLE:\n return reader.double();\n case ScalarType.FLOAT:\n return reader.float();\n case ScalarType.INT32:\n return reader.int32();\n case ScalarType.INT64:\n return reader.int64();\n case ScalarType.UINT64:\n return reader.uint64();\n case ScalarType.FIXED64:\n return reader.fixed64();\n case ScalarType.BYTES:\n return reader.bytes();\n case ScalarType.FIXED32:\n return reader.fixed32();\n case ScalarType.SFIXED32:\n return reader.sfixed32();\n case ScalarType.SFIXED64:\n return reader.sfixed64();\n case ScalarType.SINT64:\n return reader.sint64();\n case ScalarType.UINT32:\n return reader.uint32();\n case ScalarType.SINT32:\n return reader.sint32();\n }\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js\n function fileDesc(b64, imports) {\n var _a;\n const root = fromBinary(FileDescriptorProtoSchema, base64Decode(b64));\n root.messageType.forEach(restoreJsonNames);\n root.dependency = (_a = imports === null || imports === void 0 ? void 0 : imports.map((f) => f.proto.name)) !== null && _a !== void 0 ? _a : [];\n const reg = createFileRegistry(root, (protoFileName) => imports === null || imports === void 0 ? void 0 : imports.find((f) => f.proto.name === protoFileName));\n return reg.getFile(root.name);\n }\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.js\n init_shims();\n var file_google_protobuf_any = /* @__PURE__ */ fileDesc("Chlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiJgoDQW55EhAKCHR5cGVfdXJsGAEgASgJEg0KBXZhbHVlGAIgASgMQnYKE2NvbS5nb29nbGUucHJvdG9idWZCCEFueVByb3RvUAFaLGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2FueXBiogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzM");\n\n // ../../node_modules/@bufbuild/protobuf/dist/esm/to-binary.js\n init_shims();\n var LEGACY_REQUIRED2 = 3;\n var writeDefaults = {\n writeUnknownFields: true\n };\n function makeWriteOptions(options) {\n return options ? Object.assign(Object.assign({}, writeDefaults), options) : writeDefaults;\n }\n function toBinary(schema, message, options) {\n return writeFields(new BinaryWriter(), makeWriteOptions(options), reflect(schema, message)).finish();\n }\n function writeFields(writer, opts, msg) {\n var _a;\n for (const f of msg.sortedFields) {\n if (!msg.isSet(f)) {\n if (f.presence == LEGACY_REQUIRED2) {\n throw new Error(`cannot encode ${f} to binary: required field not set`);\n }\n continue;\n }\n writeField(writer, opts, msg, f);\n }\n if (opts.writeUnknownFields) {\n for (const { no, wireType, data } of (_a = msg.getUnknown()) !== null && _a !== void 0 ? _a : []) {\n writer.tag(no, wireType).raw(data);\n }\n }\n return writer;\n }\n function writeField(writer, opts, msg, field) {\n var _a;\n switch (field.fieldKind) {\n case "scalar":\n case "enum":\n writeScalar(writer, msg.desc.typeName, field.name, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, field.number, msg.get(field));\n break;\n case "list":\n writeListField(writer, opts, field, msg.get(field));\n break;\n case "message":\n writeMessageField(writer, opts, field, msg.get(field));\n break;\n case "map":\n for (const [key, val] of msg.get(field)) {\n writeMapEntry(writer, opts, field, key, val);\n }\n break;\n }\n }\n function writeScalar(writer, msgName, fieldName, scalarType, fieldNo, value) {\n writeScalarValue(writer.tag(fieldNo, writeTypeOfScalar(scalarType)), msgName, fieldName, scalarType, value);\n }\n function writeMessageField(writer, opts, field, message) {\n if (field.delimitedEncoding) {\n writeFields(writer.tag(field.number, WireType.StartGroup), opts, message).tag(field.number, WireType.EndGroup);\n } else {\n writeFields(writer.tag(field.number, WireType.LengthDelimited).fork(), opts, message).join();\n }\n }\n function writeListField(writer, opts, field, list) {\n var _a;\n if (field.listKind == "message") {\n for (const item of list) {\n writeMessageField(writer, opts, field, item);\n }\n return;\n }\n const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32;\n if (field.packed) {\n if (!list.size) {\n return;\n }\n writer.tag(field.number, WireType.LengthDelimited).fork();\n for (const item of list) {\n writeScalarValue(writer, field.parent.typeName, field.name, scalarType, item);\n }\n writer.join();\n return;\n }\n for (const item of list) {\n writeScalar(writer, field.parent.typeName, field.name, scalarType, field.number, item);\n }\n }\n function writeMapEntry(writer, opts, field, key, value) {\n var _a;\n writer.tag(field.number, WireType.LengthDelimited).fork();\n writeScalar(writer, field.parent.typeName, field.name, field.mapKey, 1, key);\n switch (field.mapKind) {\n case "scalar":\n case "enum":\n writeScalar(writer, field.parent.typeName, field.name, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, 2, value);\n break;\n case "message":\n writeFields(writer.tag(2, WireType.LengthDelimited).fork(), opts, value).join();\n break;\n }\n writer.join();\n }\n function writeScalarValue(writer, msgName, fieldName, type, value) {\n try {\n switch (type) {\n case ScalarType.STRING:\n writer.string(value);\n break;\n case ScalarType.BOOL:\n writer.bool(value);\n break;\n case ScalarType.DOUBLE:\n writer.double(value);\n break;\n case ScalarType.FLOAT:\n writer.float(value);\n break;\n case ScalarType.INT32:\n writer.int32(value);\n break;\n case ScalarType.INT64:\n writer.int64(value);\n break;\n case ScalarType.UINT64:\n writer.uint64(value);\n break;\n case ScalarType.FIXED64:\n writer.fixed64(value);\n break;\n case ScalarType.BYTES:\n writer.bytes(value);\n break;\n case ScalarType.FIXED32:\n writer.fixed32(value);\n break;\n case ScalarType.SFIXED32:\n writer.sfixed32(value);\n break;\n case ScalarType.SFIXED64:\n writer.sfixed64(value);\n break;\n case ScalarType.SINT64:\n writer.sint64(value);\n break;\n case ScalarType.UINT32:\n writer.uint32(value);\n break;\n case ScalarType.SINT32:\n writer.sint32(value);\n break;\n }\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`cannot encode field ${msgName}.${fieldName} to binary: ${e.message}`);\n }\n throw e;\n }\n }\n function writeTypeOfScalar(type) {\n switch (type) {\n case ScalarType.BYTES:\n case ScalarType.STRING:\n return WireType.LengthDelimited;\n case ScalarType.DOUBLE:\n case ScalarType.FIXED64:\n case ScalarType.SFIXED64:\n return WireType.Bit64;\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n case ScalarType.FLOAT:\n return WireType.Bit32;\n default:\n return WireType.Varint;\n }\n }\n\n // ../../adapter/kernel_machine_desk.ts\n init_shims();\n\n // ../../node_modules/@bjorn3/browser_wasi_shim/dist/index.js\n init_shims();\n\n // ../../node_modules/@bjorn3/browser_wasi_shim/dist/wasi.js\n init_shims();\n\n // ../../node_modules/@bjorn3/browser_wasi_shim/dist/wasi_defs.js\n var wasi_defs_exports = {};\n __export(wasi_defs_exports, {\n ADVICE_DONTNEED: () => ADVICE_DONTNEED,\n ADVICE_NOREUSE: () => ADVICE_NOREUSE,\n ADVICE_NORMAL: () => ADVICE_NORMAL,\n ADVICE_RANDOM: () => ADVICE_RANDOM,\n ADVICE_SEQUENTIAL: () => ADVICE_SEQUENTIAL,\n ADVICE_WILLNEED: () => ADVICE_WILLNEED,\n CLOCKID_MONOTONIC: () => CLOCKID_MONOTONIC,\n CLOCKID_PROCESS_CPUTIME_ID: () => CLOCKID_PROCESS_CPUTIME_ID,\n CLOCKID_REALTIME: () => CLOCKID_REALTIME,\n CLOCKID_THREAD_CPUTIME_ID: () => CLOCKID_THREAD_CPUTIME_ID,\n Ciovec: () => Ciovec,\n Dirent: () => Dirent,\n ERRNO_2BIG: () => ERRNO_2BIG,\n ERRNO_ACCES: () => ERRNO_ACCES,\n ERRNO_ADDRINUSE: () => ERRNO_ADDRINUSE,\n ERRNO_ADDRNOTAVAIL: () => ERRNO_ADDRNOTAVAIL,\n ERRNO_AFNOSUPPORT: () => ERRNO_AFNOSUPPORT,\n ERRNO_AGAIN: () => ERRNO_AGAIN,\n ERRNO_ALREADY: () => ERRNO_ALREADY,\n ERRNO_BADF: () => ERRNO_BADF,\n ERRNO_BADMSG: () => ERRNO_BADMSG,\n ERRNO_BUSY: () => ERRNO_BUSY,\n ERRNO_CANCELED: () => ERRNO_CANCELED,\n ERRNO_CHILD: () => ERRNO_CHILD,\n ERRNO_CONNABORTED: () => ERRNO_CONNABORTED,\n ERRNO_CONNREFUSED: () => ERRNO_CONNREFUSED,\n ERRNO_CONNRESET: () => ERRNO_CONNRESET,\n ERRNO_DEADLK: () => ERRNO_DEADLK,\n ERRNO_DESTADDRREQ: () => ERRNO_DESTADDRREQ,\n ERRNO_DOM: () => ERRNO_DOM,\n ERRNO_DQUOT: () => ERRNO_DQUOT,\n ERRNO_EXIST: () => ERRNO_EXIST,\n ERRNO_FAULT: () => ERRNO_FAULT,\n ERRNO_FBIG: () => ERRNO_FBIG,\n ERRNO_HOSTUNREACH: () => ERRNO_HOSTUNREACH,\n ERRNO_IDRM: () => ERRNO_IDRM,\n ERRNO_ILSEQ: () => ERRNO_ILSEQ,\n ERRNO_INPROGRESS: () => ERRNO_INPROGRESS,\n ERRNO_INTR: () => ERRNO_INTR,\n ERRNO_INVAL: () => ERRNO_INVAL,\n ERRNO_IO: () => ERRNO_IO,\n ERRNO_ISCONN: () => ERRNO_ISCONN,\n ERRNO_ISDIR: () => ERRNO_ISDIR,\n ERRNO_LOOP: () => ERRNO_LOOP,\n ERRNO_MFILE: () => ERRNO_MFILE,\n ERRNO_MLINK: () => ERRNO_MLINK,\n ERRNO_MSGSIZE: () => ERRNO_MSGSIZE,\n ERRNO_MULTIHOP: () => ERRNO_MULTIHOP,\n ERRNO_NAMETOOLONG: () => ERRNO_NAMETOOLONG,\n ERRNO_NETDOWN: () => ERRNO_NETDOWN,\n ERRNO_NETRESET: () => ERRNO_NETRESET,\n ERRNO_NETUNREACH: () => ERRNO_NETUNREACH,\n ERRNO_NFILE: () => ERRNO_NFILE,\n ERRNO_NOBUFS: () => ERRNO_NOBUFS,\n ERRNO_NODEV: () => ERRNO_NODEV,\n ERRNO_NOENT: () => ERRNO_NOENT,\n ERRNO_NOEXEC: () => ERRNO_NOEXEC,\n ERRNO_NOLCK: () => ERRNO_NOLCK,\n ERRNO_NOLINK: () => ERRNO_NOLINK,\n ERRNO_NOMEM: () => ERRNO_NOMEM,\n ERRNO_NOMSG: () => ERRNO_NOMSG,\n ERRNO_NOPROTOOPT: () => ERRNO_NOPROTOOPT,\n ERRNO_NOSPC: () => ERRNO_NOSPC,\n ERRNO_NOSYS: () => ERRNO_NOSYS,\n ERRNO_NOTCAPABLE: () => ERRNO_NOTCAPABLE,\n ERRNO_NOTCONN: () => ERRNO_NOTCONN,\n ERRNO_NOTDIR: () => ERRNO_NOTDIR,\n ERRNO_NOTEMPTY: () => ERRNO_NOTEMPTY,\n ERRNO_NOTRECOVERABLE: () => ERRNO_NOTRECOVERABLE,\n ERRNO_NOTSOCK: () => ERRNO_NOTSOCK,\n ERRNO_NOTSUP: () => ERRNO_NOTSUP,\n ERRNO_NOTTY: () => ERRNO_NOTTY,\n ERRNO_NXIO: () => ERRNO_NXIO,\n ERRNO_OVERFLOW: () => ERRNO_OVERFLOW,\n ERRNO_OWNERDEAD: () => ERRNO_OWNERDEAD,\n ERRNO_PERM: () => ERRNO_PERM,\n ERRNO_PIPE: () => ERRNO_PIPE,\n ERRNO_PROTO: () => ERRNO_PROTO,\n ERRNO_PROTONOSUPPORT: () => ERRNO_PROTONOSUPPORT,\n ERRNO_PROTOTYPE: () => ERRNO_PROTOTYPE,\n ERRNO_RANGE: () => ERRNO_RANGE,\n ERRNO_ROFS: () => ERRNO_ROFS,\n ERRNO_SPIPE: () => ERRNO_SPIPE,\n ERRNO_SRCH: () => ERRNO_SRCH,\n ERRNO_STALE: () => ERRNO_STALE,\n ERRNO_SUCCESS: () => ERRNO_SUCCESS,\n ERRNO_TIMEDOUT: () => ERRNO_TIMEDOUT,\n ERRNO_TXTBSY: () => ERRNO_TXTBSY,\n ERRNO_XDEV: () => ERRNO_XDEV,\n EVENTRWFLAGS_FD_READWRITE_HANGUP: () => EVENTRWFLAGS_FD_READWRITE_HANGUP,\n EVENTTYPE_CLOCK: () => EVENTTYPE_CLOCK,\n EVENTTYPE_FD_READ: () => EVENTTYPE_FD_READ,\n EVENTTYPE_FD_WRITE: () => EVENTTYPE_FD_WRITE,\n Event: () => Event,\n FDFLAGS_APPEND: () => FDFLAGS_APPEND,\n FDFLAGS_DSYNC: () => FDFLAGS_DSYNC,\n FDFLAGS_NONBLOCK: () => FDFLAGS_NONBLOCK,\n FDFLAGS_RSYNC: () => FDFLAGS_RSYNC,\n FDFLAGS_SYNC: () => FDFLAGS_SYNC,\n FD_STDERR: () => FD_STDERR,\n FD_STDIN: () => FD_STDIN,\n FD_STDOUT: () => FD_STDOUT,\n FILETYPE_BLOCK_DEVICE: () => FILETYPE_BLOCK_DEVICE,\n FILETYPE_CHARACTER_DEVICE: () => FILETYPE_CHARACTER_DEVICE,\n FILETYPE_DIRECTORY: () => FILETYPE_DIRECTORY,\n FILETYPE_REGULAR_FILE: () => FILETYPE_REGULAR_FILE,\n FILETYPE_SOCKET_DGRAM: () => FILETYPE_SOCKET_DGRAM,\n FILETYPE_SOCKET_STREAM: () => FILETYPE_SOCKET_STREAM,\n FILETYPE_SYMBOLIC_LINK: () => FILETYPE_SYMBOLIC_LINK,\n FILETYPE_UNKNOWN: () => FILETYPE_UNKNOWN,\n FSTFLAGS_ATIM: () => FSTFLAGS_ATIM,\n FSTFLAGS_ATIM_NOW: () => FSTFLAGS_ATIM_NOW,\n FSTFLAGS_MTIM: () => FSTFLAGS_MTIM,\n FSTFLAGS_MTIM_NOW: () => FSTFLAGS_MTIM_NOW,\n Fdstat: () => Fdstat,\n Filestat: () => Filestat,\n Iovec: () => Iovec,\n OFLAGS_CREAT: () => OFLAGS_CREAT,\n OFLAGS_DIRECTORY: () => OFLAGS_DIRECTORY,\n OFLAGS_EXCL: () => OFLAGS_EXCL,\n OFLAGS_TRUNC: () => OFLAGS_TRUNC,\n PREOPENTYPE_DIR: () => PREOPENTYPE_DIR,\n Prestat: () => Prestat,\n PrestatDir: () => PrestatDir,\n RIFLAGS_RECV_PEEK: () => RIFLAGS_RECV_PEEK,\n RIFLAGS_RECV_WAITALL: () => RIFLAGS_RECV_WAITALL,\n RIGHTS_FD_ADVISE: () => RIGHTS_FD_ADVISE,\n RIGHTS_FD_ALLOCATE: () => RIGHTS_FD_ALLOCATE,\n RIGHTS_FD_DATASYNC: () => RIGHTS_FD_DATASYNC,\n RIGHTS_FD_FDSTAT_SET_FLAGS: () => RIGHTS_FD_FDSTAT_SET_FLAGS,\n RIGHTS_FD_FILESTAT_GET: () => RIGHTS_FD_FILESTAT_GET,\n RIGHTS_FD_FILESTAT_SET_SIZE: () => RIGHTS_FD_FILESTAT_SET_SIZE,\n RIGHTS_FD_FILESTAT_SET_TIMES: () => RIGHTS_FD_FILESTAT_SET_TIMES,\n RIGHTS_FD_READ: () => RIGHTS_FD_READ,\n RIGHTS_FD_READDIR: () => RIGHTS_FD_READDIR,\n RIGHTS_FD_SEEK: () => RIGHTS_FD_SEEK,\n RIGHTS_FD_SYNC: () => RIGHTS_FD_SYNC,\n RIGHTS_FD_TELL: () => RIGHTS_FD_TELL,\n RIGHTS_FD_WRITE: () => RIGHTS_FD_WRITE,\n RIGHTS_PATH_CREATE_DIRECTORY: () => RIGHTS_PATH_CREATE_DIRECTORY,\n RIGHTS_PATH_CREATE_FILE: () => RIGHTS_PATH_CREATE_FILE,\n RIGHTS_PATH_FILESTAT_GET: () => RIGHTS_PATH_FILESTAT_GET,\n RIGHTS_PATH_FILESTAT_SET_SIZE: () => RIGHTS_PATH_FILESTAT_SET_SIZE,\n RIGHTS_PATH_FILESTAT_SET_TIMES: () => RIGHTS_PATH_FILESTAT_SET_TIMES,\n RIGHTS_PATH_LINK_SOURCE: () => RIGHTS_PATH_LINK_SOURCE,\n RIGHTS_PATH_LINK_TARGET: () => RIGHTS_PATH_LINK_TARGET,\n RIGHTS_PATH_OPEN: () => RIGHTS_PATH_OPEN,\n RIGHTS_PATH_READLINK: () => RIGHTS_PATH_READLINK,\n RIGHTS_PATH_REMOVE_DIRECTORY: () => RIGHTS_PATH_REMOVE_DIRECTORY,\n RIGHTS_PATH_RENAME_SOURCE: () => RIGHTS_PATH_RENAME_SOURCE,\n RIGHTS_PATH_RENAME_TARGET: () => RIGHTS_PATH_RENAME_TARGET,\n RIGHTS_PATH_SYMLINK: () => RIGHTS_PATH_SYMLINK,\n RIGHTS_PATH_UNLINK_FILE: () => RIGHTS_PATH_UNLINK_FILE,\n RIGHTS_POLL_FD_READWRITE: () => RIGHTS_POLL_FD_READWRITE,\n RIGHTS_SOCK_SHUTDOWN: () => RIGHTS_SOCK_SHUTDOWN,\n ROFLAGS_RECV_DATA_TRUNCATED: () => ROFLAGS_RECV_DATA_TRUNCATED,\n SDFLAGS_RD: () => SDFLAGS_RD,\n SDFLAGS_WR: () => SDFLAGS_WR,\n SIGNAL_ABRT: () => SIGNAL_ABRT,\n SIGNAL_ALRM: () => SIGNAL_ALRM,\n SIGNAL_BUS: () => SIGNAL_BUS,\n SIGNAL_CHLD: () => SIGNAL_CHLD,\n SIGNAL_CONT: () => SIGNAL_CONT,\n SIGNAL_FPE: () => SIGNAL_FPE,\n SIGNAL_HUP: () => SIGNAL_HUP,\n SIGNAL_ILL: () => SIGNAL_ILL,\n SIGNAL_INT: () => SIGNAL_INT,\n SIGNAL_KILL: () => SIGNAL_KILL,\n SIGNAL_NONE: () => SIGNAL_NONE,\n SIGNAL_PIPE: () => SIGNAL_PIPE,\n SIGNAL_POLL: () => SIGNAL_POLL,\n SIGNAL_PROF: () => SIGNAL_PROF,\n SIGNAL_PWR: () => SIGNAL_PWR,\n SIGNAL_QUIT: () => SIGNAL_QUIT,\n SIGNAL_SEGV: () => SIGNAL_SEGV,\n SIGNAL_STOP: () => SIGNAL_STOP,\n SIGNAL_SYS: () => SIGNAL_SYS,\n SIGNAL_TERM: () => SIGNAL_TERM,\n SIGNAL_TRAP: () => SIGNAL_TRAP,\n SIGNAL_TSTP: () => SIGNAL_TSTP,\n SIGNAL_TTIN: () => SIGNAL_TTIN,\n SIGNAL_TTOU: () => SIGNAL_TTOU,\n SIGNAL_URG: () => SIGNAL_URG,\n SIGNAL_USR1: () => SIGNAL_USR1,\n SIGNAL_USR2: () => SIGNAL_USR2,\n SIGNAL_VTALRM: () => SIGNAL_VTALRM,\n SIGNAL_WINCH: () => SIGNAL_WINCH,\n SIGNAL_XCPU: () => SIGNAL_XCPU,\n SIGNAL_XFSZ: () => SIGNAL_XFSZ,\n SUBCLOCKFLAGS_SUBSCRIPTION_CLOCK_ABSTIME: () => SUBCLOCKFLAGS_SUBSCRIPTION_CLOCK_ABSTIME,\n Subscription: () => Subscription,\n WHENCE_CUR: () => WHENCE_CUR,\n WHENCE_END: () => WHENCE_END,\n WHENCE_SET: () => WHENCE_SET\n });\n init_shims();\n var FD_STDIN = 0;\n var FD_STDOUT = 1;\n var FD_STDERR = 2;\n var CLOCKID_REALTIME = 0;\n var CLOCKID_MONOTONIC = 1;\n var CLOCKID_PROCESS_CPUTIME_ID = 2;\n var CLOCKID_THREAD_CPUTIME_ID = 3;\n var ERRNO_SUCCESS = 0;\n var ERRNO_2BIG = 1;\n var ERRNO_ACCES = 2;\n var ERRNO_ADDRINUSE = 3;\n var ERRNO_ADDRNOTAVAIL = 4;\n var ERRNO_AFNOSUPPORT = 5;\n var ERRNO_AGAIN = 6;\n var ERRNO_ALREADY = 7;\n var ERRNO_BADF = 8;\n var ERRNO_BADMSG = 9;\n var ERRNO_BUSY = 10;\n var ERRNO_CANCELED = 11;\n var ERRNO_CHILD = 12;\n var ERRNO_CONNABORTED = 13;\n var ERRNO_CONNREFUSED = 14;\n var ERRNO_CONNRESET = 15;\n var ERRNO_DEADLK = 16;\n var ERRNO_DESTADDRREQ = 17;\n var ERRNO_DOM = 18;\n var ERRNO_DQUOT = 19;\n var ERRNO_EXIST = 20;\n var ERRNO_FAULT = 21;\n var ERRNO_FBIG = 22;\n var ERRNO_HOSTUNREACH = 23;\n var ERRNO_IDRM = 24;\n var ERRNO_ILSEQ = 25;\n var ERRNO_INPROGRESS = 26;\n var ERRNO_INTR = 27;\n var ERRNO_INVAL = 28;\n var ERRNO_IO = 29;\n var ERRNO_ISCONN = 30;\n var ERRNO_ISDIR = 31;\n var ERRNO_LOOP = 32;\n var ERRNO_MFILE = 33;\n var ERRNO_MLINK = 34;\n var ERRNO_MSGSIZE = 35;\n var ERRNO_MULTIHOP = 36;\n var ERRNO_NAMETOOLONG = 37;\n var ERRNO_NETDOWN = 38;\n var ERRNO_NETRESET = 39;\n var ERRNO_NETUNREACH = 40;\n var ERRNO_NFILE = 41;\n var ERRNO_NOBUFS = 42;\n var ERRNO_NODEV = 43;\n var ERRNO_NOENT = 44;\n var ERRNO_NOEXEC = 45;\n var ERRNO_NOLCK = 46;\n var ERRNO_NOLINK = 47;\n var ERRNO_NOMEM = 48;\n var ERRNO_NOMSG = 49;\n var ERRNO_NOPROTOOPT = 50;\n var ERRNO_NOSPC = 51;\n var ERRNO_NOSYS = 52;\n var ERRNO_NOTCONN = 53;\n var ERRNO_NOTDIR = 54;\n var ERRNO_NOTEMPTY = 55;\n var ERRNO_NOTRECOVERABLE = 56;\n var ERRNO_NOTSOCK = 57;\n var ERRNO_NOTSUP = 58;\n var ERRNO_NOTTY = 59;\n var ERRNO_NXIO = 60;\n var ERRNO_OVERFLOW = 61;\n var ERRNO_OWNERDEAD = 62;\n var ERRNO_PERM = 63;\n var ERRNO_PIPE = 64;\n var ERRNO_PROTO = 65;\n var ERRNO_PROTONOSUPPORT = 66;\n var ERRNO_PROTOTYPE = 67;\n var ERRNO_RANGE = 68;\n var ERRNO_ROFS = 69;\n var ERRNO_SPIPE = 70;\n var ERRNO_SRCH = 71;\n var ERRNO_STALE = 72;\n var ERRNO_TIMEDOUT = 73;\n var ERRNO_TXTBSY = 74;\n var ERRNO_XDEV = 75;\n var ERRNO_NOTCAPABLE = 76;\n var RIGHTS_FD_DATASYNC = 1 << 0;\n var RIGHTS_FD_READ = 1 << 1;\n var RIGHTS_FD_SEEK = 1 << 2;\n var RIGHTS_FD_FDSTAT_SET_FLAGS = 1 << 3;\n var RIGHTS_FD_SYNC = 1 << 4;\n var RIGHTS_FD_TELL = 1 << 5;\n var RIGHTS_FD_WRITE = 1 << 6;\n var RIGHTS_FD_ADVISE = 1 << 7;\n var RIGHTS_FD_ALLOCATE = 1 << 8;\n var RIGHTS_PATH_CREATE_DIRECTORY = 1 << 9;\n var RIGHTS_PATH_CREATE_FILE = 1 << 10;\n var RIGHTS_PATH_LINK_SOURCE = 1 << 11;\n var RIGHTS_PATH_LINK_TARGET = 1 << 12;\n var RIGHTS_PATH_OPEN = 1 << 13;\n var RIGHTS_FD_READDIR = 1 << 14;\n var RIGHTS_PATH_READLINK = 1 << 15;\n var RIGHTS_PATH_RENAME_SOURCE = 1 << 16;\n var RIGHTS_PATH_RENAME_TARGET = 1 << 17;\n var RIGHTS_PATH_FILESTAT_GET = 1 << 18;\n var RIGHTS_PATH_FILESTAT_SET_SIZE = 1 << 19;\n var RIGHTS_PATH_FILESTAT_SET_TIMES = 1 << 20;\n var RIGHTS_FD_FILESTAT_GET = 1 << 21;\n var RIGHTS_FD_FILESTAT_SET_SIZE = 1 << 22;\n var RIGHTS_FD_FILESTAT_SET_TIMES = 1 << 23;\n var RIGHTS_PATH_SYMLINK = 1 << 24;\n var RIGHTS_PATH_REMOVE_DIRECTORY = 1 << 25;\n var RIGHTS_PATH_UNLINK_FILE = 1 << 26;\n var RIGHTS_POLL_FD_READWRITE = 1 << 27;\n var RIGHTS_SOCK_SHUTDOWN = 1 << 28;\n var Iovec = class _Iovec {\n static read_bytes(view, ptr) {\n const iovec = new _Iovec();\n iovec.buf = view.getUint32(ptr, true);\n iovec.buf_len = view.getUint32(ptr + 4, true);\n return iovec;\n }\n static read_bytes_array(view, ptr, len) {\n const iovecs = [];\n for (let i = 0; i < len; i++) {\n iovecs.push(_Iovec.read_bytes(view, ptr + 8 * i));\n }\n return iovecs;\n }\n };\n var Ciovec = class _Ciovec {\n static read_bytes(view, ptr) {\n const iovec = new _Ciovec();\n iovec.buf = view.getUint32(ptr, true);\n iovec.buf_len = view.getUint32(ptr + 4, true);\n return iovec;\n }\n static read_bytes_array(view, ptr, len) {\n const iovecs = [];\n for (let i = 0; i < len; i++) {\n iovecs.push(_Ciovec.read_bytes(view, ptr + 8 * i));\n }\n return iovecs;\n }\n };\n var WHENCE_SET = 0;\n var WHENCE_CUR = 1;\n var WHENCE_END = 2;\n var FILETYPE_UNKNOWN = 0;\n var FILETYPE_BLOCK_DEVICE = 1;\n var FILETYPE_CHARACTER_DEVICE = 2;\n var FILETYPE_DIRECTORY = 3;\n var FILETYPE_REGULAR_FILE = 4;\n var FILETYPE_SOCKET_DGRAM = 5;\n var FILETYPE_SOCKET_STREAM = 6;\n var FILETYPE_SYMBOLIC_LINK = 7;\n var Dirent = class {\n head_length() {\n return 24;\n }\n name_length() {\n return this.dir_name.byteLength;\n }\n write_head_bytes(view, ptr) {\n view.setBigUint64(ptr, this.d_next, true);\n view.setBigUint64(ptr + 8, this.d_ino, true);\n view.setUint32(ptr + 16, this.dir_name.length, true);\n view.setUint8(ptr + 20, this.d_type);\n }\n write_name_bytes(view8, ptr, buf_len) {\n view8.set(this.dir_name.slice(0, Math.min(this.dir_name.byteLength, buf_len)), ptr);\n }\n constructor(next_cookie, d_ino, name, type) {\n const encoded_name = new TextEncoder().encode(name);\n this.d_next = next_cookie;\n this.d_ino = d_ino;\n this.d_namlen = encoded_name.byteLength;\n this.d_type = type;\n this.dir_name = encoded_name;\n }\n };\n var ADVICE_NORMAL = 0;\n var ADVICE_SEQUENTIAL = 1;\n var ADVICE_RANDOM = 2;\n var ADVICE_WILLNEED = 3;\n var ADVICE_DONTNEED = 4;\n var ADVICE_NOREUSE = 5;\n var FDFLAGS_APPEND = 1 << 0;\n var FDFLAGS_DSYNC = 1 << 1;\n var FDFLAGS_NONBLOCK = 1 << 2;\n var FDFLAGS_RSYNC = 1 << 3;\n var FDFLAGS_SYNC = 1 << 4;\n var Fdstat = class {\n write_bytes(view, ptr) {\n view.setUint8(ptr, this.fs_filetype);\n view.setUint16(ptr + 2, this.fs_flags, true);\n view.setBigUint64(ptr + 8, this.fs_rights_base, true);\n view.setBigUint64(ptr + 16, this.fs_rights_inherited, true);\n }\n constructor(filetype, flags) {\n this.fs_rights_base = 0n;\n this.fs_rights_inherited = 0n;\n this.fs_filetype = filetype;\n this.fs_flags = flags;\n }\n };\n var FSTFLAGS_ATIM = 1 << 0;\n var FSTFLAGS_ATIM_NOW = 1 << 1;\n var FSTFLAGS_MTIM = 1 << 2;\n var FSTFLAGS_MTIM_NOW = 1 << 3;\n var OFLAGS_CREAT = 1 << 0;\n var OFLAGS_DIRECTORY = 1 << 1;\n var OFLAGS_EXCL = 1 << 2;\n var OFLAGS_TRUNC = 1 << 3;\n var Filestat = class {\n write_bytes(view, ptr) {\n view.setBigUint64(ptr, this.dev, true);\n view.setBigUint64(ptr + 8, this.ino, true);\n view.setUint8(ptr + 16, this.filetype);\n view.setBigUint64(ptr + 24, this.nlink, true);\n view.setBigUint64(ptr + 32, this.size, true);\n view.setBigUint64(ptr + 38, this.atim, true);\n view.setBigUint64(ptr + 46, this.mtim, true);\n view.setBigUint64(ptr + 52, this.ctim, true);\n }\n constructor(ino, filetype, size) {\n this.dev = 0n;\n this.nlink = 0n;\n this.atim = 0n;\n this.mtim = 0n;\n this.ctim = 0n;\n this.ino = ino;\n this.filetype = filetype;\n this.size = size;\n }\n };\n var EVENTTYPE_CLOCK = 0;\n var EVENTTYPE_FD_READ = 1;\n var EVENTTYPE_FD_WRITE = 2;\n var EVENTRWFLAGS_FD_READWRITE_HANGUP = 1 << 0;\n var SUBCLOCKFLAGS_SUBSCRIPTION_CLOCK_ABSTIME = 1 << 0;\n var Subscription = class _Subscription {\n static read_bytes(view, ptr) {\n return new _Subscription(view.getBigUint64(ptr, true), view.getUint8(ptr + 8), view.getUint32(ptr + 16, true), view.getBigUint64(ptr + 24, true), view.getUint16(ptr + 36, true));\n }\n constructor(userdata, eventtype, clockid, timeout, flags) {\n this.userdata = userdata;\n this.eventtype = eventtype;\n this.clockid = clockid;\n this.timeout = timeout;\n this.flags = flags;\n }\n };\n var Event = class {\n write_bytes(view, ptr) {\n view.setBigUint64(ptr, this.userdata, true);\n view.setUint16(ptr + 8, this.error, true);\n view.setUint8(ptr + 10, this.eventtype);\n }\n constructor(userdata, error, eventtype) {\n this.userdata = userdata;\n this.error = error;\n this.eventtype = eventtype;\n }\n };\n var SIGNAL_NONE = 0;\n var SIGNAL_HUP = 1;\n var SIGNAL_INT = 2;\n var SIGNAL_QUIT = 3;\n var SIGNAL_ILL = 4;\n var SIGNAL_TRAP = 5;\n var SIGNAL_ABRT = 6;\n var SIGNAL_BUS = 7;\n var SIGNAL_FPE = 8;\n var SIGNAL_KILL = 9;\n var SIGNAL_USR1 = 10;\n var SIGNAL_SEGV = 11;\n var SIGNAL_USR2 = 12;\n var SIGNAL_PIPE = 13;\n var SIGNAL_ALRM = 14;\n var SIGNAL_TERM = 15;\n var SIGNAL_CHLD = 16;\n var SIGNAL_CONT = 17;\n var SIGNAL_STOP = 18;\n var SIGNAL_TSTP = 19;\n var SIGNAL_TTIN = 20;\n var SIGNAL_TTOU = 21;\n var SIGNAL_URG = 22;\n var SIGNAL_XCPU = 23;\n var SIGNAL_XFSZ = 24;\n var SIGNAL_VTALRM = 25;\n var SIGNAL_PROF = 26;\n var SIGNAL_WINCH = 27;\n var SIGNAL_POLL = 28;\n var SIGNAL_PWR = 29;\n var SIGNAL_SYS = 30;\n var RIFLAGS_RECV_PEEK = 1 << 0;\n var RIFLAGS_RECV_WAITALL = 1 << 1;\n var ROFLAGS_RECV_DATA_TRUNCATED = 1 << 0;\n var SDFLAGS_RD = 1 << 0;\n var SDFLAGS_WR = 1 << 1;\n var PREOPENTYPE_DIR = 0;\n var PrestatDir = class {\n write_bytes(view, ptr) {\n view.setUint32(ptr, this.pr_name.byteLength, true);\n }\n constructor(name) {\n this.pr_name = new TextEncoder().encode(name);\n }\n };\n var Prestat = class _Prestat {\n static dir(name) {\n const prestat = new _Prestat();\n prestat.tag = PREOPENTYPE_DIR;\n prestat.inner = new PrestatDir(name);\n return prestat;\n }\n write_bytes(view, ptr) {\n view.setUint32(ptr, this.tag, true);\n this.inner.write_bytes(view, ptr + 4);\n }\n };\n\n // ../../node_modules/@bjorn3/browser_wasi_shim/dist/debug.js\n init_shims();\n var Debug = class Debug2 {\n enable(enabled) {\n this.log = createLogger(enabled === void 0 ? true : enabled, this.prefix);\n }\n get enabled() {\n return this.isEnabled;\n }\n constructor(isEnabled) {\n this.isEnabled = isEnabled;\n this.prefix = "wasi:";\n this.enable(isEnabled);\n }\n };\n function createLogger(enabled, prefix) {\n if (enabled) {\n const a = console.log.bind(console, "%c%s", "color: #265BA0", prefix);\n return a;\n } else {\n return () => {\n };\n }\n }\n var debug = new Debug(false);\n\n // ../../node_modules/@bjorn3/browser_wasi_shim/dist/wasi.js\n var WASIProcExit = class extends Error {\n constructor(code) {\n super("exit with exit code " + code);\n this.code = code;\n }\n };\n var WASI = class WASI2 {\n start(instance) {\n this.inst = instance;\n try {\n instance.exports._start();\n return 0;\n } catch (e) {\n if (e instanceof WASIProcExit) {\n return e.code;\n } else {\n throw e;\n }\n }\n }\n initialize(instance) {\n this.inst = instance;\n if (instance.exports._initialize) {\n instance.exports._initialize();\n }\n }\n constructor(args, env, fds, options = {}) {\n this.args = [];\n this.env = [];\n this.fds = [];\n debug.enable(options.debug);\n this.args = args;\n this.env = env;\n this.fds = fds;\n const self2 = this;\n this.wasiImport = { args_sizes_get(argc, argv_buf_size) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n buffer.setUint32(argc, self2.args.length, true);\n let buf_size = 0;\n for (const arg of self2.args) {\n buf_size += arg.length + 1;\n }\n buffer.setUint32(argv_buf_size, buf_size, true);\n debug.log(buffer.getUint32(argc, true), buffer.getUint32(argv_buf_size, true));\n return 0;\n }, args_get(argv, argv_buf) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n const orig_argv_buf = argv_buf;\n for (let i = 0; i < self2.args.length; i++) {\n buffer.setUint32(argv, argv_buf, true);\n argv += 4;\n const arg = new TextEncoder().encode(self2.args[i]);\n buffer8.set(arg, argv_buf);\n buffer.setUint8(argv_buf + arg.length, 0);\n argv_buf += arg.length + 1;\n }\n if (debug.enabled) {\n debug.log(new TextDecoder("utf-8").decode(buffer8.slice(orig_argv_buf, argv_buf)));\n }\n return 0;\n }, environ_sizes_get(environ_count, environ_size) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n buffer.setUint32(environ_count, self2.env.length, true);\n let buf_size = 0;\n for (const environ of self2.env) {\n buf_size += new TextEncoder().encode(environ).length + 1;\n }\n buffer.setUint32(environ_size, buf_size, true);\n debug.log(buffer.getUint32(environ_count, true), buffer.getUint32(environ_size, true));\n return 0;\n }, environ_get(environ, environ_buf) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n const orig_environ_buf = environ_buf;\n for (let i = 0; i < self2.env.length; i++) {\n buffer.setUint32(environ, environ_buf, true);\n environ += 4;\n const e = new TextEncoder().encode(self2.env[i]);\n buffer8.set(e, environ_buf);\n buffer.setUint8(environ_buf + e.length, 0);\n environ_buf += e.length + 1;\n }\n if (debug.enabled) {\n debug.log(new TextDecoder("utf-8").decode(buffer8.slice(orig_environ_buf, environ_buf)));\n }\n return 0;\n }, clock_res_get(id, res_ptr) {\n let resolutionValue;\n switch (id) {\n case CLOCKID_MONOTONIC: {\n resolutionValue = 5000n;\n break;\n }\n case CLOCKID_REALTIME: {\n resolutionValue = 1000000n;\n break;\n }\n default:\n return ERRNO_NOSYS;\n }\n const view = new DataView(self2.inst.exports.memory.buffer);\n view.setBigUint64(res_ptr, resolutionValue, true);\n return ERRNO_SUCCESS;\n }, clock_time_get(id, precision, time) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n if (id === CLOCKID_REALTIME) {\n buffer.setBigUint64(time, BigInt((/* @__PURE__ */ new Date()).getTime()) * 1000000n, true);\n } else if (id == CLOCKID_MONOTONIC) {\n let monotonic_time;\n try {\n monotonic_time = BigInt(Math.round(performance.now() * 1e6));\n } catch (e) {\n monotonic_time = 0n;\n }\n buffer.setBigUint64(time, monotonic_time, true);\n } else {\n buffer.setBigUint64(time, 0n, true);\n }\n return 0;\n }, fd_advise(fd, offset, len, advice) {\n if (self2.fds[fd] != void 0) {\n return ERRNO_SUCCESS;\n } else {\n return ERRNO_BADF;\n }\n }, fd_allocate(fd, offset, len) {\n if (self2.fds[fd] != void 0) {\n return self2.fds[fd].fd_allocate(offset, len);\n } else {\n return ERRNO_BADF;\n }\n }, fd_close(fd) {\n if (self2.fds[fd] != void 0) {\n const ret = self2.fds[fd].fd_close();\n self2.fds[fd] = void 0;\n return ret;\n } else {\n return ERRNO_BADF;\n }\n }, fd_datasync(fd) {\n if (self2.fds[fd] != void 0) {\n return self2.fds[fd].fd_sync();\n } else {\n return ERRNO_BADF;\n }\n }, fd_fdstat_get(fd, fdstat_ptr) {\n if (self2.fds[fd] != void 0) {\n const { ret, fdstat } = self2.fds[fd].fd_fdstat_get();\n if (fdstat != null) {\n fdstat.write_bytes(new DataView(self2.inst.exports.memory.buffer), fdstat_ptr);\n }\n return ret;\n } else {\n return ERRNO_BADF;\n }\n }, fd_fdstat_set_flags(fd, flags) {\n if (self2.fds[fd] != void 0) {\n return self2.fds[fd].fd_fdstat_set_flags(flags);\n } else {\n return ERRNO_BADF;\n }\n }, fd_fdstat_set_rights(fd, fs_rights_base, fs_rights_inheriting) {\n if (self2.fds[fd] != void 0) {\n return self2.fds[fd].fd_fdstat_set_rights(fs_rights_base, fs_rights_inheriting);\n } else {\n return ERRNO_BADF;\n }\n }, fd_filestat_get(fd, filestat_ptr) {\n if (self2.fds[fd] != void 0) {\n const { ret, filestat } = self2.fds[fd].fd_filestat_get();\n if (filestat != null) {\n filestat.write_bytes(new DataView(self2.inst.exports.memory.buffer), filestat_ptr);\n }\n return ret;\n } else {\n return ERRNO_BADF;\n }\n }, fd_filestat_set_size(fd, size) {\n if (self2.fds[fd] != void 0) {\n return self2.fds[fd].fd_filestat_set_size(size);\n } else {\n return ERRNO_BADF;\n }\n }, fd_filestat_set_times(fd, atim, mtim, fst_flags) {\n if (self2.fds[fd] != void 0) {\n return self2.fds[fd].fd_filestat_set_times(atim, mtim, fst_flags);\n } else {\n return ERRNO_BADF;\n }\n }, fd_pread(fd, iovs_ptr, iovs_len, offset, nread_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const iovecs = Iovec.read_bytes_array(buffer, iovs_ptr, iovs_len);\n let nread = 0;\n for (const iovec of iovecs) {\n const { ret, data } = self2.fds[fd].fd_pread(iovec.buf_len, offset);\n if (ret != ERRNO_SUCCESS) {\n buffer.setUint32(nread_ptr, nread, true);\n return ret;\n }\n buffer8.set(data, iovec.buf);\n nread += data.length;\n offset += BigInt(data.length);\n if (data.length != iovec.buf_len) {\n break;\n }\n }\n buffer.setUint32(nread_ptr, nread, true);\n return ERRNO_SUCCESS;\n } else {\n return ERRNO_BADF;\n }\n }, fd_prestat_get(fd, buf_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const { ret, prestat } = self2.fds[fd].fd_prestat_get();\n if (prestat != null) {\n prestat.write_bytes(buffer, buf_ptr);\n }\n return ret;\n } else {\n return ERRNO_BADF;\n }\n }, fd_prestat_dir_name(fd, path_ptr, path_len) {\n if (self2.fds[fd] != void 0) {\n const { ret, prestat } = self2.fds[fd].fd_prestat_get();\n if (prestat == null) {\n return ret;\n }\n const prestat_dir_name = prestat.inner.pr_name;\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n buffer8.set(prestat_dir_name.slice(0, path_len), path_ptr);\n return prestat_dir_name.byteLength > path_len ? ERRNO_NAMETOOLONG : ERRNO_SUCCESS;\n } else {\n return ERRNO_BADF;\n }\n }, fd_pwrite(fd, iovs_ptr, iovs_len, offset, nwritten_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const iovecs = Ciovec.read_bytes_array(buffer, iovs_ptr, iovs_len);\n let nwritten = 0;\n for (const iovec of iovecs) {\n const data = buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len);\n const { ret, nwritten: nwritten_part } = self2.fds[fd].fd_pwrite(data, offset);\n if (ret != ERRNO_SUCCESS) {\n buffer.setUint32(nwritten_ptr, nwritten, true);\n return ret;\n }\n nwritten += nwritten_part;\n offset += BigInt(nwritten_part);\n if (nwritten_part != data.byteLength) {\n break;\n }\n }\n buffer.setUint32(nwritten_ptr, nwritten, true);\n return ERRNO_SUCCESS;\n } else {\n return ERRNO_BADF;\n }\n }, fd_read(fd, iovs_ptr, iovs_len, nread_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const iovecs = Iovec.read_bytes_array(buffer, iovs_ptr, iovs_len);\n let nread = 0;\n for (const iovec of iovecs) {\n const { ret, data } = self2.fds[fd].fd_read(iovec.buf_len);\n if (ret != ERRNO_SUCCESS) {\n buffer.setUint32(nread_ptr, nread, true);\n return ret;\n }\n buffer8.set(data, iovec.buf);\n nread += data.length;\n if (data.length != iovec.buf_len) {\n break;\n }\n }\n buffer.setUint32(nread_ptr, nread, true);\n return ERRNO_SUCCESS;\n } else {\n return ERRNO_BADF;\n }\n }, fd_readdir(fd, buf, buf_len, cookie, bufused_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n let bufused = 0;\n while (true) {\n const { ret, dirent } = self2.fds[fd].fd_readdir_single(cookie);\n if (ret != 0) {\n buffer.setUint32(bufused_ptr, bufused, true);\n return ret;\n }\n if (dirent == null) {\n break;\n }\n if (buf_len - bufused < dirent.head_length()) {\n bufused = buf_len;\n break;\n }\n const head_bytes = new ArrayBuffer(dirent.head_length());\n dirent.write_head_bytes(new DataView(head_bytes), 0);\n buffer8.set(new Uint8Array(head_bytes).slice(0, Math.min(head_bytes.byteLength, buf_len - bufused)), buf);\n buf += dirent.head_length();\n bufused += dirent.head_length();\n if (buf_len - bufused < dirent.name_length()) {\n bufused = buf_len;\n break;\n }\n dirent.write_name_bytes(buffer8, buf, buf_len - bufused);\n buf += dirent.name_length();\n bufused += dirent.name_length();\n cookie = dirent.d_next;\n }\n buffer.setUint32(bufused_ptr, bufused, true);\n return 0;\n } else {\n return ERRNO_BADF;\n }\n }, fd_renumber(fd, to) {\n if (self2.fds[fd] != void 0 && self2.fds[to] != void 0) {\n const ret = self2.fds[to].fd_close();\n if (ret != 0) {\n return ret;\n }\n self2.fds[to] = self2.fds[fd];\n self2.fds[fd] = void 0;\n return 0;\n } else {\n return ERRNO_BADF;\n }\n }, fd_seek(fd, offset, whence, offset_out_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const { ret, offset: offset_out } = self2.fds[fd].fd_seek(offset, whence);\n buffer.setBigInt64(offset_out_ptr, offset_out, true);\n return ret;\n } else {\n return ERRNO_BADF;\n }\n }, fd_sync(fd) {\n if (self2.fds[fd] != void 0) {\n return self2.fds[fd].fd_sync();\n } else {\n return ERRNO_BADF;\n }\n }, fd_tell(fd, offset_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const { ret, offset } = self2.fds[fd].fd_tell();\n buffer.setBigUint64(offset_ptr, offset, true);\n return ret;\n } else {\n return ERRNO_BADF;\n }\n }, fd_write(fd, iovs_ptr, iovs_len, nwritten_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const iovecs = Ciovec.read_bytes_array(buffer, iovs_ptr, iovs_len);\n let nwritten = 0;\n for (const iovec of iovecs) {\n const data = buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len);\n const { ret, nwritten: nwritten_part } = self2.fds[fd].fd_write(data);\n if (ret != ERRNO_SUCCESS) {\n buffer.setUint32(nwritten_ptr, nwritten, true);\n return ret;\n }\n nwritten += nwritten_part;\n if (nwritten_part != data.byteLength) {\n break;\n }\n }\n buffer.setUint32(nwritten_ptr, nwritten, true);\n return ERRNO_SUCCESS;\n } else {\n return ERRNO_BADF;\n }\n }, path_create_directory(fd, path_ptr, path_len) {\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const path = new TextDecoder("utf-8").decode(buffer8.slice(path_ptr, path_ptr + path_len));\n return self2.fds[fd].path_create_directory(path);\n } else {\n return ERRNO_BADF;\n }\n }, path_filestat_get(fd, flags, path_ptr, path_len, filestat_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const path = new TextDecoder("utf-8").decode(buffer8.slice(path_ptr, path_ptr + path_len));\n const { ret, filestat } = self2.fds[fd].path_filestat_get(flags, path);\n if (filestat != null) {\n filestat.write_bytes(buffer, filestat_ptr);\n }\n return ret;\n } else {\n return ERRNO_BADF;\n }\n }, path_filestat_set_times(fd, flags, path_ptr, path_len, atim, mtim, fst_flags) {\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const path = new TextDecoder("utf-8").decode(buffer8.slice(path_ptr, path_ptr + path_len));\n return self2.fds[fd].path_filestat_set_times(flags, path, atim, mtim, fst_flags);\n } else {\n return ERRNO_BADF;\n }\n }, path_link(old_fd, old_flags, old_path_ptr, old_path_len, new_fd, new_path_ptr, new_path_len) {\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[old_fd] != void 0 && self2.fds[new_fd] != void 0) {\n const old_path = new TextDecoder("utf-8").decode(buffer8.slice(old_path_ptr, old_path_ptr + old_path_len));\n const new_path = new TextDecoder("utf-8").decode(buffer8.slice(new_path_ptr, new_path_ptr + new_path_len));\n const { ret, inode_obj } = self2.fds[old_fd].path_lookup(old_path, old_flags);\n if (inode_obj == null) {\n return ret;\n }\n return self2.fds[new_fd].path_link(new_path, inode_obj, false);\n } else {\n return ERRNO_BADF;\n }\n }, path_open(fd, dirflags, path_ptr, path_len, oflags, fs_rights_base, fs_rights_inheriting, fd_flags, opened_fd_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const path = new TextDecoder("utf-8").decode(buffer8.slice(path_ptr, path_ptr + path_len));\n debug.log(path);\n const { ret, fd_obj } = self2.fds[fd].path_open(dirflags, path, oflags, fs_rights_base, fs_rights_inheriting, fd_flags);\n if (ret != 0) {\n return ret;\n }\n self2.fds.push(fd_obj);\n const opened_fd = self2.fds.length - 1;\n buffer.setUint32(opened_fd_ptr, opened_fd, true);\n return 0;\n } else {\n return ERRNO_BADF;\n }\n }, path_readlink(fd, path_ptr, path_len, buf_ptr, buf_len, nread_ptr) {\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const path = new TextDecoder("utf-8").decode(buffer8.slice(path_ptr, path_ptr + path_len));\n debug.log(path);\n const { ret, data } = self2.fds[fd].path_readlink(path);\n if (data != null) {\n const data_buf = new TextEncoder().encode(data);\n if (data_buf.length > buf_len) {\n buffer.setUint32(nread_ptr, 0, true);\n return ERRNO_BADF;\n }\n buffer8.set(data_buf, buf_ptr);\n buffer.setUint32(nread_ptr, data_buf.length, true);\n }\n return ret;\n } else {\n return ERRNO_BADF;\n }\n }, path_remove_directory(fd, path_ptr, path_len) {\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const path = new TextDecoder("utf-8").decode(buffer8.slice(path_ptr, path_ptr + path_len));\n return self2.fds[fd].path_remove_directory(path);\n } else {\n return ERRNO_BADF;\n }\n }, path_rename(fd, old_path_ptr, old_path_len, new_fd, new_path_ptr, new_path_len) {\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0 && self2.fds[new_fd] != void 0) {\n const old_path = new TextDecoder("utf-8").decode(buffer8.slice(old_path_ptr, old_path_ptr + old_path_len));\n const new_path = new TextDecoder("utf-8").decode(buffer8.slice(new_path_ptr, new_path_ptr + new_path_len));\n let { ret, inode_obj } = self2.fds[fd].path_unlink(old_path);\n if (inode_obj == null) {\n return ret;\n }\n ret = self2.fds[new_fd].path_link(new_path, inode_obj, true);\n if (ret != ERRNO_SUCCESS) {\n if (self2.fds[fd].path_link(old_path, inode_obj, true) != ERRNO_SUCCESS) {\n throw "path_link should always return success when relinking an inode back to the original place";\n }\n }\n return ret;\n } else {\n return ERRNO_BADF;\n }\n }, path_symlink(old_path_ptr, old_path_len, fd, new_path_ptr, new_path_len) {\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const old_path = new TextDecoder("utf-8").decode(buffer8.slice(old_path_ptr, old_path_ptr + old_path_len));\n const new_path = new TextDecoder("utf-8").decode(buffer8.slice(new_path_ptr, new_path_ptr + new_path_len));\n return ERRNO_NOTSUP;\n } else {\n return ERRNO_BADF;\n }\n }, path_unlink_file(fd, path_ptr, path_len) {\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer);\n if (self2.fds[fd] != void 0) {\n const path = new TextDecoder("utf-8").decode(buffer8.slice(path_ptr, path_ptr + path_len));\n return self2.fds[fd].path_unlink_file(path);\n } else {\n return ERRNO_BADF;\n }\n }, poll_oneoff(in_ptr, out_ptr, nsubscriptions) {\n if (nsubscriptions === 0) {\n return ERRNO_INVAL;\n }\n if (nsubscriptions > 1) {\n debug.log("poll_oneoff: only a single subscription is supported");\n return ERRNO_NOTSUP;\n }\n const buffer = new DataView(self2.inst.exports.memory.buffer);\n const s = Subscription.read_bytes(buffer, in_ptr);\n const eventtype = s.eventtype;\n const clockid = s.clockid;\n const timeout = s.timeout;\n if (eventtype !== EVENTTYPE_CLOCK) {\n debug.log("poll_oneoff: only clock subscriptions are supported");\n return ERRNO_NOTSUP;\n }\n let getNow = void 0;\n if (clockid === CLOCKID_MONOTONIC) {\n getNow = () => BigInt(Math.round(performance.now() * 1e6));\n } else if (clockid === CLOCKID_REALTIME) {\n getNow = () => BigInt((/* @__PURE__ */ new Date()).getTime()) * 1000000n;\n } else {\n return ERRNO_INVAL;\n }\n const endTime = (s.flags & SUBCLOCKFLAGS_SUBSCRIPTION_CLOCK_ABSTIME) !== 0 ? timeout : getNow() + timeout;\n while (endTime > getNow()) {\n }\n const event = new Event(s.userdata, ERRNO_SUCCESS, eventtype);\n event.write_bytes(buffer, out_ptr);\n return ERRNO_SUCCESS;\n }, proc_exit(exit_code) {\n throw new WASIProcExit(exit_code);\n }, proc_raise(sig) {\n throw "raised signal " + sig;\n }, sched_yield() {\n }, random_get(buf, buf_len) {\n const buffer8 = new Uint8Array(self2.inst.exports.memory.buffer).subarray(buf, buf + buf_len);\n if ("crypto" in globalThis && (typeof SharedArrayBuffer === "undefined" || !(self2.inst.exports.memory.buffer instanceof SharedArrayBuffer))) {\n for (let i = 0; i < buf_len; i += 65536) {\n crypto.getRandomValues(buffer8.subarray(i, i + 65536));\n }\n } else {\n for (let i = 0; i < buf_len; i++) {\n buffer8[i] = Math.random() * 256 | 0;\n }\n }\n }, sock_recv(fd, ri_data, ri_flags) {\n throw "sockets not supported";\n }, sock_send(fd, si_data, si_flags) {\n throw "sockets not supported";\n }, sock_shutdown(fd, how) {\n throw "sockets not supported";\n }, sock_accept(fd, flags) {\n throw "sockets not supported";\n } };\n }\n };\n\n // ../../node_modules/@bjorn3/browser_wasi_shim/dist/fd.js\n init_shims();\n var Fd = class {\n fd_allocate(offset, len) {\n return ERRNO_NOTSUP;\n }\n fd_close() {\n return 0;\n }\n fd_fdstat_get() {\n return { ret: ERRNO_NOTSUP, fdstat: null };\n }\n fd_fdstat_set_flags(flags) {\n return ERRNO_NOTSUP;\n }\n fd_fdstat_set_rights(fs_rights_base, fs_rights_inheriting) {\n return ERRNO_NOTSUP;\n }\n fd_filestat_get() {\n return { ret: ERRNO_NOTSUP, filestat: null };\n }\n fd_filestat_set_size(size) {\n return ERRNO_NOTSUP;\n }\n fd_filestat_set_times(atim, mtim, fst_flags) {\n return ERRNO_NOTSUP;\n }\n fd_pread(size, offset) {\n return { ret: ERRNO_NOTSUP, data: new Uint8Array() };\n }\n fd_prestat_get() {\n return { ret: ERRNO_NOTSUP, prestat: null };\n }\n fd_pwrite(data, offset) {\n return { ret: ERRNO_NOTSUP, nwritten: 0 };\n }\n fd_read(size) {\n return { ret: ERRNO_NOTSUP, data: new Uint8Array() };\n }\n fd_readdir_single(cookie) {\n return { ret: ERRNO_NOTSUP, dirent: null };\n }\n fd_seek(offset, whence) {\n return { ret: ERRNO_NOTSUP, offset: 0n };\n }\n fd_sync() {\n return 0;\n }\n fd_tell() {\n return { ret: ERRNO_NOTSUP, offset: 0n };\n }\n fd_write(data) {\n return { ret: ERRNO_NOTSUP, nwritten: 0 };\n }\n path_create_directory(path) {\n return ERRNO_NOTSUP;\n }\n path_filestat_get(flags, path) {\n return { ret: ERRNO_NOTSUP, filestat: null };\n }\n path_filestat_set_times(flags, path, atim, mtim, fst_flags) {\n return ERRNO_NOTSUP;\n }\n path_link(path, inode, allow_dir) {\n return ERRNO_NOTSUP;\n }\n path_unlink(path) {\n return { ret: ERRNO_NOTSUP, inode_obj: null };\n }\n path_lookup(path, dirflags) {\n return { ret: ERRNO_NOTSUP, inode_obj: null };\n }\n path_open(dirflags, path, oflags, fs_rights_base, fs_rights_inheriting, fd_flags) {\n return { ret: ERRNO_NOTDIR, fd_obj: null };\n }\n path_readlink(path) {\n return { ret: ERRNO_NOTSUP, data: null };\n }\n path_remove_directory(path) {\n return ERRNO_NOTSUP;\n }\n path_rename(old_path, new_fd, new_path) {\n return ERRNO_NOTSUP;\n }\n path_unlink_file(path) {\n return ERRNO_NOTSUP;\n }\n };\n var Inode = class _Inode {\n static issue_ino() {\n return _Inode.next_ino++;\n }\n static root_ino() {\n return 0n;\n }\n constructor() {\n this.ino = _Inode.issue_ino();\n }\n };\n Inode.next_ino = 1n;\n\n // ../../node_modules/@bjorn3/browser_wasi_shim/dist/fs_mem.js\n init_shims();\n var OpenFile = class extends Fd {\n fd_allocate(offset, len) {\n if (this.file.size > offset + len) {\n } else {\n const new_data = new Uint8Array(Number(offset + len));\n new_data.set(this.file.data, 0);\n this.file.data = new_data;\n }\n return ERRNO_SUCCESS;\n }\n fd_fdstat_get() {\n return { ret: 0, fdstat: new Fdstat(FILETYPE_REGULAR_FILE, 0) };\n }\n fd_filestat_set_size(size) {\n if (this.file.size > size) {\n this.file.data = new Uint8Array(this.file.data.buffer.slice(0, Number(size)));\n } else {\n const new_data = new Uint8Array(Number(size));\n new_data.set(this.file.data, 0);\n this.file.data = new_data;\n }\n return ERRNO_SUCCESS;\n }\n fd_read(size) {\n const slice = this.file.data.slice(Number(this.file_pos), Number(this.file_pos + BigInt(size)));\n this.file_pos += BigInt(slice.length);\n return { ret: 0, data: slice };\n }\n fd_pread(size, offset) {\n const slice = this.file.data.slice(Number(offset), Number(offset + BigInt(size)));\n return { ret: 0, data: slice };\n }\n fd_seek(offset, whence) {\n let calculated_offset;\n switch (whence) {\n case WHENCE_SET:\n calculated_offset = offset;\n break;\n case WHENCE_CUR:\n calculated_offset = this.file_pos + offset;\n break;\n case WHENCE_END:\n calculated_offset = BigInt(this.file.data.byteLength) + offset;\n break;\n default:\n return { ret: ERRNO_INVAL, offset: 0n };\n }\n if (calculated_offset < 0) {\n return { ret: ERRNO_INVAL, offset: 0n };\n }\n this.file_pos = calculated_offset;\n return { ret: 0, offset: this.file_pos };\n }\n fd_tell() {\n return { ret: 0, offset: this.file_pos };\n }\n fd_write(data) {\n if (this.file.readonly) return { ret: ERRNO_BADF, nwritten: 0 };\n if (this.file_pos + BigInt(data.byteLength) > this.file.size) {\n const old = this.file.data;\n this.file.data = new Uint8Array(Number(this.file_pos + BigInt(data.byteLength)));\n this.file.data.set(old);\n }\n this.file.data.set(data, Number(this.file_pos));\n this.file_pos += BigInt(data.byteLength);\n return { ret: 0, nwritten: data.byteLength };\n }\n fd_pwrite(data, offset) {\n if (this.file.readonly) return { ret: ERRNO_BADF, nwritten: 0 };\n if (offset + BigInt(data.byteLength) > this.file.size) {\n const old = this.file.data;\n this.file.data = new Uint8Array(Number(offset + BigInt(data.byteLength)));\n this.file.data.set(old);\n }\n this.file.data.set(data, Number(offset));\n return { ret: 0, nwritten: data.byteLength };\n }\n fd_filestat_get() {\n return { ret: 0, filestat: this.file.stat() };\n }\n constructor(file) {\n super();\n this.file_pos = 0n;\n this.file = file;\n }\n };\n var OpenDirectory = class extends Fd {\n fd_seek(offset, whence) {\n return { ret: ERRNO_BADF, offset: 0n };\n }\n fd_tell() {\n return { ret: ERRNO_BADF, offset: 0n };\n }\n fd_allocate(offset, len) {\n return ERRNO_BADF;\n }\n fd_fdstat_get() {\n return { ret: 0, fdstat: new Fdstat(FILETYPE_DIRECTORY, 0) };\n }\n fd_readdir_single(cookie) {\n if (debug.enabled) {\n debug.log("readdir_single", cookie);\n debug.log(cookie, this.dir.contents.keys());\n }\n if (cookie == 0n) {\n return { ret: ERRNO_SUCCESS, dirent: new Dirent(1n, this.dir.ino, ".", FILETYPE_DIRECTORY) };\n } else if (cookie == 1n) {\n return { ret: ERRNO_SUCCESS, dirent: new Dirent(2n, this.dir.parent_ino(), "..", FILETYPE_DIRECTORY) };\n }\n if (cookie >= BigInt(this.dir.contents.size) + 2n) {\n return { ret: 0, dirent: null };\n }\n const [name, entry] = Array.from(this.dir.contents.entries())[Number(cookie - 2n)];\n return { ret: 0, dirent: new Dirent(cookie + 1n, entry.ino, name, entry.stat().filetype) };\n }\n path_filestat_get(flags, path_str) {\n const { ret: path_err, path } = Path.from(path_str);\n if (path == null) {\n return { ret: path_err, filestat: null };\n }\n const { ret, entry } = this.dir.get_entry_for_path(path);\n if (entry == null) {\n return { ret, filestat: null };\n }\n return { ret: 0, filestat: entry.stat() };\n }\n path_lookup(path_str, dirflags) {\n const { ret: path_ret, path } = Path.from(path_str);\n if (path == null) {\n return { ret: path_ret, inode_obj: null };\n }\n const { ret, entry } = this.dir.get_entry_for_path(path);\n if (entry == null) {\n return { ret, inode_obj: null };\n }\n return { ret: ERRNO_SUCCESS, inode_obj: entry };\n }\n path_open(dirflags, path_str, oflags, fs_rights_base, fs_rights_inheriting, fd_flags) {\n const { ret: path_ret, path } = Path.from(path_str);\n if (path == null) {\n return { ret: path_ret, fd_obj: null };\n }\n let { ret, entry } = this.dir.get_entry_for_path(path);\n if (entry == null) {\n if (ret != ERRNO_NOENT) {\n return { ret, fd_obj: null };\n }\n if ((oflags & OFLAGS_CREAT) == OFLAGS_CREAT) {\n const { ret: ret2, entry: new_entry } = this.dir.create_entry_for_path(path_str, (oflags & OFLAGS_DIRECTORY) == OFLAGS_DIRECTORY);\n if (new_entry == null) {\n return { ret: ret2, fd_obj: null };\n }\n entry = new_entry;\n } else {\n return { ret: ERRNO_NOENT, fd_obj: null };\n }\n } else if ((oflags & OFLAGS_EXCL) == OFLAGS_EXCL) {\n return { ret: ERRNO_EXIST, fd_obj: null };\n }\n if ((oflags & OFLAGS_DIRECTORY) == OFLAGS_DIRECTORY && entry.stat().filetype !== FILETYPE_DIRECTORY) {\n return { ret: ERRNO_NOTDIR, fd_obj: null };\n }\n return entry.path_open(oflags, fs_rights_base, fd_flags);\n }\n path_create_directory(path) {\n return this.path_open(0, path, OFLAGS_CREAT | OFLAGS_DIRECTORY, 0n, 0n, 0).ret;\n }\n path_link(path_str, inode, allow_dir) {\n const { ret: path_ret, path } = Path.from(path_str);\n if (path == null) {\n return path_ret;\n }\n if (path.is_dir) {\n return ERRNO_NOENT;\n }\n const { ret: parent_ret, parent_entry, filename, entry } = this.dir.get_parent_dir_and_entry_for_path(path, true);\n if (parent_entry == null || filename == null) {\n return parent_ret;\n }\n if (entry != null) {\n const source_is_dir = inode.stat().filetype == FILETYPE_DIRECTORY;\n const target_is_dir = entry.stat().filetype == FILETYPE_DIRECTORY;\n if (source_is_dir && target_is_dir) {\n if (allow_dir && entry instanceof Directory) {\n if (entry.contents.size == 0) {\n } else {\n return ERRNO_NOTEMPTY;\n }\n } else {\n return ERRNO_EXIST;\n }\n } else if (source_is_dir && !target_is_dir) {\n return ERRNO_NOTDIR;\n } else if (!source_is_dir && target_is_dir) {\n return ERRNO_ISDIR;\n } else if (inode.stat().filetype == FILETYPE_REGULAR_FILE && entry.stat().filetype == FILETYPE_REGULAR_FILE) {\n } else {\n return ERRNO_EXIST;\n }\n }\n if (!allow_dir && inode.stat().filetype == FILETYPE_DIRECTORY) {\n return ERRNO_PERM;\n }\n parent_entry.contents.set(filename, inode);\n return ERRNO_SUCCESS;\n }\n path_unlink(path_str) {\n const { ret: path_ret, path } = Path.from(path_str);\n if (path == null) {\n return { ret: path_ret, inode_obj: null };\n }\n const { ret: parent_ret, parent_entry, filename, entry } = this.dir.get_parent_dir_and_entry_for_path(path, true);\n if (parent_entry == null || filename == null) {\n return { ret: parent_ret, inode_obj: null };\n }\n if (entry == null) {\n return { ret: ERRNO_NOENT, inode_obj: null };\n }\n parent_entry.contents.delete(filename);\n return { ret: ERRNO_SUCCESS, inode_obj: entry };\n }\n path_unlink_file(path_str) {\n const { ret: path_ret, path } = Path.from(path_str);\n if (path == null) {\n return path_ret;\n }\n const { ret: parent_ret, parent_entry, filename, entry } = this.dir.get_parent_dir_and_entry_for_path(path, false);\n if (parent_entry == null || filename == null || entry == null) {\n return parent_ret;\n }\n if (entry.stat().filetype === FILETYPE_DIRECTORY) {\n return ERRNO_ISDIR;\n }\n parent_entry.contents.delete(filename);\n return ERRNO_SUCCESS;\n }\n path_remove_directory(path_str) {\n const { ret: path_ret, path } = Path.from(path_str);\n if (path == null) {\n return path_ret;\n }\n const { ret: parent_ret, parent_entry, filename, entry } = this.dir.get_parent_dir_and_entry_for_path(path, false);\n if (parent_entry == null || filename == null || entry == null) {\n return parent_ret;\n }\n if (!(entry instanceof Directory) || entry.stat().filetype !== FILETYPE_DIRECTORY) {\n return ERRNO_NOTDIR;\n }\n if (entry.contents.size !== 0) {\n return ERRNO_NOTEMPTY;\n }\n if (!parent_entry.contents.delete(filename)) {\n return ERRNO_NOENT;\n }\n return ERRNO_SUCCESS;\n }\n fd_filestat_get() {\n return { ret: 0, filestat: this.dir.stat() };\n }\n fd_filestat_set_size(size) {\n return ERRNO_BADF;\n }\n fd_read(size) {\n return { ret: ERRNO_BADF, data: new Uint8Array() };\n }\n fd_pread(size, offset) {\n return { ret: ERRNO_BADF, data: new Uint8Array() };\n }\n fd_write(data) {\n return { ret: ERRNO_BADF, nwritten: 0 };\n }\n fd_pwrite(data, offset) {\n return { ret: ERRNO_BADF, nwritten: 0 };\n }\n constructor(dir) {\n super();\n this.dir = dir;\n }\n };\n var PreopenDirectory = class extends OpenDirectory {\n fd_prestat_get() {\n return { ret: 0, prestat: Prestat.dir(this.prestat_name) };\n }\n constructor(name, contents) {\n super(new Directory(contents));\n this.prestat_name = name;\n }\n };\n var File = class extends Inode {\n path_open(oflags, fs_rights_base, fd_flags) {\n if (this.readonly && (fs_rights_base & BigInt(RIGHTS_FD_WRITE)) == BigInt(RIGHTS_FD_WRITE)) {\n return { ret: ERRNO_PERM, fd_obj: null };\n }\n if ((oflags & OFLAGS_TRUNC) == OFLAGS_TRUNC) {\n if (this.readonly) return { ret: ERRNO_PERM, fd_obj: null };\n this.data = new Uint8Array([]);\n }\n const file = new OpenFile(this);\n if (fd_flags & FDFLAGS_APPEND) file.fd_seek(0n, WHENCE_END);\n return { ret: ERRNO_SUCCESS, fd_obj: file };\n }\n get size() {\n return BigInt(this.data.byteLength);\n }\n stat() {\n return new Filestat(this.ino, FILETYPE_REGULAR_FILE, this.size);\n }\n constructor(data, options) {\n super();\n this.data = new Uint8Array(data);\n this.readonly = !!options?.readonly;\n }\n };\n var Path = class Path2 {\n static from(path) {\n const self2 = new Path2();\n self2.is_dir = path.endsWith("/");\n if (path.startsWith("/")) {\n return { ret: ERRNO_NOTCAPABLE, path: null };\n }\n if (path.includes("\\0")) {\n return { ret: ERRNO_INVAL, path: null };\n }\n for (const component of path.split("/")) {\n if (component === "" || component === ".") {\n continue;\n }\n if (component === "..") {\n if (self2.parts.pop() == void 0) {\n return { ret: ERRNO_NOTCAPABLE, path: null };\n }\n continue;\n }\n self2.parts.push(component);\n }\n return { ret: ERRNO_SUCCESS, path: self2 };\n }\n to_path_string() {\n let s = this.parts.join("/");\n if (this.is_dir) {\n s += "/";\n }\n return s;\n }\n constructor() {\n this.parts = [];\n this.is_dir = false;\n }\n };\n var Directory = class _Directory extends Inode {\n parent_ino() {\n if (this.parent == null) {\n return Inode.root_ino();\n }\n return this.parent.ino;\n }\n path_open(oflags, fs_rights_base, fd_flags) {\n return { ret: ERRNO_SUCCESS, fd_obj: new OpenDirectory(this) };\n }\n stat() {\n return new Filestat(this.ino, FILETYPE_DIRECTORY, 0n);\n }\n get_entry_for_path(path) {\n let entry = this;\n for (const component of path.parts) {\n if (!(entry instanceof _Directory)) {\n return { ret: ERRNO_NOTDIR, entry: null };\n }\n const child = entry.contents.get(component);\n if (child !== void 0) {\n entry = child;\n } else {\n debug.log(component);\n return { ret: ERRNO_NOENT, entry: null };\n }\n }\n if (path.is_dir) {\n if (entry.stat().filetype != FILETYPE_DIRECTORY) {\n return { ret: ERRNO_NOTDIR, entry: null };\n }\n }\n return { ret: ERRNO_SUCCESS, entry };\n }\n get_parent_dir_and_entry_for_path(path, allow_undefined) {\n const filename = path.parts.pop();\n if (filename === void 0) {\n return { ret: ERRNO_INVAL, parent_entry: null, filename: null, entry: null };\n }\n const { ret: entry_ret, entry: parent_entry } = this.get_entry_for_path(path);\n if (parent_entry == null) {\n return { ret: entry_ret, parent_entry: null, filename: null, entry: null };\n }\n if (!(parent_entry instanceof _Directory)) {\n return { ret: ERRNO_NOTDIR, parent_entry: null, filename: null, entry: null };\n }\n const entry = parent_entry.contents.get(filename);\n if (entry === void 0) {\n if (!allow_undefined) {\n return { ret: ERRNO_NOENT, parent_entry: null, filename: null, entry: null };\n } else {\n return { ret: ERRNO_SUCCESS, parent_entry, filename, entry: null };\n }\n }\n if (path.is_dir) {\n if (entry.stat().filetype != FILETYPE_DIRECTORY) {\n return { ret: ERRNO_NOTDIR, parent_entry: null, filename: null, entry: null };\n }\n }\n return { ret: ERRNO_SUCCESS, parent_entry, filename, entry };\n }\n create_entry_for_path(path_str, is_dir) {\n const { ret: path_ret, path } = Path.from(path_str);\n if (path == null) {\n return { ret: path_ret, entry: null };\n }\n let { ret: parent_ret, parent_entry, filename, entry } = this.get_parent_dir_and_entry_for_path(path, true);\n if (parent_entry == null || filename == null) {\n return { ret: parent_ret, entry: null };\n }\n if (entry != null) {\n return { ret: ERRNO_EXIST, entry: null };\n }\n debug.log("create", path);\n let new_child;\n if (!is_dir) {\n new_child = new File(new ArrayBuffer(0));\n } else {\n new_child = new _Directory(/* @__PURE__ */ new Map());\n }\n parent_entry.contents.set(filename, new_child);\n entry = new_child;\n return { ret: ERRNO_SUCCESS, entry };\n }\n constructor(contents) {\n super();\n this.parent = null;\n if (contents instanceof Array) {\n this.contents = new Map(contents);\n } else {\n this.contents = contents;\n }\n for (const entry of this.contents.values()) {\n if (entry instanceof _Directory) {\n entry.parent = this;\n }\n }\n }\n };\n var ConsoleStdout = class _ConsoleStdout extends Fd {\n fd_filestat_get() {\n const filestat = new Filestat(this.ino, FILETYPE_CHARACTER_DEVICE, BigInt(0));\n return { ret: 0, filestat };\n }\n fd_fdstat_get() {\n const fdstat = new Fdstat(FILETYPE_CHARACTER_DEVICE, 0);\n fdstat.fs_rights_base = BigInt(RIGHTS_FD_WRITE);\n return { ret: 0, fdstat };\n }\n fd_write(data) {\n this.write(data);\n return { ret: 0, nwritten: data.byteLength };\n }\n static lineBuffered(write) {\n const dec = new TextDecoder("utf-8", { fatal: false });\n let line_buf = "";\n return new _ConsoleStdout((buffer) => {\n line_buf += dec.decode(buffer, { stream: true });\n const lines = line_buf.split("\\n");\n for (const [i, line] of lines.entries()) {\n if (i < lines.length - 1) {\n write(line);\n } else {\n line_buf = line;\n }\n }\n });\n }\n constructor(write) {\n super();\n this.ino = Inode.issue_ino();\n this.write = write;\n }\n };\n\n // ../../node_modules/@bjorn3/browser_wasi_shim/dist/fs_opfs.js\n init_shims();\n\n // ../../node_modules/@bjorn3/browser_wasi_shim/dist/strace.js\n init_shims();\n\n // ../../adapter/memory_custody_filesystem.ts\n init_shims();\n\n // ../../adapter/git-fs.ts\n init_shims();\n function fsErr(code, p) {\n const e = new Error(`${code}: ${p}`);\n e.code = code;\n return e;\n }\n function makeGitFs(preopen, mount, { File: File2, Directory: Directory2 }) {\n const root = preopen.dir;\n const isDir = (n) => !!n && n.contents instanceof Map;\n function parts(p) {\n if (p === mount) return [];\n if (!p.startsWith(mount + "/")) throw fsErr("ENOENT", p);\n const rel = p.slice(mount.length + 1).replace(/\\/+$/, "");\n return rel === "" ? [] : rel.split("/");\n }\n function resolve(ps) {\n let cur = root;\n for (const part of ps) {\n if (!isDir(cur)) return null;\n const next = cur.contents.get(part);\n if (next === void 0) return null;\n cur = next;\n }\n return cur;\n }\n const parent2 = (ps) => resolve(ps.slice(0, -1));\n const leaf = (ps) => {\n const value = ps[ps.length - 1];\n if (value === void 0) throw fsErr("EINVAL", "empty path has no leaf");\n return value;\n };\n const promises = {\n async readFile(p, opts) {\n const n = resolve(parts(p));\n if (n === null) throw fsErr("ENOENT", p);\n if (isDir(n)) throw fsErr("EISDIR", p);\n const data = n.data ?? new Uint8Array(0);\n const encoding = typeof opts === "string" ? opts : opts && opts.encoding;\n return encoding ? new TextDecoder().decode(data) : new Uint8Array(data);\n },\n async writeFile(p, data) {\n const ps = parts(p);\n const par = parent2(ps);\n if (!isDir(par)) throw fsErr("ENOENT", p);\n const bytes = typeof data === "string" ? new TextEncoder().encode(data) : new Uint8Array(data);\n par.contents.set(leaf(ps), new File2(bytes));\n },\n async unlink(p) {\n const ps = parts(p), par = parent2(ps);\n if (!isDir(par) || !par.contents.delete(leaf(ps))) throw fsErr("ENOENT", p);\n },\n async readdir(p) {\n const n = resolve(parts(p));\n if (n === null) throw fsErr("ENOENT", p);\n if (!isDir(n)) throw fsErr("ENOTDIR", p);\n return [...n.contents.keys()];\n },\n async mkdir(p) {\n const ps = parts(p), par = parent2(ps);\n if (!isDir(par)) throw fsErr("ENOENT", p);\n if (par.contents.has(leaf(ps))) throw fsErr("EEXIST", p);\n par.contents.set(leaf(ps), new Directory2(/* @__PURE__ */ new Map()));\n },\n async rmdir(p) {\n const ps = parts(p), par = parent2(ps);\n if (!isDir(par)) throw fsErr("ENOENT", p);\n par.contents.delete(leaf(ps));\n },\n async stat(p) {\n return promises.lstat(p);\n },\n async lstat(p) {\n const n = resolve(parts(p));\n if (n === null) throw fsErr("ENOENT", p);\n const dir = isDir(n);\n return {\n type: dir ? "dir" : "file",\n mode: dir ? 16384 : 33188,\n size: dir ? 0 : n.data ? n.data.length : 0,\n ino: 0,\n mtimeMs: 0,\n ctimeMs: 0,\n uid: 1,\n gid: 1,\n dev: 1,\n isFile: () => !dir,\n isDirectory: () => dir,\n isSymbolicLink: () => false\n };\n },\n async readlink(p) {\n throw fsErr("EINVAL", p);\n },\n async symlink() {\n throw fsErr("EPERM", "symlink unsupported");\n },\n async chmod() {\n }\n };\n return { promises };\n }\n\n // ../../adapter/amortized_memory_file.ts\n init_shims();\n var ADOPT_WRITE_BYTES = 64 * 1024;\n var AmortizedOpenFile = class extends OpenFile {\n growTo(length) {\n const previous = this.file.data;\n if (length <= previous.byteLength) return;\n const available = previous.buffer.byteLength - previous.byteOffset;\n let buffer = previous.buffer;\n let offset = previous.byteOffset;\n if (length > available) {\n const capacity = Math.max(length, available > 0 ? available * 2 : 4096);\n const replacement = new Uint8Array(capacity);\n replacement.set(previous);\n buffer = replacement.buffer;\n offset = 0;\n }\n const view = new Uint8Array(buffer, offset, length);\n view.fill(0, previous.byteLength);\n this.file.data = view;\n }\n fd_write(data) {\n if (this.file.readonly) return { ret: wasi_defs_exports.ERRNO_BADF, nwritten: 0 };\n if (this.file_pos === 0n && this.file.data.byteLength === 0 && data.byteLength >= ADOPT_WRITE_BYTES && data.byteOffset === 0 && data.buffer.byteLength === data.byteLength) {\n this.file.data = data;\n this.file_pos = BigInt(data.byteLength);\n return { ret: wasi_defs_exports.ERRNO_SUCCESS, nwritten: data.byteLength };\n }\n const end = Number(this.file_pos + BigInt(data.byteLength));\n this.growTo(end);\n this.file.data.set(data, Number(this.file_pos));\n this.file_pos += BigInt(data.byteLength);\n return { ret: wasi_defs_exports.ERRNO_SUCCESS, nwritten: data.byteLength };\n }\n fd_pwrite(data, offset) {\n if (this.file.readonly) return { ret: wasi_defs_exports.ERRNO_BADF, nwritten: 0 };\n this.growTo(Number(offset + BigInt(data.byteLength)));\n this.file.data.set(data, Number(offset));\n return { ret: wasi_defs_exports.ERRNO_SUCCESS, nwritten: data.byteLength };\n }\n fd_allocate(offset, length) {\n this.growTo(Number(offset + length));\n return wasi_defs_exports.ERRNO_SUCCESS;\n }\n fd_filestat_set_size(size) {\n const length = Number(size);\n if (length < this.file.data.byteLength) {\n this.file.data = this.file.data.slice(0, length);\n } else {\n this.growTo(length);\n }\n return wasi_defs_exports.ERRNO_SUCCESS;\n }\n };\n var AmortizedFile = class extends File {\n path_open(oflags, rights, flags) {\n const opened = super.path_open(oflags, rights, flags);\n if (!(opened.fd_obj instanceof OpenFile)) return opened;\n const file = new AmortizedOpenFile(this);\n file.file_pos = opened.fd_obj.file_pos;\n return { ret: opened.ret, fd_obj: file };\n }\n };\n var AmortizedDirectory = class extends Directory {\n create_entry_for_path(path, isDirectory) {\n const created = super.create_entry_for_path(path, isDirectory);\n if (created.entry) promoteMemoryNode(created.entry);\n return created;\n }\n };\n function promoteMemoryNode(node) {\n if (node instanceof File && !(node instanceof AmortizedFile)) {\n Object.setPrototypeOf(node, AmortizedFile.prototype);\n } else if (node instanceof Directory && !(node instanceof AmortizedDirectory)) {\n Object.setPrototypeOf(node, AmortizedDirectory.prototype);\n for (const child of node.contents.values()) promoteMemoryNode(child);\n }\n }\n\n // ../../adapter/memory_custody_filesystem.ts\n function fail(code, path) {\n throw Object.assign(new Error(`${code}: ${path}`), { code });\n }\n function memoryCustodyFilesystem(preopen = new PreopenDirectory("/work", /* @__PURE__ */ new Map())) {\n promoteMemoryNode(preopen.dir);\n const parts = (path) => {\n if (path === "/work") return [];\n if (!path.startsWith("/work/") || path.includes("\\\\") || path.includes("\\0"))\n fail("EINVAL", path);\n const result2 = path.slice(6).split("/");\n if (result2.some((part) => !part || part === "." || part === ".."))\n fail("EINVAL", path);\n return result2;\n };\n const lookup = (segments) => {\n let node = preopen.dir;\n for (const segment of segments) node = node?.contents?.get(segment);\n return node;\n };\n const parent2 = (path) => {\n const segments = parts(path);\n const leaf = segments.pop();\n if (!leaf) fail("EINVAL", path);\n const node = lookup(segments);\n if (!node) fail("ENOENT", path);\n if (!node.contents) fail("ENOTDIR", path);\n return [node.contents, leaf];\n };\n const files2 = {\n mkdir(path) {\n const [directory, leaf] = parent2(path);\n if (directory.has(leaf)) fail("EEXIST", path);\n directory.set(leaf, new AmortizedDirectory(/* @__PURE__ */ new Map()));\n },\n writeFile(path, bytes) {\n const [directory, leaf] = parent2(path);\n if (directory.get(leaf)?.contents) fail("EISDIR", path);\n directory.set(leaf, new AmortizedFile(bytes));\n },\n unlink(path) {\n const [directory, leaf] = parent2(path);\n if (directory.get(leaf)?.contents) fail("EISDIR", path);\n if (!directory.delete(leaf)) fail("ENOENT", path);\n },\n treeBytes(path) {\n const root = lookup(parts(path));\n const pending = root ? [root] : [];\n let bytes = 0n;\n while (pending.length) {\n const node = pending.pop();\n if (node.data) bytes += BigInt(node.data.byteLength);\n if (node.contents) pending.push(...node.contents.values());\n }\n return bytes;\n },\n listFiles(path) {\n const root = lookup(parts(path));\n if (!root) return [];\n if (!root.contents) return [path];\n const files3 = [];\n const pending = [[path, root]];\n while (pending.length) {\n const [parentPath, node] = pending.pop();\n for (const [name, child] of node.contents ?? []) {\n const childPath = `${parentPath}/${name}`;\n if (child.contents) pending.push([childPath, child]);\n else files3.push(childPath);\n }\n }\n return files3.sort();\n },\n readFile(path) {\n const node = lookup(parts(path));\n if (!node) fail("ENOENT", path);\n if (!node.data) fail("EISDIR", path);\n return node.data.slice();\n },\n readFileRange(path, offset, length) {\n const node = lookup(parts(path));\n if (!node?.data) fail("ENOENT", path);\n return node.data.slice(offset, offset + length);\n },\n fileExists(path) {\n return lookup(parts(path))?.data !== void 0;\n },\n appendFile(path, bytes) {\n const [directory, leaf] = parent2(path);\n const held = directory.get(leaf);\n if (held?.contents) fail("EISDIR", path);\n const before = held?.data ?? new Uint8Array();\n const joined = new Uint8Array(before.byteLength + bytes.byteLength);\n joined.set(before);\n joined.set(bytes, before.byteLength);\n directory.set(leaf, new AmortizedFile(joined));\n },\n fileSize(path) {\n return lookup(parts(path))?.data?.byteLength;\n }\n };\n return {\n preopen,\n adoptFile(path, bytes) {\n const [directory, leaf] = parent2(path);\n if (directory.get(leaf)?.contents) fail("EISDIR", path);\n const file = new AmortizedFile(new ArrayBuffer(0));\n file.data = bytes;\n directory.set(leaf, file);\n },\n delta(previous, mutated, includePath = () => true, copyChanged = true, chunkBytes) {\n const nodes = /* @__PURE__ */ new Map();\n const changed = [];\n const copy = (data) => {\n if (chunkBytes === void 0 || data.byteLength <= chunkBytes) return { bytes: data.slice() };\n const chunks = [];\n for (let offset = 0; offset < data.byteLength; offset += chunkBytes)\n chunks.push(data.slice(offset, offset + chunkBytes));\n return { chunks };\n };\n const visit = (path, node) => {\n if (!includePath(path)) return;\n if (path !== "/work") {\n nodes.set(path, node);\n if (copyChanged && (previous.get(path) !== node || mutated.has(node)))\n changed.push({ path, ...node.data ? copy(node.data) : {} });\n }\n for (const [name, child] of node.contents ?? []) visit(`${path}/${name}`, child);\n };\n visit("/work", preopen.dir);\n return { nodes, changed, removed: [...previous.keys()].filter((path) => !nodes.has(path)) };\n },\n snapshot(includePath = () => true) {\n const entries = [];\n const visit = (path, node) => {\n if (!includePath(path)) return;\n if (path !== "/work") entries.push({ path, ...node.data ? { bytes: node.data.slice() } : {} });\n for (const [name, child] of node.contents ?? []) visit(`${path}/${name}`, child);\n };\n visit("/work", preopen.dir);\n return entries;\n },\n files: files2,\n fs: makeGitFs(\n preopen,\n "/work",\n { File: AmortizedFile, Directory: AmortizedDirectory }\n )\n };\n }\n\n // ../../adapter/kernel_call_desk.ts\n init_shims();\n\n // ../../adapter/proto/nomos/kernel/v1/kernel_pb.js\n init_shims();\n var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEixgkKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEkAKCWNvbmZpZ3VyZRgQIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdEgAEkgKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYESABKAsyKS5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0SAASSgoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVxdWVzdEgAEk4KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YEyABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXF1ZXN0SAASTgoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgUIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3RIABJDChBzaWduaW5nX2lkZW50aXR5GBcgASgLMicubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdJZGVudGl0eVJlcXVlc3RIABJWChpzaWduX2F1dGhvcml0eV9hdHRlc3RhdGlvbhgYIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0SAASPAoNbWludF90eXBlZF9pZBgZIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlcXVlc3RIABJJChNlbmNyeXB0aW9uX2lkZW50aXR5GBogASgLMioubm9tb3Mua2VybmVsLnYxLkVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3RIABI+Cg53cmFwX3Njb3BlX2tleRgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5XcmFwU2NvcGVLZXlSZXF1ZXN0SAASQgoQdW53cmFwX3Njb3BlX2tleRgcIAEoCzImLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlcXVlc3RIAEILCglvcGVyYXRpb25KBAgVEBZKBAgWEBdSFGluaXRpYWxpemVfd29ya3NwYWNlUhZhcHBseV93b3Jrc3BhY2VfZWZmZWN0IoMKCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASQQoJY29uZmlndXJlGBEgASgLMiwubm9tb3Mua2VybmVsLnYxLktlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZUgAEkkKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZUgAEksKFHByZXBhcmVfcmVtb3RlX29mZmVyGBMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlSAASTwoWc2lnbl9vZmZlcl9wcmVwYXJhdGlvbhgUIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlSAASTwoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgVIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlSAASRAoQc2lnbmluZ19pZGVudGl0eRgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nSWRlbnRpdHlSZXNwb25zZUgAElcKGnNpZ25fYXV0aG9yaXR5X2F0dGVzdGF0aW9uGBkgASgLMjEubm9tb3Mua2VybmVsLnYxLlNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlSAASPQoNbWludF90eXBlZF9pZBgaIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlc3BvbnNlSAASSgoTZW5jcnlwdGlvbl9pZGVudGl0eRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5FbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZUgAEj8KDndyYXBfc2NvcGVfa2V5GBwgASgLMiUubm9tb3Mua2VybmVsLnYxLldyYXBTY29wZUtleVJlc3BvbnNlSAASQwoQdW53cmFwX3Njb3BlX2tleRgdIAEoCzInLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlc3BvbnNlSABCCQoHb3V0Y29tZUoECBYQF0oECBcQGFIUaW5pdGlhbGl6ZV93b3Jrc3BhY2VSFmFwcGx5X3dvcmtzcGFjZV9lZmZlY3QitwIKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSYQoiaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZBgKIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkSACIAQESPwoQaGlzdG9yeV9yZXF1aXJlZBgLIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5UmVxdWlyZWRIAYgBAUIlCiNfaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZEITChFfaGlzdG9yeV9yZXF1aXJlZCJRCh9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSFAoMcmVxdWlyZWRfa2lkGAIgASgJIjwKDE9wZW5SZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiugQKDU9mZmVyUmVzcG9uc2USMgoIYWRtaXR0ZWQYASABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZG1pdHRlZEgAEjAKB3JlZnVzZWQYAiABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZWZ1c2VkSAASOwoNZGVhZF9sZXR0ZXJlZBgDIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckRlYWRMZXR0ZXJlZEgAEjgKC3F1YXJhbnRpbmVkGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLk9mZmVyUXVhcmFudGluZWRIABJKChVibG9ja2VkX29uX2RlcGVuZGVuY3kYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuT2ZmZXJCbG9ja2VkT25EZXBlbmRlbmN5SAASMgoIcHJlcGFyZWQYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJlZEgAEkIKEHdvcmtzcGFjZV9lZmZlY3QYByABKAsyKC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SWRlbnRpdHkSGwoOanVkZ2VkX2F0X2hlYWQYCCABKAlIAYgBARJNChJqdWRnbWVudF9zaWduYXR1cmUYCSABKAsyMS5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmVCCQoHb3V0Y29tZUIRCg9fanVkZ2VkX2F0X2hlYWQifwogV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmUSDwoHdmVyc2lvbhgBIAEoDRISCgpwdWJsaWNfa2V5GAIgASgMEhEKCWtleV9lcG9jaBgDIAEoEhIRCglzaWduYXR1cmUYBCABKAwSEAoIanVkZ21lbnQYBSABKAwiqAEKF1dvcmtzcGFjZUVmZmVjdElkZW50aXR5EhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAIgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAyABKAkSIAoYdGFyZ2V0X3dvcmtzcGFjZV9nZW5lc2lzGAQgASgJEhUKDWVmZmVjdF9kaWdlc3QYBSABKAkiVwocV29ya3NwYWNlRWZmZWN0U3RhdHVzUmVxdWVzdBIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYASABKAkSFQoNZWZmZWN0X2RpZ2VzdBgCIAEoCSJRCh1Xb3Jrc3BhY2VFZmZlY3RTdGF0dXNSZXNwb25zZRIwCghqdWRnbWVudBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlIoYCCiNSZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdBIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEhUKC21haWxib3hfdXJsGAMgASgJSAASPQoRcmVjaXBpZW50X2N1c3RvZHkYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0SAASMAoIanVkZ21lbnQYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUIKCghldmlkZW5jZSJaCh5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWUSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCRIYChB0ZXJtaW5hbF9yZWZ1c2FsGAMgASgIIq4FCg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCBIfChJpbnN0YWxsZWRfbGF3X2hhc2gYCiABKAlIAogBARI5CglwbGFjZW1lbnQYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuUGxhY2VtZW50QWRvcHRlZEgDiAEBEhcKD2FscmVhZHlfYXBwbGllZBgMIAEoCBI8CgxzdGF0ZV9jaGFuZ2UYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuT2ZmZXJTdGF0ZUNoYW5nZUgEiAEBEkAKFGxhd192ZXJzaW9uX3dhcm5pbmdzGA4gAygLMiIubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25XYXJuaW5nQg0KC19pbnRlbnRfb3V0Qg8KDV9rZXJuZWxfc3BhbnNCFQoTX2luc3RhbGxlZF9sYXdfaGFzaEIMCgpfcGxhY2VtZW50Qg8KDV9zdGF0ZV9jaGFuZ2UiIwoLTGF3SWRlbnRpdHkSFAoMcGFja2FnZV9uYW1lGAEgASgJIiQKCkxhd1ZlcnNpb24SFgoOY2xvc3VyZV9zaGEyNTYYASABKAkiIQoPTGF3VmVyc2lvbkNsYWltEg4KBnNlbXZlchgBIAEoCSLgAgoRTGF3VmVyc2lvbldhcm5pbmcSKQoDbGF3GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLkxhd0lkZW50aXR5Ei8KBW9yZGVyGAIgASgOMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25PcmRlchI5Cg9pbnN0YWxsZWRfY2xhaW0YAyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGF3VmVyc2lvbkNsYWltEjYKEWluc3RhbGxlZF92ZXJzaW9uGAQgASgLMhsubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb24SNgoMc2VydmVkX2NsYWltGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25DbGFpbRIzCg5zZXJ2ZWRfdmVyc2lvbhgGIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5MYXdWZXJzaW9uEg8KB21lc3NhZ2UYByABKAkiUgoQT2ZmZXJTdGF0ZUNoYW5nZRITCgtwYXJlbnRfaGVhZBgBIAEoCRIXCg9hZ2dyZWdhdGVfdHlwZXMYAiADKAkSEAoIYXJjaGl2ZXMYAyABKAgiLQoRT2ZmZXJBZ2dyZWdhdGVSZWYSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSIwCg1Cb3JuV29ya3NwYWNlEhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRoZWFkGAIgASgJIssDCgxCaXJ0aE91dGNvbWUSFgoJd29ya3NwYWNlGAEgASgJSACIAQESMwoGc3RhdHVzGAIgASgOMiMubm9tb3Mua2VybmVsLnYxLkJpcnRoT3V0Y29tZVN0YXR1cxITCgZyZWFzb24YAyABKAlIAYgBARIRCgRjb2RlGAQgASgJSAKIAQESEAoIcmVwbGF5ZWQYBSABKAgSFQoIbGF3X2hhc2gYBiABKAlIA4gBARIdChBwYXJlbnRfd29ya3NwYWNlGAcgASgJSASIAQESHAoPY2hpbGRfd29ya3NwYWNlGAggASgJSAWIAQESJwoaY2VydGlmaWNhdGVfcmVmdXNhbF9yZWFzb24YCSABKAlIBogBARI0CgdyZWZ1c2FsGAogASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIMCgpfd29ya3NwYWNlQgkKB19yZWFzb25CBwoFX2NvZGVCCwoJX2xhd19oYXNoQhMKEV9wYXJlbnRfd29ya3NwYWNlQhIKEF9jaGlsZF93b3Jrc3BhY2VCHQobX2NlcnRpZmljYXRlX3JlZnVzYWxfcmVhc29uQgoKCF9yZWZ1c2FsIi8KEEtlcm5lbFNwYW5NZXRyaWMSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoBCKjAQoKS2VybmVsU3BhbhINCgVsYWJlbBgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBBIPCgdyZWNvcmRzGAMgASgEEjEKBnBoYXNlcxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljEjAKBW5vdGVzGAUgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMicQoLS2VybmVsU3BhbnMSLwoKb3BlcmF0aW9ucxgBIAMoCzIbLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuEjEKBmVuZ2luZRgCIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljImEKDURvbWFpblJlZnVzYWwSEgoKbGF3X3NoYTI1NhgBIAEoDBIRCglpbnZhcmlhbnQYAiABKAkSFQoNdHlwZV9pZGVudGl0eRgDIAEoCRISCgp2YWx1ZV91c2RhGAQgASgMIs4BCgxPZmZlclJlZnVzZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIvCgdyZWZ1c2FsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWwSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSNgoOZG9tYWluX3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluUmVmdXNhbEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIsABChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSPQoSYXdhaXRzX21haW50ZW5hbmNlGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleFBlbmRpbmdCCwoJX29mZmVyX2lkIr8BCg1PZmZlclByZXBhcmVkEhwKFGF1dGhvcmVkX2NoYW5nZV91c2RhGAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSIQoZYXV0aG9yX3NpZ25hdHVyZV9yZXF1aXJlZBgEIAEoCBI4CghkZXRhY2hlZBgFIAEoCzImLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25pbmdJbnB1dHMiYwoVRGV0YWNoZWRTaWduaW5nSW5wdXRzEhIKCnB1YmxpY19rZXkYASABKAwSEQoJaW50ZW50X2lkGAIgASgJEg4KBmF1dGhvchgDIAEoDBITCgtvZmZlcl90b2tlbhgEIAEoCSKVAQoURGV0YWNoZWRTaWduZWRDaGFuZ2USHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSEgoKcHVibGljX2tleRgCIAEoDBIYChBhdXRob3Jfc2lnbmF0dXJlGAMgASgMEhIKCm9mZmVyX2Jhc2UYBCABKAkSHQoVb2ZmZXJfdG9rZW5fc2lnbmF0dXJlGAUgASgMImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIq0BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDBIdChVyZXF1aXJlZF9jdXN0b2R5X2hlYWQYBiABKAkiUAoZT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZRIZChF3b3Jrc3BhY2VfYmluZGluZxgBIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAIgASgJIpkBChpQcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZRI/CgljaGFsbGVuZ2UYASABKAsyKi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZUgAEi8KBW9mZmVyGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEIJCgdvdXRjb21lIoABChtTaWduT2ZmZXJQcmVwYXJhdGlvblJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwiRQocU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZRISCgpwdWJsaWNfa2V5GAEgASgMEhEKCXNpZ25hdHVyZRgCIAEoDCKkAQoWU2lnbmluZ0lkZW50aXR5UmVxdWVzdBI7CghnZW5lcmF0ZRgBIAEoCzInLm5vbW9zLmtlcm5lbC52MS5HZW5lcmF0ZVNpZ25pbmdLZXlQYWlySAASQAoNZGVyaXZlX3B1YmxpYxgCIAEoCzInLm5vbW9zLmtlcm5lbC52MS5EZXJpdmVTaWduaW5nUHVibGljS2V5SABCCwoJb3BlcmF0aW9uIhgKFkdlbmVyYXRlU2lnbmluZ0tleVBhaXIiKAoWRGVyaXZlU2lnbmluZ1B1YmxpY0tleRIOCgZzZWNyZXQYASABKAwilgEKF1NpZ25pbmdJZGVudGl0eVJlc3BvbnNlEjQKCWdlbmVyYXRlZBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nS2V5UGFpckgAEjsKDmRlcml2ZWRfcHVibGljGAIgASgLMiEubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdQdWJsaWNLZXlIAEIICgZyZXN1bHQiNAoOU2lnbmluZ0tleVBhaXISDgoGc2VjcmV0GAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiJgoQU2lnbmluZ1B1YmxpY0tleRISCgpwdWJsaWNfa2V5GAEgASgMIpwBCh9TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0EhUKDXNpZ25lcl9zZWNyZXQYASABKAwSGgoSYXNzZXJ0ZXJfd29ya3NwYWNlGAIgASgJEg4KBm9iamVjdBgDIAEoCRIQCghyZWxhdGlvbhgEIAEoCRIPCgdzdWJqZWN0GAUgASgJEhMKC2F0dGVzdGVkX2F0GAYgASgJIkkKIFNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlEhEKCXNpZ25hdHVyZRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkQKEk1pbnRUeXBlZElkUmVxdWVzdBIQCgh0eXBlX3RhZxgBIAEoCRIcChRjYXB0dXJlZF91bml4X21pbGxpcxgCIAEoBCIhChNNaW50VHlwZWRJZFJlc3BvbnNlEgoKAmlkGAEgASgJIhsKGUVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3QiRAoaRW5jcnlwdGlvbklkZW50aXR5UmVzcG9uc2USEgoKc2VjcmV0X2tleRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkYKE1dyYXBTY29wZUtleVJlcXVlc3QSHAoUcmVjaXBpZW50X3B1YmxpY19rZXkYASABKAwSEQoJc2NvcGVfa2V5GAIgASgMIkgKFFdyYXBTY29wZUtleVJlc3BvbnNlEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAEgASgMEhIKCmNpcGhlcnRleHQYAiABKAwiZwoVVW53cmFwU2NvcGVLZXlSZXF1ZXN0EhwKFHJlY2lwaWVudF9zZWNyZXRfa2V5GAEgASgMEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAIgASgMEhIKCmNpcGhlcnRleHQYAyABKAwiKwoWVW53cmFwU2NvcGVLZXlSZXNwb25zZRIRCglzY29wZV9rZXkYASABKAwikwEKDUtlcm5lbFJlZnVzYWwSMAoEY29kZRgBIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsQ29kZRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEAoIdGVybWluYWwYBCABKAgixxAKDVF1ZXJ5UmVzcG9uc2USFQoLcmVzdWx0X3VzZGEYAiABKAxIABIsCgV2YWx1ZRgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEj4KDW9zZ2lfcmVzb3VyY2UYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuT3NnaVJlc291cmNlUmVzcG9uc2VIABJKChNmcm9udGllcl90cmFuc2l0aW9uGA0gASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAASSwoUb3duZWRfZGV2aWNlX3JlcXVlc3QYDiABKAsyKy5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UmVzcG9uc2VIABJPChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUmVzcG9uc2VIABIXCg1pbnRlZ2VyX3ZhbHVlGBAgASgSSAASUAoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgRIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVSZXNwb25zZUgAEkgKEGNoaWxkX3dvcmtzcGFjZXMYEiABKAsyLC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeVJlc3BvbnNlSAASWQoWYXV0aG9yaW5nX3JlcXVpcmVtZW50cxgTIAEoCzI3Lm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNSZXNwb25zZUgAEj4KDXdhcm1fcHJvZ3Jlc3MYFSABKAsyJS5ub21vcy5rZXJuZWwudjEuV2FybVByb2dyZXNzUmVzcG9uc2VIABJVChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGBYgASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2VIABJSChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgXIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2VIABIyChJhcHBsaWNhdGlvbl9yZXN1bHQYGCABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SAASSgoTbWFpbnRlbmFuY2VfcXVhbnR1bRgZIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5NYWludGVuYW5jZVF1YW50dW1SZXNwb25zZUgAEj8KEnJlYWRfaW5kZXhfcGVuZGluZxgaIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkSW5kZXhQZW5kaW5nSAASRwoSZnVsbF9oaXN0b3J5X2F1ZGl0GBsgASgLMikubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRSZXNwb25zZUgAElMKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgcIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2VIABJLChRvcGVuX2FwaV9kZXNjcmlwdGlvbhgdIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5PcGVuQXBpRGVzY3JpcHRpb25SZXNwb25zZUgAElcKGmluc3RhbGxlZF9sYXdfZGVjbGFyYXRpb25zGB4gASgLMjEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlSAASSwoYYXBwbGljYXRpb25fcmVzdWx0X2RlbHRhGB8gASgLMicubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uUmVzdWx0RGVsdGFIABJJChNyZXNvbHZlX2RvbWFpbl9wbGFuGCQgASgLMioubm9tb3Mua2VybmVsLnYxLlJlc29sdmVEb21haW5QbGFuUmVzcG9uc2VIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIcCg9yZXN1bHRfZnJvbnRpZXIYICABKAlIAYgBARJCChJmdWxsX3Jlc3VsdF9yZWFzb24YISABKA4yIS5ub21vcy5rZXJuZWwudjEuRnVsbFJlc3VsdFJlYXNvbkgCiAEBEkMKE3Jlc3VsdF9kZXBlbmRlbmNpZXMYIiABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZERlcGVuZGVuY2llc0gDiAEBEkAKEXJlYWRfaW5kZXhfYmVoaW5kGCMgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleEJlaGluZEgEiAEBQggKBnJlc3VsdEISChBfcmVzdWx0X2Zyb250aWVyQhUKE19mdWxsX3Jlc3VsdF9yZWFzb25CFgoUX3Jlc3VsdF9kZXBlbmRlbmNpZXNCFAoSX3JlYWRfaW5kZXhfYmVoaW5kIoABCg9SZWFkSW5kZXhCZWhpbmQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIXCg9zZXJ2ZWRfZnJvbnRpZXIYAyABKAkSGgoScmVxdWVzdGVkX2Zyb250aWVyGAQgASgJEhUKDXN1Y2Nlc3Nvcl9sYXcYBSABKAgiVAoQUmVhZERlcGVuZGVuY2llcxIXCg9hZ2dyZWdhdGVfdHlwZXMYASADKAkSFgoOcmVhZHNfYXJjaGl2ZXMYAiABKAgSDwoHcmVhZF9hdBgDIAEoCSKCAQoWQXBwbGljYXRpb25SZXN1bHREZWx0YRIVCg1iYXNlX2Zyb250aWVyGAEgASgJEhAKCGZyb250aWVyGAIgASgJEioKDGNoYW5nZWRfcm93cxgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSEwoLcmVtb3ZlZF9pZHMYBCADKAkiMwoaT3BlbkFwaURlc2NyaXB0aW9uUmVzcG9uc2USFQoNZG9jdW1lbnRfanNvbhgBIAEoCSJxChtJbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYASABKAwSMQoPY2FuZGlkYXRlX3VuaXRzGAIgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXQisAIKFkludGVyZmFjZU1lbWJlclZlcmRpY3QSDgoGZG9tYWluGAEgASgJEjIKBGtpbmQYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlTWVtYmVyS2luZBIOCgZtZW1iZXIYAyABKAkSEgoFZmllbGQYBCABKAlIAIgBARI9CgZzdGF0dXMYBSABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVN0YXR1cxI9CgZyZWFzb24YBiABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVJlYXNvbhIXCgpkaWFnbm9zdGljGAcgASgJSAGIAQFCCAoGX2ZpZWxkQg0KC19kaWFnbm9zdGljIsIBCh5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2USEgoKY29tcGF0aWJsZRgBIAEoCBI4CgdtZW1iZXJzGAIgAygLMicubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZU1lbWJlclZlcmRpY3QSGgoSd29ya3NwYWNlX2Zyb250aWVyGAMgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAQgASgJEh4KFmVmZmVjdGl2ZV9sYXdfaWRlbnRpdHkYBSABKAki/wEKFFdhcm1Qcm9ncmVzc1Jlc3BvbnNlEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYASABKAgSJAoXcHJlcGFyZWRfY29tbWFuZF9kb21haW4YAiABKAlIAIgBARIlChhwcmVwYXJlZF9jb21tYW5kX3BhY2thZ2UYAyABKAlIAYgBARImChlwcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yGAQgASgJSAKIAQFCGgoYX3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluQhsKGV9wcmVwYXJlZF9jb21tYW5kX3BhY2thZ2VCHAoaX3ByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IibAoQUmVhZEluZGV4UGVuZGluZxIRCgl3b3Jrc3BhY2UYASABKAkSDgoGYnJhbmNoGAIgASgJEhoKEnJlcXVlc3RlZF9mcm9udGllchgDIAEoCRIZChFsYXN0X3JlYWR5X2Fic2VudBgEIAEoCSLoAgoXTWFpbnRlbmFuY2VRdWFudHVtUXVlcnkSHQoQcmVxdWVzdGVkX2RvbWFpbhgBIAEoCUgAiAEBEh4KEXJlcXVlc3RlZF9wYWNrYWdlGAIgASgJSAGIAQESIAoTcmVxdWVzdGVkX2RpcmVjdGl2ZRgDIAEoCUgCiAEBEhcKD2xvY2FsX3JlYWRfb25seRgEIAEoCBIcChRtYWludGFpbl9naXRfY3VzdG9keRgFIAEoCBIXCg9yZWFkX2luZGV4X29ubHkYBiABKAgSJAocbWFpbnRhaW5fYWRkcmVzc2VkX2Zyb250aWVycxgHIAEoCBIYChBmbHVzaF9kdXJhYmlsaXR5GAggASgIEhkKEWxvY2FsX3dyaXRlX2J1cnN0GAkgASgIQhMKEV9yZXF1ZXN0ZWRfZG9tYWluQhQKEl9yZXF1ZXN0ZWRfcGFja2FnZUIWChRfcmVxdWVzdGVkX2RpcmVjdGl2ZSKiBAoaTWFpbnRlbmFuY2VRdWFudHVtUmVzcG9uc2USEQoJd29ya3NwYWNlGAEgASgJEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYAiABKAgSMAoFcGhhc2UYAyABKA4yIS5ub21vcy5rZXJuZWwudjEuTWFpbnRlbmFuY2VQaGFzZRIZCgxnaXRfZnJvbnRpZXIYBCABKAlIAIgBARIaCg1yZWFkX2Zyb250aWVyGAUgASgJSAGIAQESHAoPc3FsaXRlX2Zyb250aWVyGAYgASgJSAKIAQESEgoKd29ya191bml0cxgHIAEoBBIWCg5lbGFwc2VkX21pY3JvcxgIIAEoBBIkChdwcmVwYXJlZF9jb21tYW5kX2RvbWFpbhgJIAEoCUgDiAEBEiUKGHByZXBhcmVkX2NvbW1hbmRfcGFja2FnZRgKIAEoCUgEiAEBEiYKGXByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IYCyABKAlIBYgBARIeChZsb29zZV9jdXN0b2R5X3ByZXNzdXJlGAwgASgIQg8KDV9naXRfZnJvbnRpZXJCEAoOX3JlYWRfZnJvbnRpZXJCEgoQX3NxbGl0ZV9mcm9udGllckIaChhfcHJlcGFyZWRfY29tbWFuZF9kb21haW5CGwoZX3ByZXBhcmVkX2NvbW1hbmRfcGFja2FnZUIcChpfcHJlcGFyZWRfY29tbWFuZF9zZWxlY3RvciJICg1Pc2dpQXR0cmlidXRlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkSEQoEdHlwZRgDIAEoCUgAiAEBQgcKBV90eXBlIiwKDU9zZ2lEaXJlY3RpdmUSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSKLAQoOT3NnaUNhcGFiaWxpdHkSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUijAEKD09zZ2lSZXF1aXJlbWVudBIRCgluYW1lc3BhY2UYASABKAkSMgoKYXR0cmlidXRlcxgCIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpQXR0cmlidXRlEjIKCmRpcmVjdGl2ZXMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaURpcmVjdGl2ZSKaAQoUT3NnaVJlc291cmNlUmVzcG9uc2USEwoLc291cmNlX3VzZGEYASABKAwSNQoMY2FwYWJpbGl0aWVzGAIgAygLMh8ubm9tb3Mua2VybmVsLnYxLk9zZ2lDYXBhYmlsaXR5EjYKDHJlcXVpcmVtZW50cxgDIAMoCzIgLm5vbW9zLmtlcm5lbC52MS5Pc2dpUmVxdWlyZW1lbnQi5wEKE1ZlcmlmeUNoYWluU3RlcFNwYW4SDQoFaW5kZXgYASABKAQSEgoKY29tbWl0X29pZBgCIAEoCRIOCgZkb21haW4YAyABKAkSEQoJZGlyZWN0aXZlGAQgASgJEhAKCHRvdGFsX3VzGAUgASgEEjYKBnBoYXNlcxgGIAEoCzImLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBQaGFzZXMSQAoOZW5naW5lX3RpbWluZ3MYByADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcimAIKFVZlcmlmeUNoYWluU3RlcFBoYXNlcxIeChZydW50aW1lX2xhd19yZWZyZXNoX3VzGAEgASgEEhMKC21hbmlmZXN0X3VzGAIgASgEEhkKEWxhd19yZXNvbHV0aW9uX3VzGAMgASgEEh0KFW1hbmFnZWRfdHJhbnNpdGlvbl91cxgEIAEoBBIUCgxwcmluY2lwYWxfdXMYBSABKAQSFAoMZXZvbHV0aW9uX3VzGAYgASgEEhoKEmNvbG9jYXRlZF9yZWFkc191cxgHIAEoBBIhChl0eXBlZF9pbnN0YWxsX3ZlcmlmaWVyX3VzGAggASgEEhQKDGFkbWlzc2lvbl91cxgJIAEoBBIPCgdmb2xkX3VzGAogASgEItoFChZWZXJpZnlDaGFpbkRpYWdub3N0aWNzEi4KBHdhbGsYASABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhAKCHRvdGFsX3VzGAIgASgEEhsKE3JlZmVyZW5jZV9sb29rdXBfdXMYAyABKAQSGgoScmVwb3NpdG9yeV9vcGVuX3VzGAQgASgEEhUKDWNoYWluX3JlYWRfdXMYBSABKAQSFgoOZW5naW5lX2luaXRfdXMYBiABKAQSGAoQdGltZWxpbmVfcmVhZF91cxgHIAEoBBIYChBsYXdfaHlkcmF0aW9uX3VzGAggASgEEhsKE3JlY292ZXJ5X3ByZXNjYW5fdXMYCSABKAQSGAoQZm9sZF9mcm9udGllcl91cxgKIAEoBBIzCgVzdGVwcxgLIAMoCzIkLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBTcGFuEkAKDmVuZ2luZV90aW1pbmdzGAwgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nEk0KFWxhd19oeWRyYXRpb25fdGltaW5ncxgNIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkxhd0h5ZHJhdGlvblRpbWluZxIZChFsYXdfY2xvc3VyZV9jb3VudBgOIAEoBBIeChZsYXdfY2xvc3VyZV9jYWNoZV9oaXRzGA8gASgEEiAKGGxhd19jbG9zdXJlX2NhY2hlX21pc3NlcxgQIAEoBBISCgpzdGVwX2NvdW50GBEgASgEEhUKDXN0ZXBfdG90YWxfdXMYEiABKAQSQQoRc3RlcF9waGFzZV90b3RhbHMYEyABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEhoKEm9taXR0ZWRfc3RlcF9jb3VudBgUIAEoBCI6ChdWZXJpZnlDaGFpbkVuZ2luZVRpbWluZxINCgVwaGFzZRgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBCJACh1WZXJpZnlDaGFpbkxhd0h5ZHJhdGlvblRpbWluZxINCgVwaGFzZRgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBCKrAQoUSHR0cHNFeGVjdXRpb25Qb2xpY3kSPAoJcGxhY2VtZW50GAEgASgOMikubm9tb3Mua2VybmVsLnYxLkVmZmVjdEV4ZWN1dGlvblBsYWNlbWVudBJACgtjYXJkaW5hbGl0eRgCIAEoDjIrLm5vbW9zLmtlcm5lbC52MS5FZmZlY3RFeGVjdXRpb25DYXJkaW5hbGl0eRITCgtsYXdfY2xvc3VyZRgDIAEoCSJbChJIdHRwc091dGJvdW5kUm91dGUSCwoDdXJsGAEgASgJEjgKCWV4ZWN1dGlvbhgCIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5IdHRwc0V4ZWN1dGlvblBvbGljeSIrChZXb3Jrc3BhY2VPdXRib3VuZFJvdXRlEhEKCXdvcmtzcGFjZRgBIAEoCSKFAgoVQ2FycmllZFdvcmtzcGFjZU9mZmVyEjAKBnNvdXJjZRgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSFQoNc291cmNlX2NvbW1pdBgCIAEoCRIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgDIAEoCRIcChRzb3VyY2VfZXZpZGVuY2VfcGFjaxgFIAEoDBIjChthZG1pc3Npb25fY2hlY2twb2ludF9zZWNyZXQYBiABKAwSFQoNZWZmZWN0X2RpZ2VzdBgHIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYCCABKAlKBAgEEAVSBnRhcmdldCLMBAoNT3V0Ym91bmRPZmZlchIKCgJpZBgBIAEoCRIXCgtkZXN0aW5hdGlvbhgCIAEoCUICGAESFAoMc2VhbGVkX29mZmVyGAMgASgMEhQKDGNvbnRlbnRfdHlwZRgEIAEoCRIYChBzb3VyY2Vfd29ya3NwYWNlGAUgASgJEhQKDGN1c3RvZHlfaGVhZBgGIAEoCRIXCg9jYXVzZWRfYnlfb2ZmZXIYByABKAkSGwoTc2NoZWR1bGVkX2F0X21pbGxpcxgIIAEoBBIaChJkZWFkbGluZV9hdF9taWxsaXMYCSABKAQSFAoMY3VzdG9keV9wYXRoGAogASgJEhMKC2N1c3RvZHlfb2lkGAsgASgJEhQKDGRlbGl2ZXJ5X3JlZhgMIAEoCRIVCg1vYmxpZ2F0aW9uX2lkGA0gASgJEjoKC2h0dHBzX3JvdXRlGA4gASgLMiMubm9tb3Mua2VybmVsLnYxLkh0dHBzT3V0Ym91bmRSb3V0ZUgAEkIKD3dvcmtzcGFjZV9yb3V0ZRgPIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VPdXRib3VuZFJvdXRlSAASFQoNc291cmNlX2NvbW1pdBgQIAEoCRIcChRzb3VyY2VfZXZpZGVuY2VfcGFjaxgRIAEoDBIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgSIAEoCRIVCg1lZmZlY3RfZGlnZXN0GBMgASgJEiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgUIAEoCUIHCgVyb3V0ZSLuAQoOT3V0Ym94UmVzcG9uc2USLgoGb2ZmZXJzGAEgAygLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJvdW5kT2ZmZXISHwoSbmV4dF9kdWVfYXRfbWlsbGlzGAIgASgESACIAQESLQoHZW50cmllcxgDIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5PdXRib3hFbnRyeRIUCgx3b3JrX3BlbmRpbmcYBCABKAgSFQoNZW50cmllc190b3RhbBgFIAEoDRIYChBlbnRyaWVzX3ByZXBhcmVkGAYgASgNQhUKE19uZXh0X2R1ZV9hdF9taWxsaXMivQEKC091dGJveEVudHJ5EgoKAmlkGAEgASgJEhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEjoKC2h0dHBzX3JvdXRlGAMgASgLMiMubm9tb3Mua2VybmVsLnYxLkh0dHBzT3V0Ym91bmRSb3V0ZUgAEkIKD3dvcmtzcGFjZV9yb3V0ZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VPdXRib3VuZFJvdXRlSABCBwoFcm91dGUilAEKFFByZXBhcmVPdXRib3VuZE9mZmVyEhgKEHRhcmdldF93b3Jrc3BhY2UYASABKAkSGgoNc291cmNlX2NvbW1pdBgCIAEoCUgAiAEBEh4KEXNvdXJjZV9vZmZlcl9wYXRoGAMgASgJSAGIAQFCEAoOX3NvdXJjZV9jb21taXRCFAoSX3NvdXJjZV9vZmZlcl9wYXRoIokFCgxTeW5jUmVzcG9uc2USEAoIYWRtaXR0ZWQYAiABKAgSDAoEaGVhZBgDIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgEIAEoCRIcChRhZG1pdHRlZF9yZW1vdGVfaGVhZBgFIAEoCRIcChRyZXBsYXllZF9yZW1vdGVfaGVhZBgGIAEoCRI8Cg9hZG1pdHRlZF9yZW1vdGUYByADKAsyIy5ub21vcy5rZXJuZWwudjEuU3luY0FkbWl0dGVkSW50ZW50EjwKFXJlbW90ZV9iaXJ0aF9vdXRjb21lcxgIIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSOQoOcmVtb3RlX3JlZnVzYWwYCSABKAsyHC5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzYWxIAIgBARI7Cg5yZXBsYXllZF9sb2NhbBgKIAMoCzIjLm5vbW9zLmtlcm5lbC52MS5TeW5jUmVwbGF5ZWRJbnRlbnQSIAoYc2tpcHBlZF9sb2NhbF9pbnRlbnRfaWRzGAsgAygJEjkKDXJlZnVzZWRfbG9jYWwYDCADKAsyIi5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzZWRJbnRlbnQSRwoUY3VzdG9keV9kaXNhZ3JlZW1lbnQYDSABKAsyJC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keURpc2FncmVlbWVudEgBiAEBEhkKEXBhcmtlZF9sb2NhbF9yZWZzGA4gAygJEhYKDnJlcGxheV9wZW5kaW5nGA8gASgIQhEKD19yZW1vdGVfcmVmdXNhbEIXChVfY3VzdG9keV9kaXNhZ3JlZW1lbnRKBAgBEAJSBnJlc3VsdCJRChNDdXN0b2R5RGlzYWdyZWVtZW50EhIKCmxvY2FsX2hlYWQYASABKAkSFgoOY2FuZGlkYXRlX2hlYWQYAiABKAkSDgoGcmVhc29uGAMgASgJIk8KElN5bmNBZG1pdHRlZEludGVudBIRCglpbnRlbnRfaWQYASABKAkSGAoQY2FuZGlkYXRlX2NvbW1pdBgCIAEoCRIMCgRoZWFkGAMgASgJImwKElN5bmNSZXBsYXllZEludGVudBIRCglpbnRlbnRfaWQYASABKAkSDAoEaGVhZBgCIAEoCRI1Cg5iaXJ0aF9vdXRjb21lcxgDIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUioQEKC1N5bmNSZWZ1c2FsEhYKCWludGVudF9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIRCgRjb2RlGAMgASgJSAGIAQESNAoHcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsSAKIAQFCDAoKX2ludGVudF9pZEIHCgVfY29kZUIKCghfcmVmdXNhbCKNAQoRU3luY1JlZnVzZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEg4KBnJlYXNvbhgCIAEoCRITCgtjaGFuZ2VfdXNkYRgDIAEoDBI0CgdyZWZ1c2FsGAQgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIAIgBAUIKCghfcmVmdXNhbCJCCg9Xb3Jrc3BhY2VUYXJnZXQSDAoEcmVwbxgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSDgoGYnJhbmNoGAMgASgJIk4KC09wZW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDQoFc3BhbnMYAiABKAgiDgoMR2VuZXNpc09mZmVyIqMBCg1EaXJlY3RpdmVDYWxsEg4KBmRvbWFpbhgBIAEoCRIRCglkaXJlY3RpdmUYAiABKAkSJwoJb3BlcmF0aW9uGAUgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRIWCg5hcmd1bWVudHNfanNvbhgGIAEoCUoECAMQBEoECAQQBVIJY2FsbF91c2RhUgdwYXlsb2FkUg5sZWdhY3lfcGF5bG9hZCLWAgoQQXV0aG9yaW5nT3B0aW9ucxINCgVhY3RvchgBIAEoCRISCgphdXRoX3Rva2VuGAIgASgMEhUKDWF1dGhvcl9zZWNyZXQYAyABKAwSHQoQdmFsaWRfZnJvbV9lcG9jaBgEIAEoBEgAiAEBEh8KEnByaW5jaXBhbF92ZXJpZmllZBgFIAEoCEgBiAEBEgsKA3JuZxgGIAMoARIYChBkZWZlcl9wcm9qZWN0aW9uGAcgASgIEg0KBXNwYW5zGAggASgIEg8KB2RyeV9ydW4YCSABKAgSEAoIc2VxdWVuY2UYCiABKAQSLQoFY2xvY2sYCyABKAsyHi5ub21vcy5rZXJuZWwudjEuQ2FwdHVyZWRDbG9jaxIUCgxwcmVwYXJlX29ubHkYDCABKAhCEwoRX3ZhbGlkX2Zyb21fZXBvY2hCFQoTX3ByaW5jaXBhbF92ZXJpZmllZCJKCg1DYXB0dXJlZENsb2NrEhcKD3BoeXNpY2FsX21pbGxpcxgBIAEoBBIPCgdsb2dpY2FsGAIgASgNEg8KB3JlcGxpY2EYAyABKAQiwwMKEEJpcnRoQ2VydGlmaWNhdGUSDQoFY2hpbGQYASABKAkSDwoHZm91bmRlchgCIAEoCRIQCgh2ZXJpZmllZBgDIAEoCBISCgpwYXJlbnRfa2V5GAQgASgMEhEKCXBhcmVudF9pZBgFIAEoCRINCgVlcG9jaBgGIAEoAxIRCglzaWduYXR1cmUYByABKAwSGQoMdmVyaWZpZWRfdmlhGAggASgJSACIAQESFgoJaWRwX3Rva2VuGAkgASgJSAGIAQESGwoOY2FwdHVyZWRfY2xvY2sYCiABKANIAogBARIhChRhdXRoX3Byb3ZpZGVyX2lzc3VlchgLIAEoCUgDiAEBEh8KEmF1dGhfcHJvdmlkZXJfandrcxgMIAEoCUgEiAEBEiMKFmF1dGhfcHJvdmlkZXJfYXVkaWVuY2UYDSABKAlIBYgBAUIPCg1fdmVyaWZpZWRfdmlhQgwKCl9pZHBfdG9rZW5CEQoPX2NhcHR1cmVkX2Nsb2NrQhcKFV9hdXRoX3Byb3ZpZGVyX2lzc3VlckIVChNfYXV0aF9wcm92aWRlcl9qd2tzQhkKF19hdXRoX3Byb3ZpZGVyX2F1ZGllbmNlImwKG1NpZ25CaXJ0aENlcnRpZmljYXRlUmVxdWVzdBI2CgtjZXJ0aWZpY2F0ZRgBIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlEhUKDXNpZ25lcl9zZWNyZXQYAiABKAwiVgocU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXNwb25zZRI2CgtjZXJ0aWZpY2F0ZRgBIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlIs8DChRNb2RlbExpZmVjeWNsZUludGVudBI7CglvcGVyYXRpb24YASABKA4yKC5ub21vcy5rZXJuZWwudjEuTW9kZWxMaWZlY3ljbGVPcGVyYXRpb24SFAoMaW5zdGFsbGVkX2J5GAIgASgJEhcKCnN1cGVyc2VkZXMYAyABKAlIAIgBARJECgp0cmFuc2l0aW9uGAQgASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAGIAQESFQoIcmVwbGFjZXMYBSABKAlIAogBARIeChFhY2NlcHRhbmNlX3JlYXNvbhgGIAEoCUgDiAEBEhkKDGxhd19pZGVudGl0eRgHIAEoCUgEiAEBEksKEWRvbWFpbl90cmFuc2l0aW9uGAggASgLMisubm9tb3Mua2VybmVsLnYxLkRvbWFpblRyYW5zaXRpb25BY3RpdmF0aW9uSAWIAQFCDQoLX3N1cGVyc2VkZXNCDQoLX3RyYW5zaXRpb25CCwoJX3JlcGxhY2VzQhQKEl9hY2NlcHRhbmNlX3JlYXNvbkIPCg1fbGF3X2lkZW50aXR5QhQKEl9kb21haW5fdHJhbnNpdGlvbiJwCgpEb21haW5QbGFuEi4KB2FjdGlvbnMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuRG9tYWluQWN0aW9uEjIKB3N1cHBvcnQYAiADKAsyIS5ub21vcy5rZXJuZWwudjEuRG9tYWluU3VwcG9ydFBpbiJoCgxEb21haW5BY3Rpb24SDgoGZG9tYWluGAEgASgJEhUKDWV4cGVjdGVkX3VuaXQYAiABKAkSEwoLdGFyZ2V0X3VuaXQYAyABKAkSEgoFZ3JvdXAYBCABKAlIAIgBAUIICgZfZ3JvdXAiQQoQRG9tYWluU3VwcG9ydFBpbhINCgVncm91cBgBIAEoCRILCgNrZXkYAiABKAkSEQoJdW5pdF9oYXNoGAMgASgJIpICChhSZXNvbHZlRG9tYWluUGxhblJlcXVlc3QSKQoEcGxhbhgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Eb21haW5QbGFuEg8KB2F0X2hhc2gYAiABKAkSFAoManVkZ2Vfc3RhZ2VkGAMgASgIEiEKGWFja25vd2xlZGdlbWVudF9wcmluY2lwYWwYBCABKAkSDwoHcXVhbGlmeRgFIAEoCBI9Cgljb25zdW1lcnMYBiADKAsyKi5ub21vcy5rZXJuZWwudjEuRG9tYWluQ29uc3VtZXJSZXF1aXJlbWVudBIxCg9hdmFpbGFibGVfdW5pdHMYByADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdCJKChlEb21haW5Db25zdW1lclJlcXVpcmVtZW50EgwKBG5hbWUYASABKAkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYAiABKAwiSgoVRG9tYWluQ29uc3VtZXJWZXJkaWN0EgwKBG5hbWUYASABKAkSEgoKY29tcGF0aWJsZRgCIAEoCBIPCgdmYWlsaW5nGAMgAygJImsKE1Jlc29sdmVkRG9tYWluR3JvdXASDQoFZ3JvdXAYASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSLQoFdW5pdHMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluVW5pdFBpbiIvCg1Eb21haW5Vbml0UGluEgsKA2tleRgBIAEoCRIRCgl1bml0X2hhc2gYAiABKAkitAMKGVJlc29sdmVEb21haW5QbGFuUmVzcG9uc2USDwoHYXRfaGFzaBgBIAEoCRIVCg1hdF9zdGF0ZV9yb290GAIgASgJEjQKBmdyb3VwcxgDIAMoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlZERvbWFpbkdyb3VwEhwKFHJldGlyZV9pbnN0YWxsYXRpb25zGAQgAygJEjgKEHNlbGVjdGVkX2RvbWFpbnMYBSADKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluVW5pdFBpbhISCgVyZWFkeRgGIAEoCEgAiAEBEhIKCnZpb2xhdGlvbnMYByADKAkSOQoJY29uc3VtZXJzGAggAygLMiYubm9tb3Mua2VybmVsLnYxLkRvbWFpbkNvbnN1bWVyVmVyZGljdBI5Cgl1bml0X3NldHMYCSADKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3UHJlcGFyYXRpb25Vbml0U2V0EhkKEWtlcm5lbF9nZW5lcmF0aW9uGAogASgJEh4KFmVmZmVjdGl2ZV9sYXdfaWRlbnRpdHkYCyABKAlCCAoGX3JlYWR5IoUBChpEb21haW5UcmFuc2l0aW9uQWN0aXZhdGlvbhIpCgRwbGFuGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLkRvbWFpblBsYW4SPAoIcmVzb2x2ZWQYAiABKAsyKi5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZURvbWFpblBsYW5SZXNwb25zZSI7Ch9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc0Fkb3B0aW9uEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAki5wcKDE9mZmVyUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei4KBGNhbGwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbEgAEhwKEnNlYWxlZF9jaGFuZ2VfdXNkYRgHIAEoDEgAEkAKD21vZGVsX2xpZmVjeWNsZRgMIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Nb2RlbExpZmVjeWNsZUludGVudEgAEl4KImlkZW50aXR5X3Byb3ZpZGVyX3dpdG5lc3NfYWRvcHRpb24YDSABKAsyMC5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NBZG9wdGlvbkgAEjAKB2dlbmVzaXMYDiABKAsyHS5ub21vcy5rZXJuZWwudjEuR2VuZXNpc09mZmVySAASSQoXY2FycmllZF93b3Jrc3BhY2Vfb2ZmZXIYDyABKAsyJi5ub21vcy5rZXJuZWwudjEuQ2FycmllZFdvcmtzcGFjZU9mZmVySAASNAoJcGxhY2VtZW50GBAgASgLMh8ubm9tb3Mua2VybmVsLnYxLlBsYWNlbWVudE9mZmVySAASRwoWZGV0YWNoZWRfc2lnbmVkX2NoYW5nZRgSIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25lZENoYW5nZUgAEjQKCWF1dGhvcmluZxgDIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpbmdPcHRpb25zEhAKCGxhd191c2R6GAQgASgMEjMKDGF0dGVzdGF0aW9ucxgFIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWQSPQoSY29uZmxpY3Rfc25hcHNob3RzGAYgAygLMiEubm9tb3Mua2VybmVsLnYxLkNvbmZsaWN0U25hcHNob3QSGgoSZXhlY3V0aW9uX2xhd191c2R6GAggASgMEiAKE2NvbnRyb2xsZXJfbGF3X2hhc2gYCSABKAlIAYgBARIdChBjYW5kaWRhdGVfY29tbWl0GAogASgJSAKIAQESPAoRYmlydGhfY2VydGlmaWNhdGUYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZRIrCglsYXdfdW5pdHMYESADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEIICgZpbnRlbnRCFgoUX2NvbnRyb2xsZXJfbGF3X2hhc2hCEwoRX2NhbmRpZGF0ZV9jb21taXQiNgoHTGF3VW5pdBIrCgVmaWxlcxgBIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0RmlsZSIsCgtMYXdVbml0RmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwixQEKDEF0dGVzdGVkUmVhZBIQCghxdWVyeV9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSKwoGcmVzdWx0GAMgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUSMgoIZXZpZGVuY2UYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuUmVhZEF0dGVzdGF0aW9uSgQIBBAFUgthdHRlc3RhdGlvbiLVAQoPUmVhZEF0dGVzdGF0aW9uEg8KB3ZlcnNpb24YASABKAMSGAoQc291cmNlX3dvcmtzcGFjZRgCIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgDIAEoCRITCgtzb3VyY2VfaGVhZBgEIAEoCRIRCglmb2xkX3Jvb3QYBSABKAkSFAoMc291cmNlX2Vwb2NoGAYgASgDEhoKEmF0dGVzdGVkX2F0X21pbGxpcxgHIAEoAxISCgpwdWJsaWNfa2V5GAggASgMEhEKCXNpZ25hdHVyZRgJIAEoDCJ1ChBDb25mbGljdFNuYXBzaG90EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRINCgVmaWVsZBgDIAEoCRIVCg10YXJnZXRfc2NoZW1hGAQgASgJEg0KBXRva2VuGAUgASgJIvQPCgxRdWVyeVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIyCglhdXRob3JpdHkYAiABKAsyHy5ub21vcy5rZXJuZWwudjEuUXVlcnlBdXRob3JpdHkSDQoFc3BhbnMYAyABKAgSOQoNcmVzdWx0X2Zvcm1hdBgEIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5RdWVyeVJlc3VsdEZvcm1hdBIYChBzZXJ2ZV9sYXN0X3JlYWR5GAUgASgIEioKBHJvd3MYCiABKAsyGi5ub21vcy5rZXJuZWwudjEuUm93c1F1ZXJ5SAASKgoEcGFnZRgLIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5QYWdlUXVlcnlIABIrCgVieV9pZBgMIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5CeUlkUXVlcnlIABI5CgxyZXNvbHZlX3JlZnMYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZnNRdWVyeUgAEkUKEnJlZmVyZW5jZV92ZXJzaW9ucxgOIAEoCzInLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5SAASLAoFY291bnQYDyABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEioKA3N1bRgQIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASMAoHc3BhdGlhbBgRIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5TcGF0aWFsUXVlcnlIABIsCgVuYW1lZBgSIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5OYW1lZFF1ZXJ5SAASSQoTYXV0aG9yaXphdGlvbl9jaGVjaxgTIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0SAASSwoUYXV0aG9yaXphdGlvbl9leHBhbmQYFCABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlcXVlc3RIABJJChNmcm9udGllcl90cmFuc2l0aW9uGBUgASgLMioubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlcXVlc3RIABIvCgdieV90eXBlGBYgASgLMhwubm9tb3Mua2VybmVsLnYxLkJ5VHlwZVF1ZXJ5SAASSAoUb3duZWRfZGV2aWNlX3JlcXVlc3QYFyABKAsyKC5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UXVlcnlIABJMChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGBggASgLMioubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUXVlcnlIABJDChFwZW5kaW5nX2NvbmZsaWN0cxgZIAEoCzImLm5vbW9zLmtlcm5lbC52MS5QZW5kaW5nQ29uZmxpY3RzUXVlcnlIABJQChhwZW5kaW5nX2NvbmZsaWN0X3N1bW1hcnkYGiABKAsyLC5ub21vcy5rZXJuZWwudjEuUGVuZGluZ0NvbmZsaWN0U3VtbWFyeVF1ZXJ5SAASTQoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVRdWVyeUgAEkAKEGNoaWxkX3dvcmtzcGFjZXMYHCABKAsyJC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeUgAElYKFmF1dGhvcmluZ19yZXF1aXJlbWVudHMYHSABKAsyNC5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnlIABJSChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGB4gASgLMi0ubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUXVlcnlIABJPChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgfIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnlIABJHChNtYWludGVuYW5jZV9xdWFudHVtGCAgASgLMigubm9tb3Mua2VybmVsLnYxLk1haW50ZW5hbmNlUXVhbnR1bVF1ZXJ5SAASRAoSZnVsbF9oaXN0b3J5X2F1ZGl0GCEgASgLMiYubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRRdWVyeUgAElAKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgiIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UXVlcnlIABJUChppbnN0YWxsZWRfbGF3X2RlY2xhcmF0aW9ucxgjIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5JbnN0YWxsZWRMYXdEZWNsYXJhdGlvbnNRdWVyeUgAEkgKE3Jlc29sdmVfZG9tYWluX3BsYW4YJCABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZURvbWFpblBsYW5SZXF1ZXN0SABCBwoFcXVlcnkiVgobV29ya3NwYWNlRWZmZWN0UmVjZWlwdFF1ZXJ5EiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgBIAEoCRIVCg1lZmZlY3RfZGlnZXN0GAIgASgJIuQBCh5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2USGAoQdGFyZ2V0X3dvcmtzcGFjZRgBIAEoCRIgChh0YXJnZXRfd29ya3NwYWNlX2dlbmVzaXMYAiABKAkSFQoNb2JzZXJ2ZWRfaGVhZBgDIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYBCABKAkSFQoNZWZmZWN0X2RpZ2VzdBgFIAEoCRIfChJhZG1pdHRlZF9pbnRlbnRfaWQYBiABKAlIAIgBAUIVChNfYWRtaXR0ZWRfaW50ZW50X2lkIhcKFUZ1bGxIaXN0b3J5QXVkaXRRdWVyeSKwAwoYRnVsbEhpc3RvcnlBdWRpdFJlc3BvbnNlEg0KBXZhbGlkGAEgASgIEi4KBHdhbGsYAiABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhEKBGhlYWQYAyABKAlIAIgBARIUCgdpbnRlbnRzGAQgASgESAGIAQESGAoLcGxhbnNfcmVydW4YBSABKARIAogBARIcCg9jb250cm9sbGVyX2hhc2gYBiABKAlIA4gBARIZChFpbnN0YWxsZWRfZG9tYWlucxgHIAMoCRISCgVjaGVjaxgIIAEoCUgEiAEBEhUKCGF0X2luZGV4GAkgASgESAWIAQESEgoFZXJyb3IYCiABKAlIBogBARI0CgdyZWZ1c2FsGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIHCgVfaGVhZEIKCghfaW50ZW50c0IOCgxfcGxhbnNfcmVydW5CEgoQX2NvbnRyb2xsZXJfaGFzaEIICgZfY2hlY2tCCwoJX2F0X2luZGV4QggKBl9lcnJvckIKCghfcmVmdXNhbCIeChxJZGVudGl0eVByb3ZpZGVyV2l0bmVzc1F1ZXJ5IosCChpJZGVudGl0eVByb3ZpZGVyV2l0bmVzc0tleRIPCgdvcmRpbmFsGAEgASgEEgsKA2t0eRgCIAEoCRIQCgNraWQYAyABKAlIAIgBARIQCgNhbGcYBCABKAlIAYgBARIQCgN1c2UYBSABKAlIAogBARIQCgNjcnYYBiABKAlIA4gBARIOCgF4GAcgASgJSASIAQESDgoBeRgIIAEoCUgFiAEBEg4KAW4YCSABKAlIBogBARIOCgFlGAogASgJSAeIAQESDwoHa2V5X29wcxgLIAMoCUIGCgRfa2lkQgYKBF9hbGdCBgoEX3VzZUIGCgRfY3J2QgQKAl94QgQKAl95QgQKAl9uQgQKAl9lImMKIklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSEwoLa2V5X29yZGluYWwYASABKAQSGwoTY2VydGlmaWNhdGVfb3JkaW5hbBgCIAEoBBILCgNkZXIYAyABKAwixQQKH0lkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2USGAoQc291cmNlX3dvcmtzcGFjZRgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRITCgtzb3VyY2VfaGVhZBgDIAEoCRINCgVlcG9jaBgEIAEoBBIfChJwcmVkZWNlc3Nvcl9zaGEyNTYYBSABKAxIAIgBARIOCgZpc3N1ZXIYBiABKAkSFQoIYXVkaWVuY2UYByABKAlIAYgBARIXCg9wcmluY2lwYWxfY2xhaW0YCCABKAkSIQoUZGV2aWNlX2JpbmRpbmdfY2xhaW0YCSABKAlIAogBARIeChZyZXF1aXJlX2RldmljZV9iaW5kaW5nGAogASgIEjkKBGtleXMYCyADKAsyKy5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NLZXkSSQoMY2VydGlmaWNhdGVzGAwgAygLMjMubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSFwoPbWF0ZXJpYWxfc2hhMjU2GA0gASgMEjMKDGF0dGVzdGF0aW9ucxgPIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWRCFQoTX3ByZWRlY2Vzc29yX3NoYTI1NkILCglfYXVkaWVuY2VCFwoVX2RldmljZV9iaW5kaW5nX2NsYWltSgQIDhAPUhFzb3VyY2VfcHJvb2ZfdXNkYSIVChNDaGlsZFdvcmtzcGFjZVF1ZXJ5IpABChlDaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkEhEKCXdvcmtzcGFjZRgBIAEoCRI+CgZzdGF0dXMYAiABKA4yLi5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VMaWZlY3ljbGVTdGF0dXMSFAoHYm9ybl9hdBgDIAEoCUgAiAEBQgoKCF9ib3JuX2F0IlsKG0NoaWxkV29ya3NwYWNlUXVlcnlSZXNwb25zZRI8CghjaGlsZHJlbhgBIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkIh8KHUluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1F1ZXJ5IjcKEEluc3RhbGxlZExhd1VuaXQSEAoIdW5pdF9rZXkYASABKAkSEQoJdW5pdF9oYXNoGAIgASgJIowBChNJbnN0YWxsZWRMYXdVbml0U2V0EhQKDHNldF9pZGVudGl0eRgBIAEoCRIYChBjb21wb3Nlcl92ZXJzaW9uGAIgASgJEhMKC29wZW51c2RfcmV2GAMgASgJEjAKBXVuaXRzGAQgAygLMiEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd1VuaXQigQIKHkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlchIOCgZkb21haW4YASABKAkSDgoGbWVtYmVyGAIgASgJEjsKC21lbWJlcl9raW5kGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkTGF3TWVtYmVyS2luZBJBCgRraW5kGAQgASgOMjMubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlcktpbmQSDQoFc2NvcGUYBSABKAkSHAoPaWRlbnRpdHlfc2hhMjU2GAYgASgJSACIAQFCEgoQX2lkZW50aXR5X3NoYTI1NiLpAQofSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucxIYChBjbG9zdXJlX2lkZW50aXR5GAEgASgJEg8KB2RvbWFpbnMYAiADKAkSOwoIdW5pdF9zZXQYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3VW5pdFNldEgAiAEBElEKGGF1dGhlbnRpY2F0aW9uX3Byb3ZpZGVycxgEIAMoCzIvLm5vbW9zLmtlcm5lbC52MS5EZWNsYXJlZEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJCCwoJX3VuaXRfc2V0InQKIEluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlEgwKBGhlYWQYASABKAkSQgoIY2xvc3VyZXMYAiADKAsyMC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucyLKAQojRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnkSEQoJZGlyZWN0aXZlGAEgASgJEhYKCXByaW5jaXBhbBgCIAEoCUgAiAEBEhcKCnB1YmxpY19rZXkYAyABKAxIAYgBARIVCghrZXlfaGFzaBgEIAEoCUgCiAEBEhMKBmRvbWFpbhgFIAEoCUgDiAEBQgwKCl9wcmluY2lwYWxCDQoLX3B1YmxpY19rZXlCCwoJX2tleV9oYXNoQgkKB19kb21haW4ijAIKJkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1Jlc3BvbnNlEg0KBWZvdW5kGAEgASgIEhMKBmRvbWFpbhgCIAEoCUgAiAEBEhUKCHJlbGF0aW9uGAMgASgJSAGIAQESEwoGb2JqZWN0GAQgASgJSAKIAQESEgoFYWN0b3IYBSABKAlIA4gBARIVCghrZXlfaGFzaBgGIAEoCUgEiAEBEhcKD3NpZ25lcl9lbnJvbGxlZBgHIAEoCBIUCgxyb2xlX2FsbG93ZWQYCCABKAhCCQoHX2RvbWFpbkILCglfcmVsYXRpb25CCQoHX29iamVjdEIICgZfYWN0b3JCCwoJX2tleV9oYXNoInIKGkF1dGhlbnRpY2F0aW9uUG9zdHVyZVF1ZXJ5Eh4KFmluY2x1ZGVfYmlydGhfZXZpZGVuY2UYASABKAgSHgoRZGV2aWNlX3B1YmxpY19rZXkYAiABKAxIAIgBAUIUChJfZGV2aWNlX3B1YmxpY19rZXki7AIKHUF1dGhlbnRpY2F0aW9uUG9zdHVyZVJlc3BvbnNlEkgKDnByb3ZpZGVyX3Rva2VuGAEgASgOMjAubm9tb3Mua2VybmVsLnYxLlByb3ZpZGVyVG9rZW5WZXJpZmljYXRpb25TdGF0dXMSFwoPZW5yb2xsZWRfZGV2aWNlGAIgASgIEhoKEnJlc29sdmVkX3ByaW5jaXBhbBgDIAEoCRJECg5iaXJ0aF9ldmlkZW5jZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5CaXJ0aEV2aWRlbmNlUmVhZGluZXNzSACIAQESQQoUZGV2aWNlX3NpZ25lcl9zdGF0dXMYBSABKA4yIy5ub21vcy5rZXJuZWwudjEuRGV2aWNlU2lnbmVyU3RhdHVzEhoKEmRldmljZV9rZXlfc3ViamVjdBgGIAEoCRIUCgxzaWduZXJfZXBvY2gYByABKANCEQoPX2JpcnRoX2V2aWRlbmNlIl4KFkJpcnRoRXZpZGVuY2VSZWFkaW5lc3MSNAoGc3RhdHVzGAEgASgOMiQubm9tb3Mua2VybmVsLnYxLkJpcnRoRXZpZGVuY2VTdGF0dXMSDgoGZGV0YWlsGAIgASgJIigKF093bmVkRGV2aWNlUmVxdWVzdFF1ZXJ5Eg0KBXNjb3BlGAEgASgJIjIKGk93bmVkRGV2aWNlUmVxdWVzdFJlc3BvbnNlEhQKDHJlcXVlc3RfdXNkYRgBIAEoDCJAChlPd25lZFByZXBhcmVBcHByb3ZhbFF1ZXJ5Eg0KBXNjb3BlGAEgASgJEhQKDHJlcXVlc3RfdXNkYRgCIAEoDCK/AQocT3duZWRQcmVwYXJlQXBwcm92YWxSZXNwb25zZRIXCg9uZXdfa2V5X3N1YmplY3QYASABKAkSGgoSb3duZWRfY3VzdG9keV91c2RhGAIgASgMEhQKDHZlcmlmaWVkX3ZpYRgDIAEoCRIYChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgEEh8KF2FwcHJvdmVkX2F0X3VuaXhfbWlsbGlzGAUgASgEEhkKEW93bmVkX2tleV9zdWJqZWN0GAYgASgJIpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMItgBCglSb3dzUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgEIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYBSABKAsyFC5nb29nbGUucHJvdG9idWYuQW55EhsKDnNpbmNlX2Zyb250aWVyGAYgASgJSACIAQFCEQoPX3NpbmNlX2Zyb250aWVyIsYBCglQYWdlUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Eg0KBWxpbWl0GAMgASgNEg0KBWFmdGVyGAQgASgJEhEKCXByaW5jaXBhbBgFIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgGIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYByABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIjgKC0J5VHlwZVF1ZXJ5EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCSJcCghOb21vc1JlZhIRCgl3b3Jrc3BhY2UYASABKAkSFgoOYWdncmVnYXRlX3R5cGUYAiABKAkSFAoMYWdncmVnYXRlX2lkGAMgASgJEg8KB3ZlcnNpb24YBCABKAkiTgoQUmVzb2x2ZVJlZnNRdWVyeRInCgRyZWZzGAEgAygLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhEKCXByaW5jaXBhbBgCIAEoCSJOChZSZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5EjQKBHJlZnMYASADKAsyJi5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbkNoZWNrIoQBChVSZWZlcmVuY2VWZXJzaW9uQ2hlY2sSKQoGcGlubmVkGAEgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEikKBnNlcmllcxgCIAEoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIVCg1jdXJyZW50X2ZpZWxkGAMgASgJImIKClRhbGx5UXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEhYKCWdyb3VwX2tleRgEIAEoCUgAiAEBQgwKCl9ncm91cF9rZXlKBAgCEANSCWFyZ3VtZW50cyJ6CgxTcGF0aWFsUXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEg0KBW1pbl94GAQgASgBEg0KBW1pbl95GAUgASgBEg0KBW1heF94GAYgASgBEg0KBW1heF95GAcgASgBSgQIAhADUglhcmd1bWVudHMiWgoVUGVuZGluZ0NvbmZsaWN0c1F1ZXJ5EhsKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJSACIAQESEQoJcHJpbmNpcGFsGAIgASgJQhEKD19hZ2dyZWdhdGVfdHlwZSIwChtQZW5kaW5nQ29uZmxpY3RTdW1tYXJ5UXVlcnkSEQoJcHJpbmNpcGFsGAEgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCLkAQoZRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdBIOCgZkb21haW4YASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSDwoHYXRfaGFzaBgDIAEoCRIhChlhY2tub3dsZWRnZW1lbnRfcHJpbmNpcGFsGAQgASgJEiAKE3Jlc3RvcmVfcHJldmlvdXNfb2YYBSABKAlIAIgBARIxCg9jYW5kaWRhdGVfdW5pdHMYBiADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEIWChRfcmVzdG9yZV9wcmV2aW91c19vZiJaCiVGcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhgKEHNvdXJjZV9zdGFibGVfaWQYASABKAkSFwoPYWNrbm93bGVkZ2VtZW50GAIgASgJIvUBCh5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnMSDwoHcmV0aXJlZBgBIAMoCRJHCgdyZXR5cGVkGAIgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSRwoHcmViaW5kcxgDIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhwKD2Fja25vd2xlZGdlZF9ieRgEIAEoCUgAiAEBQhIKEF9hY2tub3dsZWRnZWRfYnkiPQobRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEg4KBmRvbWFpbhgBIAEoCRIOCgZkZXRhaWwYAiABKAki1wIKGkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlEg8KB2F0X2hhc2gYASABKAkSGQoMY3VycmVudF9oYXNoGAIgASgJSACIAQESFQoNYXRfc3RhdGVfcm9vdBgDIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgEIAEoCRIOCgZkb21haW4YBSABKAkSDwoHZG9tYWlucxgGIAMoCRINCgVyZWFkeRgHIAEoCBJACgp2aW9sYXRpb25zGAggAygLMiwubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhJKCgxkaXNwb3NpdGlvbnMYCSABKAsyLy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zSAGIAQFCDwoNX2N1cnJlbnRfaGFzaEIPCg1fZGlzcG9zaXRpb25zIi8KE0F1dGhvcml6YXRpb25PYmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSJUChRBdXRob3JpemF0aW9uU3ViamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJEhUKCHJlbGF0aW9uGAMgASgJSACIAQFCCwoJX3JlbGF0aW9uIpwBChhSZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBIQCghyZWxhdGlvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0IoEBChhBdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSIwoZY3VycmVudF92ZXJpZmllZF9mcm9udGllchgBIAEoCEgAEhkKD2F0X2xlYXN0X2NvbW1pdBgCIAEoCUgAEhYKDGV4YWN0X2NvbW1pdBgDIAEoCUgAQg0KC3JlcXVpcmVtZW50ImYKHUF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EhQKDGNvbmRpdGlvbl9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi9wIKGUF1dGhvcml6YXRpb25DaGVja1JlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSPgoLY29uc2lzdGVuY3kYBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBSADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgGIAEoCUgAiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YByABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2gi7QIKGkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI+Cgtjb25zaXN0ZW5jeRgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgEIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAUgASgJSACIAQESDQoFbGltaXQYBiABKA0SEgoFYWZ0ZXIYByABKAlIAYgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAggASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoQggKBl9hZnRlciK9AQoZUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI4CgV0dXBsZRgBIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSEAoIdHVwbGVfaWQYAiABKAkSGgoSYXNzZXJ0aW9uX2V2ZW50X2lkGAMgASgJEiAKE3Jldm9jYXRpb25fZXZlbnRfaWQYBCABKAlIAIgBAUIWChRfcmV2b2NhdGlvbl9ldmVudF9pZCLhAwoYQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uEkYKCW9wZXJhdGlvbhgBIAEoDjIzLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24uT3BlcmF0aW9uEhAKCHJlbGF0aW9uGAIgASgJEg4KBnJlc3VsdBgDIAEoCBI8CghldmlkZW5jZRgEIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjsKCGNoaWxkcmVuGAUgAygLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbiLfAQoJT3BlcmF0aW9uEhkKFU9QRVJBVElPTl9VTlNQRUNJRklFRBAAEhQKEE9QRVJBVElPTl9ESVJFQ1QQARIeChpPUEVSQVRJT05fQ09NUFVURURfVVNFUlNFVBACEh4KGk9QRVJBVElPTl9UVVBMRV9UT19VU0VSU0VUEAMSEwoPT1BFUkFUSU9OX1VOSU9OEAQSGgoWT1BFUkFUSU9OX0lOVEVSU0VDVElPThAFEhcKE09QRVJBVElPTl9FWENMVVNJT04QBhIXChNPUEVSQVRJT05fQ09ORElUSU9OEAcidwoaQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSIAoYYXV0aG9yaXphdGlvbl9tb2RlbF9oYXNoGAEgASgJEiEKGXJlbGF0aW9uc2hpcF9zdGF0ZV9jb21taXQYAiABKAkSFAoMY29udGV4dF9oYXNoGAMgASgMIr4BChpBdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEkMKC2V4cGxhbmF0aW9uGAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgAiAEBQg4KDF9leHBsYW5hdGlvbiKDAgobQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlEjcKCHN1YmplY3RzGAEgAygLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0EjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEhEKBG5leHQYAyABKAlIAIgBARJDCgtleHBsYW5hdGlvbhgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAYgBAUIHCgVfbmV4dEIOCgxfZXhwbGFuYXRpb24iqAEKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrEjYKB3ByZXBhcmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUHJlcGFyZU91dGJvdW5kT2ZmZXIitgEKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkSGgoScGFya19yZWZ1c2VkX2xvY2FsGAQgASgIEhgKEHBhcmtlZF9hdF9taWxsaXMYBSABKAQSGwoTcmVwbGF5X29mZmVyX2J1ZGdldBgGIAEoDSLTAQoaS2VybmVsQ29uZmlndXJhdGlvblJlcXVlc3QSHQoVdHJ1c3Rfcm9vdF9wdWJsaWNfa2V5GAEgASgMEiUKGHRydXN0c19jdXN0b2RpYW5faGlzdG9yeRgCIAEoCEgAiAEBEiAKE2RlZmVycmVkX2R1cmFiaWxpdHkYAyABKAhIAYgBARIYChBob3N0X2NhbGxfbGVkZ2VyGAQgASgIQhsKGV90cnVzdHNfY3VzdG9kaWFuX2hpc3RvcnlCFgoUX2RlZmVycmVkX2R1cmFiaWxpdHkigAEKG0tlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZRItCgZyZXN1bHQYASABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkEh0KEGhvc3RfY2FsbF9sZWRnZXIYAiABKA1IAIgBAUITChFfaG9zdF9jYWxsX2xlZGdlciKTEwoOQ3VzdG9keVJlcXVlc3QSNwoKcGFja19kZWx0YRgKIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXF1ZXN0SAASNwoKYXBwbHlfcGFjaxgLIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BcHBseVBhY2tSZXF1ZXN0SAASNwoKcmVwb19zdGF0cxgMIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXF1ZXN0SAASPQoNaW50ZW50c19hYm92ZRgNIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXF1ZXN0SAASPwoOaW5zcGVjdF9jaGFuZ2UYDiABKAsyJS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdENoYW5nZVJlcXVlc3RIABJOChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMiwubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAElAKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi0ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3RIABI1CglyZWFkX2Jsb2IYESABKAsyIC5ub21vcy5rZXJuZWwudjEuUmVhZEJsb2JSZXF1ZXN0SAASOQoLcmVzb2x2ZV9yZWYYEiABKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlcXVlc3RIABI1CglsaXN0X3JlZnMYEyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXF1ZXN0SAASNQoJd3JpdGVfcmVmGBQgASgLMiAubm9tb3Mua2VybmVsLnYxLldyaXRlUmVmUmVxdWVzdEgAEjcKCmRlbGV0ZV9yZWYYFSABKAsyIS5ub21vcy5rZXJuZWwudjEuRGVsZXRlUmVmUmVxdWVzdEgAEkQKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMicubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlcXVlc3RIABJCChBsYXdfY2xvc3VyZV9pbmZvGBcgASgLMiYubm9tb3Mua2VybmVsLnYxLkxhd0Nsb3N1cmVJbmZvUmVxdWVzdEgAEkUKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMigubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0SAASRQoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlcXVlc3RIABJDChBjYXBhY2l0eV9yZXNlcnZlGBogASgLMicubm9tb3Mua2VybmVsLnYxLkNhcGFjaXR5UmVzZXJ2ZVJlcXVlc3RIABI7CgxyZXN0b3JlX21haW4YGyABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXF1ZXN0SAASTgoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3RIABJHChJyZXNpZGVudF9mb290cHJpbnQYHSABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnRSZXF1ZXN0SAASQQoPaGlzdG9yeV9zdW1tYXJ5GB4gASgLMiYubm9tb3Mua2VybmVsLnYxLkhpc3RvcnlTdW1tYXJ5UmVxdWVzdEgAEloKHHByb3ZlX2NvbXBhY3Rpb25fZXF1aXZhbGVuY2UYHyABKAsyMi5ub21vcy5rZXJuZWwudjEuUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXF1ZXN0SAASPgoOb3Blbl9naXRfc3RhdGUYICABKAsyJC5ub21vcy5rZXJuZWwudjEuT3BlbkdpdFN0YXRlUmVxdWVzdEgAEk4KFnJlYWRfY3VzdG9keV9wbGFjZW1lbnQYISABKAsyLC5ub21vcy5rZXJuZWwudjEuUmVhZEN1c3RvZHlQbGFjZW1lbnRSZXF1ZXN0SAASVAoZaW5zcGVjdF9jdXN0b2R5X3BsYWNlbWVudBgjIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlcXVlc3RIABJQChdyZWxlYXNlX3dvcmtzcGFjZV9zdGF0ZRgkIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZWxlYXNlV29ya3NwYWNlU3RhdGVSZXF1ZXN0SAASXwofcmVjb3JkX3dvcmtzcGFjZV9lZmZlY3Rfb3V0Y29tZRglIAEoCzI0Lm5vbW9zLmtlcm5lbC52MS5SZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdEgAEkwKFWF0dGFjaF9sb2NhbF9mcm9udGllchgmIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdHRhY2hMb2NhbEZyb250aWVyUmVxdWVzdEgAEkMKEGFnZ3JlZ2F0ZV9jZW5zdXMYJyABKAsyJy5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlQ2Vuc3VzUmVxdWVzdEgAEj0KDWF1ZGl0X2N1c3RvZHkYKCABKAsyJC5ub21vcy5rZXJuZWwudjEuQXVkaXRDdXN0b2R5UmVxdWVzdEgAEkgKE2V4cG9ydF9sYXdfcHJvZHVjdHMYKSABKAsyKS5ub21vcy5rZXJuZWwudjEuRXhwb3J0TGF3UHJvZHVjdHNSZXF1ZXN0SAASSAoTaW1wb3J0X2xhd19wcm9kdWN0cxgqIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5JbXBvcnRMYXdQcm9kdWN0c1JlcXVlc3RIABJKChRwcmVwYXJlX2xhd19wcm9kdWN0cxgrIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlTGF3UHJvZHVjdHNSZXF1ZXN0SAASUgoYcmVjb3Zlcl9kZXRhY2hlZF9yZWNlaXB0GCwgASgLMi4ubm9tb3Mua2VybmVsLnYxLlJlY292ZXJEZXRhY2hlZFJlY2VpcHRSZXF1ZXN0SABCCwoJb3BlcmF0aW9uSgQIIhAjUhdhZG9wdF9jdXN0b2R5X3BsYWNlbWVudCJeChZBZ2dyZWdhdGVDZW5zdXNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoKdHlwZV9saW1pdBgCIAEoDSIxChJBZ2dyZWdhdGVUeXBlQ291bnQSDAoEdHlwZRgBIAEoCRINCgVjb3VudBgCIAEoBCL7AQoXQWdncmVnYXRlQ2Vuc3VzUmVzcG9uc2USEQoEaGVhZBgBIAEoCUgAiAEBEhwKD2FnZ3JlZ2F0ZV9jb3VudBgCIAEoBEgBiAEBEhcKCnN0YXRlX3Jvb3QYAyABKAlIAogBARI2Cgl0b3BfdHlwZXMYBCADKAsyIy5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlVHlwZUNvdW50Eh0KEHR5cGVzX3N0YXRlX3Jvb3QYBSABKAlIA4gBAUIHCgVfaGVhZEISChBfYWdncmVnYXRlX2NvdW50Qg0KC19zdGF0ZV9yb290QhMKEV90eXBlc19zdGF0ZV9yb290IigKGFJlc2lkZW50Rm9vdHByaW50UmVxdWVzdBIMCgRkZWVwGAEgASgIIvQDChFSZXNpZGVudEZvb3RwcmludBIRCgl3b3Jrc3BhY2UYASABKAkSDgoGYnJhbmNoGAIgASgJEhgKEHJlYWRfbW9kZWxfYnl0ZXMYAyABKAQSHQoVcmVhZF9tb2RlbF9ydXN0X2J5dGVzGAQgASgEEhgKEGZvbGRfc3RhdGVfYnl0ZXMYBSABKAQSEwoLZm9sZF9pbWFnZXMYBiABKA0SHwoXc2hhcmVkX2F0dHJpYnV0ZWRfYnl0ZXMYByABKAQSEgoKYWdncmVnYXRlcxgIIAEoBBI2Cgpjb21wb25lbnRzGAkgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Q29tcG9uZW50EhIKCmNvbXB1dGVfdXMYCiABKAQSRQoRcmVhZF9zdG9yYWdlX2tpbmQYCyABKA4yKi5ub21vcy5rZXJuZWwudjEuUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIfChdzcWxpdGVfY2FjaGVfdXNlZF9ieXRlcxgMIAEoBBIYChBmbGF0X3NjYWxhcl9yb3dzGA0gASgEEh0KFWZsYXRfc2NhbGFyX3Jvd3NfcmVhZBgOIAEoBBIdChBmdWxsX3JlcGxheV9oZWFkGA8gASgJSACIAQFCEwoRX2Z1bGxfcmVwbGF5X2hlYWQiaQoRUmVzaWRlbnRDb21wb25lbnQSNAoEa2luZBgBIAEoDjImLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudEtpbmQSDQoFYnl0ZXMYAiABKAQSDwoHY2VpbGluZxgDIAEoCCLKAQoZUmVzaWRlbnRGb290cHJpbnRSZXNwb25zZRI1CglyZXNpZGVudHMYASADKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnQSHAoUYWxsb2NhdG9yX2xpdmVfYnl0ZXMYAiABKAQSGAoQYXR0cmlidXRlZF9ieXRlcxgDIAEoBBIZChF1bmFjY291bnRlZF9ieXRlcxgEIAEoBBIVCg1hY2NvdW50aW5nX3VzGAUgASgEEgwKBGRlZXAYBiABKAgi4gEKEFBhY2tEZWx0YVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRIdChBzdGFnZWRfcGFja19maWxlGAUgASgJSAKIAQESEgoFZGVwdGgYBiABKA1IA4gBARISCgpiZWxvd19oZWFkGAcgASgIEhIKCmFsc29faGVhZHMYCCADKAlCBwoFX2hlYWRCBwoFX2Jhc2VCEwoRX3N0YWdlZF9wYWNrX2ZpbGVCCAoGX2RlcHRoIvoBChBBcHBseVBhY2tSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoEcGFjaxgCIAEoDEgAEhoKEHN0YWdlZF9wYWNrX2ZpbGUYBCABKAlIABIaChBjb250aW51ZV9wZW5kaW5nGAggASgISAASGAoOY2FuY2VsX3BlbmRpbmcYCiABKAhIABIRCgRoZWFkGAMgASgJSAGIAQESDwoHc2hhbGxvdxgFIAMoCRIRCgl1bnNoYWxsb3cYBiADKAkSGQoRd29ya19idWRnZXRfYnl0ZXMYByABKAQSEQoJaW1wb3J0X2lkGAkgASgEQggKBnNvdXJjZUIHCgVfaGVhZCIgChBSZXBvU3RhdHNSZXF1ZXN0EgwKBHJlcG8YASABKAkivwEKE0ludGVudHNBYm92ZVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRINCgVsaW1pdBgFIAEoBBIYChBjb21wbGV0ZV9sb2dpY2FsGAYgASgIEhYKDmNvbXBhY3Rfc3RvcmVkGAcgASgIEhEKCWZyb21fYmFzZRgIIAEoCEIHCgVfaGVhZEIHCgVfYmFzZSJtChVIaXN0b3J5U3VtbWFyeVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESDgoGYnJhbmNoGAMgASgJEhEKBGJhc2UYBCABKAlIAYgBAUIHCgVfaGVhZEIHCgVfYmFzZSIrChRJbnNwZWN0Q2hhbmdlUmVxdWVzdBITCgtjaGFuZ2VfdXNkYRgBIAEoDCLfAQoOUmVmdXNhbFZlcmRpY3QSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIQCgNvaWQYAiABKAlIAYgBARITCgZkb21haW4YAyABKAlIAogBARIZCgxkaXJlY3RpdmVfaWQYBCABKAlIA4gBARIUCgdzZXNzaW9uGAUgASgJSASIAQESEQoJcGFya2VkX2F0GAYgASgJEg4KBnJlYXNvbhgHIAEoCUILCglfb2ZmZXJfaWRCBgoEX29pZEIJCgdfZG9tYWluQg8KDV9kaXJlY3RpdmVfaWRCCgoIX3Nlc3Npb24iTwobRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0EjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiNAocSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdBIUCgx2ZXJkaWN0X3VzZGEYASABKAwi1AEKFUNvbXBhY3Rpb25FcXVpdmFsZW5jZRITCgtzb3VyY2VfaGVhZBgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgDIAEoCRIZChFjYW5kaWRhdGVfZ2VuZXNpcxgEIAEoCRIWCg5zb3VyY2VfaW50ZW50cxgFIAEoBBIXCg9jYXJyaWVkX2ludGVudHMYBiABKAQSFgoOcGFya2VkX2ludGVudHMYByABKAQSEgoKZXF1aXZhbGVudBgIIAEoCCJ9CiFQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3QSEwoLc291cmNlX3JlcG8YASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSFgoOY2FuZGlkYXRlX3JlcG8YAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkiOgoPUmVhZEJsb2JSZXF1ZXN0EgwKBHJlcG8YASABKAkSCwoDb2lkGAIgASgJEgwKBHBhdGgYAyABKAkiUAoRUmVzb2x2ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSEQoEcGF0aBgDIAEoCUgAiAEBQgcKBV9wYXRoIjYKD1BoeXNpY2FsUmVmRmlsZRIRCglyZWZlcmVuY2UYASABKAkSEAoIY29udGVudHMYAiABKAwipwIKD0xpc3RSZWZzUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBnByZWZpeBgCIAEoCRIYChBsb29zZV9yZWZlcmVuY2VzGAMgAygJEiAKGGxvb3NlX2ludmVudG9yeV9jb21wbGV0ZRgEIAEoCBIgChNwYWNrZWRfcmVmc19wcmVzZW50GAUgASgISACIAQESPQoTcGh5c2ljYWxfbG9vc2VfcmVmcxgGIAMoCzIgLm5vbW9zLmtlcm5lbC52MS5QaHlzaWNhbFJlZkZpbGUSHAoUcGh5c2ljYWxfcGFja2VkX3JlZnMYByABKAwSIwobcGh5c2ljYWxfaW52ZW50b3J5X2NvbXBsZXRlGAggASgIQhYKFF9wYWNrZWRfcmVmc19wcmVzZW50IkIKD1dyaXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZ0YXJnZXQYAyABKAkiMwoQRGVsZXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCSIpCghNZXRhRmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwirgEKFldyaXRlTWV0YUNvbW1pdFJlcXVlc3QSDAoEcmVwbxgBIAEoCRIPCgdwYXJlbnRzGAIgAygJEigKBWZpbGVzGAMgAygLMhkubm9tb3Mua2VybmVsLnYxLk1ldGFGaWxlEg8KB21lc3NhZ2UYBCABKAkSFAoMdGltZV9zZWNvbmRzGAUgASgSEhYKCXJlZmVyZW5jZRgGIAEoCUgAiAEBQgwKCl9yZWZlcmVuY2UiZwoVTGF3Q2xvc3VyZUluZm9SZXF1ZXN0EhQKDGNsb3N1cmVfZmlsZRgBIAEoCRI4CgpjYXBhYmlsaXR5GAIgASgOMiQubm9tb3Mua2VybmVsLnYxLktlcm5lbExhd0NhcGFiaWxpdHkihwEKF0NoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSIQoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYAiABKAlIAIgBAUIXChVfc3RhZ2VkX2Zyb250aWVyX2ZpbGUiQQoLRnJvbnRpZXJIbGMSEAoIcGh5c2ljYWwYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIu0EChdWZXJpZmllZEZyb250aWVyUmVjZWlwdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgNvaWQYAiABKAkSDwoHaW50ZW50cxgDIAEoBBITCgtwbGFuc19yZXJ1bhgEIAEoBBIcCg9jb250cm9sbGVyX2hhc2gYBSABKAlIAIgBARIZChFpbnN0YWxsZWRfZG9tYWlucxgGIAMoCRIOCgZsaW5lYXIYByABKAgSMwoIbGFzdF9obGMYCCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAYgBARIUCgdsYXN0X2lkGAkgASgJSAKIAQESEQoJc3RhdGVfb2lkGAogASgJEhQKDHN0YXRlX3NoYTI1NhgLIAEoCRI5Cg5zdGF0ZV9sYXN0X2hsYxgMIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gDiAEBEhoKDXN0YXRlX2xhc3RfaWQYDSABKAlIBIgBARIXCg9tYW5pZmVzdF9zaGEyNTYYDiABKAkSHgoWbGF3X2Nsb3N1cmVfaWRlbnRpdGllcxgPIAMoCRIaChJyZXNvbHZhYmxlX2RvbWFpbnMYECADKAkSIgoVcHJvamVjdGlvbl9zdGF0ZV9yb290GBEgASgJSAWIAQESDgoGd2Fsa2VkGBIgASgIQhIKEF9jb250cm9sbGVyX2hhc2hCCwoJX2xhc3RfaGxjQgoKCF9sYXN0X2lkQhEKD19zdGF0ZV9sYXN0X2hsY0IQCg5fc3RhdGVfbGFzdF9pZEIYChZfcHJvamVjdGlvbl9zdGF0ZV9yb290IkUKFUZvbGRGcm9udGllckFnZ3JlZ2F0ZRIUCgxhZ2dyZWdhdGVfaWQYASABKAkSFgoOYWdncmVnYXRlX3VzZGEYAiABKAwiQQoXRm9sZEZyb250aWVyRmluZ2VycHJpbnQSEQoJaW50ZW50X2lkGAEgASgJEhMKC2ZpbmdlcnByaW50GAIgASgJItYDChRGb2xkRnJvbnRpZXJTbmFwc2hvdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgN0aXAYAiABKAkSDwoHZ2VuZXNpcxgDIAEoCRIVCg1oaXN0b3J5X2RlcHRoGAQgASgEEjoKCmFnZ3JlZ2F0ZXMYBSADKAsyJi5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyQWdncmVnYXRlEjgKDWhsY193YXRlcm1hcmsYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAIgBARIzCghsYXN0X2hsYxgHIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gBiAEBEhQKB2xhc3RfaWQYCCABKAlIAogBARIWCg5zdHJpa2VfdGFyZ2V0cxgJIAMoCRJFChNpbnRlbnRfZmluZ2VycHJpbnRzGAogAygLMigubm9tb3Mua2VybmVsLnYxLkZvbGRGcm9udGllckZpbmdlcnByaW50EhcKCnN0YXRlX3Jvb3QYCyABKAlIA4gBAUIQCg5faGxjX3dhdGVybWFya0ILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCDQoLX3N0YXRlX3Jvb3QimwMKGFN0b3JlZENoZWNrcG9pbnRNYW5pZmVzdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRITCgZjdXJzb3IYAiABKAlIAIgBARIYChBjaGVja3BvaW50X2J5dGVzGAMgASgEEhAKCGxhd19oYXNoGAQgASgJEjsKC2NvbXByZXNzaW9uGAUgASgOMiYubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRDb21wcmVzc2lvbhIRCglyYXdfYnl0ZXMYBiABKAQSFAoMc3RvcmVkX2J5dGVzGAcgASgEEh0KFWZyb250aWVyX3N0b3JlZF9ieXRlcxgIIAEoBBIXCgpzdGF0ZV9yb290GAkgASgJSAGIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgKIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgCiAEBQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCHAoaX3ZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQiwQMKF0NoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoIZnJvbnRpZXIYAiABKAxIABIeChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgGIAEoCUgAEhMKBmN1cnNvchgDIAEoCUgBiAEBEhcKCnN0YXRlX3Jvb3QYBCABKAlIAogBARINCgVzcGFucxgFIAEoCBIRCgRoZWFkGAcgASgJSAOIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgIIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgEiAEBEkoKE3ZlcmlmaWNhdGlvbl9wb2xpY3kYCSABKA4yLS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeUIRCg9mcm9udGllcl9zb3VyY2VCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIHCgVfaGVhZEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCIxChZDYXBhY2l0eVJlc2VydmVSZXF1ZXN0EhcKD2FnZ3JlZ2F0ZV9jb3VudBgBIAEoBCKZAgoSUmVzdG9yZU1haW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCRITCgtkaWFnbm9zdGljcxgDIAEoCBIYChBvcGVyYXRvcl9jdXN0b2R5GAQgASgIEiAKE2V4cGVjdGVkX2xvY2FsX2hlYWQYBSABKAlIAIgBARJAChNjdXN0b2R5X2NlcnRpZmljYXRlGAYgASgLMiMubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlDZXJ0aWZpY2F0ZRIYChBwcm92aWRlcl9jdXN0b2R5GAcgASgIQhYKFF9leHBlY3RlZF9sb2NhbF9oZWFkIm0KE0F1ZGl0Q3VzdG9keVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIVCg1idWRnZXRfbWljcm9zGAIgASgNEg0KBXN0YXJ0GAMgASgIIpQBChRBdWRpdEN1c3RvZHlSZXNwb25zZRIPCgdwZW5kaW5nGAEgASgIEgwKBGhlYWQYAiABKAkSDgoGd2Fsa2VkGAMgASgEEg0KBXRvdGFsGAQgASgEEg8KB291dGNvbWUYBSABKAkSLQoHdmVyZGljdBgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCJ+CgtMYXdQcm9kdWN0cxIUCgxsYXdfaWRlbnRpdHkYASABKAkSFgoOZm9ybWF0X3ZlcnNpb24YAiABKA0SEgoKcmVhZF9sYXllchgDIAEoDBIVCg1jb21tYW5kX2xheWVyGAQgASgMEhYKDnNlbWFudGljX2xheWVyGAUgASgMIkwKGEV4cG9ydExhd1Byb2R1Y3RzUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0IlkKGUV4cG9ydExhd1Byb2R1Y3RzUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyJ8ChhJbXBvcnRMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyItChlJbXBvcnRMYXdQcm9kdWN0c1Jlc3BvbnNlEhAKCGltcG9ydGVkGAEgAygJIm8KEkN1c3RvZHlDZXJ0aWZpY2F0ZRIRCgl3b3Jrc3BhY2UYASABKAkSDAoEaGVhZBgCIAEoCRIRCglrZXlfZXBvY2gYAyABKAMSEgoKcHVibGljX2tleRgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwiZAoTT3BlbkdpdFN0YXRlUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSDQoFc3BhbnMYAyABKAgiawoaQXR0YWNoTG9jYWxGcm9udGllclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEg0KBXNwYW5zGAMgASgIIlMKDUN1c3RvZHlSZW1vdGUSDAoEbmFtZRgBIAEoCRILCgN1cmwYAiABKAkSFQoNcGVlcl9pZGVudGl0eRgDIAEoCRIQCghwcmlvcml0eRgEIAEoDSLGAQoUQ3VzdG9keVBsYWNlbWVudFJ1bGUSEgoKcGVlcl9jbGFzcxgBIAEoCRJAChBrZXJuZWxfcmVzaWRlbmN5GAIgASgOMiYubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlc2lkZW5jeUludGVudBJCChFjdXN0b2R5X3JldGVudGlvbhgDIAEoDjInLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmV0ZW50aW9uSW50ZW50EhQKDHJlbW90ZV9uYW1lcxgEIAMoCSKuAgoWQ3VzdG9keVBsYWNlbWVudFBvbGljeRITCgtkZWNsYXJhdGlvbhgBIAEoCRIWCg5wYWNrYWdlX3NoYTI1NhgCIAEoCRI0CgVydWxlcxgDIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UGxhY2VtZW50UnVsZRISCgphZG9wdGVkX2J5GAQgASgJEg4KBnJlYXNvbhgFIAEoCRIeChZlZmZlY3RpdmVfdGltZV9zZWNvbmRzGAYgASgSEi8KB3JlbW90ZXMYByADKAsyHi5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlbW90ZRIiChVyZWNpcGllbnRfbWFpbGJveF91cmwYCCABKAlIAIgBAUIYChZfcmVjaXBpZW50X21haWxib3hfdXJsIlkKG0N1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhIQCgZhYnNlbnQYASABKAhIABINCgNvaWQYAiABKAlIABINCgNhbnkYAyABKAhIAEIKCghmcm9udGllciIrChtSZWFkQ3VzdG9keVBsYWNlbWVudFJlcXVlc3QSDAoEcmVwbxgBIAEoCSI1Ch5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlcXVlc3QSEwoLcG9saWN5X3VzZGEYASABKAwiiQEKDlBsYWNlbWVudE9mZmVyEj4KCGV4cGVjdGVkGAEgASgLMiwubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhI3CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJpChtSZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgltYWluX2hlYWQYAiABKAkSFQoNaGludGVkX2NvbW1pdBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJIpYTCg9DdXN0b2R5UmVzcG9uc2USOAoKcGFja19kZWx0YRgKIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXNwb25zZUgAEjgKCmFwcGx5X3BhY2sYCyABKAsyIi5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVzcG9uc2VIABI4CgpyZXBvX3N0YXRzGAwgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1Jlc3BvbnNlSAASPgoNaW50ZW50c19hYm92ZRgNIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXNwb25zZUgAEkAKDmluc3BlY3RfY2hhbmdlGA4gASgLMiYubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXNwb25zZUgAEk8KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLS5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAElEKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi4ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASNgoJcmVhZF9ibG9iGBEgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVzcG9uc2VIABI6CgtyZXNvbHZlX3JlZhgSIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVzcG9uc2VIABI2CglsaXN0X3JlZnMYEyABKAsyIS5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXNwb25zZUgAEjIKCXdyaXRlX3JlZhgUIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABIzCgpkZWxldGVfcmVmGBUgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEkUKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMigubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlc3BvbnNlSAASQwoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzInLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1Jlc3BvbnNlSAASRgoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlSAASRgoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlSAASRAoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXNwb25zZUgAEjwKDHJlc3RvcmVfbWFpbhgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlc3BvbnNlSAASTwoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlc3BvbnNlSAASSAoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMioubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2VIABJCCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJy5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXNwb25zZUgAElsKHHByb3ZlX2NvbXBhY3Rpb25fZXF1aXZhbGVuY2UYHyABKAsyMy5ub21vcy5rZXJuZWwudjEuUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXNwb25zZUgAEj8KDm9wZW5fZ2l0X3N0YXRlGCAgASgLMiUubm9tb3Mua2VybmVsLnYxLk9wZW5HaXRTdGF0ZVJlc3BvbnNlSAASTwoWcmVhZF9jdXN0b2R5X3BsYWNlbWVudBghIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZWFkQ3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASVQoZaW5zcGVjdF9jdXN0b2R5X3BsYWNlbWVudBgjIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASUQoXcmVsZWFzZV93b3Jrc3BhY2Vfc3RhdGUYJCABKAsyLi5ub21vcy5rZXJuZWwudjEuUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2VIABJaCh9yZWNvcmRfd29ya3NwYWNlX2VmZmVjdF9vdXRjb21lGCUgASgLMi8ubm9tb3Mua2VybmVsLnYxLlJlY29yZGVkV29ya3NwYWNlRWZmZWN0T3V0Y29tZUgAEk0KFWF0dGFjaF9sb2NhbF9mcm9udGllchgmIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5BdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2VIABJEChBhZ2dyZWdhdGVfY2Vuc3VzGCcgASgLMigubm9tb3Mua2VybmVsLnYxLkFnZ3JlZ2F0ZUNlbnN1c1Jlc3BvbnNlSAASPgoNYXVkaXRfY3VzdG9keRgoIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdWRpdEN1c3RvZHlSZXNwb25zZUgAEkkKE2V4cG9ydF9sYXdfcHJvZHVjdHMYKSABKAsyKi5ub21vcy5rZXJuZWwudjEuRXhwb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAEkkKE2ltcG9ydF9sYXdfcHJvZHVjdHMYKiABKAsyKi5ub21vcy5rZXJuZWwudjEuSW1wb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAEksKFHByZXBhcmVfbGF3X3Byb2R1Y3RzGCsgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlSAASQgoYcmVjb3Zlcl9kZXRhY2hlZF9yZWNlaXB0GCwgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEILCglvcGVyYXRpb25KBAgiECNSF2Fkb3B0X2N1c3RvZHlfcGxhY2VtZW50InAKEVBhY2tEZWx0YVJlc3BvbnNlEgwKBHBhY2sYASABKAwSDQoFYnl0ZXMYAiABKAQSDwoHc2hhbGxvdxgDIAMoCRIPCgdjb21taXRzGAQgASgNEg0KBXRyZWVzGAUgASgNEg0KBWJsb2JzGAYgASgNIuIBChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJEjsKB2Nsb3N1cmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUGh5c2ljYWxDbG9zdXJlQ2hlY2tIAIgBARIWCg5pbXBvcnRfcGVuZGluZxgEIAEoCBIXCg93b3JrX2RvbmVfYnl0ZXMYBSABKAQSEQoJaW1wb3J0X2lkGAYgASgEEhcKD2ltcG9ydF9kZWZlcnJlZBgHIAEoCEIKCghfY2xvc3VyZSJtChRQaHlzaWNhbENsb3N1cmVDaGVjaxIWCg5yZXVzZWRfcmVjZWlwdBgBIAEoCBIUCgxjb21taXRzX3JlYWQYAiABKAQSEgoKdHJlZXNfcmVhZBgDIAEoBBITCgtsZWF2ZXNfcmVhZBgEIAEoBCK4AQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEEg8KB3NoYWxsb3cYCCADKAki4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkInQKFkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2USDAoEaGVhZBgBIAEoCRIOCgZvbGRlc3QYAiABKAkSFAoMY29tbWl0X2NvdW50GAMgASgEEhAKCGNvbXBsZXRlGAQgASgIEhQKDHJlYWNoZWRfYmFzZRgFIAEoCCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCJ1CiJQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlEjgKCGV2aWRlbmNlGAEgASgLMiYubm9tb3Mua2VybmVsLnYxLkNvbXBhY3Rpb25FcXVpdmFsZW5jZRIVCg1ldmlkZW5jZV91c2RhGAIgASgMIi8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLfAwoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCyABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IusCChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIEjcKCWFzc3VyYW5jZRgKIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhIKCnJlYWRfcmVhZHkYCyABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIsABChRPcGVuR2l0U3RhdGVSZXNwb25zZRIOCgZvcGVuZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPYWdncmVnYXRlX2NvdW50GAMgASgEEisKBXNwYW5zGAQgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhMKBmN1cnNvchgFIAEoCUgBiAEBEhIKCnJlYWRfcmVhZHkYBiABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIukBChtBdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2USEAoIYXR0YWNoZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESDAoEaGVhZBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBISCgpyZWFkX3JlYWR5GAcgASgIEhwKFGZvcmVpZ25fc291cmNlX3JlYWR5GAggASgIQgkKB19yZWFzb24iMQocUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVxdWVzdBIRCgl3b3Jrc3BhY2UYASABKAkiMQodUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2USEAoIcmVsZWFzZWQYASABKAgiiwEKHFJlYWRDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2USFQoIZnJvbnRpZXIYASABKAlIAIgBARI8CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeUgBiAEBQgsKCV9mcm9udGllckIJCgdfcG9saWN5Il0KEFBsYWNlbWVudEFkb3B0ZWQSEAoIZnJvbnRpZXIYASABKAkSNwoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiWgofSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZRI3CgZwb2xpY3kYASABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyLvAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EjcKCWFzc3VyYW5jZRgGIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhAKCGFjY2VwdGVkGAcgASgIIpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASI6Cg9IaXN0b3J5UmVxdWlyZWQSEQoJd29ya3NwYWNlGAEgASgJEhQKDHVudGlsX2NvbW1pdBgCIAEoCSJAChVMYXdQcmVwYXJhdGlvblVuaXRTZXQSJwoFdW5pdHMYASADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdCJNChBQcmVwYXJlZExhd0xheWVyEg0KBWlucHV0GAEgASgJEgsKA2tleRgCIAEoCRINCgVsYXllchgDIAEoDBIOCgZzaGEyNTYYBCABKAki6AIKGVByZXBhcmVMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBI5Cgl1bml0X3NldHMYAiADKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3UHJlcGFyYXRpb25Vbml0U2V0Ej0KCGV4cGVjdGVkGAMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlEjEKD2NhbmRpZGF0ZV91bml0cxgEIAMoCzIYLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0EhUKDWNvdmVyYWdlX29ubHkYBSABKAgSFQoNY3VzdG9keV9oZWFkcxgGIAMoCRI+Cgtkb21haW5fcGxhbhgHIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlRG9tYWluUGxhblJlcXVlc3QiyAEKGlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlEhkKEWtlcm5lbF9nZW5lcmF0aW9uGAEgASgJEhEKCXVuaXRfc2V0cxgCIAMoCRIYChBwcmVwYXJhdGlvbl9rZXlzGAMgAygJEjEKBmxheWVycxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlZExhd0xheWVyEhMKC2Rlcml2YXRpb25zGAUgASgEEhoKEnByZXBhcmF0aW9uX21pY3JvcxgGIAEoBCKIAQodUmVjb3ZlckRldGFjaGVkUmVjZWlwdFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBI1CgZjaGFuZ2UYAiABKAsyJS5ub21vcy5rZXJuZWwudjEuRGV0YWNoZWRTaWduZWRDaGFuZ2UqbgoPTGF3VmVyc2lvbk9yZGVyEiEKHUxBV19WRVJTSU9OX09SREVSX1VOU1BFQ0lGSUVEEAASGwoXTEFXX1ZFUlNJT05fT1JERVJfRVFVQUwQARIbChdMQVdfVkVSU0lPTl9PUkRFUl9MT1dFUhACKuoBChJCaXJ0aE91dGNvbWVTdGF0dXMSJAogQklSVEhfT1VUQ09NRV9TVEFUVVNfVU5TUEVDSUZJRUQQABIdChlCSVJUSF9PVVRDT01FX1NUQVRVU19CT1JOEAESIQodQklSVEhfT1VUQ09NRV9TVEFUVVNfREVGRVJSRUQQAhIfChtCSVJUSF9PVVRDT01FX1NUQVRVU19GQUlMRUQQAxIgChxCSVJUSF9PVVRDT01FX1NUQVRVU19SRUZVU0VEEAQSKQolQklSVEhfT1VUQ09NRV9TVEFUVVNfVU5XQVJSQU5URURfQ0VSVBAFKswUChFLZXJuZWxSZWZ1c2FsQ29kZRIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1VOU1BFQ0lGSUVEEAASJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9CQURfU0lHTkFUVVJFEAESJAogS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkFVVEhPUklaRUQQAhInCiNLRVJORUxfUkVGVVNBTF9DT0RFX1BPTElDWV9ESVNBQkxFRBADEioKJktFUk5FTF9SRUZVU0FMX0NPREVfVU5DRVJUSUZJRURfUE9MSUNZEAQSIwofS0VSTkVMX1JFRlVTQUxfQ09ERV9SRUZFUkVOVElBTBAFEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfUE9JTlRfU1RBVEVfVU5BVkFJTEFCTEUQBhIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX0NBUF9FWENFRURFRBAHEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0NPVU5UX1VOQVZBSUxBQkxFEAgSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9FVklERU5DRV9VTkJBQ0tFRBAJEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1JQSEFOX1JFQ0VJUFQQChI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX1JFQ0VJUFRfT05fVEVSTUlOQUxfT0JMSUdBVElPThALEiIKHktFUk5FTF9SRUZVU0FMX0NPREVfTk9UX01JTlRFRBAMEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRE9NQUlOX0xJRkVDWUNMRRANEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfVFlQRV9UQUdfTUlTTUFUQ0gQDhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1JFVElSRURfUkVBRF9TVVJGQUNFEA8SMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DUk9TU19XT1JLU1BBQ0VfREVDTElORUQQEBIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FHR1JFR0FURV9JTlZBUklBTlQQERIrCidLRVJORUxfUkVGVVNBTF9DT0RFX1dPUktTUEFDRV9JTlZBUklBTlQQEhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfQ09ORkxJQ1QQExIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1JFUVVJUkVEEBQSNAowS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9VTkRFQ0xBUkVEEBUSMQotS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9JTlZBTElEEBYSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9TVEFMRRAXEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9VTkRFQ0xBUkVEEBgSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1BSSVZBVEUQGRIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5ERUNMQVJFRBAaEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTlRSVVNURURfS0VZEBsSNgoyS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9TT1VSQ0UQHBIsCihLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRk9SR0VEEB0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1NUQUxFEB4SLgoqS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX09WRVJTSVpFEB8SNwozS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX0RJU0hPTk9SRURfU09VUkNFECASNQoxS0VSTkVMX1JFRlVTQUxfQ09ERV9FUVVJVk9DQVRJT05fRVZJREVOQ0VfSU5WQUxJRBAhEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNUQVRJT05fUkVDRUlQVF9JTlZBTElEECISKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfUk9TVEVSX01JU01BVENIECMSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfRVBPQ0hfTk9UX01PTk9UT05JQxAkEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfV1JJVEVfRVBPQ0hfU1RBTEUQJRItCilLRVJORUxfUkVGVVNBTF9DT0RFX0VOVkVMT1BFX1NJRF9NSVNNQVRDSBAmEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfUkVWT0tFRF9NRU1CRVJfUkVTVVJSRUNURUQQJxIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX0ZPUkdFRF9QUklOQ0lQQUwQKBIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX0tFWV9BTkNIT1IQKRImCiJLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX1JFQ09WRVJZECoSLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9TVVJGQUNFRF9CQVNJU19BSEVBRBArEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfU0lHTkVSX0VQT0NIX09VVF9PRl9XSU5ET1cQLBImCiJLRVJORUxfUkVGVVNBTF9DT0RFX0VWT0xWRV9SRUZVU0VEEC0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9JTlZBTElEEC4SLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9QQVJFTlRfRElEX05PVF9BVFRFU1QQLxIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0NFUlRfQ0hBSU5fQlJPS0VOEDASKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfUk9PVEVEX0FUX1JPT1QQMRIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX0RFTEVHQVRJT05fSU5WQUxJRBAyEiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfUExBTl9SRUpFQ1RFRBAzEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRE9NQUlOX1JFRlVTRUQQNBIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0lOVkFSSUFOVF9FWEVDVVRJT05fRkFVTFQQNRI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0NIRUNLUE9JTlRfU0lHTkVSX1VOQVZBSUxBQkxFEDYSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9PRkZFUl9CQVNFX1NUQUxFEDcSJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9CSVJUSF9SRUZVU0VEEDgq7wIKEEZ1bGxSZXN1bHRSZWFzb24SIgoeRlVMTF9SRVNVTFRfUkVBU09OX1VOU1BFQ0lGSUVEEAASHgoaRlVMTF9SRVNVTFRfUkVBU09OX05PX0JBU0UQARIiCh5GVUxMX1JFU1VMVF9SRUFTT05fTEFXX0NIQU5HRUQQAhItCilGVUxMX1JFU1VMVF9SRUFTT05fUkVBRF9BVVRIT1JJVFlfQ0hBTkdFRBADEikKJUZVTExfUkVTVUxUX1JFQVNPTl9QRVJfUkVDT1JEX1JFRlVTQUwQBBIjCh9GVUxMX1JFU1VMVF9SRUFTT05fT1JERVJFRF9SRUFEEAUSJgoiRlVMTF9SRVNVTFRfUkVBU09OX1RFTVBPUkFMX0ZJRUxEUxAGEicKI0ZVTExfUkVTVUxUX1JFQVNPTl9CQVNFX1VOQVZBSUxBQkxFEAcSIwofRlVMTF9SRVNVTFRfUkVBU09OX0xFR0FDWV9TVEFURRAIKskBChNJbnRlcmZhY2VNZW1iZXJLaW5kEiUKIUlOVEVSRkFDRV9NRU1CRVJfS0lORF9VTlNQRUNJRklFRBAAEiAKHElOVEVSRkFDRV9NRU1CRVJfS0lORF9ET01BSU4QARIjCh9JTlRFUkZBQ0VfTUVNQkVSX0tJTkRfRElSRUNUSVZFEAISIwofSU5URVJGQUNFX01FTUJFUl9LSU5EX0FHR1JFR0FURRADEh8KG0lOVEVSRkFDRV9NRU1CRVJfS0lORF9GSUVMRBAEKogCChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5U3RhdHVzEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19VTlNQRUNJRklFRBAAEigKJElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19FWEFDVBABEi0KKUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19DT01QQVRJQkxFEAISLgoqSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX1VOQVZBSUxBQkxFEAMSLworSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX0lOQ09NUEFUSUJMRRAEKsMDChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVhc29uEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9VTlNQRUNJRklFRBAAEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9ET01BSU5fTUlTU0lORxABEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NRU1CRVJfTUlTU0lORxACEjAKLElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9GSUVMRF9NSVNTSU5HEAMSNQoxSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1ZBTFVFX0tJTkRfQ0hBTkdFRBAEEjcKM0lOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9SRVFVSVJFRF9JTlBVVF9BRERFRBAFEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NQVRSSVhfSU5WQUxJRBAGEjgKNElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9XSVJFX0NPTlRSQUNUX0NIQU5HRUQQByq3AgoQTWFpbnRlbmFuY2VQaGFzZRIhCh1NQUlOVEVOQU5DRV9QSEFTRV9VTlNQRUNJRklFRBAAEiQKIE1BSU5URU5BTkNFX1BIQVNFX1JFQURfRE9DVU1FTlRTEAESIgoeTUFJTlRFTkFOQ0VfUEhBU0VfU1FMSVRFX0lOREVYEAISJgoiTUFJTlRFTkFOQ0VfUEhBU0VfQ09NTUFORF9GUk9OVElFUhADEiMKH01BSU5URU5BTkNFX1BIQVNFX0NPTU1BTkRfUk9VVEUQBBIhCh1NQUlOVEVOQU5DRV9QSEFTRV9HSVRfQ1VTVE9EWRAFEiYKIk1BSU5URU5BTkNFX1BIQVNFX1JFQURfSU5ERVhfQ0FDSEUQBhIeChpNQUlOVEVOQU5DRV9QSEFTRV9DT01QTEVURRAHKooBCg9WZXJpZnlDaGFpbldhbGsSIQodVkVSSUZZX0NIQUlOX1dBTEtfVU5TUEVDSUZJRUQQABIaChZWRVJJRllfQ0hBSU5fV0FMS19GVUxMEAESHAoYVkVSSUZZX0NIQUlOX1dBTEtfU1VGRklYEAISGgoWVkVSSUZZX0NIQUlOX1dBTEtfTUVNTxADKnAKGEVmZmVjdEV4ZWN1dGlvblBsYWNlbWVudBIqCiZFRkZFQ1RfRVhFQ1VUSU9OX1BMQUNFTUVOVF9VTlNQRUNJRklFRBAAEigKJEVGRkVDVF9FWEVDVVRJT05fUExBQ0VNRU5UX0NVU1RPRElBThABKnYKGkVmZmVjdEV4ZWN1dGlvbkNhcmRpbmFsaXR5EiwKKEVGRkVDVF9FWEVDVVRJT05fQ0FSRElOQUxJVFlfVU5TUEVDSUZJRUQQABIqCiZFRkZFQ1RfRVhFQ1VUSU9OX0NBUkRJTkFMSVRZX1NJTkdMRVRPThABKrcBChdNb2RlbExpZmVjeWNsZU9wZXJhdGlvbhIpCiVNT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASJQohTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9JTlNUQUxMEAESIwofTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9TVEFHRRACEiUKIU1PREVMX0xJRkVDWUNMRV9PUEVSQVRJT05fUFJPTU9URRADKtwBCh1DaGlsZFdvcmtzcGFjZUxpZmVjeWNsZVN0YXR1cxIwCixDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19VTlNQRUNJRklFRBAAEisKJ0NISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX0FDVElWRRABEiwKKENISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX1JFVElSRUQQAhIuCipDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19SRUNMQUlNRUQQAyr4AQoiRGVjbGFyZWRBdXRoZW50aWNhdGlvblByb3ZpZGVyS2luZBI1CjFERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1VOU1BFQ0lGSUVEEAASMgouREVDTEFSRURfQVVUSEVOVElDQVRJT05fUFJPVklERVJfS0lORF9TRUxFQ1RFRBABEjIKLkRFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfRU5ST0xMRUQQAhIzCi9ERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1NPVkVSRUlHThADKooBChVEZWNsYXJlZExhd01lbWJlcktpbmQSKAokREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX1VOU1BFQ0lGSUVEEAASJAogREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX0NPTU1BTkQQARIhCh1ERUNMQVJFRF9MQVdfTUVNQkVSX0tJTkRfUkVBRBACKosGCh9Qcm92aWRlclRva2VuVmVyaWZpY2F0aW9uU3RhdHVzEjIKLlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIsCihQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX1ZBTElEEAESNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19OT19NQVRDSElOR19LRVkQAhIuCipQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0VYUElSRUQQAxI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PVF9ZRVRfVkFMSUQQBBI2CjJQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0lTU1VFUl9NSVNNQVRDSBAFEjgKNFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfQVVESUVOQ0VfTUlTTUFUQ0gQBhI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0JBRF9TSUdOQVRVUkUQBxIwCixQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX01BTEZPUk1FRBAIEjwKOFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TVVBQT1JURURfQUxHT1JJVEhNEAkSLgoqUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19CQURfS0VZEAoSNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1NVQkpFQ1QQCxIyCi5QUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PX1ZFUklGSUVSEAwSNAowUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1RPS0VOEA0qyAEKEkRldmljZVNpZ25lclN0YXR1cxIkCiBERVZJQ0VfU0lHTkVSX1NUQVRVU19VTlNQRUNJRklFRBAAEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FDVElWRRABEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FCU0VOVBACEiAKHERFVklDRV9TSUdORVJfU1RBVFVTX1JFVk9LRUQQAxIoCiRERVZJQ0VfU0lHTkVSX1NUQVRVU19LRVlfVU5BVkFJTEFCTEUQBCrXAQoTQmlydGhFdmlkZW5jZVN0YXR1cxIlCiFCSVJUSF9FVklERU5DRV9TVEFUVVNfVU5TUEVDSUZJRUQQABImCiJCSVJUSF9FVklERU5DRV9TVEFUVVNfTk9UX1JFUVVJUkVEEAESHwobQklSVEhfRVZJREVOQ0VfU1RBVFVTX1JFQURZEAISLQopQklSVEhfRVZJREVOQ0VfU1RBVFVTX0RFTEVHQVRJT05fUkVRVUlSRUQQAxIhCh1CSVJUSF9FVklERU5DRV9TVEFUVVNfSU5WQUxJRBAEKrIBChFRdWVyeVJlc3VsdEZvcm1hdBIjCh9RVUVSWV9SRVNVTFRfRk9STUFUX1VOU1BFQ0lGSUVEEAASJAogUVVFUllfUkVTVUxUX0ZPUk1BVF9MRUdBQ1lfVkFMVUUQARIkCiBRVUVSWV9SRVNVTFRfRk9STUFUX05PTUlOQUxfVVNEQRACEiwKKFFVRVJZX1JFU1VMVF9GT1JNQVRfQVBQTElDQVRJT05fUFJPVE9CVUYQAyqVDAoOUXVlcnlPcGVyYXRpb24SHwobUVVFUllfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYUVVFUllfT1BFUkFUSU9OX0VYVFJFTVVNEAESIAocUVVFUllfT1BFUkFUSU9OX1JFQURfUE9TVFVSRRAEEh8KG1FVRVJZX09QRVJBVElPTl9DVVJSRU5UX0xBVxAFEiMKH1FVRVJZX09QRVJBVElPTl9JTlRFUkZBQ0VfT0ZGRVIQBhInCiNRVUVSWV9PUEVSQVRJT05fUkVMQVRJT05fR0FURV9PRkZFUhAHEh0KGVFVRVJZX09QRVJBVElPTl9TQ0VORV9MQVcQCBIhCh1RVUVSWV9PUEVSQVRJT05fSU5TVEFMTEVEX0xBVxAJEhwKGFFVRVJZX09QRVJBVElPTl9ERVNDUklCRRAKEiMKH1FVRVJZX09QRVJBVElPTl9LRVJORUxfUkVTT1VSQ0UQCxIjCh9RVUVSWV9PUEVSQVRJT05fREVWRUxPUEVSX1NQQU5TEAwSKQolUVVFUllfT1BFUkFUSU9OX0RFQ0xBUkVEX0NBUEFCSUxJVElFUxANEh0KGVFVRVJZX09QRVJBVElPTl9SRUFESU5FU1MQDhIkCiBRVUVSWV9PUEVSQVRJT05fUFJPSkVDVElPTl9TVEFUUxAPEiUKIVFVRVJZX09QRVJBVElPTl9NRU1PUllfRFJPUF9QUk9CRRAQEhgKFFFVRVJZX09QRVJBVElPTl9XQVJNEBESGwoXUVVFUllfT1BFUkFUSU9OX1JFRlJFU0gQEhIgChxRVUVSWV9PUEVSQVRJT05fVkVSSUZZX0NIQUlOEBMSIgoeUVVFUllfT1BFUkFUSU9OX0NPVU5URVJGQUNUVUFMEBQSGQoVUVVFUllfT1BFUkFUSU9OX1JPVVRFEBUSJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19TRUFMX0ZJRUxEEBgSLAooUVVFUllfT1BFUkFUSU9OX0NSWVBUT19CTElORF9JTkRFWF9UT0tFThAZEioKJlFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfU0NPUEVfS0VZEBoSLworUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9ERVZJQ0VfUkVRVUVTVBAbEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9BUFBST1ZBTBAcEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9SRUNPVkVSWRAdEiAKHFFVRVJZX09QRVJBVElPTl9SRUNFSVBUX1BBVEgQIhIdChlRVUVSWV9PUEVSQVRJT05fQ0VSVF9TSUdOECMSJQohUVVFUllfT1BFUkFUSU9OX0JJUlRIX1RSVVNUX1NUQVRFECQSIQodUVVFUllfT1BFUkFUSU9OX0VSQV9DRVJUX1NJR04QJRIoCiRRVUVSWV9PUEVSQVRJT05fREVMRUdBVElPTl9DRVJUX1NJR04QJhIpCiVRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX0ZST05USUVSECcSKwonUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9QUk9KRUNUSU9OECgiBAgCEAIiBAgDEAMiBAgWEBYiBAgXEBciBAgeEB4iBAgfEB8iBAggECAiBAghECEqIVFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUUyooUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RfU1VNTUFSWSoUUVVFUllfT1BFUkFUSU9OX01JTlQqHVFVRVJZX09QRVJBVElPTl9DUllQVE9fS0VZR0VOKh9RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1dSQVBfS0VZKiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1VOV1JBUF9LRVkqHVFVRVJZX09QRVJBVElPTl9BVVRIT1JfS0VZR0VOKiBRVUVSWV9PUEVSQVRJT05fQVRURVNUQVRJT05fU0lHTiqpAQoZUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIsCihSRUFEX1BST0pFQ1RJT05fU1RPUkFHRV9LSU5EX1VOU1BFQ0lGSUVEEAASKQolUkVBRF9QUk9KRUNUSU9OX1NUT1JBR0VfS0lORF9SRVNJREVOVBABEjMKL1JFQURfUFJPSkVDVElPTl9TVE9SQUdFX0tJTkRfRklMRV9CQUNLRURfU0NBTEFSEAIq0gIKFVJlc2lkZW50Q29tcG9uZW50S2luZBInCiNSRVNJREVOVF9DT01QT05FTlRfS0lORF9VTlNQRUNJRklFRBAAEiYKIlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0ZPTERfU1RBVEUQARItCilSRVNJREVOVF9DT01QT05FTlRfS0lORF9SRUFEX01PREVMX1NRTElURRACEi4KKlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfSU5ERVhFUxADEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1NIQVJFRF9BVFRSSUJVVEVEEAQSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfV09SS1NQQUNFX0NBQ0hFUxAFEiwKKFJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0dJVF9PQkpFQ1RfQ0FDSEUQBipsChNLZXJuZWxMYXdDYXBhYmlsaXR5EiUKIUtFUk5FTF9MQVdfQ0FQQUJJTElUWV9VTlNQRUNJRklFRBAAEi4KKktFUk5FTF9MQVdfQ0FQQUJJTElUWV9TVEFHRV9aRVJPX0JPT1RTVFJBUBABKlkKFUNoZWNrcG9pbnRDb21wcmVzc2lvbhIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX05PTkUQABIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX0daSVAQASqRAQocQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeRIzCi9DSEVDS1BPSU5UX1ZFUklGSUNBVElPTl9QT0xJQ1lfVkVSSUZZX0NBTk9OSUNBTBAAEjwKOENIRUNLUE9JTlRfVkVSSUZJQ0FUSU9OX1BPTElDWV9UUlVTVF9QUkVWSU9VU0xZX1ZFUklGSUVEEAEqgAEKE0NoZWNrcG9pbnRBc3N1cmFuY2USJAogQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVU5TUEVDSUZJRUQQABIgChxDSEVDS1BPSU5UX0FTU1VSQU5DRV9UUlVTVEVEEAESIQodQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVkVSSUZJRUQQAiqJAQoVS2VybmVsUmVzaWRlbmN5SW50ZW50EicKI0tFUk5FTF9SRVNJREVOQ1lfSU5URU5UX1VOU1BFQ0lGSUVEEAASIAocS0VSTkVMX1JFU0lERU5DWV9JTlRFTlRfV0FSTRABEiUKIUtFUk5FTF9SRVNJREVOQ1lfSU5URU5UX09OX0RFTUFORBACKq4BChZDdXN0b2R5UmV0ZW50aW9uSW50ZW50EigKJENVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9VTlNQRUNJRklFRBAAEiMKH0NVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9SRVRBSU4QARIiCh5DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfQ0FDSEUQAhIhCh1DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfTk9ORRADKqgBChpJbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudBIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1VOU1BFQ0lGSUVEEAASLgoqSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9TRUFMRURfQ0hBTkdFEAESLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9DT01NSVRfVFJFRRACKokBChVMaWZlY3ljbGVJbnN0YWxsUGhhc2USJwojTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfVU5TUEVDSUZJRUQQABIiCh5MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9BQ1RJVkUQARIjCh9MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9QRU5ESU5HEAIyWQoSTm9tb3NLZXJuZWxTZXJ2aWNlEkMKBENhbGwSHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3QaHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlYgZwcm90bzM", [file_google_protobuf_any]);\n var CallRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 0);\n var CallResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 1);\n var KernelConfigurationRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 180);\n var CustodyRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 182);\n var LawClosureInfoRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 209);\n var PrepareLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 280);\n var PrepareLawProductsResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 281);\n var KernelLawCapabilitySchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 22);\n var KernelLawCapability = /* @__PURE__ */ tsEnum(KernelLawCapabilitySchema);\n\n // ../../adapter/kernel_call_desk.ts\n var PROTOCOL_VERSION = 1;\n var generatedRequestSequence = 0;\n var unpackResponse = (packed) => {\n const value = BigInt.asUintN(\n 64,\n typeof packed === "bigint" ? packed : BigInt(packed)\n );\n return {\n pointer: Number(value >> 32n & 0xffffffffn),\n length: Number(value & 0xffffffffn)\n };\n };\n var invoke = (machine, request) => {\n if (request.protocolVersion !== PROTOCOL_VERSION) {\n throw new Error(\n `kernel protobuf ABI ${request.protocolVersion}; expected ${PROTOCOL_VERSION}`\n );\n }\n if (!request.requestId) throw new Error("kernel protobuf request id is required");\n if (!request.operation.case) {\n throw new Error(`kernel call \'${request.requestId}\' carries no operation`);\n }\n const nested = request.operation.value;\n if (nested && typeof nested === "object" && "operation" in nested && !nested.operation?.case) {\n throw new Error(\n `kernel call \'${request.requestId}\' carries a ${request.operation.case} request with no operation`\n );\n }\n const bytes = toBinary(CallRequestSchema, request);\n const requestPointer = machine.ex.git_holon_alloc(bytes.length) >>> 0;\n try {\n new Uint8Array(\n machine.ex.memory.buffer,\n requestPointer,\n bytes.length\n ).set(bytes);\n let packed;\n try {\n packed = machine.ex.git_holon_call_proto(requestPointer, bytes.length);\n } catch (error) {\n const diagnostics = machine.STDERR.length ? `guest-diagnostics=${machine.STDERR.slice(-8).join(" / ")}: ` : "";\n throw new Error(`${diagnostics}${String(error?.stack || error)}`);\n }\n const { pointer, length } = unpackResponse(packed);\n try {\n const response = fromBinary(\n CallResponseSchema,\n new Uint8Array(machine.ex.memory.buffer, pointer, length).slice()\n );\n if (response.protocolVersion !== PROTOCOL_VERSION) {\n throw new Error(\n `kernel protobuf ABI ${response.protocolVersion}; expected ${PROTOCOL_VERSION}`\n );\n }\n if (response.requestId !== request.requestId) {\n const failure = response.outcome.case === "failure" ? `; kernel failure ${response.outcome.value.code}: ${response.outcome.value.message}` : "";\n throw new Error(\n `kernel protobuf response id ${response.requestId || "<empty>"}; expected ${request.requestId}${failure}`\n );\n }\n return response;\n } finally {\n machine.ex.git_holon_dealloc(pointer, length);\n }\n } finally {\n machine.ex.git_holon_dealloc(requestPointer, bytes.length);\n }\n };\n var callKernelOperation = (machine, operation) => invoke(machine, create(CallRequestSchema, {\n protocolVersion: PROTOCOL_VERSION,\n requestId: `adapter-${++generatedRequestSequence}`,\n operation\n }));\n\n // ../../adapter/certification_seal.ts\n init_shims();\n function certificationSealImports(memory, host) {\n const view = (pointer, length, maximum) => {\n const buffer = memory()?.buffer;\n const start = pointer >>> 0, size = length >>> 0;\n if (!buffer || size === 0 || size > maximum || start + size > buffer.byteLength) return;\n return new Uint8Array(buffer, start, size);\n };\n return {\n certified_state_seal(pointer, length, output, capacity) {\n if (!host) return -1;\n const payload = view(pointer, length, 8192), target = view(output, capacity, 128);\n if (!payload || !target) return -1;\n try {\n const tag = host.seal(payload);\n if (!tag || tag.length === 0 || tag.length > target.length) return -1;\n target.set(tag);\n return tag.length;\n } catch {\n return -1;\n }\n },\n certified_state_verify(pointer, length, tagPointer, tagLength) {\n if (!host) return -1;\n const payload = view(pointer, length, 8192), tag = view(tagPointer, tagLength, 128);\n if (!payload || !tag) return 0;\n try {\n const valid = host.verify(payload, tag);\n return valid === void 0 ? -1 : valid ? 1 : 0;\n } catch {\n return -1;\n }\n }\n };\n }\n\n // ../../adapter/kernel_machine_desk.ts\n var writeBootLaw = (files2, path, bytes) => {\n if (files2.fileExists(path)) {\n const held = files2.readFile(path);\n if (held.byteLength === bytes.byteLength && held.every((byte, index) => byte === bytes[index])) return;\n }\n files2.writeFile(path, bytes);\n };\n var assertUsdz = (name, bytes) => {\n if (bytes.byteLength < 4 || bytes[0] !== 80 || bytes[1] !== 75 || bytes[2] !== 3 || bytes[3] !== 4)\n throw new Error(`${name} must be opaque USDZ bytes`);\n };\n var unsignedWasiPointers = (imports) => {\n const pointerArguments = {\n args_sizes_get: [0, 1],\n args_get: [0, 1],\n environ_sizes_get: [0, 1],\n environ_get: [0, 1],\n clock_res_get: [1],\n clock_time_get: [2],\n fd_fdstat_get: [1],\n fd_filestat_get: [1],\n fd_pread: [1, 4],\n fd_prestat_get: [1],\n fd_prestat_dir_name: [1],\n fd_pwrite: [1, 4],\n fd_read: [1, 3],\n fd_readdir: [1, 4],\n fd_seek: [3],\n fd_tell: [1],\n fd_write: [1, 3],\n path_create_directory: [1],\n path_filestat_get: [2, 4],\n path_filestat_set_times: [2],\n path_link: [2, 5],\n path_open: [2, 8],\n path_readlink: [1, 3, 5],\n path_remove_directory: [1],\n path_rename: [1, 4],\n path_symlink: [0, 3],\n path_unlink_file: [1],\n poll_oneoff: [0, 1],\n random_get: [0]\n };\n for (const [name, indexes] of Object.entries(pointerArguments)) {\n const original = imports[name];\n if (original === void 0) continue;\n imports[name] = (...args) => {\n for (const index of indexes) args[index] = args[index] >>> 0;\n return original(...args);\n };\n }\n return imports;\n };\n var verifyLawClosure = (machine, closureFile, capability) => {\n const response = callKernelOperation(machine, {\n case: "custody",\n value: create(CustodyRequestSchema, {\n operation: {\n case: "lawClosureInfo",\n value: create(LawClosureInfoRequestSchema, { closureFile, capability })\n }\n })\n });\n if (response.outcome.case !== "custody" || response.outcome.value.operation.case !== "lawClosureInfo" || !response.outcome.value.operation.value.identity)\n throw new Error(`kernel refused USDA closure ${closureFile}`);\n };\n async function createKernelMachine(source2, filesystem2 = memoryCustodyFilesystem(), onFilesystemMutation) {\n const makeHost = browserWasiHost(filesystem2, onFilesystemMutation);\n const machine = await createKernelMachineWithHost(source2, makeHost);\n return {\n ...machine,\n preopen: filesystem2.preopen,\n // The same custody files and the same mutation observer: whatever the disposable instance\n // writes (the host\'s law caches) is persisted exactly as if the long-lived instance wrote it.\n spawnDisposable: () => disposableKernelMachine(source2, makeHost)\n };\n }\n var browserWasiHost = (filesystem2, onFilesystemMutation) => (pushStderr) => {\n const wasi = new WASI(\n ["wasm_git_holon", "reactor"],\n [],\n [\n new OpenFile(new File([])),\n ConsoleStdout.lineBuffered(() => {\n }),\n ConsoleStdout.lineBuffered(pushStderr),\n filesystem2.preopen\n ],\n { debug: false }\n );\n if (onFilesystemMutation) {\n const imports = wasi.wasiImport;\n for (const name of [\n "fd_write",\n "fd_pwrite",\n "fd_allocate",\n "fd_filestat_set_size",\n "path_open",\n "path_create_directory",\n "path_unlink_file",\n "path_remove_directory",\n "path_rename",\n "path_link",\n "path_symlink"\n ]) {\n const original = imports[name];\n if (!original) continue;\n imports[name] = (...args) => {\n const result2 = original(...args);\n if (result2 === 0 && !(name === "fd_write" && Number(args[0]) < 3) && !(name === "path_open" && (Number(args[4]) & 9) === 0)) {\n const fd = name === "path_open" ? new DataView(wasi.inst.exports.memory.buffer).getUint32(Number(args[8]) >>> 0, true) : Number(args[0]);\n const opened = wasi.fds[fd];\n onFilesystemMutation(opened instanceof OpenFile ? opened.file : void 0);\n }\n return result2;\n };\n }\n }\n return {\n filesystem: filesystem2,\n imports: unsignedWasiPointers(\n wasi.wasiImport\n ),\n start: (instance) => wasi.start(instance),\n dispose() {\n }\n };\n };\n function disposableKernelMachine(source2, makeHost) {\n const boot2 = bootKernelMachine(source2, makeHost);\n let instance;\n try {\n const { Instance } = WebAssembly;\n instance = new Instance(source2.wasmModule, boot2.imports);\n } catch (error) {\n boot2.dispose();\n throw error;\n }\n const machine = boot2.start(instance);\n const dispose = machine.dispose;\n return {\n ...machine,\n dispose() {\n try {\n source2.observeStderr?.(`[nomos-kernel-perf] ${JSON.stringify({\n op: "disposable_kernel_released",\n totalUs: 0,\n notes: { memoryBytes: machine.ex.memory.buffer.byteLength }\n })}`);\n } catch {\n }\n dispose();\n }\n };\n }\n async function createKernelMachineWithHost(source2, makeHost) {\n const boot2 = bootKernelMachine(source2, makeHost);\n let instance;\n try {\n instance = await WebAssembly.instantiate(source2.wasmModule, boot2.imports);\n } catch (error) {\n boot2.dispose();\n throw error;\n }\n return boot2.start(instance);\n }\n function bootKernelMachine(source2, makeHost) {\n assertUsdz("bootstrapLawUsdz", source2.bootstrapLawUsdz);\n assertUsdz("nomosLawUsdz", source2.nomosLawUsdz);\n const stderr = [];\n let observationClock;\n const pushStderr = (line) => {\n if (stderr.length >= 500) stderr.splice(0, stderr.length - 499);\n stderr.push(line);\n source2.observeStderr?.(line);\n };\n const host = makeHost(pushStderr);\n let disposed = false;\n const dispose = () => {\n if (!disposed) {\n disposed = true;\n host.dispose();\n }\n };\n try {\n writeBootLaw(host.filesystem.files, "/work/bootstrap.law.usdz", source2.bootstrapLawUsdz);\n writeBootLaw(host.filesystem.files, "/work/nomos.law.usdz", source2.nomosLawUsdz);\n try {\n host.filesystem.files.mkdir("/work/ws");\n } catch (error) {\n if (error?.code !== "EEXIST") throw error;\n }\n } catch (error) {\n dispose();\n throw error;\n }\n let kernelMemory;\n const imports = {\n wasi_snapshot_preview1: host.imports,\n nomos_peer_office: {\n ...certificationSealImports(() => kernelMemory, source2.certificationSeal),\n clock_unix_millis: () => {\n if (!observationClock)\n throw new Error(\n "peer office has not bound the platform observation clock"\n );\n return observationClock.unixNanoseconds() / 1000000n;\n },\n clock_monotonic_nanoseconds: () => {\n if (!observationClock)\n throw new Error(\n "peer office has not bound the platform observation clock"\n );\n return observationClock.monotonicNanoseconds();\n }\n }\n };\n const start = (instance) => {\n try {\n kernelMemory = instance.exports.memory;\n const exitCode = host.start(instance);\n if (exitCode !== 0)\n throw new Error(\n `kernel reactor exited ${exitCode}; stderr=${stderr.join("\\n")}`\n );\n const exports = instance.exports;\n for (const name of [\n "memory",\n "git_holon_alloc",\n "git_holon_dealloc",\n "git_holon_call_proto"\n ]) {\n if (exports[name] === void 0)\n throw new Error(`kernel is missing export ${name}`);\n }\n const machine = {\n ex: Object.fromEntries(\n Object.entries(exports).map(([name, value]) => [\n name,\n typeof value !== "function" ? value : (...args) => {\n if (disposed)\n throw new Error("kernel machine has been disposed");\n return value(...args);\n }\n ])\n ),\n STDERR: stderr,\n replica: source2.replica,\n ...host.filesystem,\n dispose,\n bindObservationClock(clock) {\n observationClock = clock;\n }\n };\n if (source2.trustRootPublicKey !== void 0) {\n if (source2.trustRootPublicKey.byteLength !== 32) {\n throw new Error("trustRootPublicKey must contain exactly 32 bytes");\n }\n const configured = callKernelOperation(machine, {\n case: "configure",\n value: create(KernelConfigurationRequestSchema, {\n trustRootPublicKey: source2.trustRootPublicKey\n })\n });\n if (configured.outcome.case !== "configure") {\n throw new Error("kernel refused its boot trust root configuration");\n }\n }\n verifyLawClosure(\n machine,\n "/work/bootstrap.law.usdz",\n KernelLawCapability.STAGE_ZERO_BOOTSTRAP\n );\n verifyLawClosure(\n machine,\n "/work/nomos.law.usdz",\n KernelLawCapability.UNSPECIFIED\n );\n return machine;\n } catch (error) {\n dispose();\n throw error;\n }\n };\n return { imports, start, dispose };\n }\n\n // ../../platform-shells/browser/law_preparation_worker.ts\n var filesystem = memoryCustodyFilesystem();\n var source;\n var files = [];\n var result;\n var incoming;\n var productsRoot = "/work/.nomos-kernel/prepared-law/";\n function parent(path) {\n const parts = path.split("/");\n for (let i = 3; i < parts.length; i++) {\n try {\n filesystem.files.mkdir(parts.slice(0, i).join("/"));\n } catch (error) {\n if (error.code !== "EEXIST") throw error;\n }\n }\n }\n self.onmessage = async ({ data }) => {\n try {\n switch (data.kind) {\n case "init":\n source = data.source;\n break;\n case "file": {\n if (!Number.isSafeInteger(data.size) || data.size < 0) throw new Error("invalid file size");\n if (data.offset === 0) incoming = { path: data.path, bytes: new Uint8Array(data.size), offset: 0 };\n if (!incoming || incoming.path !== data.path || incoming.offset !== data.offset || data.size !== incoming.bytes.length || data.bytes.length > data.size - data.offset)\n throw new Error("invalid preparation file chunk");\n incoming.bytes.set(data.bytes, data.offset);\n incoming.offset += data.bytes.length;\n if (incoming.offset === incoming.bytes.length) {\n parent(data.path);\n if (/\\/nomos\\.git\\/HEAD$/.test(data.path)) {\n parent(data.path.slice(0, -4) + "refs/.directory");\n parent(data.path.slice(0, -4) + "objects/.directory");\n }\n filesystem.files.writeFile(data.path, incoming.bytes);\n incoming = void 0;\n }\n break;\n }\n case "run": {\n if (incoming) throw new Error("preparation custody file is incomplete");\n const machine = await createKernelMachine(source, filesystem);\n try {\n const answer = callKernelOperation(machine, { case: "custody", value: create(CustodyRequestSchema, {\n operation: { case: "prepareLawProducts", value: fromBinary(PrepareLawProductsRequestSchema, data.request) }\n }) });\n if (answer.outcome.case !== "custody" || answer.outcome.value.operation.case !== "prepareLawProducts")\n throw new Error(answer.outcome.case === "failure" ? answer.outcome.value.message : "no preparation result");\n result = toBinary(PrepareLawProductsResponseSchema, answer.outcome.value.operation.value);\n files = filesystem.files.listFiles(productsRoot.slice(0, -1)).filter((path) => !path.includes("/jobs/") && !path.endsWith(".staging"));\n } finally {\n machine.dispose();\n }\n self.postMessage({ result, files: files.map((path) => ({ path, size: filesystem.files.fileSize(path) })) });\n return;\n }\n case "read": {\n if (!files.includes(data.path)) throw new Error("preparation exports verified product files only");\n const bytes = filesystem.files.readFileRange(data.path, data.offset, data.length);\n self.postMessage({ bytes }, { transfer: [bytes.buffer] });\n return;\n }\n default:\n throw new Error("unknown preparation carriage operation");\n }\n self.postMessage({ ok: true });\n } catch (error) {\n self.postMessage({ error: String(error) });\n }\n };\n})();\n'], { type: "text/javascript" }));
3168
+ try {
3169
+ return new Worker(url);
3170
+ } finally {
3171
+ URL.revokeObjectURL(url);
3172
+ }
3173
+ }) {
3174
+ this.source = source;
3175
+ this.storage = storage;
3176
+ this.workerFactory = workerFactory;
3177
+ __privateAdd(this, _BrowserLawPreparation_instances);
3178
+ __privateAdd(this, _running, /* @__PURE__ */ new Map());
3179
+ __privateAdd(this, _tail, Promise.resolve());
3180
+ __privateAdd(this, _closed, false);
3181
+ __privateAdd(this, _worker);
3182
+ __privateAdd(this, _cancel);
3183
+ }
3184
+ async prepare(request) {
3185
+ if (__privateGet(this, _closed)) throw new Error("preparation queue closed");
3186
+ request = request.slice();
3187
+ const key = [...new Uint8Array(await crypto.subtle.digest("SHA-256", request))].map((byte) => byte.toString(16).padStart(2, "0")).join("");
3188
+ if (__privateGet(this, _running).has(key)) return __privateGet(this, _running).get(key);
3189
+ const record = this.storage.list(namespace).find((record2) => record2.key === key) ?? this.storage.compareExchange(namespace, key, void 0, request);
3190
+ const work = __privateGet(this, _tail).catch(() => {
3191
+ }).then(async () => {
3192
+ if (__privateGet(this, _closed)) throw new Error("preparation queue closed");
3193
+ await this.storage.checkpoint();
3194
+ const response = await __privateMethod(this, _BrowserLawPreparation_instances, run_fn).call(this, record.value);
3195
+ await this.storage.checkpoint();
3196
+ this.storage.compareExchange(namespace, key, record.revision, void 0);
3197
+ await this.storage.checkpoint();
3198
+ return response;
3199
+ });
3200
+ __privateSet(this, _tail, work);
3201
+ __privateGet(this, _running).set(key, work);
3202
+ void work.finally(() => __privateGet(this, _running).delete(key)).catch(() => {
3203
+ });
3204
+ return work;
3205
+ }
3206
+ async resume() {
3207
+ for (const record of this.storage.list(namespace)) {
3208
+ if (__privateGet(this, _closed)) return;
3209
+ await this.prepare(record.value).catch(() => {
3210
+ });
3211
+ }
3212
+ }
3213
+ close() {
3214
+ var _a;
3215
+ __privateSet(this, _closed, true);
3216
+ (_a = __privateGet(this, _cancel)) == null ? void 0 : _a.call(this, new Error("preparation queue closed"));
3217
+ __privateGet(this, _worker)?.terminate();
3218
+ }
3219
+ };
3220
+ _running = new WeakMap();
3221
+ _tail = new WeakMap();
3222
+ _closed = new WeakMap();
3223
+ _worker = new WeakMap();
3224
+ _cancel = new WeakMap();
3225
+ _BrowserLawPreparation_instances = new WeakSet();
3226
+ run_fn = async function(request) {
3227
+ const worker = __privateSet(this, _worker, this.workerFactory());
3228
+ const exchange = (message) => new Promise((resolve, reject) => {
3229
+ __privateSet(this, _cancel, reject);
3230
+ worker.onmessage = ({ data }) => data.error ? reject(new Error(data.error)) : resolve(data);
3231
+ worker.onerror = (event) => reject(new Error(event.message));
3232
+ worker.onmessageerror = () => reject(new Error("preparation worker carriage failed"));
3233
+ worker.postMessage(message);
3234
+ });
3235
+ const files = this.storage.filesystem.files;
3236
+ try {
3237
+ const { observeStderr: _, certificationSeal: __, ...source } = this.source;
3238
+ await exchange({ kind: "init", source });
3239
+ const paths = files.listFiles("/work").filter(inputFile).sort((a, b) => Number(a.includes("/objects/")) - Number(b.includes("/objects/")));
3240
+ for (const path of paths) {
3241
+ const size = files.fileSize(path);
3242
+ for (let offset = 0; offset < size || offset === 0; offset += chunkBytes) {
3243
+ if (__privateGet(this, _closed)) throw new Error("preparation queue closed");
3244
+ const bytes = files.readFileRange(path, offset, chunkBytes);
3245
+ await exchange({ kind: "file", path, offset, size, bytes });
3246
+ }
3247
+ }
3248
+ const output = await exchange({ kind: "run", request });
3249
+ for (const { path, size } of output.files) {
3250
+ if (!/^\/work\/\.nomos-kernel\/prepared-law\/[a-f0-9]{64}\/(?:[a-f0-9]{64}|(?:ready|products)\/[a-f0-9]{64})$/.test(path))
3251
+ throw new Error("preparation worker exported a non-product path");
3252
+ const bytes = new Uint8Array(size);
3253
+ for (let offset = 0; offset < size; offset += chunkBytes) {
3254
+ const part = await exchange({ kind: "read", path, offset, length: chunkBytes });
3255
+ bytes.set(part.bytes, offset);
3256
+ }
3257
+ const parts = path.split("/");
3258
+ for (let i = 3; i < parts.length; i++) {
3259
+ try {
3260
+ files.mkdir(parts.slice(0, i).join("/"));
3261
+ } catch (error) {
3262
+ if (error.code !== "EEXIST") throw error;
3263
+ }
3264
+ }
3265
+ files.writeFile(path, bytes);
3266
+ await pause();
3267
+ }
3268
+ this.storage.changed();
3269
+ return output.result;
3270
+ } finally {
3271
+ __privateSet(this, _cancel, void 0);
3272
+ worker.terminate();
3273
+ __privateSet(this, _worker, void 0);
3274
+ }
3275
+ };
3276
+
3156
3277
  // ../../platform-shells/browser/kernel_custody.ts
3157
3278
  init_define_NOMOS_KERNEL_RELEASE();
3158
3279
  init_shims();
@@ -7865,7 +7986,7 @@
7865
7986
  // ../../adapter/proto/nomos/kernel/v1/kernel_pb.js
7866
7987
  init_define_NOMOS_KERNEL_RELEASE();
7867
7988
  init_shims();
7868
- var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEixgkKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEkAKCWNvbmZpZ3VyZRgQIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdEgAEkgKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYESABKAsyKS5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0SAASSgoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVxdWVzdEgAEk4KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YEyABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXF1ZXN0SAASTgoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgUIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3RIABJDChBzaWduaW5nX2lkZW50aXR5GBcgASgLMicubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdJZGVudGl0eVJlcXVlc3RIABJWChpzaWduX2F1dGhvcml0eV9hdHRlc3RhdGlvbhgYIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0SAASPAoNbWludF90eXBlZF9pZBgZIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlcXVlc3RIABJJChNlbmNyeXB0aW9uX2lkZW50aXR5GBogASgLMioubm9tb3Mua2VybmVsLnYxLkVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3RIABI+Cg53cmFwX3Njb3BlX2tleRgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5XcmFwU2NvcGVLZXlSZXF1ZXN0SAASQgoQdW53cmFwX3Njb3BlX2tleRgcIAEoCzImLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlcXVlc3RIAEILCglvcGVyYXRpb25KBAgVEBZKBAgWEBdSFGluaXRpYWxpemVfd29ya3NwYWNlUhZhcHBseV93b3Jrc3BhY2VfZWZmZWN0IoMKCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASQQoJY29uZmlndXJlGBEgASgLMiwubm9tb3Mua2VybmVsLnYxLktlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZUgAEkkKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZUgAEksKFHByZXBhcmVfcmVtb3RlX29mZmVyGBMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlSAASTwoWc2lnbl9vZmZlcl9wcmVwYXJhdGlvbhgUIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlSAASTwoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgVIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlSAASRAoQc2lnbmluZ19pZGVudGl0eRgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nSWRlbnRpdHlSZXNwb25zZUgAElcKGnNpZ25fYXV0aG9yaXR5X2F0dGVzdGF0aW9uGBkgASgLMjEubm9tb3Mua2VybmVsLnYxLlNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlSAASPQoNbWludF90eXBlZF9pZBgaIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlc3BvbnNlSAASSgoTZW5jcnlwdGlvbl9pZGVudGl0eRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5FbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZUgAEj8KDndyYXBfc2NvcGVfa2V5GBwgASgLMiUubm9tb3Mua2VybmVsLnYxLldyYXBTY29wZUtleVJlc3BvbnNlSAASQwoQdW53cmFwX3Njb3BlX2tleRgdIAEoCzInLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlc3BvbnNlSABCCQoHb3V0Y29tZUoECBYQF0oECBcQGFIUaW5pdGlhbGl6ZV93b3Jrc3BhY2VSFmFwcGx5X3dvcmtzcGFjZV9lZmZlY3QitwIKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSYQoiaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZBgKIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkSACIAQESPwoQaGlzdG9yeV9yZXF1aXJlZBgLIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5UmVxdWlyZWRIAYgBAUIlCiNfaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZEITChFfaGlzdG9yeV9yZXF1aXJlZCJRCh9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSFAoMcmVxdWlyZWRfa2lkGAIgASgJIjwKDE9wZW5SZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiugQKDU9mZmVyUmVzcG9uc2USMgoIYWRtaXR0ZWQYASABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZG1pdHRlZEgAEjAKB3JlZnVzZWQYAiABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZWZ1c2VkSAASOwoNZGVhZF9sZXR0ZXJlZBgDIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckRlYWRMZXR0ZXJlZEgAEjgKC3F1YXJhbnRpbmVkGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLk9mZmVyUXVhcmFudGluZWRIABJKChVibG9ja2VkX29uX2RlcGVuZGVuY3kYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuT2ZmZXJCbG9ja2VkT25EZXBlbmRlbmN5SAASMgoIcHJlcGFyZWQYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJlZEgAEkIKEHdvcmtzcGFjZV9lZmZlY3QYByABKAsyKC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SWRlbnRpdHkSGwoOanVkZ2VkX2F0X2hlYWQYCCABKAlIAYgBARJNChJqdWRnbWVudF9zaWduYXR1cmUYCSABKAsyMS5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmVCCQoHb3V0Y29tZUIRCg9fanVkZ2VkX2F0X2hlYWQifwogV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmUSDwoHdmVyc2lvbhgBIAEoDRISCgpwdWJsaWNfa2V5GAIgASgMEhEKCWtleV9lcG9jaBgDIAEoEhIRCglzaWduYXR1cmUYBCABKAwSEAoIanVkZ21lbnQYBSABKAwiqAEKF1dvcmtzcGFjZUVmZmVjdElkZW50aXR5EhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAIgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAyABKAkSIAoYdGFyZ2V0X3dvcmtzcGFjZV9nZW5lc2lzGAQgASgJEhUKDWVmZmVjdF9kaWdlc3QYBSABKAkiVwocV29ya3NwYWNlRWZmZWN0U3RhdHVzUmVxdWVzdBIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYASABKAkSFQoNZWZmZWN0X2RpZ2VzdBgCIAEoCSJRCh1Xb3Jrc3BhY2VFZmZlY3RTdGF0dXNSZXNwb25zZRIwCghqdWRnbWVudBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlIoYCCiNSZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdBIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEhUKC21haWxib3hfdXJsGAMgASgJSAASPQoRcmVjaXBpZW50X2N1c3RvZHkYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0SAASMAoIanVkZ21lbnQYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUIKCghldmlkZW5jZSJaCh5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWUSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCRIYChB0ZXJtaW5hbF9yZWZ1c2FsGAMgASgIIq4FCg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCBIfChJpbnN0YWxsZWRfbGF3X2hhc2gYCiABKAlIAogBARI5CglwbGFjZW1lbnQYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuUGxhY2VtZW50QWRvcHRlZEgDiAEBEhcKD2FscmVhZHlfYXBwbGllZBgMIAEoCBI8CgxzdGF0ZV9jaGFuZ2UYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuT2ZmZXJTdGF0ZUNoYW5nZUgEiAEBEkAKFGxhd192ZXJzaW9uX3dhcm5pbmdzGA4gAygLMiIubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25XYXJuaW5nQg0KC19pbnRlbnRfb3V0Qg8KDV9rZXJuZWxfc3BhbnNCFQoTX2luc3RhbGxlZF9sYXdfaGFzaEIMCgpfcGxhY2VtZW50Qg8KDV9zdGF0ZV9jaGFuZ2UiIwoLTGF3SWRlbnRpdHkSFAoMcGFja2FnZV9uYW1lGAEgASgJIiQKCkxhd1ZlcnNpb24SFgoOY2xvc3VyZV9zaGEyNTYYASABKAkiIQoPTGF3VmVyc2lvbkNsYWltEg4KBnNlbXZlchgBIAEoCSLgAgoRTGF3VmVyc2lvbldhcm5pbmcSKQoDbGF3GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLkxhd0lkZW50aXR5Ei8KBW9yZGVyGAIgASgOMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25PcmRlchI5Cg9pbnN0YWxsZWRfY2xhaW0YAyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGF3VmVyc2lvbkNsYWltEjYKEWluc3RhbGxlZF92ZXJzaW9uGAQgASgLMhsubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb24SNgoMc2VydmVkX2NsYWltGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25DbGFpbRIzCg5zZXJ2ZWRfdmVyc2lvbhgGIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5MYXdWZXJzaW9uEg8KB21lc3NhZ2UYByABKAkiUgoQT2ZmZXJTdGF0ZUNoYW5nZRITCgtwYXJlbnRfaGVhZBgBIAEoCRIXCg9hZ2dyZWdhdGVfdHlwZXMYAiADKAkSEAoIYXJjaGl2ZXMYAyABKAgiLQoRT2ZmZXJBZ2dyZWdhdGVSZWYSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSIwCg1Cb3JuV29ya3NwYWNlEhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRoZWFkGAIgASgJIssDCgxCaXJ0aE91dGNvbWUSFgoJd29ya3NwYWNlGAEgASgJSACIAQESMwoGc3RhdHVzGAIgASgOMiMubm9tb3Mua2VybmVsLnYxLkJpcnRoT3V0Y29tZVN0YXR1cxITCgZyZWFzb24YAyABKAlIAYgBARIRCgRjb2RlGAQgASgJSAKIAQESEAoIcmVwbGF5ZWQYBSABKAgSFQoIbGF3X2hhc2gYBiABKAlIA4gBARIdChBwYXJlbnRfd29ya3NwYWNlGAcgASgJSASIAQESHAoPY2hpbGRfd29ya3NwYWNlGAggASgJSAWIAQESJwoaY2VydGlmaWNhdGVfcmVmdXNhbF9yZWFzb24YCSABKAlIBogBARI0CgdyZWZ1c2FsGAogASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIMCgpfd29ya3NwYWNlQgkKB19yZWFzb25CBwoFX2NvZGVCCwoJX2xhd19oYXNoQhMKEV9wYXJlbnRfd29ya3NwYWNlQhIKEF9jaGlsZF93b3Jrc3BhY2VCHQobX2NlcnRpZmljYXRlX3JlZnVzYWxfcmVhc29uQgoKCF9yZWZ1c2FsIi8KEEtlcm5lbFNwYW5NZXRyaWMSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoBCKjAQoKS2VybmVsU3BhbhINCgVsYWJlbBgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBBIPCgdyZWNvcmRzGAMgASgEEjEKBnBoYXNlcxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljEjAKBW5vdGVzGAUgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMicQoLS2VybmVsU3BhbnMSLwoKb3BlcmF0aW9ucxgBIAMoCzIbLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuEjEKBmVuZ2luZRgCIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljImEKDURvbWFpblJlZnVzYWwSEgoKbGF3X3NoYTI1NhgBIAEoDBIRCglpbnZhcmlhbnQYAiABKAkSFQoNdHlwZV9pZGVudGl0eRgDIAEoCRISCgp2YWx1ZV91c2RhGAQgASgMIs4BCgxPZmZlclJlZnVzZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIvCgdyZWZ1c2FsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWwSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSNgoOZG9tYWluX3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluUmVmdXNhbEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIsABChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSPQoSYXdhaXRzX21haW50ZW5hbmNlGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleFBlbmRpbmdCCwoJX29mZmVyX2lkIr8BCg1PZmZlclByZXBhcmVkEhwKFGF1dGhvcmVkX2NoYW5nZV91c2RhGAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSIQoZYXV0aG9yX3NpZ25hdHVyZV9yZXF1aXJlZBgEIAEoCBI4CghkZXRhY2hlZBgFIAEoCzImLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25pbmdJbnB1dHMiYwoVRGV0YWNoZWRTaWduaW5nSW5wdXRzEhIKCnB1YmxpY19rZXkYASABKAwSEQoJaW50ZW50X2lkGAIgASgJEg4KBmF1dGhvchgDIAEoDBITCgtvZmZlcl90b2tlbhgEIAEoCSKVAQoURGV0YWNoZWRTaWduZWRDaGFuZ2USHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSEgoKcHVibGljX2tleRgCIAEoDBIYChBhdXRob3Jfc2lnbmF0dXJlGAMgASgMEhIKCm9mZmVyX2Jhc2UYBCABKAkSHQoVb2ZmZXJfdG9rZW5fc2lnbmF0dXJlGAUgASgMImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIq0BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDBIdChVyZXF1aXJlZF9jdXN0b2R5X2hlYWQYBiABKAkiUAoZT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZRIZChF3b3Jrc3BhY2VfYmluZGluZxgBIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAIgASgJIpkBChpQcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZRI/CgljaGFsbGVuZ2UYASABKAsyKi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZUgAEi8KBW9mZmVyGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEIJCgdvdXRjb21lIoABChtTaWduT2ZmZXJQcmVwYXJhdGlvblJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwiRQocU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZRISCgpwdWJsaWNfa2V5GAEgASgMEhEKCXNpZ25hdHVyZRgCIAEoDCKkAQoWU2lnbmluZ0lkZW50aXR5UmVxdWVzdBI7CghnZW5lcmF0ZRgBIAEoCzInLm5vbW9zLmtlcm5lbC52MS5HZW5lcmF0ZVNpZ25pbmdLZXlQYWlySAASQAoNZGVyaXZlX3B1YmxpYxgCIAEoCzInLm5vbW9zLmtlcm5lbC52MS5EZXJpdmVTaWduaW5nUHVibGljS2V5SABCCwoJb3BlcmF0aW9uIhgKFkdlbmVyYXRlU2lnbmluZ0tleVBhaXIiKAoWRGVyaXZlU2lnbmluZ1B1YmxpY0tleRIOCgZzZWNyZXQYASABKAwilgEKF1NpZ25pbmdJZGVudGl0eVJlc3BvbnNlEjQKCWdlbmVyYXRlZBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nS2V5UGFpckgAEjsKDmRlcml2ZWRfcHVibGljGAIgASgLMiEubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdQdWJsaWNLZXlIAEIICgZyZXN1bHQiNAoOU2lnbmluZ0tleVBhaXISDgoGc2VjcmV0GAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiJgoQU2lnbmluZ1B1YmxpY0tleRISCgpwdWJsaWNfa2V5GAEgASgMIpwBCh9TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0EhUKDXNpZ25lcl9zZWNyZXQYASABKAwSGgoSYXNzZXJ0ZXJfd29ya3NwYWNlGAIgASgJEg4KBm9iamVjdBgDIAEoCRIQCghyZWxhdGlvbhgEIAEoCRIPCgdzdWJqZWN0GAUgASgJEhMKC2F0dGVzdGVkX2F0GAYgASgJIkkKIFNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlEhEKCXNpZ25hdHVyZRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkQKEk1pbnRUeXBlZElkUmVxdWVzdBIQCgh0eXBlX3RhZxgBIAEoCRIcChRjYXB0dXJlZF91bml4X21pbGxpcxgCIAEoBCIhChNNaW50VHlwZWRJZFJlc3BvbnNlEgoKAmlkGAEgASgJIhsKGUVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3QiRAoaRW5jcnlwdGlvbklkZW50aXR5UmVzcG9uc2USEgoKc2VjcmV0X2tleRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkYKE1dyYXBTY29wZUtleVJlcXVlc3QSHAoUcmVjaXBpZW50X3B1YmxpY19rZXkYASABKAwSEQoJc2NvcGVfa2V5GAIgASgMIkgKFFdyYXBTY29wZUtleVJlc3BvbnNlEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAEgASgMEhIKCmNpcGhlcnRleHQYAiABKAwiZwoVVW53cmFwU2NvcGVLZXlSZXF1ZXN0EhwKFHJlY2lwaWVudF9zZWNyZXRfa2V5GAEgASgMEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAIgASgMEhIKCmNpcGhlcnRleHQYAyABKAwiKwoWVW53cmFwU2NvcGVLZXlSZXNwb25zZRIRCglzY29wZV9rZXkYASABKAwikwEKDUtlcm5lbFJlZnVzYWwSMAoEY29kZRgBIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsQ29kZRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEAoIdGVybWluYWwYBCABKAgi/A8KDVF1ZXJ5UmVzcG9uc2USFQoLcmVzdWx0X3VzZGEYAiABKAxIABIsCgV2YWx1ZRgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEj4KDW9zZ2lfcmVzb3VyY2UYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuT3NnaVJlc291cmNlUmVzcG9uc2VIABJKChNmcm9udGllcl90cmFuc2l0aW9uGA0gASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAASSwoUb3duZWRfZGV2aWNlX3JlcXVlc3QYDiABKAsyKy5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UmVzcG9uc2VIABJPChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUmVzcG9uc2VIABIXCg1pbnRlZ2VyX3ZhbHVlGBAgASgSSAASUAoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgRIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVSZXNwb25zZUgAEkgKEGNoaWxkX3dvcmtzcGFjZXMYEiABKAsyLC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeVJlc3BvbnNlSAASWQoWYXV0aG9yaW5nX3JlcXVpcmVtZW50cxgTIAEoCzI3Lm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNSZXNwb25zZUgAEj4KDXdhcm1fcHJvZ3Jlc3MYFSABKAsyJS5ub21vcy5rZXJuZWwudjEuV2FybVByb2dyZXNzUmVzcG9uc2VIABJVChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGBYgASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2VIABJSChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgXIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2VIABIyChJhcHBsaWNhdGlvbl9yZXN1bHQYGCABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SAASSgoTbWFpbnRlbmFuY2VfcXVhbnR1bRgZIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5NYWludGVuYW5jZVF1YW50dW1SZXNwb25zZUgAEj8KEnJlYWRfaW5kZXhfcGVuZGluZxgaIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkSW5kZXhQZW5kaW5nSAASRwoSZnVsbF9oaXN0b3J5X2F1ZGl0GBsgASgLMikubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRSZXNwb25zZUgAElMKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgcIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2VIABJLChRvcGVuX2FwaV9kZXNjcmlwdGlvbhgdIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5PcGVuQXBpRGVzY3JpcHRpb25SZXNwb25zZUgAElcKGmluc3RhbGxlZF9sYXdfZGVjbGFyYXRpb25zGB4gASgLMjEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlSAASSwoYYXBwbGljYXRpb25fcmVzdWx0X2RlbHRhGB8gASgLMicubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uUmVzdWx0RGVsdGFIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIcCg9yZXN1bHRfZnJvbnRpZXIYICABKAlIAYgBARJCChJmdWxsX3Jlc3VsdF9yZWFzb24YISABKA4yIS5ub21vcy5rZXJuZWwudjEuRnVsbFJlc3VsdFJlYXNvbkgCiAEBEkMKE3Jlc3VsdF9kZXBlbmRlbmNpZXMYIiABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZERlcGVuZGVuY2llc0gDiAEBEkAKEXJlYWRfaW5kZXhfYmVoaW5kGCMgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleEJlaGluZEgEiAEBQggKBnJlc3VsdEISChBfcmVzdWx0X2Zyb250aWVyQhUKE19mdWxsX3Jlc3VsdF9yZWFzb25CFgoUX3Jlc3VsdF9kZXBlbmRlbmNpZXNCFAoSX3JlYWRfaW5kZXhfYmVoaW5kIoABCg9SZWFkSW5kZXhCZWhpbmQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIXCg9zZXJ2ZWRfZnJvbnRpZXIYAyABKAkSGgoScmVxdWVzdGVkX2Zyb250aWVyGAQgASgJEhUKDXN1Y2Nlc3Nvcl9sYXcYBSABKAgiVAoQUmVhZERlcGVuZGVuY2llcxIXCg9hZ2dyZWdhdGVfdHlwZXMYASADKAkSFgoOcmVhZHNfYXJjaGl2ZXMYAiABKAgSDwoHcmVhZF9hdBgDIAEoCSKCAQoWQXBwbGljYXRpb25SZXN1bHREZWx0YRIVCg1iYXNlX2Zyb250aWVyGAEgASgJEhAKCGZyb250aWVyGAIgASgJEioKDGNoYW5nZWRfcm93cxgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSEwoLcmVtb3ZlZF9pZHMYBCADKAkiMwoaT3BlbkFwaURlc2NyaXB0aW9uUmVzcG9uc2USFQoNZG9jdW1lbnRfanNvbhgBIAEoCSJxChtJbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYASABKAwSMQoPY2FuZGlkYXRlX3VuaXRzGAIgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXQisAIKFkludGVyZmFjZU1lbWJlclZlcmRpY3QSDgoGZG9tYWluGAEgASgJEjIKBGtpbmQYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlTWVtYmVyS2luZBIOCgZtZW1iZXIYAyABKAkSEgoFZmllbGQYBCABKAlIAIgBARI9CgZzdGF0dXMYBSABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVN0YXR1cxI9CgZyZWFzb24YBiABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVJlYXNvbhIXCgpkaWFnbm9zdGljGAcgASgJSAGIAQFCCAoGX2ZpZWxkQg0KC19kaWFnbm9zdGljIqIBCh5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2USEgoKY29tcGF0aWJsZRgBIAEoCBI4CgdtZW1iZXJzGAIgAygLMicubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZU1lbWJlclZlcmRpY3QSGgoSd29ya3NwYWNlX2Zyb250aWVyGAMgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAQgASgJIv8BChRXYXJtUHJvZ3Jlc3NSZXNwb25zZRIbChNtYWludGVuYW5jZV9wZW5kaW5nGAEgASgIEiQKF3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluGAIgASgJSACIAQESJQoYcHJlcGFyZWRfY29tbWFuZF9wYWNrYWdlGAMgASgJSAGIAQESJgoZcHJlcGFyZWRfY29tbWFuZF9zZWxlY3RvchgEIAEoCUgCiAEBQhoKGF9wcmVwYXJlZF9jb21tYW5kX2RvbWFpbkIbChlfcHJlcGFyZWRfY29tbWFuZF9wYWNrYWdlQhwKGl9wcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yImwKEFJlYWRJbmRleFBlbmRpbmcSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIaChJyZXF1ZXN0ZWRfZnJvbnRpZXIYAyABKAkSGQoRbGFzdF9yZWFkeV9hYnNlbnQYBCABKAki6AIKF01haW50ZW5hbmNlUXVhbnR1bVF1ZXJ5Eh0KEHJlcXVlc3RlZF9kb21haW4YASABKAlIAIgBARIeChFyZXF1ZXN0ZWRfcGFja2FnZRgCIAEoCUgBiAEBEiAKE3JlcXVlc3RlZF9kaXJlY3RpdmUYAyABKAlIAogBARIXCg9sb2NhbF9yZWFkX29ubHkYBCABKAgSHAoUbWFpbnRhaW5fZ2l0X2N1c3RvZHkYBSABKAgSFwoPcmVhZF9pbmRleF9vbmx5GAYgASgIEiQKHG1haW50YWluX2FkZHJlc3NlZF9mcm9udGllcnMYByABKAgSGAoQZmx1c2hfZHVyYWJpbGl0eRgIIAEoCBIZChFsb2NhbF93cml0ZV9idXJzdBgJIAEoCEITChFfcmVxdWVzdGVkX2RvbWFpbkIUChJfcmVxdWVzdGVkX3BhY2thZ2VCFgoUX3JlcXVlc3RlZF9kaXJlY3RpdmUiogQKGk1haW50ZW5hbmNlUXVhbnR1bVJlc3BvbnNlEhEKCXdvcmtzcGFjZRgBIAEoCRIbChNtYWludGVuYW5jZV9wZW5kaW5nGAIgASgIEjAKBXBoYXNlGAMgASgOMiEubm9tb3Mua2VybmVsLnYxLk1haW50ZW5hbmNlUGhhc2USGQoMZ2l0X2Zyb250aWVyGAQgASgJSACIAQESGgoNcmVhZF9mcm9udGllchgFIAEoCUgBiAEBEhwKD3NxbGl0ZV9mcm9udGllchgGIAEoCUgCiAEBEhIKCndvcmtfdW5pdHMYByABKAQSFgoOZWxhcHNlZF9taWNyb3MYCCABKAQSJAoXcHJlcGFyZWRfY29tbWFuZF9kb21haW4YCSABKAlIA4gBARIlChhwcmVwYXJlZF9jb21tYW5kX3BhY2thZ2UYCiABKAlIBIgBARImChlwcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yGAsgASgJSAWIAQESHgoWbG9vc2VfY3VzdG9keV9wcmVzc3VyZRgMIAEoCEIPCg1fZ2l0X2Zyb250aWVyQhAKDl9yZWFkX2Zyb250aWVyQhIKEF9zcWxpdGVfZnJvbnRpZXJCGgoYX3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluQhsKGV9wcmVwYXJlZF9jb21tYW5kX3BhY2thZ2VCHAoaX3ByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IiSAoNT3NnaUF0dHJpYnV0ZRIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJEhEKBHR5cGUYAyABKAlIAIgBAUIHCgVfdHlwZSIsCg1Pc2dpRGlyZWN0aXZlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkiiwEKDk9zZ2lDYXBhYmlsaXR5EhEKCW5hbWVzcGFjZRgBIAEoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lBdHRyaWJ1dGUSMgoKZGlyZWN0aXZlcxgDIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpRGlyZWN0aXZlIowBCg9Pc2dpUmVxdWlyZW1lbnQSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUimgEKFE9zZ2lSZXNvdXJjZVJlc3BvbnNlEhMKC3NvdXJjZV91c2RhGAEgASgMEjUKDGNhcGFiaWxpdGllcxgCIAMoCzIfLm5vbW9zLmtlcm5lbC52MS5Pc2dpQ2FwYWJpbGl0eRI2CgxyZXF1aXJlbWVudHMYAyADKAsyIC5ub21vcy5rZXJuZWwudjEuT3NnaVJlcXVpcmVtZW50IucBChNWZXJpZnlDaGFpblN0ZXBTcGFuEg0KBWluZGV4GAEgASgEEhIKCmNvbW1pdF9vaWQYAiABKAkSDgoGZG9tYWluGAMgASgJEhEKCWRpcmVjdGl2ZRgEIAEoCRIQCgh0b3RhbF91cxgFIAEoBBI2CgZwaGFzZXMYBiABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEkAKDmVuZ2luZV90aW1pbmdzGAcgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nIpgCChVWZXJpZnlDaGFpblN0ZXBQaGFzZXMSHgoWcnVudGltZV9sYXdfcmVmcmVzaF91cxgBIAEoBBITCgttYW5pZmVzdF91cxgCIAEoBBIZChFsYXdfcmVzb2x1dGlvbl91cxgDIAEoBBIdChVtYW5hZ2VkX3RyYW5zaXRpb25fdXMYBCABKAQSFAoMcHJpbmNpcGFsX3VzGAUgASgEEhQKDGV2b2x1dGlvbl91cxgGIAEoBBIaChJjb2xvY2F0ZWRfcmVhZHNfdXMYByABKAQSIQoZdHlwZWRfaW5zdGFsbF92ZXJpZmllcl91cxgIIAEoBBIUCgxhZG1pc3Npb25fdXMYCSABKAQSDwoHZm9sZF91cxgKIAEoBCLaBQoWVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIuCgR3YWxrGAEgASgOMiAubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluV2FsaxIQCgh0b3RhbF91cxgCIAEoBBIbChNyZWZlcmVuY2VfbG9va3VwX3VzGAMgASgEEhoKEnJlcG9zaXRvcnlfb3Blbl91cxgEIAEoBBIVCg1jaGFpbl9yZWFkX3VzGAUgASgEEhYKDmVuZ2luZV9pbml0X3VzGAYgASgEEhgKEHRpbWVsaW5lX3JlYWRfdXMYByABKAQSGAoQbGF3X2h5ZHJhdGlvbl91cxgIIAEoBBIbChNyZWNvdmVyeV9wcmVzY2FuX3VzGAkgASgEEhgKEGZvbGRfZnJvbnRpZXJfdXMYCiABKAQSMwoFc3RlcHMYCyADKAsyJC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwU3BhbhJACg5lbmdpbmVfdGltaW5ncxgMIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZxJNChVsYXdfaHlkcmF0aW9uX3RpbWluZ3MYDSADKAsyLi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSGQoRbGF3X2Nsb3N1cmVfY291bnQYDiABKAQSHgoWbGF3X2Nsb3N1cmVfY2FjaGVfaGl0cxgPIAEoBBIgChhsYXdfY2xvc3VyZV9jYWNoZV9taXNzZXMYECABKAQSEgoKc3RlcF9jb3VudBgRIAEoBBIVCg1zdGVwX3RvdGFsX3VzGBIgASgEEkEKEXN0ZXBfcGhhc2VfdG90YWxzGBMgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxIaChJvbWl0dGVkX3N0ZXBfY291bnQYFCABKAQiOgoXVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiQAodVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiqwEKFEh0dHBzRXhlY3V0aW9uUG9saWN5EjwKCXBsYWNlbWVudBgBIAEoDjIpLm5vbW9zLmtlcm5lbC52MS5FZmZlY3RFeGVjdXRpb25QbGFjZW1lbnQSQAoLY2FyZGluYWxpdHkYAiABKA4yKy5ub21vcy5rZXJuZWwudjEuRWZmZWN0RXhlY3V0aW9uQ2FyZGluYWxpdHkSEwoLbGF3X2Nsb3N1cmUYAyABKAkiWwoSSHR0cHNPdXRib3VuZFJvdXRlEgsKA3VybBgBIAEoCRI4CglleGVjdXRpb24YAiABKAsyJS5ub21vcy5rZXJuZWwudjEuSHR0cHNFeGVjdXRpb25Qb2xpY3kiKwoWV29ya3NwYWNlT3V0Ym91bmRSb3V0ZRIRCgl3b3Jrc3BhY2UYASABKAkihQIKFUNhcnJpZWRXb3Jrc3BhY2VPZmZlchIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhUKDXNvdXJjZV9jb21taXQYAiABKAkSGQoRc291cmNlX29mZmVyX3BhdGgYAyABKAkSHAoUc291cmNlX2V2aWRlbmNlX3BhY2sYBSABKAwSIwobYWRtaXNzaW9uX2NoZWNrcG9pbnRfc2VjcmV0GAYgASgMEhUKDWVmZmVjdF9kaWdlc3QYByABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAggASgJSgQIBBAFUgZ0YXJnZXQizAQKDU91dGJvdW5kT2ZmZXISCgoCaWQYASABKAkSFwoLZGVzdGluYXRpb24YAiABKAlCAhgBEhQKDHNlYWxlZF9vZmZlchgDIAEoDBIUCgxjb250ZW50X3R5cGUYBCABKAkSGAoQc291cmNlX3dvcmtzcGFjZRgFIAEoCRIUCgxjdXN0b2R5X2hlYWQYBiABKAkSFwoPY2F1c2VkX2J5X29mZmVyGAcgASgJEhsKE3NjaGVkdWxlZF9hdF9taWxsaXMYCCABKAQSGgoSZGVhZGxpbmVfYXRfbWlsbGlzGAkgASgEEhQKDGN1c3RvZHlfcGF0aBgKIAEoCRITCgtjdXN0b2R5X29pZBgLIAEoCRIUCgxkZWxpdmVyeV9yZWYYDCABKAkSFQoNb2JsaWdhdGlvbl9pZBgNIAEoCRI6CgtodHRwc19yb3V0ZRgOIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5IdHRwc091dGJvdW5kUm91dGVIABJCCg93b3Jrc3BhY2Vfcm91dGUYDyABKAsyJy5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlT3V0Ym91bmRSb3V0ZUgAEhUKDXNvdXJjZV9jb21taXQYECABKAkSHAoUc291cmNlX2V2aWRlbmNlX3BhY2sYESABKAwSGQoRc291cmNlX29mZmVyX3BhdGgYEiABKAkSFQoNZWZmZWN0X2RpZ2VzdBgTIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYFCABKAlCBwoFcm91dGUi7gEKDk91dGJveFJlc3BvbnNlEi4KBm9mZmVycxgBIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5PdXRib3VuZE9mZmVyEh8KEm5leHRfZHVlX2F0X21pbGxpcxgCIAEoBEgAiAEBEi0KB2VudHJpZXMYAyADKAsyHC5ub21vcy5rZXJuZWwudjEuT3V0Ym94RW50cnkSFAoMd29ya19wZW5kaW5nGAQgASgIEhUKDWVudHJpZXNfdG90YWwYBSABKA0SGAoQZW50cmllc19wcmVwYXJlZBgGIAEoDUIVChNfbmV4dF9kdWVfYXRfbWlsbGlzIr0BCgtPdXRib3hFbnRyeRIKCgJpZBgBIAEoCRIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgCIAEoCRI6CgtodHRwc19yb3V0ZRgDIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5IdHRwc091dGJvdW5kUm91dGVIABJCCg93b3Jrc3BhY2Vfcm91dGUYBCABKAsyJy5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlT3V0Ym91bmRSb3V0ZUgAQgcKBXJvdXRlIpQBChRQcmVwYXJlT3V0Ym91bmRPZmZlchIYChB0YXJnZXRfd29ya3NwYWNlGAEgASgJEhoKDXNvdXJjZV9jb21taXQYAiABKAlIAIgBARIeChFzb3VyY2Vfb2ZmZXJfcGF0aBgDIAEoCUgBiAEBQhAKDl9zb3VyY2VfY29tbWl0QhQKEl9zb3VyY2Vfb2ZmZXJfcGF0aCKJBQoMU3luY1Jlc3BvbnNlEhAKCGFkbWl0dGVkGAIgASgIEgwKBGhlYWQYAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkSHAoUYWRtaXR0ZWRfcmVtb3RlX2hlYWQYBSABKAkSHAoUcmVwbGF5ZWRfcmVtb3RlX2hlYWQYBiABKAkSPAoPYWRtaXR0ZWRfcmVtb3RlGAcgAygLMiMubm9tb3Mua2VybmVsLnYxLlN5bmNBZG1pdHRlZEludGVudBI8ChVyZW1vdGVfYmlydGhfb3V0Y29tZXMYCCADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lEjkKDnJlbW90ZV9yZWZ1c2FsGAkgASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZWZ1c2FsSACIAQESOwoOcmVwbGF5ZWRfbG9jYWwYCiADKAsyIy5ub21vcy5rZXJuZWwudjEuU3luY1JlcGxheWVkSW50ZW50EiAKGHNraXBwZWRfbG9jYWxfaW50ZW50X2lkcxgLIAMoCRI5Cg1yZWZ1c2VkX2xvY2FsGAwgAygLMiIubm9tb3Mua2VybmVsLnYxLlN5bmNSZWZ1c2VkSW50ZW50EkcKFGN1c3RvZHlfZGlzYWdyZWVtZW50GA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlEaXNhZ3JlZW1lbnRIAYgBARIZChFwYXJrZWRfbG9jYWxfcmVmcxgOIAMoCRIWCg5yZXBsYXlfcGVuZGluZxgPIAEoCEIRCg9fcmVtb3RlX3JlZnVzYWxCFwoVX2N1c3RvZHlfZGlzYWdyZWVtZW50SgQIARACUgZyZXN1bHQiUQoTQ3VzdG9keURpc2FncmVlbWVudBISCgpsb2NhbF9oZWFkGAEgASgJEhYKDmNhbmRpZGF0ZV9oZWFkGAIgASgJEg4KBnJlYXNvbhgDIAEoCSJPChJTeW5jQWRtaXR0ZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEhgKEGNhbmRpZGF0ZV9jb21taXQYAiABKAkSDAoEaGVhZBgDIAEoCSJsChJTeW5jUmVwbGF5ZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEgwKBGhlYWQYAiABKAkSNQoOYmlydGhfb3V0Y29tZXMYAyADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lIqEBCgtTeW5jUmVmdXNhbBIWCglpbnRlbnRfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSEQoEY29kZRgDIAEoCUgBiAEBEjQKB3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbEgCiAEBQgwKCl9pbnRlbnRfaWRCBwoFX2NvZGVCCgoIX3JlZnVzYWwijQEKEVN5bmNSZWZ1c2VkSW50ZW50EhEKCWludGVudF9pZBgBIAEoCRIOCgZyZWFzb24YAiABKAkSEwoLY2hhbmdlX3VzZGEYAyABKAwSNAoHcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsSACIAQFCCgoIX3JlZnVzYWwiQgoPV29ya3NwYWNlVGFyZ2V0EgwKBHJlcG8YASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCSJOCgtPcGVuUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Eg0KBXNwYW5zGAIgASgIIg4KDEdlbmVzaXNPZmZlciKjAQoNRGlyZWN0aXZlQ2FsbBIOCgZkb21haW4YASABKAkSEQoJZGlyZWN0aXZlGAIgASgJEicKCW9wZXJhdGlvbhgFIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSFgoOYXJndW1lbnRzX2pzb24YBiABKAlKBAgDEARKBAgEEAVSCWNhbGxfdXNkYVIHcGF5bG9hZFIObGVnYWN5X3BheWxvYWQi1gIKEEF1dGhvcmluZ09wdGlvbnMSDQoFYWN0b3IYASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIVCg1hdXRob3Jfc2VjcmV0GAMgASgMEh0KEHZhbGlkX2Zyb21fZXBvY2gYBCABKARIAIgBARIfChJwcmluY2lwYWxfdmVyaWZpZWQYBSABKAhIAYgBARILCgNybmcYBiADKAESGAoQZGVmZXJfcHJvamVjdGlvbhgHIAEoCBINCgVzcGFucxgIIAEoCBIPCgdkcnlfcnVuGAkgASgIEhAKCHNlcXVlbmNlGAogASgEEi0KBWNsb2NrGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2sSFAoMcHJlcGFyZV9vbmx5GAwgASgIQhMKEV92YWxpZF9mcm9tX2Vwb2NoQhUKE19wcmluY2lwYWxfdmVyaWZpZWQiSgoNQ2FwdHVyZWRDbG9jaxIXCg9waHlzaWNhbF9taWxsaXMYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIsMDChBCaXJ0aENlcnRpZmljYXRlEg0KBWNoaWxkGAEgASgJEg8KB2ZvdW5kZXIYAiABKAkSEAoIdmVyaWZpZWQYAyABKAgSEgoKcGFyZW50X2tleRgEIAEoDBIRCglwYXJlbnRfaWQYBSABKAkSDQoFZXBvY2gYBiABKAMSEQoJc2lnbmF0dXJlGAcgASgMEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhYKCWlkcF90b2tlbhgJIAEoCUgBiAEBEhsKDmNhcHR1cmVkX2Nsb2NrGAogASgDSAKIAQESIQoUYXV0aF9wcm92aWRlcl9pc3N1ZXIYCyABKAlIA4gBARIfChJhdXRoX3Byb3ZpZGVyX2p3a3MYDCABKAlIBIgBARIjChZhdXRoX3Byb3ZpZGVyX2F1ZGllbmNlGA0gASgJSAWIAQFCDwoNX3ZlcmlmaWVkX3ZpYUIMCgpfaWRwX3Rva2VuQhEKD19jYXB0dXJlZF9jbG9ja0IXChVfYXV0aF9wcm92aWRlcl9pc3N1ZXJCFQoTX2F1dGhfcHJvdmlkZXJfandrc0IZChdfYXV0aF9wcm92aWRlcl9hdWRpZW5jZSJsChtTaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3QSNgoLY2VydGlmaWNhdGUYASABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZRIVCg1zaWduZXJfc2VjcmV0GAIgASgMIlYKHFNpZ25CaXJ0aENlcnRpZmljYXRlUmVzcG9uc2USNgoLY2VydGlmaWNhdGUYASABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZSLsAgoUTW9kZWxMaWZlY3ljbGVJbnRlbnQSOwoJb3BlcmF0aW9uGAEgASgOMigubm9tb3Mua2VybmVsLnYxLk1vZGVsTGlmZWN5Y2xlT3BlcmF0aW9uEhQKDGluc3RhbGxlZF9ieRgCIAEoCRIXCgpzdXBlcnNlZGVzGAMgASgJSACIAQESRAoKdHJhbnNpdGlvbhgEIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25SZXNwb25zZUgBiAEBEhUKCHJlcGxhY2VzGAUgASgJSAKIAQESHgoRYWNjZXB0YW5jZV9yZWFzb24YBiABKAlIA4gBARIZCgxsYXdfaWRlbnRpdHkYByABKAlIBIgBAUINCgtfc3VwZXJzZWRlc0INCgtfdHJhbnNpdGlvbkILCglfcmVwbGFjZXNCFAoSX2FjY2VwdGFuY2VfcmVhc29uQg8KDV9sYXdfaWRlbnRpdHkiOwofSWRlbnRpdHlQcm92aWRlcldpdG5lc3NBZG9wdGlvbhIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJIucHCgxPZmZlclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCgRjYWxsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUNhbGxIABIcChJzZWFsZWRfY2hhbmdlX3VzZGEYByABKAxIABJACg9tb2RlbF9saWZlY3ljbGUYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuTW9kZWxMaWZlY3ljbGVJbnRlbnRIABJeCiJpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzX2Fkb3B0aW9uGA0gASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQWRvcHRpb25IABIwCgdnZW5lc2lzGA4gASgLMh0ubm9tb3Mua2VybmVsLnYxLkdlbmVzaXNPZmZlckgAEkkKF2NhcnJpZWRfd29ya3NwYWNlX29mZmVyGA8gASgLMiYubm9tb3Mua2VybmVsLnYxLkNhcnJpZWRXb3Jrc3BhY2VPZmZlckgAEjQKCXBsYWNlbWVudBgQIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5QbGFjZW1lbnRPZmZlckgAEkcKFmRldGFjaGVkX3NpZ25lZF9jaGFuZ2UYEiABKAsyJS5ub21vcy5rZXJuZWwudjEuRGV0YWNoZWRTaWduZWRDaGFuZ2VIABI0CglhdXRob3JpbmcYAyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaW5nT3B0aW9ucxIQCghsYXdfdXNkehgEIAEoDBIzCgxhdHRlc3RhdGlvbnMYBSADKAsyHS5ub21vcy5rZXJuZWwudjEuQXR0ZXN0ZWRSZWFkEj0KEmNvbmZsaWN0X3NuYXBzaG90cxgGIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5Db25mbGljdFNuYXBzaG90EhoKEmV4ZWN1dGlvbl9sYXdfdXNkehgIIAEoDBIgChNjb250cm9sbGVyX2xhd19oYXNoGAkgASgJSAGIAQESHQoQY2FuZGlkYXRlX2NvbW1pdBgKIAEoCUgCiAEBEjwKEWJpcnRoX2NlcnRpZmljYXRlGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGUSKwoJbGF3X3VuaXRzGBEgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXRCCAoGaW50ZW50QhYKFF9jb250cm9sbGVyX2xhd19oYXNoQhMKEV9jYW5kaWRhdGVfY29tbWl0IjYKB0xhd1VuaXQSKwoFZmlsZXMYASADKAsyHC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEZpbGUiLAoLTGF3VW5pdEZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIsUBCgxBdHRlc3RlZFJlYWQSEAoIcXVlcnlfaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EisKBnJlc3VsdBgDIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlEjIKCGV2aWRlbmNlGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRBdHRlc3RhdGlvbkoECAQQBVILYXR0ZXN0YXRpb24i1QEKD1JlYWRBdHRlc3RhdGlvbhIPCgd2ZXJzaW9uGAEgASgDEhgKEHNvdXJjZV93b3Jrc3BhY2UYAiABKAkSFgoOc291cmNlX2dlbmVzaXMYAyABKAkSEwoLc291cmNlX2hlYWQYBCABKAkSEQoJZm9sZF9yb290GAUgASgJEhQKDHNvdXJjZV9lcG9jaBgGIAEoAxIaChJhdHRlc3RlZF9hdF9taWxsaXMYByABKAMSEgoKcHVibGljX2tleRgIIAEoDBIRCglzaWduYXR1cmUYCSABKAwidQoQQ29uZmxpY3RTbmFwc2hvdBIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSDQoFZmllbGQYAyABKAkSFQoNdGFyZ2V0X3NjaGVtYRgEIAEoCRINCgV0b2tlbhgFIAEoCSKqDwoMUXVlcnlSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSMgoJYXV0aG9yaXR5GAIgASgLMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5QXV0aG9yaXR5Eg0KBXNwYW5zGAMgASgIEjkKDXJlc3VsdF9mb3JtYXQYBCABKA4yIi5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXN1bHRGb3JtYXQSGAoQc2VydmVfbGFzdF9yZWFkeRgFIAEoCBIqCgRyb3dzGAogASgLMhoubm9tb3Mua2VybmVsLnYxLlJvd3NRdWVyeUgAEioKBHBhZ2UYCyABKAsyGi5ub21vcy5rZXJuZWwudjEuUGFnZVF1ZXJ5SAASKwoFYnlfaWQYDCABKAsyGi5ub21vcy5rZXJuZWwudjEuQnlJZFF1ZXJ5SAASOQoMcmVzb2x2ZV9yZWZzGA0gASgLMiEubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZzUXVlcnlIABJFChJyZWZlcmVuY2VfdmVyc2lvbnMYDiABKAsyJy5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbnNRdWVyeUgAEiwKBWNvdW50GA8gASgLMhsubm9tb3Mua2VybmVsLnYxLlRhbGx5UXVlcnlIABIqCgNzdW0YECABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEjAKB3NwYXRpYWwYESABKAsyHS5ub21vcy5rZXJuZWwudjEuU3BhdGlhbFF1ZXJ5SAASLAoFbmFtZWQYEiABKAsyGy5ub21vcy5rZXJuZWwudjEuTmFtZWRRdWVyeUgAEkkKE2F1dGhvcml6YXRpb25fY2hlY2sYEyABKAsyKi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNoZWNrUmVxdWVzdEgAEksKFGF1dGhvcml6YXRpb25fZXhwYW5kGBQgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0SAASSQoTZnJvbnRpZXJfdHJhbnNpdGlvbhgVIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25SZXF1ZXN0SAASLwoHYnlfdHlwZRgWIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5CeVR5cGVRdWVyeUgAEkgKFG93bmVkX2RldmljZV9yZXF1ZXN0GBcgASgLMigubm9tb3Mua2VybmVsLnYxLk93bmVkRGV2aWNlUmVxdWVzdFF1ZXJ5SAASTAoWb3duZWRfcHJlcGFyZV9hcHByb3ZhbBgYIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5Pd25lZFByZXBhcmVBcHByb3ZhbFF1ZXJ5SAASQwoRcGVuZGluZ19jb25mbGljdHMYGSABKAsyJi5ub21vcy5rZXJuZWwudjEuUGVuZGluZ0NvbmZsaWN0c1F1ZXJ5SAASUAoYcGVuZGluZ19jb25mbGljdF9zdW1tYXJ5GBogASgLMiwubm9tb3Mua2VybmVsLnYxLlBlbmRpbmdDb25mbGljdFN1bW1hcnlRdWVyeUgAEk0KFmF1dGhlbnRpY2F0aW9uX3Bvc3R1cmUYGyABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aGVudGljYXRpb25Qb3N0dXJlUXVlcnlIABJAChBjaGlsZF93b3Jrc3BhY2VzGBwgASgLMiQubm9tb3Mua2VybmVsLnYxLkNoaWxkV29ya3NwYWNlUXVlcnlIABJWChZhdXRob3JpbmdfcmVxdWlyZW1lbnRzGB0gASgLMjQubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1F1ZXJ5SAASUgoZaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzcxgeIAEoCzItLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1F1ZXJ5SAASTwoXaW50ZXJmYWNlX2NvbXBhdGliaWxpdHkYHyABKAsyLC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVF1ZXJ5SAASRwoTbWFpbnRlbmFuY2VfcXVhbnR1bRggIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5NYWludGVuYW5jZVF1YW50dW1RdWVyeUgAEkQKEmZ1bGxfaGlzdG9yeV9hdWRpdBghIAEoCzImLm5vbW9zLmtlcm5lbC52MS5GdWxsSGlzdG9yeUF1ZGl0UXVlcnlIABJQChh3b3Jrc3BhY2VfZWZmZWN0X3JlY2VpcHQYIiABKAsyLC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0UmVjZWlwdFF1ZXJ5SAASVAoaaW5zdGFsbGVkX2xhd19kZWNsYXJhdGlvbnMYIyABKAsyLi5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3RGVjbGFyYXRpb25zUXVlcnlIAEIHCgVxdWVyeSJWChtXb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UXVlcnkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAEgASgJEhUKDWVmZmVjdF9kaWdlc3QYAiABKAki5AEKHldvcmtzcGFjZUVmZmVjdFJlY2VpcHRSZXNwb25zZRIYChB0YXJnZXRfd29ya3NwYWNlGAEgASgJEiAKGHRhcmdldF93b3Jrc3BhY2VfZ2VuZXNpcxgCIAEoCRIVCg1vYnNlcnZlZF9oZWFkGAMgASgJEiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgEIAEoCRIVCg1lZmZlY3RfZGlnZXN0GAUgASgJEh8KEmFkbWl0dGVkX2ludGVudF9pZBgGIAEoCUgAiAEBQhUKE19hZG1pdHRlZF9pbnRlbnRfaWQiFwoVRnVsbEhpc3RvcnlBdWRpdFF1ZXJ5IrADChhGdWxsSGlzdG9yeUF1ZGl0UmVzcG9uc2USDQoFdmFsaWQYASABKAgSLgoEd2FsaxgCIAEoDjIgLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbldhbGsSEQoEaGVhZBgDIAEoCUgAiAEBEhQKB2ludGVudHMYBCABKARIAYgBARIYCgtwbGFuc19yZXJ1bhgFIAEoBEgCiAEBEhwKD2NvbnRyb2xsZXJfaGFzaBgGIAEoCUgDiAEBEhkKEWluc3RhbGxlZF9kb21haW5zGAcgAygJEhIKBWNoZWNrGAggASgJSASIAQESFQoIYXRfaW5kZXgYCSABKARIBYgBARISCgVlcnJvchgKIAEoCUgGiAEBEjQKB3JlZnVzYWwYCyABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbEgHiAEBQgcKBV9oZWFkQgoKCF9pbnRlbnRzQg4KDF9wbGFuc19yZXJ1bkISChBfY29udHJvbGxlcl9oYXNoQggKBl9jaGVja0ILCglfYXRfaW5kZXhCCAoGX2Vycm9yQgoKCF9yZWZ1c2FsIh4KHElkZW50aXR5UHJvdmlkZXJXaXRuZXNzUXVlcnkiiwIKGklkZW50aXR5UHJvdmlkZXJXaXRuZXNzS2V5Eg8KB29yZGluYWwYASABKAQSCwoDa3R5GAIgASgJEhAKA2tpZBgDIAEoCUgAiAEBEhAKA2FsZxgEIAEoCUgBiAEBEhAKA3VzZRgFIAEoCUgCiAEBEhAKA2NydhgGIAEoCUgDiAEBEg4KAXgYByABKAlIBIgBARIOCgF5GAggASgJSAWIAQESDgoBbhgJIAEoCUgGiAEBEg4KAWUYCiABKAlIB4gBARIPCgdrZXlfb3BzGAsgAygJQgYKBF9raWRCBgoEX2FsZ0IGCgRfdXNlQgYKBF9jcnZCBAoCX3hCBAoCX3lCBAoCX25CBAoCX2UiYwoiSWRlbnRpdHlQcm92aWRlcldpdG5lc3NDZXJ0aWZpY2F0ZRITCgtrZXlfb3JkaW5hbBgBIAEoBBIbChNjZXJ0aWZpY2F0ZV9vcmRpbmFsGAIgASgEEgsKA2RlchgDIAEoDCLFBAofSWRlbnRpdHlQcm92aWRlcldpdG5lc3NSZXNwb25zZRIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJEhYKDnNvdXJjZV9nZW5lc2lzGAIgASgJEhMKC3NvdXJjZV9oZWFkGAMgASgJEg0KBWVwb2NoGAQgASgEEh8KEnByZWRlY2Vzc29yX3NoYTI1NhgFIAEoDEgAiAEBEg4KBmlzc3VlchgGIAEoCRIVCghhdWRpZW5jZRgHIAEoCUgBiAEBEhcKD3ByaW5jaXBhbF9jbGFpbRgIIAEoCRIhChRkZXZpY2VfYmluZGluZ19jbGFpbRgJIAEoCUgCiAEBEh4KFnJlcXVpcmVfZGV2aWNlX2JpbmRpbmcYCiABKAgSOQoEa2V5cxgLIAMoCzIrLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc0tleRJJCgxjZXJ0aWZpY2F0ZXMYDCADKAsyMy5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NDZXJ0aWZpY2F0ZRIXCg9tYXRlcmlhbF9zaGEyNTYYDSABKAwSMwoMYXR0ZXN0YXRpb25zGA8gAygLMh0ubm9tb3Mua2VybmVsLnYxLkF0dGVzdGVkUmVhZEIVChNfcHJlZGVjZXNzb3Jfc2hhMjU2QgsKCV9hdWRpZW5jZUIXChVfZGV2aWNlX2JpbmRpbmdfY2xhaW1KBAgOEA9SEXNvdXJjZV9wcm9vZl91c2RhIhUKE0NoaWxkV29ya3NwYWNlUXVlcnkikAEKGUNoaWxkV29ya3NwYWNlUXVlcnlSZWNvcmQSEQoJd29ya3NwYWNlGAEgASgJEj4KBnN0YXR1cxgCIAEoDjIuLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZUxpZmVjeWNsZVN0YXR1cxIUCgdib3JuX2F0GAMgASgJSACIAQFCCgoIX2Jvcm5fYXQiWwobQ2hpbGRXb3Jrc3BhY2VRdWVyeVJlc3BvbnNlEjwKCGNoaWxkcmVuGAEgAygLMioubm9tb3Mua2VybmVsLnYxLkNoaWxkV29ya3NwYWNlUXVlcnlSZWNvcmQiHwodSW5zdGFsbGVkTGF3RGVjbGFyYXRpb25zUXVlcnkiNwoQSW5zdGFsbGVkTGF3VW5pdBIQCgh1bml0X2tleRgBIAEoCRIRCgl1bml0X2hhc2gYAiABKAkijAEKE0luc3RhbGxlZExhd1VuaXRTZXQSFAoMc2V0X2lkZW50aXR5GAEgASgJEhgKEGNvbXBvc2VyX3ZlcnNpb24YAiABKAkSEwoLb3BlbnVzZF9yZXYYAyABKAkSMAoFdW5pdHMYBCADKAsyIS5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3VW5pdCKBAgoeRGVjbGFyZWRBdXRoZW50aWNhdGlvblByb3ZpZGVyEg4KBmRvbWFpbhgBIAEoCRIOCgZtZW1iZXIYAiABKAkSOwoLbWVtYmVyX2tpbmQYAyABKA4yJi5ub21vcy5rZXJuZWwudjEuRGVjbGFyZWRMYXdNZW1iZXJLaW5kEkEKBGtpbmQYBCABKA4yMy5ub21vcy5rZXJuZWwudjEuRGVjbGFyZWRBdXRoZW50aWNhdGlvblByb3ZpZGVyS2luZBINCgVzY29wZRgFIAEoCRIcCg9pZGVudGl0eV9zaGEyNTYYBiABKAlIAIgBAUISChBfaWRlbnRpdHlfc2hhMjU2IukBCh9JbnN0YWxsZWRMYXdDbG9zdXJlRGVjbGFyYXRpb25zEhgKEGNsb3N1cmVfaWRlbnRpdHkYASABKAkSDwoHZG9tYWlucxgCIAMoCRI7Cgh1bml0X3NldBgDIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5JbnN0YWxsZWRMYXdVbml0U2V0SACIAQESUQoYYXV0aGVudGljYXRpb25fcHJvdmlkZXJzGAQgAygLMi8ubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlckILCglfdW5pdF9zZXQidAogSW5zdGFsbGVkTGF3RGVjbGFyYXRpb25zUmVzcG9uc2USDAoEaGVhZBgBIAEoCRJCCghjbG9zdXJlcxgCIAMoCzIwLm5vbW9zLmtlcm5lbC52MS5JbnN0YWxsZWRMYXdDbG9zdXJlRGVjbGFyYXRpb25zIsoBCiNEaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNRdWVyeRIRCglkaXJlY3RpdmUYASABKAkSFgoJcHJpbmNpcGFsGAIgASgJSACIAQESFwoKcHVibGljX2tleRgDIAEoDEgBiAEBEhUKCGtleV9oYXNoGAQgASgJSAKIAQESEwoGZG9tYWluGAUgASgJSAOIAQFCDAoKX3ByaW5jaXBhbEINCgtfcHVibGljX2tleUILCglfa2V5X2hhc2hCCQoHX2RvbWFpbiKMAgomRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUmVzcG9uc2USDQoFZm91bmQYASABKAgSEwoGZG9tYWluGAIgASgJSACIAQESFQoIcmVsYXRpb24YAyABKAlIAYgBARITCgZvYmplY3QYBCABKAlIAogBARISCgVhY3RvchgFIAEoCUgDiAEBEhUKCGtleV9oYXNoGAYgASgJSASIAQESFwoPc2lnbmVyX2Vucm9sbGVkGAcgASgIEhQKDHJvbGVfYWxsb3dlZBgIIAEoCEIJCgdfZG9tYWluQgsKCV9yZWxhdGlvbkIJCgdfb2JqZWN0QggKBl9hY3RvckILCglfa2V5X2hhc2gicgoaQXV0aGVudGljYXRpb25Qb3N0dXJlUXVlcnkSHgoWaW5jbHVkZV9iaXJ0aF9ldmlkZW5jZRgBIAEoCBIeChFkZXZpY2VfcHVibGljX2tleRgCIAEoDEgAiAEBQhQKEl9kZXZpY2VfcHVibGljX2tleSLsAgodQXV0aGVudGljYXRpb25Qb3N0dXJlUmVzcG9uc2USSAoOcHJvdmlkZXJfdG9rZW4YASABKA4yMC5ub21vcy5rZXJuZWwudjEuUHJvdmlkZXJUb2tlblZlcmlmaWNhdGlvblN0YXR1cxIXCg9lbnJvbGxlZF9kZXZpY2UYAiABKAgSGgoScmVzb2x2ZWRfcHJpbmNpcGFsGAMgASgJEkQKDmJpcnRoX2V2aWRlbmNlGAQgASgLMicubm9tb3Mua2VybmVsLnYxLkJpcnRoRXZpZGVuY2VSZWFkaW5lc3NIAIgBARJBChRkZXZpY2Vfc2lnbmVyX3N0YXR1cxgFIAEoDjIjLm5vbW9zLmtlcm5lbC52MS5EZXZpY2VTaWduZXJTdGF0dXMSGgoSZGV2aWNlX2tleV9zdWJqZWN0GAYgASgJEhQKDHNpZ25lcl9lcG9jaBgHIAEoA0IRCg9fYmlydGhfZXZpZGVuY2UiXgoWQmlydGhFdmlkZW5jZVJlYWRpbmVzcxI0CgZzdGF0dXMYASABKA4yJC5ub21vcy5rZXJuZWwudjEuQmlydGhFdmlkZW5jZVN0YXR1cxIOCgZkZXRhaWwYAiABKAkiKAoXT3duZWREZXZpY2VSZXF1ZXN0UXVlcnkSDQoFc2NvcGUYASABKAkiMgoaT3duZWREZXZpY2VSZXF1ZXN0UmVzcG9uc2USFAoMcmVxdWVzdF91c2RhGAEgASgMIkAKGU93bmVkUHJlcGFyZUFwcHJvdmFsUXVlcnkSDQoFc2NvcGUYASABKAkSFAoMcmVxdWVzdF91c2RhGAIgASgMIr8BChxPd25lZFByZXBhcmVBcHByb3ZhbFJlc3BvbnNlEhcKD25ld19rZXlfc3ViamVjdBgBIAEoCRIaChJvd25lZF9jdXN0b2R5X3VzZGEYAiABKAwSFAoMdmVyaWZpZWRfdmlhGAMgASgJEhgKEHZhbGlkX2Zyb21fZXBvY2gYBCABKAQSHwoXYXBwcm92ZWRfYXRfdW5peF9taWxsaXMYBSABKAQSGQoRb3duZWRfa2V5X3N1YmplY3QYBiABKAkikgEKDlF1ZXJ5QXV0aG9yaXR5EhcKD3ByaW5jaXBhbF9jbGFpbRgBIAEoCRISCgphdXRoX3Rva2VuGAIgASgMEhAKCG5vd191bml4GAMgASgEEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwSKgoEa2V5cxgFIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5JbmplY3RlZEtleSI4CgtJbmplY3RlZEtleRINCgVzY29wZRgBIAEoCRINCgVlcG9jaBgCIAEoBBILCgNrZXkYAyABKAwi2AEKCVJvd3NRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJEhYKDmFyZ3VtZW50c191c2RhGAQgASgMEjMKFWFwcGxpY2F0aW9uX2FyZ3VtZW50cxgFIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSGwoOc2luY2VfZnJvbnRpZXIYBiABKAlIAIgBAUIRCg9fc2luY2VfZnJvbnRpZXIixgEKCVBhZ2VRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSDQoFbGltaXQYAyABKA0SDQoFYWZ0ZXIYBCABKAkSEQoJcHJpbmNpcGFsGAUgASgJEhYKDmFyZ3VtZW50c191c2RhGAYgASgMEjMKFWFwcGxpY2F0aW9uX2FyZ3VtZW50cxgHIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkiTAoJQnlJZFF1ZXJ5EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRIRCglwcmluY2lwYWwYAyABKAkiOAoLQnlUeXBlUXVlcnkSFgoOYWdncmVnYXRlX3R5cGUYASABKAkSEQoJcHJpbmNpcGFsGAIgASgJIlwKCE5vbW9zUmVmEhEKCXdvcmtzcGFjZRgBIAEoCRIWCg5hZ2dyZWdhdGVfdHlwZRgCIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAyABKAkSDwoHdmVyc2lvbhgEIAEoCSJOChBSZXNvbHZlUmVmc1F1ZXJ5EicKBHJlZnMYASADKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSEQoJcHJpbmNpcGFsGAIgASgJIk4KFlJlZmVyZW5jZVZlcnNpb25zUXVlcnkSNAoEcmVmcxgBIAMoCzImLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uQ2hlY2sihAEKFVJlZmVyZW5jZVZlcnNpb25DaGVjaxIpCgZwaW5uZWQYASABKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSKQoGc2VyaWVzGAIgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhUKDWN1cnJlbnRfZmllbGQYAyABKAkiYgoKVGFsbHlRdWVyeRIKCgJpZBgBIAEoCRIRCglwcmluY2lwYWwYAyABKAkSFgoJZ3JvdXBfa2V5GAQgASgJSACIAQFCDAoKX2dyb3VwX2tleUoECAIQA1IJYXJndW1lbnRzInoKDFNwYXRpYWxRdWVyeRIKCgJpZBgBIAEoCRIRCglwcmluY2lwYWwYAyABKAkSDQoFbWluX3gYBCABKAESDQoFbWluX3kYBSABKAESDQoFbWF4X3gYBiABKAESDQoFbWF4X3kYByABKAFKBAgCEANSCWFyZ3VtZW50cyJaChVQZW5kaW5nQ29uZmxpY3RzUXVlcnkSGwoOYWdncmVnYXRlX3R5cGUYASABKAlIAIgBARIRCglwcmluY2lwYWwYAiABKAlCEQoPX2FnZ3JlZ2F0ZV90eXBlIjAKG1BlbmRpbmdDb25mbGljdFN1bW1hcnlRdWVyeRIRCglwcmluY2lwYWwYASABKAkicQoKTmFtZWRRdWVyeRIyCglvcGVyYXRpb24YASABKA4yHy5ub21vcy5rZXJuZWwudjEuUXVlcnlPcGVyYXRpb24SLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IuQBChlGcm9udGllclRyYW5zaXRpb25SZXF1ZXN0Eg4KBmRvbWFpbhgBIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgCIAEoCRIPCgdhdF9oYXNoGAMgASgJEiEKGWFja25vd2xlZGdlbWVudF9wcmluY2lwYWwYBCABKAkSIAoTcmVzdG9yZV9wcmV2aW91c19vZhgFIAEoCUgAiAEBEjEKD2NhbmRpZGF0ZV91bml0cxgGIAMoCzIYLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0QhYKFF9yZXN0b3JlX3ByZXZpb3VzX29mIloKJUZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSGAoQc291cmNlX3N0YWJsZV9pZBgBIAEoCRIXCg9hY2tub3dsZWRnZW1lbnQYAiABKAki9QEKHkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9ucxIPCgdyZXRpcmVkGAEgAygJEkcKB3JldHlwZWQYAiADKAsyNi5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25NYXBFbnRyeRJHCgdyZWJpbmRzGAMgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSHAoPYWNrbm93bGVkZ2VkX2J5GAQgASgJSACIAQFCEgoQX2Fja25vd2xlZGdlZF9ieSI9ChtGcm9udGllclRyYW5zaXRpb25WaW9sYXRpb24SDgoGZG9tYWluGAEgASgJEg4KBmRldGFpbBgCIAEoCSLXAgoaRnJvbnRpZXJUcmFuc2l0aW9uUmVzcG9uc2USDwoHYXRfaGFzaBgBIAEoCRIZCgxjdXJyZW50X2hhc2gYAiABKAlIAIgBARIVCg1hdF9zdGF0ZV9yb290GAMgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAQgASgJEg4KBmRvbWFpbhgFIAEoCRIPCgdkb21haW5zGAYgAygJEg0KBXJlYWR5GAcgASgIEkAKCnZpb2xhdGlvbnMYCCADKAsyLC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEkoKDGRpc3Bvc2l0aW9ucxgJIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnNIAYgBAUIPCg1fY3VycmVudF9oYXNoQg8KDV9kaXNwb3NpdGlvbnMiLwoTQXV0aG9yaXphdGlvbk9iamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJIlQKFEF1dGhvcml6YXRpb25TdWJqZWN0EgwKBHR5cGUYASABKAkSCgoCaWQYAiABKAkSFQoIcmVsYXRpb24YAyABKAlIAIgBAUILCglfcmVsYXRpb24inAEKGFJlbGF0aW9uc2hpcFR1cGxlQWRkcmVzcxI2CghyZXNvdXJjZRgBIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uT2JqZWN0EhAKCHJlbGF0aW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QigQEKGEF1dGhvcml6YXRpb25Db25zaXN0ZW5jeRIjChljdXJyZW50X3ZlcmlmaWVkX2Zyb250aWVyGAEgASgISAASGQoPYXRfbGVhc3RfY29tbWl0GAIgASgJSAASFgoMZXhhY3RfY29tbWl0GAMgASgJSABCDQoLcmVxdWlyZW1lbnQiZgodQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSFAoMY29uZGl0aW9uX2lkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCL3AgoZQXV0aG9yaXphdGlvbkNoZWNrUmVxdWVzdBI2CghyZXNvdXJjZRgBIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uT2JqZWN0EhIKCnBlcm1pc3Npb24YAiABKAkSNgoHc3ViamVjdBgDIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdBI+Cgtjb25zaXN0ZW5jeRgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgFIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAYgASgJSACIAQESGwoTaW5jbHVkZV9leHBsYW5hdGlvbhgHIAEoCEIWChRfZXhwZWN0ZWRfbW9kZWxfaGFzaCLtAgoaQXV0aG9yaXphdGlvbkV4cGFuZFJlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEj4KC2NvbnNpc3RlbmN5GAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25zaXN0ZW5jeRI/Cgdjb250ZXh0GAQgAygLMi4ubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EiAKE2V4cGVjdGVkX21vZGVsX2hhc2gYBSABKAlIAIgBARINCgVsaW1pdBgGIAEoDRISCgVhZnRlchgHIAEoCUgBiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YCCABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2hCCAoGX2FmdGVyIr0BChlSZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjgKBXR1cGxlGAEgASgLMikubm9tb3Mua2VybmVsLnYxLlJlbGF0aW9uc2hpcFR1cGxlQWRkcmVzcxIQCgh0dXBsZV9pZBgCIAEoCRIaChJhc3NlcnRpb25fZXZlbnRfaWQYAyABKAkSIAoTcmV2b2NhdGlvbl9ldmVudF9pZBgEIAEoCUgAiAEBQhYKFF9yZXZvY2F0aW9uX2V2ZW50X2lkIuEDChhBdXRob3JpemF0aW9uRXhwbGFuYXRpb24SRgoJb3BlcmF0aW9uGAEgASgOMjMubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbi5PcGVyYXRpb24SEAoIcmVsYXRpb24YAiABKAkSDgoGcmVzdWx0GAMgASgIEjwKCGV2aWRlbmNlGAQgAygLMioubm9tb3Mua2VybmVsLnYxLlJlbGF0aW9uc2hpcFR1cGxlRXZpZGVuY2USOwoIY2hpbGRyZW4YBSADKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uIt8BCglPcGVyYXRpb24SGQoVT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASFAoQT1BFUkFUSU9OX0RJUkVDVBABEh4KGk9QRVJBVElPTl9DT01QVVRFRF9VU0VSU0VUEAISHgoaT1BFUkFUSU9OX1RVUExFX1RPX1VTRVJTRVQQAxITCg9PUEVSQVRJT05fVU5JT04QBBIaChZPUEVSQVRJT05fSU5URVJTRUNUSU9OEAUSFwoTT1BFUkFUSU9OX0VYQ0xVU0lPThAGEhcKE09QRVJBVElPTl9DT05ESVRJT04QByJ3ChpBdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxIgChhhdXRob3JpemF0aW9uX21vZGVsX2hhc2gYASABKAkSIQoZcmVsYXRpb25zaGlwX3N0YXRlX2NvbW1pdBgCIAEoCRIUCgxjb250ZXh0X2hhc2gYAyABKAwivgEKGkF1dGhvcml6YXRpb25DaGVja1Jlc3BvbnNlEg8KB2FsbG93ZWQYASABKAgSOgoFYmFzaXMYAiABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSQwoLZXhwbGFuYXRpb24YAyABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uSACIAQFCDgoMX2V4cGxhbmF0aW9uIoMCChtBdXRob3JpemF0aW9uRXhwYW5kUmVzcG9uc2USNwoIc3ViamVjdHMYASADKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSOgoFYmFzaXMYAiABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSEQoEbmV4dBgDIAEoCUgAiAEBEkMKC2V4cGxhbmF0aW9uGAQgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgBiAEBQgcKBV9uZXh0Qg4KDF9leHBsYW5hdGlvbiKoAQoNT3V0Ym94UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei0KBWNsb2NrGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2sSNgoHcHJlcGFyZRgDIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlT3V0Ym91bmRPZmZlciK2AQoLU3luY1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIRCglmcm9tX2Jhc2UYAiABKAkSDwoHdG9faGVhZBgDIAEoCRIaChJwYXJrX3JlZnVzZWRfbG9jYWwYBCABKAgSGAoQcGFya2VkX2F0X21pbGxpcxgFIAEoBBIbChNyZXBsYXlfb2ZmZXJfYnVkZ2V0GAYgASgNItMBChpLZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdBIdChV0cnVzdF9yb290X3B1YmxpY19rZXkYASABKAwSJQoYdHJ1c3RzX2N1c3RvZGlhbl9oaXN0b3J5GAIgASgISACIAQESIAoTZGVmZXJyZWRfZHVyYWJpbGl0eRgDIAEoCEgBiAEBEhgKEGhvc3RfY2FsbF9sZWRnZXIYBCABKAhCGwoZX3RydXN0c19jdXN0b2RpYW5faGlzdG9yeUIWChRfZGVmZXJyZWRfZHVyYWJpbGl0eSKAAQobS2VybmVsQ29uZmlndXJhdGlvblJlc3BvbnNlEi0KBnJlc3VsdBgBIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWQSHQoQaG9zdF9jYWxsX2xlZGdlchgCIAEoDUgAiAEBQhMKEV9ob3N0X2NhbGxfbGVkZ2VyIvMRCg5DdXN0b2R5UmVxdWVzdBI3CgpwYWNrX2RlbHRhGAogASgLMiEubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlcXVlc3RIABI3CgphcHBseV9wYWNrGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1JlcXVlc3RIABI3CgpyZXBvX3N0YXRzGAwgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1JlcXVlc3RIABI9Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlcXVlc3RIABI/Cg5pbnNwZWN0X2NoYW5nZRgOIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVxdWVzdEgAEk4KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLC5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASUAoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAEjUKCXJlYWRfYmxvYhgRIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlcXVlc3RIABI5CgtyZXNvbHZlX3JlZhgSIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVxdWVzdEgAEjUKCWxpc3RfcmVmcxgTIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1JlcXVlc3RIABI1Cgl3cml0ZV9yZWYYFCABKAsyIC5ub21vcy5rZXJuZWwudjEuV3JpdGVSZWZSZXF1ZXN0SAASNwoKZGVsZXRlX3JlZhgVIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5EZWxldGVSZWZSZXF1ZXN0SAASRAoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyJy5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVxdWVzdEgAEkIKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXF1ZXN0SAASRQoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlcXVlc3RIABJFChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVxdWVzdEgAEkMKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdEgAEjsKDHJlc3RvcmVfbWFpbhgbIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlcXVlc3RIABJOChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMiwubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdEgAEkcKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlcXVlc3RIABJBCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJi5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXF1ZXN0SAASWgoccHJvdmVfY29tcGFjdGlvbl9lcXVpdmFsZW5jZRgfIAEoCzIyLm5vbW9zLmtlcm5lbC52MS5Qcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3RIABI+Cg5vcGVuX2dpdF9zdGF0ZRggIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5PcGVuR2l0U3RhdGVSZXF1ZXN0SAASTgoWcmVhZF9jdXN0b2R5X3BsYWNlbWVudBghIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5SZWFkQ3VzdG9keVBsYWNlbWVudFJlcXVlc3RIABJUChlpbnNwZWN0X2N1c3RvZHlfcGxhY2VtZW50GCMgASgLMi8ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDdXN0b2R5UGxhY2VtZW50UmVxdWVzdEgAElAKF3JlbGVhc2Vfd29ya3NwYWNlX3N0YXRlGCQgASgLMi0ubm9tb3Mua2VybmVsLnYxLlJlbGVhc2VXb3Jrc3BhY2VTdGF0ZVJlcXVlc3RIABJfCh9yZWNvcmRfd29ya3NwYWNlX2VmZmVjdF9vdXRjb21lGCUgASgLMjQubm9tb3Mua2VybmVsLnYxLlJlY29yZFdvcmtzcGFjZUVmZmVjdE91dGNvbWVSZXF1ZXN0SAASTAoVYXR0YWNoX2xvY2FsX2Zyb250aWVyGCYgASgLMisubm9tb3Mua2VybmVsLnYxLkF0dGFjaExvY2FsRnJvbnRpZXJSZXF1ZXN0SAASQwoQYWdncmVnYXRlX2NlbnN1cxgnIAEoCzInLm5vbW9zLmtlcm5lbC52MS5BZ2dyZWdhdGVDZW5zdXNSZXF1ZXN0SAASPQoNYXVkaXRfY3VzdG9keRgoIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdWRpdEN1c3RvZHlSZXF1ZXN0SAASSAoTZXhwb3J0X2xhd19wcm9kdWN0cxgpIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5FeHBvcnRMYXdQcm9kdWN0c1JlcXVlc3RIABJIChNpbXBvcnRfbGF3X3Byb2R1Y3RzGCogASgLMikubm9tb3Mua2VybmVsLnYxLkltcG9ydExhd1Byb2R1Y3RzUmVxdWVzdEgAQgsKCW9wZXJhdGlvbkoECCIQI1IXYWRvcHRfY3VzdG9keV9wbGFjZW1lbnQiXgoWQWdncmVnYXRlQ2Vuc3VzUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhIKCnR5cGVfbGltaXQYAiABKA0iMQoSQWdncmVnYXRlVHlwZUNvdW50EgwKBHR5cGUYASABKAkSDQoFY291bnQYAiABKAQi+wEKF0FnZ3JlZ2F0ZUNlbnN1c1Jlc3BvbnNlEhEKBGhlYWQYASABKAlIAIgBARIcCg9hZ2dyZWdhdGVfY291bnQYAiABKARIAYgBARIXCgpzdGF0ZV9yb290GAMgASgJSAKIAQESNgoJdG9wX3R5cGVzGAQgAygLMiMubm9tb3Mua2VybmVsLnYxLkFnZ3JlZ2F0ZVR5cGVDb3VudBIdChB0eXBlc19zdGF0ZV9yb290GAUgASgJSAOIAQFCBwoFX2hlYWRCEgoQX2FnZ3JlZ2F0ZV9jb3VudEINCgtfc3RhdGVfcm9vdEITChFfdHlwZXNfc3RhdGVfcm9vdCIoChhSZXNpZGVudEZvb3RwcmludFJlcXVlc3QSDAoEZGVlcBgBIAEoCCL0AwoRUmVzaWRlbnRGb290cHJpbnQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIYChByZWFkX21vZGVsX2J5dGVzGAMgASgEEh0KFXJlYWRfbW9kZWxfcnVzdF9ieXRlcxgEIAEoBBIYChBmb2xkX3N0YXRlX2J5dGVzGAUgASgEEhMKC2ZvbGRfaW1hZ2VzGAYgASgNEh8KF3NoYXJlZF9hdHRyaWJ1dGVkX2J5dGVzGAcgASgEEhIKCmFnZ3JlZ2F0ZXMYCCABKAQSNgoKY29tcG9uZW50cxgJIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudBISCgpjb21wdXRlX3VzGAogASgEEkUKEXJlYWRfc3RvcmFnZV9raW5kGAsgASgOMioubm9tb3Mua2VybmVsLnYxLlJlYWRQcm9qZWN0aW9uU3RvcmFnZUtpbmQSHwoXc3FsaXRlX2NhY2hlX3VzZWRfYnl0ZXMYDCABKAQSGAoQZmxhdF9zY2FsYXJfcm93cxgNIAEoBBIdChVmbGF0X3NjYWxhcl9yb3dzX3JlYWQYDiABKAQSHQoQZnVsbF9yZXBsYXlfaGVhZBgPIAEoCUgAiAEBQhMKEV9mdWxsX3JlcGxheV9oZWFkImkKEVJlc2lkZW50Q29tcG9uZW50EjQKBGtpbmQYASABKA4yJi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRDb21wb25lbnRLaW5kEg0KBWJ5dGVzGAIgASgEEg8KB2NlaWxpbmcYAyABKAgiygEKGVJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2USNQoJcmVzaWRlbnRzGAEgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50EhwKFGFsbG9jYXRvcl9saXZlX2J5dGVzGAIgASgEEhgKEGF0dHJpYnV0ZWRfYnl0ZXMYAyABKAQSGQoRdW5hY2NvdW50ZWRfYnl0ZXMYBCABKAQSFQoNYWNjb3VudGluZ191cxgFIAEoBBIMCgRkZWVwGAYgASgIIuIBChBQYWNrRGVsdGFSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSHQoQc3RhZ2VkX3BhY2tfZmlsZRgFIAEoCUgCiAEBEhIKBWRlcHRoGAYgASgNSAOIAQESEgoKYmVsb3dfaGVhZBgHIAEoCBISCgphbHNvX2hlYWRzGAggAygJQgcKBV9oZWFkQgcKBV9iYXNlQhMKEV9zdGFnZWRfcGFja19maWxlQggKBl9kZXB0aCL6AQoQQXBwbHlQYWNrUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBHBhY2sYAiABKAxIABIaChBzdGFnZWRfcGFja19maWxlGAQgASgJSAASGgoQY29udGludWVfcGVuZGluZxgIIAEoCEgAEhgKDmNhbmNlbF9wZW5kaW5nGAogASgISAASEQoEaGVhZBgDIAEoCUgBiAEBEg8KB3NoYWxsb3cYBSADKAkSEQoJdW5zaGFsbG93GAYgAygJEhkKEXdvcmtfYnVkZ2V0X2J5dGVzGAcgASgEEhEKCWltcG9ydF9pZBgJIAEoBEIICgZzb3VyY2VCBwoFX2hlYWQiIAoQUmVwb1N0YXRzUmVxdWVzdBIMCgRyZXBvGAEgASgJIr8BChNJbnRlbnRzQWJvdmVSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSDQoFbGltaXQYBSABKAQSGAoQY29tcGxldGVfbG9naWNhbBgGIAEoCBIWCg5jb21wYWN0X3N0b3JlZBgHIAEoCBIRCglmcm9tX2Jhc2UYCCABKAhCBwoFX2hlYWRCBwoFX2Jhc2UibQoVSGlzdG9yeVN1bW1hcnlSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEg4KBmJyYW5jaBgDIAEoCRIRCgRiYXNlGAQgASgJSAGIAQFCBwoFX2hlYWRCBwoFX2Jhc2UiKwoUSW5zcGVjdENoYW5nZVJlcXVlc3QSEwoLY2hhbmdlX3VzZGEYASABKAwi3wEKDlJlZnVzYWxWZXJkaWN0EhUKCG9mZmVyX2lkGAEgASgJSACIAQESEAoDb2lkGAIgASgJSAGIAQESEwoGZG9tYWluGAMgASgJSAKIAQESGQoMZGlyZWN0aXZlX2lkGAQgASgJSAOIAQESFAoHc2Vzc2lvbhgFIAEoCUgEiAEBEhEKCXBhcmtlZF9hdBgGIAEoCRIOCgZyZWFzb24YByABKAlCCwoJX29mZmVyX2lkQgYKBF9vaWRCCQoHX2RvbWFpbkIPCg1fZGlyZWN0aXZlX2lkQgoKCF9zZXNzaW9uIk8KG0VuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdBIwCgd2ZXJkaWN0GAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlJlZnVzYWxWZXJkaWN0IjQKHEluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3QSFAoMdmVyZGljdF91c2RhGAEgASgMItQBChVDb21wYWN0aW9uRXF1aXZhbGVuY2USEwoLc291cmNlX2hlYWQYASABKAkSFgoOc291cmNlX2dlbmVzaXMYAiABKAkSFgoOY2FuZGlkYXRlX2hlYWQYAyABKAkSGQoRY2FuZGlkYXRlX2dlbmVzaXMYBCABKAkSFgoOc291cmNlX2ludGVudHMYBSABKAQSFwoPY2FycmllZF9pbnRlbnRzGAYgASgEEhYKDnBhcmtlZF9pbnRlbnRzGAcgASgEEhIKCmVxdWl2YWxlbnQYCCABKAgifQohUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXF1ZXN0EhMKC3NvdXJjZV9yZXBvGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhYKDmNhbmRpZGF0ZV9yZXBvGAMgASgJEhYKDmNhbmRpZGF0ZV9oZWFkGAQgASgJIjoKD1JlYWRCbG9iUmVxdWVzdBIMCgRyZXBvGAEgASgJEgsKA29pZBgCIAEoCRIMCgRwYXRoGAMgASgJIlAKEVJlc29sdmVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJEhEKBHBhdGgYAyABKAlIAIgBAUIHCgVfcGF0aCI2Cg9QaHlzaWNhbFJlZkZpbGUSEQoJcmVmZXJlbmNlGAEgASgJEhAKCGNvbnRlbnRzGAIgASgMIqcCCg9MaXN0UmVmc1JlcXVlc3QSDAoEcmVwbxgBIAEoCRIOCgZwcmVmaXgYAiABKAkSGAoQbG9vc2VfcmVmZXJlbmNlcxgDIAMoCRIgChhsb29zZV9pbnZlbnRvcnlfY29tcGxldGUYBCABKAgSIAoTcGFja2VkX3JlZnNfcHJlc2VudBgFIAEoCEgAiAEBEj0KE3BoeXNpY2FsX2xvb3NlX3JlZnMYBiADKAsyIC5ub21vcy5rZXJuZWwudjEuUGh5c2ljYWxSZWZGaWxlEhwKFHBoeXNpY2FsX3BhY2tlZF9yZWZzGAcgASgMEiMKG3BoeXNpY2FsX2ludmVudG9yeV9jb21wbGV0ZRgIIAEoCEIWChRfcGFja2VkX3JlZnNfcHJlc2VudCJCCg9Xcml0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSDgoGdGFyZ2V0GAMgASgJIjMKEERlbGV0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiKQoITWV0YUZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIq4BChZXcml0ZU1ldGFDb21taXRSZXF1ZXN0EgwKBHJlcG8YASABKAkSDwoHcGFyZW50cxgCIAMoCRIoCgVmaWxlcxgDIAMoCzIZLm5vbW9zLmtlcm5lbC52MS5NZXRhRmlsZRIPCgdtZXNzYWdlGAQgASgJEhQKDHRpbWVfc2Vjb25kcxgFIAEoEhIWCglyZWZlcmVuY2UYBiABKAlIAIgBAUIMCgpfcmVmZXJlbmNlImcKFUxhd0Nsb3N1cmVJbmZvUmVxdWVzdBIUCgxjbG9zdXJlX2ZpbGUYASABKAkSOAoKY2FwYWJpbGl0eRgCIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxMYXdDYXBhYmlsaXR5IocBChdDaGVja3BvaW50RXhwb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EiEKFHN0YWdlZF9mcm9udGllcl9maWxlGAIgASgJSACIAQFCFwoVX3N0YWdlZF9mcm9udGllcl9maWxlIkEKC0Zyb250aWVySGxjEhAKCHBoeXNpY2FsGAEgASgEEg8KB2xvZ2ljYWwYAiABKA0SDwoHcmVwbGljYRgDIAEoBCLtBAoXVmVyaWZpZWRGcm9udGllclJlY2VpcHQSFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SCwoDb2lkGAIgASgJEg8KB2ludGVudHMYAyABKAQSEwoLcGxhbnNfcmVydW4YBCABKAQSHAoPY29udHJvbGxlcl9oYXNoGAUgASgJSACIAQESGQoRaW5zdGFsbGVkX2RvbWFpbnMYBiADKAkSDgoGbGluZWFyGAcgASgIEjMKCGxhc3RfaGxjGAggASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSAGIAQESFAoHbGFzdF9pZBgJIAEoCUgCiAEBEhEKCXN0YXRlX29pZBgKIAEoCRIUCgxzdGF0ZV9zaGEyNTYYCyABKAkSOQoOc3RhdGVfbGFzdF9obGMYDCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIA4gBARIaCg1zdGF0ZV9sYXN0X2lkGA0gASgJSASIAQESFwoPbWFuaWZlc3Rfc2hhMjU2GA4gASgJEh4KFmxhd19jbG9zdXJlX2lkZW50aXRpZXMYDyADKAkSGgoScmVzb2x2YWJsZV9kb21haW5zGBAgAygJEiIKFXByb2plY3Rpb25fc3RhdGVfcm9vdBgRIAEoCUgFiAEBEg4KBndhbGtlZBgSIAEoCEISChBfY29udHJvbGxlcl9oYXNoQgsKCV9sYXN0X2hsY0IKCghfbGFzdF9pZEIRCg9fc3RhdGVfbGFzdF9obGNCEAoOX3N0YXRlX2xhc3RfaWRCGAoWX3Byb2plY3Rpb25fc3RhdGVfcm9vdCJFChVGb2xkRnJvbnRpZXJBZ2dyZWdhdGUSFAoMYWdncmVnYXRlX2lkGAEgASgJEhYKDmFnZ3JlZ2F0ZV91c2RhGAIgASgMIkEKF0ZvbGRGcm9udGllckZpbmdlcnByaW50EhEKCWludGVudF9pZBgBIAEoCRITCgtmaW5nZXJwcmludBgCIAEoCSLWAwoURm9sZEZyb250aWVyU25hcHNob3QSFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SCwoDdGlwGAIgASgJEg8KB2dlbmVzaXMYAyABKAkSFQoNaGlzdG9yeV9kZXB0aBgEIAEoBBI6CgphZ2dyZWdhdGVzGAUgAygLMiYubm9tb3Mua2VybmVsLnYxLkZvbGRGcm9udGllckFnZ3JlZ2F0ZRI4Cg1obGNfd2F0ZXJtYXJrGAYgASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSACIAQESMwoIbGFzdF9obGMYByABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAYgBARIUCgdsYXN0X2lkGAggASgJSAKIAQESFgoOc3RyaWtlX3RhcmdldHMYCSADKAkSRQoTaW50ZW50X2ZpbmdlcnByaW50cxgKIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5Gb2xkRnJvbnRpZXJGaW5nZXJwcmludBIXCgpzdGF0ZV9yb290GAsgASgJSAOIAQFCEAoOX2hsY193YXRlcm1hcmtCCwoJX2xhc3RfaGxjQgoKCF9sYXN0X2lkQg0KC19zdGF0ZV9yb290IpsDChhTdG9yZWRDaGVja3BvaW50TWFuaWZlc3QSFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SEwoGY3Vyc29yGAIgASgJSACIAQESGAoQY2hlY2twb2ludF9ieXRlcxgDIAEoBBIQCghsYXdfaGFzaBgEIAEoCRI7Cgtjb21wcmVzc2lvbhgFIAEoDjImLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50Q29tcHJlc3Npb24SEQoJcmF3X2J5dGVzGAYgASgEEhQKDHN0b3JlZF9ieXRlcxgHIAEoBBIdChVmcm9udGllcl9zdG9yZWRfYnl0ZXMYCCABKAQSFwoKc3RhdGVfcm9vdBgJIAEoCUgBiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCiABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIAogBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IsEDChdDaGVja3BvaW50SW1wb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhIKCGZyb250aWVyGAIgASgMSAASHgoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYBiABKAlIABITCgZjdXJzb3IYAyABKAlIAYgBARIXCgpzdGF0ZV9yb290GAQgASgJSAKIAQESDQoFc3BhbnMYBSABKAgSEQoEaGVhZBgHIAEoCUgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCCABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBARJKChN2ZXJpZmljYXRpb25fcG9saWN5GAkgASgOMi0ubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRWZXJpZmljYXRpb25Qb2xpY3lCEQoPZnJvbnRpZXJfc291cmNlQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCBwoFX2hlYWRCHAoaX3ZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQiMQoWQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdBIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQimQIKElJlc3RvcmVNYWluUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSEwoLZGlhZ25vc3RpY3MYAyABKAgSGAoQb3BlcmF0b3JfY3VzdG9keRgEIAEoCBIgChNleHBlY3RlZF9sb2NhbF9oZWFkGAUgASgJSACIAQESQAoTY3VzdG9keV9jZXJ0aWZpY2F0ZRgGIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5Q2VydGlmaWNhdGUSGAoQcHJvdmlkZXJfY3VzdG9keRgHIAEoCEIWChRfZXhwZWN0ZWRfbG9jYWxfaGVhZCJtChNBdWRpdEN1c3RvZHlSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSFQoNYnVkZ2V0X21pY3JvcxgCIAEoDRINCgVzdGFydBgDIAEoCCKUAQoUQXVkaXRDdXN0b2R5UmVzcG9uc2USDwoHcGVuZGluZxgBIAEoCBIMCgRoZWFkGAIgASgJEg4KBndhbGtlZBgDIAEoBBINCgV0b3RhbBgEIAEoBBIPCgdvdXRjb21lGAUgASgJEi0KB3ZlcmRpY3QYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QifgoLTGF3UHJvZHVjdHMSFAoMbGF3X2lkZW50aXR5GAEgASgJEhYKDmZvcm1hdF92ZXJzaW9uGAIgASgNEhIKCnJlYWRfbGF5ZXIYAyABKAwSFQoNY29tbWFuZF9sYXllchgEIAEoDBIWCg5zZW1hbnRpY19sYXllchgFIAEoDCJMChhFeHBvcnRMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldCJZChlFeHBvcnRMYXdQcm9kdWN0c1Jlc3BvbnNlEgwKBGhlYWQYASABKAkSLgoIcHJvZHVjdHMYAiADKAsyHC5ub21vcy5rZXJuZWwudjEuTGF3UHJvZHVjdHMifAoYSW1wb3J0TGF3UHJvZHVjdHNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSLgoIcHJvZHVjdHMYAiADKAsyHC5ub21vcy5rZXJuZWwudjEuTGF3UHJvZHVjdHMiLQoZSW1wb3J0TGF3UHJvZHVjdHNSZXNwb25zZRIQCghpbXBvcnRlZBgBIAMoCSJvChJDdXN0b2R5Q2VydGlmaWNhdGUSEQoJd29ya3NwYWNlGAEgASgJEgwKBGhlYWQYAiABKAkSEQoJa2V5X2Vwb2NoGAMgASgDEhIKCnB1YmxpY19rZXkYBCABKAwSEQoJc2lnbmF0dXJlGAUgASgMImQKE09wZW5HaXRTdGF0ZVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEg0KBXNwYW5zGAMgASgIImsKGkF0dGFjaExvY2FsRnJvbnRpZXJSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCRINCgVzcGFucxgDIAEoCCJTCg1DdXN0b2R5UmVtb3RlEgwKBG5hbWUYASABKAkSCwoDdXJsGAIgASgJEhUKDXBlZXJfaWRlbnRpdHkYAyABKAkSEAoIcHJpb3JpdHkYBCABKA0ixgEKFEN1c3RvZHlQbGFjZW1lbnRSdWxlEhIKCnBlZXJfY2xhc3MYASABKAkSQAoQa2VybmVsX3Jlc2lkZW5jeRgCIAEoDjImLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZXNpZGVuY3lJbnRlbnQSQgoRY3VzdG9keV9yZXRlbnRpb24YAyABKA4yJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJldGVudGlvbkludGVudBIUCgxyZW1vdGVfbmFtZXMYBCADKAkirgIKFkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kSEwoLZGVjbGFyYXRpb24YASABKAkSFgoOcGFja2FnZV9zaGEyNTYYAiABKAkSNAoFcnVsZXMYAyADKAsyJS5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFJ1bGUSEgoKYWRvcHRlZF9ieRgEIAEoCRIOCgZyZWFzb24YBSABKAkSHgoWZWZmZWN0aXZlX3RpbWVfc2Vjb25kcxgGIAEoEhIvCgdyZW1vdGVzGAcgAygLMh4ubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlSZW1vdGUSIgoVcmVjaXBpZW50X21haWxib3hfdXJsGAggASgJSACIAQFCGAoWX3JlY2lwaWVudF9tYWlsYm94X3VybCJZChtDdXN0b2R5UGxhY2VtZW50RXhwZWN0YXRpb24SEAoGYWJzZW50GAEgASgISAASDQoDb2lkGAIgASgJSAASDQoDYW55GAMgASgISABCCgoIZnJvbnRpZXIiKwobUmVhZEN1c3RvZHlQbGFjZW1lbnRSZXF1ZXN0EgwKBHJlcG8YASABKAkiNQoeSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXF1ZXN0EhMKC3BvbGljeV91c2RhGAEgASgMIokBCg5QbGFjZW1lbnRPZmZlchI+CghleHBlY3RlZBgBIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UGxhY2VtZW50RXhwZWN0YXRpb24SNwoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiaQobUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJbWFpbl9oZWFkGAIgASgJEhUKDWhpbnRlZF9jb21taXQYAyABKAkSEgoKc3RhdGVfcm9vdBgEIAEoCSKFEgoPQ3VzdG9keVJlc3BvbnNlEjgKCnBhY2tfZGVsdGEYCiABKAsyIi5ub21vcy5rZXJuZWwudjEuUGFja0RlbHRhUmVzcG9uc2VIABI4CgphcHBseV9wYWNrGAsgASgLMiIubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1Jlc3BvbnNlSAASOAoKcmVwb19zdGF0cxgMIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXNwb25zZUgAEj4KDWludGVudHNfYWJvdmUYDSABKAsyJS5ub21vcy5rZXJuZWwudjEuSW50ZW50c0Fib3ZlUmVzcG9uc2VIABJACg5pbnNwZWN0X2NoYW5nZRgOIAEoCzImLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVzcG9uc2VIABJPChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2VIABJRChdpbnNwZWN0X3JlZnVzYWxfdmVyZGljdBgQIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAEjYKCXJlYWRfYmxvYhgRIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlc3BvbnNlSAASOgoLcmVzb2x2ZV9yZWYYEiABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlc3BvbnNlSAASNgoJbGlzdF9yZWZzGBMgASgLMiEubm9tb3Mua2VybmVsLnYxLkxpc3RSZWZzUmVzcG9uc2VIABIyCgl3cml0ZV9yZWYYFCABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkSAASMwoKZGVsZXRlX3JlZhgVIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABJFChF3cml0ZV9tZXRhX2NvbW1pdBgWIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5Xcml0ZU1ldGFDb21taXRSZXNwb25zZUgAEkMKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJy5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfaW1wb3J0GBkgASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRJbXBvcnRSZXNwb25zZUgAEkQKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2VIABI8CgxyZXN0b3JlX21haW4YGyABKAsyJC5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXNwb25zZUgAEk8KFnJlc29sdmVfc3RhdGVfcG9zaXRpb24YHCABKAsyLS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZUgAEkgKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlc3BvbnNlSAASQgoPaGlzdG9yeV9zdW1tYXJ5GB4gASgLMicubm9tb3Mua2VybmVsLnYxLkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2VIABJbChxwcm92ZV9jb21wYWN0aW9uX2VxdWl2YWxlbmNlGB8gASgLMjMubm9tb3Mua2VybmVsLnYxLlByb3ZlQ29tcGFjdGlvbkVxdWl2YWxlbmNlUmVzcG9uc2VIABI/Cg5vcGVuX2dpdF9zdGF0ZRggIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5PcGVuR2l0U3RhdGVSZXNwb25zZUgAEk8KFnJlYWRfY3VzdG9keV9wbGFjZW1lbnQYISABKAsyLS5ub21vcy5rZXJuZWwudjEuUmVhZEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZUgAElUKGWluc3BlY3RfY3VzdG9keV9wbGFjZW1lbnQYIyABKAsyMC5ub21vcy5rZXJuZWwudjEuSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZUgAElEKF3JlbGVhc2Vfd29ya3NwYWNlX3N0YXRlGCQgASgLMi4ubm9tb3Mua2VybmVsLnYxLlJlbGVhc2VXb3Jrc3BhY2VTdGF0ZVJlc3BvbnNlSAASWgofcmVjb3JkX3dvcmtzcGFjZV9lZmZlY3Rfb3V0Y29tZRglIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWVIABJNChVhdHRhY2hfbG9jYWxfZnJvbnRpZXIYJiABKAsyLC5ub21vcy5rZXJuZWwudjEuQXR0YWNoTG9jYWxGcm9udGllclJlc3BvbnNlSAASRAoQYWdncmVnYXRlX2NlbnN1cxgnIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5BZ2dyZWdhdGVDZW5zdXNSZXNwb25zZUgAEj4KDWF1ZGl0X2N1c3RvZHkYKCABKAsyJS5ub21vcy5rZXJuZWwudjEuQXVkaXRDdXN0b2R5UmVzcG9uc2VIABJJChNleHBvcnRfbGF3X3Byb2R1Y3RzGCkgASgLMioubm9tb3Mua2VybmVsLnYxLkV4cG9ydExhd1Byb2R1Y3RzUmVzcG9uc2VIABJJChNpbXBvcnRfbGF3X3Byb2R1Y3RzGCogASgLMioubm9tb3Mua2VybmVsLnYxLkltcG9ydExhd1Byb2R1Y3RzUmVzcG9uc2VIAEILCglvcGVyYXRpb25KBAgiECNSF2Fkb3B0X2N1c3RvZHlfcGxhY2VtZW50InAKEVBhY2tEZWx0YVJlc3BvbnNlEgwKBHBhY2sYASABKAwSDQoFYnl0ZXMYAiABKAQSDwoHc2hhbGxvdxgDIAMoCRIPCgdjb21taXRzGAQgASgNEg0KBXRyZWVzGAUgASgNEg0KBWJsb2JzGAYgASgNIuIBChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJEjsKB2Nsb3N1cmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUGh5c2ljYWxDbG9zdXJlQ2hlY2tIAIgBARIWCg5pbXBvcnRfcGVuZGluZxgEIAEoCBIXCg93b3JrX2RvbmVfYnl0ZXMYBSABKAQSEQoJaW1wb3J0X2lkGAYgASgEEhcKD2ltcG9ydF9kZWZlcnJlZBgHIAEoCEIKCghfY2xvc3VyZSJtChRQaHlzaWNhbENsb3N1cmVDaGVjaxIWCg5yZXVzZWRfcmVjZWlwdBgBIAEoCBIUCgxjb21taXRzX3JlYWQYAiABKAQSEgoKdHJlZXNfcmVhZBgDIAEoBBITCgtsZWF2ZXNfcmVhZBgEIAEoBCK4AQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEEg8KB3NoYWxsb3cYCCADKAki4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkInQKFkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2USDAoEaGVhZBgBIAEoCRIOCgZvbGRlc3QYAiABKAkSFAoMY29tbWl0X2NvdW50GAMgASgEEhAKCGNvbXBsZXRlGAQgASgIEhQKDHJlYWNoZWRfYmFzZRgFIAEoCCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCJ1CiJQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlEjgKCGV2aWRlbmNlGAEgASgLMiYubm9tb3Mua2VybmVsLnYxLkNvbXBhY3Rpb25FcXVpdmFsZW5jZRIVCg1ldmlkZW5jZV91c2RhGAIgASgMIi8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLfAwoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCyABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IusCChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIEjcKCWFzc3VyYW5jZRgKIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhIKCnJlYWRfcmVhZHkYCyABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIsABChRPcGVuR2l0U3RhdGVSZXNwb25zZRIOCgZvcGVuZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPYWdncmVnYXRlX2NvdW50GAMgASgEEisKBXNwYW5zGAQgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhMKBmN1cnNvchgFIAEoCUgBiAEBEhIKCnJlYWRfcmVhZHkYBiABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIukBChtBdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2USEAoIYXR0YWNoZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESDAoEaGVhZBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBISCgpyZWFkX3JlYWR5GAcgASgIEhwKFGZvcmVpZ25fc291cmNlX3JlYWR5GAggASgIQgkKB19yZWFzb24iMQocUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVxdWVzdBIRCgl3b3Jrc3BhY2UYASABKAkiMQodUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2USEAoIcmVsZWFzZWQYASABKAgiiwEKHFJlYWRDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2USFQoIZnJvbnRpZXIYASABKAlIAIgBARI8CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeUgBiAEBQgsKCV9mcm9udGllckIJCgdfcG9saWN5Il0KEFBsYWNlbWVudEFkb3B0ZWQSEAoIZnJvbnRpZXIYASABKAkSNwoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiWgofSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZRI3CgZwb2xpY3kYASABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyLvAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EjcKCWFzc3VyYW5jZRgGIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhAKCGFjY2VwdGVkGAcgASgIIpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASI6Cg9IaXN0b3J5UmVxdWlyZWQSEQoJd29ya3NwYWNlGAEgASgJEhQKDHVudGlsX2NvbW1pdBgCIAEoCSpuCg9MYXdWZXJzaW9uT3JkZXISIQodTEFXX1ZFUlNJT05fT1JERVJfVU5TUEVDSUZJRUQQABIbChdMQVdfVkVSU0lPTl9PUkRFUl9FUVVBTBABEhsKF0xBV19WRVJTSU9OX09SREVSX0xPV0VSEAIq6gEKEkJpcnRoT3V0Y29tZVN0YXR1cxIkCiBCSVJUSF9PVVRDT01FX1NUQVRVU19VTlNQRUNJRklFRBAAEh0KGUJJUlRIX09VVENPTUVfU1RBVFVTX0JPUk4QARIhCh1CSVJUSF9PVVRDT01FX1NUQVRVU19ERUZFUlJFRBACEh8KG0JJUlRIX09VVENPTUVfU1RBVFVTX0ZBSUxFRBADEiAKHEJJUlRIX09VVENPTUVfU1RBVFVTX1JFRlVTRUQQBBIpCiVCSVJUSF9PVVRDT01FX1NUQVRVU19VTldBUlJBTlRFRF9DRVJUEAUqzBQKEUtlcm5lbFJlZnVzYWxDb2RlEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfVU5TUEVDSUZJRUQQABIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JBRF9TSUdOQVRVUkUQARIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX1VOQVVUSE9SSVpFRBACEicKI0tFUk5FTF9SRUZVU0FMX0NPREVfUE9MSUNZX0RJU0FCTEVEEAMSKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkNFUlRJRklFRF9QT0xJQ1kQBBIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1JFRkVSRU5USUFMEAUSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0lOVF9TVEFURV9VTkFWQUlMQUJMRRAGEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0VYQ0VFREVEEAcSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfQ09VTlRfVU5BVkFJTEFCTEUQCBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0VWSURFTkNFX1VOQkFDS0VEEAkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PUlBIQU5fUkVDRUlQVBAKEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfUkVDRUlQVF9PTl9URVJNSU5BTF9PQkxJR0FUSU9OEAsSIgoeS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfTUlOVEVEEAwSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fTElGRUNZQ0xFEA0SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9UWVBFX1RBR19NSVNNQVRDSBAOEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfUkVUSVJFRF9SRUFEX1NVUkZBQ0UQDxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NST1NTX1dPUktTUEFDRV9ERUNMSU5FRBAQEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQUdHUkVHQVRFX0lOVkFSSUFOVBAREisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfV09SS1NQQUNFX0lOVkFSSUFOVBASEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9DT05GTElDVBATEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfUkVRVUlSRUQQFBI0CjBLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1VOREVDTEFSRUQQFRIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX0lOVkFMSUQQFhIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1NUQUxFEBcSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1VOREVDTEFSRUQQGBItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfUFJJVkFURRAZEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTkRFQ0xBUkVEEBoSMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9LRVkQGxI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX1NPVVJDRRAcEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9GT1JHRUQQHRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfU1RBTEUQHhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfT1ZFUlNJWkUQHxI3CjNLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRElTSE9OT1JFRF9TT1VSQ0UQIBI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0VRVUlWT0NBVElPTl9FVklERU5DRV9JTlZBTElEECESMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9SRUNFSVBUX0lOVkFMSUQQIhIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9ST1NURVJfTUlTTUFUQ0gQIxIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9FUE9DSF9OT1RfTU9OT1RPTklDECQSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9XUklURV9FUE9DSF9TVEFMRRAlEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfRU5WRUxPUEVfU0lEX01JU01BVENIECYSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVZPS0VEX01FTUJFUl9SRVNVUlJFQ1RFRBAnEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRk9SR0VEX1BSSU5DSVBBTBAoEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfS0VZX0FOQ0hPUhApEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfUkVDT1ZFUlkQKhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1NVUkZBQ0VEX0JBU0lTX0FIRUFEECsSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9TSUdORVJfRVBPQ0hfT1VUX09GX1dJTkRPVxAsEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRVZPTFZFX1JFRlVTRUQQLRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX0lOVkFMSUQQLhItCilLRVJORUxfUkVGVVNBTF9DT0RFX1BBUkVOVF9ESURfTk9UX0FUVEVTVBAvEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfQ0VSVF9DSEFJTl9CUk9LRU4QMBIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX05PVF9ST09URURfQVRfUk9PVBAxEioKJktFUk5FTF9SRUZVU0FMX0NPREVfREVMRUdBVElPTl9JTlZBTElEEDISJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9QTEFOX1JFSkVDVEVEEDMSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fUkVGVVNFRBA0EjEKLUtFUk5FTF9SRUZVU0FMX0NPREVfSU5WQVJJQU5UX0VYRUNVVElPTl9GQVVMVBA1EjUKMUtFUk5FTF9SRUZVU0FMX0NPREVfQ0hFQ0tQT0lOVF9TSUdORVJfVU5BVkFJTEFCTEUQNhIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX09GRkVSX0JBU0VfU1RBTEUQNxIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JJUlRIX1JFRlVTRUQQOCrvAgoQRnVsbFJlc3VsdFJlYXNvbhIiCh5GVUxMX1JFU1VMVF9SRUFTT05fVU5TUEVDSUZJRUQQABIeChpGVUxMX1JFU1VMVF9SRUFTT05fTk9fQkFTRRABEiIKHkZVTExfUkVTVUxUX1JFQVNPTl9MQVdfQ0hBTkdFRBACEi0KKUZVTExfUkVTVUxUX1JFQVNPTl9SRUFEX0FVVEhPUklUWV9DSEFOR0VEEAMSKQolRlVMTF9SRVNVTFRfUkVBU09OX1BFUl9SRUNPUkRfUkVGVVNBTBAEEiMKH0ZVTExfUkVTVUxUX1JFQVNPTl9PUkRFUkVEX1JFQUQQBRImCiJGVUxMX1JFU1VMVF9SRUFTT05fVEVNUE9SQUxfRklFTERTEAYSJwojRlVMTF9SRVNVTFRfUkVBU09OX0JBU0VfVU5BVkFJTEFCTEUQBxIjCh9GVUxMX1JFU1VMVF9SRUFTT05fTEVHQUNZX1NUQVRFEAgqyQEKE0ludGVyZmFjZU1lbWJlcktpbmQSJQohSU5URVJGQUNFX01FTUJFUl9LSU5EX1VOU1BFQ0lGSUVEEAASIAocSU5URVJGQUNFX01FTUJFUl9LSU5EX0RPTUFJThABEiMKH0lOVEVSRkFDRV9NRU1CRVJfS0lORF9ESVJFQ1RJVkUQAhIjCh9JTlRFUkZBQ0VfTUVNQkVSX0tJTkRfQUdHUkVHQVRFEAMSHwobSU5URVJGQUNFX01FTUJFUl9LSU5EX0ZJRUxEEAQqiAIKHEludGVyZmFjZUNvbXBhdGliaWxpdHlTdGF0dXMSLgoqSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX1VOU1BFQ0lGSUVEEAASKAokSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX0VYQUNUEAESLQopSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX0NPTVBBVElCTEUQAhIuCipJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9TVEFUVVNfVU5BVkFJTEFCTEUQAxIvCitJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9TVEFUVVNfSU5DT01QQVRJQkxFEAQqwwMKHEludGVyZmFjZUNvbXBhdGliaWxpdHlSZWFzb24SLgoqSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1VOU1BFQ0lGSUVEEAASMQotSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX0RPTUFJTl9NSVNTSU5HEAESMQotSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX01FTUJFUl9NSVNTSU5HEAISMAosSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX0ZJRUxEX01JU1NJTkcQAxI1CjFJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9SRUFTT05fVkFMVUVfS0lORF9DSEFOR0VEEAQSNwozSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1JFUVVJUkVEX0lOUFVUX0FEREVEEAUSMQotSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX01BVFJJWF9JTlZBTElEEAYSOAo0SU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1dJUkVfQ09OVFJBQ1RfQ0hBTkdFRBAHKrcCChBNYWludGVuYW5jZVBoYXNlEiEKHU1BSU5URU5BTkNFX1BIQVNFX1VOU1BFQ0lGSUVEEAASJAogTUFJTlRFTkFOQ0VfUEhBU0VfUkVBRF9ET0NVTUVOVFMQARIiCh5NQUlOVEVOQU5DRV9QSEFTRV9TUUxJVEVfSU5ERVgQAhImCiJNQUlOVEVOQU5DRV9QSEFTRV9DT01NQU5EX0ZST05USUVSEAMSIwofTUFJTlRFTkFOQ0VfUEhBU0VfQ09NTUFORF9ST1VURRAEEiEKHU1BSU5URU5BTkNFX1BIQVNFX0dJVF9DVVNUT0RZEAUSJgoiTUFJTlRFTkFOQ0VfUEhBU0VfUkVBRF9JTkRFWF9DQUNIRRAGEh4KGk1BSU5URU5BTkNFX1BIQVNFX0NPTVBMRVRFEAcqigEKD1ZlcmlmeUNoYWluV2FsaxIhCh1WRVJJRllfQ0hBSU5fV0FMS19VTlNQRUNJRklFRBAAEhoKFlZFUklGWV9DSEFJTl9XQUxLX0ZVTEwQARIcChhWRVJJRllfQ0hBSU5fV0FMS19TVUZGSVgQAhIaChZWRVJJRllfQ0hBSU5fV0FMS19NRU1PEAMqcAoYRWZmZWN0RXhlY3V0aW9uUGxhY2VtZW50EioKJkVGRkVDVF9FWEVDVVRJT05fUExBQ0VNRU5UX1VOU1BFQ0lGSUVEEAASKAokRUZGRUNUX0VYRUNVVElPTl9QTEFDRU1FTlRfQ1VTVE9ESUFOEAEqdgoaRWZmZWN0RXhlY3V0aW9uQ2FyZGluYWxpdHkSLAooRUZGRUNUX0VYRUNVVElPTl9DQVJESU5BTElUWV9VTlNQRUNJRklFRBAAEioKJkVGRkVDVF9FWEVDVVRJT05fQ0FSRElOQUxJVFlfU0lOR0xFVE9OEAEqtwEKF01vZGVsTGlmZWN5Y2xlT3BlcmF0aW9uEikKJU1PREVMX0xJRkVDWUNMRV9PUEVSQVRJT05fVU5TUEVDSUZJRUQQABIlCiFNT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX0lOU1RBTEwQARIjCh9NT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX1NUQUdFEAISJQohTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9QUk9NT1RFEAMq3AEKHUNoaWxkV29ya3NwYWNlTGlmZWN5Y2xlU3RhdHVzEjAKLENISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX1VOU1BFQ0lGSUVEEAASKwonQ0hJTERfV09SS1NQQUNFX0xJRkVDWUNMRV9TVEFUVVNfQUNUSVZFEAESLAooQ0hJTERfV09SS1NQQUNFX0xJRkVDWUNMRV9TVEFUVVNfUkVUSVJFRBACEi4KKkNISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX1JFQ0xBSU1FRBADKvgBCiJEZWNsYXJlZEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJLaW5kEjUKMURFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfVU5TUEVDSUZJRUQQABIyCi5ERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1NFTEVDVEVEEAESMgouREVDTEFSRURfQVVUSEVOVElDQVRJT05fUFJPVklERVJfS0lORF9FTlJPTExFRBACEjMKL0RFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfU09WRVJFSUdOEAMqigEKFURlY2xhcmVkTGF3TWVtYmVyS2luZBIoCiRERUNMQVJFRF9MQVdfTUVNQkVSX0tJTkRfVU5TUEVDSUZJRUQQABIkCiBERUNMQVJFRF9MQVdfTUVNQkVSX0tJTkRfQ09NTUFORBABEiEKHURFQ0xBUkVEX0xBV19NRU1CRVJfS0lORF9SRUFEEAIqiwYKH1Byb3ZpZGVyVG9rZW5WZXJpZmljYXRpb25TdGF0dXMSMgouUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19VTlNQRUNJRklFRBAAEiwKKFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVkFMSUQQARI2CjJQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PX01BVENISU5HX0tFWRACEi4KKlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfRVhQSVJFRBADEjQKMFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfTk9UX1lFVF9WQUxJRBAEEjYKMlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfSVNTVUVSX01JU01BVENIEAUSOAo0UFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19BVURJRU5DRV9NSVNNQVRDSBAGEjQKMFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfQkFEX1NJR05BVFVSRRAHEjAKLFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfTUFMRk9STUVEEAgSPAo4UFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19VTlNVUFBPUlRFRF9BTEdPUklUSE0QCRIuCipQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0JBRF9LRVkQChI2CjJQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX01JU1NJTkdfU1VCSkVDVBALEjIKLlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfTk9fVkVSSUZJRVIQDBI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX01JU1NJTkdfVE9LRU4QDSrIAQoSRGV2aWNlU2lnbmVyU3RhdHVzEiQKIERFVklDRV9TSUdORVJfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHwobREVWSUNFX1NJR05FUl9TVEFUVVNfQUNUSVZFEAESHwobREVWSUNFX1NJR05FUl9TVEFUVVNfQUJTRU5UEAISIAocREVWSUNFX1NJR05FUl9TVEFUVVNfUkVWT0tFRBADEigKJERFVklDRV9TSUdORVJfU1RBVFVTX0tFWV9VTkFWQUlMQUJMRRAEKtcBChNCaXJ0aEV2aWRlbmNlU3RhdHVzEiUKIUJJUlRIX0VWSURFTkNFX1NUQVRVU19VTlNQRUNJRklFRBAAEiYKIkJJUlRIX0VWSURFTkNFX1NUQVRVU19OT1RfUkVRVUlSRUQQARIfChtCSVJUSF9FVklERU5DRV9TVEFUVVNfUkVBRFkQAhItCilCSVJUSF9FVklERU5DRV9TVEFUVVNfREVMRUdBVElPTl9SRVFVSVJFRBADEiEKHUJJUlRIX0VWSURFTkNFX1NUQVRVU19JTlZBTElEEAQqsgEKEVF1ZXJ5UmVzdWx0Rm9ybWF0EiMKH1FVRVJZX1JFU1VMVF9GT1JNQVRfVU5TUEVDSUZJRUQQABIkCiBRVUVSWV9SRVNVTFRfRk9STUFUX0xFR0FDWV9WQUxVRRABEiQKIFFVRVJZX1JFU1VMVF9GT1JNQVRfTk9NSU5BTF9VU0RBEAISLAooUVVFUllfUkVTVUxUX0ZPUk1BVF9BUFBMSUNBVElPTl9QUk9UT0JVRhADKpUMCg5RdWVyeU9wZXJhdGlvbhIfChtRVUVSWV9PUEVSQVRJT05fVU5TUEVDSUZJRUQQABIcChhRVUVSWV9PUEVSQVRJT05fRVhUUkVNVU0QARIgChxRVUVSWV9PUEVSQVRJT05fUkVBRF9QT1NUVVJFEAQSHwobUVVFUllfT1BFUkFUSU9OX0NVUlJFTlRfTEFXEAUSIwofUVVFUllfT1BFUkFUSU9OX0lOVEVSRkFDRV9PRkZFUhAGEicKI1FVRVJZX09QRVJBVElPTl9SRUxBVElPTl9HQVRFX09GRkVSEAcSHQoZUVVFUllfT1BFUkFUSU9OX1NDRU5FX0xBVxAIEiEKHVFVRVJZX09QRVJBVElPTl9JTlNUQUxMRURfTEFXEAkSHAoYUVVFUllfT1BFUkFUSU9OX0RFU0NSSUJFEAoSIwofUVVFUllfT1BFUkFUSU9OX0tFUk5FTF9SRVNPVVJDRRALEiMKH1FVRVJZX09QRVJBVElPTl9ERVZFTE9QRVJfU1BBTlMQDBIpCiVRVUVSWV9PUEVSQVRJT05fREVDTEFSRURfQ0FQQUJJTElUSUVTEA0SHQoZUVVFUllfT1BFUkFUSU9OX1JFQURJTkVTUxAOEiQKIFFVRVJZX09QRVJBVElPTl9QUk9KRUNUSU9OX1NUQVRTEA8SJQohUVVFUllfT1BFUkFUSU9OX01FTU9SWV9EUk9QX1BST0JFEBASGAoUUVVFUllfT1BFUkFUSU9OX1dBUk0QERIbChdRVUVSWV9PUEVSQVRJT05fUkVGUkVTSBASEiAKHFFVRVJZX09QRVJBVElPTl9WRVJJRllfQ0hBSU4QExIiCh5RVUVSWV9PUEVSQVRJT05fQ09VTlRFUkZBQ1RVQUwQFBIZChVRVUVSWV9PUEVSQVRJT05fUk9VVEUQFRIlCiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1NFQUxfRklFTEQQGBIsCihRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX0JMSU5EX0lOREVYX1RPS0VOEBkSKgomUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9TQ09QRV9LRVkQGhIvCitRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX0RFVklDRV9SRVFVRVNUEBsSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX0FQUFJPVkFMEBwSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX1JFQ09WRVJZEB0SIAocUVVFUllfT1BFUkFUSU9OX1JFQ0VJUFRfUEFUSBAiEh0KGVFVRVJZX09QRVJBVElPTl9DRVJUX1NJR04QIxIlCiFRVUVSWV9PUEVSQVRJT05fQklSVEhfVFJVU1RfU1RBVEUQJBIhCh1RVUVSWV9PUEVSQVRJT05fRVJBX0NFUlRfU0lHThAlEigKJFFVRVJZX09QRVJBVElPTl9ERUxFR0FUSU9OX0NFUlRfU0lHThAmEikKJVFVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfRlJPTlRJRVIQJxIrCidRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX1BST0pFQ1RJT04QKCIECAIQAiIECAMQAyIECBYQFiIECBcQFyIECB4QHiIECB8QHyIECCAQICIECCEQISohUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RTKihRVUVSWV9PUEVSQVRJT05fUEVORElOR19DT05GTElDVF9TVU1NQVJZKhRRVUVSWV9PUEVSQVRJT05fTUlOVCodUVVFUllfT1BFUkFUSU9OX0NSWVBUT19LRVlHRU4qH1FVRVJZX09QRVJBVElPTl9DUllQVE9fV1JBUF9LRVkqIVFVRVJZX09QRVJBVElPTl9DUllQVE9fVU5XUkFQX0tFWSodUVVFUllfT1BFUkFUSU9OX0FVVEhPUl9LRVlHRU4qIFFVRVJZX09QRVJBVElPTl9BVFRFU1RBVElPTl9TSUdOKqkBChlSZWFkUHJvamVjdGlvblN0b3JhZ2VLaW5kEiwKKFJFQURfUFJPSkVDVElPTl9TVE9SQUdFX0tJTkRfVU5TUEVDSUZJRUQQABIpCiVSRUFEX1BST0pFQ1RJT05fU1RPUkFHRV9LSU5EX1JFU0lERU5UEAESMwovUkVBRF9QUk9KRUNUSU9OX1NUT1JBR0VfS0lORF9GSUxFX0JBQ0tFRF9TQ0FMQVIQAirSAgoVUmVzaWRlbnRDb21wb25lbnRLaW5kEicKI1JFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1VOU1BFQ0lGSUVEEAASJgoiUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfRk9MRF9TVEFURRABEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfU1FMSVRFEAISLgoqUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfUkVBRF9NT0RFTF9JTkRFWEVTEAMSLQopUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfU0hBUkVEX0FUVFJJQlVURUQQBBIsCihSRVNJREVOVF9DT01QT05FTlRfS0lORF9XT1JLU1BBQ0VfQ0FDSEVTEAUSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfR0lUX09CSkVDVF9DQUNIRRAGKmwKE0tlcm5lbExhd0NhcGFiaWxpdHkSJQohS0VSTkVMX0xBV19DQVBBQklMSVRZX1VOU1BFQ0lGSUVEEAASLgoqS0VSTkVMX0xBV19DQVBBQklMSVRZX1NUQUdFX1pFUk9fQk9PVFNUUkFQEAEqWQoVQ2hlY2twb2ludENvbXByZXNzaW9uEh8KG0NIRUNLUE9JTlRfQ09NUFJFU1NJT05fTk9ORRAAEh8KG0NIRUNLUE9JTlRfQ09NUFJFU1NJT05fR1pJUBABKpEBChxDaGVja3BvaW50VmVyaWZpY2F0aW9uUG9saWN5EjMKL0NIRUNLUE9JTlRfVkVSSUZJQ0FUSU9OX1BPTElDWV9WRVJJRllfQ0FOT05JQ0FMEAASPAo4Q0hFQ0tQT0lOVF9WRVJJRklDQVRJT05fUE9MSUNZX1RSVVNUX1BSRVZJT1VTTFlfVkVSSUZJRUQQASqAAQoTQ2hlY2twb2ludEFzc3VyYW5jZRIkCiBDSEVDS1BPSU5UX0FTU1VSQU5DRV9VTlNQRUNJRklFRBAAEiAKHENIRUNLUE9JTlRfQVNTVVJBTkNFX1RSVVNURUQQARIhCh1DSEVDS1BPSU5UX0FTU1VSQU5DRV9WRVJJRklFRBACKokBChVLZXJuZWxSZXNpZGVuY3lJbnRlbnQSJwojS0VSTkVMX1JFU0lERU5DWV9JTlRFTlRfVU5TUEVDSUZJRUQQABIgChxLRVJORUxfUkVTSURFTkNZX0lOVEVOVF9XQVJNEAESJQohS0VSTkVMX1JFU0lERU5DWV9JTlRFTlRfT05fREVNQU5EEAIqrgEKFkN1c3RvZHlSZXRlbnRpb25JbnRlbnQSKAokQ1VTVE9EWV9SRVRFTlRJT05fSU5URU5UX1VOU1BFQ0lGSUVEEAASIwofQ1VTVE9EWV9SRVRFTlRJT05fSU5URU5UX1JFVEFJThABEiIKHkNVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9DQUNIRRACEiEKHUNVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9OT05FEAMqqAEKGkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50EiwKKElOVEVOVF9UUkFOU1BPUlRfUkVRVUlSRU1FTlRfVU5TUEVDSUZJRUQQABIuCipJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1NFQUxFRF9DSEFOR0UQARIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX0NPTU1JVF9UUkVFEAIqiQEKFUxpZmVjeWNsZUluc3RhbGxQaGFzZRInCiNMSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9VTlNQRUNJRklFRBAAEiIKHkxJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX0FDVElWRRABEiMKH0xJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX1BFTkRJTkcQAjJZChJOb21vc0tlcm5lbFNlcnZpY2USQwoEQ2FsbBIcLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVxdWVzdBodLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVzcG9uc2ViBnByb3RvMw", [file_google_protobuf_any]);
7989
+ var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEixgkKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEkAKCWNvbmZpZ3VyZRgQIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdEgAEkgKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYESABKAsyKS5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0SAASSgoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVxdWVzdEgAEk4KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YEyABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXF1ZXN0SAASTgoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgUIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3RIABJDChBzaWduaW5nX2lkZW50aXR5GBcgASgLMicubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdJZGVudGl0eVJlcXVlc3RIABJWChpzaWduX2F1dGhvcml0eV9hdHRlc3RhdGlvbhgYIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0SAASPAoNbWludF90eXBlZF9pZBgZIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlcXVlc3RIABJJChNlbmNyeXB0aW9uX2lkZW50aXR5GBogASgLMioubm9tb3Mua2VybmVsLnYxLkVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3RIABI+Cg53cmFwX3Njb3BlX2tleRgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5XcmFwU2NvcGVLZXlSZXF1ZXN0SAASQgoQdW53cmFwX3Njb3BlX2tleRgcIAEoCzImLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlcXVlc3RIAEILCglvcGVyYXRpb25KBAgVEBZKBAgWEBdSFGluaXRpYWxpemVfd29ya3NwYWNlUhZhcHBseV93b3Jrc3BhY2VfZWZmZWN0IoMKCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASQQoJY29uZmlndXJlGBEgASgLMiwubm9tb3Mua2VybmVsLnYxLktlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZUgAEkkKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZUgAEksKFHByZXBhcmVfcmVtb3RlX29mZmVyGBMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlSAASTwoWc2lnbl9vZmZlcl9wcmVwYXJhdGlvbhgUIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlSAASTwoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgVIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlSAASRAoQc2lnbmluZ19pZGVudGl0eRgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nSWRlbnRpdHlSZXNwb25zZUgAElcKGnNpZ25fYXV0aG9yaXR5X2F0dGVzdGF0aW9uGBkgASgLMjEubm9tb3Mua2VybmVsLnYxLlNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlSAASPQoNbWludF90eXBlZF9pZBgaIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlc3BvbnNlSAASSgoTZW5jcnlwdGlvbl9pZGVudGl0eRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5FbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZUgAEj8KDndyYXBfc2NvcGVfa2V5GBwgASgLMiUubm9tb3Mua2VybmVsLnYxLldyYXBTY29wZUtleVJlc3BvbnNlSAASQwoQdW53cmFwX3Njb3BlX2tleRgdIAEoCzInLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlc3BvbnNlSABCCQoHb3V0Y29tZUoECBYQF0oECBcQGFIUaW5pdGlhbGl6ZV93b3Jrc3BhY2VSFmFwcGx5X3dvcmtzcGFjZV9lZmZlY3QitwIKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSYQoiaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZBgKIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkSACIAQESPwoQaGlzdG9yeV9yZXF1aXJlZBgLIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5UmVxdWlyZWRIAYgBAUIlCiNfaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZEITChFfaGlzdG9yeV9yZXF1aXJlZCJRCh9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSFAoMcmVxdWlyZWRfa2lkGAIgASgJIjwKDE9wZW5SZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiugQKDU9mZmVyUmVzcG9uc2USMgoIYWRtaXR0ZWQYASABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZG1pdHRlZEgAEjAKB3JlZnVzZWQYAiABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZWZ1c2VkSAASOwoNZGVhZF9sZXR0ZXJlZBgDIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckRlYWRMZXR0ZXJlZEgAEjgKC3F1YXJhbnRpbmVkGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLk9mZmVyUXVhcmFudGluZWRIABJKChVibG9ja2VkX29uX2RlcGVuZGVuY3kYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuT2ZmZXJCbG9ja2VkT25EZXBlbmRlbmN5SAASMgoIcHJlcGFyZWQYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJlZEgAEkIKEHdvcmtzcGFjZV9lZmZlY3QYByABKAsyKC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SWRlbnRpdHkSGwoOanVkZ2VkX2F0X2hlYWQYCCABKAlIAYgBARJNChJqdWRnbWVudF9zaWduYXR1cmUYCSABKAsyMS5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmVCCQoHb3V0Y29tZUIRCg9fanVkZ2VkX2F0X2hlYWQifwogV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmUSDwoHdmVyc2lvbhgBIAEoDRISCgpwdWJsaWNfa2V5GAIgASgMEhEKCWtleV9lcG9jaBgDIAEoEhIRCglzaWduYXR1cmUYBCABKAwSEAoIanVkZ21lbnQYBSABKAwiqAEKF1dvcmtzcGFjZUVmZmVjdElkZW50aXR5EhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAIgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAyABKAkSIAoYdGFyZ2V0X3dvcmtzcGFjZV9nZW5lc2lzGAQgASgJEhUKDWVmZmVjdF9kaWdlc3QYBSABKAkiVwocV29ya3NwYWNlRWZmZWN0U3RhdHVzUmVxdWVzdBIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYASABKAkSFQoNZWZmZWN0X2RpZ2VzdBgCIAEoCSJRCh1Xb3Jrc3BhY2VFZmZlY3RTdGF0dXNSZXNwb25zZRIwCghqdWRnbWVudBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlIoYCCiNSZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdBIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEhUKC21haWxib3hfdXJsGAMgASgJSAASPQoRcmVjaXBpZW50X2N1c3RvZHkYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0SAASMAoIanVkZ21lbnQYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUIKCghldmlkZW5jZSJaCh5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWUSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCRIYChB0ZXJtaW5hbF9yZWZ1c2FsGAMgASgIIq4FCg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCBIfChJpbnN0YWxsZWRfbGF3X2hhc2gYCiABKAlIAogBARI5CglwbGFjZW1lbnQYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuUGxhY2VtZW50QWRvcHRlZEgDiAEBEhcKD2FscmVhZHlfYXBwbGllZBgMIAEoCBI8CgxzdGF0ZV9jaGFuZ2UYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuT2ZmZXJTdGF0ZUNoYW5nZUgEiAEBEkAKFGxhd192ZXJzaW9uX3dhcm5pbmdzGA4gAygLMiIubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25XYXJuaW5nQg0KC19pbnRlbnRfb3V0Qg8KDV9rZXJuZWxfc3BhbnNCFQoTX2luc3RhbGxlZF9sYXdfaGFzaEIMCgpfcGxhY2VtZW50Qg8KDV9zdGF0ZV9jaGFuZ2UiIwoLTGF3SWRlbnRpdHkSFAoMcGFja2FnZV9uYW1lGAEgASgJIiQKCkxhd1ZlcnNpb24SFgoOY2xvc3VyZV9zaGEyNTYYASABKAkiIQoPTGF3VmVyc2lvbkNsYWltEg4KBnNlbXZlchgBIAEoCSLgAgoRTGF3VmVyc2lvbldhcm5pbmcSKQoDbGF3GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLkxhd0lkZW50aXR5Ei8KBW9yZGVyGAIgASgOMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25PcmRlchI5Cg9pbnN0YWxsZWRfY2xhaW0YAyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGF3VmVyc2lvbkNsYWltEjYKEWluc3RhbGxlZF92ZXJzaW9uGAQgASgLMhsubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb24SNgoMc2VydmVkX2NsYWltGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25DbGFpbRIzCg5zZXJ2ZWRfdmVyc2lvbhgGIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5MYXdWZXJzaW9uEg8KB21lc3NhZ2UYByABKAkiUgoQT2ZmZXJTdGF0ZUNoYW5nZRITCgtwYXJlbnRfaGVhZBgBIAEoCRIXCg9hZ2dyZWdhdGVfdHlwZXMYAiADKAkSEAoIYXJjaGl2ZXMYAyABKAgiLQoRT2ZmZXJBZ2dyZWdhdGVSZWYSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSIwCg1Cb3JuV29ya3NwYWNlEhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRoZWFkGAIgASgJIssDCgxCaXJ0aE91dGNvbWUSFgoJd29ya3NwYWNlGAEgASgJSACIAQESMwoGc3RhdHVzGAIgASgOMiMubm9tb3Mua2VybmVsLnYxLkJpcnRoT3V0Y29tZVN0YXR1cxITCgZyZWFzb24YAyABKAlIAYgBARIRCgRjb2RlGAQgASgJSAKIAQESEAoIcmVwbGF5ZWQYBSABKAgSFQoIbGF3X2hhc2gYBiABKAlIA4gBARIdChBwYXJlbnRfd29ya3NwYWNlGAcgASgJSASIAQESHAoPY2hpbGRfd29ya3NwYWNlGAggASgJSAWIAQESJwoaY2VydGlmaWNhdGVfcmVmdXNhbF9yZWFzb24YCSABKAlIBogBARI0CgdyZWZ1c2FsGAogASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIMCgpfd29ya3NwYWNlQgkKB19yZWFzb25CBwoFX2NvZGVCCwoJX2xhd19oYXNoQhMKEV9wYXJlbnRfd29ya3NwYWNlQhIKEF9jaGlsZF93b3Jrc3BhY2VCHQobX2NlcnRpZmljYXRlX3JlZnVzYWxfcmVhc29uQgoKCF9yZWZ1c2FsIi8KEEtlcm5lbFNwYW5NZXRyaWMSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoBCKjAQoKS2VybmVsU3BhbhINCgVsYWJlbBgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBBIPCgdyZWNvcmRzGAMgASgEEjEKBnBoYXNlcxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljEjAKBW5vdGVzGAUgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMicQoLS2VybmVsU3BhbnMSLwoKb3BlcmF0aW9ucxgBIAMoCzIbLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuEjEKBmVuZ2luZRgCIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljImEKDURvbWFpblJlZnVzYWwSEgoKbGF3X3NoYTI1NhgBIAEoDBIRCglpbnZhcmlhbnQYAiABKAkSFQoNdHlwZV9pZGVudGl0eRgDIAEoCRISCgp2YWx1ZV91c2RhGAQgASgMIs4BCgxPZmZlclJlZnVzZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIvCgdyZWZ1c2FsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWwSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSNgoOZG9tYWluX3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluUmVmdXNhbEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIsABChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSPQoSYXdhaXRzX21haW50ZW5hbmNlGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleFBlbmRpbmdCCwoJX29mZmVyX2lkIr8BCg1PZmZlclByZXBhcmVkEhwKFGF1dGhvcmVkX2NoYW5nZV91c2RhGAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSIQoZYXV0aG9yX3NpZ25hdHVyZV9yZXF1aXJlZBgEIAEoCBI4CghkZXRhY2hlZBgFIAEoCzImLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25pbmdJbnB1dHMiYwoVRGV0YWNoZWRTaWduaW5nSW5wdXRzEhIKCnB1YmxpY19rZXkYASABKAwSEQoJaW50ZW50X2lkGAIgASgJEg4KBmF1dGhvchgDIAEoDBITCgtvZmZlcl90b2tlbhgEIAEoCSKVAQoURGV0YWNoZWRTaWduZWRDaGFuZ2USHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSEgoKcHVibGljX2tleRgCIAEoDBIYChBhdXRob3Jfc2lnbmF0dXJlGAMgASgMEhIKCm9mZmVyX2Jhc2UYBCABKAkSHQoVb2ZmZXJfdG9rZW5fc2lnbmF0dXJlGAUgASgMImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIq0BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDBIdChVyZXF1aXJlZF9jdXN0b2R5X2hlYWQYBiABKAkiUAoZT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZRIZChF3b3Jrc3BhY2VfYmluZGluZxgBIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAIgASgJIpkBChpQcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZRI/CgljaGFsbGVuZ2UYASABKAsyKi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZUgAEi8KBW9mZmVyGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEIJCgdvdXRjb21lIoABChtTaWduT2ZmZXJQcmVwYXJhdGlvblJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwiRQocU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZRISCgpwdWJsaWNfa2V5GAEgASgMEhEKCXNpZ25hdHVyZRgCIAEoDCKkAQoWU2lnbmluZ0lkZW50aXR5UmVxdWVzdBI7CghnZW5lcmF0ZRgBIAEoCzInLm5vbW9zLmtlcm5lbC52MS5HZW5lcmF0ZVNpZ25pbmdLZXlQYWlySAASQAoNZGVyaXZlX3B1YmxpYxgCIAEoCzInLm5vbW9zLmtlcm5lbC52MS5EZXJpdmVTaWduaW5nUHVibGljS2V5SABCCwoJb3BlcmF0aW9uIhgKFkdlbmVyYXRlU2lnbmluZ0tleVBhaXIiKAoWRGVyaXZlU2lnbmluZ1B1YmxpY0tleRIOCgZzZWNyZXQYASABKAwilgEKF1NpZ25pbmdJZGVudGl0eVJlc3BvbnNlEjQKCWdlbmVyYXRlZBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nS2V5UGFpckgAEjsKDmRlcml2ZWRfcHVibGljGAIgASgLMiEubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdQdWJsaWNLZXlIAEIICgZyZXN1bHQiNAoOU2lnbmluZ0tleVBhaXISDgoGc2VjcmV0GAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiJgoQU2lnbmluZ1B1YmxpY0tleRISCgpwdWJsaWNfa2V5GAEgASgMIpwBCh9TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0EhUKDXNpZ25lcl9zZWNyZXQYASABKAwSGgoSYXNzZXJ0ZXJfd29ya3NwYWNlGAIgASgJEg4KBm9iamVjdBgDIAEoCRIQCghyZWxhdGlvbhgEIAEoCRIPCgdzdWJqZWN0GAUgASgJEhMKC2F0dGVzdGVkX2F0GAYgASgJIkkKIFNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlEhEKCXNpZ25hdHVyZRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkQKEk1pbnRUeXBlZElkUmVxdWVzdBIQCgh0eXBlX3RhZxgBIAEoCRIcChRjYXB0dXJlZF91bml4X21pbGxpcxgCIAEoBCIhChNNaW50VHlwZWRJZFJlc3BvbnNlEgoKAmlkGAEgASgJIhsKGUVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3QiRAoaRW5jcnlwdGlvbklkZW50aXR5UmVzcG9uc2USEgoKc2VjcmV0X2tleRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkYKE1dyYXBTY29wZUtleVJlcXVlc3QSHAoUcmVjaXBpZW50X3B1YmxpY19rZXkYASABKAwSEQoJc2NvcGVfa2V5GAIgASgMIkgKFFdyYXBTY29wZUtleVJlc3BvbnNlEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAEgASgMEhIKCmNpcGhlcnRleHQYAiABKAwiZwoVVW53cmFwU2NvcGVLZXlSZXF1ZXN0EhwKFHJlY2lwaWVudF9zZWNyZXRfa2V5GAEgASgMEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAIgASgMEhIKCmNpcGhlcnRleHQYAyABKAwiKwoWVW53cmFwU2NvcGVLZXlSZXNwb25zZRIRCglzY29wZV9rZXkYASABKAwikwEKDUtlcm5lbFJlZnVzYWwSMAoEY29kZRgBIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsQ29kZRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEAoIdGVybWluYWwYBCABKAgixxAKDVF1ZXJ5UmVzcG9uc2USFQoLcmVzdWx0X3VzZGEYAiABKAxIABIsCgV2YWx1ZRgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEj4KDW9zZ2lfcmVzb3VyY2UYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuT3NnaVJlc291cmNlUmVzcG9uc2VIABJKChNmcm9udGllcl90cmFuc2l0aW9uGA0gASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAASSwoUb3duZWRfZGV2aWNlX3JlcXVlc3QYDiABKAsyKy5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UmVzcG9uc2VIABJPChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUmVzcG9uc2VIABIXCg1pbnRlZ2VyX3ZhbHVlGBAgASgSSAASUAoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgRIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVSZXNwb25zZUgAEkgKEGNoaWxkX3dvcmtzcGFjZXMYEiABKAsyLC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeVJlc3BvbnNlSAASWQoWYXV0aG9yaW5nX3JlcXVpcmVtZW50cxgTIAEoCzI3Lm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNSZXNwb25zZUgAEj4KDXdhcm1fcHJvZ3Jlc3MYFSABKAsyJS5ub21vcy5rZXJuZWwudjEuV2FybVByb2dyZXNzUmVzcG9uc2VIABJVChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGBYgASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2VIABJSChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgXIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2VIABIyChJhcHBsaWNhdGlvbl9yZXN1bHQYGCABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SAASSgoTbWFpbnRlbmFuY2VfcXVhbnR1bRgZIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5NYWludGVuYW5jZVF1YW50dW1SZXNwb25zZUgAEj8KEnJlYWRfaW5kZXhfcGVuZGluZxgaIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkSW5kZXhQZW5kaW5nSAASRwoSZnVsbF9oaXN0b3J5X2F1ZGl0GBsgASgLMikubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRSZXNwb25zZUgAElMKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgcIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2VIABJLChRvcGVuX2FwaV9kZXNjcmlwdGlvbhgdIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5PcGVuQXBpRGVzY3JpcHRpb25SZXNwb25zZUgAElcKGmluc3RhbGxlZF9sYXdfZGVjbGFyYXRpb25zGB4gASgLMjEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlSAASSwoYYXBwbGljYXRpb25fcmVzdWx0X2RlbHRhGB8gASgLMicubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uUmVzdWx0RGVsdGFIABJJChNyZXNvbHZlX2RvbWFpbl9wbGFuGCQgASgLMioubm9tb3Mua2VybmVsLnYxLlJlc29sdmVEb21haW5QbGFuUmVzcG9uc2VIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIcCg9yZXN1bHRfZnJvbnRpZXIYICABKAlIAYgBARJCChJmdWxsX3Jlc3VsdF9yZWFzb24YISABKA4yIS5ub21vcy5rZXJuZWwudjEuRnVsbFJlc3VsdFJlYXNvbkgCiAEBEkMKE3Jlc3VsdF9kZXBlbmRlbmNpZXMYIiABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZERlcGVuZGVuY2llc0gDiAEBEkAKEXJlYWRfaW5kZXhfYmVoaW5kGCMgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleEJlaGluZEgEiAEBQggKBnJlc3VsdEISChBfcmVzdWx0X2Zyb250aWVyQhUKE19mdWxsX3Jlc3VsdF9yZWFzb25CFgoUX3Jlc3VsdF9kZXBlbmRlbmNpZXNCFAoSX3JlYWRfaW5kZXhfYmVoaW5kIoABCg9SZWFkSW5kZXhCZWhpbmQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIXCg9zZXJ2ZWRfZnJvbnRpZXIYAyABKAkSGgoScmVxdWVzdGVkX2Zyb250aWVyGAQgASgJEhUKDXN1Y2Nlc3Nvcl9sYXcYBSABKAgiVAoQUmVhZERlcGVuZGVuY2llcxIXCg9hZ2dyZWdhdGVfdHlwZXMYASADKAkSFgoOcmVhZHNfYXJjaGl2ZXMYAiABKAgSDwoHcmVhZF9hdBgDIAEoCSKCAQoWQXBwbGljYXRpb25SZXN1bHREZWx0YRIVCg1iYXNlX2Zyb250aWVyGAEgASgJEhAKCGZyb250aWVyGAIgASgJEioKDGNoYW5nZWRfcm93cxgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSEwoLcmVtb3ZlZF9pZHMYBCADKAkiMwoaT3BlbkFwaURlc2NyaXB0aW9uUmVzcG9uc2USFQoNZG9jdW1lbnRfanNvbhgBIAEoCSJxChtJbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYASABKAwSMQoPY2FuZGlkYXRlX3VuaXRzGAIgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXQisAIKFkludGVyZmFjZU1lbWJlclZlcmRpY3QSDgoGZG9tYWluGAEgASgJEjIKBGtpbmQYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlTWVtYmVyS2luZBIOCgZtZW1iZXIYAyABKAkSEgoFZmllbGQYBCABKAlIAIgBARI9CgZzdGF0dXMYBSABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVN0YXR1cxI9CgZyZWFzb24YBiABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVJlYXNvbhIXCgpkaWFnbm9zdGljGAcgASgJSAGIAQFCCAoGX2ZpZWxkQg0KC19kaWFnbm9zdGljIsIBCh5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2USEgoKY29tcGF0aWJsZRgBIAEoCBI4CgdtZW1iZXJzGAIgAygLMicubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZU1lbWJlclZlcmRpY3QSGgoSd29ya3NwYWNlX2Zyb250aWVyGAMgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAQgASgJEh4KFmVmZmVjdGl2ZV9sYXdfaWRlbnRpdHkYBSABKAki/wEKFFdhcm1Qcm9ncmVzc1Jlc3BvbnNlEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYASABKAgSJAoXcHJlcGFyZWRfY29tbWFuZF9kb21haW4YAiABKAlIAIgBARIlChhwcmVwYXJlZF9jb21tYW5kX3BhY2thZ2UYAyABKAlIAYgBARImChlwcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yGAQgASgJSAKIAQFCGgoYX3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluQhsKGV9wcmVwYXJlZF9jb21tYW5kX3BhY2thZ2VCHAoaX3ByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IibAoQUmVhZEluZGV4UGVuZGluZxIRCgl3b3Jrc3BhY2UYASABKAkSDgoGYnJhbmNoGAIgASgJEhoKEnJlcXVlc3RlZF9mcm9udGllchgDIAEoCRIZChFsYXN0X3JlYWR5X2Fic2VudBgEIAEoCSLoAgoXTWFpbnRlbmFuY2VRdWFudHVtUXVlcnkSHQoQcmVxdWVzdGVkX2RvbWFpbhgBIAEoCUgAiAEBEh4KEXJlcXVlc3RlZF9wYWNrYWdlGAIgASgJSAGIAQESIAoTcmVxdWVzdGVkX2RpcmVjdGl2ZRgDIAEoCUgCiAEBEhcKD2xvY2FsX3JlYWRfb25seRgEIAEoCBIcChRtYWludGFpbl9naXRfY3VzdG9keRgFIAEoCBIXCg9yZWFkX2luZGV4X29ubHkYBiABKAgSJAocbWFpbnRhaW5fYWRkcmVzc2VkX2Zyb250aWVycxgHIAEoCBIYChBmbHVzaF9kdXJhYmlsaXR5GAggASgIEhkKEWxvY2FsX3dyaXRlX2J1cnN0GAkgASgIQhMKEV9yZXF1ZXN0ZWRfZG9tYWluQhQKEl9yZXF1ZXN0ZWRfcGFja2FnZUIWChRfcmVxdWVzdGVkX2RpcmVjdGl2ZSKiBAoaTWFpbnRlbmFuY2VRdWFudHVtUmVzcG9uc2USEQoJd29ya3NwYWNlGAEgASgJEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYAiABKAgSMAoFcGhhc2UYAyABKA4yIS5ub21vcy5rZXJuZWwudjEuTWFpbnRlbmFuY2VQaGFzZRIZCgxnaXRfZnJvbnRpZXIYBCABKAlIAIgBARIaCg1yZWFkX2Zyb250aWVyGAUgASgJSAGIAQESHAoPc3FsaXRlX2Zyb250aWVyGAYgASgJSAKIAQESEgoKd29ya191bml0cxgHIAEoBBIWCg5lbGFwc2VkX21pY3JvcxgIIAEoBBIkChdwcmVwYXJlZF9jb21tYW5kX2RvbWFpbhgJIAEoCUgDiAEBEiUKGHByZXBhcmVkX2NvbW1hbmRfcGFja2FnZRgKIAEoCUgEiAEBEiYKGXByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IYCyABKAlIBYgBARIeChZsb29zZV9jdXN0b2R5X3ByZXNzdXJlGAwgASgIQg8KDV9naXRfZnJvbnRpZXJCEAoOX3JlYWRfZnJvbnRpZXJCEgoQX3NxbGl0ZV9mcm9udGllckIaChhfcHJlcGFyZWRfY29tbWFuZF9kb21haW5CGwoZX3ByZXBhcmVkX2NvbW1hbmRfcGFja2FnZUIcChpfcHJlcGFyZWRfY29tbWFuZF9zZWxlY3RvciJICg1Pc2dpQXR0cmlidXRlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkSEQoEdHlwZRgDIAEoCUgAiAEBQgcKBV90eXBlIiwKDU9zZ2lEaXJlY3RpdmUSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSKLAQoOT3NnaUNhcGFiaWxpdHkSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUijAEKD09zZ2lSZXF1aXJlbWVudBIRCgluYW1lc3BhY2UYASABKAkSMgoKYXR0cmlidXRlcxgCIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpQXR0cmlidXRlEjIKCmRpcmVjdGl2ZXMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaURpcmVjdGl2ZSKaAQoUT3NnaVJlc291cmNlUmVzcG9uc2USEwoLc291cmNlX3VzZGEYASABKAwSNQoMY2FwYWJpbGl0aWVzGAIgAygLMh8ubm9tb3Mua2VybmVsLnYxLk9zZ2lDYXBhYmlsaXR5EjYKDHJlcXVpcmVtZW50cxgDIAMoCzIgLm5vbW9zLmtlcm5lbC52MS5Pc2dpUmVxdWlyZW1lbnQi5wEKE1ZlcmlmeUNoYWluU3RlcFNwYW4SDQoFaW5kZXgYASABKAQSEgoKY29tbWl0X29pZBgCIAEoCRIOCgZkb21haW4YAyABKAkSEQoJZGlyZWN0aXZlGAQgASgJEhAKCHRvdGFsX3VzGAUgASgEEjYKBnBoYXNlcxgGIAEoCzImLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBQaGFzZXMSQAoOZW5naW5lX3RpbWluZ3MYByADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcimAIKFVZlcmlmeUNoYWluU3RlcFBoYXNlcxIeChZydW50aW1lX2xhd19yZWZyZXNoX3VzGAEgASgEEhMKC21hbmlmZXN0X3VzGAIgASgEEhkKEWxhd19yZXNvbHV0aW9uX3VzGAMgASgEEh0KFW1hbmFnZWRfdHJhbnNpdGlvbl91cxgEIAEoBBIUCgxwcmluY2lwYWxfdXMYBSABKAQSFAoMZXZvbHV0aW9uX3VzGAYgASgEEhoKEmNvbG9jYXRlZF9yZWFkc191cxgHIAEoBBIhChl0eXBlZF9pbnN0YWxsX3ZlcmlmaWVyX3VzGAggASgEEhQKDGFkbWlzc2lvbl91cxgJIAEoBBIPCgdmb2xkX3VzGAogASgEItoFChZWZXJpZnlDaGFpbkRpYWdub3N0aWNzEi4KBHdhbGsYASABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhAKCHRvdGFsX3VzGAIgASgEEhsKE3JlZmVyZW5jZV9sb29rdXBfdXMYAyABKAQSGgoScmVwb3NpdG9yeV9vcGVuX3VzGAQgASgEEhUKDWNoYWluX3JlYWRfdXMYBSABKAQSFgoOZW5naW5lX2luaXRfdXMYBiABKAQSGAoQdGltZWxpbmVfcmVhZF91cxgHIAEoBBIYChBsYXdfaHlkcmF0aW9uX3VzGAggASgEEhsKE3JlY292ZXJ5X3ByZXNjYW5fdXMYCSABKAQSGAoQZm9sZF9mcm9udGllcl91cxgKIAEoBBIzCgVzdGVwcxgLIAMoCzIkLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBTcGFuEkAKDmVuZ2luZV90aW1pbmdzGAwgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nEk0KFWxhd19oeWRyYXRpb25fdGltaW5ncxgNIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkxhd0h5ZHJhdGlvblRpbWluZxIZChFsYXdfY2xvc3VyZV9jb3VudBgOIAEoBBIeChZsYXdfY2xvc3VyZV9jYWNoZV9oaXRzGA8gASgEEiAKGGxhd19jbG9zdXJlX2NhY2hlX21pc3NlcxgQIAEoBBISCgpzdGVwX2NvdW50GBEgASgEEhUKDXN0ZXBfdG90YWxfdXMYEiABKAQSQQoRc3RlcF9waGFzZV90b3RhbHMYEyABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEhoKEm9taXR0ZWRfc3RlcF9jb3VudBgUIAEoBCI6ChdWZXJpZnlDaGFpbkVuZ2luZVRpbWluZxINCgVwaGFzZRgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBCJACh1WZXJpZnlDaGFpbkxhd0h5ZHJhdGlvblRpbWluZxINCgVwaGFzZRgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBCKrAQoUSHR0cHNFeGVjdXRpb25Qb2xpY3kSPAoJcGxhY2VtZW50GAEgASgOMikubm9tb3Mua2VybmVsLnYxLkVmZmVjdEV4ZWN1dGlvblBsYWNlbWVudBJACgtjYXJkaW5hbGl0eRgCIAEoDjIrLm5vbW9zLmtlcm5lbC52MS5FZmZlY3RFeGVjdXRpb25DYXJkaW5hbGl0eRITCgtsYXdfY2xvc3VyZRgDIAEoCSJbChJIdHRwc091dGJvdW5kUm91dGUSCwoDdXJsGAEgASgJEjgKCWV4ZWN1dGlvbhgCIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5IdHRwc0V4ZWN1dGlvblBvbGljeSIrChZXb3Jrc3BhY2VPdXRib3VuZFJvdXRlEhEKCXdvcmtzcGFjZRgBIAEoCSKFAgoVQ2FycmllZFdvcmtzcGFjZU9mZmVyEjAKBnNvdXJjZRgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSFQoNc291cmNlX2NvbW1pdBgCIAEoCRIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgDIAEoCRIcChRzb3VyY2VfZXZpZGVuY2VfcGFjaxgFIAEoDBIjChthZG1pc3Npb25fY2hlY2twb2ludF9zZWNyZXQYBiABKAwSFQoNZWZmZWN0X2RpZ2VzdBgHIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYCCABKAlKBAgEEAVSBnRhcmdldCLMBAoNT3V0Ym91bmRPZmZlchIKCgJpZBgBIAEoCRIXCgtkZXN0aW5hdGlvbhgCIAEoCUICGAESFAoMc2VhbGVkX29mZmVyGAMgASgMEhQKDGNvbnRlbnRfdHlwZRgEIAEoCRIYChBzb3VyY2Vfd29ya3NwYWNlGAUgASgJEhQKDGN1c3RvZHlfaGVhZBgGIAEoCRIXCg9jYXVzZWRfYnlfb2ZmZXIYByABKAkSGwoTc2NoZWR1bGVkX2F0X21pbGxpcxgIIAEoBBIaChJkZWFkbGluZV9hdF9taWxsaXMYCSABKAQSFAoMY3VzdG9keV9wYXRoGAogASgJEhMKC2N1c3RvZHlfb2lkGAsgASgJEhQKDGRlbGl2ZXJ5X3JlZhgMIAEoCRIVCg1vYmxpZ2F0aW9uX2lkGA0gASgJEjoKC2h0dHBzX3JvdXRlGA4gASgLMiMubm9tb3Mua2VybmVsLnYxLkh0dHBzT3V0Ym91bmRSb3V0ZUgAEkIKD3dvcmtzcGFjZV9yb3V0ZRgPIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VPdXRib3VuZFJvdXRlSAASFQoNc291cmNlX2NvbW1pdBgQIAEoCRIcChRzb3VyY2VfZXZpZGVuY2VfcGFjaxgRIAEoDBIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgSIAEoCRIVCg1lZmZlY3RfZGlnZXN0GBMgASgJEiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgUIAEoCUIHCgVyb3V0ZSLuAQoOT3V0Ym94UmVzcG9uc2USLgoGb2ZmZXJzGAEgAygLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJvdW5kT2ZmZXISHwoSbmV4dF9kdWVfYXRfbWlsbGlzGAIgASgESACIAQESLQoHZW50cmllcxgDIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5PdXRib3hFbnRyeRIUCgx3b3JrX3BlbmRpbmcYBCABKAgSFQoNZW50cmllc190b3RhbBgFIAEoDRIYChBlbnRyaWVzX3ByZXBhcmVkGAYgASgNQhUKE19uZXh0X2R1ZV9hdF9taWxsaXMivQEKC091dGJveEVudHJ5EgoKAmlkGAEgASgJEhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEjoKC2h0dHBzX3JvdXRlGAMgASgLMiMubm9tb3Mua2VybmVsLnYxLkh0dHBzT3V0Ym91bmRSb3V0ZUgAEkIKD3dvcmtzcGFjZV9yb3V0ZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VPdXRib3VuZFJvdXRlSABCBwoFcm91dGUilAEKFFByZXBhcmVPdXRib3VuZE9mZmVyEhgKEHRhcmdldF93b3Jrc3BhY2UYASABKAkSGgoNc291cmNlX2NvbW1pdBgCIAEoCUgAiAEBEh4KEXNvdXJjZV9vZmZlcl9wYXRoGAMgASgJSAGIAQFCEAoOX3NvdXJjZV9jb21taXRCFAoSX3NvdXJjZV9vZmZlcl9wYXRoIokFCgxTeW5jUmVzcG9uc2USEAoIYWRtaXR0ZWQYAiABKAgSDAoEaGVhZBgDIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgEIAEoCRIcChRhZG1pdHRlZF9yZW1vdGVfaGVhZBgFIAEoCRIcChRyZXBsYXllZF9yZW1vdGVfaGVhZBgGIAEoCRI8Cg9hZG1pdHRlZF9yZW1vdGUYByADKAsyIy5ub21vcy5rZXJuZWwudjEuU3luY0FkbWl0dGVkSW50ZW50EjwKFXJlbW90ZV9iaXJ0aF9vdXRjb21lcxgIIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSOQoOcmVtb3RlX3JlZnVzYWwYCSABKAsyHC5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzYWxIAIgBARI7Cg5yZXBsYXllZF9sb2NhbBgKIAMoCzIjLm5vbW9zLmtlcm5lbC52MS5TeW5jUmVwbGF5ZWRJbnRlbnQSIAoYc2tpcHBlZF9sb2NhbF9pbnRlbnRfaWRzGAsgAygJEjkKDXJlZnVzZWRfbG9jYWwYDCADKAsyIi5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzZWRJbnRlbnQSRwoUY3VzdG9keV9kaXNhZ3JlZW1lbnQYDSABKAsyJC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keURpc2FncmVlbWVudEgBiAEBEhkKEXBhcmtlZF9sb2NhbF9yZWZzGA4gAygJEhYKDnJlcGxheV9wZW5kaW5nGA8gASgIQhEKD19yZW1vdGVfcmVmdXNhbEIXChVfY3VzdG9keV9kaXNhZ3JlZW1lbnRKBAgBEAJSBnJlc3VsdCJRChNDdXN0b2R5RGlzYWdyZWVtZW50EhIKCmxvY2FsX2hlYWQYASABKAkSFgoOY2FuZGlkYXRlX2hlYWQYAiABKAkSDgoGcmVhc29uGAMgASgJIk8KElN5bmNBZG1pdHRlZEludGVudBIRCglpbnRlbnRfaWQYASABKAkSGAoQY2FuZGlkYXRlX2NvbW1pdBgCIAEoCRIMCgRoZWFkGAMgASgJImwKElN5bmNSZXBsYXllZEludGVudBIRCglpbnRlbnRfaWQYASABKAkSDAoEaGVhZBgCIAEoCRI1Cg5iaXJ0aF9vdXRjb21lcxgDIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUioQEKC1N5bmNSZWZ1c2FsEhYKCWludGVudF9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIRCgRjb2RlGAMgASgJSAGIAQESNAoHcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsSAKIAQFCDAoKX2ludGVudF9pZEIHCgVfY29kZUIKCghfcmVmdXNhbCKNAQoRU3luY1JlZnVzZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEg4KBnJlYXNvbhgCIAEoCRITCgtjaGFuZ2VfdXNkYRgDIAEoDBI0CgdyZWZ1c2FsGAQgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIAIgBAUIKCghfcmVmdXNhbCJCCg9Xb3Jrc3BhY2VUYXJnZXQSDAoEcmVwbxgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSDgoGYnJhbmNoGAMgASgJIk4KC09wZW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDQoFc3BhbnMYAiABKAgiDgoMR2VuZXNpc09mZmVyIqMBCg1EaXJlY3RpdmVDYWxsEg4KBmRvbWFpbhgBIAEoCRIRCglkaXJlY3RpdmUYAiABKAkSJwoJb3BlcmF0aW9uGAUgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRIWCg5hcmd1bWVudHNfanNvbhgGIAEoCUoECAMQBEoECAQQBVIJY2FsbF91c2RhUgdwYXlsb2FkUg5sZWdhY3lfcGF5bG9hZCLWAgoQQXV0aG9yaW5nT3B0aW9ucxINCgVhY3RvchgBIAEoCRISCgphdXRoX3Rva2VuGAIgASgMEhUKDWF1dGhvcl9zZWNyZXQYAyABKAwSHQoQdmFsaWRfZnJvbV9lcG9jaBgEIAEoBEgAiAEBEh8KEnByaW5jaXBhbF92ZXJpZmllZBgFIAEoCEgBiAEBEgsKA3JuZxgGIAMoARIYChBkZWZlcl9wcm9qZWN0aW9uGAcgASgIEg0KBXNwYW5zGAggASgIEg8KB2RyeV9ydW4YCSABKAgSEAoIc2VxdWVuY2UYCiABKAQSLQoFY2xvY2sYCyABKAsyHi5ub21vcy5rZXJuZWwudjEuQ2FwdHVyZWRDbG9jaxIUCgxwcmVwYXJlX29ubHkYDCABKAhCEwoRX3ZhbGlkX2Zyb21fZXBvY2hCFQoTX3ByaW5jaXBhbF92ZXJpZmllZCJKCg1DYXB0dXJlZENsb2NrEhcKD3BoeXNpY2FsX21pbGxpcxgBIAEoBBIPCgdsb2dpY2FsGAIgASgNEg8KB3JlcGxpY2EYAyABKAQiwwMKEEJpcnRoQ2VydGlmaWNhdGUSDQoFY2hpbGQYASABKAkSDwoHZm91bmRlchgCIAEoCRIQCgh2ZXJpZmllZBgDIAEoCBISCgpwYXJlbnRfa2V5GAQgASgMEhEKCXBhcmVudF9pZBgFIAEoCRINCgVlcG9jaBgGIAEoAxIRCglzaWduYXR1cmUYByABKAwSGQoMdmVyaWZpZWRfdmlhGAggASgJSACIAQESFgoJaWRwX3Rva2VuGAkgASgJSAGIAQESGwoOY2FwdHVyZWRfY2xvY2sYCiABKANIAogBARIhChRhdXRoX3Byb3ZpZGVyX2lzc3VlchgLIAEoCUgDiAEBEh8KEmF1dGhfcHJvdmlkZXJfandrcxgMIAEoCUgEiAEBEiMKFmF1dGhfcHJvdmlkZXJfYXVkaWVuY2UYDSABKAlIBYgBAUIPCg1fdmVyaWZpZWRfdmlhQgwKCl9pZHBfdG9rZW5CEQoPX2NhcHR1cmVkX2Nsb2NrQhcKFV9hdXRoX3Byb3ZpZGVyX2lzc3VlckIVChNfYXV0aF9wcm92aWRlcl9qd2tzQhkKF19hdXRoX3Byb3ZpZGVyX2F1ZGllbmNlImwKG1NpZ25CaXJ0aENlcnRpZmljYXRlUmVxdWVzdBI2CgtjZXJ0aWZpY2F0ZRgBIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlEhUKDXNpZ25lcl9zZWNyZXQYAiABKAwiVgocU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXNwb25zZRI2CgtjZXJ0aWZpY2F0ZRgBIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlIs8DChRNb2RlbExpZmVjeWNsZUludGVudBI7CglvcGVyYXRpb24YASABKA4yKC5ub21vcy5rZXJuZWwudjEuTW9kZWxMaWZlY3ljbGVPcGVyYXRpb24SFAoMaW5zdGFsbGVkX2J5GAIgASgJEhcKCnN1cGVyc2VkZXMYAyABKAlIAIgBARJECgp0cmFuc2l0aW9uGAQgASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAGIAQESFQoIcmVwbGFjZXMYBSABKAlIAogBARIeChFhY2NlcHRhbmNlX3JlYXNvbhgGIAEoCUgDiAEBEhkKDGxhd19pZGVudGl0eRgHIAEoCUgEiAEBEksKEWRvbWFpbl90cmFuc2l0aW9uGAggASgLMisubm9tb3Mua2VybmVsLnYxLkRvbWFpblRyYW5zaXRpb25BY3RpdmF0aW9uSAWIAQFCDQoLX3N1cGVyc2VkZXNCDQoLX3RyYW5zaXRpb25CCwoJX3JlcGxhY2VzQhQKEl9hY2NlcHRhbmNlX3JlYXNvbkIPCg1fbGF3X2lkZW50aXR5QhQKEl9kb21haW5fdHJhbnNpdGlvbiJwCgpEb21haW5QbGFuEi4KB2FjdGlvbnMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuRG9tYWluQWN0aW9uEjIKB3N1cHBvcnQYAiADKAsyIS5ub21vcy5rZXJuZWwudjEuRG9tYWluU3VwcG9ydFBpbiJoCgxEb21haW5BY3Rpb24SDgoGZG9tYWluGAEgASgJEhUKDWV4cGVjdGVkX3VuaXQYAiABKAkSEwoLdGFyZ2V0X3VuaXQYAyABKAkSEgoFZ3JvdXAYBCABKAlIAIgBAUIICgZfZ3JvdXAiQQoQRG9tYWluU3VwcG9ydFBpbhINCgVncm91cBgBIAEoCRILCgNrZXkYAiABKAkSEQoJdW5pdF9oYXNoGAMgASgJIpICChhSZXNvbHZlRG9tYWluUGxhblJlcXVlc3QSKQoEcGxhbhgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Eb21haW5QbGFuEg8KB2F0X2hhc2gYAiABKAkSFAoManVkZ2Vfc3RhZ2VkGAMgASgIEiEKGWFja25vd2xlZGdlbWVudF9wcmluY2lwYWwYBCABKAkSDwoHcXVhbGlmeRgFIAEoCBI9Cgljb25zdW1lcnMYBiADKAsyKi5ub21vcy5rZXJuZWwudjEuRG9tYWluQ29uc3VtZXJSZXF1aXJlbWVudBIxCg9hdmFpbGFibGVfdW5pdHMYByADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdCJKChlEb21haW5Db25zdW1lclJlcXVpcmVtZW50EgwKBG5hbWUYASABKAkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYAiABKAwiSgoVRG9tYWluQ29uc3VtZXJWZXJkaWN0EgwKBG5hbWUYASABKAkSEgoKY29tcGF0aWJsZRgCIAEoCBIPCgdmYWlsaW5nGAMgAygJImsKE1Jlc29sdmVkRG9tYWluR3JvdXASDQoFZ3JvdXAYASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSLQoFdW5pdHMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluVW5pdFBpbiIvCg1Eb21haW5Vbml0UGluEgsKA2tleRgBIAEoCRIRCgl1bml0X2hhc2gYAiABKAkitAMKGVJlc29sdmVEb21haW5QbGFuUmVzcG9uc2USDwoHYXRfaGFzaBgBIAEoCRIVCg1hdF9zdGF0ZV9yb290GAIgASgJEjQKBmdyb3VwcxgDIAMoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlZERvbWFpbkdyb3VwEhwKFHJldGlyZV9pbnN0YWxsYXRpb25zGAQgAygJEjgKEHNlbGVjdGVkX2RvbWFpbnMYBSADKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluVW5pdFBpbhISCgVyZWFkeRgGIAEoCEgAiAEBEhIKCnZpb2xhdGlvbnMYByADKAkSOQoJY29uc3VtZXJzGAggAygLMiYubm9tb3Mua2VybmVsLnYxLkRvbWFpbkNvbnN1bWVyVmVyZGljdBI5Cgl1bml0X3NldHMYCSADKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3UHJlcGFyYXRpb25Vbml0U2V0EhkKEWtlcm5lbF9nZW5lcmF0aW9uGAogASgJEh4KFmVmZmVjdGl2ZV9sYXdfaWRlbnRpdHkYCyABKAlCCAoGX3JlYWR5IoUBChpEb21haW5UcmFuc2l0aW9uQWN0aXZhdGlvbhIpCgRwbGFuGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLkRvbWFpblBsYW4SPAoIcmVzb2x2ZWQYAiABKAsyKi5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZURvbWFpblBsYW5SZXNwb25zZSI7Ch9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc0Fkb3B0aW9uEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAki5wcKDE9mZmVyUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei4KBGNhbGwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbEgAEhwKEnNlYWxlZF9jaGFuZ2VfdXNkYRgHIAEoDEgAEkAKD21vZGVsX2xpZmVjeWNsZRgMIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Nb2RlbExpZmVjeWNsZUludGVudEgAEl4KImlkZW50aXR5X3Byb3ZpZGVyX3dpdG5lc3NfYWRvcHRpb24YDSABKAsyMC5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NBZG9wdGlvbkgAEjAKB2dlbmVzaXMYDiABKAsyHS5ub21vcy5rZXJuZWwudjEuR2VuZXNpc09mZmVySAASSQoXY2FycmllZF93b3Jrc3BhY2Vfb2ZmZXIYDyABKAsyJi5ub21vcy5rZXJuZWwudjEuQ2FycmllZFdvcmtzcGFjZU9mZmVySAASNAoJcGxhY2VtZW50GBAgASgLMh8ubm9tb3Mua2VybmVsLnYxLlBsYWNlbWVudE9mZmVySAASRwoWZGV0YWNoZWRfc2lnbmVkX2NoYW5nZRgSIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25lZENoYW5nZUgAEjQKCWF1dGhvcmluZxgDIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpbmdPcHRpb25zEhAKCGxhd191c2R6GAQgASgMEjMKDGF0dGVzdGF0aW9ucxgFIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWQSPQoSY29uZmxpY3Rfc25hcHNob3RzGAYgAygLMiEubm9tb3Mua2VybmVsLnYxLkNvbmZsaWN0U25hcHNob3QSGgoSZXhlY3V0aW9uX2xhd191c2R6GAggASgMEiAKE2NvbnRyb2xsZXJfbGF3X2hhc2gYCSABKAlIAYgBARIdChBjYW5kaWRhdGVfY29tbWl0GAogASgJSAKIAQESPAoRYmlydGhfY2VydGlmaWNhdGUYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZRIrCglsYXdfdW5pdHMYESADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEIICgZpbnRlbnRCFgoUX2NvbnRyb2xsZXJfbGF3X2hhc2hCEwoRX2NhbmRpZGF0ZV9jb21taXQiNgoHTGF3VW5pdBIrCgVmaWxlcxgBIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0RmlsZSIsCgtMYXdVbml0RmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwixQEKDEF0dGVzdGVkUmVhZBIQCghxdWVyeV9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSKwoGcmVzdWx0GAMgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUSMgoIZXZpZGVuY2UYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuUmVhZEF0dGVzdGF0aW9uSgQIBBAFUgthdHRlc3RhdGlvbiLVAQoPUmVhZEF0dGVzdGF0aW9uEg8KB3ZlcnNpb24YASABKAMSGAoQc291cmNlX3dvcmtzcGFjZRgCIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgDIAEoCRITCgtzb3VyY2VfaGVhZBgEIAEoCRIRCglmb2xkX3Jvb3QYBSABKAkSFAoMc291cmNlX2Vwb2NoGAYgASgDEhoKEmF0dGVzdGVkX2F0X21pbGxpcxgHIAEoAxISCgpwdWJsaWNfa2V5GAggASgMEhEKCXNpZ25hdHVyZRgJIAEoDCJ1ChBDb25mbGljdFNuYXBzaG90EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRINCgVmaWVsZBgDIAEoCRIVCg10YXJnZXRfc2NoZW1hGAQgASgJEg0KBXRva2VuGAUgASgJIvQPCgxRdWVyeVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIyCglhdXRob3JpdHkYAiABKAsyHy5ub21vcy5rZXJuZWwudjEuUXVlcnlBdXRob3JpdHkSDQoFc3BhbnMYAyABKAgSOQoNcmVzdWx0X2Zvcm1hdBgEIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5RdWVyeVJlc3VsdEZvcm1hdBIYChBzZXJ2ZV9sYXN0X3JlYWR5GAUgASgIEioKBHJvd3MYCiABKAsyGi5ub21vcy5rZXJuZWwudjEuUm93c1F1ZXJ5SAASKgoEcGFnZRgLIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5QYWdlUXVlcnlIABIrCgVieV9pZBgMIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5CeUlkUXVlcnlIABI5CgxyZXNvbHZlX3JlZnMYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZnNRdWVyeUgAEkUKEnJlZmVyZW5jZV92ZXJzaW9ucxgOIAEoCzInLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5SAASLAoFY291bnQYDyABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEioKA3N1bRgQIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASMAoHc3BhdGlhbBgRIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5TcGF0aWFsUXVlcnlIABIsCgVuYW1lZBgSIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5OYW1lZFF1ZXJ5SAASSQoTYXV0aG9yaXphdGlvbl9jaGVjaxgTIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0SAASSwoUYXV0aG9yaXphdGlvbl9leHBhbmQYFCABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlcXVlc3RIABJJChNmcm9udGllcl90cmFuc2l0aW9uGBUgASgLMioubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlcXVlc3RIABIvCgdieV90eXBlGBYgASgLMhwubm9tb3Mua2VybmVsLnYxLkJ5VHlwZVF1ZXJ5SAASSAoUb3duZWRfZGV2aWNlX3JlcXVlc3QYFyABKAsyKC5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UXVlcnlIABJMChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGBggASgLMioubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUXVlcnlIABJDChFwZW5kaW5nX2NvbmZsaWN0cxgZIAEoCzImLm5vbW9zLmtlcm5lbC52MS5QZW5kaW5nQ29uZmxpY3RzUXVlcnlIABJQChhwZW5kaW5nX2NvbmZsaWN0X3N1bW1hcnkYGiABKAsyLC5ub21vcy5rZXJuZWwudjEuUGVuZGluZ0NvbmZsaWN0U3VtbWFyeVF1ZXJ5SAASTQoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVRdWVyeUgAEkAKEGNoaWxkX3dvcmtzcGFjZXMYHCABKAsyJC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeUgAElYKFmF1dGhvcmluZ19yZXF1aXJlbWVudHMYHSABKAsyNC5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnlIABJSChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGB4gASgLMi0ubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUXVlcnlIABJPChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgfIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnlIABJHChNtYWludGVuYW5jZV9xdWFudHVtGCAgASgLMigubm9tb3Mua2VybmVsLnYxLk1haW50ZW5hbmNlUXVhbnR1bVF1ZXJ5SAASRAoSZnVsbF9oaXN0b3J5X2F1ZGl0GCEgASgLMiYubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRRdWVyeUgAElAKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgiIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UXVlcnlIABJUChppbnN0YWxsZWRfbGF3X2RlY2xhcmF0aW9ucxgjIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5JbnN0YWxsZWRMYXdEZWNsYXJhdGlvbnNRdWVyeUgAEkgKE3Jlc29sdmVfZG9tYWluX3BsYW4YJCABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZURvbWFpblBsYW5SZXF1ZXN0SABCBwoFcXVlcnkiVgobV29ya3NwYWNlRWZmZWN0UmVjZWlwdFF1ZXJ5EiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgBIAEoCRIVCg1lZmZlY3RfZGlnZXN0GAIgASgJIuQBCh5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2USGAoQdGFyZ2V0X3dvcmtzcGFjZRgBIAEoCRIgChh0YXJnZXRfd29ya3NwYWNlX2dlbmVzaXMYAiABKAkSFQoNb2JzZXJ2ZWRfaGVhZBgDIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYBCABKAkSFQoNZWZmZWN0X2RpZ2VzdBgFIAEoCRIfChJhZG1pdHRlZF9pbnRlbnRfaWQYBiABKAlIAIgBAUIVChNfYWRtaXR0ZWRfaW50ZW50X2lkIhcKFUZ1bGxIaXN0b3J5QXVkaXRRdWVyeSKwAwoYRnVsbEhpc3RvcnlBdWRpdFJlc3BvbnNlEg0KBXZhbGlkGAEgASgIEi4KBHdhbGsYAiABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhEKBGhlYWQYAyABKAlIAIgBARIUCgdpbnRlbnRzGAQgASgESAGIAQESGAoLcGxhbnNfcmVydW4YBSABKARIAogBARIcCg9jb250cm9sbGVyX2hhc2gYBiABKAlIA4gBARIZChFpbnN0YWxsZWRfZG9tYWlucxgHIAMoCRISCgVjaGVjaxgIIAEoCUgEiAEBEhUKCGF0X2luZGV4GAkgASgESAWIAQESEgoFZXJyb3IYCiABKAlIBogBARI0CgdyZWZ1c2FsGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIHCgVfaGVhZEIKCghfaW50ZW50c0IOCgxfcGxhbnNfcmVydW5CEgoQX2NvbnRyb2xsZXJfaGFzaEIICgZfY2hlY2tCCwoJX2F0X2luZGV4QggKBl9lcnJvckIKCghfcmVmdXNhbCIeChxJZGVudGl0eVByb3ZpZGVyV2l0bmVzc1F1ZXJ5IosCChpJZGVudGl0eVByb3ZpZGVyV2l0bmVzc0tleRIPCgdvcmRpbmFsGAEgASgEEgsKA2t0eRgCIAEoCRIQCgNraWQYAyABKAlIAIgBARIQCgNhbGcYBCABKAlIAYgBARIQCgN1c2UYBSABKAlIAogBARIQCgNjcnYYBiABKAlIA4gBARIOCgF4GAcgASgJSASIAQESDgoBeRgIIAEoCUgFiAEBEg4KAW4YCSABKAlIBogBARIOCgFlGAogASgJSAeIAQESDwoHa2V5X29wcxgLIAMoCUIGCgRfa2lkQgYKBF9hbGdCBgoEX3VzZUIGCgRfY3J2QgQKAl94QgQKAl95QgQKAl9uQgQKAl9lImMKIklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSEwoLa2V5X29yZGluYWwYASABKAQSGwoTY2VydGlmaWNhdGVfb3JkaW5hbBgCIAEoBBILCgNkZXIYAyABKAwixQQKH0lkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2USGAoQc291cmNlX3dvcmtzcGFjZRgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRITCgtzb3VyY2VfaGVhZBgDIAEoCRINCgVlcG9jaBgEIAEoBBIfChJwcmVkZWNlc3Nvcl9zaGEyNTYYBSABKAxIAIgBARIOCgZpc3N1ZXIYBiABKAkSFQoIYXVkaWVuY2UYByABKAlIAYgBARIXCg9wcmluY2lwYWxfY2xhaW0YCCABKAkSIQoUZGV2aWNlX2JpbmRpbmdfY2xhaW0YCSABKAlIAogBARIeChZyZXF1aXJlX2RldmljZV9iaW5kaW5nGAogASgIEjkKBGtleXMYCyADKAsyKy5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NLZXkSSQoMY2VydGlmaWNhdGVzGAwgAygLMjMubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSFwoPbWF0ZXJpYWxfc2hhMjU2GA0gASgMEjMKDGF0dGVzdGF0aW9ucxgPIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWRCFQoTX3ByZWRlY2Vzc29yX3NoYTI1NkILCglfYXVkaWVuY2VCFwoVX2RldmljZV9iaW5kaW5nX2NsYWltSgQIDhAPUhFzb3VyY2VfcHJvb2ZfdXNkYSIVChNDaGlsZFdvcmtzcGFjZVF1ZXJ5IpABChlDaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkEhEKCXdvcmtzcGFjZRgBIAEoCRI+CgZzdGF0dXMYAiABKA4yLi5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VMaWZlY3ljbGVTdGF0dXMSFAoHYm9ybl9hdBgDIAEoCUgAiAEBQgoKCF9ib3JuX2F0IlsKG0NoaWxkV29ya3NwYWNlUXVlcnlSZXNwb25zZRI8CghjaGlsZHJlbhgBIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkIh8KHUluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1F1ZXJ5IjcKEEluc3RhbGxlZExhd1VuaXQSEAoIdW5pdF9rZXkYASABKAkSEQoJdW5pdF9oYXNoGAIgASgJIowBChNJbnN0YWxsZWRMYXdVbml0U2V0EhQKDHNldF9pZGVudGl0eRgBIAEoCRIYChBjb21wb3Nlcl92ZXJzaW9uGAIgASgJEhMKC29wZW51c2RfcmV2GAMgASgJEjAKBXVuaXRzGAQgAygLMiEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd1VuaXQigQIKHkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlchIOCgZkb21haW4YASABKAkSDgoGbWVtYmVyGAIgASgJEjsKC21lbWJlcl9raW5kGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkTGF3TWVtYmVyS2luZBJBCgRraW5kGAQgASgOMjMubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlcktpbmQSDQoFc2NvcGUYBSABKAkSHAoPaWRlbnRpdHlfc2hhMjU2GAYgASgJSACIAQFCEgoQX2lkZW50aXR5X3NoYTI1NiLpAQofSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucxIYChBjbG9zdXJlX2lkZW50aXR5GAEgASgJEg8KB2RvbWFpbnMYAiADKAkSOwoIdW5pdF9zZXQYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3VW5pdFNldEgAiAEBElEKGGF1dGhlbnRpY2F0aW9uX3Byb3ZpZGVycxgEIAMoCzIvLm5vbW9zLmtlcm5lbC52MS5EZWNsYXJlZEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJCCwoJX3VuaXRfc2V0InQKIEluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlEgwKBGhlYWQYASABKAkSQgoIY2xvc3VyZXMYAiADKAsyMC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucyLKAQojRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnkSEQoJZGlyZWN0aXZlGAEgASgJEhYKCXByaW5jaXBhbBgCIAEoCUgAiAEBEhcKCnB1YmxpY19rZXkYAyABKAxIAYgBARIVCghrZXlfaGFzaBgEIAEoCUgCiAEBEhMKBmRvbWFpbhgFIAEoCUgDiAEBQgwKCl9wcmluY2lwYWxCDQoLX3B1YmxpY19rZXlCCwoJX2tleV9oYXNoQgkKB19kb21haW4ijAIKJkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1Jlc3BvbnNlEg0KBWZvdW5kGAEgASgIEhMKBmRvbWFpbhgCIAEoCUgAiAEBEhUKCHJlbGF0aW9uGAMgASgJSAGIAQESEwoGb2JqZWN0GAQgASgJSAKIAQESEgoFYWN0b3IYBSABKAlIA4gBARIVCghrZXlfaGFzaBgGIAEoCUgEiAEBEhcKD3NpZ25lcl9lbnJvbGxlZBgHIAEoCBIUCgxyb2xlX2FsbG93ZWQYCCABKAhCCQoHX2RvbWFpbkILCglfcmVsYXRpb25CCQoHX29iamVjdEIICgZfYWN0b3JCCwoJX2tleV9oYXNoInIKGkF1dGhlbnRpY2F0aW9uUG9zdHVyZVF1ZXJ5Eh4KFmluY2x1ZGVfYmlydGhfZXZpZGVuY2UYASABKAgSHgoRZGV2aWNlX3B1YmxpY19rZXkYAiABKAxIAIgBAUIUChJfZGV2aWNlX3B1YmxpY19rZXki7AIKHUF1dGhlbnRpY2F0aW9uUG9zdHVyZVJlc3BvbnNlEkgKDnByb3ZpZGVyX3Rva2VuGAEgASgOMjAubm9tb3Mua2VybmVsLnYxLlByb3ZpZGVyVG9rZW5WZXJpZmljYXRpb25TdGF0dXMSFwoPZW5yb2xsZWRfZGV2aWNlGAIgASgIEhoKEnJlc29sdmVkX3ByaW5jaXBhbBgDIAEoCRJECg5iaXJ0aF9ldmlkZW5jZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5CaXJ0aEV2aWRlbmNlUmVhZGluZXNzSACIAQESQQoUZGV2aWNlX3NpZ25lcl9zdGF0dXMYBSABKA4yIy5ub21vcy5rZXJuZWwudjEuRGV2aWNlU2lnbmVyU3RhdHVzEhoKEmRldmljZV9rZXlfc3ViamVjdBgGIAEoCRIUCgxzaWduZXJfZXBvY2gYByABKANCEQoPX2JpcnRoX2V2aWRlbmNlIl4KFkJpcnRoRXZpZGVuY2VSZWFkaW5lc3MSNAoGc3RhdHVzGAEgASgOMiQubm9tb3Mua2VybmVsLnYxLkJpcnRoRXZpZGVuY2VTdGF0dXMSDgoGZGV0YWlsGAIgASgJIigKF093bmVkRGV2aWNlUmVxdWVzdFF1ZXJ5Eg0KBXNjb3BlGAEgASgJIjIKGk93bmVkRGV2aWNlUmVxdWVzdFJlc3BvbnNlEhQKDHJlcXVlc3RfdXNkYRgBIAEoDCJAChlPd25lZFByZXBhcmVBcHByb3ZhbFF1ZXJ5Eg0KBXNjb3BlGAEgASgJEhQKDHJlcXVlc3RfdXNkYRgCIAEoDCK/AQocT3duZWRQcmVwYXJlQXBwcm92YWxSZXNwb25zZRIXCg9uZXdfa2V5X3N1YmplY3QYASABKAkSGgoSb3duZWRfY3VzdG9keV91c2RhGAIgASgMEhQKDHZlcmlmaWVkX3ZpYRgDIAEoCRIYChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgEEh8KF2FwcHJvdmVkX2F0X3VuaXhfbWlsbGlzGAUgASgEEhkKEW93bmVkX2tleV9zdWJqZWN0GAYgASgJIpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMItgBCglSb3dzUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgEIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYBSABKAsyFC5nb29nbGUucHJvdG9idWYuQW55EhsKDnNpbmNlX2Zyb250aWVyGAYgASgJSACIAQFCEQoPX3NpbmNlX2Zyb250aWVyIsYBCglQYWdlUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Eg0KBWxpbWl0GAMgASgNEg0KBWFmdGVyGAQgASgJEhEKCXByaW5jaXBhbBgFIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgGIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYByABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIjgKC0J5VHlwZVF1ZXJ5EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCSJcCghOb21vc1JlZhIRCgl3b3Jrc3BhY2UYASABKAkSFgoOYWdncmVnYXRlX3R5cGUYAiABKAkSFAoMYWdncmVnYXRlX2lkGAMgASgJEg8KB3ZlcnNpb24YBCABKAkiTgoQUmVzb2x2ZVJlZnNRdWVyeRInCgRyZWZzGAEgAygLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhEKCXByaW5jaXBhbBgCIAEoCSJOChZSZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5EjQKBHJlZnMYASADKAsyJi5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbkNoZWNrIoQBChVSZWZlcmVuY2VWZXJzaW9uQ2hlY2sSKQoGcGlubmVkGAEgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEikKBnNlcmllcxgCIAEoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIVCg1jdXJyZW50X2ZpZWxkGAMgASgJImIKClRhbGx5UXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEhYKCWdyb3VwX2tleRgEIAEoCUgAiAEBQgwKCl9ncm91cF9rZXlKBAgCEANSCWFyZ3VtZW50cyJ6CgxTcGF0aWFsUXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEg0KBW1pbl94GAQgASgBEg0KBW1pbl95GAUgASgBEg0KBW1heF94GAYgASgBEg0KBW1heF95GAcgASgBSgQIAhADUglhcmd1bWVudHMiWgoVUGVuZGluZ0NvbmZsaWN0c1F1ZXJ5EhsKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJSACIAQESEQoJcHJpbmNpcGFsGAIgASgJQhEKD19hZ2dyZWdhdGVfdHlwZSIwChtQZW5kaW5nQ29uZmxpY3RTdW1tYXJ5UXVlcnkSEQoJcHJpbmNpcGFsGAEgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCLkAQoZRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdBIOCgZkb21haW4YASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSDwoHYXRfaGFzaBgDIAEoCRIhChlhY2tub3dsZWRnZW1lbnRfcHJpbmNpcGFsGAQgASgJEiAKE3Jlc3RvcmVfcHJldmlvdXNfb2YYBSABKAlIAIgBARIxCg9jYW5kaWRhdGVfdW5pdHMYBiADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEIWChRfcmVzdG9yZV9wcmV2aW91c19vZiJaCiVGcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhgKEHNvdXJjZV9zdGFibGVfaWQYASABKAkSFwoPYWNrbm93bGVkZ2VtZW50GAIgASgJIvUBCh5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnMSDwoHcmV0aXJlZBgBIAMoCRJHCgdyZXR5cGVkGAIgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSRwoHcmViaW5kcxgDIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhwKD2Fja25vd2xlZGdlZF9ieRgEIAEoCUgAiAEBQhIKEF9hY2tub3dsZWRnZWRfYnkiPQobRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEg4KBmRvbWFpbhgBIAEoCRIOCgZkZXRhaWwYAiABKAki1wIKGkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlEg8KB2F0X2hhc2gYASABKAkSGQoMY3VycmVudF9oYXNoGAIgASgJSACIAQESFQoNYXRfc3RhdGVfcm9vdBgDIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgEIAEoCRIOCgZkb21haW4YBSABKAkSDwoHZG9tYWlucxgGIAMoCRINCgVyZWFkeRgHIAEoCBJACgp2aW9sYXRpb25zGAggAygLMiwubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhJKCgxkaXNwb3NpdGlvbnMYCSABKAsyLy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zSAGIAQFCDwoNX2N1cnJlbnRfaGFzaEIPCg1fZGlzcG9zaXRpb25zIi8KE0F1dGhvcml6YXRpb25PYmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSJUChRBdXRob3JpemF0aW9uU3ViamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJEhUKCHJlbGF0aW9uGAMgASgJSACIAQFCCwoJX3JlbGF0aW9uIpwBChhSZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBIQCghyZWxhdGlvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0IoEBChhBdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSIwoZY3VycmVudF92ZXJpZmllZF9mcm9udGllchgBIAEoCEgAEhkKD2F0X2xlYXN0X2NvbW1pdBgCIAEoCUgAEhYKDGV4YWN0X2NvbW1pdBgDIAEoCUgAQg0KC3JlcXVpcmVtZW50ImYKHUF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EhQKDGNvbmRpdGlvbl9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi9wIKGUF1dGhvcml6YXRpb25DaGVja1JlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSPgoLY29uc2lzdGVuY3kYBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBSADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgGIAEoCUgAiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YByABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2gi7QIKGkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI+Cgtjb25zaXN0ZW5jeRgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgEIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAUgASgJSACIAQESDQoFbGltaXQYBiABKA0SEgoFYWZ0ZXIYByABKAlIAYgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAggASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoQggKBl9hZnRlciK9AQoZUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI4CgV0dXBsZRgBIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSEAoIdHVwbGVfaWQYAiABKAkSGgoSYXNzZXJ0aW9uX2V2ZW50X2lkGAMgASgJEiAKE3Jldm9jYXRpb25fZXZlbnRfaWQYBCABKAlIAIgBAUIWChRfcmV2b2NhdGlvbl9ldmVudF9pZCLhAwoYQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uEkYKCW9wZXJhdGlvbhgBIAEoDjIzLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24uT3BlcmF0aW9uEhAKCHJlbGF0aW9uGAIgASgJEg4KBnJlc3VsdBgDIAEoCBI8CghldmlkZW5jZRgEIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjsKCGNoaWxkcmVuGAUgAygLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbiLfAQoJT3BlcmF0aW9uEhkKFU9QRVJBVElPTl9VTlNQRUNJRklFRBAAEhQKEE9QRVJBVElPTl9ESVJFQ1QQARIeChpPUEVSQVRJT05fQ09NUFVURURfVVNFUlNFVBACEh4KGk9QRVJBVElPTl9UVVBMRV9UT19VU0VSU0VUEAMSEwoPT1BFUkFUSU9OX1VOSU9OEAQSGgoWT1BFUkFUSU9OX0lOVEVSU0VDVElPThAFEhcKE09QRVJBVElPTl9FWENMVVNJT04QBhIXChNPUEVSQVRJT05fQ09ORElUSU9OEAcidwoaQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSIAoYYXV0aG9yaXphdGlvbl9tb2RlbF9oYXNoGAEgASgJEiEKGXJlbGF0aW9uc2hpcF9zdGF0ZV9jb21taXQYAiABKAkSFAoMY29udGV4dF9oYXNoGAMgASgMIr4BChpBdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEkMKC2V4cGxhbmF0aW9uGAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgAiAEBQg4KDF9leHBsYW5hdGlvbiKDAgobQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlEjcKCHN1YmplY3RzGAEgAygLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0EjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEhEKBG5leHQYAyABKAlIAIgBARJDCgtleHBsYW5hdGlvbhgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAYgBAUIHCgVfbmV4dEIOCgxfZXhwbGFuYXRpb24iqAEKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrEjYKB3ByZXBhcmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUHJlcGFyZU91dGJvdW5kT2ZmZXIitgEKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkSGgoScGFya19yZWZ1c2VkX2xvY2FsGAQgASgIEhgKEHBhcmtlZF9hdF9taWxsaXMYBSABKAQSGwoTcmVwbGF5X29mZmVyX2J1ZGdldBgGIAEoDSLTAQoaS2VybmVsQ29uZmlndXJhdGlvblJlcXVlc3QSHQoVdHJ1c3Rfcm9vdF9wdWJsaWNfa2V5GAEgASgMEiUKGHRydXN0c19jdXN0b2RpYW5faGlzdG9yeRgCIAEoCEgAiAEBEiAKE2RlZmVycmVkX2R1cmFiaWxpdHkYAyABKAhIAYgBARIYChBob3N0X2NhbGxfbGVkZ2VyGAQgASgIQhsKGV90cnVzdHNfY3VzdG9kaWFuX2hpc3RvcnlCFgoUX2RlZmVycmVkX2R1cmFiaWxpdHkigAEKG0tlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZRItCgZyZXN1bHQYASABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkEh0KEGhvc3RfY2FsbF9sZWRnZXIYAiABKA1IAIgBAUITChFfaG9zdF9jYWxsX2xlZGdlciKTEwoOQ3VzdG9keVJlcXVlc3QSNwoKcGFja19kZWx0YRgKIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXF1ZXN0SAASNwoKYXBwbHlfcGFjaxgLIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BcHBseVBhY2tSZXF1ZXN0SAASNwoKcmVwb19zdGF0cxgMIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXF1ZXN0SAASPQoNaW50ZW50c19hYm92ZRgNIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXF1ZXN0SAASPwoOaW5zcGVjdF9jaGFuZ2UYDiABKAsyJS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdENoYW5nZVJlcXVlc3RIABJOChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMiwubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAElAKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi0ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3RIABI1CglyZWFkX2Jsb2IYESABKAsyIC5ub21vcy5rZXJuZWwudjEuUmVhZEJsb2JSZXF1ZXN0SAASOQoLcmVzb2x2ZV9yZWYYEiABKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlcXVlc3RIABI1CglsaXN0X3JlZnMYEyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXF1ZXN0SAASNQoJd3JpdGVfcmVmGBQgASgLMiAubm9tb3Mua2VybmVsLnYxLldyaXRlUmVmUmVxdWVzdEgAEjcKCmRlbGV0ZV9yZWYYFSABKAsyIS5ub21vcy5rZXJuZWwudjEuRGVsZXRlUmVmUmVxdWVzdEgAEkQKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMicubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlcXVlc3RIABJCChBsYXdfY2xvc3VyZV9pbmZvGBcgASgLMiYubm9tb3Mua2VybmVsLnYxLkxhd0Nsb3N1cmVJbmZvUmVxdWVzdEgAEkUKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMigubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0SAASRQoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlcXVlc3RIABJDChBjYXBhY2l0eV9yZXNlcnZlGBogASgLMicubm9tb3Mua2VybmVsLnYxLkNhcGFjaXR5UmVzZXJ2ZVJlcXVlc3RIABI7CgxyZXN0b3JlX21haW4YGyABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXF1ZXN0SAASTgoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3RIABJHChJyZXNpZGVudF9mb290cHJpbnQYHSABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnRSZXF1ZXN0SAASQQoPaGlzdG9yeV9zdW1tYXJ5GB4gASgLMiYubm9tb3Mua2VybmVsLnYxLkhpc3RvcnlTdW1tYXJ5UmVxdWVzdEgAEloKHHByb3ZlX2NvbXBhY3Rpb25fZXF1aXZhbGVuY2UYHyABKAsyMi5ub21vcy5rZXJuZWwudjEuUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXF1ZXN0SAASPgoOb3Blbl9naXRfc3RhdGUYICABKAsyJC5ub21vcy5rZXJuZWwudjEuT3BlbkdpdFN0YXRlUmVxdWVzdEgAEk4KFnJlYWRfY3VzdG9keV9wbGFjZW1lbnQYISABKAsyLC5ub21vcy5rZXJuZWwudjEuUmVhZEN1c3RvZHlQbGFjZW1lbnRSZXF1ZXN0SAASVAoZaW5zcGVjdF9jdXN0b2R5X3BsYWNlbWVudBgjIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlcXVlc3RIABJQChdyZWxlYXNlX3dvcmtzcGFjZV9zdGF0ZRgkIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZWxlYXNlV29ya3NwYWNlU3RhdGVSZXF1ZXN0SAASXwofcmVjb3JkX3dvcmtzcGFjZV9lZmZlY3Rfb3V0Y29tZRglIAEoCzI0Lm5vbW9zLmtlcm5lbC52MS5SZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdEgAEkwKFWF0dGFjaF9sb2NhbF9mcm9udGllchgmIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdHRhY2hMb2NhbEZyb250aWVyUmVxdWVzdEgAEkMKEGFnZ3JlZ2F0ZV9jZW5zdXMYJyABKAsyJy5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlQ2Vuc3VzUmVxdWVzdEgAEj0KDWF1ZGl0X2N1c3RvZHkYKCABKAsyJC5ub21vcy5rZXJuZWwudjEuQXVkaXRDdXN0b2R5UmVxdWVzdEgAEkgKE2V4cG9ydF9sYXdfcHJvZHVjdHMYKSABKAsyKS5ub21vcy5rZXJuZWwudjEuRXhwb3J0TGF3UHJvZHVjdHNSZXF1ZXN0SAASSAoTaW1wb3J0X2xhd19wcm9kdWN0cxgqIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5JbXBvcnRMYXdQcm9kdWN0c1JlcXVlc3RIABJKChRwcmVwYXJlX2xhd19wcm9kdWN0cxgrIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlTGF3UHJvZHVjdHNSZXF1ZXN0SAASUgoYcmVjb3Zlcl9kZXRhY2hlZF9yZWNlaXB0GCwgASgLMi4ubm9tb3Mua2VybmVsLnYxLlJlY292ZXJEZXRhY2hlZFJlY2VpcHRSZXF1ZXN0SABCCwoJb3BlcmF0aW9uSgQIIhAjUhdhZG9wdF9jdXN0b2R5X3BsYWNlbWVudCJeChZBZ2dyZWdhdGVDZW5zdXNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoKdHlwZV9saW1pdBgCIAEoDSIxChJBZ2dyZWdhdGVUeXBlQ291bnQSDAoEdHlwZRgBIAEoCRINCgVjb3VudBgCIAEoBCL7AQoXQWdncmVnYXRlQ2Vuc3VzUmVzcG9uc2USEQoEaGVhZBgBIAEoCUgAiAEBEhwKD2FnZ3JlZ2F0ZV9jb3VudBgCIAEoBEgBiAEBEhcKCnN0YXRlX3Jvb3QYAyABKAlIAogBARI2Cgl0b3BfdHlwZXMYBCADKAsyIy5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlVHlwZUNvdW50Eh0KEHR5cGVzX3N0YXRlX3Jvb3QYBSABKAlIA4gBAUIHCgVfaGVhZEISChBfYWdncmVnYXRlX2NvdW50Qg0KC19zdGF0ZV9yb290QhMKEV90eXBlc19zdGF0ZV9yb290IigKGFJlc2lkZW50Rm9vdHByaW50UmVxdWVzdBIMCgRkZWVwGAEgASgIIvQDChFSZXNpZGVudEZvb3RwcmludBIRCgl3b3Jrc3BhY2UYASABKAkSDgoGYnJhbmNoGAIgASgJEhgKEHJlYWRfbW9kZWxfYnl0ZXMYAyABKAQSHQoVcmVhZF9tb2RlbF9ydXN0X2J5dGVzGAQgASgEEhgKEGZvbGRfc3RhdGVfYnl0ZXMYBSABKAQSEwoLZm9sZF9pbWFnZXMYBiABKA0SHwoXc2hhcmVkX2F0dHJpYnV0ZWRfYnl0ZXMYByABKAQSEgoKYWdncmVnYXRlcxgIIAEoBBI2Cgpjb21wb25lbnRzGAkgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Q29tcG9uZW50EhIKCmNvbXB1dGVfdXMYCiABKAQSRQoRcmVhZF9zdG9yYWdlX2tpbmQYCyABKA4yKi5ub21vcy5rZXJuZWwudjEuUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIfChdzcWxpdGVfY2FjaGVfdXNlZF9ieXRlcxgMIAEoBBIYChBmbGF0X3NjYWxhcl9yb3dzGA0gASgEEh0KFWZsYXRfc2NhbGFyX3Jvd3NfcmVhZBgOIAEoBBIdChBmdWxsX3JlcGxheV9oZWFkGA8gASgJSACIAQFCEwoRX2Z1bGxfcmVwbGF5X2hlYWQiaQoRUmVzaWRlbnRDb21wb25lbnQSNAoEa2luZBgBIAEoDjImLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudEtpbmQSDQoFYnl0ZXMYAiABKAQSDwoHY2VpbGluZxgDIAEoCCLKAQoZUmVzaWRlbnRGb290cHJpbnRSZXNwb25zZRI1CglyZXNpZGVudHMYASADKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnQSHAoUYWxsb2NhdG9yX2xpdmVfYnl0ZXMYAiABKAQSGAoQYXR0cmlidXRlZF9ieXRlcxgDIAEoBBIZChF1bmFjY291bnRlZF9ieXRlcxgEIAEoBBIVCg1hY2NvdW50aW5nX3VzGAUgASgEEgwKBGRlZXAYBiABKAgi4gEKEFBhY2tEZWx0YVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRIdChBzdGFnZWRfcGFja19maWxlGAUgASgJSAKIAQESEgoFZGVwdGgYBiABKA1IA4gBARISCgpiZWxvd19oZWFkGAcgASgIEhIKCmFsc29faGVhZHMYCCADKAlCBwoFX2hlYWRCBwoFX2Jhc2VCEwoRX3N0YWdlZF9wYWNrX2ZpbGVCCAoGX2RlcHRoIvoBChBBcHBseVBhY2tSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoEcGFjaxgCIAEoDEgAEhoKEHN0YWdlZF9wYWNrX2ZpbGUYBCABKAlIABIaChBjb250aW51ZV9wZW5kaW5nGAggASgISAASGAoOY2FuY2VsX3BlbmRpbmcYCiABKAhIABIRCgRoZWFkGAMgASgJSAGIAQESDwoHc2hhbGxvdxgFIAMoCRIRCgl1bnNoYWxsb3cYBiADKAkSGQoRd29ya19idWRnZXRfYnl0ZXMYByABKAQSEQoJaW1wb3J0X2lkGAkgASgEQggKBnNvdXJjZUIHCgVfaGVhZCIgChBSZXBvU3RhdHNSZXF1ZXN0EgwKBHJlcG8YASABKAkivwEKE0ludGVudHNBYm92ZVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRINCgVsaW1pdBgFIAEoBBIYChBjb21wbGV0ZV9sb2dpY2FsGAYgASgIEhYKDmNvbXBhY3Rfc3RvcmVkGAcgASgIEhEKCWZyb21fYmFzZRgIIAEoCEIHCgVfaGVhZEIHCgVfYmFzZSJtChVIaXN0b3J5U3VtbWFyeVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESDgoGYnJhbmNoGAMgASgJEhEKBGJhc2UYBCABKAlIAYgBAUIHCgVfaGVhZEIHCgVfYmFzZSIrChRJbnNwZWN0Q2hhbmdlUmVxdWVzdBITCgtjaGFuZ2VfdXNkYRgBIAEoDCLfAQoOUmVmdXNhbFZlcmRpY3QSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIQCgNvaWQYAiABKAlIAYgBARITCgZkb21haW4YAyABKAlIAogBARIZCgxkaXJlY3RpdmVfaWQYBCABKAlIA4gBARIUCgdzZXNzaW9uGAUgASgJSASIAQESEQoJcGFya2VkX2F0GAYgASgJEg4KBnJlYXNvbhgHIAEoCUILCglfb2ZmZXJfaWRCBgoEX29pZEIJCgdfZG9tYWluQg8KDV9kaXJlY3RpdmVfaWRCCgoIX3Nlc3Npb24iTwobRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0EjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiNAocSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdBIUCgx2ZXJkaWN0X3VzZGEYASABKAwi1AEKFUNvbXBhY3Rpb25FcXVpdmFsZW5jZRITCgtzb3VyY2VfaGVhZBgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgDIAEoCRIZChFjYW5kaWRhdGVfZ2VuZXNpcxgEIAEoCRIWCg5zb3VyY2VfaW50ZW50cxgFIAEoBBIXCg9jYXJyaWVkX2ludGVudHMYBiABKAQSFgoOcGFya2VkX2ludGVudHMYByABKAQSEgoKZXF1aXZhbGVudBgIIAEoCCJ9CiFQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3QSEwoLc291cmNlX3JlcG8YASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSFgoOY2FuZGlkYXRlX3JlcG8YAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkiOgoPUmVhZEJsb2JSZXF1ZXN0EgwKBHJlcG8YASABKAkSCwoDb2lkGAIgASgJEgwKBHBhdGgYAyABKAkiUAoRUmVzb2x2ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSEQoEcGF0aBgDIAEoCUgAiAEBQgcKBV9wYXRoIjYKD1BoeXNpY2FsUmVmRmlsZRIRCglyZWZlcmVuY2UYASABKAkSEAoIY29udGVudHMYAiABKAwipwIKD0xpc3RSZWZzUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBnByZWZpeBgCIAEoCRIYChBsb29zZV9yZWZlcmVuY2VzGAMgAygJEiAKGGxvb3NlX2ludmVudG9yeV9jb21wbGV0ZRgEIAEoCBIgChNwYWNrZWRfcmVmc19wcmVzZW50GAUgASgISACIAQESPQoTcGh5c2ljYWxfbG9vc2VfcmVmcxgGIAMoCzIgLm5vbW9zLmtlcm5lbC52MS5QaHlzaWNhbFJlZkZpbGUSHAoUcGh5c2ljYWxfcGFja2VkX3JlZnMYByABKAwSIwobcGh5c2ljYWxfaW52ZW50b3J5X2NvbXBsZXRlGAggASgIQhYKFF9wYWNrZWRfcmVmc19wcmVzZW50IkIKD1dyaXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZ0YXJnZXQYAyABKAkiMwoQRGVsZXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCSIpCghNZXRhRmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwirgEKFldyaXRlTWV0YUNvbW1pdFJlcXVlc3QSDAoEcmVwbxgBIAEoCRIPCgdwYXJlbnRzGAIgAygJEigKBWZpbGVzGAMgAygLMhkubm9tb3Mua2VybmVsLnYxLk1ldGFGaWxlEg8KB21lc3NhZ2UYBCABKAkSFAoMdGltZV9zZWNvbmRzGAUgASgSEhYKCXJlZmVyZW5jZRgGIAEoCUgAiAEBQgwKCl9yZWZlcmVuY2UiZwoVTGF3Q2xvc3VyZUluZm9SZXF1ZXN0EhQKDGNsb3N1cmVfZmlsZRgBIAEoCRI4CgpjYXBhYmlsaXR5GAIgASgOMiQubm9tb3Mua2VybmVsLnYxLktlcm5lbExhd0NhcGFiaWxpdHkihwEKF0NoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSIQoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYAiABKAlIAIgBAUIXChVfc3RhZ2VkX2Zyb250aWVyX2ZpbGUiQQoLRnJvbnRpZXJIbGMSEAoIcGh5c2ljYWwYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIu0EChdWZXJpZmllZEZyb250aWVyUmVjZWlwdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgNvaWQYAiABKAkSDwoHaW50ZW50cxgDIAEoBBITCgtwbGFuc19yZXJ1bhgEIAEoBBIcCg9jb250cm9sbGVyX2hhc2gYBSABKAlIAIgBARIZChFpbnN0YWxsZWRfZG9tYWlucxgGIAMoCRIOCgZsaW5lYXIYByABKAgSMwoIbGFzdF9obGMYCCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAYgBARIUCgdsYXN0X2lkGAkgASgJSAKIAQESEQoJc3RhdGVfb2lkGAogASgJEhQKDHN0YXRlX3NoYTI1NhgLIAEoCRI5Cg5zdGF0ZV9sYXN0X2hsYxgMIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gDiAEBEhoKDXN0YXRlX2xhc3RfaWQYDSABKAlIBIgBARIXCg9tYW5pZmVzdF9zaGEyNTYYDiABKAkSHgoWbGF3X2Nsb3N1cmVfaWRlbnRpdGllcxgPIAMoCRIaChJyZXNvbHZhYmxlX2RvbWFpbnMYECADKAkSIgoVcHJvamVjdGlvbl9zdGF0ZV9yb290GBEgASgJSAWIAQESDgoGd2Fsa2VkGBIgASgIQhIKEF9jb250cm9sbGVyX2hhc2hCCwoJX2xhc3RfaGxjQgoKCF9sYXN0X2lkQhEKD19zdGF0ZV9sYXN0X2hsY0IQCg5fc3RhdGVfbGFzdF9pZEIYChZfcHJvamVjdGlvbl9zdGF0ZV9yb290IkUKFUZvbGRGcm9udGllckFnZ3JlZ2F0ZRIUCgxhZ2dyZWdhdGVfaWQYASABKAkSFgoOYWdncmVnYXRlX3VzZGEYAiABKAwiQQoXRm9sZEZyb250aWVyRmluZ2VycHJpbnQSEQoJaW50ZW50X2lkGAEgASgJEhMKC2ZpbmdlcnByaW50GAIgASgJItYDChRGb2xkRnJvbnRpZXJTbmFwc2hvdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgN0aXAYAiABKAkSDwoHZ2VuZXNpcxgDIAEoCRIVCg1oaXN0b3J5X2RlcHRoGAQgASgEEjoKCmFnZ3JlZ2F0ZXMYBSADKAsyJi5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyQWdncmVnYXRlEjgKDWhsY193YXRlcm1hcmsYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAIgBARIzCghsYXN0X2hsYxgHIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gBiAEBEhQKB2xhc3RfaWQYCCABKAlIAogBARIWCg5zdHJpa2VfdGFyZ2V0cxgJIAMoCRJFChNpbnRlbnRfZmluZ2VycHJpbnRzGAogAygLMigubm9tb3Mua2VybmVsLnYxLkZvbGRGcm9udGllckZpbmdlcnByaW50EhcKCnN0YXRlX3Jvb3QYCyABKAlIA4gBAUIQCg5faGxjX3dhdGVybWFya0ILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCDQoLX3N0YXRlX3Jvb3QimwMKGFN0b3JlZENoZWNrcG9pbnRNYW5pZmVzdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRITCgZjdXJzb3IYAiABKAlIAIgBARIYChBjaGVja3BvaW50X2J5dGVzGAMgASgEEhAKCGxhd19oYXNoGAQgASgJEjsKC2NvbXByZXNzaW9uGAUgASgOMiYubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRDb21wcmVzc2lvbhIRCglyYXdfYnl0ZXMYBiABKAQSFAoMc3RvcmVkX2J5dGVzGAcgASgEEh0KFWZyb250aWVyX3N0b3JlZF9ieXRlcxgIIAEoBBIXCgpzdGF0ZV9yb290GAkgASgJSAGIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgKIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgCiAEBQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCHAoaX3ZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQiwQMKF0NoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoIZnJvbnRpZXIYAiABKAxIABIeChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgGIAEoCUgAEhMKBmN1cnNvchgDIAEoCUgBiAEBEhcKCnN0YXRlX3Jvb3QYBCABKAlIAogBARINCgVzcGFucxgFIAEoCBIRCgRoZWFkGAcgASgJSAOIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgIIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgEiAEBEkoKE3ZlcmlmaWNhdGlvbl9wb2xpY3kYCSABKA4yLS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeUIRCg9mcm9udGllcl9zb3VyY2VCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIHCgVfaGVhZEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCIxChZDYXBhY2l0eVJlc2VydmVSZXF1ZXN0EhcKD2FnZ3JlZ2F0ZV9jb3VudBgBIAEoBCKZAgoSUmVzdG9yZU1haW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCRITCgtkaWFnbm9zdGljcxgDIAEoCBIYChBvcGVyYXRvcl9jdXN0b2R5GAQgASgIEiAKE2V4cGVjdGVkX2xvY2FsX2hlYWQYBSABKAlIAIgBARJAChNjdXN0b2R5X2NlcnRpZmljYXRlGAYgASgLMiMubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlDZXJ0aWZpY2F0ZRIYChBwcm92aWRlcl9jdXN0b2R5GAcgASgIQhYKFF9leHBlY3RlZF9sb2NhbF9oZWFkIm0KE0F1ZGl0Q3VzdG9keVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIVCg1idWRnZXRfbWljcm9zGAIgASgNEg0KBXN0YXJ0GAMgASgIIpQBChRBdWRpdEN1c3RvZHlSZXNwb25zZRIPCgdwZW5kaW5nGAEgASgIEgwKBGhlYWQYAiABKAkSDgoGd2Fsa2VkGAMgASgEEg0KBXRvdGFsGAQgASgEEg8KB291dGNvbWUYBSABKAkSLQoHdmVyZGljdBgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCJ+CgtMYXdQcm9kdWN0cxIUCgxsYXdfaWRlbnRpdHkYASABKAkSFgoOZm9ybWF0X3ZlcnNpb24YAiABKA0SEgoKcmVhZF9sYXllchgDIAEoDBIVCg1jb21tYW5kX2xheWVyGAQgASgMEhYKDnNlbWFudGljX2xheWVyGAUgASgMIkwKGEV4cG9ydExhd1Byb2R1Y3RzUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0IlkKGUV4cG9ydExhd1Byb2R1Y3RzUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyJ8ChhJbXBvcnRMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyItChlJbXBvcnRMYXdQcm9kdWN0c1Jlc3BvbnNlEhAKCGltcG9ydGVkGAEgAygJIm8KEkN1c3RvZHlDZXJ0aWZpY2F0ZRIRCgl3b3Jrc3BhY2UYASABKAkSDAoEaGVhZBgCIAEoCRIRCglrZXlfZXBvY2gYAyABKAMSEgoKcHVibGljX2tleRgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwiZAoTT3BlbkdpdFN0YXRlUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSDQoFc3BhbnMYAyABKAgiawoaQXR0YWNoTG9jYWxGcm9udGllclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEg0KBXNwYW5zGAMgASgIIlMKDUN1c3RvZHlSZW1vdGUSDAoEbmFtZRgBIAEoCRILCgN1cmwYAiABKAkSFQoNcGVlcl9pZGVudGl0eRgDIAEoCRIQCghwcmlvcml0eRgEIAEoDSLGAQoUQ3VzdG9keVBsYWNlbWVudFJ1bGUSEgoKcGVlcl9jbGFzcxgBIAEoCRJAChBrZXJuZWxfcmVzaWRlbmN5GAIgASgOMiYubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlc2lkZW5jeUludGVudBJCChFjdXN0b2R5X3JldGVudGlvbhgDIAEoDjInLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmV0ZW50aW9uSW50ZW50EhQKDHJlbW90ZV9uYW1lcxgEIAMoCSKuAgoWQ3VzdG9keVBsYWNlbWVudFBvbGljeRITCgtkZWNsYXJhdGlvbhgBIAEoCRIWCg5wYWNrYWdlX3NoYTI1NhgCIAEoCRI0CgVydWxlcxgDIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UGxhY2VtZW50UnVsZRISCgphZG9wdGVkX2J5GAQgASgJEg4KBnJlYXNvbhgFIAEoCRIeChZlZmZlY3RpdmVfdGltZV9zZWNvbmRzGAYgASgSEi8KB3JlbW90ZXMYByADKAsyHi5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlbW90ZRIiChVyZWNpcGllbnRfbWFpbGJveF91cmwYCCABKAlIAIgBAUIYChZfcmVjaXBpZW50X21haWxib3hfdXJsIlkKG0N1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhIQCgZhYnNlbnQYASABKAhIABINCgNvaWQYAiABKAlIABINCgNhbnkYAyABKAhIAEIKCghmcm9udGllciIrChtSZWFkQ3VzdG9keVBsYWNlbWVudFJlcXVlc3QSDAoEcmVwbxgBIAEoCSI1Ch5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlcXVlc3QSEwoLcG9saWN5X3VzZGEYASABKAwiiQEKDlBsYWNlbWVudE9mZmVyEj4KCGV4cGVjdGVkGAEgASgLMiwubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhI3CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJpChtSZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgltYWluX2hlYWQYAiABKAkSFQoNaGludGVkX2NvbW1pdBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJIpYTCg9DdXN0b2R5UmVzcG9uc2USOAoKcGFja19kZWx0YRgKIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXNwb25zZUgAEjgKCmFwcGx5X3BhY2sYCyABKAsyIi5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVzcG9uc2VIABI4CgpyZXBvX3N0YXRzGAwgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1Jlc3BvbnNlSAASPgoNaW50ZW50c19hYm92ZRgNIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXNwb25zZUgAEkAKDmluc3BlY3RfY2hhbmdlGA4gASgLMiYubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXNwb25zZUgAEk8KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLS5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAElEKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi4ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASNgoJcmVhZF9ibG9iGBEgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVzcG9uc2VIABI6CgtyZXNvbHZlX3JlZhgSIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVzcG9uc2VIABI2CglsaXN0X3JlZnMYEyABKAsyIS5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXNwb25zZUgAEjIKCXdyaXRlX3JlZhgUIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABIzCgpkZWxldGVfcmVmGBUgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEkUKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMigubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlc3BvbnNlSAASQwoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzInLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1Jlc3BvbnNlSAASRgoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlSAASRgoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlSAASRAoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXNwb25zZUgAEjwKDHJlc3RvcmVfbWFpbhgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlc3BvbnNlSAASTwoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlc3BvbnNlSAASSAoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMioubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2VIABJCCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJy5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXNwb25zZUgAElsKHHByb3ZlX2NvbXBhY3Rpb25fZXF1aXZhbGVuY2UYHyABKAsyMy5ub21vcy5rZXJuZWwudjEuUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXNwb25zZUgAEj8KDm9wZW5fZ2l0X3N0YXRlGCAgASgLMiUubm9tb3Mua2VybmVsLnYxLk9wZW5HaXRTdGF0ZVJlc3BvbnNlSAASTwoWcmVhZF9jdXN0b2R5X3BsYWNlbWVudBghIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZWFkQ3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASVQoZaW5zcGVjdF9jdXN0b2R5X3BsYWNlbWVudBgjIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASUQoXcmVsZWFzZV93b3Jrc3BhY2Vfc3RhdGUYJCABKAsyLi5ub21vcy5rZXJuZWwudjEuUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2VIABJaCh9yZWNvcmRfd29ya3NwYWNlX2VmZmVjdF9vdXRjb21lGCUgASgLMi8ubm9tb3Mua2VybmVsLnYxLlJlY29yZGVkV29ya3NwYWNlRWZmZWN0T3V0Y29tZUgAEk0KFWF0dGFjaF9sb2NhbF9mcm9udGllchgmIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5BdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2VIABJEChBhZ2dyZWdhdGVfY2Vuc3VzGCcgASgLMigubm9tb3Mua2VybmVsLnYxLkFnZ3JlZ2F0ZUNlbnN1c1Jlc3BvbnNlSAASPgoNYXVkaXRfY3VzdG9keRgoIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdWRpdEN1c3RvZHlSZXNwb25zZUgAEkkKE2V4cG9ydF9sYXdfcHJvZHVjdHMYKSABKAsyKi5ub21vcy5rZXJuZWwudjEuRXhwb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAEkkKE2ltcG9ydF9sYXdfcHJvZHVjdHMYKiABKAsyKi5ub21vcy5rZXJuZWwudjEuSW1wb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAEksKFHByZXBhcmVfbGF3X3Byb2R1Y3RzGCsgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlSAASQgoYcmVjb3Zlcl9kZXRhY2hlZF9yZWNlaXB0GCwgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEILCglvcGVyYXRpb25KBAgiECNSF2Fkb3B0X2N1c3RvZHlfcGxhY2VtZW50InAKEVBhY2tEZWx0YVJlc3BvbnNlEgwKBHBhY2sYASABKAwSDQoFYnl0ZXMYAiABKAQSDwoHc2hhbGxvdxgDIAMoCRIPCgdjb21taXRzGAQgASgNEg0KBXRyZWVzGAUgASgNEg0KBWJsb2JzGAYgASgNIuIBChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJEjsKB2Nsb3N1cmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUGh5c2ljYWxDbG9zdXJlQ2hlY2tIAIgBARIWCg5pbXBvcnRfcGVuZGluZxgEIAEoCBIXCg93b3JrX2RvbmVfYnl0ZXMYBSABKAQSEQoJaW1wb3J0X2lkGAYgASgEEhcKD2ltcG9ydF9kZWZlcnJlZBgHIAEoCEIKCghfY2xvc3VyZSJtChRQaHlzaWNhbENsb3N1cmVDaGVjaxIWCg5yZXVzZWRfcmVjZWlwdBgBIAEoCBIUCgxjb21taXRzX3JlYWQYAiABKAQSEgoKdHJlZXNfcmVhZBgDIAEoBBITCgtsZWF2ZXNfcmVhZBgEIAEoBCK4AQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEEg8KB3NoYWxsb3cYCCADKAki4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkInQKFkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2USDAoEaGVhZBgBIAEoCRIOCgZvbGRlc3QYAiABKAkSFAoMY29tbWl0X2NvdW50GAMgASgEEhAKCGNvbXBsZXRlGAQgASgIEhQKDHJlYWNoZWRfYmFzZRgFIAEoCCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCJ1CiJQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlEjgKCGV2aWRlbmNlGAEgASgLMiYubm9tb3Mua2VybmVsLnYxLkNvbXBhY3Rpb25FcXVpdmFsZW5jZRIVCg1ldmlkZW5jZV91c2RhGAIgASgMIi8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLfAwoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCyABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IusCChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIEjcKCWFzc3VyYW5jZRgKIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhIKCnJlYWRfcmVhZHkYCyABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIsABChRPcGVuR2l0U3RhdGVSZXNwb25zZRIOCgZvcGVuZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPYWdncmVnYXRlX2NvdW50GAMgASgEEisKBXNwYW5zGAQgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhMKBmN1cnNvchgFIAEoCUgBiAEBEhIKCnJlYWRfcmVhZHkYBiABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIukBChtBdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2USEAoIYXR0YWNoZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESDAoEaGVhZBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBISCgpyZWFkX3JlYWR5GAcgASgIEhwKFGZvcmVpZ25fc291cmNlX3JlYWR5GAggASgIQgkKB19yZWFzb24iMQocUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVxdWVzdBIRCgl3b3Jrc3BhY2UYASABKAkiMQodUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2USEAoIcmVsZWFzZWQYASABKAgiiwEKHFJlYWRDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2USFQoIZnJvbnRpZXIYASABKAlIAIgBARI8CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeUgBiAEBQgsKCV9mcm9udGllckIJCgdfcG9saWN5Il0KEFBsYWNlbWVudEFkb3B0ZWQSEAoIZnJvbnRpZXIYASABKAkSNwoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiWgofSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZRI3CgZwb2xpY3kYASABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyLvAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EjcKCWFzc3VyYW5jZRgGIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhAKCGFjY2VwdGVkGAcgASgIIpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASI6Cg9IaXN0b3J5UmVxdWlyZWQSEQoJd29ya3NwYWNlGAEgASgJEhQKDHVudGlsX2NvbW1pdBgCIAEoCSJAChVMYXdQcmVwYXJhdGlvblVuaXRTZXQSJwoFdW5pdHMYASADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdCJNChBQcmVwYXJlZExhd0xheWVyEg0KBWlucHV0GAEgASgJEgsKA2tleRgCIAEoCRINCgVsYXllchgDIAEoDBIOCgZzaGEyNTYYBCABKAki6AIKGVByZXBhcmVMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBI5Cgl1bml0X3NldHMYAiADKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3UHJlcGFyYXRpb25Vbml0U2V0Ej0KCGV4cGVjdGVkGAMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlEjEKD2NhbmRpZGF0ZV91bml0cxgEIAMoCzIYLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0EhUKDWNvdmVyYWdlX29ubHkYBSABKAgSFQoNY3VzdG9keV9oZWFkcxgGIAMoCRI+Cgtkb21haW5fcGxhbhgHIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlRG9tYWluUGxhblJlcXVlc3QiyAEKGlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlEhkKEWtlcm5lbF9nZW5lcmF0aW9uGAEgASgJEhEKCXVuaXRfc2V0cxgCIAMoCRIYChBwcmVwYXJhdGlvbl9rZXlzGAMgAygJEjEKBmxheWVycxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlZExhd0xheWVyEhMKC2Rlcml2YXRpb25zGAUgASgEEhoKEnByZXBhcmF0aW9uX21pY3JvcxgGIAEoBCKIAQodUmVjb3ZlckRldGFjaGVkUmVjZWlwdFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBI1CgZjaGFuZ2UYAiABKAsyJS5ub21vcy5rZXJuZWwudjEuRGV0YWNoZWRTaWduZWRDaGFuZ2UqbgoPTGF3VmVyc2lvbk9yZGVyEiEKHUxBV19WRVJTSU9OX09SREVSX1VOU1BFQ0lGSUVEEAASGwoXTEFXX1ZFUlNJT05fT1JERVJfRVFVQUwQARIbChdMQVdfVkVSU0lPTl9PUkRFUl9MT1dFUhACKuoBChJCaXJ0aE91dGNvbWVTdGF0dXMSJAogQklSVEhfT1VUQ09NRV9TVEFUVVNfVU5TUEVDSUZJRUQQABIdChlCSVJUSF9PVVRDT01FX1NUQVRVU19CT1JOEAESIQodQklSVEhfT1VUQ09NRV9TVEFUVVNfREVGRVJSRUQQAhIfChtCSVJUSF9PVVRDT01FX1NUQVRVU19GQUlMRUQQAxIgChxCSVJUSF9PVVRDT01FX1NUQVRVU19SRUZVU0VEEAQSKQolQklSVEhfT1VUQ09NRV9TVEFUVVNfVU5XQVJSQU5URURfQ0VSVBAFKswUChFLZXJuZWxSZWZ1c2FsQ29kZRIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1VOU1BFQ0lGSUVEEAASJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9CQURfU0lHTkFUVVJFEAESJAogS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkFVVEhPUklaRUQQAhInCiNLRVJORUxfUkVGVVNBTF9DT0RFX1BPTElDWV9ESVNBQkxFRBADEioKJktFUk5FTF9SRUZVU0FMX0NPREVfVU5DRVJUSUZJRURfUE9MSUNZEAQSIwofS0VSTkVMX1JFRlVTQUxfQ09ERV9SRUZFUkVOVElBTBAFEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfUE9JTlRfU1RBVEVfVU5BVkFJTEFCTEUQBhIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX0NBUF9FWENFRURFRBAHEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0NPVU5UX1VOQVZBSUxBQkxFEAgSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9FVklERU5DRV9VTkJBQ0tFRBAJEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1JQSEFOX1JFQ0VJUFQQChI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX1JFQ0VJUFRfT05fVEVSTUlOQUxfT0JMSUdBVElPThALEiIKHktFUk5FTF9SRUZVU0FMX0NPREVfTk9UX01JTlRFRBAMEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRE9NQUlOX0xJRkVDWUNMRRANEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfVFlQRV9UQUdfTUlTTUFUQ0gQDhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1JFVElSRURfUkVBRF9TVVJGQUNFEA8SMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DUk9TU19XT1JLU1BBQ0VfREVDTElORUQQEBIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FHR1JFR0FURV9JTlZBUklBTlQQERIrCidLRVJORUxfUkVGVVNBTF9DT0RFX1dPUktTUEFDRV9JTlZBUklBTlQQEhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfQ09ORkxJQ1QQExIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1JFUVVJUkVEEBQSNAowS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9VTkRFQ0xBUkVEEBUSMQotS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9JTlZBTElEEBYSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9TVEFMRRAXEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9VTkRFQ0xBUkVEEBgSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1BSSVZBVEUQGRIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5ERUNMQVJFRBAaEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTlRSVVNURURfS0VZEBsSNgoyS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9TT1VSQ0UQHBIsCihLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRk9SR0VEEB0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1NUQUxFEB4SLgoqS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX09WRVJTSVpFEB8SNwozS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX0RJU0hPTk9SRURfU09VUkNFECASNQoxS0VSTkVMX1JFRlVTQUxfQ09ERV9FUVVJVk9DQVRJT05fRVZJREVOQ0VfSU5WQUxJRBAhEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNUQVRJT05fUkVDRUlQVF9JTlZBTElEECISKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfUk9TVEVSX01JU01BVENIECMSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfRVBPQ0hfTk9UX01PTk9UT05JQxAkEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfV1JJVEVfRVBPQ0hfU1RBTEUQJRItCilLRVJORUxfUkVGVVNBTF9DT0RFX0VOVkVMT1BFX1NJRF9NSVNNQVRDSBAmEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfUkVWT0tFRF9NRU1CRVJfUkVTVVJSRUNURUQQJxIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX0ZPUkdFRF9QUklOQ0lQQUwQKBIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX0tFWV9BTkNIT1IQKRImCiJLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX1JFQ09WRVJZECoSLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9TVVJGQUNFRF9CQVNJU19BSEVBRBArEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfU0lHTkVSX0VQT0NIX09VVF9PRl9XSU5ET1cQLBImCiJLRVJORUxfUkVGVVNBTF9DT0RFX0VWT0xWRV9SRUZVU0VEEC0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9JTlZBTElEEC4SLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9QQVJFTlRfRElEX05PVF9BVFRFU1QQLxIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0NFUlRfQ0hBSU5fQlJPS0VOEDASKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfUk9PVEVEX0FUX1JPT1QQMRIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX0RFTEVHQVRJT05fSU5WQUxJRBAyEiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfUExBTl9SRUpFQ1RFRBAzEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRE9NQUlOX1JFRlVTRUQQNBIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0lOVkFSSUFOVF9FWEVDVVRJT05fRkFVTFQQNRI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0NIRUNLUE9JTlRfU0lHTkVSX1VOQVZBSUxBQkxFEDYSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9PRkZFUl9CQVNFX1NUQUxFEDcSJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9CSVJUSF9SRUZVU0VEEDgq7wIKEEZ1bGxSZXN1bHRSZWFzb24SIgoeRlVMTF9SRVNVTFRfUkVBU09OX1VOU1BFQ0lGSUVEEAASHgoaRlVMTF9SRVNVTFRfUkVBU09OX05PX0JBU0UQARIiCh5GVUxMX1JFU1VMVF9SRUFTT05fTEFXX0NIQU5HRUQQAhItCilGVUxMX1JFU1VMVF9SRUFTT05fUkVBRF9BVVRIT1JJVFlfQ0hBTkdFRBADEikKJUZVTExfUkVTVUxUX1JFQVNPTl9QRVJfUkVDT1JEX1JFRlVTQUwQBBIjCh9GVUxMX1JFU1VMVF9SRUFTT05fT1JERVJFRF9SRUFEEAUSJgoiRlVMTF9SRVNVTFRfUkVBU09OX1RFTVBPUkFMX0ZJRUxEUxAGEicKI0ZVTExfUkVTVUxUX1JFQVNPTl9CQVNFX1VOQVZBSUxBQkxFEAcSIwofRlVMTF9SRVNVTFRfUkVBU09OX0xFR0FDWV9TVEFURRAIKskBChNJbnRlcmZhY2VNZW1iZXJLaW5kEiUKIUlOVEVSRkFDRV9NRU1CRVJfS0lORF9VTlNQRUNJRklFRBAAEiAKHElOVEVSRkFDRV9NRU1CRVJfS0lORF9ET01BSU4QARIjCh9JTlRFUkZBQ0VfTUVNQkVSX0tJTkRfRElSRUNUSVZFEAISIwofSU5URVJGQUNFX01FTUJFUl9LSU5EX0FHR1JFR0FURRADEh8KG0lOVEVSRkFDRV9NRU1CRVJfS0lORF9GSUVMRBAEKogCChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5U3RhdHVzEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19VTlNQRUNJRklFRBAAEigKJElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19FWEFDVBABEi0KKUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19DT01QQVRJQkxFEAISLgoqSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX1VOQVZBSUxBQkxFEAMSLworSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX0lOQ09NUEFUSUJMRRAEKsMDChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVhc29uEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9VTlNQRUNJRklFRBAAEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9ET01BSU5fTUlTU0lORxABEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NRU1CRVJfTUlTU0lORxACEjAKLElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9GSUVMRF9NSVNTSU5HEAMSNQoxSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1ZBTFVFX0tJTkRfQ0hBTkdFRBAEEjcKM0lOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9SRVFVSVJFRF9JTlBVVF9BRERFRBAFEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NQVRSSVhfSU5WQUxJRBAGEjgKNElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9XSVJFX0NPTlRSQUNUX0NIQU5HRUQQByq3AgoQTWFpbnRlbmFuY2VQaGFzZRIhCh1NQUlOVEVOQU5DRV9QSEFTRV9VTlNQRUNJRklFRBAAEiQKIE1BSU5URU5BTkNFX1BIQVNFX1JFQURfRE9DVU1FTlRTEAESIgoeTUFJTlRFTkFOQ0VfUEhBU0VfU1FMSVRFX0lOREVYEAISJgoiTUFJTlRFTkFOQ0VfUEhBU0VfQ09NTUFORF9GUk9OVElFUhADEiMKH01BSU5URU5BTkNFX1BIQVNFX0NPTU1BTkRfUk9VVEUQBBIhCh1NQUlOVEVOQU5DRV9QSEFTRV9HSVRfQ1VTVE9EWRAFEiYKIk1BSU5URU5BTkNFX1BIQVNFX1JFQURfSU5ERVhfQ0FDSEUQBhIeChpNQUlOVEVOQU5DRV9QSEFTRV9DT01QTEVURRAHKooBCg9WZXJpZnlDaGFpbldhbGsSIQodVkVSSUZZX0NIQUlOX1dBTEtfVU5TUEVDSUZJRUQQABIaChZWRVJJRllfQ0hBSU5fV0FMS19GVUxMEAESHAoYVkVSSUZZX0NIQUlOX1dBTEtfU1VGRklYEAISGgoWVkVSSUZZX0NIQUlOX1dBTEtfTUVNTxADKnAKGEVmZmVjdEV4ZWN1dGlvblBsYWNlbWVudBIqCiZFRkZFQ1RfRVhFQ1VUSU9OX1BMQUNFTUVOVF9VTlNQRUNJRklFRBAAEigKJEVGRkVDVF9FWEVDVVRJT05fUExBQ0VNRU5UX0NVU1RPRElBThABKnYKGkVmZmVjdEV4ZWN1dGlvbkNhcmRpbmFsaXR5EiwKKEVGRkVDVF9FWEVDVVRJT05fQ0FSRElOQUxJVFlfVU5TUEVDSUZJRUQQABIqCiZFRkZFQ1RfRVhFQ1VUSU9OX0NBUkRJTkFMSVRZX1NJTkdMRVRPThABKrcBChdNb2RlbExpZmVjeWNsZU9wZXJhdGlvbhIpCiVNT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASJQohTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9JTlNUQUxMEAESIwofTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9TVEFHRRACEiUKIU1PREVMX0xJRkVDWUNMRV9PUEVSQVRJT05fUFJPTU9URRADKtwBCh1DaGlsZFdvcmtzcGFjZUxpZmVjeWNsZVN0YXR1cxIwCixDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19VTlNQRUNJRklFRBAAEisKJ0NISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX0FDVElWRRABEiwKKENISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX1JFVElSRUQQAhIuCipDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19SRUNMQUlNRUQQAyr4AQoiRGVjbGFyZWRBdXRoZW50aWNhdGlvblByb3ZpZGVyS2luZBI1CjFERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1VOU1BFQ0lGSUVEEAASMgouREVDTEFSRURfQVVUSEVOVElDQVRJT05fUFJPVklERVJfS0lORF9TRUxFQ1RFRBABEjIKLkRFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfRU5ST0xMRUQQAhIzCi9ERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1NPVkVSRUlHThADKooBChVEZWNsYXJlZExhd01lbWJlcktpbmQSKAokREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX1VOU1BFQ0lGSUVEEAASJAogREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX0NPTU1BTkQQARIhCh1ERUNMQVJFRF9MQVdfTUVNQkVSX0tJTkRfUkVBRBACKosGCh9Qcm92aWRlclRva2VuVmVyaWZpY2F0aW9uU3RhdHVzEjIKLlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIsCihQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX1ZBTElEEAESNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19OT19NQVRDSElOR19LRVkQAhIuCipQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0VYUElSRUQQAxI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PVF9ZRVRfVkFMSUQQBBI2CjJQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0lTU1VFUl9NSVNNQVRDSBAFEjgKNFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfQVVESUVOQ0VfTUlTTUFUQ0gQBhI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0JBRF9TSUdOQVRVUkUQBxIwCixQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX01BTEZPUk1FRBAIEjwKOFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TVVBQT1JURURfQUxHT1JJVEhNEAkSLgoqUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19CQURfS0VZEAoSNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1NVQkpFQ1QQCxIyCi5QUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PX1ZFUklGSUVSEAwSNAowUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1RPS0VOEA0qyAEKEkRldmljZVNpZ25lclN0YXR1cxIkCiBERVZJQ0VfU0lHTkVSX1NUQVRVU19VTlNQRUNJRklFRBAAEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FDVElWRRABEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FCU0VOVBACEiAKHERFVklDRV9TSUdORVJfU1RBVFVTX1JFVk9LRUQQAxIoCiRERVZJQ0VfU0lHTkVSX1NUQVRVU19LRVlfVU5BVkFJTEFCTEUQBCrXAQoTQmlydGhFdmlkZW5jZVN0YXR1cxIlCiFCSVJUSF9FVklERU5DRV9TVEFUVVNfVU5TUEVDSUZJRUQQABImCiJCSVJUSF9FVklERU5DRV9TVEFUVVNfTk9UX1JFUVVJUkVEEAESHwobQklSVEhfRVZJREVOQ0VfU1RBVFVTX1JFQURZEAISLQopQklSVEhfRVZJREVOQ0VfU1RBVFVTX0RFTEVHQVRJT05fUkVRVUlSRUQQAxIhCh1CSVJUSF9FVklERU5DRV9TVEFUVVNfSU5WQUxJRBAEKrIBChFRdWVyeVJlc3VsdEZvcm1hdBIjCh9RVUVSWV9SRVNVTFRfRk9STUFUX1VOU1BFQ0lGSUVEEAASJAogUVVFUllfUkVTVUxUX0ZPUk1BVF9MRUdBQ1lfVkFMVUUQARIkCiBRVUVSWV9SRVNVTFRfRk9STUFUX05PTUlOQUxfVVNEQRACEiwKKFFVRVJZX1JFU1VMVF9GT1JNQVRfQVBQTElDQVRJT05fUFJPVE9CVUYQAyqVDAoOUXVlcnlPcGVyYXRpb24SHwobUVVFUllfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYUVVFUllfT1BFUkFUSU9OX0VYVFJFTVVNEAESIAocUVVFUllfT1BFUkFUSU9OX1JFQURfUE9TVFVSRRAEEh8KG1FVRVJZX09QRVJBVElPTl9DVVJSRU5UX0xBVxAFEiMKH1FVRVJZX09QRVJBVElPTl9JTlRFUkZBQ0VfT0ZGRVIQBhInCiNRVUVSWV9PUEVSQVRJT05fUkVMQVRJT05fR0FURV9PRkZFUhAHEh0KGVFVRVJZX09QRVJBVElPTl9TQ0VORV9MQVcQCBIhCh1RVUVSWV9PUEVSQVRJT05fSU5TVEFMTEVEX0xBVxAJEhwKGFFVRVJZX09QRVJBVElPTl9ERVNDUklCRRAKEiMKH1FVRVJZX09QRVJBVElPTl9LRVJORUxfUkVTT1VSQ0UQCxIjCh9RVUVSWV9PUEVSQVRJT05fREVWRUxPUEVSX1NQQU5TEAwSKQolUVVFUllfT1BFUkFUSU9OX0RFQ0xBUkVEX0NBUEFCSUxJVElFUxANEh0KGVFVRVJZX09QRVJBVElPTl9SRUFESU5FU1MQDhIkCiBRVUVSWV9PUEVSQVRJT05fUFJPSkVDVElPTl9TVEFUUxAPEiUKIVFVRVJZX09QRVJBVElPTl9NRU1PUllfRFJPUF9QUk9CRRAQEhgKFFFVRVJZX09QRVJBVElPTl9XQVJNEBESGwoXUVVFUllfT1BFUkFUSU9OX1JFRlJFU0gQEhIgChxRVUVSWV9PUEVSQVRJT05fVkVSSUZZX0NIQUlOEBMSIgoeUVVFUllfT1BFUkFUSU9OX0NPVU5URVJGQUNUVUFMEBQSGQoVUVVFUllfT1BFUkFUSU9OX1JPVVRFEBUSJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19TRUFMX0ZJRUxEEBgSLAooUVVFUllfT1BFUkFUSU9OX0NSWVBUT19CTElORF9JTkRFWF9UT0tFThAZEioKJlFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfU0NPUEVfS0VZEBoSLworUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9ERVZJQ0VfUkVRVUVTVBAbEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9BUFBST1ZBTBAcEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9SRUNPVkVSWRAdEiAKHFFVRVJZX09QRVJBVElPTl9SRUNFSVBUX1BBVEgQIhIdChlRVUVSWV9PUEVSQVRJT05fQ0VSVF9TSUdOECMSJQohUVVFUllfT1BFUkFUSU9OX0JJUlRIX1RSVVNUX1NUQVRFECQSIQodUVVFUllfT1BFUkFUSU9OX0VSQV9DRVJUX1NJR04QJRIoCiRRVUVSWV9PUEVSQVRJT05fREVMRUdBVElPTl9DRVJUX1NJR04QJhIpCiVRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX0ZST05USUVSECcSKwonUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9QUk9KRUNUSU9OECgiBAgCEAIiBAgDEAMiBAgWEBYiBAgXEBciBAgeEB4iBAgfEB8iBAggECAiBAghECEqIVFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUUyooUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RfU1VNTUFSWSoUUVVFUllfT1BFUkFUSU9OX01JTlQqHVFVRVJZX09QRVJBVElPTl9DUllQVE9fS0VZR0VOKh9RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1dSQVBfS0VZKiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1VOV1JBUF9LRVkqHVFVRVJZX09QRVJBVElPTl9BVVRIT1JfS0VZR0VOKiBRVUVSWV9PUEVSQVRJT05fQVRURVNUQVRJT05fU0lHTiqpAQoZUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIsCihSRUFEX1BST0pFQ1RJT05fU1RPUkFHRV9LSU5EX1VOU1BFQ0lGSUVEEAASKQolUkVBRF9QUk9KRUNUSU9OX1NUT1JBR0VfS0lORF9SRVNJREVOVBABEjMKL1JFQURfUFJPSkVDVElPTl9TVE9SQUdFX0tJTkRfRklMRV9CQUNLRURfU0NBTEFSEAIq0gIKFVJlc2lkZW50Q29tcG9uZW50S2luZBInCiNSRVNJREVOVF9DT01QT05FTlRfS0lORF9VTlNQRUNJRklFRBAAEiYKIlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0ZPTERfU1RBVEUQARItCilSRVNJREVOVF9DT01QT05FTlRfS0lORF9SRUFEX01PREVMX1NRTElURRACEi4KKlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfSU5ERVhFUxADEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1NIQVJFRF9BVFRSSUJVVEVEEAQSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfV09SS1NQQUNFX0NBQ0hFUxAFEiwKKFJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0dJVF9PQkpFQ1RfQ0FDSEUQBipsChNLZXJuZWxMYXdDYXBhYmlsaXR5EiUKIUtFUk5FTF9MQVdfQ0FQQUJJTElUWV9VTlNQRUNJRklFRBAAEi4KKktFUk5FTF9MQVdfQ0FQQUJJTElUWV9TVEFHRV9aRVJPX0JPT1RTVFJBUBABKlkKFUNoZWNrcG9pbnRDb21wcmVzc2lvbhIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX05PTkUQABIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX0daSVAQASqRAQocQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeRIzCi9DSEVDS1BPSU5UX1ZFUklGSUNBVElPTl9QT0xJQ1lfVkVSSUZZX0NBTk9OSUNBTBAAEjwKOENIRUNLUE9JTlRfVkVSSUZJQ0FUSU9OX1BPTElDWV9UUlVTVF9QUkVWSU9VU0xZX1ZFUklGSUVEEAEqgAEKE0NoZWNrcG9pbnRBc3N1cmFuY2USJAogQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVU5TUEVDSUZJRUQQABIgChxDSEVDS1BPSU5UX0FTU1VSQU5DRV9UUlVTVEVEEAESIQodQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVkVSSUZJRUQQAiqJAQoVS2VybmVsUmVzaWRlbmN5SW50ZW50EicKI0tFUk5FTF9SRVNJREVOQ1lfSU5URU5UX1VOU1BFQ0lGSUVEEAASIAocS0VSTkVMX1JFU0lERU5DWV9JTlRFTlRfV0FSTRABEiUKIUtFUk5FTF9SRVNJREVOQ1lfSU5URU5UX09OX0RFTUFORBACKq4BChZDdXN0b2R5UmV0ZW50aW9uSW50ZW50EigKJENVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9VTlNQRUNJRklFRBAAEiMKH0NVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9SRVRBSU4QARIiCh5DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfQ0FDSEUQAhIhCh1DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfTk9ORRADKqgBChpJbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudBIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1VOU1BFQ0lGSUVEEAASLgoqSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9TRUFMRURfQ0hBTkdFEAESLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9DT01NSVRfVFJFRRACKokBChVMaWZlY3ljbGVJbnN0YWxsUGhhc2USJwojTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfVU5TUEVDSUZJRUQQABIiCh5MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9BQ1RJVkUQARIjCh9MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9QRU5ESU5HEAIyWQoSTm9tb3NLZXJuZWxTZXJ2aWNlEkMKBENhbGwSHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3QaHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlYgZwcm90bzM", [file_google_protobuf_any]);
7869
7990
  var CallRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 0);
7870
7991
  var CallResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 1);
7871
7992
  var OfferResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 5);
@@ -7894,56 +8015,57 @@
7894
8015
  var CapturedClockSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 97);
7895
8016
  var BirthCertificateSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 98);
7896
8017
  var SignBirthCertificateRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 99);
7897
- var IdentityProviderWitnessAdoptionSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 102);
7898
- var OfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 103);
7899
- var QueryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 109);
7900
- var IdentityProviderWitnessQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 114);
7901
- var ChildWorkspaceQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 118);
7902
- var InstalledLawDeclarationsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 121);
7903
- var DirectiveAuthoringRequirementsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 127);
7904
- var AuthenticationPostureQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 129);
7905
- var QueryAuthoritySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 136);
7906
- var NomosRefSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 142);
7907
- var ReferenceVersionsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 144);
7908
- var NamedQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 150);
7909
- var FrontierTransitionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 151);
7910
- var AuthorizationCheckRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 161);
7911
- var OutboxRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 168);
7912
- var SyncRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 169);
7913
- var KernelConfigurationRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 170);
7914
- var CustodyRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 172);
7915
- var AggregateCensusRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 173);
7916
- var ResidentFootprintRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 176);
7917
- var PackDeltaRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 180);
7918
- var ApplyPackRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 181);
7919
- var RepoStatsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 182);
7920
- var IntentsAboveRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 183);
7921
- var HistorySummaryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 184);
7922
- var InspectChangeRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 185);
7923
- var InspectRefusalVerdictRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 188);
7924
- var ReadBlobRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 191);
7925
- var ResolveRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 192);
7926
- var PhysicalRefFileSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 193);
7927
- var ListRefsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 194);
7928
- var WriteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 195);
7929
- var DeleteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 196);
7930
- var LawClosureInfoRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 199);
7931
- var RestoreMainRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 209);
7932
- var LawProductsSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 212);
7933
- var ExportLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 213);
7934
- var ExportLawProductsResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 214);
7935
- var ImportLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 215);
7936
- var AttachLocalFrontierRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 219);
7937
- var CustodyRemoteSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 220);
7938
- var CustodyPlacementPolicySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 222);
7939
- var CustodyPlacementExpectationSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 223);
7940
- var ReadCustodyPlacementRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 224);
7941
- var InspectCustodyPlacementRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 225);
7942
- var PlacementOfferSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 226);
7943
- var ResolveStatePositionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 227);
7944
- var ReleaseWorkspaceStateRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 255);
7945
- var NomosValueSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 263);
7946
- var NomosStructSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 266);
8018
+ var IdentityProviderWitnessAdoptionSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 112);
8019
+ var OfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 113);
8020
+ var QueryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 119);
8021
+ var IdentityProviderWitnessQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 124);
8022
+ var ChildWorkspaceQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 128);
8023
+ var InstalledLawDeclarationsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 131);
8024
+ var DirectiveAuthoringRequirementsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 137);
8025
+ var AuthenticationPostureQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 139);
8026
+ var QueryAuthoritySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 146);
8027
+ var NomosRefSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 152);
8028
+ var ReferenceVersionsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 154);
8029
+ var NamedQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 160);
8030
+ var FrontierTransitionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 161);
8031
+ var AuthorizationCheckRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 171);
8032
+ var OutboxRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 178);
8033
+ var SyncRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 179);
8034
+ var KernelConfigurationRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 180);
8035
+ var CustodyRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 182);
8036
+ var AggregateCensusRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 183);
8037
+ var ResidentFootprintRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 186);
8038
+ var PackDeltaRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 190);
8039
+ var ApplyPackRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 191);
8040
+ var RepoStatsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 192);
8041
+ var IntentsAboveRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 193);
8042
+ var HistorySummaryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 194);
8043
+ var InspectChangeRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 195);
8044
+ var InspectRefusalVerdictRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 198);
8045
+ var ReadBlobRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 201);
8046
+ var ResolveRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 202);
8047
+ var PhysicalRefFileSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 203);
8048
+ var ListRefsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 204);
8049
+ var WriteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 205);
8050
+ var DeleteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 206);
8051
+ var LawClosureInfoRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 209);
8052
+ var RestoreMainRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 219);
8053
+ var LawProductsSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 222);
8054
+ var ExportLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 223);
8055
+ var ExportLawProductsResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 224);
8056
+ var ImportLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 225);
8057
+ var AttachLocalFrontierRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 229);
8058
+ var CustodyRemoteSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 230);
8059
+ var CustodyPlacementPolicySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 232);
8060
+ var CustodyPlacementExpectationSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 233);
8061
+ var ReadCustodyPlacementRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 234);
8062
+ var InspectCustodyPlacementRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 235);
8063
+ var PlacementOfferSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 236);
8064
+ var ResolveStatePositionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 237);
8065
+ var ReleaseWorkspaceStateRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 265);
8066
+ var NomosValueSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 273);
8067
+ var NomosStructSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 276);
8068
+ var PrepareLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 280);
7947
8069
  var BirthOutcomeStatusSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 1);
7948
8070
  var BirthOutcomeStatus = /* @__PURE__ */ tsEnum(BirthOutcomeStatusSchema);
7949
8071
  var KernelRefusalCodeSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 2);
@@ -10402,6 +10524,11 @@
10402
10524
  if (!node.data) fail("EISDIR", path);
10403
10525
  return node.data.slice();
10404
10526
  },
10527
+ readFileRange(path, offset, length) {
10528
+ const node = lookup(parts(path));
10529
+ if (!node?.data) fail("ENOENT", path);
10530
+ return node.data.slice(offset, offset + length);
10531
+ },
10405
10532
  fileExists(path) {
10406
10533
  return lookup(parts(path))?.data !== void 0;
10407
10534
  },
@@ -10428,14 +10555,14 @@
10428
10555
  file.data = bytes;
10429
10556
  directory.set(leaf, file);
10430
10557
  },
10431
- delta(previous, mutated, includePath = () => true, copyChanged = true, chunkBytes2) {
10558
+ delta(previous, mutated, includePath = () => true, copyChanged = true, chunkBytes3) {
10432
10559
  const nodes = /* @__PURE__ */ new Map();
10433
10560
  const changed = [];
10434
10561
  const copy3 = (data) => {
10435
- if (chunkBytes2 === void 0 || data.byteLength <= chunkBytes2) return { bytes: data.slice() };
10562
+ if (chunkBytes3 === void 0 || data.byteLength <= chunkBytes3) return { bytes: data.slice() };
10436
10563
  const chunks = [];
10437
- for (let offset = 0; offset < data.byteLength; offset += chunkBytes2)
10438
- chunks.push(data.slice(offset, offset + chunkBytes2));
10564
+ for (let offset = 0; offset < data.byteLength; offset += chunkBytes3)
10565
+ chunks.push(data.slice(offset, offset + chunkBytes3));
10439
10566
  return { chunks };
10440
10567
  };
10441
10568
  const visit = (path, node) => {
@@ -11011,6 +11138,7 @@
11011
11138
  observationClock = clock2;
11012
11139
  engine.bindObservationClock(clock2);
11013
11140
  },
11141
+ ...engine.prepareLawProducts ? { prepareLawProducts: engine.prepareLawProducts.bind(engine) } : {},
11014
11142
  ...spawnDisposable ? {
11015
11143
  callDisposable: (requestBytes) => {
11016
11144
  const disposable = spawnDisposable();
@@ -11055,6 +11183,11 @@
11055
11183
  cause: error
11056
11184
  });
11057
11185
  }
11186
+ if (engine.prepareLawProducts && response.outcome.case === "failure" && response.outcome.value.code === "NMS-LAW-PRODUCTS-PENDING") {
11187
+ const pending = pendingLawPreparation(request);
11188
+ if (pending) void engine.prepareLawProducts(pending).catch(() => {
11189
+ });
11190
+ }
11058
11191
  if (response.outcome.case === "failure" && response.outcome.value.code === "NMS-KERNEL-TRAP") {
11059
11192
  throw new Error(
11060
11193
  `${response.outcome.value.code}: ${response.outcome.value.message}`
@@ -11306,6 +11439,25 @@
11306
11439
  path
11307
11440
  };
11308
11441
  }
11442
+ function pendingLawPreparation(request) {
11443
+ const operation = request.operation;
11444
+ const offer = operation.case === "offer" ? operation.value : operation.case === "prepareRemoteOffer" ? fromBinary(OfferRequestSchema, operation.value.offerRequest) : void 0;
11445
+ const custody = operation.case === "custody" ? operation.value.operation : void 0;
11446
+ const custodyTarget = custody?.value && "target" in custody.value && typeof custody.value.target === "object" ? custody.value.target : void 0;
11447
+ const target3 = operation.case === "query" || operation.case === "open" || operation.case === "sync" || operation.case === "outbox" ? operation.value.target : offer?.target ?? custodyTarget;
11448
+ const query = operation.case === "query" ? operation.value.query : void 0;
11449
+ const candidateUnits = offer?.lawUnits ?? (query?.case === "frontierTransition" || query?.case === "interfaceCompatibility" ? query.value.candidateUnits : []);
11450
+ if (target3) return toBinary(
11451
+ PrepareLawProductsRequestSchema,
11452
+ create(PrepareLawProductsRequestSchema, {
11453
+ target: target3,
11454
+ candidateUnits,
11455
+ coverageOnly: true,
11456
+ ...query?.case === "resolveDomainPlan" ? { domainPlan: query.value } : {},
11457
+ custodyHeads: operation.case === "sync" ? [operation.value.toHead].filter(Boolean) : custody?.value && "head" in custody.value && typeof custody.value.head === "string" ? [custody.value.head].filter(Boolean) : []
11458
+ })
11459
+ );
11460
+ }
11309
11461
 
11310
11462
  // ../../adapter/kernel_execution_desk.ts
11311
11463
  var kernelExecutionDesk = (machine) => runtimeKernelPort(machine);
@@ -11945,6 +12097,14 @@
11945
12097
  this.detail = detail;
11946
12098
  }
11947
12099
  };
12100
+ var KernelLawProductsPending = class extends Error {
12101
+ constructor(detail) {
12102
+ super(detail);
12103
+ __publicField(this, "detail");
12104
+ this.detail = detail;
12105
+ this.name = "KernelLawProductsPending";
12106
+ }
12107
+ };
11948
12108
  var READINESS_DEBT = /foreign-read-not-ready: .*awaits background (maintenance|certification)/;
11949
12109
  var kernelReadinessPending = (message) => {
11950
12110
  if (!READINESS_DEBT.test(message)) return void 0;
@@ -11989,18 +12149,20 @@
11989
12149
  }
11990
12150
  };
11991
12151
  function throwKernelFailure(failure) {
12152
+ if (failure.code === "NMS-LAW-PRODUCTS-PENDING") throw new KernelLawProductsPending(failure.message);
11992
12153
  throwIfKernelControlRequired(failure);
11993
12154
  throw new KernelRefusal(failure);
11994
12155
  }
11995
12156
  var KERNEL_FAILURE_TEXT = /^(NMS-[A-Z0-9]+(?:-[A-Z0-9]+)*): ([\s\S]*)$/;
11996
12157
  var ENVIRONMENTAL = /NMS-KERNEL-TRAP|\btrap\b|unreachable|out of bounds|out of memory|memory allocation|\block\b|File exists|No such file|os error|I\/O|Permission denied|No space|\bE(?:EXIST|NOENT|ACCES|NOSPC|IO|AGAIN|BUSY)\b/i;
11997
12158
  function deterministicKernelRefusal(error) {
11998
- if (error instanceof KernelWorkspaceResidencyRequired || error instanceof KernelHistoryRequired || error instanceof KernelReadinessPending) return void 0;
12159
+ if (error instanceof KernelWorkspaceResidencyRequired || error instanceof KernelHistoryRequired || error instanceof KernelReadinessPending || error instanceof KernelLawProductsPending) return void 0;
11999
12160
  if (error instanceof KernelRefusal && (error.failure.historyRequired !== void 0 || error.failure.identityProviderWitnessRequired !== void 0)) return void 0;
12000
12161
  const text = error instanceof Error ? error.message : typeof error === "string" ? error : "";
12001
12162
  const match = KERNEL_FAILURE_TEXT.exec(text);
12002
12163
  if (!match) return void 0;
12003
12164
  const [, code, message] = match;
12165
+ if (code === "NMS-CUSTODY-INCOMPLETE" || code === "NMS-LAW-PRODUCTS-PENDING") return void 0;
12004
12166
  if (ENVIRONMENTAL.test(text) || READINESS_DEBT.test(message) || requiredForeignWorkspace(message) !== void 0) return void 0;
12005
12167
  return { code, message };
12006
12168
  }
@@ -12765,6 +12927,30 @@
12765
12927
  }
12766
12928
  return { head: result.value.head, products: result.value.products };
12767
12929
  },
12930
+ async exportProviderLawProducts(workspace, ledger) {
12931
+ if (!ledger.readOnly || ledger.operatorCustody !== true) {
12932
+ throw new Error(`only a read-only operator copy of '${workspace}' repairs law-product custody`);
12933
+ }
12934
+ return acquiring(workspace, ledger, "export-law-products", async () => {
12935
+ const head = resolveRef(workspace, branchRef("main"));
12936
+ try {
12937
+ return desk.exportLawProducts(workspace);
12938
+ } catch (error) {
12939
+ if (!head || !(error instanceof KernelRefusal) || error.code !== "NMS-CUSTODY-INCOMPLETE") throw error;
12940
+ }
12941
+ const fetched = await fetchPackWithBoundaries(ledger.remote, ledger.headers ?? {}, {
12942
+ wants: [head],
12943
+ haves: [],
12944
+ depth: 1
12945
+ }, fetchImpl);
12946
+ if (!fetched) throw new Error(`provider returned no frontier while repairing law products of '${workspace}' at ${head}`);
12947
+ await importFetchedPack(workspace, fetched.pack);
12948
+ if (resolveRef(workspace, branchRef("main")) !== head) {
12949
+ throw new Error(`main moved while repairing law products of '${workspace}' at ${head}`);
12950
+ }
12951
+ return desk.exportLawProducts(workspace);
12952
+ });
12953
+ },
12768
12954
  importLawProducts(workspace, products) {
12769
12955
  const imported = [];
12770
12956
  const refused = [];
@@ -12979,7 +13165,7 @@
12979
13165
  const match = /^seg-(0|[1-9]\d{0,14})$/.exec(name);
12980
13166
  return match ? volumeSegmentId(Number(match[1])) : void 0;
12981
13167
  }
12982
- var deskRecordId = (namespace2, key) => JSON.stringify([namespace2, key]);
13168
+ var deskRecordId = (namespace3, key) => JSON.stringify([namespace3, key]);
12983
13169
 
12984
13170
  // ../../platform-shells/browser/custody_volume_filesystem.ts
12985
13171
  init_define_NOMOS_KERNEL_RELEASE();
@@ -13496,13 +13682,13 @@
13496
13682
  }
13497
13683
  };
13498
13684
  _ends = new WeakMap();
13499
- var _closed;
13685
+ var _closed2;
13500
13686
  var OpenVolumeFile = class extends Fd {
13501
13687
  constructor(file) {
13502
13688
  super();
13503
13689
  this.file = file;
13504
13690
  __publicField(this, "position", 0n);
13505
- __privateAdd(this, _closed, false);
13691
+ __privateAdd(this, _closed2, false);
13506
13692
  file.opens++;
13507
13693
  file.volume.openFiles.add(file);
13508
13694
  }
@@ -13518,8 +13704,8 @@
13518
13704
  }
13519
13705
  }
13520
13706
  fd_close() {
13521
- if (!__privateGet(this, _closed)) {
13522
- __privateSet(this, _closed, true);
13707
+ if (!__privateGet(this, _closed2)) {
13708
+ __privateSet(this, _closed2, true);
13523
13709
  if (--this.file.opens === 0) this.file.volume.openFiles.delete(this.file);
13524
13710
  try {
13525
13711
  this.file.flushTail();
@@ -13602,7 +13788,7 @@
13602
13788
  return wasi_defs_exports.ERRNO_SUCCESS;
13603
13789
  }
13604
13790
  };
13605
- _closed = new WeakMap();
13791
+ _closed2 = new WeakMap();
13606
13792
  var parseRelative = (path) => {
13607
13793
  const isDirectory = path.endsWith("/");
13608
13794
  if (path.startsWith("/")) return { ret: wasi_defs_exports.ERRNO_NOTCAPABLE, isDirectory };
@@ -13780,6 +13966,9 @@
13780
13966
  const file = fileAt(raw);
13781
13967
  return file.read(0, file.size);
13782
13968
  },
13969
+ readFileRange(raw, offset, length) {
13970
+ return fileAt(raw).read(offset, length);
13971
+ },
13783
13972
  fileExists(raw) {
13784
13973
  return lookup(custodyPath(raw)) instanceof VolumeFile;
13785
13974
  },
@@ -13960,8 +14149,8 @@
13960
14149
  for (const path of record.directories) image.directories.add(custodyPath(path));
13961
14150
  for (const [path, extents] of record.files) image.files.set(custodyPath(path), extents);
13962
14151
  for (const id of record.removedRecords) image.records.delete(id);
13963
- for (const [namespace2, key, revision, value] of record.records)
13964
- image.records.set(deskRecordId(namespace2, key), { namespace: namespace2, key, revision: BigInt(revision), value: fromBase642(value) });
14152
+ for (const [namespace3, key, revision, value] of record.records)
14153
+ image.records.set(deskRecordId(namespace3, key), { namespace: namespace3, key, revision: BigInt(revision), value: fromBase642(value) });
13965
14154
  image.generation = volumeGeneration(record.generation);
13966
14155
  image.replica = BigInt(record.replica);
13967
14156
  image.identity = record.identity;
@@ -13979,7 +14168,7 @@
13979
14168
  }
13980
14169
  return image;
13981
14170
  }
13982
- var _volume, _superblock, _onClose, _records, _changedRecords, _committedFiles, _committedDirectories, _chain, _chainBytes, _generation, _nextSegment, _revision, _committed, _checkpoints, _commitTimer, _lastCommitAt, _cacheDirty, _cacheTimer, _compaction, _evacuating, _compactTimer, _holds, _lastForegroundAt, _compactProgressAt, _compactUrgent, _stepWhenReleased, _compactStarvedMillis, _compactUrgentDeadBytes, _movedSinceCommit, _compactQuietMillis, _compactStepBytes, _maintenanceState, _openTiming, _maintenance, _maintenanceQueued, _failure, _closed2, _compactMinSegmentBytes, _VolumeCustodyStore_instances, restore_fn, prepareActive_fn, createSegment_fn, reserveSpares_fn, scheduleCommit_fn, fail_fn, commit_fn, scheduleMaintenance_fn, collect_fn, pendingCompactionBytes_fn, armCompaction_fn, scheduleCompaction_fn, compactStep_fn;
14171
+ var _volume, _superblock, _onClose, _records, _changedRecords, _committedFiles, _committedDirectories, _chain, _chainBytes, _generation, _nextSegment, _revision, _committed, _checkpoints, _commitTimer, _lastCommitAt, _cacheDirty, _cacheTimer, _compaction, _evacuating, _compactTimer, _holds, _lastForegroundAt, _compactProgressAt, _compactUrgent, _stepWhenReleased, _compactStarvedMillis, _compactUrgentDeadBytes, _movedSinceCommit, _compactQuietMillis, _compactStepBytes, _maintenanceState, _openTiming, _maintenance, _maintenanceQueued, _failure, _closed3, _compactMinSegmentBytes, _VolumeCustodyStore_instances, restore_fn, prepareActive_fn, createSegment_fn, reserveSpares_fn, scheduleCommit_fn, fail_fn, commit_fn, scheduleMaintenance_fn, collect_fn, pendingCompactionBytes_fn, armCompaction_fn, scheduleCompaction_fn, compactStep_fn;
13983
14172
  var _VolumeCustodyStore = class _VolumeCustodyStore {
13984
14173
  constructor(volume, superblock, image, onClose, tuning = {}) {
13985
14174
  __privateAdd(this, _VolumeCustodyStore_instances);
@@ -14042,7 +14231,7 @@
14042
14231
  __privateAdd(this, _maintenance, Promise.resolve());
14043
14232
  __privateAdd(this, _maintenanceQueued, false);
14044
14233
  __privateAdd(this, _failure);
14045
- __privateAdd(this, _closed2, false);
14234
+ __privateAdd(this, _closed3, false);
14046
14235
  __privateAdd(this, _compactMinSegmentBytes);
14047
14236
  __publicField(this, "changed", (_inode) => {
14048
14237
  this.assertUsable();
@@ -14052,7 +14241,7 @@
14052
14241
  if (!__privateGet(this, _cacheTimer)) {
14053
14242
  __privateSet(this, _cacheTimer, setTimeout(() => {
14054
14243
  __privateSet(this, _cacheTimer, void 0);
14055
- if (__privateGet(this, _closed2) || __privateGet(this, _failure) || !__privateGet(this, _cacheDirty)) return;
14244
+ if (__privateGet(this, _closed3) || __privateGet(this, _failure) || !__privateGet(this, _cacheDirty)) return;
14056
14245
  try {
14057
14246
  __privateMethod(this, _VolumeCustodyStore_instances, commit_fn).call(this, true, false);
14058
14247
  } catch {
@@ -14235,18 +14424,18 @@
14235
14424
  }
14236
14425
  assertUsable() {
14237
14426
  if (__privateGet(this, _failure)) throw new Error("Browser custody could not be saved. Keep this tab open, free storage space, and reload only after recovery.", { cause: __privateGet(this, _failure) });
14238
- if (__privateGet(this, _closed2)) throw new Error("Browser custody is closed");
14427
+ if (__privateGet(this, _closed3)) throw new Error("Browser custody is closed");
14239
14428
  }
14240
- list(namespace2) {
14429
+ list(namespace3) {
14241
14430
  this.assertUsable();
14242
- return [...__privateGet(this, _records).values()].filter((record) => record.namespace === namespace2).sort((a, b) => a.key.localeCompare(b.key)).map((record) => ({ ...record, value: record.value.slice() }));
14431
+ return [...__privateGet(this, _records).values()].filter((record) => record.namespace === namespace3).sort((a, b) => a.key.localeCompare(b.key)).map((record) => ({ ...record, value: record.value.slice() }));
14243
14432
  }
14244
- compareExchange(namespace2, key, expected, value) {
14433
+ compareExchange(namespace3, key, expected, value) {
14245
14434
  this.assertUsable();
14246
- const id = deskRecordId(namespace2, key);
14435
+ const id = deskRecordId(namespace3, key);
14247
14436
  const current2 = __privateGet(this, _records).get(id);
14248
- if (current2?.revision !== expected) throw new Error(`peer desk record '${namespace2}/${key}' changed at revision ${current2?.revision ?? "absent"}`);
14249
- const next = value === void 0 ? void 0 : { namespace: namespace2, key, revision: (current2?.revision ?? 0n) + 1n, value: value.slice() };
14437
+ if (current2?.revision !== expected) throw new Error(`peer desk record '${namespace3}/${key}' changed at revision ${current2?.revision ?? "absent"}`);
14438
+ const next = value === void 0 ? void 0 : { namespace: namespace3, key, revision: (current2?.revision ?? 0n) + 1n, value: value.slice() };
14250
14439
  if (next) __privateGet(this, _records).set(id, next);
14251
14440
  else __privateGet(this, _records).delete(id);
14252
14441
  __privateGet(this, _changedRecords).set(id, next);
@@ -14263,7 +14452,7 @@
14263
14452
  return completed;
14264
14453
  }
14265
14454
  isCheckpointCurrent() {
14266
- return !__privateGet(this, _failure) && !__privateGet(this, _closed2) && __privateGet(this, _committed) === __privateGet(this, _revision);
14455
+ return !__privateGet(this, _failure) && !__privateGet(this, _closed3) && __privateGet(this, _committed) === __privateGet(this, _revision);
14267
14456
  }
14268
14457
  durabilityState() {
14269
14458
  return {
@@ -14335,13 +14524,13 @@
14335
14524
  for (; ; ) {
14336
14525
  await this.settled();
14337
14526
  if (__privateGet(this, _failure)) throw __privateGet(this, _failure);
14338
- if (__privateGet(this, _closed2) || __privateGet(this, _compaction).size === 0 && !__privateGet(this, _maintenanceQueued)) return;
14527
+ if (__privateGet(this, _closed3) || __privateGet(this, _compaction).size === 0 && !__privateGet(this, _maintenanceQueued)) return;
14339
14528
  await new Promise((resolve) => setTimeout(resolve, Math.max(1, Math.min(__privateGet(this, _compactQuietMillis), 20))));
14340
14529
  }
14341
14530
  }
14342
14531
  async close() {
14343
14532
  var _a;
14344
- if (__privateGet(this, _closed2)) return;
14533
+ if (__privateGet(this, _closed3)) return;
14345
14534
  if (__privateGet(this, _commitTimer)) {
14346
14535
  clearTimeout(__privateGet(this, _commitTimer));
14347
14536
  __privateSet(this, _commitTimer, void 0);
@@ -14356,7 +14545,7 @@
14356
14545
  }
14357
14546
  if (!__privateGet(this, _failure)) __privateMethod(this, _VolumeCustodyStore_instances, commit_fn).call(this, true, false);
14358
14547
  await __privateGet(this, _maintenance);
14359
- __privateSet(this, _closed2, true);
14548
+ __privateSet(this, _closed3, true);
14360
14549
  if (__privateGet(this, _compactTimer)) {
14361
14550
  clearTimeout(__privateGet(this, _compactTimer));
14362
14551
  __privateSet(this, _compactTimer, void 0);
@@ -14406,7 +14595,7 @@
14406
14595
  _maintenance = new WeakMap();
14407
14596
  _maintenanceQueued = new WeakMap();
14408
14597
  _failure = new WeakMap();
14409
- _closed2 = new WeakMap();
14598
+ _closed3 = new WeakMap();
14410
14599
  _compactMinSegmentBytes = new WeakMap();
14411
14600
  _VolumeCustodyStore_instances = new WeakSet();
14412
14601
  restore_fn = function(image) {
@@ -14461,7 +14650,7 @@
14461
14650
  const wait = Math.max(0, Math.min(delayMillis, __privateGet(this, _lastCommitAt) + delayMillis - performance.now()));
14462
14651
  __privateSet(this, _commitTimer, setTimeout(() => {
14463
14652
  __privateSet(this, _commitTimer, void 0);
14464
- if (__privateGet(this, _closed2) || __privateGet(this, _failure) || __privateGet(this, _committed) === __privateGet(this, _revision)) return;
14653
+ if (__privateGet(this, _closed3) || __privateGet(this, _failure) || __privateGet(this, _committed) === __privateGet(this, _revision)) return;
14465
14654
  try {
14466
14655
  __privateMethod(this, _VolumeCustodyStore_instances, commit_fn).call(this, false, false);
14467
14656
  } catch {
@@ -14600,11 +14789,11 @@
14600
14789
  __privateMethod(this, _VolumeCustodyStore_instances, scheduleMaintenance_fn).call(this);
14601
14790
  };
14602
14791
  scheduleMaintenance_fn = function() {
14603
- if (__privateGet(this, _maintenanceQueued) || __privateGet(this, _closed2)) return;
14792
+ if (__privateGet(this, _maintenanceQueued) || __privateGet(this, _closed3)) return;
14604
14793
  __privateSet(this, _maintenanceQueued, true);
14605
14794
  __privateSet(this, _maintenance, __privateGet(this, _maintenance).then(async () => {
14606
14795
  __privateSet(this, _maintenanceQueued, false);
14607
- if (__privateGet(this, _failure) || __privateGet(this, _closed2)) return;
14796
+ if (__privateGet(this, _failure) || __privateGet(this, _closed3)) return;
14608
14797
  await __privateMethod(this, _VolumeCustodyStore_instances, collect_fn).call(this);
14609
14798
  await __privateMethod(this, _VolumeCustodyStore_instances, reserveSpares_fn).call(this, SPARE_SEGMENTS);
14610
14799
  __privateMethod(this, _VolumeCustodyStore_instances, scheduleCompaction_fn).call(this);
@@ -14680,7 +14869,7 @@
14680
14869
  };
14681
14870
  /** Arms the next compaction step: after a quiet moment following foreground work, or after `delay`. */
14682
14871
  scheduleCompaction_fn = function(delay) {
14683
- if (__privateGet(this, _compactTimer) || __privateGet(this, _closed2) || __privateGet(this, _failure) || __privateGet(this, _compaction).size === 0) return;
14872
+ if (__privateGet(this, _compactTimer) || __privateGet(this, _closed3) || __privateGet(this, _failure) || __privateGet(this, _compaction).size === 0) return;
14684
14873
  const now2 = performance.now();
14685
14874
  const wait = delay ?? Math.max(0, Math.min(__privateGet(this, _lastForegroundAt) + __privateGet(this, _compactQuietMillis), __privateGet(this, _compactProgressAt) + __privateGet(this, _compactStarvedMillis)) - now2);
14686
14875
  __privateSet(this, _compactTimer, setTimeout(() => {
@@ -14696,7 +14885,7 @@
14696
14885
  * names only the new places, and the next collection deletes the compacted segments. Closing (a
14697
14886
  * handover) simply stops stepping: moved bytes are committed by the close, or unreferenced. */
14698
14887
  compactStep_fn = function(explicit = false) {
14699
- if (__privateGet(this, _closed2) || __privateGet(this, _failure) || __privateGet(this, _compaction).size === 0) return;
14888
+ if (__privateGet(this, _closed3) || __privateGet(this, _failure) || __privateGet(this, _compaction).size === 0) return;
14700
14889
  const now2 = performance.now();
14701
14890
  const quietFor = now2 - __privateGet(this, _lastForegroundAt);
14702
14891
  const starvedAt = __privateGet(this, _compactProgressAt) + __privateGet(this, _compactStarvedMillis);
@@ -14755,8 +14944,8 @@
14755
14944
  var BROWSER_CUSTODY_CHUNK_BYTES = 4 * 1024 * 1024;
14756
14945
  var fileBytes = (file) => file.bytes?.byteLength ?? file.chunks?.reduce((total, chunk) => total + chunk.byteLength, 0) ?? 0;
14757
14946
  var copyRecord = (record) => ({ ...record, value: record.value.slice() });
14758
- var keyOf = (namespace2, key) => JSON.stringify([namespace2, key]);
14759
- var _backend, _records2, _knownNodes, _mutatedNodes, _changedRecords2, _cachePaths, _cacheDirty2, _cacheDisabled, _cacheTimer2, _cachePending, _revision2, _committed2, _queued, _checkpoints2, _failure2, _closed3;
14947
+ var keyOf = (namespace3, key) => JSON.stringify([namespace3, key]);
14948
+ var _backend, _records2, _knownNodes, _mutatedNodes, _changedRecords2, _cachePaths, _cacheDirty2, _cacheDisabled, _cacheTimer2, _cachePending, _revision2, _committed2, _queued, _checkpoints2, _failure2, _closed4;
14760
14949
  var _BrowserCustodyStore = class _BrowserCustodyStore {
14761
14950
  constructor(backend, snapshot) {
14762
14951
  __publicField(this, "kind", "memory");
@@ -14779,7 +14968,7 @@
14779
14968
  __privateAdd(this, _queued);
14780
14969
  __privateAdd(this, _checkpoints2, /* @__PURE__ */ new Set());
14781
14970
  __privateAdd(this, _failure2);
14782
- __privateAdd(this, _closed3, false);
14971
+ __privateAdd(this, _closed4, false);
14783
14972
  __publicField(this, "changed", (inode) => {
14784
14973
  this.assertUsable();
14785
14974
  if (inode) __privateGet(this, _mutatedNodes).add(inode);
@@ -14843,18 +15032,18 @@
14843
15032
  }
14844
15033
  assertUsable() {
14845
15034
  if (__privateGet(this, _failure2)) throw new Error("Browser custody could not be saved. Keep this tab open, free storage space, and reload only after recovery.", { cause: __privateGet(this, _failure2) });
14846
- if (__privateGet(this, _closed3)) throw new Error("Browser custody is closed");
15035
+ if (__privateGet(this, _closed4)) throw new Error("Browser custody is closed");
14847
15036
  }
14848
- list(namespace2) {
15037
+ list(namespace3) {
14849
15038
  this.assertUsable();
14850
- return [...__privateGet(this, _records2).values()].filter((record) => record.namespace === namespace2).sort((a, b) => a.key.localeCompare(b.key)).map(copyRecord);
15039
+ return [...__privateGet(this, _records2).values()].filter((record) => record.namespace === namespace3).sort((a, b) => a.key.localeCompare(b.key)).map(copyRecord);
14851
15040
  }
14852
- compareExchange(namespace2, key, expected, value) {
15041
+ compareExchange(namespace3, key, expected, value) {
14853
15042
  this.assertUsable();
14854
- const id = keyOf(namespace2, key);
15043
+ const id = keyOf(namespace3, key);
14855
15044
  const current2 = __privateGet(this, _records2).get(id);
14856
- if (current2?.revision !== expected) throw new Error(`peer desk record '${namespace2}/${key}' changed at revision ${current2?.revision ?? "absent"}`);
14857
- const next = value === void 0 ? void 0 : { namespace: namespace2, key, revision: (current2?.revision ?? 0n) + 1n, value: value.slice() };
15045
+ if (current2?.revision !== expected) throw new Error(`peer desk record '${namespace3}/${key}' changed at revision ${current2?.revision ?? "absent"}`);
15046
+ const next = value === void 0 ? void 0 : { namespace: namespace3, key, revision: (current2?.revision ?? 0n) + 1n, value: value.slice() };
14858
15047
  if (next) __privateGet(this, _records2).set(id, next);
14859
15048
  else __privateGet(this, _records2).delete(id);
14860
15049
  __privateGet(this, _changedRecords2).set(id, next && copyRecord(next));
@@ -14939,7 +15128,7 @@
14939
15128
  };
14940
15129
  }
14941
15130
  isCheckpointCurrent() {
14942
- return !__privateGet(this, _failure2) && !__privateGet(this, _closed3) && __privateGet(this, _committed2) === __privateGet(this, _revision2);
15131
+ return !__privateGet(this, _failure2) && !__privateGet(this, _closed4) && __privateGet(this, _committed2) === __privateGet(this, _revision2);
14943
15132
  }
14944
15133
  residentBytes() {
14945
15134
  return Number(this.filesystem.files.treeBytes("/work"));
@@ -14965,7 +15154,7 @@
14965
15154
  if (__privateGet(this, _cacheTimer2)) clearTimeout(__privateGet(this, _cacheTimer2));
14966
15155
  __privateSet(this, _cacheTimer2, void 0);
14967
15156
  await this.flushCache();
14968
- __privateSet(this, _closed3, true);
15157
+ __privateSet(this, _closed4, true);
14969
15158
  __privateGet(this, _backend).close();
14970
15159
  }
14971
15160
  };
@@ -14984,7 +15173,7 @@
14984
15173
  _queued = new WeakMap();
14985
15174
  _checkpoints2 = new WeakMap();
14986
15175
  _failure2 = new WeakMap();
14987
- _closed3 = new WeakMap();
15176
+ _closed4 = new WeakMap();
14988
15177
  var BrowserCustodyStore = _BrowserCustodyStore;
14989
15178
  var CUSTODY_LOCK_WAIT_MILLIS = 8e3;
14990
15179
  var anotherTab = () => new Error("This application's workspace is open in another tab. Close that tab and retry; your saved data is preserved.");
@@ -15080,7 +15269,7 @@
15080
15269
  }
15081
15270
  return db;
15082
15271
  }
15083
- var chunkBytes = BROWSER_CUSTODY_CHUNK_BYTES;
15272
+ var chunkBytes2 = BROWSER_CUSTODY_CHUNK_BYTES;
15084
15273
  var replace = (store, id, entry) => {
15085
15274
  const old = store.get([id, -1]);
15086
15275
  old.onsuccess = () => {
@@ -15090,11 +15279,11 @@
15090
15279
  if (!entry) return;
15091
15280
  const owned = "path" in entry ? entry.chunks : void 0;
15092
15281
  const bytes = "path" in entry ? entry.bytes : entry.value;
15093
- const chunks = owned ? owned.length : bytes === void 0 ? 0 : Math.max(1, Math.ceil(bytes.byteLength / chunkBytes));
15282
+ const chunks = owned ? owned.length : bytes === void 0 ? 0 : Math.max(1, Math.ceil(bytes.byteLength / chunkBytes2));
15094
15283
  const meta = "path" in entry ? { path: entry.path, directory: bytes === void 0 && owned === void 0, chunks } : { namespace: entry.namespace, key: entry.key, revision: entry.revision, chunks };
15095
15284
  store.put(meta, [id, -1]);
15096
15285
  for (let index = 0; index < chunks; index++)
15097
- store.put(owned ? owned[index] : bytes.slice(index * chunkBytes, (index + 1) * chunkBytes), [id, index]);
15286
+ store.put(owned ? owned[index] : bytes.slice(index * chunkBytes2, (index + 1) * chunkBytes2), [id, index]);
15098
15287
  };
15099
15288
  };
15100
15289
  var completeChunks = (chunks, count) => Number.isSafeInteger(count) && count >= 0 && chunks.length === count && Array.from({ length: count }, (_, index) => chunks[index]).every((chunk) => chunk instanceof Uint8Array);
@@ -15192,22 +15381,22 @@
15192
15381
  file = { path, chunks: chunk + 1, next: chunk - 1 };
15193
15382
  if (chunk === 0) file.bytes = value;
15194
15383
  else {
15195
- file.bytes = new Uint8Array(chunk * chunkBytes + value.byteLength);
15196
- file.bytes.set(value, chunk * chunkBytes);
15384
+ file.bytes = new Uint8Array(chunk * chunkBytes2 + value.byteLength);
15385
+ file.bytes.set(value, chunk * chunkBytes2);
15197
15386
  }
15198
15387
  } else {
15199
15388
  if (chunk !== file.next) throw corrupt3(path);
15200
15389
  file.next -= 1;
15201
- if (!file.loose && value.byteLength !== chunkBytes) {
15390
+ if (!file.loose && value.byteLength !== chunkBytes2) {
15202
15391
  const full = file.bytes;
15203
15392
  file.loose = [];
15204
15393
  for (let index = chunk + 1; index < file.chunks; index++) {
15205
- file.loose[index] = full.subarray(index * chunkBytes, index === file.chunks - 1 ? full.byteLength : (index + 1) * chunkBytes);
15394
+ file.loose[index] = full.subarray(index * chunkBytes2, index === file.chunks - 1 ? full.byteLength : (index + 1) * chunkBytes2);
15206
15395
  }
15207
15396
  file.bytes = void 0;
15208
15397
  }
15209
15398
  if (file.loose) file.loose[chunk] = value;
15210
- else file.bytes.set(value, chunk * chunkBytes);
15399
+ else file.bytes.set(value, chunk * chunkBytes2);
15211
15400
  }
15212
15401
  }
15213
15402
  entry.continue();
@@ -15289,7 +15478,7 @@
15289
15478
  });
15290
15479
  if (!header2.control) return void 0;
15291
15480
  if (header2.control.format !== 2) throw new Error("Unsupported browser custody format");
15292
- await reserveSegments(Math.min(64, Math.ceil(header2.chunks * chunkBytes / SEGMENT_TARGET_BYTES)));
15481
+ await reserveSegments(Math.min(64, Math.ceil(header2.chunks * chunkBytes2 / SEGMENT_TARGET_BYTES)));
15293
15482
  const root = filesystem.root;
15294
15483
  const directoryAt = (path) => {
15295
15484
  let node = root;
@@ -15906,7 +16095,7 @@
15906
16095
  if (inbound.transfer?.packId === offer.packId) return;
15907
16096
  inbound.complete = void 0;
15908
16097
  if (__privateMethod(this, _LiveInboundStream_instances, heldAlready_fn).call(this, workspace, inbound, offer)) return;
15909
- const chunkBytes2 = Number(offer.chunkBytes) || DEFAULT_CHUNK_BYTES;
16098
+ const chunkBytes3 = Number(offer.chunkBytes) || DEFAULT_CHUNK_BYTES;
15910
16099
  const window2 = offer.remount ? REMOUNT_FIRST_WINDOW_CHUNKS : inbound.askedChunks ?? REMOUNT_FIRST_WINDOW_CHUNKS;
15911
16100
  inbound.transfer = {
15912
16101
  head: offer.head,
@@ -15918,8 +16107,8 @@
15918
16107
  chunks: 0,
15919
16108
  received: 0,
15920
16109
  sinceAsk: 0,
15921
- requested: Math.min(Number(offer.bytes), window2 * chunkBytes2),
15922
- chunkBytes: chunkBytes2,
16110
+ requested: Math.min(Number(offer.bytes), window2 * chunkBytes3),
16111
+ chunkBytes: chunkBytes3,
15923
16112
  ...offer.sealed ? { sealed: offer.sealed } : {},
15924
16113
  ...offer.main ? { main: offer.main } : {},
15925
16114
  held: inbound.askedHeld ?? NO_TREES,
@@ -16120,9 +16309,9 @@
16120
16309
  pipeline_fn = function(workspace, inbound) {
16121
16310
  const transfer = inbound.transfer;
16122
16311
  if (!transfer || !__privateGet(this, _active2).has(workspace)) return;
16123
- const chunkBytes2 = transfer.chunkBytes ?? DEFAULT_CHUNK_BYTES;
16312
+ const chunkBytes3 = transfer.chunkBytes ?? DEFAULT_CHUNK_BYTES;
16124
16313
  const requested = Math.max(transfer.requested ?? transfer.received, transfer.received);
16125
- if (requested >= transfer.bytes || requested - transfer.received > __privateGet(this, _pipelineChunks) * chunkBytes2) return;
16314
+ if (requested >= transfer.bytes || requested - transfer.received > __privateGet(this, _pipelineChunks) * chunkBytes3) return;
16126
16315
  const sent = __privateGet(this, _ports).send(workspace, { case: "checkpointRequest", value: create(LiveCheckpointRequestSchema, {
16127
16316
  head: transfer.head,
16128
16317
  packId: transfer.packId,
@@ -16132,7 +16321,7 @@
16132
16321
  }) });
16133
16322
  if (!sent) return;
16134
16323
  transfer.sinceAsk = 0;
16135
- transfer.requested = Math.min(transfer.bytes, requested + __privateGet(this, _askChunks) * chunkBytes2);
16324
+ transfer.requested = Math.min(transfer.bytes, requested + __privateGet(this, _askChunks) * chunkBytes3);
16136
16325
  };
16137
16326
  /** Whether this workspace's checkpoint wants bytes: a procedure waits on it and it is not whole yet. */
16138
16327
  needsSlot_fn = function(inbound) {
@@ -16820,6 +17009,8 @@
16820
17009
  case "releaseWorkspaceState":
16821
17010
  case "aggregateCensus":
16822
17011
  case "auditCustody":
17012
+ case "recoverDetachedReceipt":
17013
+ case "prepareLawProducts":
16823
17014
  case "exportLawProducts":
16824
17015
  case void 0:
16825
17016
  return UNMOVED;
@@ -16852,11 +17043,13 @@
16852
17043
  }
16853
17044
  }
16854
17045
  var moveObserver;
16855
- var _known, _moved;
17046
+ var _known, _baselines, _moved;
16856
17047
  var MainMoves = class {
16857
17048
  constructor(moved) {
16858
17049
  /** The last head known per workspace; `null` = known to hold no custody. */
16859
17050
  __privateAdd(this, _known, /* @__PURE__ */ new Map());
17051
+ /** A first sighting has not yet emitted any custody obligation. */
17052
+ __privateAdd(this, _baselines, /* @__PURE__ */ new Set());
16860
17053
  __privateAdd(this, _moved);
16861
17054
  __privateSet(this, _moved, moved);
16862
17055
  }
@@ -16864,13 +17057,28 @@
16864
17057
  known(workspace) {
16865
17058
  return __privateGet(this, _known).get(workspace);
16866
17059
  }
17060
+ /** A physical birth receipt proves this office created custody. A read can
17061
+ * race that receipt and establish a baseline first; promote that baseline to
17062
+ * the one birth move, preserving a newer observed head and ignoring repeats. */
17063
+ born(workspace, head) {
17064
+ if (!workspace || !head) return void 0;
17065
+ const observed = __privateGet(this, _known).get(workspace);
17066
+ if (observed && !__privateGet(this, _baselines).has(workspace)) return void 0;
17067
+ __privateGet(this, _known).set(workspace, null);
17068
+ return this.observe(workspace, observed || head, "offer");
17069
+ }
16867
17070
  /** The kernel named this workspace's main head (`undefined`: no custody). */
16868
17071
  observe(workspace, head, via) {
16869
17072
  if (!workspace) return void 0;
16870
17073
  const next = head || null;
16871
17074
  const previous = __privateGet(this, _known).get(workspace);
16872
17075
  __privateGet(this, _known).set(workspace, next);
16873
- if (previous === void 0 || previous === next) return void 0;
17076
+ if (previous === void 0) {
17077
+ if (next) __privateGet(this, _baselines).add(workspace);
17078
+ return void 0;
17079
+ }
17080
+ if (previous === next) return void 0;
17081
+ __privateGet(this, _baselines).delete(workspace);
16874
17082
  const move = {
16875
17083
  workspace,
16876
17084
  from: previous ?? void 0,
@@ -16883,6 +17091,7 @@
16883
17091
  }
16884
17092
  };
16885
17093
  _known = new WeakMap();
17094
+ _baselines = new WeakMap();
16886
17095
  _moved = new WeakMap();
16887
17096
 
16888
17097
  // ../src/runtime/custody_desk.ts
@@ -17760,8 +17969,7 @@
17760
17969
  */
17761
17970
  bornCustodyPersisted(workspace, head) {
17762
17971
  if (!workspace || !head) return;
17763
- if (__privateGet(this, _mainMoves).known(workspace) === void 0) __privateGet(this, _mainMoves).observe(workspace, void 0, "custody");
17764
- __privateGet(this, _mainMoves).observe(workspace, head, "offer");
17972
+ __privateGet(this, _mainMoves).born(workspace, head);
17765
17973
  }
17766
17974
  /** The head of the mounted branch. Main's head, wherever it is found, is reported to the one
17767
17975
  * "main moved" funnel: a head read is how a move made outside this port's calls (recovery on
@@ -18633,6 +18841,10 @@
18633
18841
  __privateGet(this, _residency).before(request);
18634
18842
  try {
18635
18843
  response = __privateMethod(this, _KernelPort_instances, exclusive_fn).call(this, operation, () => timelineTraceEnabled() ? __privateMethod(this, _KernelPort_instances, timedCall_fn).call(this, operation, request) : fromBinary(CallResponseSchema, __privateGet(this, _kernel2).call(toBinary(CallRequestSchema, request))));
18844
+ if (__privateGet(this, _kernel2).enqueueLawPreparation && response.outcome.case === "failure" && response.outcome.value.code === "NMS-LAW-PRODUCTS-PENDING") {
18845
+ const pending = pendingLawPreparation(request);
18846
+ if (pending) __privateGet(this, _kernel2).enqueueLawPreparation(pending);
18847
+ }
18636
18848
  } catch (error) {
18637
18849
  __privateGet(this, _attached)?.lost();
18638
18850
  const trapped = error instanceof Error && /NMS-KERNEL-TRAP|\btrap\b|unreachable|out of bounds/i.test(error.message);
@@ -19697,14 +19909,27 @@
19697
19909
  if (local.outcome.value.opening) {
19698
19910
  return __privateMethod(this, _WorkspaceAccessDesk_instances, unavailable_fn).call(this, request, RuntimeUnavailableReason.WORKSPACE_OPENING, workspace, "local workspace custody is opening", WORKSPACE_OPENING_RETRY_AFTER_MILLIS);
19699
19911
  }
19700
- if (request.command.case === "syncWorkspace" || request.command.case === "recoverCorrespondence" || request.command.case === "previewLocalCopyDrop" || request.command.case === "dropLocalCopy") {
19912
+ if (request.command.case === "syncWorkspace" || request.command.case === "recoverCorrespondence" || request.command.case === "serveLiveStream" || request.command.case === "previewLocalCopyDrop" || request.command.case === "dropLocalCopy") {
19701
19913
  return yield* __privateMethod(this, _WorkspaceAccessDesk_instances, settle_fn2).call(this, resume, workId2, resolving);
19702
19914
  }
19703
19915
  let unreadable;
19704
19916
  if (local.outcome.value.available) {
19705
19917
  const allowUnborn = request.command.case === "kernelCall" && kernelCallPermitsUnbornCustody(request.command.value);
19706
19918
  try {
19707
- this.openLocal(request, workspace, allowUnborn);
19919
+ for (let attempt = 0; ; attempt++) {
19920
+ try {
19921
+ this.openLocal(request, workspace, allowUnborn);
19922
+ break;
19923
+ } catch (error) {
19924
+ if (!(error instanceof KernelLawProductsPending)) throw error;
19925
+ if (attempt === 40) return __privateMethod(this, _WorkspaceAccessDesk_instances, unavailable_fn).call(this, request, RuntimeUnavailableReason.LOCAL_REPLICA_NOT_READY, workspace, "this peer is preparing the workspace law", 250);
19926
+ const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
19927
+ effectId: `${workId2}:${workspace}:law-ready:${attempt}`,
19928
+ delayMillis: 250
19929
+ }) };
19930
+ if (receipt.outcome.case !== "woken") return __privateMethod(this, _WorkspaceAccessDesk_instances, unavailable_fn).call(this, request, RuntimeUnavailableReason.LOCAL_REPLICA_NOT_READY, workspace, "workspace law preparation was interrupted", 250);
19931
+ }
19932
+ }
19708
19933
  } catch (error) {
19709
19934
  if (!(error instanceof WorkspaceLocalCopyUnreadableError)) throw error;
19710
19935
  unreadable = error;
@@ -21108,19 +21333,19 @@
21108
21333
  init_define_NOMOS_KERNEL_RELEASE();
21109
21334
  init_shims();
21110
21335
  var WORKSPACE_NAME_SEP = "";
21111
- var keyedBirthNameOf = (namespace2, key) => `${namespace2}-${sha256Hex(new TextEncoder().encode(namespace2 + WORKSPACE_NAME_SEP + key)).slice(0, 40)}`;
21336
+ var keyedBirthNameOf = (namespace3, key) => `${namespace3}-${sha256Hex(new TextEncoder().encode(namespace3 + WORKSPACE_NAME_SEP + key)).slice(0, 40)}`;
21112
21337
  var RECEIVING_GROUP_NAME_PREFIX = "nomos-rg-";
21113
21338
  var receivingGroupNameOf = (principal) => `${RECEIVING_GROUP_NAME_PREFIX}${sha256Hex(new TextEncoder().encode(principal)).slice(0, 40)}`;
21114
- var isKeyedBirthOf = (namespace2, workspace) => workspace.startsWith(`${namespace2}-`);
21339
+ var isKeyedBirthOf = (namespace3, workspace) => workspace.startsWith(`${namespace3}-`);
21115
21340
  var WORKSPACE_NAME_REQUEST_INVALID = "nomos.runtime.workspace_name_request_invalid";
21116
21341
  function resolveWorkspaceName(command) {
21117
21342
  switch (command.birth.case) {
21118
21343
  case "keyed": {
21119
- const { namespace: namespace2, key } = command.birth.value;
21120
- if (namespace2.length === 0 || key.length === 0) {
21344
+ const { namespace: namespace3, key } = command.birth.value;
21345
+ if (namespace3.length === 0 || key.length === 0) {
21121
21346
  throw new Error(`${WORKSPACE_NAME_REQUEST_INVALID}: a keyed birth name needs both its namespace and its key`);
21122
21347
  }
21123
- return create(ResolvedWorkspaceNameSchema, { workspace: keyedBirthNameOf(namespace2, key) });
21348
+ return create(ResolvedWorkspaceNameSchema, { workspace: keyedBirthNameOf(namespace3, key) });
21124
21349
  }
21125
21350
  case "receivingGroup": {
21126
21351
  const { principal } = command.birth.value;
@@ -21638,6 +21863,8 @@
21638
21863
  var RECEIVING_GROUP_ENROLMENT_REFUSED = "nomos.runtime.receiving_group_enrolment_refused";
21639
21864
  var ENROLMENT_ATTEMPTS = 3;
21640
21865
  var ENROLMENT_INITIAL_BACKOFF_MILLIS = 1e3;
21866
+ var ENROLLED_CALL_WAIT_NANOSECONDS = 30000000000n;
21867
+ var ENROLLED_CONVERGENCE_WAIT_NANOSECONDS = 90000000000n;
21641
21868
  var CONSOLE_CREDENTIAL_CODES = /* @__PURE__ */ new Set(["provider_token_invalid", "provider_token_spent", "enrolment_not_admitted"]);
21642
21869
  var ENROLMENT_CREDENTIAL_RETRY_MILLIS = 3e4;
21643
21870
  var LOCAL_COPY_REPAIR_RETRY_MILLIS = 1e3;
@@ -21683,7 +21910,7 @@
21683
21910
  return void 0;
21684
21911
  }
21685
21912
  }
21686
- var _ports4, _held2, _completed5, _tails2, _converging, _opening, _accounts, _consoleEnrolments, _preparingCalls, _sequence5, _internalRequestId, _ReceivingGroupDesk_instances, accessRefused_fn, credentialWaiting_fn, preparationEnded_fn, copyBlocks_fn, prepareEnrolledCall_fn, recoverOffer_fn, begin_fn2, advance_fn2, open_fn, openEnrolled_fn, probePlacement_fn, enrolAtConsole_fn, enrolmentRoute_fn, refetchAfterPlacement_fn, replicaUnavailable_fn, recordPlacement_fn, converge_fn, recoverDevice_fn, platformLaw_fn, requireIssuer_fn, providerToken_fn, deviceBoundToken_fn, platformSignerPosture_fn, paper_fn, replacementSecret_fn, settle_fn3, nowMillis_fn, nowIso_fn;
21913
+ var _ports4, _held2, _completed5, _tails2, _converging, _opening, _accounts, _localBirths, _consoleEnrolments, _preparingCalls, _sequence5, _internalRequestId, _ReceivingGroupDesk_instances, accessRefused_fn, credentialWaiting_fn, preparationEnded_fn, copyBlocks_fn, prepareEnrolledCall_fn, recoverOffer_fn, begin_fn2, advance_fn2, open_fn, openEnrolled_fn, probePlacement_fn, enrolAtConsole_fn, enrolmentRoute_fn, refetchAfterPlacement_fn, replicaUnavailable_fn, recordPlacement_fn, converge_fn, recoverDevice_fn, platformLaw_fn, requireIssuer_fn, providerToken_fn, deviceBoundToken_fn, platformSignerPosture_fn, paper_fn, replacementSecret_fn, settle_fn3, nowMillis_fn, nowIso_fn;
21687
21914
  var ReceivingGroupDesk = class {
21688
21915
  constructor(ports) {
21689
21916
  __privateAdd(this, _ReceivingGroupDesk_instances);
@@ -21695,12 +21922,26 @@
21695
21922
  __privateAdd(this, _opening, /* @__PURE__ */ new Set());
21696
21923
  __privateAdd(this, _accounts, /* @__PURE__ */ new Map());
21697
21924
  /** D22: device key hash → the workspaces the console reported this key enrolled in (this process's memory, not truth). */
21925
+ __privateAdd(this, _localBirths, /* @__PURE__ */ new Map());
21698
21926
  __privateAdd(this, _consoleEnrolments, /* @__PURE__ */ new Map());
21699
21927
  __privateAdd(this, _preparingCalls, /* @__PURE__ */ new Map());
21700
21928
  __privateAdd(this, _sequence5, 0);
21701
21929
  __privateAdd(this, _internalRequestId, 30000000000n);
21702
21930
  __privateSet(this, _ports4, ports);
21703
21931
  }
21932
+ /** Local admission is not proof that the provider has materialised this child. */
21933
+ localBirth(workspace, parent, head, intentId) {
21934
+ __privateGet(this, _localBirths).set(workspace, { parent, head, intentId });
21935
+ }
21936
+ /** A provider birth admission answers after persisting its born children. The
21937
+ * parent's later retention seal is not an enrolment prerequisite. Intent IDs
21938
+ * also correlate admissions whose commits the provider rebased. */
21939
+ providerIntentsAdmitted(parent, intentIds) {
21940
+ const admitted = new Set(intentIds);
21941
+ for (const [child, birth] of __privateGet(this, _localBirths)) {
21942
+ if (birth.parent === parent && birth.intentId && admitted.has(birth.intentId)) __privateGet(this, _localBirths).delete(child);
21943
+ }
21944
+ }
21704
21945
  /** Opens mounted local custody, or births/observes placement and returns typed unavailability. */
21705
21946
  open(request, command) {
21706
21947
  return __privateMethod(this, _ReceivingGroupDesk_instances, begin_fn2).call(this, request, `receiving-group-open-${++__privateWrapper(this, _sequence5)._}`, (workId2) => __privateMethod(this, _ReceivingGroupDesk_instances, open_fn).call(this, request, command, workId2));
@@ -21745,6 +21986,10 @@
21745
21986
  /** Only a proven non-admission can enter recovery. Console-enrolled children
21746
21987
  * share the owning application's route, selected by credential capability and
21747
21988
  * principal, never by workspace-name guessing or an unverified payload. */
21989
+ /** A person's pending call needs correspondence through discovery and enrolment convergence. */
21990
+ waitingForAccess(workspace) {
21991
+ return [...__privateGet(this, _preparingCalls).values()].some((call) => call.workspace === workspace && !call.settled);
21992
+ }
21748
21993
  recoverOffer(request, response) {
21749
21994
  if (!__privateGet(this, _ports4).call || request.command.case !== "kernelCall" || request.command.value.credentialUse !== CredentialUse.SESSION || request.command.value.request?.operation.case !== "offer" || request.command.value.request.operation.value.intent.case !== "call") return;
21750
21995
  const verdict = signerVerdictOf(response);
@@ -21851,6 +22096,7 @@
21851
22096
  __privateGet(this, _opening).clear();
21852
22097
  __privateGet(this, _accounts).clear();
21853
22098
  __privateGet(this, _consoleEnrolments).clear();
22099
+ __privateGet(this, _localBirths).clear();
21854
22100
  __privateGet(this, _preparingCalls).clear();
21855
22101
  }
21856
22102
  };
@@ -21861,6 +22107,7 @@
21861
22107
  _converging = new WeakMap();
21862
22108
  _opening = new WeakMap();
21863
22109
  _accounts = new WeakMap();
22110
+ _localBirths = new WeakMap();
21864
22111
  _consoleEnrolments = new WeakMap();
21865
22112
  _preparingCalls = new WeakMap();
21866
22113
  _sequence5 = new WeakMap();
@@ -21936,7 +22183,7 @@
21936
22183
  __privateGet(this, _ports4).emit(binding.session, purpose === "write" ? { case: "writePreparation", value: create(WritePreparationSchema, observation) } : { case: "readAccessPreparation", value: create(ReadAccessPreparationSchema, observation) });
21937
22184
  const key = JSON.stringify([binding.credentialCapability, principal, binding.workspace]);
21938
22185
  const shared = __privateGet(this, _preparingCalls).get(key);
21939
- const deadline = __privateGet(this, _ports4).clock.monotonicNanoseconds() + 30000000000n;
22186
+ const enrolmentDeadline = __privateGet(this, _ports4).clock.monotonicNanoseconds() + ENROLLED_CALL_WAIT_NANOSECONDS;
21940
22187
  let wake = 0;
21941
22188
  const blocked = __privateMethod(this, _ReceivingGroupDesk_instances, copyBlocks_fn).call(this, binding, request.requestId);
21942
22189
  if (blocked) return ended(blocked);
@@ -21944,7 +22191,7 @@
21944
22191
  while (!shared.settled) {
21945
22192
  const blockedNow = __privateMethod(this, _ReceivingGroupDesk_instances, copyBlocks_fn).call(this, binding, request.requestId);
21946
22193
  if (blockedNow) return ended(blockedNow);
21947
- if (__privateGet(this, _ports4).clock.monotonicNanoseconds() >= deadline) return ended("waiting");
22194
+ if (shared.convergenceDeadline !== void 0 && __privateGet(this, _ports4).clock.monotonicNanoseconds() >= shared.convergenceDeadline) return ended("waiting");
21948
22195
  const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
21949
22196
  effectId: `${workId2}:join-${++wake}`,
21950
22197
  delayMillis: 250
@@ -21953,7 +22200,7 @@
21953
22200
  }
21954
22201
  if (shared.outcome) return ended(shared.outcome);
21955
22202
  } else {
21956
- const preparation = { settled: false };
22203
+ const preparation = { workspace: binding.workspace, settled: false };
21957
22204
  __privateGet(this, _preparingCalls).set(key, preparation);
21958
22205
  try {
21959
22206
  const secret = __privateGet(this, _ports4).authorSecretIfPresent(binding.session);
@@ -21962,16 +22209,30 @@
21962
22209
  let posture = __privateGet(this, _ports4).posture(request, binding.session, principal, secret, false);
21963
22210
  if (posture.deviceSignerStatus === DeviceSignerStatus.REVOKED) return ended(preparation.outcome = "revoked");
21964
22211
  if (!posture.enrolledDevice || posture.deviceSignerStatus !== DeviceSignerStatus.ACTIVE) {
21965
- const enrolled = yield* __privateMethod(this, _ReceivingGroupDesk_instances, enrolAtConsole_fn).call(this, route, binding, `${application}|${principal}`, principal, keyHash, [binding.workspace], `${workId2}:console`, ENROLMENT_ATTEMPTS, deadline);
22212
+ while (__privateGet(this, _localBirths).has(binding.workspace)) {
22213
+ const birth = __privateGet(this, _localBirths).get(binding.workspace);
22214
+ if (__privateGet(this, _ports4).providerBirthObserved(birth.parent, birth.head, request.requestId)) {
22215
+ __privateGet(this, _localBirths).delete(binding.workspace);
22216
+ break;
22217
+ }
22218
+ if (__privateGet(this, _ports4).clock.monotonicNanoseconds() >= enrolmentDeadline) return ended(preparation.outcome = "waiting");
22219
+ const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
22220
+ effectId: `${workId2}:birth-wait-${++wake}`,
22221
+ delayMillis: 100
22222
+ }) };
22223
+ if (receipt.outcome.case !== "woken") return ended(preparation.outcome = "waiting");
22224
+ }
22225
+ const enrolled = yield* __privateMethod(this, _ReceivingGroupDesk_instances, enrolAtConsole_fn).call(this, route, binding, `${application}|${principal}`, principal, keyHash, [binding.workspace], `${workId2}:console`, ENROLMENT_ATTEMPTS, enrolmentDeadline);
21966
22226
  if (enrolled.case === "deferred") return ended(preparation.outcome = enrolled.credentialRefused ? "sign-in" : "waiting");
21967
22227
  if (!(binding.workspace in enrolled.value.heads)) return ended(preparation.outcome = "denied");
22228
+ preparation.convergenceDeadline = __privateGet(this, _ports4).clock.monotonicNanoseconds() + ENROLLED_CONVERGENCE_WAIT_NANOSECONDS;
21968
22229
  while (true) {
21969
22230
  const blockedNow = __privateMethod(this, _ReceivingGroupDesk_instances, copyBlocks_fn).call(this, binding, request.requestId);
21970
22231
  if (blockedNow) return ended(preparation.outcome = blockedNow);
21971
22232
  posture = __privateGet(this, _ports4).posture(request, binding.session, principal, secret, false);
21972
22233
  if (posture.deviceSignerStatus === DeviceSignerStatus.REVOKED) return ended(preparation.outcome = "revoked");
21973
22234
  if (posture.enrolledDevice && posture.deviceSignerStatus === DeviceSignerStatus.ACTIVE) break;
21974
- if (__privateGet(this, _ports4).clock.monotonicNanoseconds() >= deadline) return ended(preparation.outcome = "waiting");
22235
+ if (__privateGet(this, _ports4).clock.monotonicNanoseconds() >= preparation.convergenceDeadline) return ended(preparation.outcome = "waiting");
21975
22236
  const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
21976
22237
  effectId: `${workId2}:observe-${++wake}`,
21977
22238
  delayMillis: 500
@@ -22866,7 +23127,7 @@
22866
23127
  this.transition = transition;
22867
23128
  }
22868
23129
  };
22869
- var _ports5, _held3, _completed6, _current2, _flights, _waiting3, _adopting, _sequence6, _internalRequestId2, _ModelAdoptionDesk_instances, advance_fn3, waitForAdoptionLane_fn, adopt_fn, run_fn, awaitObservation_fn, settle_fn4;
23130
+ var _ports5, _held3, _completed6, _current2, _flights, _waiting3, _adopting, _sequence6, _internalRequestId2, _ModelAdoptionDesk_instances, advance_fn3, waitForAdoptionLane_fn, adopt_fn, run_fn2, awaitObservation_fn, settle_fn4;
22870
23131
  var ModelAdoptionDesk = class {
22871
23132
  constructor(ports) {
22872
23133
  __privateAdd(this, _ModelAdoptionDesk_instances);
@@ -23029,7 +23290,7 @@
23029
23290
  if (flight) __privateGet(this, _flights).set(key, flight);
23030
23291
  let result;
23031
23292
  try {
23032
- result = yield* __privateMethod(this, _ModelAdoptionDesk_instances, run_fn).call(this, request, command, workId2, binding, binding.principal, secret, { law, unitSet, requirements }, keys, reason);
23293
+ result = yield* __privateMethod(this, _ModelAdoptionDesk_instances, run_fn2).call(this, request, command, workId2, binding, binding.principal, secret, { law, unitSet, requirements }, keys, reason);
23033
23294
  return result;
23034
23295
  } catch (error) {
23035
23296
  result = { case: "failure", code: error instanceof ModelAdoptionRefusal ? error.code : "nomos.runtime.model_adoption_failed", message: error instanceof Error ? error.message : String(error) };
@@ -23044,7 +23305,7 @@
23044
23305
  return error instanceof ModelAdoptionRefusal ? { case: "failure", code: error.code, message: error.message } : { case: "failure", code: "nomos.runtime.model_adoption_failed", message: error instanceof Error ? error.message : String(error) };
23045
23306
  }
23046
23307
  };
23047
- run_fn = function* (request, command, workId2, binding, principal, secret, approved, keys, reason) {
23308
+ run_fn2 = function* (request, command, workId2, binding, principal, secret, approved, keys, reason) {
23048
23309
  const { law, unitSet, requirements } = approved;
23049
23310
  const session = command.session;
23050
23311
  const workspace = binding.workspace;
@@ -23285,7 +23546,7 @@
23285
23546
  // ../src/runtime/peer_desk_store.ts
23286
23547
  init_define_NOMOS_KERNEL_RELEASE();
23287
23548
  init_shims();
23288
- var recordId = (namespace2, key) => `${namespace2.length}:${namespace2}${key}`;
23549
+ var recordId = (namespace3, key) => `${namespace3.length}:${namespace3}${key}`;
23289
23550
  var copy2 = (record) => ({
23290
23551
  ...record,
23291
23552
  value: record.value.slice()
@@ -23295,15 +23556,15 @@
23295
23556
  constructor() {
23296
23557
  __privateAdd(this, _records3, /* @__PURE__ */ new Map());
23297
23558
  }
23298
- list(namespace2) {
23299
- return [...__privateGet(this, _records3).values()].filter((record) => record.namespace === namespace2).sort((left, right) => left.key.localeCompare(right.key)).map(copy2);
23559
+ list(namespace3) {
23560
+ return [...__privateGet(this, _records3).values()].filter((record) => record.namespace === namespace3).sort((left, right) => left.key.localeCompare(right.key)).map(copy2);
23300
23561
  }
23301
- compareExchange(namespace2, key, expectedRevision, value) {
23302
- const id = recordId(namespace2, key);
23562
+ compareExchange(namespace3, key, expectedRevision, value) {
23563
+ const id = recordId(namespace3, key);
23303
23564
  const current2 = __privateGet(this, _records3).get(id);
23304
23565
  if (current2?.revision !== expectedRevision) {
23305
23566
  throw new Error(
23306
- `peer desk record '${namespace2}/${key}' changed at revision ${current2?.revision ?? "absent"}`
23567
+ `peer desk record '${namespace3}/${key}' changed at revision ${current2?.revision ?? "absent"}`
23307
23568
  );
23308
23569
  }
23309
23570
  if (value === void 0) {
@@ -23311,7 +23572,7 @@
23311
23572
  return void 0;
23312
23573
  }
23313
23574
  const next = Object.freeze({
23314
- namespace: namespace2,
23575
+ namespace: namespace3,
23315
23576
  key,
23316
23577
  revision: (current2?.revision ?? 0n) + 1n,
23317
23578
  value: value.slice()
@@ -23323,7 +23584,7 @@
23323
23584
  _records3 = new WeakMap();
23324
23585
 
23325
23586
  // ../src/runtime/custody_receipts.ts
23326
- var namespace = "nomos.peer-desk.custody-receipts/v1";
23587
+ var namespace2 = "nomos.peer-desk.custody-receipts/v1";
23327
23588
  var encoder3 = new TextEncoder();
23328
23589
  var decoder3 = new TextDecoder();
23329
23590
  var MAX_BASES = 256;
@@ -23336,7 +23597,7 @@
23336
23597
  __privateAdd(this, _journals, /* @__PURE__ */ new Map());
23337
23598
  __privateAdd(this, _receipts, /* @__PURE__ */ new Map());
23338
23599
  __privateSet(this, _store, store);
23339
- for (const record of store.list(namespace)) {
23600
+ for (const record of store.list(namespace2)) {
23340
23601
  __privateGet(this, _records4).set(record.key, record);
23341
23602
  try {
23342
23603
  if (record.key.startsWith("receipt:")) {
@@ -23368,6 +23629,10 @@
23368
23629
  if (stored.head !== value.head && !value.bases.includes(stored.head)) return void 0;
23369
23630
  return fromBinary(CustodyIntentAdmissionSchema, toBinary(CustodyIntentAdmissionSchema, stored.receipt));
23370
23631
  }
23632
+ /** Older records did not distinguish parent admission from birth completion. */
23633
+ requiresBirthRecovery(workspace, change) {
23634
+ return __privateGet(this, _receipts).get(`receipt:${workspace}:${sha256Hex(change)}`)?.births !== false;
23635
+ }
23371
23636
  record(workspace, before, after, receipts) {
23372
23637
  const old = __privateGet(this, _journals).get(workspace);
23373
23638
  const journalKey = `head:${workspace}`;
@@ -23376,23 +23641,24 @@
23376
23641
  value.bases = [...new Set(value.bases)].slice(-MAX_BASES);
23377
23642
  const keys = new Set(value.keys);
23378
23643
  const discarded = new Set(old?.generation !== value.generation ? old?.keys : []);
23379
- for (const { change, receipt } of receipts) {
23644
+ for (const { change, receipt, births = false } of receipts) {
23380
23645
  if (receipt.outcome.case !== "admitted") continue;
23381
23646
  const key = `receipt:${workspace}:${sha256Hex(change)}`;
23382
23647
  keys.delete(key);
23383
23648
  keys.add(key);
23384
23649
  discarded.delete(key);
23385
- const header2 = encoder3.encode(`${JSON.stringify({ generation: value.generation, head: after })}
23650
+ const header2 = encoder3.encode(`${JSON.stringify({ generation: value.generation, head: after, births })}
23386
23651
  `);
23387
23652
  const body = toBinary(CustodyIntentAdmissionSchema, receipt);
23388
23653
  const bytes = new Uint8Array(header2.length + body.length);
23389
23654
  bytes.set(header2);
23390
23655
  bytes.set(body, header2.length);
23391
- const record2 = __privateGet(this, _store).compareExchange(namespace, key, __privateGet(this, _records4).get(key)?.revision, bytes);
23656
+ const record2 = __privateGet(this, _store).compareExchange(namespace2, key, __privateGet(this, _records4).get(key)?.revision, bytes);
23392
23657
  if (record2) __privateGet(this, _records4).set(key, record2);
23393
23658
  __privateGet(this, _receipts).set(key, {
23394
23659
  generation: value.generation,
23395
23660
  head: after,
23661
+ births,
23396
23662
  receipt: fromBinary(CustodyIntentAdmissionSchema, body)
23397
23663
  });
23398
23664
  }
@@ -23400,12 +23666,12 @@
23400
23666
  for (const key of ordered.slice(0, -MAX_RECEIPTS)) discarded.add(key);
23401
23667
  value.keys = ordered.slice(-MAX_RECEIPTS);
23402
23668
  for (const key of discarded) {
23403
- __privateGet(this, _store).compareExchange(namespace, key, __privateGet(this, _records4).get(key)?.revision, void 0);
23669
+ __privateGet(this, _store).compareExchange(namespace2, key, __privateGet(this, _records4).get(key)?.revision, void 0);
23404
23670
  __privateGet(this, _records4).delete(key);
23405
23671
  __privateGet(this, _receipts).delete(key);
23406
23672
  }
23407
23673
  const record = __privateGet(this, _store).compareExchange(
23408
- namespace,
23674
+ namespace2,
23409
23675
  journalKey,
23410
23676
  __privateGet(this, _records4).get(journalKey)?.revision,
23411
23677
  encoder3.encode(JSON.stringify(value))
@@ -23675,6 +23941,15 @@
23675
23941
  })();
23676
23942
  const sessions = /* @__PURE__ */ new Map();
23677
23943
  const births = [];
23944
+ const birthOutcomes = [];
23945
+ const collectBirths = (verdict) => {
23946
+ if (verdict.outcome.case !== "admitted") return;
23947
+ birthOutcomes.push(...verdict.outcome.value.birthOutcomes);
23948
+ for (const child of verdict.outcome.value.born) births.push(create(BornCustodySchema, {
23949
+ child,
23950
+ pack: __privateGet(this, _kernel6).packDelta(workspaceMount(child.workspace), request.requestId, child.head)
23951
+ }));
23952
+ };
23678
23953
  const admittedBase = __privateGet(this, _kernel6).head(mount, request.requestId) ?? "";
23679
23954
  const streamSession = offers[0]?.session ?? "";
23680
23955
  const streamKey = mount.workspace;
@@ -23682,8 +23957,13 @@
23682
23957
  const continuesStream = command.continuesAfter !== void 0 && offers.length > 0 && offers.every((offer) => offer.session === streamSession) && stream?.lastCommit === command.continuesAfter && stream.main === admittedBase;
23683
23958
  if (command.fastForwardOnly && offers.length > 0 && !continuesStream && (command.baseHead ?? "") !== admittedBase) {
23684
23959
  for (const offer of offers) {
23685
- const receipt = __privateGet(this, _receipts2).receipt(mount.workspace, admittedBase, offer.changeUsda);
23960
+ let receipt = __privateGet(this, _receipts2).receipt(mount.workspace, admittedBase, offer.changeUsda);
23686
23961
  if (!receipt) continue;
23962
+ if (__privateGet(this, _receipts2).requiresBirthRecovery(mount.workspace, offer.changeUsda)) {
23963
+ const verdict = __privateMethod(this, _CustodyAdmissionDesk_instances, offer_fn).call(this, request, mount, offer);
23964
+ collectBirths(verdict);
23965
+ receipt = __privateMethod(this, _CustodyAdmissionDesk_instances, record_fn2).call(this, offer, verdict);
23966
+ }
23687
23967
  receipt.commitOid = offer.commitOid;
23688
23968
  const records = sessions.get(offer.session) ?? [];
23689
23969
  records.push(receipt);
@@ -23710,6 +23990,8 @@
23710
23990
  }
23711
23991
  return create(CustodyAdmissionSchema, {
23712
23992
  main: admittedBase,
23993
+ bornCustody: births,
23994
+ birthOutcomes,
23713
23995
  sessions: [...sessions].map(([session, intents]) => create(CustodySessionAdmissionSchema, { session, intents })),
23714
23996
  ...delta
23715
23997
  });
@@ -23728,20 +24010,11 @@
23728
24010
  const records = sessions.get(offer.session) ?? [];
23729
24011
  const receipt = __privateMethod(this, _CustodyAdmissionDesk_instances, record_fn2).call(this, offer, verdict);
23730
24012
  records.push(receipt);
23731
- receipts.push({ change: offer.changeUsda, receipt });
24013
+ receipts.push({ change: offer.changeUsda, receipt, births: verdict.outcome.case === "admitted" && (verdict.outcome.value.born.length > 0 || verdict.outcome.value.birthOutcomes.length > 0) });
23732
24014
  sessions.set(offer.session, records);
23733
24015
  if (verdict.outcome.case === "admitted") {
23734
24016
  main = verdict.outcome.value.head;
23735
- for (const child of verdict.outcome.value.born) {
23736
- births.push(create(BornCustodySchema, {
23737
- child,
23738
- pack: __privateGet(this, _kernel6).packDelta(
23739
- workspaceMount(child.workspace),
23740
- request.requestId,
23741
- child.head
23742
- )
23743
- }));
23744
- }
24017
+ collectBirths(verdict);
23745
24018
  }
23746
24019
  }
23747
24020
  if (options.journal !== false && receipts.some((entry) => entry.receipt.outcome.case === "admitted")) {
@@ -23759,6 +24032,7 @@
23759
24032
  ([sessionIdentity, intents]) => create(CustodySessionAdmissionSchema, { session: sessionIdentity, intents })
23760
24033
  ),
23761
24034
  bornCustody: births,
24035
+ birthOutcomes,
23762
24036
  ...custodyReturnDelta(__privateGet(this, _kernel6), mount, request.requestId, command.baseHead, admittedBase, main, command.observedHead)
23763
24037
  });
23764
24038
  }
@@ -27410,7 +27684,7 @@
27410
27684
  // ../src/runtime/runtime_identity.ts
27411
27685
  init_define_NOMOS_KERNEL_RELEASE();
27412
27686
  init_shims();
27413
- var PEER_RUNTIME_IDENTITY = "0.119.12" ? `@githolon/runtime@${"0.119.12"}` : "@githolon/runtime@unbundled";
27687
+ var PEER_RUNTIME_IDENTITY = "0.119.28" ? `@githolon/runtime@${"0.119.28"}` : "@githolon/runtime@unbundled";
27414
27688
 
27415
27689
  // ../src/runtime/replica_follow_desk.ts
27416
27690
  init_define_NOMOS_KERNEL_RELEASE();
@@ -27920,32 +28194,32 @@
27920
28194
  __privateSet(this, _seat, seat);
27921
28195
  __privateSet(this, _report, report);
27922
28196
  }
27923
- list(namespace2) {
27924
- if (LOCAL_ONLY_NAMESPACES.has(namespace2)) return __privateGet(this, _inner).list(namespace2);
28197
+ list(namespace3) {
28198
+ if (LOCAL_ONLY_NAMESPACES.has(namespace3)) return __privateGet(this, _inner).list(namespace3);
27925
28199
  const kept = [];
27926
- for (const record of __privateGet(this, _inner).list(namespace2)) {
28200
+ for (const record of __privateGet(this, _inner).list(namespace3)) {
27927
28201
  const sealed = readSeal(record.value);
27928
28202
  if (sealed?.seat === __privateGet(this, _seat).digest) {
27929
28203
  kept.push({ ...record, value: sealed.value.slice() });
27930
28204
  continue;
27931
28205
  }
27932
- __privateMethod(this, _SeatedPeerDeskStore_instances, quarantine_fn).call(this, namespace2, record, sealed?.seat);
28206
+ __privateMethod(this, _SeatedPeerDeskStore_instances, quarantine_fn).call(this, namespace3, record, sealed?.seat);
27933
28207
  }
27934
28208
  return kept;
27935
28209
  }
27936
- compareExchange(namespace2, key, expectedRevision, value) {
27937
- if (LOCAL_ONLY_NAMESPACES.has(namespace2)) {
27938
- return __privateGet(this, _inner).compareExchange(namespace2, key, expectedRevision, value);
28210
+ compareExchange(namespace3, key, expectedRevision, value) {
28211
+ if (LOCAL_ONLY_NAMESPACES.has(namespace3)) {
28212
+ return __privateGet(this, _inner).compareExchange(namespace3, key, expectedRevision, value);
27939
28213
  }
27940
28214
  const stored = __privateGet(this, _inner).compareExchange(
27941
- namespace2,
28215
+ namespace3,
27942
28216
  key,
27943
28217
  expectedRevision,
27944
28218
  value === void 0 ? void 0 : seal(__privateGet(this, _seat).digest, value)
27945
28219
  );
27946
28220
  if (stored === void 0) return void 0;
27947
28221
  const sealed = readSeal(stored.value);
27948
- if (!sealed) throw new Error(`peer desk record '${namespace2}/${key}' lost its office seat`);
28222
+ if (!sealed) throw new Error(`peer desk record '${namespace3}/${key}' lost its office seat`);
27949
28223
  return { ...stored, value: sealed.value.slice() };
27950
28224
  }
27951
28225
  };
@@ -27954,15 +28228,15 @@
27954
28228
  _report = new WeakMap();
27955
28229
  _SeatedPeerDeskStore_instances = new WeakSet();
27956
28230
  /** Preserve the foreign record under the quarantine namespace, then free the slot. */
27957
- quarantine_fn = function(namespace2, record, recordedSeat) {
27958
- const key = `${namespace2}\0${record.key}\0${record.revision}`;
28231
+ quarantine_fn = function(namespace3, record, recordedSeat) {
28232
+ const key = `${namespace3}\0${record.key}\0${record.revision}`;
27959
28233
  try {
27960
28234
  __privateGet(this, _inner).compareExchange(QUARANTINED_BINDINGS_NAMESPACE, key, void 0, record.value);
27961
28235
  } catch {
27962
28236
  }
27963
- __privateGet(this, _inner).compareExchange(namespace2, record.key, record.revision, void 0);
28237
+ __privateGet(this, _inner).compareExchange(namespace3, record.key, record.revision, void 0);
27964
28238
  __privateGet(this, _report).call(this, create(QuarantinedBindingSchema, {
27965
- namespace: namespace2,
28239
+ namespace: namespace3,
27966
28240
  key: record.key,
27967
28241
  reason: recordedSeat === void 0 ? QuarantineReason.Unseated : QuarantineReason.ForeignSeat,
27968
28242
  recordedSeat: recordedSeat ?? "",
@@ -28141,11 +28415,13 @@
28141
28415
  * A sync round just reached a provider: the link is up, and the round may have carried a birth whose
28142
28416
  * custodian now declares the child's placement. Every discovery still waiting (a failure, or an
28143
28417
  * answer without placement) is due again now, with its backoff restarted, instead of on a timer that
28144
- * grew while this peer was offline.
28418
+ * grew while this peer was offline. An enrolment acknowledgement names one
28419
+ * available workspace, so only that workspace leaves discovery backoff.
28145
28420
  */
28146
- providerReached() {
28421
+ providerReached(availableWorkspace) {
28147
28422
  const now2 = __privateMethod(this, _PlacementDiscoveryDesk_instances, now_fn6).call(this);
28148
28423
  for (const [workspace, state] of __privateGet(this, _inventory2)) {
28424
+ if (availableWorkspace !== void 0 && workspace !== availableWorkspace) continue;
28149
28425
  if (state.case === DiscoveryPhase.Waiting && state.dueAt > now2) {
28150
28426
  __privateGet(this, _inventory2).set(workspace, { case: DiscoveryPhase.Waiting, attempt: 0, dueAt: now2 });
28151
28427
  }
@@ -29048,6 +29324,10 @@
29048
29324
  __publicField(this, "linkClosed");
29049
29325
  /** The host's origin fence: a link is never opened to an origin it does not permit. */
29050
29326
  __publicField(this, "originAllowed");
29327
+ /** Application peers bound pending handshakes too: a socket open can warm remote custody. */
29328
+ __publicField(this, "openingLanes", Infinity);
29329
+ /** Capacity above that bound reserved for an interaction waiting on its workspace. */
29330
+ __publicField(this, "urgentOpeningLanes", 0);
29051
29331
  /** A batch went out or an admission came back: the stream's progress may have changed. */
29052
29332
  __publicField(this, "progressChanged");
29053
29333
  /**
@@ -29353,7 +29633,10 @@
29353
29633
  __privateMethod(this, _LiveCorrespondenceDesk_instances, closeByRuntime_fn).call(this, link, "open timed out");
29354
29634
  link.state = "closed";
29355
29635
  }
29356
- if (link.state === "closed" && now2 >= link.due) __privateMethod(this, _LiveCorrespondenceDesk_instances, open_fn2).call(this, link);
29636
+ if (link.state === "closed" && now2 >= link.due && !__privateMethod(this, _LiveCorrespondenceDesk_instances, open_fn2).call(this, link)) {
29637
+ wake = wake === void 0 || wake > 250n ? 250n : wake;
29638
+ continue;
29639
+ }
29357
29640
  if (link.state === "open" && !link.publisher) {
29358
29641
  const again = this.inbound.drive(link.binding.workspace);
29359
29642
  if (again !== void 0) {
@@ -29619,6 +29902,8 @@
29619
29902
  }) });
29620
29903
  };
29621
29904
  open_fn2 = function(link) {
29905
+ const limit = this.openingLanes + (this.inbound.urgent?.(link.binding.workspace) ? this.urgentOpeningLanes : 0);
29906
+ if (Number.isFinite(limit) && [...__privateGet(this, _links).values()].filter((other) => other.state === "opening").length >= limit) return false;
29622
29907
  link.id = `live:${++__privateWrapper(this, _sequence12)._}:${link.binding.workspace}`;
29623
29908
  link.state = "opening";
29624
29909
  link.openedAt = void 0;
@@ -29629,6 +29914,7 @@
29629
29914
  link.dirty = true;
29630
29915
  const endpoint = link.origin.replace(/\/+$/, "").replace(/^http/, "ws");
29631
29916
  __privateMethod(this, _LiveCorrespondenceDesk_instances, effect_fn).call(this, link, { case: "openUrl", value: `${endpoint}/v2/workspaces/${encodeURIComponent(link.binding.workspace)}/subscribe?${subscribeQuery(link)}` });
29917
+ return true;
29632
29918
  };
29633
29919
  send_fn = function(link, message) {
29634
29920
  const bytes = toBinary(LiveOfferFrameSchema, create(LiveOfferFrameSchema, { message }));
@@ -30022,11 +30308,11 @@
30022
30308
  // ../src/runtime/peer_lifecycle.ts
30023
30309
  init_define_NOMOS_KERNEL_RELEASE();
30024
30310
  init_shims();
30025
- var _events3, _closed4;
30311
+ var _events3, _closed5;
30026
30312
  var PeerLifecycle = class {
30027
30313
  constructor(events, runtimeVersion) {
30028
30314
  __privateAdd(this, _events3);
30029
- __privateAdd(this, _closed4, false);
30315
+ __privateAdd(this, _closed5, false);
30030
30316
  __privateSet(this, _events3, events);
30031
30317
  __privateGet(this, _events3).emit(void 0, {
30032
30318
  case: "ready",
@@ -30040,21 +30326,21 @@
30040
30326
  });
30041
30327
  }
30042
30328
  assertAccepting(request) {
30043
- if (__privateGet(this, _closed4) && request.command.case !== "closeRealm") {
30329
+ if (__privateGet(this, _closed5) && request.command.case !== "closeRealm") {
30044
30330
  throw new Error("Nomos peer runtime is closed");
30045
30331
  }
30046
30332
  }
30047
30333
  close() {
30048
- if (__privateGet(this, _closed4)) return false;
30049
- __privateSet(this, _closed4, true);
30334
+ if (__privateGet(this, _closed5)) return false;
30335
+ __privateSet(this, _closed5, true);
30050
30336
  return true;
30051
30337
  }
30052
30338
  get closed() {
30053
- return __privateGet(this, _closed4);
30339
+ return __privateGet(this, _closed5);
30054
30340
  }
30055
30341
  };
30056
30342
  _events3 = new WeakMap();
30057
- _closed4 = new WeakMap();
30343
+ _closed5 = new WeakMap();
30058
30344
 
30059
30345
  // ../src/runtime/records_desk.ts
30060
30346
  init_define_NOMOS_KERNEL_RELEASE();
@@ -30153,9 +30439,9 @@
30153
30439
  );
30154
30440
  if (answer.case === "readIndexPending") return answer;
30155
30441
  const result = answer.value;
30156
- const namespace2 = command.namespace;
30157
- const selected = namespace2 === void 0 ? result.children : result.children.filter(
30158
- (child) => child.status === ChildWorkspaceLifecycleStatus.ACTIVE && isKeyedBirthOf(namespace2, child.workspace)
30442
+ const namespace3 = command.namespace;
30443
+ const selected = namespace3 === void 0 ? result.children : result.children.filter(
30444
+ (child) => child.status === ChildWorkspaceLifecycleStatus.ACTIVE && isKeyedBirthOf(namespace3, child.workspace)
30159
30445
  );
30160
30446
  return { case: "children", value: create(ChildWorkspaceListSchema, {
30161
30447
  children: selected.map((child) => create(ChildWorkspaceSchema, {
@@ -31000,7 +31286,7 @@
31000
31286
  const finished = clock2.monotonicNanoseconds();
31001
31287
  return finished >= started ? Number(finished - started) / 1e6 : 0;
31002
31288
  };
31003
- var _kernel19, _credentials4, _clock14, _mount2, _binding, _route2, _rediscover, _reroute, _discoveredFrontier, _observePlacement, _recheckPlacement, _directoryAnswered, _placementFetched, _acquired, _streamSequence, _historySlices, _levelling, _roundStartHead, _levelledBatches, _levelledBytes, _boundaries, _sealedObserved, _command2, _requestId6, _started, _state, _localHead, _offerHead, _previousHead, _pushMillis, _pushBytes, _desiredHead, _candidateDurable, _admissionSummary, _offerReceipt, _pushError, _current3, _lastReceiptEffectId2, _offerSequence, _lastStep2, _probeOnly, _liveConnected, _liveAdmitted, _establishedBase, _completeHistory, _lawProductsImported, _lawProductsInFlight, _shallowMounted, _fetchedLawProducts, _needsReconciliation, _offerAfterConverge, _rebaseFrom, _rebases, _remountsLost, _containment, _containedBookmark, _parkedLocal, _replaceLocalHead, _repairMissingCommit, _receiveStep, _offered, _lawTrees, _wholeAsked, _receiveSteps, _importId, _importSource, _WorkspaceSyncWork_instances, openRound_fn, mayBeContained_fn, custodianMainOffLocalChain_fn, askContainment_fn, contained_fn, notContained_fn, offerOrReconcile_fn, establishBase_fn, missingTrackedBase_fn, holdsLocalWork_fn, holdsUnsyncedCommits_fn, pullBeforeOffer_fn, acquire_fn, lawProductsFetch_fn, streamEffect_fn, acceptStream_fn, importStep_fn, imported_fn, historyOrMount_fn, remount_fn, remountLost_fn, beginOffer_fn, acceptOffer_fn, placementFrontier_fn, placementOnly_fn, acceptDiscovery_fn, providerCustody_fn, mountFetched_fn, lawProductsRequest_fn, acceptLawProducts_fn, providerCustodyMounted_fn, importLawProducts_fn, converge_fn2, convergeStep_fn, unrelatedLineageRefusal_fn, replaceLocal_fn, converged_fn, offerAfterRebase_fn, preservedSuffix_fn, offerPreserved_fn, preservedCopy_fn, alreadyJudged_fn, rememberJudgment_fn, forgetJudgment_fn, present_fn, finishOfferOutcome_fn, finishWarming_fn, transportFailure_fn, remember_fn4, finish_fn2, cloudBase_fn, offerEndpoint_fn, workspaceEndpoint_fn, authToken_fn;
31289
+ var _kernel19, _credentials4, _clock14, _mount2, _binding, _route2, _rediscover, _reroute, _discoveredFrontier, _observePlacement, _recheckPlacement, _directoryAnswered, _placementFetched, _acquired, _streamSequence, _historySlices, _levelling, _roundStartHead, _levelledBatches, _levelledBytes, _boundaries, _sealedObserved, _command2, _requestId6, _started, _state, _localHead, _offerHead, _previousHead, _pushMillis, _pushBytes, _desiredHead, _candidateDurable, _admissionSummary, _offerReceipt, _pushError, _current3, _lastReceiptEffectId2, _offerSequence, _lastStep2, _probeOnly, _liveConnected, _liveAdmitted, _establishedBase, _completeHistory, _lawProductsImported, _lawProductsInFlight, _shallowMounted, _fetchedLawProducts, _needsReconciliation, _offerAfterConverge, _rebaseFrom, _rebases, _remountsLost, _containment, _containmentProven, _containedBookmark, _parkedLocal, _replaceLocalHead, _repairMissingCommit, _receiveStep, _offered, _lawTrees, _wholeAsked, _receiveSteps, _importId, _importSource, _WorkspaceSyncWork_instances, openRound_fn, mayBeContained_fn, custodianMainOffLocalChain_fn, askContainment_fn, contained_fn, notContained_fn, offerOrReconcile_fn, establishBase_fn, missingTrackedBase_fn, holdsLocalWork_fn, holdsUnsyncedCommits_fn, pullBeforeOffer_fn, acquire_fn, lawProductsFetch_fn, streamEffect_fn, acceptStream_fn, importStep_fn, imported_fn, historyOrMount_fn, remount_fn, remountLost_fn, beginOffer_fn, acceptOffer_fn, placementFrontier_fn, placementOnly_fn, acceptDiscovery_fn, providerCustody_fn, mountFetched_fn, lawProductsRequest_fn, acceptLawProducts_fn, providerCustodyMounted_fn, importLawProducts_fn, converge_fn2, convergeStep_fn, unrelatedLineageRefusal_fn, replaceLocal_fn, converged_fn, offerAfterRebase_fn, preservedSuffix_fn, offerPreserved_fn, preservedCopy_fn, alreadyJudged_fn, rememberJudgment_fn, forgetJudgment_fn, present_fn, finishOfferOutcome_fn, finishWarming_fn, transportFailure_fn, remember_fn4, finish_fn2, cloudBase_fn, offerEndpoint_fn, workspaceEndpoint_fn, authToken_fn;
31004
31290
  var WorkspaceSyncWork = class {
31005
31291
  constructor(args) {
31006
31292
  __privateAdd(this, _WorkspaceSyncWork_instances);
@@ -31082,6 +31368,7 @@
31082
31368
  __privateAdd(this, _remountsLost, 0);
31083
31369
  /** This round's level ask is a containment question (CAP-870): on a refusal, take this path. */
31084
31370
  __privateAdd(this, _containment);
31371
+ __privateAdd(this, _containmentProven, false);
31085
31372
  /** The stale bookmark a contained round replaces: its custodian's main holds the local head. */
31086
31373
  __privateAdd(this, _containedBookmark);
31087
31374
  /** Local intents this round's rebase refused and parked on the refused-offer desk. */
@@ -31292,6 +31579,7 @@
31292
31579
  _rebases = new WeakMap();
31293
31580
  _remountsLost = new WeakMap();
31294
31581
  _containment = new WeakMap();
31582
+ _containmentProven = new WeakMap();
31295
31583
  _containedBookmark = new WeakMap();
31296
31584
  _parkedLocal = new WeakMap();
31297
31585
  _replaceLocalHead = new WeakMap();
@@ -31351,6 +31639,7 @@
31351
31639
  * stays this round's to replace; the local head is the round's base from here. */
31352
31640
  contained_fn = function() {
31353
31641
  __privateSet(this, _containment, void 0);
31642
+ __privateSet(this, _containmentProven, true);
31354
31643
  __privateSet(this, _containedBookmark, __privateGet(this, _previousHead));
31355
31644
  __privateSet(this, _previousHead, __privateGet(this, _localHead));
31356
31645
  };
@@ -31366,6 +31655,11 @@
31366
31655
  }
31367
31656
  notContainedThisLifetime.set(__privateGet(this, _mount2).workspace, __privateGet(this, _localHead));
31368
31657
  }
31658
+ if (otherwise === "recover") {
31659
+ __privateSet(this, _offerAfterConverge, __privateGet(this, _command2).admit);
31660
+ __privateSet(this, _rebaseFrom, void 0);
31661
+ return __privateMethod(this, _WorkspaceSyncWork_instances, acquire_fn).call(this, "full");
31662
+ }
31369
31663
  if (__privateGet(this, _probeOnly)) {
31370
31664
  __privateSet(this, _needsReconciliation, true);
31371
31665
  return __privateMethod(this, _WorkspaceSyncWork_instances, finish_fn2).call(this, create(SyncWorkspaceResponseSchema, {
@@ -31929,6 +32223,7 @@
31929
32223
  }));
31930
32224
  }
31931
32225
  if (!__privateMethod(this, _WorkspaceSyncWork_instances, establishBase_fn).call(this, __privateGet(this, _desiredHead))) {
32226
+ if (__privateMethod(this, _WorkspaceSyncWork_instances, mayBeContained_fn).call(this)) return __privateMethod(this, _WorkspaceSyncWork_instances, askContainment_fn).call(this, "recover");
31932
32227
  __privateSet(this, _offerAfterConverge, __privateGet(this, _command2).admit);
31933
32228
  __privateSet(this, _rebaseFrom, void 0);
31934
32229
  return __privateMethod(this, _WorkspaceSyncWork_instances, acquire_fn).call(this, "full");
@@ -32271,7 +32566,7 @@
32271
32566
  };
32272
32567
  converged_fn = function(verdict, candidateHead, receivedBytes, prefetchMillis, started = __privateGet(this, _clock14).monotonicNanoseconds(), rebirth) {
32273
32568
  const tracked = verdict.admitted && __privateGet(this, _candidateDurable) ? __privateGet(this, _kernel19).resolveRef(__privateGet(this, _mount2), __privateGet(this, _requestId6), trackedMain) : void 0;
32274
- if (verdict.admitted && __privateGet(this, _candidateDurable) && tracked !== candidateHead && (tracked === __privateGet(this, _previousHead) || __privateGet(this, _containedBookmark) !== void 0 && tracked === __privateGet(this, _containedBookmark))) {
32569
+ if (verdict.admitted && __privateGet(this, _candidateDurable) && tracked !== candidateHead && (tracked === __privateGet(this, _previousHead) || __privateGet(this, _containmentProven) && tracked === __privateGet(this, _containedBookmark))) {
32275
32570
  __privateGet(this, _kernel19).writeRef(
32276
32571
  __privateGet(this, _mount2),
32277
32572
  __privateGet(this, _requestId6),
@@ -35710,11 +36005,12 @@
35710
36005
  _pending5 = new WeakMap();
35711
36006
  _completed7 = new WeakMap();
35712
36007
  _lastReceiptEffectId3 = new WeakMap();
35713
- var _kernel24, _work3, _publicationRefs, _origins4, _bornByCustodyAdmission, _BirthCustodyDesk_instances, begin_fn3;
36008
+ var _kernel24, _sequence13, _work3, _publicationRefs, _origins4, _bornByCustodyAdmission, _BirthCustodyDesk_instances, requireBuilt_fn, begin_fn3;
35714
36009
  var BirthCustodyDesk = class {
35715
36010
  constructor(kernel, publicationRefs = () => []) {
35716
36011
  __privateAdd(this, _BirthCustodyDesk_instances);
35717
36012
  __privateAdd(this, _kernel24);
36013
+ __privateAdd(this, _sequence13, 0);
35718
36014
  __privateAdd(this, _work3, new CorrespondenceWorkRegistry());
35719
36015
  __privateAdd(this, _publicationRefs);
35720
36016
  /** The kernel call each unfinished birth-custody work answers. Its admitted parent frontier becomes
@@ -35728,6 +36024,9 @@
35728
36024
  __privateSet(this, _publicationRefs, publicationRefs);
35729
36025
  }
35730
36026
  afterKernelCall(request, response) {
36027
+ if (response.outcome.case === "offer" && response.outcome.value.outcome.case === "admitted") {
36028
+ __privateMethod(this, _BirthCustodyDesk_instances, requireBuilt_fn).call(this, request, response.outcome.value.outcome.value.birthOutcomes, false);
36029
+ }
35731
36030
  const births = response.outcome.case === "offer" && response.outcome.value.outcome.case === "admitted" ? response.outcome.value.outcome.value.born.map((child) => create(BornCustodySchema, {
35732
36031
  child,
35733
36032
  pack: __privateGet(this, _kernel24).packDelta(
@@ -35739,6 +36038,7 @@
35739
36038
  return __privateMethod(this, _BirthCustodyDesk_instances, begin_fn3).call(this, request, { case: "kernelCall", value: response }, births);
35740
36039
  }
35741
36040
  afterCustodyAdmission(request, admission) {
36041
+ __privateMethod(this, _BirthCustodyDesk_instances, requireBuilt_fn).call(this, request, admission.birthOutcomes, true);
35742
36042
  return __privateMethod(this, _BirthCustodyDesk_instances, begin_fn3).call(this, request, { case: "custodyOffersAdmitted", value: admission }, admission.bornCustody);
35743
36043
  }
35744
36044
  has(workId2) {
@@ -35751,7 +36051,19 @@
35751
36051
  * retained into custody (and a stop drops it, leaving an orphan child).
35752
36052
  */
35753
36053
  continue(workId2, receipt) {
35754
- const step = __privateGet(this, _work3).resume(workId2, receipt);
36054
+ let step;
36055
+ try {
36056
+ step = __privateGet(this, _work3).resume(workId2, receipt);
36057
+ } catch (error) {
36058
+ const pending = __privateGet(this, _work3).peek(workId2);
36059
+ const physicalFailure = receipt.outcome.case === "failure" || receipt.outcome.case === "bornCustodyPersisted" && receipt.outcome.value.children.some((child) => !child.persisted);
36060
+ if (physicalFailure && pending?.case === "pending" && pending.value.effect.case === "persistBornCustody" && pending.value.effect.value.effectId === receipt.effectId) {
36061
+ __privateGet(this, _work3).failed(workId2, receipt.effectId, error instanceof Error ? error.message : String(error));
36062
+ __privateGet(this, _origins4).delete(workId2);
36063
+ __privateGet(this, _bornByCustodyAdmission).delete(workId2);
36064
+ }
36065
+ throw error;
36066
+ }
35755
36067
  if (step.case !== "complete") return { step };
35756
36068
  __privateGet(this, _work3).completed(workId2);
35757
36069
  for (const child of __privateGet(this, _bornByCustodyAdmission).get(workId2) ?? []) {
@@ -35769,11 +36081,26 @@
35769
36081
  }
35770
36082
  };
35771
36083
  _kernel24 = new WeakMap();
36084
+ _sequence13 = new WeakMap();
35772
36085
  _work3 = new WeakMap();
35773
36086
  _publicationRefs = new WeakMap();
35774
36087
  _origins4 = new WeakMap();
35775
36088
  _bornByCustodyAdmission = new WeakMap();
35776
36089
  _BirthCustodyDesk_instances = new WeakSet();
36090
+ requireBuilt_fn = function(request, outcomes, custody) {
36091
+ const pending = outcomes.filter((outcome) => outcome.status !== BirthOutcomeStatus.BORN);
36092
+ for (const outcome of pending) {
36093
+ console.error("nomos.birth.incomplete", {
36094
+ parent: request.target?.workspace,
36095
+ child: outcome.workspace,
36096
+ status: outcome.status,
36097
+ reason: outcome.reason,
36098
+ code: outcome.code
36099
+ });
36100
+ }
36101
+ const failed = pending.filter((outcome) => custody || outcome.status !== BirthOutcomeStatus.DEFERRED);
36102
+ if (failed.length) throw new Error(`birth custody incomplete; retry the exact admitted parent offer: ${failed.map((outcome) => `${outcome.workspace ?? "unknown child"}: ${outcome.reason ?? outcome.code ?? outcome.status}`).join("; ")}`);
36103
+ };
35777
36104
  begin_fn3 = function(request, outcome, births) {
35778
36105
  if (births.length === 0) return { case: "complete", value: outcome };
35779
36106
  for (const birth of births) {
@@ -35781,8 +36108,7 @@
35781
36108
  throw new Error("kernel admitted a birth without complete child Git custody");
35782
36109
  }
35783
36110
  }
35784
- const workId2 = `birth-custody-${births.map((birth) => `${birth.child.workspace}@${birth.child.head}`).sort().join("+")}`;
35785
- if (__privateGet(this, _work3).has(workId2)) return __privateGet(this, _work3).current(workId2);
36111
+ const workId2 = `birth-custody-${++__privateWrapper(this, _sequence13)._}-${births.map((birth) => `${birth.child.workspace}@${birth.child.head}`).sort().join("+")}`;
35786
36112
  __privateGet(this, _origins4).set(workId2, request);
35787
36113
  if (outcome.case === "custodyOffersAdmitted") {
35788
36114
  __privateGet(this, _bornByCustodyAdmission).set(workId2, births.map((birth) => ({
@@ -36195,14 +36521,14 @@
36195
36521
  init_define_NOMOS_KERNEL_RELEASE();
36196
36522
  init_shims();
36197
36523
  var MAX_SUPERSEDED_PAPERS = 8;
36198
- var _kernel27, _plan3, _gated, _sequence13, _AdmissionDurabilityDesk_instances, paper_fn2;
36524
+ var _kernel27, _plan3, _gated, _sequence14, _AdmissionDurabilityDesk_instances, paper_fn2;
36199
36525
  var AdmissionDurabilityDesk = class {
36200
36526
  constructor(kernel, plan) {
36201
36527
  __privateAdd(this, _AdmissionDurabilityDesk_instances);
36202
36528
  __privateAdd(this, _kernel27);
36203
36529
  __privateAdd(this, _plan3);
36204
36530
  __privateAdd(this, _gated, /* @__PURE__ */ new Map());
36205
- __privateAdd(this, _sequence13, 0);
36531
+ __privateAdd(this, _sequence14, 0);
36206
36532
  __privateSet(this, _kernel27, kernel);
36207
36533
  __privateSet(this, _plan3, plan);
36208
36534
  }
@@ -36224,7 +36550,7 @@
36224
36550
  if (!head || !/^[0-9a-f]{40}$/i.test(head)) {
36225
36551
  return { case: "notDurable", detail: `admitted workspace '${workspace}' has no custody frontier to retain` };
36226
36552
  }
36227
- const workId2 = `admission-durability-${++__privateWrapper(this, _sequence13)._}`;
36553
+ const workId2 = `admission-durability-${++__privateWrapper(this, _sequence14)._}`;
36228
36554
  const gated = { workspace, outcome: result.outcome, head, refs: __privateGet(this, _plan3).refs(workspace), effectId: "", papers: 0 };
36229
36555
  __privateGet(this, _gated).set(workId2, gated);
36230
36556
  return { case: "pending", value: __privateMethod(this, _AdmissionDurabilityDesk_instances, paper_fn2).call(this, workId2, gated) };
@@ -36259,7 +36585,7 @@
36259
36585
  _kernel27 = new WeakMap();
36260
36586
  _plan3 = new WeakMap();
36261
36587
  _gated = new WeakMap();
36262
- _sequence13 = new WeakMap();
36588
+ _sequence14 = new WeakMap();
36263
36589
  _AdmissionDurabilityDesk_instances = new WeakSet();
36264
36590
  paper_fn2 = function(workId2, gated) {
36265
36591
  gated.papers += 1;
@@ -36715,12 +37041,13 @@
36715
37041
  function terminal(response) {
36716
37042
  return response.outcome.case !== "correspondencePending" && response.outcome.case !== "localReadPending";
36717
37043
  }
36718
- var _now3, _papers, _urgentUntil, _rungUntil, _rungBehind, _opening2, _BackgroundPaperSlots_instances, waitsOn_fn;
37044
+ var _now3, _waitingForAccess, _papers, _urgentUntil, _rungUntil, _rungBehind, _opening2, _BackgroundPaperSlots_instances, waitsOn_fn;
36719
37045
  var BackgroundPaperSlots = class {
36720
37046
  /** `monotonicNanoseconds` of the office's observation clock. */
36721
- constructor(monotonicNanoseconds) {
37047
+ constructor(monotonicNanoseconds, waitingForAccess = () => false) {
36722
37048
  __privateAdd(this, _BackgroundPaperSlots_instances);
36723
37049
  __privateAdd(this, _now3);
37050
+ __privateAdd(this, _waitingForAccess);
36724
37051
  __privateAdd(this, _papers, /* @__PURE__ */ new Map());
36725
37052
  __privateAdd(this, _urgentUntil, /* @__PURE__ */ new Map());
36726
37053
  __privateAdd(this, _rungUntil, /* @__PURE__ */ new Map());
@@ -36729,6 +37056,7 @@
36729
37056
  /** Application opens still waiting on correspondence, by request id. */
36730
37057
  __privateAdd(this, _opening2, /* @__PURE__ */ new Map());
36731
37058
  __privateSet(this, _now3, monotonicNanoseconds);
37059
+ __privateSet(this, _waitingForAccess, waitingForAccess);
36732
37060
  }
36733
37061
  /** Workspaces with a paper in flight; expired leases are dropped first. */
36734
37062
  inFlight() {
@@ -36739,6 +37067,7 @@
36739
37067
  return new Set([...__privateGet(this, _papers).values()].map((paper) => paper.workspace));
36740
37068
  }
36741
37069
  urgent(workspace) {
37070
+ if (__privateGet(this, _waitingForAccess).call(this, workspace)) return true;
36742
37071
  const until = __privateGet(this, _urgentUntil).get(workspace);
36743
37072
  if (until === void 0) return false;
36744
37073
  if (until > __privateGet(this, _now3).call(this)) return true;
@@ -36751,6 +37080,12 @@
36751
37080
  __privateGet(this, _rungUntil).set(workspace, __privateGet(this, _now3).call(this) + BigInt(URGENT_WAIT_MILLIS) * MILLIS);
36752
37081
  if ([...__privateGet(this, _papers).values()].some((paper) => paper.workspace === workspace)) __privateGet(this, _rungBehind).add(workspace);
36753
37082
  }
37083
+ /** Speculative follows cannot turn their initial announcements into interaction priority. */
37084
+ remoteAdvanced(workspace, interacting) {
37085
+ if (!interacting && !this.urgent(workspace)) return false;
37086
+ this.rang(workspace);
37087
+ return true;
37088
+ }
36754
37089
  rung(workspace) {
36755
37090
  const until = __privateGet(this, _rungUntil).get(workspace);
36756
37091
  if (until === void 0) return false;
@@ -36785,9 +37120,6 @@
36785
37120
  if (!__privateGet(this, _rungBehind).delete(paper.workspace)) __privateGet(this, _rungUntil).delete(paper.workspace);
36786
37121
  return;
36787
37122
  }
36788
- if (response.outcome.case === "workspaceFetch" && response.outcome.value.following) {
36789
- __privateMethod(this, _BackgroundPaperSlots_instances, waitsOn_fn).call(this, response.outcome.value.workspace);
36790
- }
36791
37123
  if (response.outcome.case === "unavailable") {
36792
37124
  const { reason, workspace } = response.outcome.value;
36793
37125
  if (reason === RuntimeUnavailableReason.LOCAL_REPLICA_NOT_READY || reason === RuntimeUnavailableReason.WORKSPACE_OPENING || reason === RuntimeUnavailableReason.FIRST_DOWNLOAD) {
@@ -36814,6 +37146,7 @@
36814
37146
  }
36815
37147
  };
36816
37148
  _now3 = new WeakMap();
37149
+ _waitingForAccess = new WeakMap();
36817
37150
  _papers = new WeakMap();
36818
37151
  _urgentUntil = new WeakMap();
36819
37152
  _rungUntil = new WeakMap();
@@ -37007,13 +37340,13 @@
37007
37340
  if (outcome.case !== "blockedOnDependency") return void 0;
37008
37341
  return outcome.value.awaitsMaintenance;
37009
37342
  }
37010
- var _ports6, _held5, _sequence14, _OfferReadinessDesk_instances, advance_fn6, repay_fn, preparing_fn, unreadable_fn;
37343
+ var _ports6, _held5, _sequence15, _OfferReadinessDesk_instances, advance_fn6, repay_fn, preparing_fn, unreadable_fn;
37011
37344
  var OfferReadinessDesk = class {
37012
37345
  constructor(ports) {
37013
37346
  __privateAdd(this, _OfferReadinessDesk_instances);
37014
37347
  __privateAdd(this, _ports6);
37015
37348
  __privateAdd(this, _held5, /* @__PURE__ */ new Map());
37016
- __privateAdd(this, _sequence14, 0);
37349
+ __privateAdd(this, _sequence15, 0);
37017
37350
  __privateSet(this, _ports6, ports);
37018
37351
  }
37019
37352
  /** Hold a local session offer the kernel blocked on maintenance it named; otherwise nothing. */
@@ -37024,7 +37357,7 @@
37024
37357
  const unreadable = __privateMethod(this, _OfferReadinessDesk_instances, unreadable_fn).call(this, debt.workspace);
37025
37358
  if (unreadable !== void 0) return { case: "unreadable", request, workspace: debt.workspace, detail: unreadable };
37026
37359
  const command = request.command.value;
37027
- const workId2 = `offer-readiness-${++__privateWrapper(this, _sequence14)._}`;
37360
+ const workId2 = `offer-readiness-${++__privateWrapper(this, _sequence15)._}`;
37028
37361
  const held = { requestId: request.requestId };
37029
37362
  held.procedure = __privateMethod(this, _OfferReadinessDesk_instances, repay_fn).call(this, request, command, debt, workId2);
37030
37363
  __privateGet(this, _held5).set(workId2, held);
@@ -37046,7 +37379,7 @@
37046
37379
  };
37047
37380
  _ports6 = new WeakMap();
37048
37381
  _held5 = new WeakMap();
37049
- _sequence14 = new WeakMap();
37382
+ _sequence15 = new WeakMap();
37050
37383
  _OfferReadinessDesk_instances = new WeakSet();
37051
37384
  advance_fn6 = function(workId2, held, receipt) {
37052
37385
  const procedure = held.procedure;
@@ -37400,7 +37733,10 @@
37400
37733
  }
37401
37734
  } }
37402
37735
  ));
37403
- __privateSet(this, _paperSlots, new BackgroundPaperSlots(() => observations.monotonicNanoseconds()));
37736
+ __privateSet(this, _paperSlots, new BackgroundPaperSlots(
37737
+ () => observations.monotonicNanoseconds(),
37738
+ (workspace) => __privateGet(this, _receivingGroup2)?.waitingForAccess(workspace) ?? false
37739
+ ));
37404
37740
  kernel.bindObservationClock(observations);
37405
37741
  bindTimelineClock(observations);
37406
37742
  __privateSet(this, _clock23, observations);
@@ -37438,6 +37774,10 @@
37438
37774
  __privateGet(this, _lawTrees3)
37439
37775
  ));
37440
37776
  __privateGet(this, _live3).inbound.urgent = (workspace) => __privateGet(this, _paperSlots).urgent(workspace) || __privateGet(this, _paperSlots).rung(workspace);
37777
+ if (profile.classes.some((peerClass) => INTERACTIVE_PEER_CLASSES.has(peerClass))) {
37778
+ __privateGet(this, _live3).openingLanes = 2;
37779
+ __privateGet(this, _live3).urgentOpeningLanes = 2;
37780
+ }
37441
37781
  __privateSet(this, _liveStream, new LiveStreamServer(__privateGet(this, _kernel28), Date.now, (workspace) => {
37442
37782
  try {
37443
37783
  __privateGet(this, _historyAcquisition).requestFromBackground(workspace, __privateMethod(this, _PeerOffice_instances, historyCredentialCapability_fn).call(this, workspace));
@@ -37520,9 +37860,9 @@
37520
37860
  __privateSet(this, _admissionDurability, new AdmissionDurabilityDesk(__privateGet(this, _kernel28), retention));
37521
37861
  }
37522
37862
  __privateSet(this, _birthCustody, new BirthCustodyDesk(__privateGet(this, _kernel28), (request, workspace) => {
37863
+ __privateGet(this, _replicaInventory).placementMayHaveChanged(workspace);
37523
37864
  if (!__privateGet(this, _custodianPlacement)) return [];
37524
37865
  __privateGet(this, _custodianPlacement).ensure(workspace, request.requestId);
37525
- __privateGet(this, _replicaInventory).placementMayHaveChanged(workspace);
37526
37866
  return retention.refs(workspace);
37527
37867
  }));
37528
37868
  __privateSet(this, _commandPreparation, new CommandPreparationDesk(__privateGet(this, _readMaintenance)));
@@ -37545,7 +37885,10 @@
37545
37885
  const workspace = __privateGet(this, _sessions14).binding(session).workspace;
37546
37886
  __privateGet(this, _trace13).measure("peer.application.schedule-after-admission", { request, session, workspace }, {}, () => {
37547
37887
  __privateGet(this, _writeBurst)?.offered();
37548
- if (!admitted.dryRun) __privateGet(this, _paperSlots).localWrite(workspace);
37888
+ if (!admitted.dryRun) {
37889
+ __privateGet(this, _paperSlots).localWrite(workspace);
37890
+ for (const child of admitted.born) __privateGet(this, _receivingGroup2).localBirth(child.workspace, workspace, admitted.head, admitted.intentId);
37891
+ }
37549
37892
  if (!admitted.dryRun) __privateGet(this, _readMaintenance).localOfferAdmitted(session);
37550
37893
  __privateGet(this, _correspondence3).workspaceFrontierChanged(workspace);
37551
37894
  });
@@ -37693,6 +38036,7 @@
37693
38036
  backgroundHistory: profile.backgroundHistory !== false,
37694
38037
  onSyncCompleted: (session, event) => {
37695
38038
  if (event.result?.workspace) {
38039
+ __privateGet(this, _receivingGroup2).providerIntentsAdmitted(event.result.workspace, [...event.result.admittedIntentIds, ...event.result.convergedIntentIds]);
37696
38040
  __privateGet(this, _replicaInventory).placementMayHaveChanged(event.result.workspace);
37697
38041
  }
37698
38042
  if (__privateGet(this, _sessions14).bindingIfPresent(session)) {
@@ -37715,13 +38059,17 @@
37715
38059
  return false;
37716
38060
  };
37717
38061
  __privateGet(this, _live3).remoteAdvanced = (workspace) => {
37718
- __privateGet(this, _paperSlots).rang(workspace);
37719
- __privateGet(this, _rungThisReceipt)?.add(workspace);
38062
+ if (__privateGet(this, _paperSlots).remoteAdvanced(workspace, __privateGet(this, _sessions14).hasWorkspaceSession(workspace))) {
38063
+ __privateGet(this, _rungThisReceipt)?.add(workspace);
38064
+ }
37720
38065
  __privateGet(this, _correspondence3).replicaRemoteAdvanced(workspace);
37721
38066
  };
37722
38067
  __privateGet(this, _live3).declined = (workspace) => __privateGet(this, _correspondence3).liveAdmissionDeclined(workspace);
37723
38068
  __privateGet(this, _live3).acknowledged = (workspace, ack) => __privateGet(this, _correspondence3).liveAdmissionAcknowledged(workspace, ack);
37724
- __privateGet(this, _live3).intentsAdmitted = (workspace, intentIds, local) => __privateGet(this, _correspondence3).liveIntentsAdmitted(workspace, intentIds, local);
38069
+ __privateGet(this, _live3).intentsAdmitted = (workspace, intentIds, local) => {
38070
+ __privateGet(this, _receivingGroup2).providerIntentsAdmitted(workspace, intentIds);
38071
+ __privateGet(this, _correspondence3).liveIntentsAdmitted(workspace, intentIds, local);
38072
+ };
37725
38073
  __privateGet(this, _live3).placementAdvanced = (workspace) => __privateGet(this, _correspondence3).replicaPlacementAnnounced(workspace);
37726
38074
  __privateGet(this, _live3).progressChanged = () => __privateGet(this, _correspondence3).reportFollows();
37727
38075
  __privateGet(this, _correspondence3).streamProgress = (workspace) => __privateGet(this, _live3).progress(workspace);
@@ -37824,7 +38172,7 @@
37824
38172
  }
37825
38173
  },
37826
38174
  (request) => {
37827
- if (request.command.case === "admitCustodyOffers") {
38175
+ if (request.command.case === "admitCustodyOffers" || request.command.case === "serveLiveStream") {
37828
38176
  const workspace = request.target?.workspace;
37829
38177
  if (!workspace) return void 0;
37830
38178
  return __privateGet(this, _kernel28).head(
@@ -37885,6 +38233,11 @@
37885
38233
  providerBase: (request, workspace) => __privateGet(this, _placement5).providerBase(request, __privateGet(this, _sessions14).mountForWorkspace(workspace)),
37886
38234
  sessionsBoundTo: (workspace) => __privateGet(this, _sessions14).applicationSessions().filter((binding) => binding.workspace === workspace).map((binding) => binding.session),
37887
38235
  localHead: (session, requestId) => __privateGet(this, _kernel28).head(__privateGet(this, _sessions14).mountForSession(session), requestId),
38236
+ providerBirthObserved: (parent, birthHead, requestId) => {
38237
+ const mount = workspaceMount(parent);
38238
+ const tracked = __privateGet(this, _kernel28).resolveRef(mount, requestId, "refs/remotes/nomos/main");
38239
+ return !!tracked && (tracked === birthHead || __privateGet(this, _kernel28).historySummary(mount, requestId, birthHead, tracked).reachedBase);
38240
+ },
37888
38241
  localCopyUnreadable: (session, requestId) => __privateMethod(this, _PeerOffice_instances, localCopyUnreadable_fn).call(this, session, requestId),
37889
38242
  localCopyRepairing: (workspace) => __privateGet(this, _correspondence3).localCopyRepairing(workspace),
37890
38243
  refetchUnreadableLocalCopy: (workspace, head) => __privateGet(this, _correspondence3).refetchUnreadableLocalCopy(workspace, head),
@@ -37921,7 +38274,12 @@
37921
38274
  __privateGet(this, _enrolledCapabilities).add(__privateGet(this, _sessions14).credentialCapabilityFor(session));
37922
38275
  },
37923
38276
  // The answer names the head that carries this key's enrollDevice: fetch it now, as a doorbell would.
37924
- consoleEnrolled: (workspace) => __privateGet(this, _correspondence3).replicaLinkOpened(workspace)
38277
+ consoleEnrolled: (workspace) => {
38278
+ __privateGet(this, _replicaInventory).placementMayHaveChanged(workspace);
38279
+ __privateGet(this, _placementDiscovery2).providerReached(workspace);
38280
+ __privateGet(this, _paperSlots).rang(workspace);
38281
+ __privateGet(this, _correspondence3).replicaRemoteAdvanced(workspace);
38282
+ }
37925
38283
  }));
37926
38284
  __privateSet(this, _offerReadiness, new OfferReadinessDesk({
37927
38285
  call: (request, command) => __privateGet(this, _application3).call(request, command),
@@ -38046,8 +38404,8 @@
38046
38404
  * Platform shells may wake this method and execute the returned exact frame;
38047
38405
  * they do not inspect the outbox or own retry state.
38048
38406
  */
38049
- nextBackgroundPaper(requestId, retentionOnly = false, excludedWorkspaces = /* @__PURE__ */ new Set()) {
38050
- return __privateMethod(this, _PeerOffice_instances, backgroundTurn_fn).call(this, () => __privateMethod(this, _PeerOffice_instances, timedBackgroundPaper_fn).call(this, requestId, retentionOnly, excludedWorkspaces));
38407
+ nextBackgroundPaper(requestId, retentionOnly = false, excludedWorkspaces = /* @__PURE__ */ new Set(), urgentOnly = false) {
38408
+ return __privateMethod(this, _PeerOffice_instances, backgroundTurn_fn).call(this, () => __privateMethod(this, _PeerOffice_instances, timedBackgroundPaper_fn).call(this, requestId, retentionOnly, excludedWorkspaces, urgentOnly));
38051
38409
  }
38052
38410
  /** The shell could not drive this background paper physically; its slot is free again. */
38053
38411
  backgroundPaperAbandoned(requestId) {
@@ -38173,6 +38531,7 @@
38173
38531
  return;
38174
38532
  }
38175
38533
  __privateGet(this, _live3).close();
38534
+ __privateGet(this, _streamWaits).clear();
38176
38535
  __privateGet(this, _subscriptions4).clear();
38177
38536
  __privateGet(this, _interaction).clear();
38178
38537
  __privateGet(this, _readMaintenance).clear();
@@ -38331,18 +38690,18 @@
38331
38690
  endTimelineTurn(turn, `wake=${wake ?? "idle"}`);
38332
38691
  }
38333
38692
  };
38334
- timedBackgroundPaper_fn = function(requestId, retentionOnly, excludedWorkspaces) {
38693
+ timedBackgroundPaper_fn = function(requestId, retentionOnly, excludedWorkspaces, urgentOnly) {
38335
38694
  const turn = beginTimelineTurn("paper", void 0, () => retentionOnly ? "retention" : "paper");
38336
- if (turn === void 0) return __privateMethod(this, _PeerOffice_instances, nextBackgroundPaper_fn).call(this, requestId, retentionOnly, excludedWorkspaces);
38695
+ if (turn === void 0) return __privateMethod(this, _PeerOffice_instances, nextBackgroundPaper_fn).call(this, requestId, retentionOnly, excludedWorkspaces, urgentOnly);
38337
38696
  let paper;
38338
38697
  try {
38339
- paper = __privateMethod(this, _PeerOffice_instances, nextBackgroundPaper_fn).call(this, requestId, retentionOnly, excludedWorkspaces);
38698
+ paper = __privateMethod(this, _PeerOffice_instances, nextBackgroundPaper_fn).call(this, requestId, retentionOnly, excludedWorkspaces, urgentOnly);
38340
38699
  return paper;
38341
38700
  } finally {
38342
38701
  endTimelineTurn(turn, paper?.frame === void 0 ? `paper=none next=${paper?.nextAfterMillis ?? "idle"}` : `paper=${requestId} bytes=${paper.frame.byteLength}`);
38343
38702
  }
38344
38703
  };
38345
- nextBackgroundPaper_fn = function(requestId, retentionOnly, excludedWorkspaces) {
38704
+ nextBackgroundPaper_fn = function(requestId, retentionOnly, excludedWorkspaces, urgentOnly) {
38346
38705
  if (retentionOnly) return __privateGet(this, _background3).next(requestId, true, excludedWorkspaces);
38347
38706
  const inFlight = __privateGet(this, _paperSlots).inFlight();
38348
38707
  const id = typeof requestId === "bigint" ? requestId : BigInt(requestId);
@@ -38351,14 +38710,14 @@
38351
38710
  let paper;
38352
38711
  if (rung?.frame !== void 0) {
38353
38712
  paper = rung;
38354
- } else if (inFlight.size === 0) {
38713
+ } else if (inFlight.size === 0 && !urgentOnly) {
38355
38714
  paper = __privateGet(this, _background3).next(requestId, false, excludedWorkspaces);
38356
38715
  } else {
38357
38716
  const retention = __privateGet(this, _background3).next(requestId, true, excludedWorkspaces);
38358
38717
  if (retention.frame !== void 0) return retention;
38359
38718
  const free = (workspace) => !inFlight.has(workspace) && !converging.has(workspace) && !excludedWorkspaces.has(workspace);
38360
38719
  paper = __privateGet(this, _background3).nextBeside(requestId, { has: (workspace) => __privateGet(this, _paperSlots).urgent(workspace) && free(workspace) });
38361
- if (paper.frame === void 0) {
38720
+ if (paper.frame === void 0 && !urgentOnly) {
38362
38721
  const ordinary = __privateGet(this, _background3).nextBeside(requestId, { has: free });
38363
38722
  const delays = [paper.nextAfterMillis, ordinary.nextAfterMillis, retention.nextAfterMillis].filter((delay) => delay !== void 0);
38364
38723
  paper = ordinary.frame !== void 0 ? ordinary : { ...delays.length ? { nextAfterMillis: Math.min(...delays) } : {}, ...ordinary.maintenanceDue || paper.maintenanceDue ? { maintenanceDue: true } : {} };
@@ -38996,6 +39355,7 @@
38996
39355
  return __privateMethod(this, _PeerOffice_instances, failure_fn).call(this, request, "nomos.runtime.custody_retention_pending", "custody retention pending; retain the acknowledged frontiers before closing the realm");
38997
39356
  }
38998
39357
  __privateGet(this, _live3).close();
39358
+ __privateGet(this, _streamWaits).clear();
38999
39359
  if (!__privateGet(this, _lifecycle).close()) {
39000
39360
  __privateGet(this, _custody4).close(request);
39001
39361
  return __privateMethod(this, _PeerOffice_instances, response_fn).call(this, request, {
@@ -39336,7 +39696,9 @@
39336
39696
  value: __privateGet(this, _readResponses).begin(step.request, step.response.outcome.value.result.value)
39337
39697
  });
39338
39698
  }
39339
- return __privateMethod(this, _PeerOffice_instances, birthCustodyResponse_fn).call(this, step.request, __privateGet(this, _birthCustody).afterKernelCall(step.request, step.response));
39699
+ const result = __privateMethod(this, _PeerOffice_instances, birthCustodyResponse_fn).call(this, step.request, __privateGet(this, _birthCustody).afterKernelCall(step.request, step.response));
39700
+ __privateGet(this, _retentionObserver).observe(step.request, result);
39701
+ return result;
39340
39702
  }
39341
39703
  if (step.case === "pending") return __privateMethod(this, _PeerOffice_instances, response_fn).call(this, request, { case: "correspondencePending", value: step.value });
39342
39704
  if (step.case === "failure") return __privateMethod(this, _PeerOffice_instances, failure_fn).call(this, request, step.code, step.message);
@@ -39497,6 +39859,7 @@
39497
39859
  let timer;
39498
39860
  let wakeAt;
39499
39861
  const correspondenceLanes = Math.max(1, options.correspondenceLanes === Infinity ? Infinity : Math.floor(options.correspondenceLanes ?? 1));
39862
+ const urgentLanes = Math.max(0, Math.floor(options.urgentLanes ?? 0));
39500
39863
  const staggerMillis = Math.max(0, options.staggerMillis ?? 0);
39501
39864
  const inFlight = /* @__PURE__ */ new Set();
39502
39865
  const correspondenceNotBefore = /* @__PURE__ */ new Map();
@@ -39530,8 +39893,9 @@
39530
39893
  if (at2 <= now2) correspondenceNotBefore.delete(workspace2);
39531
39894
  }
39532
39895
  const backoffMillis = correspondenceNotBefore.size ? Math.min(...[...correspondenceNotBefore.values()].map((at2) => Number((at2 - now2 + 999999n) / 1000000n))) : void 0;
39533
- const retentionOnly = inFlight.size >= correspondenceLanes;
39534
- const next = options.nextPaper(retentionOnly, /* @__PURE__ */ new Set([...correspondenceNotBefore.keys(), ...inFlight]));
39896
+ const retentionOnly = inFlight.size >= correspondenceLanes + urgentLanes;
39897
+ const urgentOnly = !retentionOnly && inFlight.size >= correspondenceLanes;
39898
+ const next = options.nextPaper(retentionOnly, /* @__PURE__ */ new Set([...correspondenceNotBefore.keys(), ...inFlight]), urgentOnly);
39535
39899
  selectionFailures = 0;
39536
39900
  if (next.frame === void 0) {
39537
39901
  const delays = [next.nextAfterMillis, backoffMillis].filter((delay2) => delay2 !== void 0);
@@ -39638,8 +40002,8 @@
39638
40002
  maintenanceTimer.unref?.();
39639
40003
  };
39640
40004
  const lanes = driveBackground === void 0 ? void 0 : createBackgroundLanes({
39641
- nextPaper: (retentionOnly, excludedWorkspaces) => {
39642
- const paper = peer2.nextBackgroundPaper(++backgroundRequestId, retentionOnly, excludedWorkspaces);
40005
+ nextPaper: (retentionOnly, excludedWorkspaces, urgentOnly) => {
40006
+ const paper = peer2.nextBackgroundPaper(++backgroundRequestId, retentionOnly, excludedWorkspaces, urgentOnly);
39643
40007
  if (paper.maintenanceDue) scheduleMaintenance();
39644
40008
  return paper;
39645
40009
  },
@@ -39650,6 +40014,7 @@
39650
40014
  isRetention: (frame2) => fromBinary(RuntimeRequestSchema, frame2).command.case === "retainFrontier",
39651
40015
  monotonicNanoseconds: () => observations.monotonicNanoseconds(),
39652
40016
  correspondenceLanes,
40017
+ urgentLanes: correspondenceLanes > 1 && Number.isFinite(correspondenceLanes) ? 2 : 0,
39653
40018
  staggerMillis: BACKGROUND_PAPER_STAGGER_MILLIS,
39654
40019
  onSelectionError: (error) => console.error("Nomos background paper selection failed", error)
39655
40020
  });
@@ -39882,7 +40247,7 @@
39882
40247
  message: `refused: a peer shell performs no ${what}; custody comes from the workspace's stream`
39883
40248
  }) }
39884
40249
  });
39885
- async function drivePeerFrame(runner, initialFrame, fetchImpl = globalThis.fetch, custody, bornCustody, credentialRefresh, yieldWakeToCaller = false, deviceIdentity, lawPackage, yieldLocalReadToCaller = false, yieldHistoryToCaller = false, performExternalEffect, turn = inlineTurn) {
40250
+ async function drivePeerFrame(runner, initialFrame, fetchImpl = globalThis.fetch, custody, bornCustody, credentialRefresh, yieldWakeToCaller = false, deviceIdentity, lawPackage, yieldLocalReadToCaller = false, yieldHistoryToCaller = false, performExternalEffect, turn = inlineTurn, wait = (work) => work()) {
39886
40251
  const persistBornCustody = bornCustody ?? (custody?.persistBornCustody ? (effect) => custody.persistBornCustody(effect) : void 0);
39887
40252
  let responseFrame = await turn(() => runner.handleFrame(initialFrame));
39888
40253
  const satisfied = /* @__PURE__ */ new Set();
@@ -40024,7 +40389,8 @@
40024
40389
  const external = pending.effect.case === "refreshCredential" && credentialRefresh === externalPeerEffect || pending.effect.case === "deviceIdentity" && deviceIdentity === externalPeerEffect || pending.effect.case === "lawPackage" && lawPackage === externalPeerEffect || pending.effect.case === "consoleEnrolment";
40025
40390
  if (external && !performExternalEffect) return responseFrame;
40026
40391
  const effectStarted = Date.now();
40027
- const receipt = external ? await performExternalEffect(pending) : pending.effect.case === "http" ? await executeHttpEffect(pending.effect.value, fetchImpl) : pending.effect.case === "gitFetch" ? refusedTransport(pending.effect.value.effectId, "Git fetch") : pending.effect.case === "gitPush" ? refusedTransport(pending.effect.value.effectId, "Git push") : pending.effect.case === "stream" ? refusedTransport(pending.effect.value.effectId, "stream request") : pending.effect.case === "persistBornCustody" ? create(PeerEffectReceiptSchema, {
40392
+ const wakeEffect = pending.effect.case === "wake" ? pending.effect.value : void 0;
40393
+ const receipt = external ? await (pending.effect.case === "consoleEnrolment" ? wait(() => performExternalEffect(pending)) : performExternalEffect(pending)) : pending.effect.case === "http" ? await executeHttpEffect(pending.effect.value, fetchImpl) : pending.effect.case === "gitFetch" ? refusedTransport(pending.effect.value.effectId, "Git fetch") : pending.effect.case === "gitPush" ? refusedTransport(pending.effect.value.effectId, "Git push") : pending.effect.case === "stream" ? refusedTransport(pending.effect.value.effectId, "stream request") : pending.effect.case === "persistBornCustody" ? create(PeerEffectReceiptSchema, {
40028
40394
  effectId: pending.effect.value.effectId,
40029
40395
  outcome: {
40030
40396
  case: "bornCustodyPersisted",
@@ -40033,7 +40399,7 @@
40033
40399
  await persistBornCustody(pending.effect.value)
40034
40400
  )
40035
40401
  }
40036
- }) : pending.effect.case === "retainFrontier" ? await executeRetainFrontierEffect(pending.effect.value, custody) : pending.effect.case === "wake" ? await executeWakeEffect(pending.effect.value) : pending.effect.case === "refreshCredential" ? await executeCredentialRefreshEffect(pending.effect.value, credentialRefresh) : pending.effect.case === "deviceIdentity" ? await executeDeviceIdentityEffect(pending.effect.value, deviceIdentity) : pending.effect.case === "lawPackage" ? await executeLawPackageEffect(pending.effect.value, lawPackage) : pending.effect.case === "historyAcquisition" ? await executeHistoryAcquisitionEffect(pending.effect.value, custody) : (() => {
40402
+ }) : pending.effect.case === "retainFrontier" ? await executeRetainFrontierEffect(pending.effect.value, custody) : pending.effect.case === "wake" ? await wait(() => executeWakeEffect(wakeEffect)) : pending.effect.case === "refreshCredential" ? await executeCredentialRefreshEffect(pending.effect.value, credentialRefresh) : pending.effect.case === "deviceIdentity" ? await executeDeviceIdentityEffect(pending.effect.value, deviceIdentity) : pending.effect.case === "lawPackage" ? await executeLawPackageEffect(pending.effect.value, lawPackage) : pending.effect.case === "historyAcquisition" ? await executeHistoryAcquisitionEffect(pending.effect.value, custody) : (() => {
40037
40403
  throw new Error(`correspondence work '${pending.workId}' has no effect`);
40038
40404
  })();
40039
40405
  reportSlowEffect(pending, receipt, Date.now() - effectStarted, external);
@@ -40354,8 +40720,19 @@
40354
40720
  },
40355
40721
  async foreground(work) {
40356
40722
  inFlight += 1;
40723
+ let waits = 0;
40357
40724
  try {
40358
- return await work();
40725
+ return await work(async (wait) => {
40726
+ if (waits++ === 0) {
40727
+ inFlight -= 1;
40728
+ if (inFlight === 0) release();
40729
+ }
40730
+ try {
40731
+ return await wait();
40732
+ } finally {
40733
+ if (--waits === 0) inFlight += 1;
40734
+ }
40735
+ });
40359
40736
  } finally {
40360
40737
  inFlight -= 1;
40361
40738
  if (inFlight === 0) release();
@@ -40442,10 +40819,9 @@
40442
40819
  },
40443
40820
  shell.peerDeskStore(),
40444
40821
  void 0,
40445
- // An application peer (a tab, a local development peer) syncs every workspace at once, started a
40446
- // stagger apart, so one slow or failing workspace never holds the rest behind it. The office orders
40447
- // them: the workspaces the application waits on first.
40448
- Infinity
40822
+ // Bound physical correspondence, not just fetch registration. The runner
40823
+ // reserves two additional slots for interactive dependencies.
40824
+ 2
40449
40825
  );
40450
40826
  const providerOrigins = [...configuredOrigins];
40451
40827
  if (providerOrigins.length > 0) {
@@ -40470,7 +40846,7 @@
40470
40846
  if (request.command.case === "closeRealm") {
40471
40847
  await runner.settleRetention(4e3);
40472
40848
  }
40473
- return gate.foreground(async () => {
40849
+ return gate.foreground(async (wait) => {
40474
40850
  const target3 = request.target;
40475
40851
  if (args.workspace !== void 0) {
40476
40852
  if (!target3?.workspace || !target3.session || target3.workspace !== args.workspace) {
@@ -40498,7 +40874,9 @@
40498
40874
  lawPackage,
40499
40875
  false,
40500
40876
  false,
40501
- performExternalEffect
40877
+ performExternalEffect,
40878
+ void 0,
40879
+ wait
40502
40880
  );
40503
40881
  });
40504
40882
  },
@@ -42533,13 +42911,13 @@
42533
42911
  }
42534
42912
  }
42535
42913
  }
42536
- let namespace2 = void 0;
42914
+ let namespace3 = void 0;
42537
42915
  let tagAndPosition = withoutBrackets;
42538
42916
  if (withoutBrackets.includes("::")) {
42539
42917
  const nsIndex = withoutBrackets.indexOf("::");
42540
- namespace2 = withoutBrackets.substring(0, nsIndex).trim();
42918
+ namespace3 = withoutBrackets.substring(0, nsIndex).trim();
42541
42919
  tagAndPosition = withoutBrackets.substring(nsIndex + 2).trim();
42542
- if (!namespace2) {
42920
+ if (!namespace3) {
42543
42921
  throw new Error(`Invalid namespace in pattern: ${part}`);
42544
42922
  }
42545
42923
  }
@@ -42563,8 +42941,8 @@
42563
42941
  throw new Error(`Invalid segment pattern: ${part}`);
42564
42942
  }
42565
42943
  segment.tag = tag;
42566
- if (namespace2) {
42567
- segment.namespace = namespace2;
42944
+ if (namespace3) {
42945
+ segment.namespace = namespace3;
42568
42946
  }
42569
42947
  if (bracketContent) {
42570
42948
  if (bracketContent.includes("=")) {
@@ -42956,7 +43334,7 @@
42956
43334
  * @param {Object|null} [options=null]
42957
43335
  * @param {string[]} [options.keep] - Names of attributes (from attrValues)
42958
43336
  */
42959
- push(tagName, attrValues = null, namespace2 = null, options = null) {
43337
+ push(tagName, attrValues = null, namespace3 = null, options = null) {
42960
43338
  this._pathStringCache = null;
42961
43339
  if (this.path.length > 0) {
42962
43340
  this.path[this.path.length - 1].values = void 0;
@@ -42967,7 +43345,7 @@
42967
43345
  level = { counts: /* @__PURE__ */ new Map(), total: 0 };
42968
43346
  this.siblingStacks[currentLevel] = level;
42969
43347
  }
42970
- const siblingKey = namespace2 ? `${namespace2}:${tagName}` : tagName;
43348
+ const siblingKey = namespace3 ? `${namespace3}:${tagName}` : tagName;
42971
43349
  const counter = level.counts.get(siblingKey) || 0;
42972
43350
  const position = level.total;
42973
43351
  level.counts.set(siblingKey, counter + 1);
@@ -42977,8 +43355,8 @@
42977
43355
  position,
42978
43356
  counter
42979
43357
  };
42980
- if (namespace2 !== null && namespace2 !== void 0) {
42981
- node.namespace = namespace2;
43358
+ if (namespace3 !== null && namespace3 !== void 0) {
43359
+ node.namespace = namespace3;
42982
43360
  }
42983
43361
  if (attrValues !== null && attrValues !== void 0) {
42984
43362
  node.values = attrValues;
@@ -44371,10 +44749,10 @@
44371
44749
  }
44372
44750
  let prefixedAttrs = null;
44373
44751
  let rawAttrs = {};
44374
- let namespace2 = void 0;
44375
- namespace2 = extractNamespace(rawTagName);
44752
+ let namespace3 = void 0;
44753
+ namespace3 = extractNamespace(rawTagName);
44376
44754
  if (tagName !== xmlObj.tagname) {
44377
- this.matcher.push(tagName, {}, namespace2);
44755
+ this.matcher.push(tagName, {}, namespace3);
44378
44756
  }
44379
44757
  if (tagName !== tagExp && attrExpPresent) {
44380
44758
  prefixedAttrs = this.buildAttributesMap(tagExp, this.matcher, tagName);
@@ -45605,17 +45983,17 @@
45605
45983
  }
45606
45984
  return result;
45607
45985
  }
45608
- function capabilityByNamespace(capabilities, namespace2) {
45609
- const matches = capabilities.filter((capability) => capability.namespace === namespace2);
45986
+ function capabilityByNamespace(capabilities, namespace3) {
45987
+ const matches = capabilities.filter((capability) => capability.namespace === namespace3);
45610
45988
  if (matches.length !== 1) {
45611
- throw new Error(`OSGi resource needs exactly one ${namespace2} capability`);
45989
+ throw new Error(`OSGi resource needs exactly one ${namespace3} capability`);
45612
45990
  }
45613
45991
  return matches[0];
45614
45992
  }
45615
- function optionalCapabilityByNamespace(capabilities, namespace2) {
45616
- const matches = capabilities.filter((capability) => capability.namespace === namespace2);
45993
+ function optionalCapabilityByNamespace(capabilities, namespace3) {
45994
+ const matches = capabilities.filter((capability) => capability.namespace === namespace3);
45617
45995
  if (matches.length > 1) {
45618
- throw new Error(`OSGi resource needs at most one ${namespace2} capability`);
45996
+ throw new Error(`OSGi resource needs at most one ${namespace3} capability`);
45619
45997
  }
45620
45998
  return matches[0];
45621
45999
  }
@@ -45929,14 +46307,19 @@
45929
46307
  progress(`compiling Kernel ${selected.resource.contentSha256}`);
45930
46308
  const wasmModule = await WebAssembly.compile(selected.wasm);
45931
46309
  progress("opening Kernel machine");
45932
- const machine = await createKernelMachine({
46310
+ const source = {
45933
46311
  wasmModule,
45934
46312
  bootstrapLawUsdz: selected.bootstrapLaw,
45935
46313
  nomosLawUsdz: selected.controllerLaw,
45936
46314
  replica: options.replica ?? storage.replica,
45937
46315
  trustRootPublicKey: options.trustRootPublicKey,
45938
46316
  ...options.onKernelStderr ? { observeStderr: options.onKernelStderr } : {}
45939
- }, storage.filesystem, storage.changed);
46317
+ };
46318
+ const machine = await createKernelMachine(source, storage.filesystem, storage.changed);
46319
+ const preparation = new BrowserLawPreparation(source, storage);
46320
+ machine.prepareLawProducts = (request) => preparation.prepare(request);
46321
+ void preparation.resume().catch(() => {
46322
+ });
45940
46323
  progress("opening Peer Office");
45941
46324
  const kernelWork = new KernelWorkAccounting(options.onKernelWorkChanged, false);
45942
46325
  const physicalKernel = observeBrowserKernelCalls(kernelExecutionDesk(machine), kernelWork);
@@ -45952,7 +46335,7 @@
45952
46335
  physical,
45953
46336
  { ...options.profile, identity: storage.identity },
45954
46337
  void 0,
45955
- { list: (namespace2) => storage.list(namespace2), compareExchange: (...args) => storage.compareExchange(...args) }
46338
+ { list: (namespace3) => storage.list(namespace3), compareExchange: (...args) => storage.compareExchange(...args) }
45956
46339
  );
45957
46340
  const office = openPeerOfficeHost(
45958
46341
  kernel,
@@ -45997,11 +46380,13 @@
45997
46380
  close: async () => {
45998
46381
  await office.settleRetention();
45999
46382
  office.close();
46383
+ preparation.close();
46000
46384
  await storage.close();
46001
46385
  machine.dispose();
46002
46386
  },
46003
46387
  release: async () => {
46004
46388
  office.close();
46389
+ preparation.close();
46005
46390
  try {
46006
46391
  await storage.close();
46007
46392
  } finally {