From 21059daeeff366bc1ce1ee3349a0da61552bf683 Mon Sep 17 00:00:00 2001 From: Ahmet Ildirim Date: Wed, 26 Mar 2025 10:55:09 +0100 Subject: [PATCH] Refactor ProviderSettingsModal to include a callback on close and clean up CSS file --- main.js | 22553 ------------------------------------- src/settings/provider.ts | 10 +- src/settings/tab.ts | 4 +- styles.css | 9 - 4 files changed, 9 insertions(+), 22567 deletions(-) delete mode 100644 main.js diff --git a/main.js b/main.js deleted file mode 100644 index 1c3564b..0000000 --- a/main.js +++ /dev/null @@ -1,22553 +0,0 @@ -/* -THIS IS A GENERATED/BUNDLED FILE BY ESBUILD -if you want to view the source, please visit the github repository of this plugin -*/ - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; -}; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// node_modules/whatwg-fetch/dist/fetch.umd.js -var require_fetch_umd = __commonJS({ - "node_modules/whatwg-fetch/dist/fetch.umd.js"(exports, module2) { - (function(global2, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : factory(global2.WHATWGFetch = {}); - })(exports, function(exports2) { - "use strict"; - var g3 = typeof globalThis !== "undefined" && globalThis || typeof self !== "undefined" && self || // eslint-disable-next-line no-undef - typeof global !== "undefined" && global || {}; - var support = { - searchParams: "URLSearchParams" in g3, - iterable: "Symbol" in g3 && "iterator" in Symbol, - blob: "FileReader" in g3 && "Blob" in g3 && function() { - try { - new Blob(); - return true; - } catch (e3) { - return false; - } - }(), - formData: "FormData" in g3, - arrayBuffer: "ArrayBuffer" in g3 - }; - function isDataView(obj) { - return obj && DataView.prototype.isPrototypeOf(obj); - } - if (support.arrayBuffer) { - var viewClasses = [ - "[object Int8Array]", - "[object Uint8Array]", - "[object Uint8ClampedArray]", - "[object Int16Array]", - "[object Uint16Array]", - "[object Int32Array]", - "[object Uint32Array]", - "[object Float32Array]", - "[object Float64Array]" - ]; - var isArrayBufferView = ArrayBuffer.isView || function(obj) { - return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1; - }; - } - function normalizeName(name) { - if (typeof name !== "string") { - name = String(name); - } - if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === "") { - throw new TypeError('Invalid character in header field name: "' + name + '"'); - } - return name.toLowerCase(); - } - function normalizeValue2(value) { - if (typeof value !== "string") { - value = String(value); - } - return value; - } - function iteratorFor(items) { - var iterator = { - next: function() { - var value = items.shift(); - return { done: value === void 0, value }; - } - }; - if (support.iterable) { - iterator[Symbol.iterator] = function() { - return iterator; - }; - } - return iterator; - } - function Headers4(headers) { - this.map = {}; - if (headers instanceof Headers4) { - headers.forEach(function(value, name) { - this.append(name, value); - }, this); - } else if (Array.isArray(headers)) { - headers.forEach(function(header) { - if (header.length != 2) { - throw new TypeError("Headers constructor: expected name/value pair to be length 2, found" + header.length); - } - this.append(header[0], header[1]); - }, this); - } else if (headers) { - Object.getOwnPropertyNames(headers).forEach(function(name) { - this.append(name, headers[name]); - }, this); - } - } - Headers4.prototype.append = function(name, value) { - name = normalizeName(name); - value = normalizeValue2(value); - var oldValue = this.map[name]; - this.map[name] = oldValue ? oldValue + ", " + value : value; - }; - Headers4.prototype["delete"] = function(name) { - delete this.map[normalizeName(name)]; - }; - Headers4.prototype.get = function(name) { - name = normalizeName(name); - return this.has(name) ? this.map[name] : null; - }; - Headers4.prototype.has = function(name) { - return this.map.hasOwnProperty(normalizeName(name)); - }; - Headers4.prototype.set = function(name, value) { - this.map[normalizeName(name)] = normalizeValue2(value); - }; - Headers4.prototype.forEach = function(callback, thisArg) { - for (var name in this.map) { - if (this.map.hasOwnProperty(name)) { - callback.call(thisArg, this.map[name], name, this); - } - } - }; - Headers4.prototype.keys = function() { - var items = []; - this.forEach(function(value, name) { - items.push(name); - }); - return iteratorFor(items); - }; - Headers4.prototype.values = function() { - var items = []; - this.forEach(function(value) { - items.push(value); - }); - return iteratorFor(items); - }; - Headers4.prototype.entries = function() { - var items = []; - this.forEach(function(value, name) { - items.push([name, value]); - }); - return iteratorFor(items); - }; - if (support.iterable) { - Headers4.prototype[Symbol.iterator] = Headers4.prototype.entries; - } - function consumed(body) { - if (body._noBody) - return; - if (body.bodyUsed) { - return Promise.reject(new TypeError("Already read")); - } - body.bodyUsed = true; - } - function fileReaderReady(reader) { - return new Promise(function(resolve2, reject) { - reader.onload = function() { - resolve2(reader.result); - }; - reader.onerror = function() { - reject(reader.error); - }; - }); - } - function readBlobAsArrayBuffer(blob) { - var reader = new FileReader(); - var promise = fileReaderReady(reader); - reader.readAsArrayBuffer(blob); - return promise; - } - function readBlobAsText(blob) { - var reader = new FileReader(); - var promise = fileReaderReady(reader); - var match2 = /charset=([A-Za-z0-9_-]+)/.exec(blob.type); - var encoding = match2 ? match2[1] : "utf-8"; - reader.readAsText(blob, encoding); - return promise; - } - function readArrayBufferAsText(buf) { - var view = new Uint8Array(buf); - var chars = new Array(view.length); - for (var i4 = 0; i4 < view.length; i4++) { - chars[i4] = String.fromCharCode(view[i4]); - } - return chars.join(""); - } - function bufferClone(buf) { - if (buf.slice) { - return buf.slice(0); - } else { - var view = new Uint8Array(buf.byteLength); - view.set(new Uint8Array(buf)); - return view.buffer; - } - } - function Body() { - this.bodyUsed = false; - this._initBody = function(body) { - this.bodyUsed = this.bodyUsed; - this._bodyInit = body; - if (!body) { - this._noBody = true; - this._bodyText = ""; - } else if (typeof body === "string") { - this._bodyText = body; - } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { - this._bodyBlob = body; - } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { - this._bodyFormData = body; - } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { - this._bodyText = body.toString(); - } else if (support.arrayBuffer && support.blob && isDataView(body)) { - this._bodyArrayBuffer = bufferClone(body.buffer); - this._bodyInit = new Blob([this._bodyArrayBuffer]); - } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { - this._bodyArrayBuffer = bufferClone(body); - } else { - this._bodyText = body = Object.prototype.toString.call(body); - } - if (!this.headers.get("content-type")) { - if (typeof body === "string") { - this.headers.set("content-type", "text/plain;charset=UTF-8"); - } else if (this._bodyBlob && this._bodyBlob.type) { - this.headers.set("content-type", this._bodyBlob.type); - } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { - this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"); - } - } - }; - if (support.blob) { - this.blob = function() { - var rejected = consumed(this); - if (rejected) { - return rejected; - } - if (this._bodyBlob) { - return Promise.resolve(this._bodyBlob); - } else if (this._bodyArrayBuffer) { - return Promise.resolve(new Blob([this._bodyArrayBuffer])); - } else if (this._bodyFormData) { - throw new Error("could not read FormData body as blob"); - } else { - return Promise.resolve(new Blob([this._bodyText])); - } - }; - } - this.arrayBuffer = function() { - if (this._bodyArrayBuffer) { - var isConsumed = consumed(this); - if (isConsumed) { - return isConsumed; - } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) { - return Promise.resolve( - this._bodyArrayBuffer.buffer.slice( - this._bodyArrayBuffer.byteOffset, - this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength - ) - ); - } else { - return Promise.resolve(this._bodyArrayBuffer); - } - } else if (support.blob) { - return this.blob().then(readBlobAsArrayBuffer); - } else { - throw new Error("could not read as ArrayBuffer"); - } - }; - this.text = function() { - var rejected = consumed(this); - if (rejected) { - return rejected; - } - if (this._bodyBlob) { - return readBlobAsText(this._bodyBlob); - } else if (this._bodyArrayBuffer) { - return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)); - } else if (this._bodyFormData) { - throw new Error("could not read FormData body as text"); - } else { - return Promise.resolve(this._bodyText); - } - }; - if (support.formData) { - this.formData = function() { - return this.text().then(decode); - }; - } - this.json = function() { - return this.text().then(JSON.parse); - }; - return this; - } - var methods17 = ["CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", "TRACE"]; - function normalizeMethod(method) { - var upcased = method.toUpperCase(); - return methods17.indexOf(upcased) > -1 ? upcased : method; - } - function Request3(input, options) { - if (!(this instanceof Request3)) { - throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.'); - } - options = options || {}; - var body = options.body; - if (input instanceof Request3) { - if (input.bodyUsed) { - throw new TypeError("Already read"); - } - this.url = input.url; - this.credentials = input.credentials; - if (!options.headers) { - this.headers = new Headers4(input.headers); - } - this.method = input.method; - this.mode = input.mode; - this.signal = input.signal; - if (!body && input._bodyInit != null) { - body = input._bodyInit; - input.bodyUsed = true; - } - } else { - this.url = String(input); - } - this.credentials = options.credentials || this.credentials || "same-origin"; - if (options.headers || !this.headers) { - this.headers = new Headers4(options.headers); - } - this.method = normalizeMethod(options.method || this.method || "GET"); - this.mode = options.mode || this.mode || null; - this.signal = options.signal || this.signal || function() { - if ("AbortController" in g3) { - var ctrl = new AbortController(); - return ctrl.signal; - } - }(); - this.referrer = null; - if ((this.method === "GET" || this.method === "HEAD") && body) { - throw new TypeError("Body not allowed for GET or HEAD requests"); - } - this._initBody(body); - if (this.method === "GET" || this.method === "HEAD") { - if (options.cache === "no-store" || options.cache === "no-cache") { - var reParamSearch = /([?&])_=[^&]*/; - if (reParamSearch.test(this.url)) { - this.url = this.url.replace(reParamSearch, "$1_=" + new Date().getTime()); - } else { - var reQueryString = /\?/; - this.url += (reQueryString.test(this.url) ? "&" : "?") + "_=" + new Date().getTime(); - } - } - } - } - Request3.prototype.clone = function() { - return new Request3(this, { body: this._bodyInit }); - }; - function decode(body) { - var form = new FormData(); - body.trim().split("&").forEach(function(bytes) { - if (bytes) { - var split2 = bytes.split("="); - var name = split2.shift().replace(/\+/g, " "); - var value = split2.join("=").replace(/\+/g, " "); - form.append(decodeURIComponent(name), decodeURIComponent(value)); - } - }); - return form; - } - function parseHeaders(rawHeaders) { - var headers = new Headers4(); - var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, " "); - preProcessedHeaders.split("\r").map(function(header) { - return header.indexOf("\n") === 0 ? header.substr(1, header.length) : header; - }).forEach(function(line) { - var parts = line.split(":"); - var key = parts.shift().trim(); - if (key) { - var value = parts.join(":").trim(); - try { - headers.append(key, value); - } catch (error) { - console.warn("Response " + error.message); - } - } - }); - return headers; - } - Body.call(Request3.prototype); - function Response3(bodyInit, options) { - if (!(this instanceof Response3)) { - throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.'); - } - if (!options) { - options = {}; - } - this.type = "default"; - this.status = options.status === void 0 ? 200 : options.status; - if (this.status < 200 || this.status > 599) { - throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599]."); - } - this.ok = this.status >= 200 && this.status < 300; - this.statusText = options.statusText === void 0 ? "" : "" + options.statusText; - this.headers = new Headers4(options.headers); - this.url = options.url || ""; - this._initBody(bodyInit); - } - Body.call(Response3.prototype); - Response3.prototype.clone = function() { - return new Response3(this._bodyInit, { - status: this.status, - statusText: this.statusText, - headers: new Headers4(this.headers), - url: this.url - }); - }; - Response3.error = function() { - var response = new Response3(null, { status: 200, statusText: "" }); - response.ok = false; - response.status = 0; - response.type = "error"; - return response; - }; - var redirectStatuses = [301, 302, 303, 307, 308]; - Response3.redirect = function(url, status) { - if (redirectStatuses.indexOf(status) === -1) { - throw new RangeError("Invalid status code"); - } - return new Response3(null, { status, headers: { location: url } }); - }; - exports2.DOMException = g3.DOMException; - try { - new exports2.DOMException(); - } catch (err) { - exports2.DOMException = function(message, name) { - this.message = message; - this.name = name; - var error = Error(message); - this.stack = error.stack; - }; - exports2.DOMException.prototype = Object.create(Error.prototype); - exports2.DOMException.prototype.constructor = exports2.DOMException; - } - function fetch3(input, init) { - return new Promise(function(resolve2, reject) { - var request = new Request3(input, init); - if (request.signal && request.signal.aborted) { - return reject(new exports2.DOMException("Aborted", "AbortError")); - } - var xhr = new XMLHttpRequest(); - function abortXhr() { - xhr.abort(); - } - xhr.onload = function() { - var options = { - statusText: xhr.statusText, - headers: parseHeaders(xhr.getAllResponseHeaders() || "") - }; - if (request.url.indexOf("file://") === 0 && (xhr.status < 200 || xhr.status > 599)) { - options.status = 200; - } else { - options.status = xhr.status; - } - options.url = "responseURL" in xhr ? xhr.responseURL : options.headers.get("X-Request-URL"); - var body = "response" in xhr ? xhr.response : xhr.responseText; - setTimeout(function() { - resolve2(new Response3(body, options)); - }, 0); - }; - xhr.onerror = function() { - setTimeout(function() { - reject(new TypeError("Network request failed")); - }, 0); - }; - xhr.ontimeout = function() { - setTimeout(function() { - reject(new TypeError("Network request timed out")); - }, 0); - }; - xhr.onabort = function() { - setTimeout(function() { - reject(new exports2.DOMException("Aborted", "AbortError")); - }, 0); - }; - function fixUrl(url) { - try { - return url === "" && g3.location.href ? g3.location.href : url; - } catch (e3) { - return url; - } - } - xhr.open(request.method, fixUrl(request.url), true); - if (request.credentials === "include") { - xhr.withCredentials = true; - } else if (request.credentials === "omit") { - xhr.withCredentials = false; - } - if ("responseType" in xhr) { - if (support.blob) { - xhr.responseType = "blob"; - } else if (support.arrayBuffer) { - xhr.responseType = "arraybuffer"; - } - } - if (init && typeof init.headers === "object" && !(init.headers instanceof Headers4 || g3.Headers && init.headers instanceof g3.Headers)) { - var names = []; - Object.getOwnPropertyNames(init.headers).forEach(function(name) { - names.push(normalizeName(name)); - xhr.setRequestHeader(name, normalizeValue2(init.headers[name])); - }); - request.headers.forEach(function(value, name) { - if (names.indexOf(name) === -1) { - xhr.setRequestHeader(name, value); - } - }); - } else { - request.headers.forEach(function(value, name) { - xhr.setRequestHeader(name, value); - }); - } - if (request.signal) { - request.signal.addEventListener("abort", abortXhr); - xhr.onreadystatechange = function() { - if (xhr.readyState === 4) { - request.signal.removeEventListener("abort", abortXhr); - } - }; - } - xhr.send(typeof request._bodyInit === "undefined" ? null : request._bodyInit); - }); - } - fetch3.polyfill = true; - if (!g3.fetch) { - g3.fetch = fetch3; - g3.Headers = Headers4; - g3.Request = Request3; - g3.Response = Response3; - } - exports2.Headers = Headers4; - exports2.Request = Request3; - exports2.Response = Response3; - exports2.fetch = fetch3; - Object.defineProperty(exports2, "__esModule", { value: true }); - }); - } -}); - -// node_modules/webidl-conversions/lib/index.js -var require_lib = __commonJS({ - "node_modules/webidl-conversions/lib/index.js"(exports, module2) { - "use strict"; - var conversions = {}; - module2.exports = conversions; - function sign(x2) { - return x2 < 0 ? -1 : 1; - } - function evenRound(x2) { - if (x2 % 1 === 0.5 && (x2 & 1) === 0) { - return Math.floor(x2); - } else { - return Math.round(x2); - } - } - function createNumberConversion(bitLength, typeOpts) { - if (!typeOpts.unsigned) { - --bitLength; - } - const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength); - const upperBound = Math.pow(2, bitLength) - 1; - const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength); - const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1); - return function(V2, opts2) { - if (!opts2) - opts2 = {}; - let x2 = +V2; - if (opts2.enforceRange) { - if (!Number.isFinite(x2)) { - throw new TypeError("Argument is not a finite number"); - } - x2 = sign(x2) * Math.floor(Math.abs(x2)); - if (x2 < lowerBound || x2 > upperBound) { - throw new TypeError("Argument is not in byte range"); - } - return x2; - } - if (!isNaN(x2) && opts2.clamp) { - x2 = evenRound(x2); - if (x2 < lowerBound) - x2 = lowerBound; - if (x2 > upperBound) - x2 = upperBound; - return x2; - } - if (!Number.isFinite(x2) || x2 === 0) { - return 0; - } - x2 = sign(x2) * Math.floor(Math.abs(x2)); - x2 = x2 % moduloVal; - if (!typeOpts.unsigned && x2 >= moduloBound) { - return x2 - moduloVal; - } else if (typeOpts.unsigned) { - if (x2 < 0) { - x2 += moduloVal; - } else if (x2 === -0) { - return 0; - } - } - return x2; - }; - } - conversions["void"] = function() { - return void 0; - }; - conversions["boolean"] = function(val) { - return !!val; - }; - conversions["byte"] = createNumberConversion(8, { unsigned: false }); - conversions["octet"] = createNumberConversion(8, { unsigned: true }); - conversions["short"] = createNumberConversion(16, { unsigned: false }); - conversions["unsigned short"] = createNumberConversion(16, { unsigned: true }); - conversions["long"] = createNumberConversion(32, { unsigned: false }); - conversions["unsigned long"] = createNumberConversion(32, { unsigned: true }); - conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 }); - conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 }); - conversions["double"] = function(V2) { - const x2 = +V2; - if (!Number.isFinite(x2)) { - throw new TypeError("Argument is not a finite floating-point value"); - } - return x2; - }; - conversions["unrestricted double"] = function(V2) { - const x2 = +V2; - if (isNaN(x2)) { - throw new TypeError("Argument is NaN"); - } - return x2; - }; - conversions["float"] = conversions["double"]; - conversions["unrestricted float"] = conversions["unrestricted double"]; - conversions["DOMString"] = function(V2, opts2) { - if (!opts2) - opts2 = {}; - if (opts2.treatNullAsEmptyString && V2 === null) { - return ""; - } - return String(V2); - }; - conversions["ByteString"] = function(V2, opts2) { - const x2 = String(V2); - let c3 = void 0; - for (let i4 = 0; (c3 = x2.codePointAt(i4)) !== void 0; ++i4) { - if (c3 > 255) { - throw new TypeError("Argument is not a valid bytestring"); - } - } - return x2; - }; - conversions["USVString"] = function(V2) { - const S2 = String(V2); - const n3 = S2.length; - const U2 = []; - for (let i4 = 0; i4 < n3; ++i4) { - const c3 = S2.charCodeAt(i4); - if (c3 < 55296 || c3 > 57343) { - U2.push(String.fromCodePoint(c3)); - } else if (56320 <= c3 && c3 <= 57343) { - U2.push(String.fromCodePoint(65533)); - } else { - if (i4 === n3 - 1) { - U2.push(String.fromCodePoint(65533)); - } else { - const d3 = S2.charCodeAt(i4 + 1); - if (56320 <= d3 && d3 <= 57343) { - const a3 = c3 & 1023; - const b2 = d3 & 1023; - U2.push(String.fromCodePoint((2 << 15) + (2 << 9) * a3 + b2)); - ++i4; - } else { - U2.push(String.fromCodePoint(65533)); - } - } - } - } - return U2.join(""); - }; - conversions["Date"] = function(V2, opts2) { - if (!(V2 instanceof Date)) { - throw new TypeError("Argument is not a Date object"); - } - if (isNaN(V2)) { - return void 0; - } - return V2; - }; - conversions["RegExp"] = function(V2, opts2) { - if (!(V2 instanceof RegExp)) { - V2 = new RegExp(V2); - } - return V2; - }; - } -}); - -// node_modules/whatwg-url/lib/utils.js -var require_utils = __commonJS({ - "node_modules/whatwg-url/lib/utils.js"(exports, module2) { - "use strict"; - module2.exports.mixin = function mixin(target, source) { - const keys = Object.getOwnPropertyNames(source); - for (let i4 = 0; i4 < keys.length; ++i4) { - Object.defineProperty(target, keys[i4], Object.getOwnPropertyDescriptor(source, keys[i4])); - } - }; - module2.exports.wrapperSymbol = Symbol("wrapper"); - module2.exports.implSymbol = Symbol("impl"); - module2.exports.wrapperForImpl = function(impl) { - return impl[module2.exports.wrapperSymbol]; - }; - module2.exports.implForWrapper = function(wrapper) { - return wrapper[module2.exports.implSymbol]; - }; - } -}); - -// node_modules/tr46/lib/mappingTable.json -var require_mappingTable = __commonJS({ - "node_modules/tr46/lib/mappingTable.json"(exports, module2) { - module2.exports = [[[0, 44], "disallowed_STD3_valid"], [[45, 46], "valid"], [[47, 47], "disallowed_STD3_valid"], [[48, 57], "valid"], [[58, 64], "disallowed_STD3_valid"], [[65, 65], "mapped", [97]], [[66, 66], "mapped", [98]], [[67, 67], "mapped", [99]], [[68, 68], "mapped", [100]], [[69, 69], "mapped", [101]], [[70, 70], "mapped", [102]], [[71, 71], "mapped", [103]], [[72, 72], "mapped", [104]], [[73, 73], "mapped", [105]], [[74, 74], "mapped", [106]], [[75, 75], "mapped", [107]], [[76, 76], "mapped", [108]], [[77, 77], "mapped", [109]], [[78, 78], "mapped", [110]], [[79, 79], "mapped", [111]], [[80, 80], "mapped", [112]], [[81, 81], "mapped", [113]], [[82, 82], "mapped", [114]], [[83, 83], "mapped", [115]], [[84, 84], "mapped", [116]], [[85, 85], "mapped", [117]], [[86, 86], "mapped", [118]], [[87, 87], "mapped", [119]], [[88, 88], "mapped", [120]], [[89, 89], "mapped", [121]], [[90, 90], "mapped", [122]], [[91, 96], "disallowed_STD3_valid"], [[97, 122], "valid"], [[123, 127], "disallowed_STD3_valid"], [[128, 159], "disallowed"], [[160, 160], "disallowed_STD3_mapped", [32]], [[161, 167], "valid", [], "NV8"], [[168, 168], "disallowed_STD3_mapped", [32, 776]], [[169, 169], "valid", [], "NV8"], [[170, 170], "mapped", [97]], [[171, 172], "valid", [], "NV8"], [[173, 173], "ignored"], [[174, 174], "valid", [], "NV8"], [[175, 175], "disallowed_STD3_mapped", [32, 772]], [[176, 177], "valid", [], "NV8"], [[178, 178], "mapped", [50]], [[179, 179], "mapped", [51]], [[180, 180], "disallowed_STD3_mapped", [32, 769]], [[181, 181], "mapped", [956]], [[182, 182], "valid", [], "NV8"], [[183, 183], "valid"], [[184, 184], "disallowed_STD3_mapped", [32, 807]], [[185, 185], "mapped", [49]], [[186, 186], "mapped", [111]], [[187, 187], "valid", [], "NV8"], [[188, 188], "mapped", [49, 8260, 52]], [[189, 189], "mapped", [49, 8260, 50]], [[190, 190], "mapped", [51, 8260, 52]], [[191, 191], "valid", [], "NV8"], [[192, 192], "mapped", [224]], [[193, 193], "mapped", [225]], [[194, 194], "mapped", [226]], [[195, 195], "mapped", [227]], [[196, 196], "mapped", [228]], [[197, 197], "mapped", [229]], [[198, 198], "mapped", [230]], [[199, 199], "mapped", [231]], [[200, 200], "mapped", [232]], [[201, 201], "mapped", [233]], [[202, 202], "mapped", [234]], [[203, 203], "mapped", [235]], [[204, 204], "mapped", [236]], [[205, 205], "mapped", [237]], [[206, 206], "mapped", [238]], [[207, 207], "mapped", [239]], [[208, 208], "mapped", [240]], [[209, 209], "mapped", [241]], [[210, 210], "mapped", [242]], [[211, 211], "mapped", [243]], [[212, 212], "mapped", [244]], [[213, 213], "mapped", [245]], [[214, 214], "mapped", [246]], [[215, 215], "valid", [], "NV8"], [[216, 216], "mapped", [248]], [[217, 217], "mapped", [249]], [[218, 218], "mapped", [250]], [[219, 219], "mapped", [251]], [[220, 220], "mapped", [252]], [[221, 221], "mapped", [253]], [[222, 222], "mapped", [254]], [[223, 223], "deviation", [115, 115]], [[224, 246], "valid"], [[247, 247], "valid", [], "NV8"], [[248, 255], "valid"], [[256, 256], "mapped", [257]], [[257, 257], "valid"], [[258, 258], "mapped", [259]], [[259, 259], "valid"], [[260, 260], "mapped", [261]], [[261, 261], "valid"], [[262, 262], "mapped", [263]], [[263, 263], "valid"], [[264, 264], "mapped", [265]], [[265, 265], "valid"], [[266, 266], "mapped", [267]], [[267, 267], "valid"], [[268, 268], "mapped", [269]], [[269, 269], "valid"], [[270, 270], "mapped", [271]], [[271, 271], "valid"], [[272, 272], "mapped", [273]], [[273, 273], "valid"], [[274, 274], "mapped", [275]], [[275, 275], "valid"], [[276, 276], "mapped", [277]], [[277, 277], "valid"], [[278, 278], "mapped", [279]], [[279, 279], "valid"], [[280, 280], "mapped", [281]], [[281, 281], "valid"], [[282, 282], "mapped", [283]], [[283, 283], "valid"], [[284, 284], "mapped", [285]], [[285, 285], "valid"], [[286, 286], "mapped", [287]], [[287, 287], "valid"], [[288, 288], "mapped", [289]], [[289, 289], "valid"], [[290, 290], "mapped", [291]], [[291, 291], "valid"], [[292, 292], "mapped", [293]], [[293, 293], "valid"], [[294, 294], "mapped", [295]], [[295, 295], "valid"], [[296, 296], "mapped", [297]], [[297, 297], "valid"], [[298, 298], "mapped", [299]], [[299, 299], "valid"], [[300, 300], "mapped", [301]], [[301, 301], "valid"], [[302, 302], "mapped", [303]], [[303, 303], "valid"], [[304, 304], "mapped", [105, 775]], [[305, 305], "valid"], [[306, 307], "mapped", [105, 106]], [[308, 308], "mapped", [309]], [[309, 309], "valid"], [[310, 310], "mapped", [311]], [[311, 312], "valid"], [[313, 313], "mapped", [314]], [[314, 314], "valid"], [[315, 315], "mapped", [316]], [[316, 316], "valid"], [[317, 317], "mapped", [318]], [[318, 318], "valid"], [[319, 320], "mapped", [108, 183]], [[321, 321], "mapped", [322]], [[322, 322], "valid"], [[323, 323], "mapped", [324]], [[324, 324], "valid"], [[325, 325], "mapped", [326]], [[326, 326], "valid"], [[327, 327], "mapped", [328]], [[328, 328], "valid"], [[329, 329], "mapped", [700, 110]], [[330, 330], "mapped", [331]], [[331, 331], "valid"], [[332, 332], "mapped", [333]], [[333, 333], "valid"], [[334, 334], "mapped", [335]], [[335, 335], "valid"], [[336, 336], "mapped", [337]], [[337, 337], "valid"], [[338, 338], "mapped", [339]], [[339, 339], "valid"], [[340, 340], "mapped", [341]], [[341, 341], "valid"], [[342, 342], "mapped", [343]], [[343, 343], "valid"], [[344, 344], "mapped", [345]], [[345, 345], "valid"], [[346, 346], "mapped", [347]], [[347, 347], "valid"], [[348, 348], "mapped", [349]], [[349, 349], "valid"], [[350, 350], "mapped", [351]], [[351, 351], "valid"], [[352, 352], "mapped", [353]], [[353, 353], "valid"], [[354, 354], "mapped", [355]], [[355, 355], "valid"], [[356, 356], "mapped", [357]], [[357, 357], "valid"], [[358, 358], "mapped", [359]], [[359, 359], "valid"], [[360, 360], "mapped", [361]], [[361, 361], "valid"], [[362, 362], "mapped", [363]], [[363, 363], "valid"], [[364, 364], "mapped", [365]], [[365, 365], "valid"], [[366, 366], "mapped", [367]], [[367, 367], "valid"], [[368, 368], "mapped", [369]], [[369, 369], "valid"], [[370, 370], "mapped", [371]], [[371, 371], "valid"], [[372, 372], "mapped", [373]], [[373, 373], "valid"], [[374, 374], "mapped", [375]], [[375, 375], "valid"], [[376, 376], "mapped", [255]], [[377, 377], "mapped", [378]], [[378, 378], "valid"], [[379, 379], "mapped", [380]], [[380, 380], "valid"], [[381, 381], "mapped", [382]], [[382, 382], "valid"], [[383, 383], "mapped", [115]], [[384, 384], "valid"], [[385, 385], "mapped", [595]], [[386, 386], "mapped", [387]], [[387, 387], "valid"], [[388, 388], "mapped", [389]], [[389, 389], "valid"], [[390, 390], "mapped", [596]], [[391, 391], "mapped", [392]], [[392, 392], "valid"], [[393, 393], "mapped", [598]], [[394, 394], "mapped", [599]], [[395, 395], "mapped", [396]], [[396, 397], "valid"], [[398, 398], "mapped", [477]], [[399, 399], "mapped", [601]], [[400, 400], "mapped", [603]], [[401, 401], "mapped", [402]], [[402, 402], "valid"], [[403, 403], "mapped", [608]], [[404, 404], "mapped", [611]], [[405, 405], "valid"], [[406, 406], "mapped", [617]], [[407, 407], "mapped", [616]], [[408, 408], "mapped", [409]], [[409, 411], "valid"], [[412, 412], "mapped", [623]], [[413, 413], "mapped", [626]], [[414, 414], "valid"], [[415, 415], "mapped", [629]], [[416, 416], "mapped", [417]], [[417, 417], "valid"], [[418, 418], "mapped", [419]], [[419, 419], "valid"], [[420, 420], "mapped", [421]], [[421, 421], "valid"], [[422, 422], "mapped", [640]], [[423, 423], "mapped", [424]], [[424, 424], "valid"], [[425, 425], "mapped", [643]], [[426, 427], "valid"], [[428, 428], "mapped", [429]], [[429, 429], "valid"], [[430, 430], "mapped", [648]], [[431, 431], "mapped", [432]], [[432, 432], "valid"], [[433, 433], "mapped", [650]], [[434, 434], "mapped", [651]], [[435, 435], "mapped", [436]], [[436, 436], "valid"], [[437, 437], "mapped", [438]], [[438, 438], "valid"], [[439, 439], "mapped", [658]], [[440, 440], "mapped", [441]], [[441, 443], "valid"], [[444, 444], "mapped", [445]], [[445, 451], "valid"], [[452, 454], "mapped", [100, 382]], [[455, 457], "mapped", [108, 106]], [[458, 460], "mapped", [110, 106]], [[461, 461], "mapped", [462]], [[462, 462], "valid"], [[463, 463], "mapped", [464]], [[464, 464], "valid"], [[465, 465], "mapped", [466]], [[466, 466], "valid"], [[467, 467], "mapped", [468]], [[468, 468], "valid"], [[469, 469], "mapped", [470]], [[470, 470], "valid"], [[471, 471], "mapped", [472]], [[472, 472], "valid"], [[473, 473], "mapped", [474]], [[474, 474], "valid"], [[475, 475], "mapped", [476]], [[476, 477], "valid"], [[478, 478], "mapped", [479]], [[479, 479], "valid"], [[480, 480], "mapped", [481]], [[481, 481], "valid"], [[482, 482], "mapped", [483]], [[483, 483], "valid"], [[484, 484], "mapped", [485]], [[485, 485], "valid"], [[486, 486], "mapped", [487]], [[487, 487], "valid"], [[488, 488], "mapped", [489]], [[489, 489], "valid"], [[490, 490], "mapped", [491]], [[491, 491], "valid"], [[492, 492], "mapped", [493]], [[493, 493], "valid"], [[494, 494], "mapped", [495]], [[495, 496], "valid"], [[497, 499], "mapped", [100, 122]], [[500, 500], "mapped", [501]], [[501, 501], "valid"], [[502, 502], "mapped", [405]], [[503, 503], "mapped", [447]], [[504, 504], "mapped", [505]], [[505, 505], "valid"], [[506, 506], "mapped", [507]], [[507, 507], "valid"], [[508, 508], "mapped", [509]], [[509, 509], "valid"], [[510, 510], "mapped", [511]], [[511, 511], "valid"], [[512, 512], "mapped", [513]], [[513, 513], "valid"], [[514, 514], "mapped", [515]], [[515, 515], "valid"], [[516, 516], "mapped", [517]], [[517, 517], "valid"], [[518, 518], "mapped", [519]], [[519, 519], "valid"], [[520, 520], "mapped", [521]], [[521, 521], "valid"], [[522, 522], "mapped", [523]], [[523, 523], "valid"], [[524, 524], "mapped", [525]], [[525, 525], "valid"], [[526, 526], "mapped", [527]], [[527, 527], "valid"], [[528, 528], "mapped", [529]], [[529, 529], "valid"], [[530, 530], "mapped", [531]], [[531, 531], "valid"], [[532, 532], "mapped", [533]], [[533, 533], "valid"], [[534, 534], "mapped", [535]], [[535, 535], "valid"], [[536, 536], "mapped", [537]], [[537, 537], "valid"], [[538, 538], "mapped", [539]], [[539, 539], "valid"], [[540, 540], "mapped", [541]], [[541, 541], "valid"], [[542, 542], "mapped", [543]], [[543, 543], "valid"], [[544, 544], "mapped", [414]], [[545, 545], "valid"], [[546, 546], "mapped", [547]], [[547, 547], "valid"], [[548, 548], "mapped", [549]], [[549, 549], "valid"], [[550, 550], "mapped", [551]], [[551, 551], "valid"], [[552, 552], "mapped", [553]], [[553, 553], "valid"], [[554, 554], "mapped", [555]], [[555, 555], "valid"], [[556, 556], "mapped", [557]], [[557, 557], "valid"], [[558, 558], "mapped", [559]], [[559, 559], "valid"], [[560, 560], "mapped", [561]], [[561, 561], "valid"], [[562, 562], "mapped", [563]], [[563, 563], "valid"], [[564, 566], "valid"], [[567, 569], "valid"], [[570, 570], "mapped", [11365]], [[571, 571], "mapped", [572]], [[572, 572], "valid"], [[573, 573], "mapped", [410]], [[574, 574], "mapped", [11366]], [[575, 576], "valid"], [[577, 577], "mapped", [578]], [[578, 578], "valid"], [[579, 579], "mapped", [384]], [[580, 580], "mapped", [649]], [[581, 581], "mapped", [652]], [[582, 582], "mapped", [583]], [[583, 583], "valid"], [[584, 584], "mapped", [585]], [[585, 585], "valid"], [[586, 586], "mapped", [587]], [[587, 587], "valid"], [[588, 588], "mapped", [589]], [[589, 589], "valid"], [[590, 590], "mapped", [591]], [[591, 591], "valid"], [[592, 680], "valid"], [[681, 685], "valid"], [[686, 687], "valid"], [[688, 688], "mapped", [104]], [[689, 689], "mapped", [614]], [[690, 690], "mapped", [106]], [[691, 691], "mapped", [114]], [[692, 692], "mapped", [633]], [[693, 693], "mapped", [635]], [[694, 694], "mapped", [641]], [[695, 695], "mapped", [119]], [[696, 696], "mapped", [121]], [[697, 705], "valid"], [[706, 709], "valid", [], "NV8"], [[710, 721], "valid"], [[722, 727], "valid", [], "NV8"], [[728, 728], "disallowed_STD3_mapped", [32, 774]], [[729, 729], "disallowed_STD3_mapped", [32, 775]], [[730, 730], "disallowed_STD3_mapped", [32, 778]], [[731, 731], "disallowed_STD3_mapped", [32, 808]], [[732, 732], "disallowed_STD3_mapped", [32, 771]], [[733, 733], "disallowed_STD3_mapped", [32, 779]], [[734, 734], "valid", [], "NV8"], [[735, 735], "valid", [], "NV8"], [[736, 736], "mapped", [611]], [[737, 737], "mapped", [108]], [[738, 738], "mapped", [115]], [[739, 739], "mapped", [120]], [[740, 740], "mapped", [661]], [[741, 745], "valid", [], "NV8"], [[746, 747], "valid", [], "NV8"], [[748, 748], "valid"], [[749, 749], "valid", [], "NV8"], [[750, 750], "valid"], [[751, 767], "valid", [], "NV8"], [[768, 831], "valid"], [[832, 832], "mapped", [768]], [[833, 833], "mapped", [769]], [[834, 834], "valid"], [[835, 835], "mapped", [787]], [[836, 836], "mapped", [776, 769]], [[837, 837], "mapped", [953]], [[838, 846], "valid"], [[847, 847], "ignored"], [[848, 855], "valid"], [[856, 860], "valid"], [[861, 863], "valid"], [[864, 865], "valid"], [[866, 866], "valid"], [[867, 879], "valid"], [[880, 880], "mapped", [881]], [[881, 881], "valid"], [[882, 882], "mapped", [883]], [[883, 883], "valid"], [[884, 884], "mapped", [697]], [[885, 885], "valid"], [[886, 886], "mapped", [887]], [[887, 887], "valid"], [[888, 889], "disallowed"], [[890, 890], "disallowed_STD3_mapped", [32, 953]], [[891, 893], "valid"], [[894, 894], "disallowed_STD3_mapped", [59]], [[895, 895], "mapped", [1011]], [[896, 899], "disallowed"], [[900, 900], "disallowed_STD3_mapped", [32, 769]], [[901, 901], "disallowed_STD3_mapped", [32, 776, 769]], [[902, 902], "mapped", [940]], [[903, 903], "mapped", [183]], [[904, 904], "mapped", [941]], [[905, 905], "mapped", [942]], [[906, 906], "mapped", [943]], [[907, 907], "disallowed"], [[908, 908], "mapped", [972]], [[909, 909], "disallowed"], [[910, 910], "mapped", [973]], [[911, 911], "mapped", [974]], [[912, 912], "valid"], [[913, 913], "mapped", [945]], [[914, 914], "mapped", [946]], [[915, 915], "mapped", [947]], [[916, 916], "mapped", [948]], [[917, 917], "mapped", [949]], [[918, 918], "mapped", [950]], [[919, 919], "mapped", [951]], [[920, 920], "mapped", [952]], [[921, 921], "mapped", [953]], [[922, 922], "mapped", [954]], [[923, 923], "mapped", [955]], [[924, 924], "mapped", [956]], [[925, 925], "mapped", [957]], [[926, 926], "mapped", [958]], [[927, 927], "mapped", [959]], [[928, 928], "mapped", [960]], [[929, 929], "mapped", [961]], [[930, 930], "disallowed"], [[931, 931], "mapped", [963]], [[932, 932], "mapped", [964]], [[933, 933], "mapped", [965]], [[934, 934], "mapped", [966]], [[935, 935], "mapped", [967]], [[936, 936], "mapped", [968]], [[937, 937], "mapped", [969]], [[938, 938], "mapped", [970]], [[939, 939], "mapped", [971]], [[940, 961], "valid"], [[962, 962], "deviation", [963]], [[963, 974], "valid"], [[975, 975], "mapped", [983]], [[976, 976], "mapped", [946]], [[977, 977], "mapped", [952]], [[978, 978], "mapped", [965]], [[979, 979], "mapped", [973]], [[980, 980], "mapped", [971]], [[981, 981], "mapped", [966]], [[982, 982], "mapped", [960]], [[983, 983], "valid"], [[984, 984], "mapped", [985]], [[985, 985], "valid"], [[986, 986], "mapped", [987]], [[987, 987], "valid"], [[988, 988], "mapped", [989]], [[989, 989], "valid"], [[990, 990], "mapped", [991]], [[991, 991], "valid"], [[992, 992], "mapped", [993]], [[993, 993], "valid"], [[994, 994], "mapped", [995]], [[995, 995], "valid"], [[996, 996], "mapped", [997]], [[997, 997], "valid"], [[998, 998], "mapped", [999]], [[999, 999], "valid"], [[1e3, 1e3], "mapped", [1001]], [[1001, 1001], "valid"], [[1002, 1002], "mapped", [1003]], [[1003, 1003], "valid"], [[1004, 1004], "mapped", [1005]], [[1005, 1005], "valid"], [[1006, 1006], "mapped", [1007]], [[1007, 1007], "valid"], [[1008, 1008], "mapped", [954]], [[1009, 1009], "mapped", [961]], [[1010, 1010], "mapped", [963]], [[1011, 1011], "valid"], [[1012, 1012], "mapped", [952]], [[1013, 1013], "mapped", [949]], [[1014, 1014], "valid", [], "NV8"], [[1015, 1015], "mapped", [1016]], [[1016, 1016], "valid"], [[1017, 1017], "mapped", [963]], [[1018, 1018], "mapped", [1019]], [[1019, 1019], "valid"], [[1020, 1020], "valid"], [[1021, 1021], "mapped", [891]], [[1022, 1022], "mapped", [892]], [[1023, 1023], "mapped", [893]], [[1024, 1024], "mapped", [1104]], [[1025, 1025], "mapped", [1105]], [[1026, 1026], "mapped", [1106]], [[1027, 1027], "mapped", [1107]], [[1028, 1028], "mapped", [1108]], [[1029, 1029], "mapped", [1109]], [[1030, 1030], "mapped", [1110]], [[1031, 1031], "mapped", [1111]], [[1032, 1032], "mapped", [1112]], [[1033, 1033], "mapped", [1113]], [[1034, 1034], "mapped", [1114]], [[1035, 1035], "mapped", [1115]], [[1036, 1036], "mapped", [1116]], [[1037, 1037], "mapped", [1117]], [[1038, 1038], "mapped", [1118]], [[1039, 1039], "mapped", [1119]], [[1040, 1040], "mapped", [1072]], [[1041, 1041], "mapped", [1073]], [[1042, 1042], "mapped", [1074]], [[1043, 1043], "mapped", [1075]], [[1044, 1044], "mapped", [1076]], [[1045, 1045], "mapped", [1077]], [[1046, 1046], "mapped", [1078]], [[1047, 1047], "mapped", [1079]], [[1048, 1048], "mapped", [1080]], [[1049, 1049], "mapped", [1081]], [[1050, 1050], "mapped", [1082]], [[1051, 1051], "mapped", [1083]], [[1052, 1052], "mapped", [1084]], [[1053, 1053], "mapped", [1085]], [[1054, 1054], "mapped", [1086]], [[1055, 1055], "mapped", [1087]], [[1056, 1056], "mapped", [1088]], [[1057, 1057], "mapped", [1089]], [[1058, 1058], "mapped", [1090]], [[1059, 1059], "mapped", [1091]], [[1060, 1060], "mapped", [1092]], [[1061, 1061], "mapped", [1093]], [[1062, 1062], "mapped", [1094]], [[1063, 1063], "mapped", [1095]], [[1064, 1064], "mapped", [1096]], [[1065, 1065], "mapped", [1097]], [[1066, 1066], "mapped", [1098]], [[1067, 1067], "mapped", [1099]], [[1068, 1068], "mapped", [1100]], [[1069, 1069], "mapped", [1101]], [[1070, 1070], "mapped", [1102]], [[1071, 1071], "mapped", [1103]], [[1072, 1103], "valid"], [[1104, 1104], "valid"], [[1105, 1116], "valid"], [[1117, 1117], "valid"], [[1118, 1119], "valid"], [[1120, 1120], "mapped", [1121]], [[1121, 1121], "valid"], [[1122, 1122], "mapped", [1123]], [[1123, 1123], "valid"], [[1124, 1124], "mapped", [1125]], [[1125, 1125], "valid"], [[1126, 1126], "mapped", [1127]], [[1127, 1127], "valid"], [[1128, 1128], "mapped", [1129]], [[1129, 1129], "valid"], [[1130, 1130], "mapped", [1131]], [[1131, 1131], "valid"], [[1132, 1132], "mapped", [1133]], [[1133, 1133], "valid"], [[1134, 1134], "mapped", [1135]], [[1135, 1135], "valid"], [[1136, 1136], "mapped", [1137]], [[1137, 1137], "valid"], [[1138, 1138], "mapped", [1139]], [[1139, 1139], "valid"], [[1140, 1140], "mapped", [1141]], [[1141, 1141], "valid"], [[1142, 1142], "mapped", [1143]], [[1143, 1143], "valid"], [[1144, 1144], "mapped", [1145]], [[1145, 1145], "valid"], [[1146, 1146], "mapped", [1147]], [[1147, 1147], "valid"], [[1148, 1148], "mapped", [1149]], [[1149, 1149], "valid"], [[1150, 1150], "mapped", [1151]], [[1151, 1151], "valid"], [[1152, 1152], "mapped", [1153]], [[1153, 1153], "valid"], [[1154, 1154], "valid", [], "NV8"], [[1155, 1158], "valid"], [[1159, 1159], "valid"], [[1160, 1161], "valid", [], "NV8"], [[1162, 1162], "mapped", [1163]], [[1163, 1163], "valid"], [[1164, 1164], "mapped", [1165]], [[1165, 1165], "valid"], [[1166, 1166], "mapped", [1167]], [[1167, 1167], "valid"], [[1168, 1168], "mapped", [1169]], [[1169, 1169], "valid"], [[1170, 1170], "mapped", [1171]], [[1171, 1171], "valid"], [[1172, 1172], "mapped", [1173]], [[1173, 1173], "valid"], [[1174, 1174], "mapped", [1175]], [[1175, 1175], "valid"], [[1176, 1176], "mapped", [1177]], [[1177, 1177], "valid"], [[1178, 1178], "mapped", [1179]], [[1179, 1179], "valid"], [[1180, 1180], "mapped", [1181]], [[1181, 1181], "valid"], [[1182, 1182], "mapped", [1183]], [[1183, 1183], "valid"], [[1184, 1184], "mapped", [1185]], [[1185, 1185], "valid"], [[1186, 1186], "mapped", [1187]], [[1187, 1187], "valid"], [[1188, 1188], "mapped", [1189]], [[1189, 1189], "valid"], [[1190, 1190], "mapped", [1191]], [[1191, 1191], "valid"], [[1192, 1192], "mapped", [1193]], [[1193, 1193], "valid"], [[1194, 1194], "mapped", [1195]], [[1195, 1195], "valid"], [[1196, 1196], "mapped", [1197]], [[1197, 1197], "valid"], [[1198, 1198], "mapped", [1199]], [[1199, 1199], "valid"], [[1200, 1200], "mapped", [1201]], [[1201, 1201], "valid"], [[1202, 1202], "mapped", [1203]], [[1203, 1203], "valid"], [[1204, 1204], "mapped", [1205]], [[1205, 1205], "valid"], [[1206, 1206], "mapped", [1207]], [[1207, 1207], "valid"], [[1208, 1208], "mapped", [1209]], [[1209, 1209], "valid"], [[1210, 1210], "mapped", [1211]], [[1211, 1211], "valid"], [[1212, 1212], "mapped", [1213]], [[1213, 1213], "valid"], [[1214, 1214], "mapped", [1215]], [[1215, 1215], "valid"], [[1216, 1216], "disallowed"], [[1217, 1217], "mapped", [1218]], [[1218, 1218], "valid"], [[1219, 1219], "mapped", [1220]], [[1220, 1220], "valid"], [[1221, 1221], "mapped", [1222]], [[1222, 1222], "valid"], [[1223, 1223], "mapped", [1224]], [[1224, 1224], "valid"], [[1225, 1225], "mapped", [1226]], [[1226, 1226], "valid"], [[1227, 1227], "mapped", [1228]], [[1228, 1228], "valid"], [[1229, 1229], "mapped", [1230]], [[1230, 1230], "valid"], [[1231, 1231], "valid"], [[1232, 1232], "mapped", [1233]], [[1233, 1233], "valid"], [[1234, 1234], "mapped", [1235]], [[1235, 1235], "valid"], [[1236, 1236], "mapped", [1237]], [[1237, 1237], "valid"], [[1238, 1238], "mapped", [1239]], [[1239, 1239], "valid"], [[1240, 1240], "mapped", [1241]], [[1241, 1241], "valid"], [[1242, 1242], "mapped", [1243]], [[1243, 1243], "valid"], [[1244, 1244], "mapped", [1245]], [[1245, 1245], "valid"], [[1246, 1246], "mapped", [1247]], [[1247, 1247], "valid"], [[1248, 1248], "mapped", [1249]], [[1249, 1249], "valid"], [[1250, 1250], "mapped", [1251]], [[1251, 1251], "valid"], [[1252, 1252], "mapped", [1253]], [[1253, 1253], "valid"], [[1254, 1254], "mapped", [1255]], [[1255, 1255], "valid"], [[1256, 1256], "mapped", [1257]], [[1257, 1257], "valid"], [[1258, 1258], "mapped", [1259]], [[1259, 1259], "valid"], [[1260, 1260], "mapped", [1261]], [[1261, 1261], "valid"], [[1262, 1262], "mapped", [1263]], [[1263, 1263], "valid"], [[1264, 1264], "mapped", [1265]], [[1265, 1265], "valid"], [[1266, 1266], "mapped", [1267]], [[1267, 1267], "valid"], [[1268, 1268], "mapped", [1269]], [[1269, 1269], "valid"], [[1270, 1270], "mapped", [1271]], [[1271, 1271], "valid"], [[1272, 1272], "mapped", [1273]], [[1273, 1273], "valid"], [[1274, 1274], "mapped", [1275]], [[1275, 1275], "valid"], [[1276, 1276], "mapped", [1277]], [[1277, 1277], "valid"], [[1278, 1278], "mapped", [1279]], [[1279, 1279], "valid"], [[1280, 1280], "mapped", [1281]], [[1281, 1281], "valid"], [[1282, 1282], "mapped", [1283]], [[1283, 1283], "valid"], [[1284, 1284], "mapped", [1285]], [[1285, 1285], "valid"], [[1286, 1286], "mapped", [1287]], [[1287, 1287], "valid"], [[1288, 1288], "mapped", [1289]], [[1289, 1289], "valid"], [[1290, 1290], "mapped", [1291]], [[1291, 1291], "valid"], [[1292, 1292], "mapped", [1293]], [[1293, 1293], "valid"], [[1294, 1294], "mapped", [1295]], [[1295, 1295], "valid"], [[1296, 1296], "mapped", [1297]], [[1297, 1297], "valid"], [[1298, 1298], "mapped", [1299]], [[1299, 1299], "valid"], [[1300, 1300], "mapped", [1301]], [[1301, 1301], "valid"], [[1302, 1302], "mapped", [1303]], [[1303, 1303], "valid"], [[1304, 1304], "mapped", [1305]], [[1305, 1305], "valid"], [[1306, 1306], "mapped", [1307]], [[1307, 1307], "valid"], [[1308, 1308], "mapped", [1309]], [[1309, 1309], "valid"], [[1310, 1310], "mapped", [1311]], [[1311, 1311], "valid"], [[1312, 1312], "mapped", [1313]], [[1313, 1313], "valid"], [[1314, 1314], "mapped", [1315]], [[1315, 1315], "valid"], [[1316, 1316], "mapped", [1317]], [[1317, 1317], "valid"], [[1318, 1318], "mapped", [1319]], [[1319, 1319], "valid"], [[1320, 1320], "mapped", [1321]], [[1321, 1321], "valid"], [[1322, 1322], "mapped", [1323]], [[1323, 1323], "valid"], [[1324, 1324], "mapped", [1325]], [[1325, 1325], "valid"], [[1326, 1326], "mapped", [1327]], [[1327, 1327], "valid"], [[1328, 1328], "disallowed"], [[1329, 1329], "mapped", [1377]], [[1330, 1330], "mapped", [1378]], [[1331, 1331], "mapped", [1379]], [[1332, 1332], "mapped", [1380]], [[1333, 1333], "mapped", [1381]], [[1334, 1334], "mapped", [1382]], [[1335, 1335], "mapped", [1383]], [[1336, 1336], "mapped", [1384]], [[1337, 1337], "mapped", [1385]], [[1338, 1338], "mapped", [1386]], [[1339, 1339], "mapped", [1387]], [[1340, 1340], "mapped", [1388]], [[1341, 1341], "mapped", [1389]], [[1342, 1342], "mapped", [1390]], [[1343, 1343], "mapped", [1391]], [[1344, 1344], "mapped", [1392]], [[1345, 1345], "mapped", [1393]], [[1346, 1346], "mapped", [1394]], [[1347, 1347], "mapped", [1395]], [[1348, 1348], "mapped", [1396]], [[1349, 1349], "mapped", [1397]], [[1350, 1350], "mapped", [1398]], [[1351, 1351], "mapped", [1399]], [[1352, 1352], "mapped", [1400]], [[1353, 1353], "mapped", [1401]], [[1354, 1354], "mapped", [1402]], [[1355, 1355], "mapped", [1403]], [[1356, 1356], "mapped", [1404]], [[1357, 1357], "mapped", [1405]], [[1358, 1358], "mapped", [1406]], [[1359, 1359], "mapped", [1407]], [[1360, 1360], "mapped", [1408]], [[1361, 1361], "mapped", [1409]], [[1362, 1362], "mapped", [1410]], [[1363, 1363], "mapped", [1411]], [[1364, 1364], "mapped", [1412]], [[1365, 1365], "mapped", [1413]], [[1366, 1366], "mapped", [1414]], [[1367, 1368], "disallowed"], [[1369, 1369], "valid"], [[1370, 1375], "valid", [], "NV8"], [[1376, 1376], "disallowed"], [[1377, 1414], "valid"], [[1415, 1415], "mapped", [1381, 1410]], [[1416, 1416], "disallowed"], [[1417, 1417], "valid", [], "NV8"], [[1418, 1418], "valid", [], "NV8"], [[1419, 1420], "disallowed"], [[1421, 1422], "valid", [], "NV8"], [[1423, 1423], "valid", [], "NV8"], [[1424, 1424], "disallowed"], [[1425, 1441], "valid"], [[1442, 1442], "valid"], [[1443, 1455], "valid"], [[1456, 1465], "valid"], [[1466, 1466], "valid"], [[1467, 1469], "valid"], [[1470, 1470], "valid", [], "NV8"], [[1471, 1471], "valid"], [[1472, 1472], "valid", [], "NV8"], [[1473, 1474], "valid"], [[1475, 1475], "valid", [], "NV8"], [[1476, 1476], "valid"], [[1477, 1477], "valid"], [[1478, 1478], "valid", [], "NV8"], [[1479, 1479], "valid"], [[1480, 1487], "disallowed"], [[1488, 1514], "valid"], [[1515, 1519], "disallowed"], [[1520, 1524], "valid"], [[1525, 1535], "disallowed"], [[1536, 1539], "disallowed"], [[1540, 1540], "disallowed"], [[1541, 1541], "disallowed"], [[1542, 1546], "valid", [], "NV8"], [[1547, 1547], "valid", [], "NV8"], [[1548, 1548], "valid", [], "NV8"], [[1549, 1551], "valid", [], "NV8"], [[1552, 1557], "valid"], [[1558, 1562], "valid"], [[1563, 1563], "valid", [], "NV8"], [[1564, 1564], "disallowed"], [[1565, 1565], "disallowed"], [[1566, 1566], "valid", [], "NV8"], [[1567, 1567], "valid", [], "NV8"], [[1568, 1568], "valid"], [[1569, 1594], "valid"], [[1595, 1599], "valid"], [[1600, 1600], "valid", [], "NV8"], [[1601, 1618], "valid"], [[1619, 1621], "valid"], [[1622, 1624], "valid"], [[1625, 1630], "valid"], [[1631, 1631], "valid"], [[1632, 1641], "valid"], [[1642, 1645], "valid", [], "NV8"], [[1646, 1647], "valid"], [[1648, 1652], "valid"], [[1653, 1653], "mapped", [1575, 1652]], [[1654, 1654], "mapped", [1608, 1652]], [[1655, 1655], "mapped", [1735, 1652]], [[1656, 1656], "mapped", [1610, 1652]], [[1657, 1719], "valid"], [[1720, 1721], "valid"], [[1722, 1726], "valid"], [[1727, 1727], "valid"], [[1728, 1742], "valid"], [[1743, 1743], "valid"], [[1744, 1747], "valid"], [[1748, 1748], "valid", [], "NV8"], [[1749, 1756], "valid"], [[1757, 1757], "disallowed"], [[1758, 1758], "valid", [], "NV8"], [[1759, 1768], "valid"], [[1769, 1769], "valid", [], "NV8"], [[1770, 1773], "valid"], [[1774, 1775], "valid"], [[1776, 1785], "valid"], [[1786, 1790], "valid"], [[1791, 1791], "valid"], [[1792, 1805], "valid", [], "NV8"], [[1806, 1806], "disallowed"], [[1807, 1807], "disallowed"], [[1808, 1836], "valid"], [[1837, 1839], "valid"], [[1840, 1866], "valid"], [[1867, 1868], "disallowed"], [[1869, 1871], "valid"], [[1872, 1901], "valid"], [[1902, 1919], "valid"], [[1920, 1968], "valid"], [[1969, 1969], "valid"], [[1970, 1983], "disallowed"], [[1984, 2037], "valid"], [[2038, 2042], "valid", [], "NV8"], [[2043, 2047], "disallowed"], [[2048, 2093], "valid"], [[2094, 2095], "disallowed"], [[2096, 2110], "valid", [], "NV8"], [[2111, 2111], "disallowed"], [[2112, 2139], "valid"], [[2140, 2141], "disallowed"], [[2142, 2142], "valid", [], "NV8"], [[2143, 2207], "disallowed"], [[2208, 2208], "valid"], [[2209, 2209], "valid"], [[2210, 2220], "valid"], [[2221, 2226], "valid"], [[2227, 2228], "valid"], [[2229, 2274], "disallowed"], [[2275, 2275], "valid"], [[2276, 2302], "valid"], [[2303, 2303], "valid"], [[2304, 2304], "valid"], [[2305, 2307], "valid"], [[2308, 2308], "valid"], [[2309, 2361], "valid"], [[2362, 2363], "valid"], [[2364, 2381], "valid"], [[2382, 2382], "valid"], [[2383, 2383], "valid"], [[2384, 2388], "valid"], [[2389, 2389], "valid"], [[2390, 2391], "valid"], [[2392, 2392], "mapped", [2325, 2364]], [[2393, 2393], "mapped", [2326, 2364]], [[2394, 2394], "mapped", [2327, 2364]], [[2395, 2395], "mapped", [2332, 2364]], [[2396, 2396], "mapped", [2337, 2364]], [[2397, 2397], "mapped", [2338, 2364]], [[2398, 2398], "mapped", [2347, 2364]], [[2399, 2399], "mapped", [2351, 2364]], [[2400, 2403], "valid"], [[2404, 2405], "valid", [], "NV8"], [[2406, 2415], "valid"], [[2416, 2416], "valid", [], "NV8"], [[2417, 2418], "valid"], [[2419, 2423], "valid"], [[2424, 2424], "valid"], [[2425, 2426], "valid"], [[2427, 2428], "valid"], [[2429, 2429], "valid"], [[2430, 2431], "valid"], [[2432, 2432], "valid"], [[2433, 2435], "valid"], [[2436, 2436], "disallowed"], [[2437, 2444], "valid"], [[2445, 2446], "disallowed"], [[2447, 2448], "valid"], [[2449, 2450], "disallowed"], [[2451, 2472], "valid"], [[2473, 2473], "disallowed"], [[2474, 2480], "valid"], [[2481, 2481], "disallowed"], [[2482, 2482], "valid"], [[2483, 2485], "disallowed"], [[2486, 2489], "valid"], [[2490, 2491], "disallowed"], [[2492, 2492], "valid"], [[2493, 2493], "valid"], [[2494, 2500], "valid"], [[2501, 2502], "disallowed"], [[2503, 2504], "valid"], [[2505, 2506], "disallowed"], [[2507, 2509], "valid"], [[2510, 2510], "valid"], [[2511, 2518], "disallowed"], [[2519, 2519], "valid"], [[2520, 2523], "disallowed"], [[2524, 2524], "mapped", [2465, 2492]], [[2525, 2525], "mapped", [2466, 2492]], [[2526, 2526], "disallowed"], [[2527, 2527], "mapped", [2479, 2492]], [[2528, 2531], "valid"], [[2532, 2533], "disallowed"], [[2534, 2545], "valid"], [[2546, 2554], "valid", [], "NV8"], [[2555, 2555], "valid", [], "NV8"], [[2556, 2560], "disallowed"], [[2561, 2561], "valid"], [[2562, 2562], "valid"], [[2563, 2563], "valid"], [[2564, 2564], "disallowed"], [[2565, 2570], "valid"], [[2571, 2574], "disallowed"], [[2575, 2576], "valid"], [[2577, 2578], "disallowed"], [[2579, 2600], "valid"], [[2601, 2601], "disallowed"], [[2602, 2608], "valid"], [[2609, 2609], "disallowed"], [[2610, 2610], "valid"], [[2611, 2611], "mapped", [2610, 2620]], [[2612, 2612], "disallowed"], [[2613, 2613], "valid"], [[2614, 2614], "mapped", [2616, 2620]], [[2615, 2615], "disallowed"], [[2616, 2617], "valid"], [[2618, 2619], "disallowed"], [[2620, 2620], "valid"], [[2621, 2621], "disallowed"], [[2622, 2626], "valid"], [[2627, 2630], "disallowed"], [[2631, 2632], "valid"], [[2633, 2634], "disallowed"], [[2635, 2637], "valid"], [[2638, 2640], "disallowed"], [[2641, 2641], "valid"], [[2642, 2648], "disallowed"], [[2649, 2649], "mapped", [2582, 2620]], [[2650, 2650], "mapped", [2583, 2620]], [[2651, 2651], "mapped", [2588, 2620]], [[2652, 2652], "valid"], [[2653, 2653], "disallowed"], [[2654, 2654], "mapped", [2603, 2620]], [[2655, 2661], "disallowed"], [[2662, 2676], "valid"], [[2677, 2677], "valid"], [[2678, 2688], "disallowed"], [[2689, 2691], "valid"], [[2692, 2692], "disallowed"], [[2693, 2699], "valid"], [[2700, 2700], "valid"], [[2701, 2701], "valid"], [[2702, 2702], "disallowed"], [[2703, 2705], "valid"], [[2706, 2706], "disallowed"], [[2707, 2728], "valid"], [[2729, 2729], "disallowed"], [[2730, 2736], "valid"], [[2737, 2737], "disallowed"], [[2738, 2739], "valid"], [[2740, 2740], "disallowed"], [[2741, 2745], "valid"], [[2746, 2747], "disallowed"], [[2748, 2757], "valid"], [[2758, 2758], "disallowed"], [[2759, 2761], "valid"], [[2762, 2762], "disallowed"], [[2763, 2765], "valid"], [[2766, 2767], "disallowed"], [[2768, 2768], "valid"], [[2769, 2783], "disallowed"], [[2784, 2784], "valid"], [[2785, 2787], "valid"], [[2788, 2789], "disallowed"], [[2790, 2799], "valid"], [[2800, 2800], "valid", [], "NV8"], [[2801, 2801], "valid", [], "NV8"], [[2802, 2808], "disallowed"], [[2809, 2809], "valid"], [[2810, 2816], "disallowed"], [[2817, 2819], "valid"], [[2820, 2820], "disallowed"], [[2821, 2828], "valid"], [[2829, 2830], "disallowed"], [[2831, 2832], "valid"], [[2833, 2834], "disallowed"], [[2835, 2856], "valid"], [[2857, 2857], "disallowed"], [[2858, 2864], "valid"], [[2865, 2865], "disallowed"], [[2866, 2867], "valid"], [[2868, 2868], "disallowed"], [[2869, 2869], "valid"], [[2870, 2873], "valid"], [[2874, 2875], "disallowed"], [[2876, 2883], "valid"], [[2884, 2884], "valid"], [[2885, 2886], "disallowed"], [[2887, 2888], "valid"], [[2889, 2890], "disallowed"], [[2891, 2893], "valid"], [[2894, 2901], "disallowed"], [[2902, 2903], "valid"], [[2904, 2907], "disallowed"], [[2908, 2908], "mapped", [2849, 2876]], [[2909, 2909], "mapped", [2850, 2876]], [[2910, 2910], "disallowed"], [[2911, 2913], "valid"], [[2914, 2915], "valid"], [[2916, 2917], "disallowed"], [[2918, 2927], "valid"], [[2928, 2928], "valid", [], "NV8"], [[2929, 2929], "valid"], [[2930, 2935], "valid", [], "NV8"], [[2936, 2945], "disallowed"], [[2946, 2947], "valid"], [[2948, 2948], "disallowed"], [[2949, 2954], "valid"], [[2955, 2957], "disallowed"], [[2958, 2960], "valid"], [[2961, 2961], "disallowed"], [[2962, 2965], "valid"], [[2966, 2968], "disallowed"], [[2969, 2970], "valid"], [[2971, 2971], "disallowed"], [[2972, 2972], "valid"], [[2973, 2973], "disallowed"], [[2974, 2975], "valid"], [[2976, 2978], "disallowed"], [[2979, 2980], "valid"], [[2981, 2983], "disallowed"], [[2984, 2986], "valid"], [[2987, 2989], "disallowed"], [[2990, 2997], "valid"], [[2998, 2998], "valid"], [[2999, 3001], "valid"], [[3002, 3005], "disallowed"], [[3006, 3010], "valid"], [[3011, 3013], "disallowed"], [[3014, 3016], "valid"], [[3017, 3017], "disallowed"], [[3018, 3021], "valid"], [[3022, 3023], "disallowed"], [[3024, 3024], "valid"], [[3025, 3030], "disallowed"], [[3031, 3031], "valid"], [[3032, 3045], "disallowed"], [[3046, 3046], "valid"], [[3047, 3055], "valid"], [[3056, 3058], "valid", [], "NV8"], [[3059, 3066], "valid", [], "NV8"], [[3067, 3071], "disallowed"], [[3072, 3072], "valid"], [[3073, 3075], "valid"], [[3076, 3076], "disallowed"], [[3077, 3084], "valid"], [[3085, 3085], "disallowed"], [[3086, 3088], "valid"], [[3089, 3089], "disallowed"], [[3090, 3112], "valid"], [[3113, 3113], "disallowed"], [[3114, 3123], "valid"], [[3124, 3124], "valid"], [[3125, 3129], "valid"], [[3130, 3132], "disallowed"], [[3133, 3133], "valid"], [[3134, 3140], "valid"], [[3141, 3141], "disallowed"], [[3142, 3144], "valid"], [[3145, 3145], "disallowed"], [[3146, 3149], "valid"], [[3150, 3156], "disallowed"], [[3157, 3158], "valid"], [[3159, 3159], "disallowed"], [[3160, 3161], "valid"], [[3162, 3162], "valid"], [[3163, 3167], "disallowed"], [[3168, 3169], "valid"], [[3170, 3171], "valid"], [[3172, 3173], "disallowed"], [[3174, 3183], "valid"], [[3184, 3191], "disallowed"], [[3192, 3199], "valid", [], "NV8"], [[3200, 3200], "disallowed"], [[3201, 3201], "valid"], [[3202, 3203], "valid"], [[3204, 3204], "disallowed"], [[3205, 3212], "valid"], [[3213, 3213], "disallowed"], [[3214, 3216], "valid"], [[3217, 3217], "disallowed"], [[3218, 3240], "valid"], [[3241, 3241], "disallowed"], [[3242, 3251], "valid"], [[3252, 3252], "disallowed"], [[3253, 3257], "valid"], [[3258, 3259], "disallowed"], [[3260, 3261], "valid"], [[3262, 3268], "valid"], [[3269, 3269], "disallowed"], [[3270, 3272], "valid"], [[3273, 3273], "disallowed"], [[3274, 3277], "valid"], [[3278, 3284], "disallowed"], [[3285, 3286], "valid"], [[3287, 3293], "disallowed"], [[3294, 3294], "valid"], [[3295, 3295], "disallowed"], [[3296, 3297], "valid"], [[3298, 3299], "valid"], [[3300, 3301], "disallowed"], [[3302, 3311], "valid"], [[3312, 3312], "disallowed"], [[3313, 3314], "valid"], [[3315, 3328], "disallowed"], [[3329, 3329], "valid"], [[3330, 3331], "valid"], [[3332, 3332], "disallowed"], [[3333, 3340], "valid"], [[3341, 3341], "disallowed"], [[3342, 3344], "valid"], [[3345, 3345], "disallowed"], [[3346, 3368], "valid"], [[3369, 3369], "valid"], [[3370, 3385], "valid"], [[3386, 3386], "valid"], [[3387, 3388], "disallowed"], [[3389, 3389], "valid"], [[3390, 3395], "valid"], [[3396, 3396], "valid"], [[3397, 3397], "disallowed"], [[3398, 3400], "valid"], [[3401, 3401], "disallowed"], [[3402, 3405], "valid"], [[3406, 3406], "valid"], [[3407, 3414], "disallowed"], [[3415, 3415], "valid"], [[3416, 3422], "disallowed"], [[3423, 3423], "valid"], [[3424, 3425], "valid"], [[3426, 3427], "valid"], [[3428, 3429], "disallowed"], [[3430, 3439], "valid"], [[3440, 3445], "valid", [], "NV8"], [[3446, 3448], "disallowed"], [[3449, 3449], "valid", [], "NV8"], [[3450, 3455], "valid"], [[3456, 3457], "disallowed"], [[3458, 3459], "valid"], [[3460, 3460], "disallowed"], [[3461, 3478], "valid"], [[3479, 3481], "disallowed"], [[3482, 3505], "valid"], [[3506, 3506], "disallowed"], [[3507, 3515], "valid"], [[3516, 3516], "disallowed"], [[3517, 3517], "valid"], [[3518, 3519], "disallowed"], [[3520, 3526], "valid"], [[3527, 3529], "disallowed"], [[3530, 3530], "valid"], [[3531, 3534], "disallowed"], [[3535, 3540], "valid"], [[3541, 3541], "disallowed"], [[3542, 3542], "valid"], [[3543, 3543], "disallowed"], [[3544, 3551], "valid"], [[3552, 3557], "disallowed"], [[3558, 3567], "valid"], [[3568, 3569], "disallowed"], [[3570, 3571], "valid"], [[3572, 3572], "valid", [], "NV8"], [[3573, 3584], "disallowed"], [[3585, 3634], "valid"], [[3635, 3635], "mapped", [3661, 3634]], [[3636, 3642], "valid"], [[3643, 3646], "disallowed"], [[3647, 3647], "valid", [], "NV8"], [[3648, 3662], "valid"], [[3663, 3663], "valid", [], "NV8"], [[3664, 3673], "valid"], [[3674, 3675], "valid", [], "NV8"], [[3676, 3712], "disallowed"], [[3713, 3714], "valid"], [[3715, 3715], "disallowed"], [[3716, 3716], "valid"], [[3717, 3718], "disallowed"], [[3719, 3720], "valid"], [[3721, 3721], "disallowed"], [[3722, 3722], "valid"], [[3723, 3724], "disallowed"], [[3725, 3725], "valid"], [[3726, 3731], "disallowed"], [[3732, 3735], "valid"], [[3736, 3736], "disallowed"], [[3737, 3743], "valid"], [[3744, 3744], "disallowed"], [[3745, 3747], "valid"], [[3748, 3748], "disallowed"], [[3749, 3749], "valid"], [[3750, 3750], "disallowed"], [[3751, 3751], "valid"], [[3752, 3753], "disallowed"], [[3754, 3755], "valid"], [[3756, 3756], "disallowed"], [[3757, 3762], "valid"], [[3763, 3763], "mapped", [3789, 3762]], [[3764, 3769], "valid"], [[3770, 3770], "disallowed"], [[3771, 3773], "valid"], [[3774, 3775], "disallowed"], [[3776, 3780], "valid"], [[3781, 3781], "disallowed"], [[3782, 3782], "valid"], [[3783, 3783], "disallowed"], [[3784, 3789], "valid"], [[3790, 3791], "disallowed"], [[3792, 3801], "valid"], [[3802, 3803], "disallowed"], [[3804, 3804], "mapped", [3755, 3737]], [[3805, 3805], "mapped", [3755, 3745]], [[3806, 3807], "valid"], [[3808, 3839], "disallowed"], [[3840, 3840], "valid"], [[3841, 3850], "valid", [], "NV8"], [[3851, 3851], "valid"], [[3852, 3852], "mapped", [3851]], [[3853, 3863], "valid", [], "NV8"], [[3864, 3865], "valid"], [[3866, 3871], "valid", [], "NV8"], [[3872, 3881], "valid"], [[3882, 3892], "valid", [], "NV8"], [[3893, 3893], "valid"], [[3894, 3894], "valid", [], "NV8"], [[3895, 3895], "valid"], [[3896, 3896], "valid", [], "NV8"], [[3897, 3897], "valid"], [[3898, 3901], "valid", [], "NV8"], [[3902, 3906], "valid"], [[3907, 3907], "mapped", [3906, 4023]], [[3908, 3911], "valid"], [[3912, 3912], "disallowed"], [[3913, 3916], "valid"], [[3917, 3917], "mapped", [3916, 4023]], [[3918, 3921], "valid"], [[3922, 3922], "mapped", [3921, 4023]], [[3923, 3926], "valid"], [[3927, 3927], "mapped", [3926, 4023]], [[3928, 3931], "valid"], [[3932, 3932], "mapped", [3931, 4023]], [[3933, 3944], "valid"], [[3945, 3945], "mapped", [3904, 4021]], [[3946, 3946], "valid"], [[3947, 3948], "valid"], [[3949, 3952], "disallowed"], [[3953, 3954], "valid"], [[3955, 3955], "mapped", [3953, 3954]], [[3956, 3956], "valid"], [[3957, 3957], "mapped", [3953, 3956]], [[3958, 3958], "mapped", [4018, 3968]], [[3959, 3959], "mapped", [4018, 3953, 3968]], [[3960, 3960], "mapped", [4019, 3968]], [[3961, 3961], "mapped", [4019, 3953, 3968]], [[3962, 3968], "valid"], [[3969, 3969], "mapped", [3953, 3968]], [[3970, 3972], "valid"], [[3973, 3973], "valid", [], "NV8"], [[3974, 3979], "valid"], [[3980, 3983], "valid"], [[3984, 3986], "valid"], [[3987, 3987], "mapped", [3986, 4023]], [[3988, 3989], "valid"], [[3990, 3990], "valid"], [[3991, 3991], "valid"], [[3992, 3992], "disallowed"], [[3993, 3996], "valid"], [[3997, 3997], "mapped", [3996, 4023]], [[3998, 4001], "valid"], [[4002, 4002], "mapped", [4001, 4023]], [[4003, 4006], "valid"], [[4007, 4007], "mapped", [4006, 4023]], [[4008, 4011], "valid"], [[4012, 4012], "mapped", [4011, 4023]], [[4013, 4013], "valid"], [[4014, 4016], "valid"], [[4017, 4023], "valid"], [[4024, 4024], "valid"], [[4025, 4025], "mapped", [3984, 4021]], [[4026, 4028], "valid"], [[4029, 4029], "disallowed"], [[4030, 4037], "valid", [], "NV8"], [[4038, 4038], "valid"], [[4039, 4044], "valid", [], "NV8"], [[4045, 4045], "disallowed"], [[4046, 4046], "valid", [], "NV8"], [[4047, 4047], "valid", [], "NV8"], [[4048, 4049], "valid", [], "NV8"], [[4050, 4052], "valid", [], "NV8"], [[4053, 4056], "valid", [], "NV8"], [[4057, 4058], "valid", [], "NV8"], [[4059, 4095], "disallowed"], [[4096, 4129], "valid"], [[4130, 4130], "valid"], [[4131, 4135], "valid"], [[4136, 4136], "valid"], [[4137, 4138], "valid"], [[4139, 4139], "valid"], [[4140, 4146], "valid"], [[4147, 4149], "valid"], [[4150, 4153], "valid"], [[4154, 4159], "valid"], [[4160, 4169], "valid"], [[4170, 4175], "valid", [], "NV8"], [[4176, 4185], "valid"], [[4186, 4249], "valid"], [[4250, 4253], "valid"], [[4254, 4255], "valid", [], "NV8"], [[4256, 4293], "disallowed"], [[4294, 4294], "disallowed"], [[4295, 4295], "mapped", [11559]], [[4296, 4300], "disallowed"], [[4301, 4301], "mapped", [11565]], [[4302, 4303], "disallowed"], [[4304, 4342], "valid"], [[4343, 4344], "valid"], [[4345, 4346], "valid"], [[4347, 4347], "valid", [], "NV8"], [[4348, 4348], "mapped", [4316]], [[4349, 4351], "valid"], [[4352, 4441], "valid", [], "NV8"], [[4442, 4446], "valid", [], "NV8"], [[4447, 4448], "disallowed"], [[4449, 4514], "valid", [], "NV8"], [[4515, 4519], "valid", [], "NV8"], [[4520, 4601], "valid", [], "NV8"], [[4602, 4607], "valid", [], "NV8"], [[4608, 4614], "valid"], [[4615, 4615], "valid"], [[4616, 4678], "valid"], [[4679, 4679], "valid"], [[4680, 4680], "valid"], [[4681, 4681], "disallowed"], [[4682, 4685], "valid"], [[4686, 4687], "disallowed"], [[4688, 4694], "valid"], [[4695, 4695], "disallowed"], [[4696, 4696], "valid"], [[4697, 4697], "disallowed"], [[4698, 4701], "valid"], [[4702, 4703], "disallowed"], [[4704, 4742], "valid"], [[4743, 4743], "valid"], [[4744, 4744], "valid"], [[4745, 4745], "disallowed"], [[4746, 4749], "valid"], [[4750, 4751], "disallowed"], [[4752, 4782], "valid"], [[4783, 4783], "valid"], [[4784, 4784], "valid"], [[4785, 4785], "disallowed"], [[4786, 4789], "valid"], [[4790, 4791], "disallowed"], [[4792, 4798], "valid"], [[4799, 4799], "disallowed"], [[4800, 4800], "valid"], [[4801, 4801], "disallowed"], [[4802, 4805], "valid"], [[4806, 4807], "disallowed"], [[4808, 4814], "valid"], [[4815, 4815], "valid"], [[4816, 4822], "valid"], [[4823, 4823], "disallowed"], [[4824, 4846], "valid"], [[4847, 4847], "valid"], [[4848, 4878], "valid"], [[4879, 4879], "valid"], [[4880, 4880], "valid"], [[4881, 4881], "disallowed"], [[4882, 4885], "valid"], [[4886, 4887], "disallowed"], [[4888, 4894], "valid"], [[4895, 4895], "valid"], [[4896, 4934], "valid"], [[4935, 4935], "valid"], [[4936, 4954], "valid"], [[4955, 4956], "disallowed"], [[4957, 4958], "valid"], [[4959, 4959], "valid"], [[4960, 4960], "valid", [], "NV8"], [[4961, 4988], "valid", [], "NV8"], [[4989, 4991], "disallowed"], [[4992, 5007], "valid"], [[5008, 5017], "valid", [], "NV8"], [[5018, 5023], "disallowed"], [[5024, 5108], "valid"], [[5109, 5109], "valid"], [[5110, 5111], "disallowed"], [[5112, 5112], "mapped", [5104]], [[5113, 5113], "mapped", [5105]], [[5114, 5114], "mapped", [5106]], [[5115, 5115], "mapped", [5107]], [[5116, 5116], "mapped", [5108]], [[5117, 5117], "mapped", [5109]], [[5118, 5119], "disallowed"], [[5120, 5120], "valid", [], "NV8"], [[5121, 5740], "valid"], [[5741, 5742], "valid", [], "NV8"], [[5743, 5750], "valid"], [[5751, 5759], "valid"], [[5760, 5760], "disallowed"], [[5761, 5786], "valid"], [[5787, 5788], "valid", [], "NV8"], [[5789, 5791], "disallowed"], [[5792, 5866], "valid"], [[5867, 5872], "valid", [], "NV8"], [[5873, 5880], "valid"], [[5881, 5887], "disallowed"], [[5888, 5900], "valid"], [[5901, 5901], "disallowed"], [[5902, 5908], "valid"], [[5909, 5919], "disallowed"], [[5920, 5940], "valid"], [[5941, 5942], "valid", [], "NV8"], [[5943, 5951], "disallowed"], [[5952, 5971], "valid"], [[5972, 5983], "disallowed"], [[5984, 5996], "valid"], [[5997, 5997], "disallowed"], [[5998, 6e3], "valid"], [[6001, 6001], "disallowed"], [[6002, 6003], "valid"], [[6004, 6015], "disallowed"], [[6016, 6067], "valid"], [[6068, 6069], "disallowed"], [[6070, 6099], "valid"], [[6100, 6102], "valid", [], "NV8"], [[6103, 6103], "valid"], [[6104, 6107], "valid", [], "NV8"], [[6108, 6108], "valid"], [[6109, 6109], "valid"], [[6110, 6111], "disallowed"], [[6112, 6121], "valid"], [[6122, 6127], "disallowed"], [[6128, 6137], "valid", [], "NV8"], [[6138, 6143], "disallowed"], [[6144, 6149], "valid", [], "NV8"], [[6150, 6150], "disallowed"], [[6151, 6154], "valid", [], "NV8"], [[6155, 6157], "ignored"], [[6158, 6158], "disallowed"], [[6159, 6159], "disallowed"], [[6160, 6169], "valid"], [[6170, 6175], "disallowed"], [[6176, 6263], "valid"], [[6264, 6271], "disallowed"], [[6272, 6313], "valid"], [[6314, 6314], "valid"], [[6315, 6319], "disallowed"], [[6320, 6389], "valid"], [[6390, 6399], "disallowed"], [[6400, 6428], "valid"], [[6429, 6430], "valid"], [[6431, 6431], "disallowed"], [[6432, 6443], "valid"], [[6444, 6447], "disallowed"], [[6448, 6459], "valid"], [[6460, 6463], "disallowed"], [[6464, 6464], "valid", [], "NV8"], [[6465, 6467], "disallowed"], [[6468, 6469], "valid", [], "NV8"], [[6470, 6509], "valid"], [[6510, 6511], "disallowed"], [[6512, 6516], "valid"], [[6517, 6527], "disallowed"], [[6528, 6569], "valid"], [[6570, 6571], "valid"], [[6572, 6575], "disallowed"], [[6576, 6601], "valid"], [[6602, 6607], "disallowed"], [[6608, 6617], "valid"], [[6618, 6618], "valid", [], "XV8"], [[6619, 6621], "disallowed"], [[6622, 6623], "valid", [], "NV8"], [[6624, 6655], "valid", [], "NV8"], [[6656, 6683], "valid"], [[6684, 6685], "disallowed"], [[6686, 6687], "valid", [], "NV8"], [[6688, 6750], "valid"], [[6751, 6751], "disallowed"], [[6752, 6780], "valid"], [[6781, 6782], "disallowed"], [[6783, 6793], "valid"], [[6794, 6799], "disallowed"], [[6800, 6809], "valid"], [[6810, 6815], "disallowed"], [[6816, 6822], "valid", [], "NV8"], [[6823, 6823], "valid"], [[6824, 6829], "valid", [], "NV8"], [[6830, 6831], "disallowed"], [[6832, 6845], "valid"], [[6846, 6846], "valid", [], "NV8"], [[6847, 6911], "disallowed"], [[6912, 6987], "valid"], [[6988, 6991], "disallowed"], [[6992, 7001], "valid"], [[7002, 7018], "valid", [], "NV8"], [[7019, 7027], "valid"], [[7028, 7036], "valid", [], "NV8"], [[7037, 7039], "disallowed"], [[7040, 7082], "valid"], [[7083, 7085], "valid"], [[7086, 7097], "valid"], [[7098, 7103], "valid"], [[7104, 7155], "valid"], [[7156, 7163], "disallowed"], [[7164, 7167], "valid", [], "NV8"], [[7168, 7223], "valid"], [[7224, 7226], "disallowed"], [[7227, 7231], "valid", [], "NV8"], [[7232, 7241], "valid"], [[7242, 7244], "disallowed"], [[7245, 7293], "valid"], [[7294, 7295], "valid", [], "NV8"], [[7296, 7359], "disallowed"], [[7360, 7367], "valid", [], "NV8"], [[7368, 7375], "disallowed"], [[7376, 7378], "valid"], [[7379, 7379], "valid", [], "NV8"], [[7380, 7410], "valid"], [[7411, 7414], "valid"], [[7415, 7415], "disallowed"], [[7416, 7417], "valid"], [[7418, 7423], "disallowed"], [[7424, 7467], "valid"], [[7468, 7468], "mapped", [97]], [[7469, 7469], "mapped", [230]], [[7470, 7470], "mapped", [98]], [[7471, 7471], "valid"], [[7472, 7472], "mapped", [100]], [[7473, 7473], "mapped", [101]], [[7474, 7474], "mapped", [477]], [[7475, 7475], "mapped", [103]], [[7476, 7476], "mapped", [104]], [[7477, 7477], "mapped", [105]], [[7478, 7478], "mapped", [106]], [[7479, 7479], "mapped", [107]], [[7480, 7480], "mapped", [108]], [[7481, 7481], "mapped", [109]], [[7482, 7482], "mapped", [110]], [[7483, 7483], "valid"], [[7484, 7484], "mapped", [111]], [[7485, 7485], "mapped", [547]], [[7486, 7486], "mapped", [112]], [[7487, 7487], "mapped", [114]], [[7488, 7488], "mapped", [116]], [[7489, 7489], "mapped", [117]], [[7490, 7490], "mapped", [119]], [[7491, 7491], "mapped", [97]], [[7492, 7492], "mapped", [592]], [[7493, 7493], "mapped", [593]], [[7494, 7494], "mapped", [7426]], [[7495, 7495], "mapped", [98]], [[7496, 7496], "mapped", [100]], [[7497, 7497], "mapped", [101]], [[7498, 7498], "mapped", [601]], [[7499, 7499], "mapped", [603]], [[7500, 7500], "mapped", [604]], [[7501, 7501], "mapped", [103]], [[7502, 7502], "valid"], [[7503, 7503], "mapped", [107]], [[7504, 7504], "mapped", [109]], [[7505, 7505], "mapped", [331]], [[7506, 7506], "mapped", [111]], [[7507, 7507], "mapped", [596]], [[7508, 7508], "mapped", [7446]], [[7509, 7509], "mapped", [7447]], [[7510, 7510], "mapped", [112]], [[7511, 7511], "mapped", [116]], [[7512, 7512], "mapped", [117]], [[7513, 7513], "mapped", [7453]], [[7514, 7514], "mapped", [623]], [[7515, 7515], "mapped", [118]], [[7516, 7516], "mapped", [7461]], [[7517, 7517], "mapped", [946]], [[7518, 7518], "mapped", [947]], [[7519, 7519], "mapped", [948]], [[7520, 7520], "mapped", [966]], [[7521, 7521], "mapped", [967]], [[7522, 7522], "mapped", [105]], [[7523, 7523], "mapped", [114]], [[7524, 7524], "mapped", [117]], [[7525, 7525], "mapped", [118]], [[7526, 7526], "mapped", [946]], [[7527, 7527], "mapped", [947]], [[7528, 7528], "mapped", [961]], [[7529, 7529], "mapped", [966]], [[7530, 7530], "mapped", [967]], [[7531, 7531], "valid"], [[7532, 7543], "valid"], [[7544, 7544], "mapped", [1085]], [[7545, 7578], "valid"], [[7579, 7579], "mapped", [594]], [[7580, 7580], "mapped", [99]], [[7581, 7581], "mapped", [597]], [[7582, 7582], "mapped", [240]], [[7583, 7583], "mapped", [604]], [[7584, 7584], "mapped", [102]], [[7585, 7585], "mapped", [607]], [[7586, 7586], "mapped", [609]], [[7587, 7587], "mapped", [613]], [[7588, 7588], "mapped", [616]], [[7589, 7589], "mapped", [617]], [[7590, 7590], "mapped", [618]], [[7591, 7591], "mapped", [7547]], [[7592, 7592], "mapped", [669]], [[7593, 7593], "mapped", [621]], [[7594, 7594], "mapped", [7557]], [[7595, 7595], "mapped", [671]], [[7596, 7596], "mapped", [625]], [[7597, 7597], "mapped", [624]], [[7598, 7598], "mapped", [626]], [[7599, 7599], "mapped", [627]], [[7600, 7600], "mapped", [628]], [[7601, 7601], "mapped", [629]], [[7602, 7602], "mapped", [632]], [[7603, 7603], "mapped", [642]], [[7604, 7604], "mapped", [643]], [[7605, 7605], "mapped", [427]], [[7606, 7606], "mapped", [649]], [[7607, 7607], "mapped", [650]], [[7608, 7608], "mapped", [7452]], [[7609, 7609], "mapped", [651]], [[7610, 7610], "mapped", [652]], [[7611, 7611], "mapped", [122]], [[7612, 7612], "mapped", [656]], [[7613, 7613], "mapped", [657]], [[7614, 7614], "mapped", [658]], [[7615, 7615], "mapped", [952]], [[7616, 7619], "valid"], [[7620, 7626], "valid"], [[7627, 7654], "valid"], [[7655, 7669], "valid"], [[7670, 7675], "disallowed"], [[7676, 7676], "valid"], [[7677, 7677], "valid"], [[7678, 7679], "valid"], [[7680, 7680], "mapped", [7681]], [[7681, 7681], "valid"], [[7682, 7682], "mapped", [7683]], [[7683, 7683], "valid"], [[7684, 7684], "mapped", [7685]], [[7685, 7685], "valid"], [[7686, 7686], "mapped", [7687]], [[7687, 7687], "valid"], [[7688, 7688], "mapped", [7689]], [[7689, 7689], "valid"], [[7690, 7690], "mapped", [7691]], [[7691, 7691], "valid"], [[7692, 7692], "mapped", [7693]], [[7693, 7693], "valid"], [[7694, 7694], "mapped", [7695]], [[7695, 7695], "valid"], [[7696, 7696], "mapped", [7697]], [[7697, 7697], "valid"], [[7698, 7698], "mapped", [7699]], [[7699, 7699], "valid"], [[7700, 7700], "mapped", [7701]], [[7701, 7701], "valid"], [[7702, 7702], "mapped", [7703]], [[7703, 7703], "valid"], [[7704, 7704], "mapped", [7705]], [[7705, 7705], "valid"], [[7706, 7706], "mapped", [7707]], [[7707, 7707], "valid"], [[7708, 7708], "mapped", [7709]], [[7709, 7709], "valid"], [[7710, 7710], "mapped", [7711]], [[7711, 7711], "valid"], [[7712, 7712], "mapped", [7713]], [[7713, 7713], "valid"], [[7714, 7714], "mapped", [7715]], [[7715, 7715], "valid"], [[7716, 7716], "mapped", [7717]], [[7717, 7717], "valid"], [[7718, 7718], "mapped", [7719]], [[7719, 7719], "valid"], [[7720, 7720], "mapped", [7721]], [[7721, 7721], "valid"], [[7722, 7722], "mapped", [7723]], [[7723, 7723], "valid"], [[7724, 7724], "mapped", [7725]], [[7725, 7725], "valid"], [[7726, 7726], "mapped", [7727]], [[7727, 7727], "valid"], [[7728, 7728], "mapped", [7729]], [[7729, 7729], "valid"], [[7730, 7730], "mapped", [7731]], [[7731, 7731], "valid"], [[7732, 7732], "mapped", [7733]], [[7733, 7733], "valid"], [[7734, 7734], "mapped", [7735]], [[7735, 7735], "valid"], [[7736, 7736], "mapped", [7737]], [[7737, 7737], "valid"], [[7738, 7738], "mapped", [7739]], [[7739, 7739], "valid"], [[7740, 7740], "mapped", [7741]], [[7741, 7741], "valid"], [[7742, 7742], "mapped", [7743]], [[7743, 7743], "valid"], [[7744, 7744], "mapped", [7745]], [[7745, 7745], "valid"], [[7746, 7746], "mapped", [7747]], [[7747, 7747], "valid"], [[7748, 7748], "mapped", [7749]], [[7749, 7749], "valid"], [[7750, 7750], "mapped", [7751]], [[7751, 7751], "valid"], [[7752, 7752], "mapped", [7753]], [[7753, 7753], "valid"], [[7754, 7754], "mapped", [7755]], [[7755, 7755], "valid"], [[7756, 7756], "mapped", [7757]], [[7757, 7757], "valid"], [[7758, 7758], "mapped", [7759]], [[7759, 7759], "valid"], [[7760, 7760], "mapped", [7761]], [[7761, 7761], "valid"], [[7762, 7762], "mapped", [7763]], [[7763, 7763], "valid"], [[7764, 7764], "mapped", [7765]], [[7765, 7765], "valid"], [[7766, 7766], "mapped", [7767]], [[7767, 7767], "valid"], [[7768, 7768], "mapped", [7769]], [[7769, 7769], "valid"], [[7770, 7770], "mapped", [7771]], [[7771, 7771], "valid"], [[7772, 7772], "mapped", [7773]], [[7773, 7773], "valid"], [[7774, 7774], "mapped", [7775]], [[7775, 7775], "valid"], [[7776, 7776], "mapped", [7777]], [[7777, 7777], "valid"], [[7778, 7778], "mapped", [7779]], [[7779, 7779], "valid"], [[7780, 7780], "mapped", [7781]], [[7781, 7781], "valid"], [[7782, 7782], "mapped", [7783]], [[7783, 7783], "valid"], [[7784, 7784], "mapped", [7785]], [[7785, 7785], "valid"], [[7786, 7786], "mapped", [7787]], [[7787, 7787], "valid"], [[7788, 7788], "mapped", [7789]], [[7789, 7789], "valid"], [[7790, 7790], "mapped", [7791]], [[7791, 7791], "valid"], [[7792, 7792], "mapped", [7793]], [[7793, 7793], "valid"], [[7794, 7794], "mapped", [7795]], [[7795, 7795], "valid"], [[7796, 7796], "mapped", [7797]], [[7797, 7797], "valid"], [[7798, 7798], "mapped", [7799]], [[7799, 7799], "valid"], [[7800, 7800], "mapped", [7801]], [[7801, 7801], "valid"], [[7802, 7802], "mapped", [7803]], [[7803, 7803], "valid"], [[7804, 7804], "mapped", [7805]], [[7805, 7805], "valid"], [[7806, 7806], "mapped", [7807]], [[7807, 7807], "valid"], [[7808, 7808], "mapped", [7809]], [[7809, 7809], "valid"], [[7810, 7810], "mapped", [7811]], [[7811, 7811], "valid"], [[7812, 7812], "mapped", [7813]], [[7813, 7813], "valid"], [[7814, 7814], "mapped", [7815]], [[7815, 7815], "valid"], [[7816, 7816], "mapped", [7817]], [[7817, 7817], "valid"], [[7818, 7818], "mapped", [7819]], [[7819, 7819], "valid"], [[7820, 7820], "mapped", [7821]], [[7821, 7821], "valid"], [[7822, 7822], "mapped", [7823]], [[7823, 7823], "valid"], [[7824, 7824], "mapped", [7825]], [[7825, 7825], "valid"], [[7826, 7826], "mapped", [7827]], [[7827, 7827], "valid"], [[7828, 7828], "mapped", [7829]], [[7829, 7833], "valid"], [[7834, 7834], "mapped", [97, 702]], [[7835, 7835], "mapped", [7777]], [[7836, 7837], "valid"], [[7838, 7838], "mapped", [115, 115]], [[7839, 7839], "valid"], [[7840, 7840], "mapped", [7841]], [[7841, 7841], "valid"], [[7842, 7842], "mapped", [7843]], [[7843, 7843], "valid"], [[7844, 7844], "mapped", [7845]], [[7845, 7845], "valid"], [[7846, 7846], "mapped", [7847]], [[7847, 7847], "valid"], [[7848, 7848], "mapped", [7849]], [[7849, 7849], "valid"], [[7850, 7850], "mapped", [7851]], [[7851, 7851], "valid"], [[7852, 7852], "mapped", [7853]], [[7853, 7853], "valid"], [[7854, 7854], "mapped", [7855]], [[7855, 7855], "valid"], [[7856, 7856], "mapped", [7857]], [[7857, 7857], "valid"], [[7858, 7858], "mapped", [7859]], [[7859, 7859], "valid"], [[7860, 7860], "mapped", [7861]], [[7861, 7861], "valid"], [[7862, 7862], "mapped", [7863]], [[7863, 7863], "valid"], [[7864, 7864], "mapped", [7865]], [[7865, 7865], "valid"], [[7866, 7866], "mapped", [7867]], [[7867, 7867], "valid"], [[7868, 7868], "mapped", [7869]], [[7869, 7869], "valid"], [[7870, 7870], "mapped", [7871]], [[7871, 7871], "valid"], [[7872, 7872], "mapped", [7873]], [[7873, 7873], "valid"], [[7874, 7874], "mapped", [7875]], [[7875, 7875], "valid"], [[7876, 7876], "mapped", [7877]], [[7877, 7877], "valid"], [[7878, 7878], "mapped", [7879]], [[7879, 7879], "valid"], [[7880, 7880], "mapped", [7881]], [[7881, 7881], "valid"], [[7882, 7882], "mapped", [7883]], [[7883, 7883], "valid"], [[7884, 7884], "mapped", [7885]], [[7885, 7885], "valid"], [[7886, 7886], "mapped", [7887]], [[7887, 7887], "valid"], [[7888, 7888], "mapped", [7889]], [[7889, 7889], "valid"], [[7890, 7890], "mapped", [7891]], [[7891, 7891], "valid"], [[7892, 7892], "mapped", [7893]], [[7893, 7893], "valid"], [[7894, 7894], "mapped", [7895]], [[7895, 7895], "valid"], [[7896, 7896], "mapped", [7897]], [[7897, 7897], "valid"], [[7898, 7898], "mapped", [7899]], [[7899, 7899], "valid"], [[7900, 7900], "mapped", [7901]], [[7901, 7901], "valid"], [[7902, 7902], "mapped", [7903]], [[7903, 7903], "valid"], [[7904, 7904], "mapped", [7905]], [[7905, 7905], "valid"], [[7906, 7906], "mapped", [7907]], [[7907, 7907], "valid"], [[7908, 7908], "mapped", [7909]], [[7909, 7909], "valid"], [[7910, 7910], "mapped", [7911]], [[7911, 7911], "valid"], [[7912, 7912], "mapped", [7913]], [[7913, 7913], "valid"], [[7914, 7914], "mapped", [7915]], [[7915, 7915], "valid"], [[7916, 7916], "mapped", [7917]], [[7917, 7917], "valid"], [[7918, 7918], "mapped", [7919]], [[7919, 7919], "valid"], [[7920, 7920], "mapped", [7921]], [[7921, 7921], "valid"], [[7922, 7922], "mapped", [7923]], [[7923, 7923], "valid"], [[7924, 7924], "mapped", [7925]], [[7925, 7925], "valid"], [[7926, 7926], "mapped", [7927]], [[7927, 7927], "valid"], [[7928, 7928], "mapped", [7929]], [[7929, 7929], "valid"], [[7930, 7930], "mapped", [7931]], [[7931, 7931], "valid"], [[7932, 7932], "mapped", [7933]], [[7933, 7933], "valid"], [[7934, 7934], "mapped", [7935]], [[7935, 7935], "valid"], [[7936, 7943], "valid"], [[7944, 7944], "mapped", [7936]], [[7945, 7945], "mapped", [7937]], [[7946, 7946], "mapped", [7938]], [[7947, 7947], "mapped", [7939]], [[7948, 7948], "mapped", [7940]], [[7949, 7949], "mapped", [7941]], [[7950, 7950], "mapped", [7942]], [[7951, 7951], "mapped", [7943]], [[7952, 7957], "valid"], [[7958, 7959], "disallowed"], [[7960, 7960], "mapped", [7952]], [[7961, 7961], "mapped", [7953]], [[7962, 7962], "mapped", [7954]], [[7963, 7963], "mapped", [7955]], [[7964, 7964], "mapped", [7956]], [[7965, 7965], "mapped", [7957]], [[7966, 7967], "disallowed"], [[7968, 7975], "valid"], [[7976, 7976], "mapped", [7968]], [[7977, 7977], "mapped", [7969]], [[7978, 7978], "mapped", [7970]], [[7979, 7979], "mapped", [7971]], [[7980, 7980], "mapped", [7972]], [[7981, 7981], "mapped", [7973]], [[7982, 7982], "mapped", [7974]], [[7983, 7983], "mapped", [7975]], [[7984, 7991], "valid"], [[7992, 7992], "mapped", [7984]], [[7993, 7993], "mapped", [7985]], [[7994, 7994], "mapped", [7986]], [[7995, 7995], "mapped", [7987]], [[7996, 7996], "mapped", [7988]], [[7997, 7997], "mapped", [7989]], [[7998, 7998], "mapped", [7990]], [[7999, 7999], "mapped", [7991]], [[8e3, 8005], "valid"], [[8006, 8007], "disallowed"], [[8008, 8008], "mapped", [8e3]], [[8009, 8009], "mapped", [8001]], [[8010, 8010], "mapped", [8002]], [[8011, 8011], "mapped", [8003]], [[8012, 8012], "mapped", [8004]], [[8013, 8013], "mapped", [8005]], [[8014, 8015], "disallowed"], [[8016, 8023], "valid"], [[8024, 8024], "disallowed"], [[8025, 8025], "mapped", [8017]], [[8026, 8026], "disallowed"], [[8027, 8027], "mapped", [8019]], [[8028, 8028], "disallowed"], [[8029, 8029], "mapped", [8021]], [[8030, 8030], "disallowed"], [[8031, 8031], "mapped", [8023]], [[8032, 8039], "valid"], [[8040, 8040], "mapped", [8032]], [[8041, 8041], "mapped", [8033]], [[8042, 8042], "mapped", [8034]], [[8043, 8043], "mapped", [8035]], [[8044, 8044], "mapped", [8036]], [[8045, 8045], "mapped", [8037]], [[8046, 8046], "mapped", [8038]], [[8047, 8047], "mapped", [8039]], [[8048, 8048], "valid"], [[8049, 8049], "mapped", [940]], [[8050, 8050], "valid"], [[8051, 8051], "mapped", [941]], [[8052, 8052], "valid"], [[8053, 8053], "mapped", [942]], [[8054, 8054], "valid"], [[8055, 8055], "mapped", [943]], [[8056, 8056], "valid"], [[8057, 8057], "mapped", [972]], [[8058, 8058], "valid"], [[8059, 8059], "mapped", [973]], [[8060, 8060], "valid"], [[8061, 8061], "mapped", [974]], [[8062, 8063], "disallowed"], [[8064, 8064], "mapped", [7936, 953]], [[8065, 8065], "mapped", [7937, 953]], [[8066, 8066], "mapped", [7938, 953]], [[8067, 8067], "mapped", [7939, 953]], [[8068, 8068], "mapped", [7940, 953]], [[8069, 8069], "mapped", [7941, 953]], [[8070, 8070], "mapped", [7942, 953]], [[8071, 8071], "mapped", [7943, 953]], [[8072, 8072], "mapped", [7936, 953]], [[8073, 8073], "mapped", [7937, 953]], [[8074, 8074], "mapped", [7938, 953]], [[8075, 8075], "mapped", [7939, 953]], [[8076, 8076], "mapped", [7940, 953]], [[8077, 8077], "mapped", [7941, 953]], [[8078, 8078], "mapped", [7942, 953]], [[8079, 8079], "mapped", [7943, 953]], [[8080, 8080], "mapped", [7968, 953]], [[8081, 8081], "mapped", [7969, 953]], [[8082, 8082], "mapped", [7970, 953]], [[8083, 8083], "mapped", [7971, 953]], [[8084, 8084], "mapped", [7972, 953]], [[8085, 8085], "mapped", [7973, 953]], [[8086, 8086], "mapped", [7974, 953]], [[8087, 8087], "mapped", [7975, 953]], [[8088, 8088], "mapped", [7968, 953]], [[8089, 8089], "mapped", [7969, 953]], [[8090, 8090], "mapped", [7970, 953]], [[8091, 8091], "mapped", [7971, 953]], [[8092, 8092], "mapped", [7972, 953]], [[8093, 8093], "mapped", [7973, 953]], [[8094, 8094], "mapped", [7974, 953]], [[8095, 8095], "mapped", [7975, 953]], [[8096, 8096], "mapped", [8032, 953]], [[8097, 8097], "mapped", [8033, 953]], [[8098, 8098], "mapped", [8034, 953]], [[8099, 8099], "mapped", [8035, 953]], [[8100, 8100], "mapped", [8036, 953]], [[8101, 8101], "mapped", [8037, 953]], [[8102, 8102], "mapped", [8038, 953]], [[8103, 8103], "mapped", [8039, 953]], [[8104, 8104], "mapped", [8032, 953]], [[8105, 8105], "mapped", [8033, 953]], [[8106, 8106], "mapped", [8034, 953]], [[8107, 8107], "mapped", [8035, 953]], [[8108, 8108], "mapped", [8036, 953]], [[8109, 8109], "mapped", [8037, 953]], [[8110, 8110], "mapped", [8038, 953]], [[8111, 8111], "mapped", [8039, 953]], [[8112, 8113], "valid"], [[8114, 8114], "mapped", [8048, 953]], [[8115, 8115], "mapped", [945, 953]], [[8116, 8116], "mapped", [940, 953]], [[8117, 8117], "disallowed"], [[8118, 8118], "valid"], [[8119, 8119], "mapped", [8118, 953]], [[8120, 8120], "mapped", [8112]], [[8121, 8121], "mapped", [8113]], [[8122, 8122], "mapped", [8048]], [[8123, 8123], "mapped", [940]], [[8124, 8124], "mapped", [945, 953]], [[8125, 8125], "disallowed_STD3_mapped", [32, 787]], [[8126, 8126], "mapped", [953]], [[8127, 8127], "disallowed_STD3_mapped", [32, 787]], [[8128, 8128], "disallowed_STD3_mapped", [32, 834]], [[8129, 8129], "disallowed_STD3_mapped", [32, 776, 834]], [[8130, 8130], "mapped", [8052, 953]], [[8131, 8131], "mapped", [951, 953]], [[8132, 8132], "mapped", [942, 953]], [[8133, 8133], "disallowed"], [[8134, 8134], "valid"], [[8135, 8135], "mapped", [8134, 953]], [[8136, 8136], "mapped", [8050]], [[8137, 8137], "mapped", [941]], [[8138, 8138], "mapped", [8052]], [[8139, 8139], "mapped", [942]], [[8140, 8140], "mapped", [951, 953]], [[8141, 8141], "disallowed_STD3_mapped", [32, 787, 768]], [[8142, 8142], "disallowed_STD3_mapped", [32, 787, 769]], [[8143, 8143], "disallowed_STD3_mapped", [32, 787, 834]], [[8144, 8146], "valid"], [[8147, 8147], "mapped", [912]], [[8148, 8149], "disallowed"], [[8150, 8151], "valid"], [[8152, 8152], "mapped", [8144]], [[8153, 8153], "mapped", [8145]], [[8154, 8154], "mapped", [8054]], [[8155, 8155], "mapped", [943]], [[8156, 8156], "disallowed"], [[8157, 8157], "disallowed_STD3_mapped", [32, 788, 768]], [[8158, 8158], "disallowed_STD3_mapped", [32, 788, 769]], [[8159, 8159], "disallowed_STD3_mapped", [32, 788, 834]], [[8160, 8162], "valid"], [[8163, 8163], "mapped", [944]], [[8164, 8167], "valid"], [[8168, 8168], "mapped", [8160]], [[8169, 8169], "mapped", [8161]], [[8170, 8170], "mapped", [8058]], [[8171, 8171], "mapped", [973]], [[8172, 8172], "mapped", [8165]], [[8173, 8173], "disallowed_STD3_mapped", [32, 776, 768]], [[8174, 8174], "disallowed_STD3_mapped", [32, 776, 769]], [[8175, 8175], "disallowed_STD3_mapped", [96]], [[8176, 8177], "disallowed"], [[8178, 8178], "mapped", [8060, 953]], [[8179, 8179], "mapped", [969, 953]], [[8180, 8180], "mapped", [974, 953]], [[8181, 8181], "disallowed"], [[8182, 8182], "valid"], [[8183, 8183], "mapped", [8182, 953]], [[8184, 8184], "mapped", [8056]], [[8185, 8185], "mapped", [972]], [[8186, 8186], "mapped", [8060]], [[8187, 8187], "mapped", [974]], [[8188, 8188], "mapped", [969, 953]], [[8189, 8189], "disallowed_STD3_mapped", [32, 769]], [[8190, 8190], "disallowed_STD3_mapped", [32, 788]], [[8191, 8191], "disallowed"], [[8192, 8202], "disallowed_STD3_mapped", [32]], [[8203, 8203], "ignored"], [[8204, 8205], "deviation", []], [[8206, 8207], "disallowed"], [[8208, 8208], "valid", [], "NV8"], [[8209, 8209], "mapped", [8208]], [[8210, 8214], "valid", [], "NV8"], [[8215, 8215], "disallowed_STD3_mapped", [32, 819]], [[8216, 8227], "valid", [], "NV8"], [[8228, 8230], "disallowed"], [[8231, 8231], "valid", [], "NV8"], [[8232, 8238], "disallowed"], [[8239, 8239], "disallowed_STD3_mapped", [32]], [[8240, 8242], "valid", [], "NV8"], [[8243, 8243], "mapped", [8242, 8242]], [[8244, 8244], "mapped", [8242, 8242, 8242]], [[8245, 8245], "valid", [], "NV8"], [[8246, 8246], "mapped", [8245, 8245]], [[8247, 8247], "mapped", [8245, 8245, 8245]], [[8248, 8251], "valid", [], "NV8"], [[8252, 8252], "disallowed_STD3_mapped", [33, 33]], [[8253, 8253], "valid", [], "NV8"], [[8254, 8254], "disallowed_STD3_mapped", [32, 773]], [[8255, 8262], "valid", [], "NV8"], [[8263, 8263], "disallowed_STD3_mapped", [63, 63]], [[8264, 8264], "disallowed_STD3_mapped", [63, 33]], [[8265, 8265], "disallowed_STD3_mapped", [33, 63]], [[8266, 8269], "valid", [], "NV8"], [[8270, 8274], "valid", [], "NV8"], [[8275, 8276], "valid", [], "NV8"], [[8277, 8278], "valid", [], "NV8"], [[8279, 8279], "mapped", [8242, 8242, 8242, 8242]], [[8280, 8286], "valid", [], "NV8"], [[8287, 8287], "disallowed_STD3_mapped", [32]], [[8288, 8288], "ignored"], [[8289, 8291], "disallowed"], [[8292, 8292], "ignored"], [[8293, 8293], "disallowed"], [[8294, 8297], "disallowed"], [[8298, 8303], "disallowed"], [[8304, 8304], "mapped", [48]], [[8305, 8305], "mapped", [105]], [[8306, 8307], "disallowed"], [[8308, 8308], "mapped", [52]], [[8309, 8309], "mapped", [53]], [[8310, 8310], "mapped", [54]], [[8311, 8311], "mapped", [55]], [[8312, 8312], "mapped", [56]], [[8313, 8313], "mapped", [57]], [[8314, 8314], "disallowed_STD3_mapped", [43]], [[8315, 8315], "mapped", [8722]], [[8316, 8316], "disallowed_STD3_mapped", [61]], [[8317, 8317], "disallowed_STD3_mapped", [40]], [[8318, 8318], "disallowed_STD3_mapped", [41]], [[8319, 8319], "mapped", [110]], [[8320, 8320], "mapped", [48]], [[8321, 8321], "mapped", [49]], [[8322, 8322], "mapped", [50]], [[8323, 8323], "mapped", [51]], [[8324, 8324], "mapped", [52]], [[8325, 8325], "mapped", [53]], [[8326, 8326], "mapped", [54]], [[8327, 8327], "mapped", [55]], [[8328, 8328], "mapped", [56]], [[8329, 8329], "mapped", [57]], [[8330, 8330], "disallowed_STD3_mapped", [43]], [[8331, 8331], "mapped", [8722]], [[8332, 8332], "disallowed_STD3_mapped", [61]], [[8333, 8333], "disallowed_STD3_mapped", [40]], [[8334, 8334], "disallowed_STD3_mapped", [41]], [[8335, 8335], "disallowed"], [[8336, 8336], "mapped", [97]], [[8337, 8337], "mapped", [101]], [[8338, 8338], "mapped", [111]], [[8339, 8339], "mapped", [120]], [[8340, 8340], "mapped", [601]], [[8341, 8341], "mapped", [104]], [[8342, 8342], "mapped", [107]], [[8343, 8343], "mapped", [108]], [[8344, 8344], "mapped", [109]], [[8345, 8345], "mapped", [110]], [[8346, 8346], "mapped", [112]], [[8347, 8347], "mapped", [115]], [[8348, 8348], "mapped", [116]], [[8349, 8351], "disallowed"], [[8352, 8359], "valid", [], "NV8"], [[8360, 8360], "mapped", [114, 115]], [[8361, 8362], "valid", [], "NV8"], [[8363, 8363], "valid", [], "NV8"], [[8364, 8364], "valid", [], "NV8"], [[8365, 8367], "valid", [], "NV8"], [[8368, 8369], "valid", [], "NV8"], [[8370, 8373], "valid", [], "NV8"], [[8374, 8376], "valid", [], "NV8"], [[8377, 8377], "valid", [], "NV8"], [[8378, 8378], "valid", [], "NV8"], [[8379, 8381], "valid", [], "NV8"], [[8382, 8382], "valid", [], "NV8"], [[8383, 8399], "disallowed"], [[8400, 8417], "valid", [], "NV8"], [[8418, 8419], "valid", [], "NV8"], [[8420, 8426], "valid", [], "NV8"], [[8427, 8427], "valid", [], "NV8"], [[8428, 8431], "valid", [], "NV8"], [[8432, 8432], "valid", [], "NV8"], [[8433, 8447], "disallowed"], [[8448, 8448], "disallowed_STD3_mapped", [97, 47, 99]], [[8449, 8449], "disallowed_STD3_mapped", [97, 47, 115]], [[8450, 8450], "mapped", [99]], [[8451, 8451], "mapped", [176, 99]], [[8452, 8452], "valid", [], "NV8"], [[8453, 8453], "disallowed_STD3_mapped", [99, 47, 111]], [[8454, 8454], "disallowed_STD3_mapped", [99, 47, 117]], [[8455, 8455], "mapped", [603]], [[8456, 8456], "valid", [], "NV8"], [[8457, 8457], "mapped", [176, 102]], [[8458, 8458], "mapped", [103]], [[8459, 8462], "mapped", [104]], [[8463, 8463], "mapped", [295]], [[8464, 8465], "mapped", [105]], [[8466, 8467], "mapped", [108]], [[8468, 8468], "valid", [], "NV8"], [[8469, 8469], "mapped", [110]], [[8470, 8470], "mapped", [110, 111]], [[8471, 8472], "valid", [], "NV8"], [[8473, 8473], "mapped", [112]], [[8474, 8474], "mapped", [113]], [[8475, 8477], "mapped", [114]], [[8478, 8479], "valid", [], "NV8"], [[8480, 8480], "mapped", [115, 109]], [[8481, 8481], "mapped", [116, 101, 108]], [[8482, 8482], "mapped", [116, 109]], [[8483, 8483], "valid", [], "NV8"], [[8484, 8484], "mapped", [122]], [[8485, 8485], "valid", [], "NV8"], [[8486, 8486], "mapped", [969]], [[8487, 8487], "valid", [], "NV8"], [[8488, 8488], "mapped", [122]], [[8489, 8489], "valid", [], "NV8"], [[8490, 8490], "mapped", [107]], [[8491, 8491], "mapped", [229]], [[8492, 8492], "mapped", [98]], [[8493, 8493], "mapped", [99]], [[8494, 8494], "valid", [], "NV8"], [[8495, 8496], "mapped", [101]], [[8497, 8497], "mapped", [102]], [[8498, 8498], "disallowed"], [[8499, 8499], "mapped", [109]], [[8500, 8500], "mapped", [111]], [[8501, 8501], "mapped", [1488]], [[8502, 8502], "mapped", [1489]], [[8503, 8503], "mapped", [1490]], [[8504, 8504], "mapped", [1491]], [[8505, 8505], "mapped", [105]], [[8506, 8506], "valid", [], "NV8"], [[8507, 8507], "mapped", [102, 97, 120]], [[8508, 8508], "mapped", [960]], [[8509, 8510], "mapped", [947]], [[8511, 8511], "mapped", [960]], [[8512, 8512], "mapped", [8721]], [[8513, 8516], "valid", [], "NV8"], [[8517, 8518], "mapped", [100]], [[8519, 8519], "mapped", [101]], [[8520, 8520], "mapped", [105]], [[8521, 8521], "mapped", [106]], [[8522, 8523], "valid", [], "NV8"], [[8524, 8524], "valid", [], "NV8"], [[8525, 8525], "valid", [], "NV8"], [[8526, 8526], "valid"], [[8527, 8527], "valid", [], "NV8"], [[8528, 8528], "mapped", [49, 8260, 55]], [[8529, 8529], "mapped", [49, 8260, 57]], [[8530, 8530], "mapped", [49, 8260, 49, 48]], [[8531, 8531], "mapped", [49, 8260, 51]], [[8532, 8532], "mapped", [50, 8260, 51]], [[8533, 8533], "mapped", [49, 8260, 53]], [[8534, 8534], "mapped", [50, 8260, 53]], [[8535, 8535], "mapped", [51, 8260, 53]], [[8536, 8536], "mapped", [52, 8260, 53]], [[8537, 8537], "mapped", [49, 8260, 54]], [[8538, 8538], "mapped", [53, 8260, 54]], [[8539, 8539], "mapped", [49, 8260, 56]], [[8540, 8540], "mapped", [51, 8260, 56]], [[8541, 8541], "mapped", [53, 8260, 56]], [[8542, 8542], "mapped", [55, 8260, 56]], [[8543, 8543], "mapped", [49, 8260]], [[8544, 8544], "mapped", [105]], [[8545, 8545], "mapped", [105, 105]], [[8546, 8546], "mapped", [105, 105, 105]], [[8547, 8547], "mapped", [105, 118]], [[8548, 8548], "mapped", [118]], [[8549, 8549], "mapped", [118, 105]], [[8550, 8550], "mapped", [118, 105, 105]], [[8551, 8551], "mapped", [118, 105, 105, 105]], [[8552, 8552], "mapped", [105, 120]], [[8553, 8553], "mapped", [120]], [[8554, 8554], "mapped", [120, 105]], [[8555, 8555], "mapped", [120, 105, 105]], [[8556, 8556], "mapped", [108]], [[8557, 8557], "mapped", [99]], [[8558, 8558], "mapped", [100]], [[8559, 8559], "mapped", [109]], [[8560, 8560], "mapped", [105]], [[8561, 8561], "mapped", [105, 105]], [[8562, 8562], "mapped", [105, 105, 105]], [[8563, 8563], "mapped", [105, 118]], [[8564, 8564], "mapped", [118]], [[8565, 8565], "mapped", [118, 105]], [[8566, 8566], "mapped", [118, 105, 105]], [[8567, 8567], "mapped", [118, 105, 105, 105]], [[8568, 8568], "mapped", [105, 120]], [[8569, 8569], "mapped", [120]], [[8570, 8570], "mapped", [120, 105]], [[8571, 8571], "mapped", [120, 105, 105]], [[8572, 8572], "mapped", [108]], [[8573, 8573], "mapped", [99]], [[8574, 8574], "mapped", [100]], [[8575, 8575], "mapped", [109]], [[8576, 8578], "valid", [], "NV8"], [[8579, 8579], "disallowed"], [[8580, 8580], "valid"], [[8581, 8584], "valid", [], "NV8"], [[8585, 8585], "mapped", [48, 8260, 51]], [[8586, 8587], "valid", [], "NV8"], [[8588, 8591], "disallowed"], [[8592, 8682], "valid", [], "NV8"], [[8683, 8691], "valid", [], "NV8"], [[8692, 8703], "valid", [], "NV8"], [[8704, 8747], "valid", [], "NV8"], [[8748, 8748], "mapped", [8747, 8747]], [[8749, 8749], "mapped", [8747, 8747, 8747]], [[8750, 8750], "valid", [], "NV8"], [[8751, 8751], "mapped", [8750, 8750]], [[8752, 8752], "mapped", [8750, 8750, 8750]], [[8753, 8799], "valid", [], "NV8"], [[8800, 8800], "disallowed_STD3_valid"], [[8801, 8813], "valid", [], "NV8"], [[8814, 8815], "disallowed_STD3_valid"], [[8816, 8945], "valid", [], "NV8"], [[8946, 8959], "valid", [], "NV8"], [[8960, 8960], "valid", [], "NV8"], [[8961, 8961], "valid", [], "NV8"], [[8962, 9e3], "valid", [], "NV8"], [[9001, 9001], "mapped", [12296]], [[9002, 9002], "mapped", [12297]], [[9003, 9082], "valid", [], "NV8"], [[9083, 9083], "valid", [], "NV8"], [[9084, 9084], "valid", [], "NV8"], [[9085, 9114], "valid", [], "NV8"], [[9115, 9166], "valid", [], "NV8"], [[9167, 9168], "valid", [], "NV8"], [[9169, 9179], "valid", [], "NV8"], [[9180, 9191], "valid", [], "NV8"], [[9192, 9192], "valid", [], "NV8"], [[9193, 9203], "valid", [], "NV8"], [[9204, 9210], "valid", [], "NV8"], [[9211, 9215], "disallowed"], [[9216, 9252], "valid", [], "NV8"], [[9253, 9254], "valid", [], "NV8"], [[9255, 9279], "disallowed"], [[9280, 9290], "valid", [], "NV8"], [[9291, 9311], "disallowed"], [[9312, 9312], "mapped", [49]], [[9313, 9313], "mapped", [50]], [[9314, 9314], "mapped", [51]], [[9315, 9315], "mapped", [52]], [[9316, 9316], "mapped", [53]], [[9317, 9317], "mapped", [54]], [[9318, 9318], "mapped", [55]], [[9319, 9319], "mapped", [56]], [[9320, 9320], "mapped", [57]], [[9321, 9321], "mapped", [49, 48]], [[9322, 9322], "mapped", [49, 49]], [[9323, 9323], "mapped", [49, 50]], [[9324, 9324], "mapped", [49, 51]], [[9325, 9325], "mapped", [49, 52]], [[9326, 9326], "mapped", [49, 53]], [[9327, 9327], "mapped", [49, 54]], [[9328, 9328], "mapped", [49, 55]], [[9329, 9329], "mapped", [49, 56]], [[9330, 9330], "mapped", [49, 57]], [[9331, 9331], "mapped", [50, 48]], [[9332, 9332], "disallowed_STD3_mapped", [40, 49, 41]], [[9333, 9333], "disallowed_STD3_mapped", [40, 50, 41]], [[9334, 9334], "disallowed_STD3_mapped", [40, 51, 41]], [[9335, 9335], "disallowed_STD3_mapped", [40, 52, 41]], [[9336, 9336], "disallowed_STD3_mapped", [40, 53, 41]], [[9337, 9337], "disallowed_STD3_mapped", [40, 54, 41]], [[9338, 9338], "disallowed_STD3_mapped", [40, 55, 41]], [[9339, 9339], "disallowed_STD3_mapped", [40, 56, 41]], [[9340, 9340], "disallowed_STD3_mapped", [40, 57, 41]], [[9341, 9341], "disallowed_STD3_mapped", [40, 49, 48, 41]], [[9342, 9342], "disallowed_STD3_mapped", [40, 49, 49, 41]], [[9343, 9343], "disallowed_STD3_mapped", [40, 49, 50, 41]], [[9344, 9344], "disallowed_STD3_mapped", [40, 49, 51, 41]], [[9345, 9345], "disallowed_STD3_mapped", [40, 49, 52, 41]], [[9346, 9346], "disallowed_STD3_mapped", [40, 49, 53, 41]], [[9347, 9347], "disallowed_STD3_mapped", [40, 49, 54, 41]], [[9348, 9348], "disallowed_STD3_mapped", [40, 49, 55, 41]], [[9349, 9349], "disallowed_STD3_mapped", [40, 49, 56, 41]], [[9350, 9350], "disallowed_STD3_mapped", [40, 49, 57, 41]], [[9351, 9351], "disallowed_STD3_mapped", [40, 50, 48, 41]], [[9352, 9371], "disallowed"], [[9372, 9372], "disallowed_STD3_mapped", [40, 97, 41]], [[9373, 9373], "disallowed_STD3_mapped", [40, 98, 41]], [[9374, 9374], "disallowed_STD3_mapped", [40, 99, 41]], [[9375, 9375], "disallowed_STD3_mapped", [40, 100, 41]], [[9376, 9376], "disallowed_STD3_mapped", [40, 101, 41]], [[9377, 9377], "disallowed_STD3_mapped", [40, 102, 41]], [[9378, 9378], "disallowed_STD3_mapped", [40, 103, 41]], [[9379, 9379], "disallowed_STD3_mapped", [40, 104, 41]], [[9380, 9380], "disallowed_STD3_mapped", [40, 105, 41]], [[9381, 9381], "disallowed_STD3_mapped", [40, 106, 41]], [[9382, 9382], "disallowed_STD3_mapped", [40, 107, 41]], [[9383, 9383], "disallowed_STD3_mapped", [40, 108, 41]], [[9384, 9384], "disallowed_STD3_mapped", [40, 109, 41]], [[9385, 9385], "disallowed_STD3_mapped", [40, 110, 41]], [[9386, 9386], "disallowed_STD3_mapped", [40, 111, 41]], [[9387, 9387], "disallowed_STD3_mapped", [40, 112, 41]], [[9388, 9388], "disallowed_STD3_mapped", [40, 113, 41]], [[9389, 9389], "disallowed_STD3_mapped", [40, 114, 41]], [[9390, 9390], "disallowed_STD3_mapped", [40, 115, 41]], [[9391, 9391], "disallowed_STD3_mapped", [40, 116, 41]], [[9392, 9392], "disallowed_STD3_mapped", [40, 117, 41]], [[9393, 9393], "disallowed_STD3_mapped", [40, 118, 41]], [[9394, 9394], "disallowed_STD3_mapped", [40, 119, 41]], [[9395, 9395], "disallowed_STD3_mapped", [40, 120, 41]], [[9396, 9396], "disallowed_STD3_mapped", [40, 121, 41]], [[9397, 9397], "disallowed_STD3_mapped", [40, 122, 41]], [[9398, 9398], "mapped", [97]], [[9399, 9399], "mapped", [98]], [[9400, 9400], "mapped", [99]], [[9401, 9401], "mapped", [100]], [[9402, 9402], "mapped", [101]], [[9403, 9403], "mapped", [102]], [[9404, 9404], "mapped", [103]], [[9405, 9405], "mapped", [104]], [[9406, 9406], "mapped", [105]], [[9407, 9407], "mapped", [106]], [[9408, 9408], "mapped", [107]], [[9409, 9409], "mapped", [108]], [[9410, 9410], "mapped", [109]], [[9411, 9411], "mapped", [110]], [[9412, 9412], "mapped", [111]], [[9413, 9413], "mapped", [112]], [[9414, 9414], "mapped", [113]], [[9415, 9415], "mapped", [114]], [[9416, 9416], "mapped", [115]], [[9417, 9417], "mapped", [116]], [[9418, 9418], "mapped", [117]], [[9419, 9419], "mapped", [118]], [[9420, 9420], "mapped", [119]], [[9421, 9421], "mapped", [120]], [[9422, 9422], "mapped", [121]], [[9423, 9423], "mapped", [122]], [[9424, 9424], "mapped", [97]], [[9425, 9425], "mapped", [98]], [[9426, 9426], "mapped", [99]], [[9427, 9427], "mapped", [100]], [[9428, 9428], "mapped", [101]], [[9429, 9429], "mapped", [102]], [[9430, 9430], "mapped", [103]], [[9431, 9431], "mapped", [104]], [[9432, 9432], "mapped", [105]], [[9433, 9433], "mapped", [106]], [[9434, 9434], "mapped", [107]], [[9435, 9435], "mapped", [108]], [[9436, 9436], "mapped", [109]], [[9437, 9437], "mapped", [110]], [[9438, 9438], "mapped", [111]], [[9439, 9439], "mapped", [112]], [[9440, 9440], "mapped", [113]], [[9441, 9441], "mapped", [114]], [[9442, 9442], "mapped", [115]], [[9443, 9443], "mapped", [116]], [[9444, 9444], "mapped", [117]], [[9445, 9445], "mapped", [118]], [[9446, 9446], "mapped", [119]], [[9447, 9447], "mapped", [120]], [[9448, 9448], "mapped", [121]], [[9449, 9449], "mapped", [122]], [[9450, 9450], "mapped", [48]], [[9451, 9470], "valid", [], "NV8"], [[9471, 9471], "valid", [], "NV8"], [[9472, 9621], "valid", [], "NV8"], [[9622, 9631], "valid", [], "NV8"], [[9632, 9711], "valid", [], "NV8"], [[9712, 9719], "valid", [], "NV8"], [[9720, 9727], "valid", [], "NV8"], [[9728, 9747], "valid", [], "NV8"], [[9748, 9749], "valid", [], "NV8"], [[9750, 9751], "valid", [], "NV8"], [[9752, 9752], "valid", [], "NV8"], [[9753, 9753], "valid", [], "NV8"], [[9754, 9839], "valid", [], "NV8"], [[9840, 9841], "valid", [], "NV8"], [[9842, 9853], "valid", [], "NV8"], [[9854, 9855], "valid", [], "NV8"], [[9856, 9865], "valid", [], "NV8"], [[9866, 9873], "valid", [], "NV8"], [[9874, 9884], "valid", [], "NV8"], [[9885, 9885], "valid", [], "NV8"], [[9886, 9887], "valid", [], "NV8"], [[9888, 9889], "valid", [], "NV8"], [[9890, 9905], "valid", [], "NV8"], [[9906, 9906], "valid", [], "NV8"], [[9907, 9916], "valid", [], "NV8"], [[9917, 9919], "valid", [], "NV8"], [[9920, 9923], "valid", [], "NV8"], [[9924, 9933], "valid", [], "NV8"], [[9934, 9934], "valid", [], "NV8"], [[9935, 9953], "valid", [], "NV8"], [[9954, 9954], "valid", [], "NV8"], [[9955, 9955], "valid", [], "NV8"], [[9956, 9959], "valid", [], "NV8"], [[9960, 9983], "valid", [], "NV8"], [[9984, 9984], "valid", [], "NV8"], [[9985, 9988], "valid", [], "NV8"], [[9989, 9989], "valid", [], "NV8"], [[9990, 9993], "valid", [], "NV8"], [[9994, 9995], "valid", [], "NV8"], [[9996, 10023], "valid", [], "NV8"], [[10024, 10024], "valid", [], "NV8"], [[10025, 10059], "valid", [], "NV8"], [[10060, 10060], "valid", [], "NV8"], [[10061, 10061], "valid", [], "NV8"], [[10062, 10062], "valid", [], "NV8"], [[10063, 10066], "valid", [], "NV8"], [[10067, 10069], "valid", [], "NV8"], [[10070, 10070], "valid", [], "NV8"], [[10071, 10071], "valid", [], "NV8"], [[10072, 10078], "valid", [], "NV8"], [[10079, 10080], "valid", [], "NV8"], [[10081, 10087], "valid", [], "NV8"], [[10088, 10101], "valid", [], "NV8"], [[10102, 10132], "valid", [], "NV8"], [[10133, 10135], "valid", [], "NV8"], [[10136, 10159], "valid", [], "NV8"], [[10160, 10160], "valid", [], "NV8"], [[10161, 10174], "valid", [], "NV8"], [[10175, 10175], "valid", [], "NV8"], [[10176, 10182], "valid", [], "NV8"], [[10183, 10186], "valid", [], "NV8"], [[10187, 10187], "valid", [], "NV8"], [[10188, 10188], "valid", [], "NV8"], [[10189, 10189], "valid", [], "NV8"], [[10190, 10191], "valid", [], "NV8"], [[10192, 10219], "valid", [], "NV8"], [[10220, 10223], "valid", [], "NV8"], [[10224, 10239], "valid", [], "NV8"], [[10240, 10495], "valid", [], "NV8"], [[10496, 10763], "valid", [], "NV8"], [[10764, 10764], "mapped", [8747, 8747, 8747, 8747]], [[10765, 10867], "valid", [], "NV8"], [[10868, 10868], "disallowed_STD3_mapped", [58, 58, 61]], [[10869, 10869], "disallowed_STD3_mapped", [61, 61]], [[10870, 10870], "disallowed_STD3_mapped", [61, 61, 61]], [[10871, 10971], "valid", [], "NV8"], [[10972, 10972], "mapped", [10973, 824]], [[10973, 11007], "valid", [], "NV8"], [[11008, 11021], "valid", [], "NV8"], [[11022, 11027], "valid", [], "NV8"], [[11028, 11034], "valid", [], "NV8"], [[11035, 11039], "valid", [], "NV8"], [[11040, 11043], "valid", [], "NV8"], [[11044, 11084], "valid", [], "NV8"], [[11085, 11087], "valid", [], "NV8"], [[11088, 11092], "valid", [], "NV8"], [[11093, 11097], "valid", [], "NV8"], [[11098, 11123], "valid", [], "NV8"], [[11124, 11125], "disallowed"], [[11126, 11157], "valid", [], "NV8"], [[11158, 11159], "disallowed"], [[11160, 11193], "valid", [], "NV8"], [[11194, 11196], "disallowed"], [[11197, 11208], "valid", [], "NV8"], [[11209, 11209], "disallowed"], [[11210, 11217], "valid", [], "NV8"], [[11218, 11243], "disallowed"], [[11244, 11247], "valid", [], "NV8"], [[11248, 11263], "disallowed"], [[11264, 11264], "mapped", [11312]], [[11265, 11265], "mapped", [11313]], [[11266, 11266], "mapped", [11314]], [[11267, 11267], "mapped", [11315]], [[11268, 11268], "mapped", [11316]], [[11269, 11269], "mapped", [11317]], [[11270, 11270], "mapped", [11318]], [[11271, 11271], "mapped", [11319]], [[11272, 11272], "mapped", [11320]], [[11273, 11273], "mapped", [11321]], [[11274, 11274], "mapped", [11322]], [[11275, 11275], "mapped", [11323]], [[11276, 11276], "mapped", [11324]], [[11277, 11277], "mapped", [11325]], [[11278, 11278], "mapped", [11326]], [[11279, 11279], "mapped", [11327]], [[11280, 11280], "mapped", [11328]], [[11281, 11281], "mapped", [11329]], [[11282, 11282], "mapped", [11330]], [[11283, 11283], "mapped", [11331]], [[11284, 11284], "mapped", [11332]], [[11285, 11285], "mapped", [11333]], [[11286, 11286], "mapped", [11334]], [[11287, 11287], "mapped", [11335]], [[11288, 11288], "mapped", [11336]], [[11289, 11289], "mapped", [11337]], [[11290, 11290], "mapped", [11338]], [[11291, 11291], "mapped", [11339]], [[11292, 11292], "mapped", [11340]], [[11293, 11293], "mapped", [11341]], [[11294, 11294], "mapped", [11342]], [[11295, 11295], "mapped", [11343]], [[11296, 11296], "mapped", [11344]], [[11297, 11297], "mapped", [11345]], [[11298, 11298], "mapped", [11346]], [[11299, 11299], "mapped", [11347]], [[11300, 11300], "mapped", [11348]], [[11301, 11301], "mapped", [11349]], [[11302, 11302], "mapped", [11350]], [[11303, 11303], "mapped", [11351]], [[11304, 11304], "mapped", [11352]], [[11305, 11305], "mapped", [11353]], [[11306, 11306], "mapped", [11354]], [[11307, 11307], "mapped", [11355]], [[11308, 11308], "mapped", [11356]], [[11309, 11309], "mapped", [11357]], [[11310, 11310], "mapped", [11358]], [[11311, 11311], "disallowed"], [[11312, 11358], "valid"], [[11359, 11359], "disallowed"], [[11360, 11360], "mapped", [11361]], [[11361, 11361], "valid"], [[11362, 11362], "mapped", [619]], [[11363, 11363], "mapped", [7549]], [[11364, 11364], "mapped", [637]], [[11365, 11366], "valid"], [[11367, 11367], "mapped", [11368]], [[11368, 11368], "valid"], [[11369, 11369], "mapped", [11370]], [[11370, 11370], "valid"], [[11371, 11371], "mapped", [11372]], [[11372, 11372], "valid"], [[11373, 11373], "mapped", [593]], [[11374, 11374], "mapped", [625]], [[11375, 11375], "mapped", [592]], [[11376, 11376], "mapped", [594]], [[11377, 11377], "valid"], [[11378, 11378], "mapped", [11379]], [[11379, 11379], "valid"], [[11380, 11380], "valid"], [[11381, 11381], "mapped", [11382]], [[11382, 11383], "valid"], [[11384, 11387], "valid"], [[11388, 11388], "mapped", [106]], [[11389, 11389], "mapped", [118]], [[11390, 11390], "mapped", [575]], [[11391, 11391], "mapped", [576]], [[11392, 11392], "mapped", [11393]], [[11393, 11393], "valid"], [[11394, 11394], "mapped", [11395]], [[11395, 11395], "valid"], [[11396, 11396], "mapped", [11397]], [[11397, 11397], "valid"], [[11398, 11398], "mapped", [11399]], [[11399, 11399], "valid"], [[11400, 11400], "mapped", [11401]], [[11401, 11401], "valid"], [[11402, 11402], "mapped", [11403]], [[11403, 11403], "valid"], [[11404, 11404], "mapped", [11405]], [[11405, 11405], "valid"], [[11406, 11406], "mapped", [11407]], [[11407, 11407], "valid"], [[11408, 11408], "mapped", [11409]], [[11409, 11409], "valid"], [[11410, 11410], "mapped", [11411]], [[11411, 11411], "valid"], [[11412, 11412], "mapped", [11413]], [[11413, 11413], "valid"], [[11414, 11414], "mapped", [11415]], [[11415, 11415], "valid"], [[11416, 11416], "mapped", [11417]], [[11417, 11417], "valid"], [[11418, 11418], "mapped", [11419]], [[11419, 11419], "valid"], [[11420, 11420], "mapped", [11421]], [[11421, 11421], "valid"], [[11422, 11422], "mapped", [11423]], [[11423, 11423], "valid"], [[11424, 11424], "mapped", [11425]], [[11425, 11425], "valid"], [[11426, 11426], "mapped", [11427]], [[11427, 11427], "valid"], [[11428, 11428], "mapped", [11429]], [[11429, 11429], "valid"], [[11430, 11430], "mapped", [11431]], [[11431, 11431], "valid"], [[11432, 11432], "mapped", [11433]], [[11433, 11433], "valid"], [[11434, 11434], "mapped", [11435]], [[11435, 11435], "valid"], [[11436, 11436], "mapped", [11437]], [[11437, 11437], "valid"], [[11438, 11438], "mapped", [11439]], [[11439, 11439], "valid"], [[11440, 11440], "mapped", [11441]], [[11441, 11441], "valid"], [[11442, 11442], "mapped", [11443]], [[11443, 11443], "valid"], [[11444, 11444], "mapped", [11445]], [[11445, 11445], "valid"], [[11446, 11446], "mapped", [11447]], [[11447, 11447], "valid"], [[11448, 11448], "mapped", [11449]], [[11449, 11449], "valid"], [[11450, 11450], "mapped", [11451]], [[11451, 11451], "valid"], [[11452, 11452], "mapped", [11453]], [[11453, 11453], "valid"], [[11454, 11454], "mapped", [11455]], [[11455, 11455], "valid"], [[11456, 11456], "mapped", [11457]], [[11457, 11457], "valid"], [[11458, 11458], "mapped", [11459]], [[11459, 11459], "valid"], [[11460, 11460], "mapped", [11461]], [[11461, 11461], "valid"], [[11462, 11462], "mapped", [11463]], [[11463, 11463], "valid"], [[11464, 11464], "mapped", [11465]], [[11465, 11465], "valid"], [[11466, 11466], "mapped", [11467]], [[11467, 11467], "valid"], [[11468, 11468], "mapped", [11469]], [[11469, 11469], "valid"], [[11470, 11470], "mapped", [11471]], [[11471, 11471], "valid"], [[11472, 11472], "mapped", [11473]], [[11473, 11473], "valid"], [[11474, 11474], "mapped", [11475]], [[11475, 11475], "valid"], [[11476, 11476], "mapped", [11477]], [[11477, 11477], "valid"], [[11478, 11478], "mapped", [11479]], [[11479, 11479], "valid"], [[11480, 11480], "mapped", [11481]], [[11481, 11481], "valid"], [[11482, 11482], "mapped", [11483]], [[11483, 11483], "valid"], [[11484, 11484], "mapped", [11485]], [[11485, 11485], "valid"], [[11486, 11486], "mapped", [11487]], [[11487, 11487], "valid"], [[11488, 11488], "mapped", [11489]], [[11489, 11489], "valid"], [[11490, 11490], "mapped", [11491]], [[11491, 11492], "valid"], [[11493, 11498], "valid", [], "NV8"], [[11499, 11499], "mapped", [11500]], [[11500, 11500], "valid"], [[11501, 11501], "mapped", [11502]], [[11502, 11505], "valid"], [[11506, 11506], "mapped", [11507]], [[11507, 11507], "valid"], [[11508, 11512], "disallowed"], [[11513, 11519], "valid", [], "NV8"], [[11520, 11557], "valid"], [[11558, 11558], "disallowed"], [[11559, 11559], "valid"], [[11560, 11564], "disallowed"], [[11565, 11565], "valid"], [[11566, 11567], "disallowed"], [[11568, 11621], "valid"], [[11622, 11623], "valid"], [[11624, 11630], "disallowed"], [[11631, 11631], "mapped", [11617]], [[11632, 11632], "valid", [], "NV8"], [[11633, 11646], "disallowed"], [[11647, 11647], "valid"], [[11648, 11670], "valid"], [[11671, 11679], "disallowed"], [[11680, 11686], "valid"], [[11687, 11687], "disallowed"], [[11688, 11694], "valid"], [[11695, 11695], "disallowed"], [[11696, 11702], "valid"], [[11703, 11703], "disallowed"], [[11704, 11710], "valid"], [[11711, 11711], "disallowed"], [[11712, 11718], "valid"], [[11719, 11719], "disallowed"], [[11720, 11726], "valid"], [[11727, 11727], "disallowed"], [[11728, 11734], "valid"], [[11735, 11735], "disallowed"], [[11736, 11742], "valid"], [[11743, 11743], "disallowed"], [[11744, 11775], "valid"], [[11776, 11799], "valid", [], "NV8"], [[11800, 11803], "valid", [], "NV8"], [[11804, 11805], "valid", [], "NV8"], [[11806, 11822], "valid", [], "NV8"], [[11823, 11823], "valid"], [[11824, 11824], "valid", [], "NV8"], [[11825, 11825], "valid", [], "NV8"], [[11826, 11835], "valid", [], "NV8"], [[11836, 11842], "valid", [], "NV8"], [[11843, 11903], "disallowed"], [[11904, 11929], "valid", [], "NV8"], [[11930, 11930], "disallowed"], [[11931, 11934], "valid", [], "NV8"], [[11935, 11935], "mapped", [27597]], [[11936, 12018], "valid", [], "NV8"], [[12019, 12019], "mapped", [40863]], [[12020, 12031], "disallowed"], [[12032, 12032], "mapped", [19968]], [[12033, 12033], "mapped", [20008]], [[12034, 12034], "mapped", [20022]], [[12035, 12035], "mapped", [20031]], [[12036, 12036], "mapped", [20057]], [[12037, 12037], "mapped", [20101]], [[12038, 12038], "mapped", [20108]], [[12039, 12039], "mapped", [20128]], [[12040, 12040], "mapped", [20154]], [[12041, 12041], "mapped", [20799]], [[12042, 12042], "mapped", [20837]], [[12043, 12043], "mapped", [20843]], [[12044, 12044], "mapped", [20866]], [[12045, 12045], "mapped", [20886]], [[12046, 12046], "mapped", [20907]], [[12047, 12047], "mapped", [20960]], [[12048, 12048], "mapped", [20981]], [[12049, 12049], "mapped", [20992]], [[12050, 12050], "mapped", [21147]], [[12051, 12051], "mapped", [21241]], [[12052, 12052], "mapped", [21269]], [[12053, 12053], "mapped", [21274]], [[12054, 12054], "mapped", [21304]], [[12055, 12055], "mapped", [21313]], [[12056, 12056], "mapped", [21340]], [[12057, 12057], "mapped", [21353]], [[12058, 12058], "mapped", [21378]], [[12059, 12059], "mapped", [21430]], [[12060, 12060], "mapped", [21448]], [[12061, 12061], "mapped", [21475]], [[12062, 12062], "mapped", [22231]], [[12063, 12063], "mapped", [22303]], [[12064, 12064], "mapped", [22763]], [[12065, 12065], "mapped", [22786]], [[12066, 12066], "mapped", [22794]], [[12067, 12067], "mapped", [22805]], [[12068, 12068], "mapped", [22823]], [[12069, 12069], "mapped", [22899]], [[12070, 12070], "mapped", [23376]], [[12071, 12071], "mapped", [23424]], [[12072, 12072], "mapped", [23544]], [[12073, 12073], "mapped", [23567]], [[12074, 12074], "mapped", [23586]], [[12075, 12075], "mapped", [23608]], [[12076, 12076], "mapped", [23662]], [[12077, 12077], "mapped", [23665]], [[12078, 12078], "mapped", [24027]], [[12079, 12079], "mapped", [24037]], [[12080, 12080], "mapped", [24049]], [[12081, 12081], "mapped", [24062]], [[12082, 12082], "mapped", [24178]], [[12083, 12083], "mapped", [24186]], [[12084, 12084], "mapped", [24191]], [[12085, 12085], "mapped", [24308]], [[12086, 12086], "mapped", [24318]], [[12087, 12087], "mapped", [24331]], [[12088, 12088], "mapped", [24339]], [[12089, 12089], "mapped", [24400]], [[12090, 12090], "mapped", [24417]], [[12091, 12091], "mapped", [24435]], [[12092, 12092], "mapped", [24515]], [[12093, 12093], "mapped", [25096]], [[12094, 12094], "mapped", [25142]], [[12095, 12095], "mapped", [25163]], [[12096, 12096], "mapped", [25903]], [[12097, 12097], "mapped", [25908]], [[12098, 12098], "mapped", [25991]], [[12099, 12099], "mapped", [26007]], [[12100, 12100], "mapped", [26020]], [[12101, 12101], "mapped", [26041]], [[12102, 12102], "mapped", [26080]], [[12103, 12103], "mapped", [26085]], [[12104, 12104], "mapped", [26352]], [[12105, 12105], "mapped", [26376]], [[12106, 12106], "mapped", [26408]], [[12107, 12107], "mapped", [27424]], [[12108, 12108], "mapped", [27490]], [[12109, 12109], "mapped", [27513]], [[12110, 12110], "mapped", [27571]], [[12111, 12111], "mapped", [27595]], [[12112, 12112], "mapped", [27604]], [[12113, 12113], "mapped", [27611]], [[12114, 12114], "mapped", [27663]], [[12115, 12115], "mapped", [27668]], [[12116, 12116], "mapped", [27700]], [[12117, 12117], "mapped", [28779]], [[12118, 12118], "mapped", [29226]], [[12119, 12119], "mapped", [29238]], [[12120, 12120], "mapped", [29243]], [[12121, 12121], "mapped", [29247]], [[12122, 12122], "mapped", [29255]], [[12123, 12123], "mapped", [29273]], [[12124, 12124], "mapped", [29275]], [[12125, 12125], "mapped", [29356]], [[12126, 12126], "mapped", [29572]], [[12127, 12127], "mapped", [29577]], [[12128, 12128], "mapped", [29916]], [[12129, 12129], "mapped", [29926]], [[12130, 12130], "mapped", [29976]], [[12131, 12131], "mapped", [29983]], [[12132, 12132], "mapped", [29992]], [[12133, 12133], "mapped", [3e4]], [[12134, 12134], "mapped", [30091]], [[12135, 12135], "mapped", [30098]], [[12136, 12136], "mapped", [30326]], [[12137, 12137], "mapped", [30333]], [[12138, 12138], "mapped", [30382]], [[12139, 12139], "mapped", [30399]], [[12140, 12140], "mapped", [30446]], [[12141, 12141], "mapped", [30683]], [[12142, 12142], "mapped", [30690]], [[12143, 12143], "mapped", [30707]], [[12144, 12144], "mapped", [31034]], [[12145, 12145], "mapped", [31160]], [[12146, 12146], "mapped", [31166]], [[12147, 12147], "mapped", [31348]], [[12148, 12148], "mapped", [31435]], [[12149, 12149], "mapped", [31481]], [[12150, 12150], "mapped", [31859]], [[12151, 12151], "mapped", [31992]], [[12152, 12152], "mapped", [32566]], [[12153, 12153], "mapped", [32593]], [[12154, 12154], "mapped", [32650]], [[12155, 12155], "mapped", [32701]], [[12156, 12156], "mapped", [32769]], [[12157, 12157], "mapped", [32780]], [[12158, 12158], "mapped", [32786]], [[12159, 12159], "mapped", [32819]], [[12160, 12160], "mapped", [32895]], [[12161, 12161], "mapped", [32905]], [[12162, 12162], "mapped", [33251]], [[12163, 12163], "mapped", [33258]], [[12164, 12164], "mapped", [33267]], [[12165, 12165], "mapped", [33276]], [[12166, 12166], "mapped", [33292]], [[12167, 12167], "mapped", [33307]], [[12168, 12168], "mapped", [33311]], [[12169, 12169], "mapped", [33390]], [[12170, 12170], "mapped", [33394]], [[12171, 12171], "mapped", [33400]], [[12172, 12172], "mapped", [34381]], [[12173, 12173], "mapped", [34411]], [[12174, 12174], "mapped", [34880]], [[12175, 12175], "mapped", [34892]], [[12176, 12176], "mapped", [34915]], [[12177, 12177], "mapped", [35198]], [[12178, 12178], "mapped", [35211]], [[12179, 12179], "mapped", [35282]], [[12180, 12180], "mapped", [35328]], [[12181, 12181], "mapped", [35895]], [[12182, 12182], "mapped", [35910]], [[12183, 12183], "mapped", [35925]], [[12184, 12184], "mapped", [35960]], [[12185, 12185], "mapped", [35997]], [[12186, 12186], "mapped", [36196]], [[12187, 12187], "mapped", [36208]], [[12188, 12188], "mapped", [36275]], [[12189, 12189], "mapped", [36523]], [[12190, 12190], "mapped", [36554]], [[12191, 12191], "mapped", [36763]], [[12192, 12192], "mapped", [36784]], [[12193, 12193], "mapped", [36789]], [[12194, 12194], "mapped", [37009]], [[12195, 12195], "mapped", [37193]], [[12196, 12196], "mapped", [37318]], [[12197, 12197], "mapped", [37324]], [[12198, 12198], "mapped", [37329]], [[12199, 12199], "mapped", [38263]], [[12200, 12200], "mapped", [38272]], [[12201, 12201], "mapped", [38428]], [[12202, 12202], "mapped", [38582]], [[12203, 12203], "mapped", [38585]], [[12204, 12204], "mapped", [38632]], [[12205, 12205], "mapped", [38737]], [[12206, 12206], "mapped", [38750]], [[12207, 12207], "mapped", [38754]], [[12208, 12208], "mapped", [38761]], [[12209, 12209], "mapped", [38859]], [[12210, 12210], "mapped", [38893]], [[12211, 12211], "mapped", [38899]], [[12212, 12212], "mapped", [38913]], [[12213, 12213], "mapped", [39080]], [[12214, 12214], "mapped", [39131]], [[12215, 12215], "mapped", [39135]], [[12216, 12216], "mapped", [39318]], [[12217, 12217], "mapped", [39321]], [[12218, 12218], "mapped", [39340]], [[12219, 12219], "mapped", [39592]], [[12220, 12220], "mapped", [39640]], [[12221, 12221], "mapped", [39647]], [[12222, 12222], "mapped", [39717]], [[12223, 12223], "mapped", [39727]], [[12224, 12224], "mapped", [39730]], [[12225, 12225], "mapped", [39740]], [[12226, 12226], "mapped", [39770]], [[12227, 12227], "mapped", [40165]], [[12228, 12228], "mapped", [40565]], [[12229, 12229], "mapped", [40575]], [[12230, 12230], "mapped", [40613]], [[12231, 12231], "mapped", [40635]], [[12232, 12232], "mapped", [40643]], [[12233, 12233], "mapped", [40653]], [[12234, 12234], "mapped", [40657]], [[12235, 12235], "mapped", [40697]], [[12236, 12236], "mapped", [40701]], [[12237, 12237], "mapped", [40718]], [[12238, 12238], "mapped", [40723]], [[12239, 12239], "mapped", [40736]], [[12240, 12240], "mapped", [40763]], [[12241, 12241], "mapped", [40778]], [[12242, 12242], "mapped", [40786]], [[12243, 12243], "mapped", [40845]], [[12244, 12244], "mapped", [40860]], [[12245, 12245], "mapped", [40864]], [[12246, 12271], "disallowed"], [[12272, 12283], "disallowed"], [[12284, 12287], "disallowed"], [[12288, 12288], "disallowed_STD3_mapped", [32]], [[12289, 12289], "valid", [], "NV8"], [[12290, 12290], "mapped", [46]], [[12291, 12292], "valid", [], "NV8"], [[12293, 12295], "valid"], [[12296, 12329], "valid", [], "NV8"], [[12330, 12333], "valid"], [[12334, 12341], "valid", [], "NV8"], [[12342, 12342], "mapped", [12306]], [[12343, 12343], "valid", [], "NV8"], [[12344, 12344], "mapped", [21313]], [[12345, 12345], "mapped", [21316]], [[12346, 12346], "mapped", [21317]], [[12347, 12347], "valid", [], "NV8"], [[12348, 12348], "valid"], [[12349, 12349], "valid", [], "NV8"], [[12350, 12350], "valid", [], "NV8"], [[12351, 12351], "valid", [], "NV8"], [[12352, 12352], "disallowed"], [[12353, 12436], "valid"], [[12437, 12438], "valid"], [[12439, 12440], "disallowed"], [[12441, 12442], "valid"], [[12443, 12443], "disallowed_STD3_mapped", [32, 12441]], [[12444, 12444], "disallowed_STD3_mapped", [32, 12442]], [[12445, 12446], "valid"], [[12447, 12447], "mapped", [12424, 12426]], [[12448, 12448], "valid", [], "NV8"], [[12449, 12542], "valid"], [[12543, 12543], "mapped", [12467, 12488]], [[12544, 12548], "disallowed"], [[12549, 12588], "valid"], [[12589, 12589], "valid"], [[12590, 12592], "disallowed"], [[12593, 12593], "mapped", [4352]], [[12594, 12594], "mapped", [4353]], [[12595, 12595], "mapped", [4522]], [[12596, 12596], "mapped", [4354]], [[12597, 12597], "mapped", [4524]], [[12598, 12598], "mapped", [4525]], [[12599, 12599], "mapped", [4355]], [[12600, 12600], "mapped", [4356]], [[12601, 12601], "mapped", [4357]], [[12602, 12602], "mapped", [4528]], [[12603, 12603], "mapped", [4529]], [[12604, 12604], "mapped", [4530]], [[12605, 12605], "mapped", [4531]], [[12606, 12606], "mapped", [4532]], [[12607, 12607], "mapped", [4533]], [[12608, 12608], "mapped", [4378]], [[12609, 12609], "mapped", [4358]], [[12610, 12610], "mapped", [4359]], [[12611, 12611], "mapped", [4360]], [[12612, 12612], "mapped", [4385]], [[12613, 12613], "mapped", [4361]], [[12614, 12614], "mapped", [4362]], [[12615, 12615], "mapped", [4363]], [[12616, 12616], "mapped", [4364]], [[12617, 12617], "mapped", [4365]], [[12618, 12618], "mapped", [4366]], [[12619, 12619], "mapped", [4367]], [[12620, 12620], "mapped", [4368]], [[12621, 12621], "mapped", [4369]], [[12622, 12622], "mapped", [4370]], [[12623, 12623], "mapped", [4449]], [[12624, 12624], "mapped", [4450]], [[12625, 12625], "mapped", [4451]], [[12626, 12626], "mapped", [4452]], [[12627, 12627], "mapped", [4453]], [[12628, 12628], "mapped", [4454]], [[12629, 12629], "mapped", [4455]], [[12630, 12630], "mapped", [4456]], [[12631, 12631], "mapped", [4457]], [[12632, 12632], "mapped", [4458]], [[12633, 12633], "mapped", [4459]], [[12634, 12634], "mapped", [4460]], [[12635, 12635], "mapped", [4461]], [[12636, 12636], "mapped", [4462]], [[12637, 12637], "mapped", [4463]], [[12638, 12638], "mapped", [4464]], [[12639, 12639], "mapped", [4465]], [[12640, 12640], "mapped", [4466]], [[12641, 12641], "mapped", [4467]], [[12642, 12642], "mapped", [4468]], [[12643, 12643], "mapped", [4469]], [[12644, 12644], "disallowed"], [[12645, 12645], "mapped", [4372]], [[12646, 12646], "mapped", [4373]], [[12647, 12647], "mapped", [4551]], [[12648, 12648], "mapped", [4552]], [[12649, 12649], "mapped", [4556]], [[12650, 12650], "mapped", [4558]], [[12651, 12651], "mapped", [4563]], [[12652, 12652], "mapped", [4567]], [[12653, 12653], "mapped", [4569]], [[12654, 12654], "mapped", [4380]], [[12655, 12655], "mapped", [4573]], [[12656, 12656], "mapped", [4575]], [[12657, 12657], "mapped", [4381]], [[12658, 12658], "mapped", [4382]], [[12659, 12659], "mapped", [4384]], [[12660, 12660], "mapped", [4386]], [[12661, 12661], "mapped", [4387]], [[12662, 12662], "mapped", [4391]], [[12663, 12663], "mapped", [4393]], [[12664, 12664], "mapped", [4395]], [[12665, 12665], "mapped", [4396]], [[12666, 12666], "mapped", [4397]], [[12667, 12667], "mapped", [4398]], [[12668, 12668], "mapped", [4399]], [[12669, 12669], "mapped", [4402]], [[12670, 12670], "mapped", [4406]], [[12671, 12671], "mapped", [4416]], [[12672, 12672], "mapped", [4423]], [[12673, 12673], "mapped", [4428]], [[12674, 12674], "mapped", [4593]], [[12675, 12675], "mapped", [4594]], [[12676, 12676], "mapped", [4439]], [[12677, 12677], "mapped", [4440]], [[12678, 12678], "mapped", [4441]], [[12679, 12679], "mapped", [4484]], [[12680, 12680], "mapped", [4485]], [[12681, 12681], "mapped", [4488]], [[12682, 12682], "mapped", [4497]], [[12683, 12683], "mapped", [4498]], [[12684, 12684], "mapped", [4500]], [[12685, 12685], "mapped", [4510]], [[12686, 12686], "mapped", [4513]], [[12687, 12687], "disallowed"], [[12688, 12689], "valid", [], "NV8"], [[12690, 12690], "mapped", [19968]], [[12691, 12691], "mapped", [20108]], [[12692, 12692], "mapped", [19977]], [[12693, 12693], "mapped", [22235]], [[12694, 12694], "mapped", [19978]], [[12695, 12695], "mapped", [20013]], [[12696, 12696], "mapped", [19979]], [[12697, 12697], "mapped", [30002]], [[12698, 12698], "mapped", [20057]], [[12699, 12699], "mapped", [19993]], [[12700, 12700], "mapped", [19969]], [[12701, 12701], "mapped", [22825]], [[12702, 12702], "mapped", [22320]], [[12703, 12703], "mapped", [20154]], [[12704, 12727], "valid"], [[12728, 12730], "valid"], [[12731, 12735], "disallowed"], [[12736, 12751], "valid", [], "NV8"], [[12752, 12771], "valid", [], "NV8"], [[12772, 12783], "disallowed"], [[12784, 12799], "valid"], [[12800, 12800], "disallowed_STD3_mapped", [40, 4352, 41]], [[12801, 12801], "disallowed_STD3_mapped", [40, 4354, 41]], [[12802, 12802], "disallowed_STD3_mapped", [40, 4355, 41]], [[12803, 12803], "disallowed_STD3_mapped", [40, 4357, 41]], [[12804, 12804], "disallowed_STD3_mapped", [40, 4358, 41]], [[12805, 12805], "disallowed_STD3_mapped", [40, 4359, 41]], [[12806, 12806], "disallowed_STD3_mapped", [40, 4361, 41]], [[12807, 12807], "disallowed_STD3_mapped", [40, 4363, 41]], [[12808, 12808], "disallowed_STD3_mapped", [40, 4364, 41]], [[12809, 12809], "disallowed_STD3_mapped", [40, 4366, 41]], [[12810, 12810], "disallowed_STD3_mapped", [40, 4367, 41]], [[12811, 12811], "disallowed_STD3_mapped", [40, 4368, 41]], [[12812, 12812], "disallowed_STD3_mapped", [40, 4369, 41]], [[12813, 12813], "disallowed_STD3_mapped", [40, 4370, 41]], [[12814, 12814], "disallowed_STD3_mapped", [40, 44032, 41]], [[12815, 12815], "disallowed_STD3_mapped", [40, 45208, 41]], [[12816, 12816], "disallowed_STD3_mapped", [40, 45796, 41]], [[12817, 12817], "disallowed_STD3_mapped", [40, 46972, 41]], [[12818, 12818], "disallowed_STD3_mapped", [40, 47560, 41]], [[12819, 12819], "disallowed_STD3_mapped", [40, 48148, 41]], [[12820, 12820], "disallowed_STD3_mapped", [40, 49324, 41]], [[12821, 12821], "disallowed_STD3_mapped", [40, 50500, 41]], [[12822, 12822], "disallowed_STD3_mapped", [40, 51088, 41]], [[12823, 12823], "disallowed_STD3_mapped", [40, 52264, 41]], [[12824, 12824], "disallowed_STD3_mapped", [40, 52852, 41]], [[12825, 12825], "disallowed_STD3_mapped", [40, 53440, 41]], [[12826, 12826], "disallowed_STD3_mapped", [40, 54028, 41]], [[12827, 12827], "disallowed_STD3_mapped", [40, 54616, 41]], [[12828, 12828], "disallowed_STD3_mapped", [40, 51452, 41]], [[12829, 12829], "disallowed_STD3_mapped", [40, 50724, 51204, 41]], [[12830, 12830], "disallowed_STD3_mapped", [40, 50724, 54980, 41]], [[12831, 12831], "disallowed"], [[12832, 12832], "disallowed_STD3_mapped", [40, 19968, 41]], [[12833, 12833], "disallowed_STD3_mapped", [40, 20108, 41]], [[12834, 12834], "disallowed_STD3_mapped", [40, 19977, 41]], [[12835, 12835], "disallowed_STD3_mapped", [40, 22235, 41]], [[12836, 12836], "disallowed_STD3_mapped", [40, 20116, 41]], [[12837, 12837], "disallowed_STD3_mapped", [40, 20845, 41]], [[12838, 12838], "disallowed_STD3_mapped", [40, 19971, 41]], [[12839, 12839], "disallowed_STD3_mapped", [40, 20843, 41]], [[12840, 12840], "disallowed_STD3_mapped", [40, 20061, 41]], [[12841, 12841], "disallowed_STD3_mapped", [40, 21313, 41]], [[12842, 12842], "disallowed_STD3_mapped", [40, 26376, 41]], [[12843, 12843], "disallowed_STD3_mapped", [40, 28779, 41]], [[12844, 12844], "disallowed_STD3_mapped", [40, 27700, 41]], [[12845, 12845], "disallowed_STD3_mapped", [40, 26408, 41]], [[12846, 12846], "disallowed_STD3_mapped", [40, 37329, 41]], [[12847, 12847], "disallowed_STD3_mapped", [40, 22303, 41]], [[12848, 12848], "disallowed_STD3_mapped", [40, 26085, 41]], [[12849, 12849], "disallowed_STD3_mapped", [40, 26666, 41]], [[12850, 12850], "disallowed_STD3_mapped", [40, 26377, 41]], [[12851, 12851], "disallowed_STD3_mapped", [40, 31038, 41]], [[12852, 12852], "disallowed_STD3_mapped", [40, 21517, 41]], [[12853, 12853], "disallowed_STD3_mapped", [40, 29305, 41]], [[12854, 12854], "disallowed_STD3_mapped", [40, 36001, 41]], [[12855, 12855], "disallowed_STD3_mapped", [40, 31069, 41]], [[12856, 12856], "disallowed_STD3_mapped", [40, 21172, 41]], [[12857, 12857], "disallowed_STD3_mapped", [40, 20195, 41]], [[12858, 12858], "disallowed_STD3_mapped", [40, 21628, 41]], [[12859, 12859], "disallowed_STD3_mapped", [40, 23398, 41]], [[12860, 12860], "disallowed_STD3_mapped", [40, 30435, 41]], [[12861, 12861], "disallowed_STD3_mapped", [40, 20225, 41]], [[12862, 12862], "disallowed_STD3_mapped", [40, 36039, 41]], [[12863, 12863], "disallowed_STD3_mapped", [40, 21332, 41]], [[12864, 12864], "disallowed_STD3_mapped", [40, 31085, 41]], [[12865, 12865], "disallowed_STD3_mapped", [40, 20241, 41]], [[12866, 12866], "disallowed_STD3_mapped", [40, 33258, 41]], [[12867, 12867], "disallowed_STD3_mapped", [40, 33267, 41]], [[12868, 12868], "mapped", [21839]], [[12869, 12869], "mapped", [24188]], [[12870, 12870], "mapped", [25991]], [[12871, 12871], "mapped", [31631]], [[12872, 12879], "valid", [], "NV8"], [[12880, 12880], "mapped", [112, 116, 101]], [[12881, 12881], "mapped", [50, 49]], [[12882, 12882], "mapped", [50, 50]], [[12883, 12883], "mapped", [50, 51]], [[12884, 12884], "mapped", [50, 52]], [[12885, 12885], "mapped", [50, 53]], [[12886, 12886], "mapped", [50, 54]], [[12887, 12887], "mapped", [50, 55]], [[12888, 12888], "mapped", [50, 56]], [[12889, 12889], "mapped", [50, 57]], [[12890, 12890], "mapped", [51, 48]], [[12891, 12891], "mapped", [51, 49]], [[12892, 12892], "mapped", [51, 50]], [[12893, 12893], "mapped", [51, 51]], [[12894, 12894], "mapped", [51, 52]], [[12895, 12895], "mapped", [51, 53]], [[12896, 12896], "mapped", [4352]], [[12897, 12897], "mapped", [4354]], [[12898, 12898], "mapped", [4355]], [[12899, 12899], "mapped", [4357]], [[12900, 12900], "mapped", [4358]], [[12901, 12901], "mapped", [4359]], [[12902, 12902], "mapped", [4361]], [[12903, 12903], "mapped", [4363]], [[12904, 12904], "mapped", [4364]], [[12905, 12905], "mapped", [4366]], [[12906, 12906], "mapped", [4367]], [[12907, 12907], "mapped", [4368]], [[12908, 12908], "mapped", [4369]], [[12909, 12909], "mapped", [4370]], [[12910, 12910], "mapped", [44032]], [[12911, 12911], "mapped", [45208]], [[12912, 12912], "mapped", [45796]], [[12913, 12913], "mapped", [46972]], [[12914, 12914], "mapped", [47560]], [[12915, 12915], "mapped", [48148]], [[12916, 12916], "mapped", [49324]], [[12917, 12917], "mapped", [50500]], [[12918, 12918], "mapped", [51088]], [[12919, 12919], "mapped", [52264]], [[12920, 12920], "mapped", [52852]], [[12921, 12921], "mapped", [53440]], [[12922, 12922], "mapped", [54028]], [[12923, 12923], "mapped", [54616]], [[12924, 12924], "mapped", [52280, 44256]], [[12925, 12925], "mapped", [51452, 51032]], [[12926, 12926], "mapped", [50864]], [[12927, 12927], "valid", [], "NV8"], [[12928, 12928], "mapped", [19968]], [[12929, 12929], "mapped", [20108]], [[12930, 12930], "mapped", [19977]], [[12931, 12931], "mapped", [22235]], [[12932, 12932], "mapped", [20116]], [[12933, 12933], "mapped", [20845]], [[12934, 12934], "mapped", [19971]], [[12935, 12935], "mapped", [20843]], [[12936, 12936], "mapped", [20061]], [[12937, 12937], "mapped", [21313]], [[12938, 12938], "mapped", [26376]], [[12939, 12939], "mapped", [28779]], [[12940, 12940], "mapped", [27700]], [[12941, 12941], "mapped", [26408]], [[12942, 12942], "mapped", [37329]], [[12943, 12943], "mapped", [22303]], [[12944, 12944], "mapped", [26085]], [[12945, 12945], "mapped", [26666]], [[12946, 12946], "mapped", [26377]], [[12947, 12947], "mapped", [31038]], [[12948, 12948], "mapped", [21517]], [[12949, 12949], "mapped", [29305]], [[12950, 12950], "mapped", [36001]], [[12951, 12951], "mapped", [31069]], [[12952, 12952], "mapped", [21172]], [[12953, 12953], "mapped", [31192]], [[12954, 12954], "mapped", [30007]], [[12955, 12955], "mapped", [22899]], [[12956, 12956], "mapped", [36969]], [[12957, 12957], "mapped", [20778]], [[12958, 12958], "mapped", [21360]], [[12959, 12959], "mapped", [27880]], [[12960, 12960], "mapped", [38917]], [[12961, 12961], "mapped", [20241]], [[12962, 12962], "mapped", [20889]], [[12963, 12963], "mapped", [27491]], [[12964, 12964], "mapped", [19978]], [[12965, 12965], "mapped", [20013]], [[12966, 12966], "mapped", [19979]], [[12967, 12967], "mapped", [24038]], [[12968, 12968], "mapped", [21491]], [[12969, 12969], "mapped", [21307]], [[12970, 12970], "mapped", [23447]], [[12971, 12971], "mapped", [23398]], [[12972, 12972], "mapped", [30435]], [[12973, 12973], "mapped", [20225]], [[12974, 12974], "mapped", [36039]], [[12975, 12975], "mapped", [21332]], [[12976, 12976], "mapped", [22812]], [[12977, 12977], "mapped", [51, 54]], [[12978, 12978], "mapped", [51, 55]], [[12979, 12979], "mapped", [51, 56]], [[12980, 12980], "mapped", [51, 57]], [[12981, 12981], "mapped", [52, 48]], [[12982, 12982], "mapped", [52, 49]], [[12983, 12983], "mapped", [52, 50]], [[12984, 12984], "mapped", [52, 51]], [[12985, 12985], "mapped", [52, 52]], [[12986, 12986], "mapped", [52, 53]], [[12987, 12987], "mapped", [52, 54]], [[12988, 12988], "mapped", [52, 55]], [[12989, 12989], "mapped", [52, 56]], [[12990, 12990], "mapped", [52, 57]], [[12991, 12991], "mapped", [53, 48]], [[12992, 12992], "mapped", [49, 26376]], [[12993, 12993], "mapped", [50, 26376]], [[12994, 12994], "mapped", [51, 26376]], [[12995, 12995], "mapped", [52, 26376]], [[12996, 12996], "mapped", [53, 26376]], [[12997, 12997], "mapped", [54, 26376]], [[12998, 12998], "mapped", [55, 26376]], [[12999, 12999], "mapped", [56, 26376]], [[13e3, 13e3], "mapped", [57, 26376]], [[13001, 13001], "mapped", [49, 48, 26376]], [[13002, 13002], "mapped", [49, 49, 26376]], [[13003, 13003], "mapped", [49, 50, 26376]], [[13004, 13004], "mapped", [104, 103]], [[13005, 13005], "mapped", [101, 114, 103]], [[13006, 13006], "mapped", [101, 118]], [[13007, 13007], "mapped", [108, 116, 100]], [[13008, 13008], "mapped", [12450]], [[13009, 13009], "mapped", [12452]], [[13010, 13010], "mapped", [12454]], [[13011, 13011], "mapped", [12456]], [[13012, 13012], "mapped", [12458]], [[13013, 13013], "mapped", [12459]], [[13014, 13014], "mapped", [12461]], [[13015, 13015], "mapped", [12463]], [[13016, 13016], "mapped", [12465]], [[13017, 13017], "mapped", [12467]], [[13018, 13018], "mapped", [12469]], [[13019, 13019], "mapped", [12471]], [[13020, 13020], "mapped", [12473]], [[13021, 13021], "mapped", [12475]], [[13022, 13022], "mapped", [12477]], [[13023, 13023], "mapped", [12479]], [[13024, 13024], "mapped", [12481]], [[13025, 13025], "mapped", [12484]], [[13026, 13026], "mapped", [12486]], [[13027, 13027], "mapped", [12488]], [[13028, 13028], "mapped", [12490]], [[13029, 13029], "mapped", [12491]], [[13030, 13030], "mapped", [12492]], [[13031, 13031], "mapped", [12493]], [[13032, 13032], "mapped", [12494]], [[13033, 13033], "mapped", [12495]], [[13034, 13034], "mapped", [12498]], [[13035, 13035], "mapped", [12501]], [[13036, 13036], "mapped", [12504]], [[13037, 13037], "mapped", [12507]], [[13038, 13038], "mapped", [12510]], [[13039, 13039], "mapped", [12511]], [[13040, 13040], "mapped", [12512]], [[13041, 13041], "mapped", [12513]], [[13042, 13042], "mapped", [12514]], [[13043, 13043], "mapped", [12516]], [[13044, 13044], "mapped", [12518]], [[13045, 13045], "mapped", [12520]], [[13046, 13046], "mapped", [12521]], [[13047, 13047], "mapped", [12522]], [[13048, 13048], "mapped", [12523]], [[13049, 13049], "mapped", [12524]], [[13050, 13050], "mapped", [12525]], [[13051, 13051], "mapped", [12527]], [[13052, 13052], "mapped", [12528]], [[13053, 13053], "mapped", [12529]], [[13054, 13054], "mapped", [12530]], [[13055, 13055], "disallowed"], [[13056, 13056], "mapped", [12450, 12497, 12540, 12488]], [[13057, 13057], "mapped", [12450, 12523, 12501, 12449]], [[13058, 13058], "mapped", [12450, 12531, 12506, 12450]], [[13059, 13059], "mapped", [12450, 12540, 12523]], [[13060, 13060], "mapped", [12452, 12491, 12531, 12464]], [[13061, 13061], "mapped", [12452, 12531, 12481]], [[13062, 13062], "mapped", [12454, 12457, 12531]], [[13063, 13063], "mapped", [12456, 12473, 12463, 12540, 12489]], [[13064, 13064], "mapped", [12456, 12540, 12459, 12540]], [[13065, 13065], "mapped", [12458, 12531, 12473]], [[13066, 13066], "mapped", [12458, 12540, 12512]], [[13067, 13067], "mapped", [12459, 12452, 12522]], [[13068, 13068], "mapped", [12459, 12521, 12483, 12488]], [[13069, 13069], "mapped", [12459, 12525, 12522, 12540]], [[13070, 13070], "mapped", [12460, 12525, 12531]], [[13071, 13071], "mapped", [12460, 12531, 12510]], [[13072, 13072], "mapped", [12462, 12460]], [[13073, 13073], "mapped", [12462, 12491, 12540]], [[13074, 13074], "mapped", [12461, 12517, 12522, 12540]], [[13075, 13075], "mapped", [12462, 12523, 12480, 12540]], [[13076, 13076], "mapped", [12461, 12525]], [[13077, 13077], "mapped", [12461, 12525, 12464, 12521, 12512]], [[13078, 13078], "mapped", [12461, 12525, 12513, 12540, 12488, 12523]], [[13079, 13079], "mapped", [12461, 12525, 12527, 12483, 12488]], [[13080, 13080], "mapped", [12464, 12521, 12512]], [[13081, 13081], "mapped", [12464, 12521, 12512, 12488, 12531]], [[13082, 13082], "mapped", [12463, 12523, 12476, 12452, 12525]], [[13083, 13083], "mapped", [12463, 12525, 12540, 12493]], [[13084, 13084], "mapped", [12465, 12540, 12473]], [[13085, 13085], "mapped", [12467, 12523, 12490]], [[13086, 13086], "mapped", [12467, 12540, 12509]], [[13087, 13087], "mapped", [12469, 12452, 12463, 12523]], [[13088, 13088], "mapped", [12469, 12531, 12481, 12540, 12512]], [[13089, 13089], "mapped", [12471, 12522, 12531, 12464]], [[13090, 13090], "mapped", [12475, 12531, 12481]], [[13091, 13091], "mapped", [12475, 12531, 12488]], [[13092, 13092], "mapped", [12480, 12540, 12473]], [[13093, 13093], "mapped", [12487, 12471]], [[13094, 13094], "mapped", [12489, 12523]], [[13095, 13095], "mapped", [12488, 12531]], [[13096, 13096], "mapped", [12490, 12494]], [[13097, 13097], "mapped", [12494, 12483, 12488]], [[13098, 13098], "mapped", [12495, 12452, 12484]], [[13099, 13099], "mapped", [12497, 12540, 12475, 12531, 12488]], [[13100, 13100], "mapped", [12497, 12540, 12484]], [[13101, 13101], "mapped", [12496, 12540, 12524, 12523]], [[13102, 13102], "mapped", [12500, 12450, 12473, 12488, 12523]], [[13103, 13103], "mapped", [12500, 12463, 12523]], [[13104, 13104], "mapped", [12500, 12467]], [[13105, 13105], "mapped", [12499, 12523]], [[13106, 13106], "mapped", [12501, 12449, 12521, 12483, 12489]], [[13107, 13107], "mapped", [12501, 12451, 12540, 12488]], [[13108, 13108], "mapped", [12502, 12483, 12471, 12455, 12523]], [[13109, 13109], "mapped", [12501, 12521, 12531]], [[13110, 13110], "mapped", [12504, 12463, 12479, 12540, 12523]], [[13111, 13111], "mapped", [12506, 12477]], [[13112, 13112], "mapped", [12506, 12491, 12498]], [[13113, 13113], "mapped", [12504, 12523, 12484]], [[13114, 13114], "mapped", [12506, 12531, 12473]], [[13115, 13115], "mapped", [12506, 12540, 12472]], [[13116, 13116], "mapped", [12505, 12540, 12479]], [[13117, 13117], "mapped", [12509, 12452, 12531, 12488]], [[13118, 13118], "mapped", [12508, 12523, 12488]], [[13119, 13119], "mapped", [12507, 12531]], [[13120, 13120], "mapped", [12509, 12531, 12489]], [[13121, 13121], "mapped", [12507, 12540, 12523]], [[13122, 13122], "mapped", [12507, 12540, 12531]], [[13123, 13123], "mapped", [12510, 12452, 12463, 12525]], [[13124, 13124], "mapped", [12510, 12452, 12523]], [[13125, 13125], "mapped", [12510, 12483, 12495]], [[13126, 13126], "mapped", [12510, 12523, 12463]], [[13127, 13127], "mapped", [12510, 12531, 12471, 12519, 12531]], [[13128, 13128], "mapped", [12511, 12463, 12525, 12531]], [[13129, 13129], "mapped", [12511, 12522]], [[13130, 13130], "mapped", [12511, 12522, 12496, 12540, 12523]], [[13131, 13131], "mapped", [12513, 12460]], [[13132, 13132], "mapped", [12513, 12460, 12488, 12531]], [[13133, 13133], "mapped", [12513, 12540, 12488, 12523]], [[13134, 13134], "mapped", [12516, 12540, 12489]], [[13135, 13135], "mapped", [12516, 12540, 12523]], [[13136, 13136], "mapped", [12518, 12450, 12531]], [[13137, 13137], "mapped", [12522, 12483, 12488, 12523]], [[13138, 13138], "mapped", [12522, 12521]], [[13139, 13139], "mapped", [12523, 12500, 12540]], [[13140, 13140], "mapped", [12523, 12540, 12502, 12523]], [[13141, 13141], "mapped", [12524, 12512]], [[13142, 13142], "mapped", [12524, 12531, 12488, 12466, 12531]], [[13143, 13143], "mapped", [12527, 12483, 12488]], [[13144, 13144], "mapped", [48, 28857]], [[13145, 13145], "mapped", [49, 28857]], [[13146, 13146], "mapped", [50, 28857]], [[13147, 13147], "mapped", [51, 28857]], [[13148, 13148], "mapped", [52, 28857]], [[13149, 13149], "mapped", [53, 28857]], [[13150, 13150], "mapped", [54, 28857]], [[13151, 13151], "mapped", [55, 28857]], [[13152, 13152], "mapped", [56, 28857]], [[13153, 13153], "mapped", [57, 28857]], [[13154, 13154], "mapped", [49, 48, 28857]], [[13155, 13155], "mapped", [49, 49, 28857]], [[13156, 13156], "mapped", [49, 50, 28857]], [[13157, 13157], "mapped", [49, 51, 28857]], [[13158, 13158], "mapped", [49, 52, 28857]], [[13159, 13159], "mapped", [49, 53, 28857]], [[13160, 13160], "mapped", [49, 54, 28857]], [[13161, 13161], "mapped", [49, 55, 28857]], [[13162, 13162], "mapped", [49, 56, 28857]], [[13163, 13163], "mapped", [49, 57, 28857]], [[13164, 13164], "mapped", [50, 48, 28857]], [[13165, 13165], "mapped", [50, 49, 28857]], [[13166, 13166], "mapped", [50, 50, 28857]], [[13167, 13167], "mapped", [50, 51, 28857]], [[13168, 13168], "mapped", [50, 52, 28857]], [[13169, 13169], "mapped", [104, 112, 97]], [[13170, 13170], "mapped", [100, 97]], [[13171, 13171], "mapped", [97, 117]], [[13172, 13172], "mapped", [98, 97, 114]], [[13173, 13173], "mapped", [111, 118]], [[13174, 13174], "mapped", [112, 99]], [[13175, 13175], "mapped", [100, 109]], [[13176, 13176], "mapped", [100, 109, 50]], [[13177, 13177], "mapped", [100, 109, 51]], [[13178, 13178], "mapped", [105, 117]], [[13179, 13179], "mapped", [24179, 25104]], [[13180, 13180], "mapped", [26157, 21644]], [[13181, 13181], "mapped", [22823, 27491]], [[13182, 13182], "mapped", [26126, 27835]], [[13183, 13183], "mapped", [26666, 24335, 20250, 31038]], [[13184, 13184], "mapped", [112, 97]], [[13185, 13185], "mapped", [110, 97]], [[13186, 13186], "mapped", [956, 97]], [[13187, 13187], "mapped", [109, 97]], [[13188, 13188], "mapped", [107, 97]], [[13189, 13189], "mapped", [107, 98]], [[13190, 13190], "mapped", [109, 98]], [[13191, 13191], "mapped", [103, 98]], [[13192, 13192], "mapped", [99, 97, 108]], [[13193, 13193], "mapped", [107, 99, 97, 108]], [[13194, 13194], "mapped", [112, 102]], [[13195, 13195], "mapped", [110, 102]], [[13196, 13196], "mapped", [956, 102]], [[13197, 13197], "mapped", [956, 103]], [[13198, 13198], "mapped", [109, 103]], [[13199, 13199], "mapped", [107, 103]], [[13200, 13200], "mapped", [104, 122]], [[13201, 13201], "mapped", [107, 104, 122]], [[13202, 13202], "mapped", [109, 104, 122]], [[13203, 13203], "mapped", [103, 104, 122]], [[13204, 13204], "mapped", [116, 104, 122]], [[13205, 13205], "mapped", [956, 108]], [[13206, 13206], "mapped", [109, 108]], [[13207, 13207], "mapped", [100, 108]], [[13208, 13208], "mapped", [107, 108]], [[13209, 13209], "mapped", [102, 109]], [[13210, 13210], "mapped", [110, 109]], [[13211, 13211], "mapped", [956, 109]], [[13212, 13212], "mapped", [109, 109]], [[13213, 13213], "mapped", [99, 109]], [[13214, 13214], "mapped", [107, 109]], [[13215, 13215], "mapped", [109, 109, 50]], [[13216, 13216], "mapped", [99, 109, 50]], [[13217, 13217], "mapped", [109, 50]], [[13218, 13218], "mapped", [107, 109, 50]], [[13219, 13219], "mapped", [109, 109, 51]], [[13220, 13220], "mapped", [99, 109, 51]], [[13221, 13221], "mapped", [109, 51]], [[13222, 13222], "mapped", [107, 109, 51]], [[13223, 13223], "mapped", [109, 8725, 115]], [[13224, 13224], "mapped", [109, 8725, 115, 50]], [[13225, 13225], "mapped", [112, 97]], [[13226, 13226], "mapped", [107, 112, 97]], [[13227, 13227], "mapped", [109, 112, 97]], [[13228, 13228], "mapped", [103, 112, 97]], [[13229, 13229], "mapped", [114, 97, 100]], [[13230, 13230], "mapped", [114, 97, 100, 8725, 115]], [[13231, 13231], "mapped", [114, 97, 100, 8725, 115, 50]], [[13232, 13232], "mapped", [112, 115]], [[13233, 13233], "mapped", [110, 115]], [[13234, 13234], "mapped", [956, 115]], [[13235, 13235], "mapped", [109, 115]], [[13236, 13236], "mapped", [112, 118]], [[13237, 13237], "mapped", [110, 118]], [[13238, 13238], "mapped", [956, 118]], [[13239, 13239], "mapped", [109, 118]], [[13240, 13240], "mapped", [107, 118]], [[13241, 13241], "mapped", [109, 118]], [[13242, 13242], "mapped", [112, 119]], [[13243, 13243], "mapped", [110, 119]], [[13244, 13244], "mapped", [956, 119]], [[13245, 13245], "mapped", [109, 119]], [[13246, 13246], "mapped", [107, 119]], [[13247, 13247], "mapped", [109, 119]], [[13248, 13248], "mapped", [107, 969]], [[13249, 13249], "mapped", [109, 969]], [[13250, 13250], "disallowed"], [[13251, 13251], "mapped", [98, 113]], [[13252, 13252], "mapped", [99, 99]], [[13253, 13253], "mapped", [99, 100]], [[13254, 13254], "mapped", [99, 8725, 107, 103]], [[13255, 13255], "disallowed"], [[13256, 13256], "mapped", [100, 98]], [[13257, 13257], "mapped", [103, 121]], [[13258, 13258], "mapped", [104, 97]], [[13259, 13259], "mapped", [104, 112]], [[13260, 13260], "mapped", [105, 110]], [[13261, 13261], "mapped", [107, 107]], [[13262, 13262], "mapped", [107, 109]], [[13263, 13263], "mapped", [107, 116]], [[13264, 13264], "mapped", [108, 109]], [[13265, 13265], "mapped", [108, 110]], [[13266, 13266], "mapped", [108, 111, 103]], [[13267, 13267], "mapped", [108, 120]], [[13268, 13268], "mapped", [109, 98]], [[13269, 13269], "mapped", [109, 105, 108]], [[13270, 13270], "mapped", [109, 111, 108]], [[13271, 13271], "mapped", [112, 104]], [[13272, 13272], "disallowed"], [[13273, 13273], "mapped", [112, 112, 109]], [[13274, 13274], "mapped", [112, 114]], [[13275, 13275], "mapped", [115, 114]], [[13276, 13276], "mapped", [115, 118]], [[13277, 13277], "mapped", [119, 98]], [[13278, 13278], "mapped", [118, 8725, 109]], [[13279, 13279], "mapped", [97, 8725, 109]], [[13280, 13280], "mapped", [49, 26085]], [[13281, 13281], "mapped", [50, 26085]], [[13282, 13282], "mapped", [51, 26085]], [[13283, 13283], "mapped", [52, 26085]], [[13284, 13284], "mapped", [53, 26085]], [[13285, 13285], "mapped", [54, 26085]], [[13286, 13286], "mapped", [55, 26085]], [[13287, 13287], "mapped", [56, 26085]], [[13288, 13288], "mapped", [57, 26085]], [[13289, 13289], "mapped", [49, 48, 26085]], [[13290, 13290], "mapped", [49, 49, 26085]], [[13291, 13291], "mapped", [49, 50, 26085]], [[13292, 13292], "mapped", [49, 51, 26085]], [[13293, 13293], "mapped", [49, 52, 26085]], [[13294, 13294], "mapped", [49, 53, 26085]], [[13295, 13295], "mapped", [49, 54, 26085]], [[13296, 13296], "mapped", [49, 55, 26085]], [[13297, 13297], "mapped", [49, 56, 26085]], [[13298, 13298], "mapped", [49, 57, 26085]], [[13299, 13299], "mapped", [50, 48, 26085]], [[13300, 13300], "mapped", [50, 49, 26085]], [[13301, 13301], "mapped", [50, 50, 26085]], [[13302, 13302], "mapped", [50, 51, 26085]], [[13303, 13303], "mapped", [50, 52, 26085]], [[13304, 13304], "mapped", [50, 53, 26085]], [[13305, 13305], "mapped", [50, 54, 26085]], [[13306, 13306], "mapped", [50, 55, 26085]], [[13307, 13307], "mapped", [50, 56, 26085]], [[13308, 13308], "mapped", [50, 57, 26085]], [[13309, 13309], "mapped", [51, 48, 26085]], [[13310, 13310], "mapped", [51, 49, 26085]], [[13311, 13311], "mapped", [103, 97, 108]], [[13312, 19893], "valid"], [[19894, 19903], "disallowed"], [[19904, 19967], "valid", [], "NV8"], [[19968, 40869], "valid"], [[40870, 40891], "valid"], [[40892, 40899], "valid"], [[40900, 40907], "valid"], [[40908, 40908], "valid"], [[40909, 40917], "valid"], [[40918, 40959], "disallowed"], [[40960, 42124], "valid"], [[42125, 42127], "disallowed"], [[42128, 42145], "valid", [], "NV8"], [[42146, 42147], "valid", [], "NV8"], [[42148, 42163], "valid", [], "NV8"], [[42164, 42164], "valid", [], "NV8"], [[42165, 42176], "valid", [], "NV8"], [[42177, 42177], "valid", [], "NV8"], [[42178, 42180], "valid", [], "NV8"], [[42181, 42181], "valid", [], "NV8"], [[42182, 42182], "valid", [], "NV8"], [[42183, 42191], "disallowed"], [[42192, 42237], "valid"], [[42238, 42239], "valid", [], "NV8"], [[42240, 42508], "valid"], [[42509, 42511], "valid", [], "NV8"], [[42512, 42539], "valid"], [[42540, 42559], "disallowed"], [[42560, 42560], "mapped", [42561]], [[42561, 42561], "valid"], [[42562, 42562], "mapped", [42563]], [[42563, 42563], "valid"], [[42564, 42564], "mapped", [42565]], [[42565, 42565], "valid"], [[42566, 42566], "mapped", [42567]], [[42567, 42567], "valid"], [[42568, 42568], "mapped", [42569]], [[42569, 42569], "valid"], [[42570, 42570], "mapped", [42571]], [[42571, 42571], "valid"], [[42572, 42572], "mapped", [42573]], [[42573, 42573], "valid"], [[42574, 42574], "mapped", [42575]], [[42575, 42575], "valid"], [[42576, 42576], "mapped", [42577]], [[42577, 42577], "valid"], [[42578, 42578], "mapped", [42579]], [[42579, 42579], "valid"], [[42580, 42580], "mapped", [42581]], [[42581, 42581], "valid"], [[42582, 42582], "mapped", [42583]], [[42583, 42583], "valid"], [[42584, 42584], "mapped", [42585]], [[42585, 42585], "valid"], [[42586, 42586], "mapped", [42587]], [[42587, 42587], "valid"], [[42588, 42588], "mapped", [42589]], [[42589, 42589], "valid"], [[42590, 42590], "mapped", [42591]], [[42591, 42591], "valid"], [[42592, 42592], "mapped", [42593]], [[42593, 42593], "valid"], [[42594, 42594], "mapped", [42595]], [[42595, 42595], "valid"], [[42596, 42596], "mapped", [42597]], [[42597, 42597], "valid"], [[42598, 42598], "mapped", [42599]], [[42599, 42599], "valid"], [[42600, 42600], "mapped", [42601]], [[42601, 42601], "valid"], [[42602, 42602], "mapped", [42603]], [[42603, 42603], "valid"], [[42604, 42604], "mapped", [42605]], [[42605, 42607], "valid"], [[42608, 42611], "valid", [], "NV8"], [[42612, 42619], "valid"], [[42620, 42621], "valid"], [[42622, 42622], "valid", [], "NV8"], [[42623, 42623], "valid"], [[42624, 42624], "mapped", [42625]], [[42625, 42625], "valid"], [[42626, 42626], "mapped", [42627]], [[42627, 42627], "valid"], [[42628, 42628], "mapped", [42629]], [[42629, 42629], "valid"], [[42630, 42630], "mapped", [42631]], [[42631, 42631], "valid"], [[42632, 42632], "mapped", [42633]], [[42633, 42633], "valid"], [[42634, 42634], "mapped", [42635]], [[42635, 42635], "valid"], [[42636, 42636], "mapped", [42637]], [[42637, 42637], "valid"], [[42638, 42638], "mapped", [42639]], [[42639, 42639], "valid"], [[42640, 42640], "mapped", [42641]], [[42641, 42641], "valid"], [[42642, 42642], "mapped", [42643]], [[42643, 42643], "valid"], [[42644, 42644], "mapped", [42645]], [[42645, 42645], "valid"], [[42646, 42646], "mapped", [42647]], [[42647, 42647], "valid"], [[42648, 42648], "mapped", [42649]], [[42649, 42649], "valid"], [[42650, 42650], "mapped", [42651]], [[42651, 42651], "valid"], [[42652, 42652], "mapped", [1098]], [[42653, 42653], "mapped", [1100]], [[42654, 42654], "valid"], [[42655, 42655], "valid"], [[42656, 42725], "valid"], [[42726, 42735], "valid", [], "NV8"], [[42736, 42737], "valid"], [[42738, 42743], "valid", [], "NV8"], [[42744, 42751], "disallowed"], [[42752, 42774], "valid", [], "NV8"], [[42775, 42778], "valid"], [[42779, 42783], "valid"], [[42784, 42785], "valid", [], "NV8"], [[42786, 42786], "mapped", [42787]], [[42787, 42787], "valid"], [[42788, 42788], "mapped", [42789]], [[42789, 42789], "valid"], [[42790, 42790], "mapped", [42791]], [[42791, 42791], "valid"], [[42792, 42792], "mapped", [42793]], [[42793, 42793], "valid"], [[42794, 42794], "mapped", [42795]], [[42795, 42795], "valid"], [[42796, 42796], "mapped", [42797]], [[42797, 42797], "valid"], [[42798, 42798], "mapped", [42799]], [[42799, 42801], "valid"], [[42802, 42802], "mapped", [42803]], [[42803, 42803], "valid"], [[42804, 42804], "mapped", [42805]], [[42805, 42805], "valid"], [[42806, 42806], "mapped", [42807]], [[42807, 42807], "valid"], [[42808, 42808], "mapped", [42809]], [[42809, 42809], "valid"], [[42810, 42810], "mapped", [42811]], [[42811, 42811], "valid"], [[42812, 42812], "mapped", [42813]], [[42813, 42813], "valid"], [[42814, 42814], "mapped", [42815]], [[42815, 42815], "valid"], [[42816, 42816], "mapped", [42817]], [[42817, 42817], "valid"], [[42818, 42818], "mapped", [42819]], [[42819, 42819], "valid"], [[42820, 42820], "mapped", [42821]], [[42821, 42821], "valid"], [[42822, 42822], "mapped", [42823]], [[42823, 42823], "valid"], [[42824, 42824], "mapped", [42825]], [[42825, 42825], "valid"], [[42826, 42826], "mapped", [42827]], [[42827, 42827], "valid"], [[42828, 42828], "mapped", [42829]], [[42829, 42829], "valid"], [[42830, 42830], "mapped", [42831]], [[42831, 42831], "valid"], [[42832, 42832], "mapped", [42833]], [[42833, 42833], "valid"], [[42834, 42834], "mapped", [42835]], [[42835, 42835], "valid"], [[42836, 42836], "mapped", [42837]], [[42837, 42837], "valid"], [[42838, 42838], "mapped", [42839]], [[42839, 42839], "valid"], [[42840, 42840], "mapped", [42841]], [[42841, 42841], "valid"], [[42842, 42842], "mapped", [42843]], [[42843, 42843], "valid"], [[42844, 42844], "mapped", [42845]], [[42845, 42845], "valid"], [[42846, 42846], "mapped", [42847]], [[42847, 42847], "valid"], [[42848, 42848], "mapped", [42849]], [[42849, 42849], "valid"], [[42850, 42850], "mapped", [42851]], [[42851, 42851], "valid"], [[42852, 42852], "mapped", [42853]], [[42853, 42853], "valid"], [[42854, 42854], "mapped", [42855]], [[42855, 42855], "valid"], [[42856, 42856], "mapped", [42857]], [[42857, 42857], "valid"], [[42858, 42858], "mapped", [42859]], [[42859, 42859], "valid"], [[42860, 42860], "mapped", [42861]], [[42861, 42861], "valid"], [[42862, 42862], "mapped", [42863]], [[42863, 42863], "valid"], [[42864, 42864], "mapped", [42863]], [[42865, 42872], "valid"], [[42873, 42873], "mapped", [42874]], [[42874, 42874], "valid"], [[42875, 42875], "mapped", [42876]], [[42876, 42876], "valid"], [[42877, 42877], "mapped", [7545]], [[42878, 42878], "mapped", [42879]], [[42879, 42879], "valid"], [[42880, 42880], "mapped", [42881]], [[42881, 42881], "valid"], [[42882, 42882], "mapped", [42883]], [[42883, 42883], "valid"], [[42884, 42884], "mapped", [42885]], [[42885, 42885], "valid"], [[42886, 42886], "mapped", [42887]], [[42887, 42888], "valid"], [[42889, 42890], "valid", [], "NV8"], [[42891, 42891], "mapped", [42892]], [[42892, 42892], "valid"], [[42893, 42893], "mapped", [613]], [[42894, 42894], "valid"], [[42895, 42895], "valid"], [[42896, 42896], "mapped", [42897]], [[42897, 42897], "valid"], [[42898, 42898], "mapped", [42899]], [[42899, 42899], "valid"], [[42900, 42901], "valid"], [[42902, 42902], "mapped", [42903]], [[42903, 42903], "valid"], [[42904, 42904], "mapped", [42905]], [[42905, 42905], "valid"], [[42906, 42906], "mapped", [42907]], [[42907, 42907], "valid"], [[42908, 42908], "mapped", [42909]], [[42909, 42909], "valid"], [[42910, 42910], "mapped", [42911]], [[42911, 42911], "valid"], [[42912, 42912], "mapped", [42913]], [[42913, 42913], "valid"], [[42914, 42914], "mapped", [42915]], [[42915, 42915], "valid"], [[42916, 42916], "mapped", [42917]], [[42917, 42917], "valid"], [[42918, 42918], "mapped", [42919]], [[42919, 42919], "valid"], [[42920, 42920], "mapped", [42921]], [[42921, 42921], "valid"], [[42922, 42922], "mapped", [614]], [[42923, 42923], "mapped", [604]], [[42924, 42924], "mapped", [609]], [[42925, 42925], "mapped", [620]], [[42926, 42927], "disallowed"], [[42928, 42928], "mapped", [670]], [[42929, 42929], "mapped", [647]], [[42930, 42930], "mapped", [669]], [[42931, 42931], "mapped", [43859]], [[42932, 42932], "mapped", [42933]], [[42933, 42933], "valid"], [[42934, 42934], "mapped", [42935]], [[42935, 42935], "valid"], [[42936, 42998], "disallowed"], [[42999, 42999], "valid"], [[43e3, 43e3], "mapped", [295]], [[43001, 43001], "mapped", [339]], [[43002, 43002], "valid"], [[43003, 43007], "valid"], [[43008, 43047], "valid"], [[43048, 43051], "valid", [], "NV8"], [[43052, 43055], "disallowed"], [[43056, 43065], "valid", [], "NV8"], [[43066, 43071], "disallowed"], [[43072, 43123], "valid"], [[43124, 43127], "valid", [], "NV8"], [[43128, 43135], "disallowed"], [[43136, 43204], "valid"], [[43205, 43213], "disallowed"], [[43214, 43215], "valid", [], "NV8"], [[43216, 43225], "valid"], [[43226, 43231], "disallowed"], [[43232, 43255], "valid"], [[43256, 43258], "valid", [], "NV8"], [[43259, 43259], "valid"], [[43260, 43260], "valid", [], "NV8"], [[43261, 43261], "valid"], [[43262, 43263], "disallowed"], [[43264, 43309], "valid"], [[43310, 43311], "valid", [], "NV8"], [[43312, 43347], "valid"], [[43348, 43358], "disallowed"], [[43359, 43359], "valid", [], "NV8"], [[43360, 43388], "valid", [], "NV8"], [[43389, 43391], "disallowed"], [[43392, 43456], "valid"], [[43457, 43469], "valid", [], "NV8"], [[43470, 43470], "disallowed"], [[43471, 43481], "valid"], [[43482, 43485], "disallowed"], [[43486, 43487], "valid", [], "NV8"], [[43488, 43518], "valid"], [[43519, 43519], "disallowed"], [[43520, 43574], "valid"], [[43575, 43583], "disallowed"], [[43584, 43597], "valid"], [[43598, 43599], "disallowed"], [[43600, 43609], "valid"], [[43610, 43611], "disallowed"], [[43612, 43615], "valid", [], "NV8"], [[43616, 43638], "valid"], [[43639, 43641], "valid", [], "NV8"], [[43642, 43643], "valid"], [[43644, 43647], "valid"], [[43648, 43714], "valid"], [[43715, 43738], "disallowed"], [[43739, 43741], "valid"], [[43742, 43743], "valid", [], "NV8"], [[43744, 43759], "valid"], [[43760, 43761], "valid", [], "NV8"], [[43762, 43766], "valid"], [[43767, 43776], "disallowed"], [[43777, 43782], "valid"], [[43783, 43784], "disallowed"], [[43785, 43790], "valid"], [[43791, 43792], "disallowed"], [[43793, 43798], "valid"], [[43799, 43807], "disallowed"], [[43808, 43814], "valid"], [[43815, 43815], "disallowed"], [[43816, 43822], "valid"], [[43823, 43823], "disallowed"], [[43824, 43866], "valid"], [[43867, 43867], "valid", [], "NV8"], [[43868, 43868], "mapped", [42791]], [[43869, 43869], "mapped", [43831]], [[43870, 43870], "mapped", [619]], [[43871, 43871], "mapped", [43858]], [[43872, 43875], "valid"], [[43876, 43877], "valid"], [[43878, 43887], "disallowed"], [[43888, 43888], "mapped", [5024]], [[43889, 43889], "mapped", [5025]], [[43890, 43890], "mapped", [5026]], [[43891, 43891], "mapped", [5027]], [[43892, 43892], "mapped", [5028]], [[43893, 43893], "mapped", [5029]], [[43894, 43894], "mapped", [5030]], [[43895, 43895], "mapped", [5031]], [[43896, 43896], "mapped", [5032]], [[43897, 43897], "mapped", [5033]], [[43898, 43898], "mapped", [5034]], [[43899, 43899], "mapped", [5035]], [[43900, 43900], "mapped", [5036]], [[43901, 43901], "mapped", [5037]], [[43902, 43902], "mapped", [5038]], [[43903, 43903], "mapped", [5039]], [[43904, 43904], "mapped", [5040]], [[43905, 43905], "mapped", [5041]], [[43906, 43906], "mapped", [5042]], [[43907, 43907], "mapped", [5043]], [[43908, 43908], "mapped", [5044]], [[43909, 43909], "mapped", [5045]], [[43910, 43910], "mapped", [5046]], [[43911, 43911], "mapped", [5047]], [[43912, 43912], "mapped", [5048]], [[43913, 43913], "mapped", [5049]], [[43914, 43914], "mapped", [5050]], [[43915, 43915], "mapped", [5051]], [[43916, 43916], "mapped", [5052]], [[43917, 43917], "mapped", [5053]], [[43918, 43918], "mapped", [5054]], [[43919, 43919], "mapped", [5055]], [[43920, 43920], "mapped", [5056]], [[43921, 43921], "mapped", [5057]], [[43922, 43922], "mapped", [5058]], [[43923, 43923], "mapped", [5059]], [[43924, 43924], "mapped", [5060]], [[43925, 43925], "mapped", [5061]], [[43926, 43926], "mapped", [5062]], [[43927, 43927], "mapped", [5063]], [[43928, 43928], "mapped", [5064]], [[43929, 43929], "mapped", [5065]], [[43930, 43930], "mapped", [5066]], [[43931, 43931], "mapped", [5067]], [[43932, 43932], "mapped", [5068]], [[43933, 43933], "mapped", [5069]], [[43934, 43934], "mapped", [5070]], [[43935, 43935], "mapped", [5071]], [[43936, 43936], "mapped", [5072]], [[43937, 43937], "mapped", [5073]], [[43938, 43938], "mapped", [5074]], [[43939, 43939], "mapped", [5075]], [[43940, 43940], "mapped", [5076]], [[43941, 43941], "mapped", [5077]], [[43942, 43942], "mapped", [5078]], [[43943, 43943], "mapped", [5079]], [[43944, 43944], "mapped", [5080]], [[43945, 43945], "mapped", [5081]], [[43946, 43946], "mapped", [5082]], [[43947, 43947], "mapped", [5083]], [[43948, 43948], "mapped", [5084]], [[43949, 43949], "mapped", [5085]], [[43950, 43950], "mapped", [5086]], [[43951, 43951], "mapped", [5087]], [[43952, 43952], "mapped", [5088]], [[43953, 43953], "mapped", [5089]], [[43954, 43954], "mapped", [5090]], [[43955, 43955], "mapped", [5091]], [[43956, 43956], "mapped", [5092]], [[43957, 43957], "mapped", [5093]], [[43958, 43958], "mapped", [5094]], [[43959, 43959], "mapped", [5095]], [[43960, 43960], "mapped", [5096]], [[43961, 43961], "mapped", [5097]], [[43962, 43962], "mapped", [5098]], [[43963, 43963], "mapped", [5099]], [[43964, 43964], "mapped", [5100]], [[43965, 43965], "mapped", [5101]], [[43966, 43966], "mapped", [5102]], [[43967, 43967], "mapped", [5103]], [[43968, 44010], "valid"], [[44011, 44011], "valid", [], "NV8"], [[44012, 44013], "valid"], [[44014, 44015], "disallowed"], [[44016, 44025], "valid"], [[44026, 44031], "disallowed"], [[44032, 55203], "valid"], [[55204, 55215], "disallowed"], [[55216, 55238], "valid", [], "NV8"], [[55239, 55242], "disallowed"], [[55243, 55291], "valid", [], "NV8"], [[55292, 55295], "disallowed"], [[55296, 57343], "disallowed"], [[57344, 63743], "disallowed"], [[63744, 63744], "mapped", [35912]], [[63745, 63745], "mapped", [26356]], [[63746, 63746], "mapped", [36554]], [[63747, 63747], "mapped", [36040]], [[63748, 63748], "mapped", [28369]], [[63749, 63749], "mapped", [20018]], [[63750, 63750], "mapped", [21477]], [[63751, 63752], "mapped", [40860]], [[63753, 63753], "mapped", [22865]], [[63754, 63754], "mapped", [37329]], [[63755, 63755], "mapped", [21895]], [[63756, 63756], "mapped", [22856]], [[63757, 63757], "mapped", [25078]], [[63758, 63758], "mapped", [30313]], [[63759, 63759], "mapped", [32645]], [[63760, 63760], "mapped", [34367]], [[63761, 63761], "mapped", [34746]], [[63762, 63762], "mapped", [35064]], [[63763, 63763], "mapped", [37007]], [[63764, 63764], "mapped", [27138]], [[63765, 63765], "mapped", [27931]], [[63766, 63766], "mapped", [28889]], [[63767, 63767], "mapped", [29662]], [[63768, 63768], "mapped", [33853]], [[63769, 63769], "mapped", [37226]], [[63770, 63770], "mapped", [39409]], [[63771, 63771], "mapped", [20098]], [[63772, 63772], "mapped", [21365]], [[63773, 63773], "mapped", [27396]], [[63774, 63774], "mapped", [29211]], [[63775, 63775], "mapped", [34349]], [[63776, 63776], "mapped", [40478]], [[63777, 63777], "mapped", [23888]], [[63778, 63778], "mapped", [28651]], [[63779, 63779], "mapped", [34253]], [[63780, 63780], "mapped", [35172]], [[63781, 63781], "mapped", [25289]], [[63782, 63782], "mapped", [33240]], [[63783, 63783], "mapped", [34847]], [[63784, 63784], "mapped", [24266]], [[63785, 63785], "mapped", [26391]], [[63786, 63786], "mapped", [28010]], [[63787, 63787], "mapped", [29436]], [[63788, 63788], "mapped", [37070]], [[63789, 63789], "mapped", [20358]], [[63790, 63790], "mapped", [20919]], [[63791, 63791], "mapped", [21214]], [[63792, 63792], "mapped", [25796]], [[63793, 63793], "mapped", [27347]], [[63794, 63794], "mapped", [29200]], [[63795, 63795], "mapped", [30439]], [[63796, 63796], "mapped", [32769]], [[63797, 63797], "mapped", [34310]], [[63798, 63798], "mapped", [34396]], [[63799, 63799], "mapped", [36335]], [[63800, 63800], "mapped", [38706]], [[63801, 63801], "mapped", [39791]], [[63802, 63802], "mapped", [40442]], [[63803, 63803], "mapped", [30860]], [[63804, 63804], "mapped", [31103]], [[63805, 63805], "mapped", [32160]], [[63806, 63806], "mapped", [33737]], [[63807, 63807], "mapped", [37636]], [[63808, 63808], "mapped", [40575]], [[63809, 63809], "mapped", [35542]], [[63810, 63810], "mapped", [22751]], [[63811, 63811], "mapped", [24324]], [[63812, 63812], "mapped", [31840]], [[63813, 63813], "mapped", [32894]], [[63814, 63814], "mapped", [29282]], [[63815, 63815], "mapped", [30922]], [[63816, 63816], "mapped", [36034]], [[63817, 63817], "mapped", [38647]], [[63818, 63818], "mapped", [22744]], [[63819, 63819], "mapped", [23650]], [[63820, 63820], "mapped", [27155]], [[63821, 63821], "mapped", [28122]], [[63822, 63822], "mapped", [28431]], [[63823, 63823], "mapped", [32047]], [[63824, 63824], "mapped", [32311]], [[63825, 63825], "mapped", [38475]], [[63826, 63826], "mapped", [21202]], [[63827, 63827], "mapped", [32907]], [[63828, 63828], "mapped", [20956]], [[63829, 63829], "mapped", [20940]], [[63830, 63830], "mapped", [31260]], [[63831, 63831], "mapped", [32190]], [[63832, 63832], "mapped", [33777]], [[63833, 63833], "mapped", [38517]], [[63834, 63834], "mapped", [35712]], [[63835, 63835], "mapped", [25295]], [[63836, 63836], "mapped", [27138]], [[63837, 63837], "mapped", [35582]], [[63838, 63838], "mapped", [20025]], [[63839, 63839], "mapped", [23527]], [[63840, 63840], "mapped", [24594]], [[63841, 63841], "mapped", [29575]], [[63842, 63842], "mapped", [30064]], [[63843, 63843], "mapped", [21271]], [[63844, 63844], "mapped", [30971]], [[63845, 63845], "mapped", [20415]], [[63846, 63846], "mapped", [24489]], [[63847, 63847], "mapped", [19981]], [[63848, 63848], "mapped", [27852]], [[63849, 63849], "mapped", [25976]], [[63850, 63850], "mapped", [32034]], [[63851, 63851], "mapped", [21443]], [[63852, 63852], "mapped", [22622]], [[63853, 63853], "mapped", [30465]], [[63854, 63854], "mapped", [33865]], [[63855, 63855], "mapped", [35498]], [[63856, 63856], "mapped", [27578]], [[63857, 63857], "mapped", [36784]], [[63858, 63858], "mapped", [27784]], [[63859, 63859], "mapped", [25342]], [[63860, 63860], "mapped", [33509]], [[63861, 63861], "mapped", [25504]], [[63862, 63862], "mapped", [30053]], [[63863, 63863], "mapped", [20142]], [[63864, 63864], "mapped", [20841]], [[63865, 63865], "mapped", [20937]], [[63866, 63866], "mapped", [26753]], [[63867, 63867], "mapped", [31975]], [[63868, 63868], "mapped", [33391]], [[63869, 63869], "mapped", [35538]], [[63870, 63870], "mapped", [37327]], [[63871, 63871], "mapped", [21237]], [[63872, 63872], "mapped", [21570]], [[63873, 63873], "mapped", [22899]], [[63874, 63874], "mapped", [24300]], [[63875, 63875], "mapped", [26053]], [[63876, 63876], "mapped", [28670]], [[63877, 63877], "mapped", [31018]], [[63878, 63878], "mapped", [38317]], [[63879, 63879], "mapped", [39530]], [[63880, 63880], "mapped", [40599]], [[63881, 63881], "mapped", [40654]], [[63882, 63882], "mapped", [21147]], [[63883, 63883], "mapped", [26310]], [[63884, 63884], "mapped", [27511]], [[63885, 63885], "mapped", [36706]], [[63886, 63886], "mapped", [24180]], [[63887, 63887], "mapped", [24976]], [[63888, 63888], "mapped", [25088]], [[63889, 63889], "mapped", [25754]], [[63890, 63890], "mapped", [28451]], [[63891, 63891], "mapped", [29001]], [[63892, 63892], "mapped", [29833]], [[63893, 63893], "mapped", [31178]], [[63894, 63894], "mapped", [32244]], [[63895, 63895], "mapped", [32879]], [[63896, 63896], "mapped", [36646]], [[63897, 63897], "mapped", [34030]], [[63898, 63898], "mapped", [36899]], [[63899, 63899], "mapped", [37706]], [[63900, 63900], "mapped", [21015]], [[63901, 63901], "mapped", [21155]], [[63902, 63902], "mapped", [21693]], [[63903, 63903], "mapped", [28872]], [[63904, 63904], "mapped", [35010]], [[63905, 63905], "mapped", [35498]], [[63906, 63906], "mapped", [24265]], [[63907, 63907], "mapped", [24565]], [[63908, 63908], "mapped", [25467]], [[63909, 63909], "mapped", [27566]], [[63910, 63910], "mapped", [31806]], [[63911, 63911], "mapped", [29557]], [[63912, 63912], "mapped", [20196]], [[63913, 63913], "mapped", [22265]], [[63914, 63914], "mapped", [23527]], [[63915, 63915], "mapped", [23994]], [[63916, 63916], "mapped", [24604]], [[63917, 63917], "mapped", [29618]], [[63918, 63918], "mapped", [29801]], [[63919, 63919], "mapped", [32666]], [[63920, 63920], "mapped", [32838]], [[63921, 63921], "mapped", [37428]], [[63922, 63922], "mapped", [38646]], [[63923, 63923], "mapped", [38728]], [[63924, 63924], "mapped", [38936]], [[63925, 63925], "mapped", [20363]], [[63926, 63926], "mapped", [31150]], [[63927, 63927], "mapped", [37300]], [[63928, 63928], "mapped", [38584]], [[63929, 63929], "mapped", [24801]], [[63930, 63930], "mapped", [20102]], [[63931, 63931], "mapped", [20698]], [[63932, 63932], "mapped", [23534]], [[63933, 63933], "mapped", [23615]], [[63934, 63934], "mapped", [26009]], [[63935, 63935], "mapped", [27138]], [[63936, 63936], "mapped", [29134]], [[63937, 63937], "mapped", [30274]], [[63938, 63938], "mapped", [34044]], [[63939, 63939], "mapped", [36988]], [[63940, 63940], "mapped", [40845]], [[63941, 63941], "mapped", [26248]], [[63942, 63942], "mapped", [38446]], [[63943, 63943], "mapped", [21129]], [[63944, 63944], "mapped", [26491]], [[63945, 63945], "mapped", [26611]], [[63946, 63946], "mapped", [27969]], [[63947, 63947], "mapped", [28316]], [[63948, 63948], "mapped", [29705]], [[63949, 63949], "mapped", [30041]], [[63950, 63950], "mapped", [30827]], [[63951, 63951], "mapped", [32016]], [[63952, 63952], "mapped", [39006]], [[63953, 63953], "mapped", [20845]], [[63954, 63954], "mapped", [25134]], [[63955, 63955], "mapped", [38520]], [[63956, 63956], "mapped", [20523]], [[63957, 63957], "mapped", [23833]], [[63958, 63958], "mapped", [28138]], [[63959, 63959], "mapped", [36650]], [[63960, 63960], "mapped", [24459]], [[63961, 63961], "mapped", [24900]], [[63962, 63962], "mapped", [26647]], [[63963, 63963], "mapped", [29575]], [[63964, 63964], "mapped", [38534]], [[63965, 63965], "mapped", [21033]], [[63966, 63966], "mapped", [21519]], [[63967, 63967], "mapped", [23653]], [[63968, 63968], "mapped", [26131]], [[63969, 63969], "mapped", [26446]], [[63970, 63970], "mapped", [26792]], [[63971, 63971], "mapped", [27877]], [[63972, 63972], "mapped", [29702]], [[63973, 63973], "mapped", [30178]], [[63974, 63974], "mapped", [32633]], [[63975, 63975], "mapped", [35023]], [[63976, 63976], "mapped", [35041]], [[63977, 63977], "mapped", [37324]], [[63978, 63978], "mapped", [38626]], [[63979, 63979], "mapped", [21311]], [[63980, 63980], "mapped", [28346]], [[63981, 63981], "mapped", [21533]], [[63982, 63982], "mapped", [29136]], [[63983, 63983], "mapped", [29848]], [[63984, 63984], "mapped", [34298]], [[63985, 63985], "mapped", [38563]], [[63986, 63986], "mapped", [40023]], [[63987, 63987], "mapped", [40607]], [[63988, 63988], "mapped", [26519]], [[63989, 63989], "mapped", [28107]], [[63990, 63990], "mapped", [33256]], [[63991, 63991], "mapped", [31435]], [[63992, 63992], "mapped", [31520]], [[63993, 63993], "mapped", [31890]], [[63994, 63994], "mapped", [29376]], [[63995, 63995], "mapped", [28825]], [[63996, 63996], "mapped", [35672]], [[63997, 63997], "mapped", [20160]], [[63998, 63998], "mapped", [33590]], [[63999, 63999], "mapped", [21050]], [[64e3, 64e3], "mapped", [20999]], [[64001, 64001], "mapped", [24230]], [[64002, 64002], "mapped", [25299]], [[64003, 64003], "mapped", [31958]], [[64004, 64004], "mapped", [23429]], [[64005, 64005], "mapped", [27934]], [[64006, 64006], "mapped", [26292]], [[64007, 64007], "mapped", [36667]], [[64008, 64008], "mapped", [34892]], [[64009, 64009], "mapped", [38477]], [[64010, 64010], "mapped", [35211]], [[64011, 64011], "mapped", [24275]], [[64012, 64012], "mapped", [20800]], [[64013, 64013], "mapped", [21952]], [[64014, 64015], "valid"], [[64016, 64016], "mapped", [22618]], [[64017, 64017], "valid"], [[64018, 64018], "mapped", [26228]], [[64019, 64020], "valid"], [[64021, 64021], "mapped", [20958]], [[64022, 64022], "mapped", [29482]], [[64023, 64023], "mapped", [30410]], [[64024, 64024], "mapped", [31036]], [[64025, 64025], "mapped", [31070]], [[64026, 64026], "mapped", [31077]], [[64027, 64027], "mapped", [31119]], [[64028, 64028], "mapped", [38742]], [[64029, 64029], "mapped", [31934]], [[64030, 64030], "mapped", [32701]], [[64031, 64031], "valid"], [[64032, 64032], "mapped", [34322]], [[64033, 64033], "valid"], [[64034, 64034], "mapped", [35576]], [[64035, 64036], "valid"], [[64037, 64037], "mapped", [36920]], [[64038, 64038], "mapped", [37117]], [[64039, 64041], "valid"], [[64042, 64042], "mapped", [39151]], [[64043, 64043], "mapped", [39164]], [[64044, 64044], "mapped", [39208]], [[64045, 64045], "mapped", [40372]], [[64046, 64046], "mapped", [37086]], [[64047, 64047], "mapped", [38583]], [[64048, 64048], "mapped", [20398]], [[64049, 64049], "mapped", [20711]], [[64050, 64050], "mapped", [20813]], [[64051, 64051], "mapped", [21193]], [[64052, 64052], "mapped", [21220]], [[64053, 64053], "mapped", [21329]], [[64054, 64054], "mapped", [21917]], [[64055, 64055], "mapped", [22022]], [[64056, 64056], "mapped", [22120]], [[64057, 64057], "mapped", [22592]], [[64058, 64058], "mapped", [22696]], [[64059, 64059], "mapped", [23652]], [[64060, 64060], "mapped", [23662]], [[64061, 64061], "mapped", [24724]], [[64062, 64062], "mapped", [24936]], [[64063, 64063], "mapped", [24974]], [[64064, 64064], "mapped", [25074]], [[64065, 64065], "mapped", [25935]], [[64066, 64066], "mapped", [26082]], [[64067, 64067], "mapped", [26257]], [[64068, 64068], "mapped", [26757]], [[64069, 64069], "mapped", [28023]], [[64070, 64070], "mapped", [28186]], [[64071, 64071], "mapped", [28450]], [[64072, 64072], "mapped", [29038]], [[64073, 64073], "mapped", [29227]], [[64074, 64074], "mapped", [29730]], [[64075, 64075], "mapped", [30865]], [[64076, 64076], "mapped", [31038]], [[64077, 64077], "mapped", [31049]], [[64078, 64078], "mapped", [31048]], [[64079, 64079], "mapped", [31056]], [[64080, 64080], "mapped", [31062]], [[64081, 64081], "mapped", [31069]], [[64082, 64082], "mapped", [31117]], [[64083, 64083], "mapped", [31118]], [[64084, 64084], "mapped", [31296]], [[64085, 64085], "mapped", [31361]], [[64086, 64086], "mapped", [31680]], [[64087, 64087], "mapped", [32244]], [[64088, 64088], "mapped", [32265]], [[64089, 64089], "mapped", [32321]], [[64090, 64090], "mapped", [32626]], [[64091, 64091], "mapped", [32773]], [[64092, 64092], "mapped", [33261]], [[64093, 64094], "mapped", [33401]], [[64095, 64095], "mapped", [33879]], [[64096, 64096], "mapped", [35088]], [[64097, 64097], "mapped", [35222]], [[64098, 64098], "mapped", [35585]], [[64099, 64099], "mapped", [35641]], [[64100, 64100], "mapped", [36051]], [[64101, 64101], "mapped", [36104]], [[64102, 64102], "mapped", [36790]], [[64103, 64103], "mapped", [36920]], [[64104, 64104], "mapped", [38627]], [[64105, 64105], "mapped", [38911]], [[64106, 64106], "mapped", [38971]], [[64107, 64107], "mapped", [24693]], [[64108, 64108], "mapped", [148206]], [[64109, 64109], "mapped", [33304]], [[64110, 64111], "disallowed"], [[64112, 64112], "mapped", [20006]], [[64113, 64113], "mapped", [20917]], [[64114, 64114], "mapped", [20840]], [[64115, 64115], "mapped", [20352]], [[64116, 64116], "mapped", [20805]], [[64117, 64117], "mapped", [20864]], [[64118, 64118], "mapped", [21191]], [[64119, 64119], "mapped", [21242]], [[64120, 64120], "mapped", [21917]], [[64121, 64121], "mapped", [21845]], [[64122, 64122], "mapped", [21913]], [[64123, 64123], "mapped", [21986]], [[64124, 64124], "mapped", [22618]], [[64125, 64125], "mapped", [22707]], [[64126, 64126], "mapped", [22852]], [[64127, 64127], "mapped", [22868]], [[64128, 64128], "mapped", [23138]], [[64129, 64129], "mapped", [23336]], [[64130, 64130], "mapped", [24274]], [[64131, 64131], "mapped", [24281]], [[64132, 64132], "mapped", [24425]], [[64133, 64133], "mapped", [24493]], [[64134, 64134], "mapped", [24792]], [[64135, 64135], "mapped", [24910]], [[64136, 64136], "mapped", [24840]], [[64137, 64137], "mapped", [24974]], [[64138, 64138], "mapped", [24928]], [[64139, 64139], "mapped", [25074]], [[64140, 64140], "mapped", [25140]], [[64141, 64141], "mapped", [25540]], [[64142, 64142], "mapped", [25628]], [[64143, 64143], "mapped", [25682]], [[64144, 64144], "mapped", [25942]], [[64145, 64145], "mapped", [26228]], [[64146, 64146], "mapped", [26391]], [[64147, 64147], "mapped", [26395]], [[64148, 64148], "mapped", [26454]], [[64149, 64149], "mapped", [27513]], [[64150, 64150], "mapped", [27578]], [[64151, 64151], "mapped", [27969]], [[64152, 64152], "mapped", [28379]], [[64153, 64153], "mapped", [28363]], [[64154, 64154], "mapped", [28450]], [[64155, 64155], "mapped", [28702]], [[64156, 64156], "mapped", [29038]], [[64157, 64157], "mapped", [30631]], [[64158, 64158], "mapped", [29237]], [[64159, 64159], "mapped", [29359]], [[64160, 64160], "mapped", [29482]], [[64161, 64161], "mapped", [29809]], [[64162, 64162], "mapped", [29958]], [[64163, 64163], "mapped", [30011]], [[64164, 64164], "mapped", [30237]], [[64165, 64165], "mapped", [30239]], [[64166, 64166], "mapped", [30410]], [[64167, 64167], "mapped", [30427]], [[64168, 64168], "mapped", [30452]], [[64169, 64169], "mapped", [30538]], [[64170, 64170], "mapped", [30528]], [[64171, 64171], "mapped", [30924]], [[64172, 64172], "mapped", [31409]], [[64173, 64173], "mapped", [31680]], [[64174, 64174], "mapped", [31867]], [[64175, 64175], "mapped", [32091]], [[64176, 64176], "mapped", [32244]], [[64177, 64177], "mapped", [32574]], [[64178, 64178], "mapped", [32773]], [[64179, 64179], "mapped", [33618]], [[64180, 64180], "mapped", [33775]], [[64181, 64181], "mapped", [34681]], [[64182, 64182], "mapped", [35137]], [[64183, 64183], "mapped", [35206]], [[64184, 64184], "mapped", [35222]], [[64185, 64185], "mapped", [35519]], [[64186, 64186], "mapped", [35576]], [[64187, 64187], "mapped", [35531]], [[64188, 64188], "mapped", [35585]], [[64189, 64189], "mapped", [35582]], [[64190, 64190], "mapped", [35565]], [[64191, 64191], "mapped", [35641]], [[64192, 64192], "mapped", [35722]], [[64193, 64193], "mapped", [36104]], [[64194, 64194], "mapped", [36664]], [[64195, 64195], "mapped", [36978]], [[64196, 64196], "mapped", [37273]], [[64197, 64197], "mapped", [37494]], [[64198, 64198], "mapped", [38524]], [[64199, 64199], "mapped", [38627]], [[64200, 64200], "mapped", [38742]], [[64201, 64201], "mapped", [38875]], [[64202, 64202], "mapped", [38911]], [[64203, 64203], "mapped", [38923]], [[64204, 64204], "mapped", [38971]], [[64205, 64205], "mapped", [39698]], [[64206, 64206], "mapped", [40860]], [[64207, 64207], "mapped", [141386]], [[64208, 64208], "mapped", [141380]], [[64209, 64209], "mapped", [144341]], [[64210, 64210], "mapped", [15261]], [[64211, 64211], "mapped", [16408]], [[64212, 64212], "mapped", [16441]], [[64213, 64213], "mapped", [152137]], [[64214, 64214], "mapped", [154832]], [[64215, 64215], "mapped", [163539]], [[64216, 64216], "mapped", [40771]], [[64217, 64217], "mapped", [40846]], [[64218, 64255], "disallowed"], [[64256, 64256], "mapped", [102, 102]], [[64257, 64257], "mapped", [102, 105]], [[64258, 64258], "mapped", [102, 108]], [[64259, 64259], "mapped", [102, 102, 105]], [[64260, 64260], "mapped", [102, 102, 108]], [[64261, 64262], "mapped", [115, 116]], [[64263, 64274], "disallowed"], [[64275, 64275], "mapped", [1396, 1398]], [[64276, 64276], "mapped", [1396, 1381]], [[64277, 64277], "mapped", [1396, 1387]], [[64278, 64278], "mapped", [1406, 1398]], [[64279, 64279], "mapped", [1396, 1389]], [[64280, 64284], "disallowed"], [[64285, 64285], "mapped", [1497, 1460]], [[64286, 64286], "valid"], [[64287, 64287], "mapped", [1522, 1463]], [[64288, 64288], "mapped", [1506]], [[64289, 64289], "mapped", [1488]], [[64290, 64290], "mapped", [1491]], [[64291, 64291], "mapped", [1492]], [[64292, 64292], "mapped", [1499]], [[64293, 64293], "mapped", [1500]], [[64294, 64294], "mapped", [1501]], [[64295, 64295], "mapped", [1512]], [[64296, 64296], "mapped", [1514]], [[64297, 64297], "disallowed_STD3_mapped", [43]], [[64298, 64298], "mapped", [1513, 1473]], [[64299, 64299], "mapped", [1513, 1474]], [[64300, 64300], "mapped", [1513, 1468, 1473]], [[64301, 64301], "mapped", [1513, 1468, 1474]], [[64302, 64302], "mapped", [1488, 1463]], [[64303, 64303], "mapped", [1488, 1464]], [[64304, 64304], "mapped", [1488, 1468]], [[64305, 64305], "mapped", [1489, 1468]], [[64306, 64306], "mapped", [1490, 1468]], [[64307, 64307], "mapped", [1491, 1468]], [[64308, 64308], "mapped", [1492, 1468]], [[64309, 64309], "mapped", [1493, 1468]], [[64310, 64310], "mapped", [1494, 1468]], [[64311, 64311], "disallowed"], [[64312, 64312], "mapped", [1496, 1468]], [[64313, 64313], "mapped", [1497, 1468]], [[64314, 64314], "mapped", [1498, 1468]], [[64315, 64315], "mapped", [1499, 1468]], [[64316, 64316], "mapped", [1500, 1468]], [[64317, 64317], "disallowed"], [[64318, 64318], "mapped", [1502, 1468]], [[64319, 64319], "disallowed"], [[64320, 64320], "mapped", [1504, 1468]], [[64321, 64321], "mapped", [1505, 1468]], [[64322, 64322], "disallowed"], [[64323, 64323], "mapped", [1507, 1468]], [[64324, 64324], "mapped", [1508, 1468]], [[64325, 64325], "disallowed"], [[64326, 64326], "mapped", [1510, 1468]], [[64327, 64327], "mapped", [1511, 1468]], [[64328, 64328], "mapped", [1512, 1468]], [[64329, 64329], "mapped", [1513, 1468]], [[64330, 64330], "mapped", [1514, 1468]], [[64331, 64331], "mapped", [1493, 1465]], [[64332, 64332], "mapped", [1489, 1471]], [[64333, 64333], "mapped", [1499, 1471]], [[64334, 64334], "mapped", [1508, 1471]], [[64335, 64335], "mapped", [1488, 1500]], [[64336, 64337], "mapped", [1649]], [[64338, 64341], "mapped", [1659]], [[64342, 64345], "mapped", [1662]], [[64346, 64349], "mapped", [1664]], [[64350, 64353], "mapped", [1658]], [[64354, 64357], "mapped", [1663]], [[64358, 64361], "mapped", [1657]], [[64362, 64365], "mapped", [1700]], [[64366, 64369], "mapped", [1702]], [[64370, 64373], "mapped", [1668]], [[64374, 64377], "mapped", [1667]], [[64378, 64381], "mapped", [1670]], [[64382, 64385], "mapped", [1671]], [[64386, 64387], "mapped", [1677]], [[64388, 64389], "mapped", [1676]], [[64390, 64391], "mapped", [1678]], [[64392, 64393], "mapped", [1672]], [[64394, 64395], "mapped", [1688]], [[64396, 64397], "mapped", [1681]], [[64398, 64401], "mapped", [1705]], [[64402, 64405], "mapped", [1711]], [[64406, 64409], "mapped", [1715]], [[64410, 64413], "mapped", [1713]], [[64414, 64415], "mapped", [1722]], [[64416, 64419], "mapped", [1723]], [[64420, 64421], "mapped", [1728]], [[64422, 64425], "mapped", [1729]], [[64426, 64429], "mapped", [1726]], [[64430, 64431], "mapped", [1746]], [[64432, 64433], "mapped", [1747]], [[64434, 64449], "valid", [], "NV8"], [[64450, 64466], "disallowed"], [[64467, 64470], "mapped", [1709]], [[64471, 64472], "mapped", [1735]], [[64473, 64474], "mapped", [1734]], [[64475, 64476], "mapped", [1736]], [[64477, 64477], "mapped", [1735, 1652]], [[64478, 64479], "mapped", [1739]], [[64480, 64481], "mapped", [1733]], [[64482, 64483], "mapped", [1737]], [[64484, 64487], "mapped", [1744]], [[64488, 64489], "mapped", [1609]], [[64490, 64491], "mapped", [1574, 1575]], [[64492, 64493], "mapped", [1574, 1749]], [[64494, 64495], "mapped", [1574, 1608]], [[64496, 64497], "mapped", [1574, 1735]], [[64498, 64499], "mapped", [1574, 1734]], [[64500, 64501], "mapped", [1574, 1736]], [[64502, 64504], "mapped", [1574, 1744]], [[64505, 64507], "mapped", [1574, 1609]], [[64508, 64511], "mapped", [1740]], [[64512, 64512], "mapped", [1574, 1580]], [[64513, 64513], "mapped", [1574, 1581]], [[64514, 64514], "mapped", [1574, 1605]], [[64515, 64515], "mapped", [1574, 1609]], [[64516, 64516], "mapped", [1574, 1610]], [[64517, 64517], "mapped", [1576, 1580]], [[64518, 64518], "mapped", [1576, 1581]], [[64519, 64519], "mapped", [1576, 1582]], [[64520, 64520], "mapped", [1576, 1605]], [[64521, 64521], "mapped", [1576, 1609]], [[64522, 64522], "mapped", [1576, 1610]], [[64523, 64523], "mapped", [1578, 1580]], [[64524, 64524], "mapped", [1578, 1581]], [[64525, 64525], "mapped", [1578, 1582]], [[64526, 64526], "mapped", [1578, 1605]], [[64527, 64527], "mapped", [1578, 1609]], [[64528, 64528], "mapped", [1578, 1610]], [[64529, 64529], "mapped", [1579, 1580]], [[64530, 64530], "mapped", [1579, 1605]], [[64531, 64531], "mapped", [1579, 1609]], [[64532, 64532], "mapped", [1579, 1610]], [[64533, 64533], "mapped", [1580, 1581]], [[64534, 64534], "mapped", [1580, 1605]], [[64535, 64535], "mapped", [1581, 1580]], [[64536, 64536], "mapped", [1581, 1605]], [[64537, 64537], "mapped", [1582, 1580]], [[64538, 64538], "mapped", [1582, 1581]], [[64539, 64539], "mapped", [1582, 1605]], [[64540, 64540], "mapped", [1587, 1580]], [[64541, 64541], "mapped", [1587, 1581]], [[64542, 64542], "mapped", [1587, 1582]], [[64543, 64543], "mapped", [1587, 1605]], [[64544, 64544], "mapped", [1589, 1581]], [[64545, 64545], "mapped", [1589, 1605]], [[64546, 64546], "mapped", [1590, 1580]], [[64547, 64547], "mapped", [1590, 1581]], [[64548, 64548], "mapped", [1590, 1582]], [[64549, 64549], "mapped", [1590, 1605]], [[64550, 64550], "mapped", [1591, 1581]], [[64551, 64551], "mapped", [1591, 1605]], [[64552, 64552], "mapped", [1592, 1605]], [[64553, 64553], "mapped", [1593, 1580]], [[64554, 64554], "mapped", [1593, 1605]], [[64555, 64555], "mapped", [1594, 1580]], [[64556, 64556], "mapped", [1594, 1605]], [[64557, 64557], "mapped", [1601, 1580]], [[64558, 64558], "mapped", [1601, 1581]], [[64559, 64559], "mapped", [1601, 1582]], [[64560, 64560], "mapped", [1601, 1605]], [[64561, 64561], "mapped", [1601, 1609]], [[64562, 64562], "mapped", [1601, 1610]], [[64563, 64563], "mapped", [1602, 1581]], [[64564, 64564], "mapped", [1602, 1605]], [[64565, 64565], "mapped", [1602, 1609]], [[64566, 64566], "mapped", [1602, 1610]], [[64567, 64567], "mapped", [1603, 1575]], [[64568, 64568], "mapped", [1603, 1580]], [[64569, 64569], "mapped", [1603, 1581]], [[64570, 64570], "mapped", [1603, 1582]], [[64571, 64571], "mapped", [1603, 1604]], [[64572, 64572], "mapped", [1603, 1605]], [[64573, 64573], "mapped", [1603, 1609]], [[64574, 64574], "mapped", [1603, 1610]], [[64575, 64575], "mapped", [1604, 1580]], [[64576, 64576], "mapped", [1604, 1581]], [[64577, 64577], "mapped", [1604, 1582]], [[64578, 64578], "mapped", [1604, 1605]], [[64579, 64579], "mapped", [1604, 1609]], [[64580, 64580], "mapped", [1604, 1610]], [[64581, 64581], "mapped", [1605, 1580]], [[64582, 64582], "mapped", [1605, 1581]], [[64583, 64583], "mapped", [1605, 1582]], [[64584, 64584], "mapped", [1605, 1605]], [[64585, 64585], "mapped", [1605, 1609]], [[64586, 64586], "mapped", [1605, 1610]], [[64587, 64587], "mapped", [1606, 1580]], [[64588, 64588], "mapped", [1606, 1581]], [[64589, 64589], "mapped", [1606, 1582]], [[64590, 64590], "mapped", [1606, 1605]], [[64591, 64591], "mapped", [1606, 1609]], [[64592, 64592], "mapped", [1606, 1610]], [[64593, 64593], "mapped", [1607, 1580]], [[64594, 64594], "mapped", [1607, 1605]], [[64595, 64595], "mapped", [1607, 1609]], [[64596, 64596], "mapped", [1607, 1610]], [[64597, 64597], "mapped", [1610, 1580]], [[64598, 64598], "mapped", [1610, 1581]], [[64599, 64599], "mapped", [1610, 1582]], [[64600, 64600], "mapped", [1610, 1605]], [[64601, 64601], "mapped", [1610, 1609]], [[64602, 64602], "mapped", [1610, 1610]], [[64603, 64603], "mapped", [1584, 1648]], [[64604, 64604], "mapped", [1585, 1648]], [[64605, 64605], "mapped", [1609, 1648]], [[64606, 64606], "disallowed_STD3_mapped", [32, 1612, 1617]], [[64607, 64607], "disallowed_STD3_mapped", [32, 1613, 1617]], [[64608, 64608], "disallowed_STD3_mapped", [32, 1614, 1617]], [[64609, 64609], "disallowed_STD3_mapped", [32, 1615, 1617]], [[64610, 64610], "disallowed_STD3_mapped", [32, 1616, 1617]], [[64611, 64611], "disallowed_STD3_mapped", [32, 1617, 1648]], [[64612, 64612], "mapped", [1574, 1585]], [[64613, 64613], "mapped", [1574, 1586]], [[64614, 64614], "mapped", [1574, 1605]], [[64615, 64615], "mapped", [1574, 1606]], [[64616, 64616], "mapped", [1574, 1609]], [[64617, 64617], "mapped", [1574, 1610]], [[64618, 64618], "mapped", [1576, 1585]], [[64619, 64619], "mapped", [1576, 1586]], [[64620, 64620], "mapped", [1576, 1605]], [[64621, 64621], "mapped", [1576, 1606]], [[64622, 64622], "mapped", [1576, 1609]], [[64623, 64623], "mapped", [1576, 1610]], [[64624, 64624], "mapped", [1578, 1585]], [[64625, 64625], "mapped", [1578, 1586]], [[64626, 64626], "mapped", [1578, 1605]], [[64627, 64627], "mapped", [1578, 1606]], [[64628, 64628], "mapped", [1578, 1609]], [[64629, 64629], "mapped", [1578, 1610]], [[64630, 64630], "mapped", [1579, 1585]], [[64631, 64631], "mapped", [1579, 1586]], [[64632, 64632], "mapped", [1579, 1605]], [[64633, 64633], "mapped", [1579, 1606]], [[64634, 64634], "mapped", [1579, 1609]], [[64635, 64635], "mapped", [1579, 1610]], [[64636, 64636], "mapped", [1601, 1609]], [[64637, 64637], "mapped", [1601, 1610]], [[64638, 64638], "mapped", [1602, 1609]], [[64639, 64639], "mapped", [1602, 1610]], [[64640, 64640], "mapped", [1603, 1575]], [[64641, 64641], "mapped", [1603, 1604]], [[64642, 64642], "mapped", [1603, 1605]], [[64643, 64643], "mapped", [1603, 1609]], [[64644, 64644], "mapped", [1603, 1610]], [[64645, 64645], "mapped", [1604, 1605]], [[64646, 64646], "mapped", [1604, 1609]], [[64647, 64647], "mapped", [1604, 1610]], [[64648, 64648], "mapped", [1605, 1575]], [[64649, 64649], "mapped", [1605, 1605]], [[64650, 64650], "mapped", [1606, 1585]], [[64651, 64651], "mapped", [1606, 1586]], [[64652, 64652], "mapped", [1606, 1605]], [[64653, 64653], "mapped", [1606, 1606]], [[64654, 64654], "mapped", [1606, 1609]], [[64655, 64655], "mapped", [1606, 1610]], [[64656, 64656], "mapped", [1609, 1648]], [[64657, 64657], "mapped", [1610, 1585]], [[64658, 64658], "mapped", [1610, 1586]], [[64659, 64659], "mapped", [1610, 1605]], [[64660, 64660], "mapped", [1610, 1606]], [[64661, 64661], "mapped", [1610, 1609]], [[64662, 64662], "mapped", [1610, 1610]], [[64663, 64663], "mapped", [1574, 1580]], [[64664, 64664], "mapped", [1574, 1581]], [[64665, 64665], "mapped", [1574, 1582]], [[64666, 64666], "mapped", [1574, 1605]], [[64667, 64667], "mapped", [1574, 1607]], [[64668, 64668], "mapped", [1576, 1580]], [[64669, 64669], "mapped", [1576, 1581]], [[64670, 64670], "mapped", [1576, 1582]], [[64671, 64671], "mapped", [1576, 1605]], [[64672, 64672], "mapped", [1576, 1607]], [[64673, 64673], "mapped", [1578, 1580]], [[64674, 64674], "mapped", [1578, 1581]], [[64675, 64675], "mapped", [1578, 1582]], [[64676, 64676], "mapped", [1578, 1605]], [[64677, 64677], "mapped", [1578, 1607]], [[64678, 64678], "mapped", [1579, 1605]], [[64679, 64679], "mapped", [1580, 1581]], [[64680, 64680], "mapped", [1580, 1605]], [[64681, 64681], "mapped", [1581, 1580]], [[64682, 64682], "mapped", [1581, 1605]], [[64683, 64683], "mapped", [1582, 1580]], [[64684, 64684], "mapped", [1582, 1605]], [[64685, 64685], "mapped", [1587, 1580]], [[64686, 64686], "mapped", [1587, 1581]], [[64687, 64687], "mapped", [1587, 1582]], [[64688, 64688], "mapped", [1587, 1605]], [[64689, 64689], "mapped", [1589, 1581]], [[64690, 64690], "mapped", [1589, 1582]], [[64691, 64691], "mapped", [1589, 1605]], [[64692, 64692], "mapped", [1590, 1580]], [[64693, 64693], "mapped", [1590, 1581]], [[64694, 64694], "mapped", [1590, 1582]], [[64695, 64695], "mapped", [1590, 1605]], [[64696, 64696], "mapped", [1591, 1581]], [[64697, 64697], "mapped", [1592, 1605]], [[64698, 64698], "mapped", [1593, 1580]], [[64699, 64699], "mapped", [1593, 1605]], [[64700, 64700], "mapped", [1594, 1580]], [[64701, 64701], "mapped", [1594, 1605]], [[64702, 64702], "mapped", [1601, 1580]], [[64703, 64703], "mapped", [1601, 1581]], [[64704, 64704], "mapped", [1601, 1582]], [[64705, 64705], "mapped", [1601, 1605]], [[64706, 64706], "mapped", [1602, 1581]], [[64707, 64707], "mapped", [1602, 1605]], [[64708, 64708], "mapped", [1603, 1580]], [[64709, 64709], "mapped", [1603, 1581]], [[64710, 64710], "mapped", [1603, 1582]], [[64711, 64711], "mapped", [1603, 1604]], [[64712, 64712], "mapped", [1603, 1605]], [[64713, 64713], "mapped", [1604, 1580]], [[64714, 64714], "mapped", [1604, 1581]], [[64715, 64715], "mapped", [1604, 1582]], [[64716, 64716], "mapped", [1604, 1605]], [[64717, 64717], "mapped", [1604, 1607]], [[64718, 64718], "mapped", [1605, 1580]], [[64719, 64719], "mapped", [1605, 1581]], [[64720, 64720], "mapped", [1605, 1582]], [[64721, 64721], "mapped", [1605, 1605]], [[64722, 64722], "mapped", [1606, 1580]], [[64723, 64723], "mapped", [1606, 1581]], [[64724, 64724], "mapped", [1606, 1582]], [[64725, 64725], "mapped", [1606, 1605]], [[64726, 64726], "mapped", [1606, 1607]], [[64727, 64727], "mapped", [1607, 1580]], [[64728, 64728], "mapped", [1607, 1605]], [[64729, 64729], "mapped", [1607, 1648]], [[64730, 64730], "mapped", [1610, 1580]], [[64731, 64731], "mapped", [1610, 1581]], [[64732, 64732], "mapped", [1610, 1582]], [[64733, 64733], "mapped", [1610, 1605]], [[64734, 64734], "mapped", [1610, 1607]], [[64735, 64735], "mapped", [1574, 1605]], [[64736, 64736], "mapped", [1574, 1607]], [[64737, 64737], "mapped", [1576, 1605]], [[64738, 64738], "mapped", [1576, 1607]], [[64739, 64739], "mapped", [1578, 1605]], [[64740, 64740], "mapped", [1578, 1607]], [[64741, 64741], "mapped", [1579, 1605]], [[64742, 64742], "mapped", [1579, 1607]], [[64743, 64743], "mapped", [1587, 1605]], [[64744, 64744], "mapped", [1587, 1607]], [[64745, 64745], "mapped", [1588, 1605]], [[64746, 64746], "mapped", [1588, 1607]], [[64747, 64747], "mapped", [1603, 1604]], [[64748, 64748], "mapped", [1603, 1605]], [[64749, 64749], "mapped", [1604, 1605]], [[64750, 64750], "mapped", [1606, 1605]], [[64751, 64751], "mapped", [1606, 1607]], [[64752, 64752], "mapped", [1610, 1605]], [[64753, 64753], "mapped", [1610, 1607]], [[64754, 64754], "mapped", [1600, 1614, 1617]], [[64755, 64755], "mapped", [1600, 1615, 1617]], [[64756, 64756], "mapped", [1600, 1616, 1617]], [[64757, 64757], "mapped", [1591, 1609]], [[64758, 64758], "mapped", [1591, 1610]], [[64759, 64759], "mapped", [1593, 1609]], [[64760, 64760], "mapped", [1593, 1610]], [[64761, 64761], "mapped", [1594, 1609]], [[64762, 64762], "mapped", [1594, 1610]], [[64763, 64763], "mapped", [1587, 1609]], [[64764, 64764], "mapped", [1587, 1610]], [[64765, 64765], "mapped", [1588, 1609]], [[64766, 64766], "mapped", [1588, 1610]], [[64767, 64767], "mapped", [1581, 1609]], [[64768, 64768], "mapped", [1581, 1610]], [[64769, 64769], "mapped", [1580, 1609]], [[64770, 64770], "mapped", [1580, 1610]], [[64771, 64771], "mapped", [1582, 1609]], [[64772, 64772], "mapped", [1582, 1610]], [[64773, 64773], "mapped", [1589, 1609]], [[64774, 64774], "mapped", [1589, 1610]], [[64775, 64775], "mapped", [1590, 1609]], [[64776, 64776], "mapped", [1590, 1610]], [[64777, 64777], "mapped", [1588, 1580]], [[64778, 64778], "mapped", [1588, 1581]], [[64779, 64779], "mapped", [1588, 1582]], [[64780, 64780], "mapped", [1588, 1605]], [[64781, 64781], "mapped", [1588, 1585]], [[64782, 64782], "mapped", [1587, 1585]], [[64783, 64783], "mapped", [1589, 1585]], [[64784, 64784], "mapped", [1590, 1585]], [[64785, 64785], "mapped", [1591, 1609]], [[64786, 64786], "mapped", [1591, 1610]], [[64787, 64787], "mapped", [1593, 1609]], [[64788, 64788], "mapped", [1593, 1610]], [[64789, 64789], "mapped", [1594, 1609]], [[64790, 64790], "mapped", [1594, 1610]], [[64791, 64791], "mapped", [1587, 1609]], [[64792, 64792], "mapped", [1587, 1610]], [[64793, 64793], "mapped", [1588, 1609]], [[64794, 64794], "mapped", [1588, 1610]], [[64795, 64795], "mapped", [1581, 1609]], [[64796, 64796], "mapped", [1581, 1610]], [[64797, 64797], "mapped", [1580, 1609]], [[64798, 64798], "mapped", [1580, 1610]], [[64799, 64799], "mapped", [1582, 1609]], [[64800, 64800], "mapped", [1582, 1610]], [[64801, 64801], "mapped", [1589, 1609]], [[64802, 64802], "mapped", [1589, 1610]], [[64803, 64803], "mapped", [1590, 1609]], [[64804, 64804], "mapped", [1590, 1610]], [[64805, 64805], "mapped", [1588, 1580]], [[64806, 64806], "mapped", [1588, 1581]], [[64807, 64807], "mapped", [1588, 1582]], [[64808, 64808], "mapped", [1588, 1605]], [[64809, 64809], "mapped", [1588, 1585]], [[64810, 64810], "mapped", [1587, 1585]], [[64811, 64811], "mapped", [1589, 1585]], [[64812, 64812], "mapped", [1590, 1585]], [[64813, 64813], "mapped", [1588, 1580]], [[64814, 64814], "mapped", [1588, 1581]], [[64815, 64815], "mapped", [1588, 1582]], [[64816, 64816], "mapped", [1588, 1605]], [[64817, 64817], "mapped", [1587, 1607]], [[64818, 64818], "mapped", [1588, 1607]], [[64819, 64819], "mapped", [1591, 1605]], [[64820, 64820], "mapped", [1587, 1580]], [[64821, 64821], "mapped", [1587, 1581]], [[64822, 64822], "mapped", [1587, 1582]], [[64823, 64823], "mapped", [1588, 1580]], [[64824, 64824], "mapped", [1588, 1581]], [[64825, 64825], "mapped", [1588, 1582]], [[64826, 64826], "mapped", [1591, 1605]], [[64827, 64827], "mapped", [1592, 1605]], [[64828, 64829], "mapped", [1575, 1611]], [[64830, 64831], "valid", [], "NV8"], [[64832, 64847], "disallowed"], [[64848, 64848], "mapped", [1578, 1580, 1605]], [[64849, 64850], "mapped", [1578, 1581, 1580]], [[64851, 64851], "mapped", [1578, 1581, 1605]], [[64852, 64852], "mapped", [1578, 1582, 1605]], [[64853, 64853], "mapped", [1578, 1605, 1580]], [[64854, 64854], "mapped", [1578, 1605, 1581]], [[64855, 64855], "mapped", [1578, 1605, 1582]], [[64856, 64857], "mapped", [1580, 1605, 1581]], [[64858, 64858], "mapped", [1581, 1605, 1610]], [[64859, 64859], "mapped", [1581, 1605, 1609]], [[64860, 64860], "mapped", [1587, 1581, 1580]], [[64861, 64861], "mapped", [1587, 1580, 1581]], [[64862, 64862], "mapped", [1587, 1580, 1609]], [[64863, 64864], "mapped", [1587, 1605, 1581]], [[64865, 64865], "mapped", [1587, 1605, 1580]], [[64866, 64867], "mapped", [1587, 1605, 1605]], [[64868, 64869], "mapped", [1589, 1581, 1581]], [[64870, 64870], "mapped", [1589, 1605, 1605]], [[64871, 64872], "mapped", [1588, 1581, 1605]], [[64873, 64873], "mapped", [1588, 1580, 1610]], [[64874, 64875], "mapped", [1588, 1605, 1582]], [[64876, 64877], "mapped", [1588, 1605, 1605]], [[64878, 64878], "mapped", [1590, 1581, 1609]], [[64879, 64880], "mapped", [1590, 1582, 1605]], [[64881, 64882], "mapped", [1591, 1605, 1581]], [[64883, 64883], "mapped", [1591, 1605, 1605]], [[64884, 64884], "mapped", [1591, 1605, 1610]], [[64885, 64885], "mapped", [1593, 1580, 1605]], [[64886, 64887], "mapped", [1593, 1605, 1605]], [[64888, 64888], "mapped", [1593, 1605, 1609]], [[64889, 64889], "mapped", [1594, 1605, 1605]], [[64890, 64890], "mapped", [1594, 1605, 1610]], [[64891, 64891], "mapped", [1594, 1605, 1609]], [[64892, 64893], "mapped", [1601, 1582, 1605]], [[64894, 64894], "mapped", [1602, 1605, 1581]], [[64895, 64895], "mapped", [1602, 1605, 1605]], [[64896, 64896], "mapped", [1604, 1581, 1605]], [[64897, 64897], "mapped", [1604, 1581, 1610]], [[64898, 64898], "mapped", [1604, 1581, 1609]], [[64899, 64900], "mapped", [1604, 1580, 1580]], [[64901, 64902], "mapped", [1604, 1582, 1605]], [[64903, 64904], "mapped", [1604, 1605, 1581]], [[64905, 64905], "mapped", [1605, 1581, 1580]], [[64906, 64906], "mapped", [1605, 1581, 1605]], [[64907, 64907], "mapped", [1605, 1581, 1610]], [[64908, 64908], "mapped", [1605, 1580, 1581]], [[64909, 64909], "mapped", [1605, 1580, 1605]], [[64910, 64910], "mapped", [1605, 1582, 1580]], [[64911, 64911], "mapped", [1605, 1582, 1605]], [[64912, 64913], "disallowed"], [[64914, 64914], "mapped", [1605, 1580, 1582]], [[64915, 64915], "mapped", [1607, 1605, 1580]], [[64916, 64916], "mapped", [1607, 1605, 1605]], [[64917, 64917], "mapped", [1606, 1581, 1605]], [[64918, 64918], "mapped", [1606, 1581, 1609]], [[64919, 64920], "mapped", [1606, 1580, 1605]], [[64921, 64921], "mapped", [1606, 1580, 1609]], [[64922, 64922], "mapped", [1606, 1605, 1610]], [[64923, 64923], "mapped", [1606, 1605, 1609]], [[64924, 64925], "mapped", [1610, 1605, 1605]], [[64926, 64926], "mapped", [1576, 1582, 1610]], [[64927, 64927], "mapped", [1578, 1580, 1610]], [[64928, 64928], "mapped", [1578, 1580, 1609]], [[64929, 64929], "mapped", [1578, 1582, 1610]], [[64930, 64930], "mapped", [1578, 1582, 1609]], [[64931, 64931], "mapped", [1578, 1605, 1610]], [[64932, 64932], "mapped", [1578, 1605, 1609]], [[64933, 64933], "mapped", [1580, 1605, 1610]], [[64934, 64934], "mapped", [1580, 1581, 1609]], [[64935, 64935], "mapped", [1580, 1605, 1609]], [[64936, 64936], "mapped", [1587, 1582, 1609]], [[64937, 64937], "mapped", [1589, 1581, 1610]], [[64938, 64938], "mapped", [1588, 1581, 1610]], [[64939, 64939], "mapped", [1590, 1581, 1610]], [[64940, 64940], "mapped", [1604, 1580, 1610]], [[64941, 64941], "mapped", [1604, 1605, 1610]], [[64942, 64942], "mapped", [1610, 1581, 1610]], [[64943, 64943], "mapped", [1610, 1580, 1610]], [[64944, 64944], "mapped", [1610, 1605, 1610]], [[64945, 64945], "mapped", [1605, 1605, 1610]], [[64946, 64946], "mapped", [1602, 1605, 1610]], [[64947, 64947], "mapped", [1606, 1581, 1610]], [[64948, 64948], "mapped", [1602, 1605, 1581]], [[64949, 64949], "mapped", [1604, 1581, 1605]], [[64950, 64950], "mapped", [1593, 1605, 1610]], [[64951, 64951], "mapped", [1603, 1605, 1610]], [[64952, 64952], "mapped", [1606, 1580, 1581]], [[64953, 64953], "mapped", [1605, 1582, 1610]], [[64954, 64954], "mapped", [1604, 1580, 1605]], [[64955, 64955], "mapped", [1603, 1605, 1605]], [[64956, 64956], "mapped", [1604, 1580, 1605]], [[64957, 64957], "mapped", [1606, 1580, 1581]], [[64958, 64958], "mapped", [1580, 1581, 1610]], [[64959, 64959], "mapped", [1581, 1580, 1610]], [[64960, 64960], "mapped", [1605, 1580, 1610]], [[64961, 64961], "mapped", [1601, 1605, 1610]], [[64962, 64962], "mapped", [1576, 1581, 1610]], [[64963, 64963], "mapped", [1603, 1605, 1605]], [[64964, 64964], "mapped", [1593, 1580, 1605]], [[64965, 64965], "mapped", [1589, 1605, 1605]], [[64966, 64966], "mapped", [1587, 1582, 1610]], [[64967, 64967], "mapped", [1606, 1580, 1610]], [[64968, 64975], "disallowed"], [[64976, 65007], "disallowed"], [[65008, 65008], "mapped", [1589, 1604, 1746]], [[65009, 65009], "mapped", [1602, 1604, 1746]], [[65010, 65010], "mapped", [1575, 1604, 1604, 1607]], [[65011, 65011], "mapped", [1575, 1603, 1576, 1585]], [[65012, 65012], "mapped", [1605, 1581, 1605, 1583]], [[65013, 65013], "mapped", [1589, 1604, 1593, 1605]], [[65014, 65014], "mapped", [1585, 1587, 1608, 1604]], [[65015, 65015], "mapped", [1593, 1604, 1610, 1607]], [[65016, 65016], "mapped", [1608, 1587, 1604, 1605]], [[65017, 65017], "mapped", [1589, 1604, 1609]], [[65018, 65018], "disallowed_STD3_mapped", [1589, 1604, 1609, 32, 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587, 1604, 1605]], [[65019, 65019], "disallowed_STD3_mapped", [1580, 1604, 32, 1580, 1604, 1575, 1604, 1607]], [[65020, 65020], "mapped", [1585, 1740, 1575, 1604]], [[65021, 65021], "valid", [], "NV8"], [[65022, 65023], "disallowed"], [[65024, 65039], "ignored"], [[65040, 65040], "disallowed_STD3_mapped", [44]], [[65041, 65041], "mapped", [12289]], [[65042, 65042], "disallowed"], [[65043, 65043], "disallowed_STD3_mapped", [58]], [[65044, 65044], "disallowed_STD3_mapped", [59]], [[65045, 65045], "disallowed_STD3_mapped", [33]], [[65046, 65046], "disallowed_STD3_mapped", [63]], [[65047, 65047], "mapped", [12310]], [[65048, 65048], "mapped", [12311]], [[65049, 65049], "disallowed"], [[65050, 65055], "disallowed"], [[65056, 65059], "valid"], [[65060, 65062], "valid"], [[65063, 65069], "valid"], [[65070, 65071], "valid"], [[65072, 65072], "disallowed"], [[65073, 65073], "mapped", [8212]], [[65074, 65074], "mapped", [8211]], [[65075, 65076], "disallowed_STD3_mapped", [95]], [[65077, 65077], "disallowed_STD3_mapped", [40]], [[65078, 65078], "disallowed_STD3_mapped", [41]], [[65079, 65079], "disallowed_STD3_mapped", [123]], [[65080, 65080], "disallowed_STD3_mapped", [125]], [[65081, 65081], "mapped", [12308]], [[65082, 65082], "mapped", [12309]], [[65083, 65083], "mapped", [12304]], [[65084, 65084], "mapped", [12305]], [[65085, 65085], "mapped", [12298]], [[65086, 65086], "mapped", [12299]], [[65087, 65087], "mapped", [12296]], [[65088, 65088], "mapped", [12297]], [[65089, 65089], "mapped", [12300]], [[65090, 65090], "mapped", [12301]], [[65091, 65091], "mapped", [12302]], [[65092, 65092], "mapped", [12303]], [[65093, 65094], "valid", [], "NV8"], [[65095, 65095], "disallowed_STD3_mapped", [91]], [[65096, 65096], "disallowed_STD3_mapped", [93]], [[65097, 65100], "disallowed_STD3_mapped", [32, 773]], [[65101, 65103], "disallowed_STD3_mapped", [95]], [[65104, 65104], "disallowed_STD3_mapped", [44]], [[65105, 65105], "mapped", [12289]], [[65106, 65106], "disallowed"], [[65107, 65107], "disallowed"], [[65108, 65108], "disallowed_STD3_mapped", [59]], [[65109, 65109], "disallowed_STD3_mapped", [58]], [[65110, 65110], "disallowed_STD3_mapped", [63]], [[65111, 65111], "disallowed_STD3_mapped", [33]], [[65112, 65112], "mapped", [8212]], [[65113, 65113], "disallowed_STD3_mapped", [40]], [[65114, 65114], "disallowed_STD3_mapped", [41]], [[65115, 65115], "disallowed_STD3_mapped", [123]], [[65116, 65116], "disallowed_STD3_mapped", [125]], [[65117, 65117], "mapped", [12308]], [[65118, 65118], "mapped", [12309]], [[65119, 65119], "disallowed_STD3_mapped", [35]], [[65120, 65120], "disallowed_STD3_mapped", [38]], [[65121, 65121], "disallowed_STD3_mapped", [42]], [[65122, 65122], "disallowed_STD3_mapped", [43]], [[65123, 65123], "mapped", [45]], [[65124, 65124], "disallowed_STD3_mapped", [60]], [[65125, 65125], "disallowed_STD3_mapped", [62]], [[65126, 65126], "disallowed_STD3_mapped", [61]], [[65127, 65127], "disallowed"], [[65128, 65128], "disallowed_STD3_mapped", [92]], [[65129, 65129], "disallowed_STD3_mapped", [36]], [[65130, 65130], "disallowed_STD3_mapped", [37]], [[65131, 65131], "disallowed_STD3_mapped", [64]], [[65132, 65135], "disallowed"], [[65136, 65136], "disallowed_STD3_mapped", [32, 1611]], [[65137, 65137], "mapped", [1600, 1611]], [[65138, 65138], "disallowed_STD3_mapped", [32, 1612]], [[65139, 65139], "valid"], [[65140, 65140], "disallowed_STD3_mapped", [32, 1613]], [[65141, 65141], "disallowed"], [[65142, 65142], "disallowed_STD3_mapped", [32, 1614]], [[65143, 65143], "mapped", [1600, 1614]], [[65144, 65144], "disallowed_STD3_mapped", [32, 1615]], [[65145, 65145], "mapped", [1600, 1615]], [[65146, 65146], "disallowed_STD3_mapped", [32, 1616]], [[65147, 65147], "mapped", [1600, 1616]], [[65148, 65148], "disallowed_STD3_mapped", [32, 1617]], [[65149, 65149], "mapped", [1600, 1617]], [[65150, 65150], "disallowed_STD3_mapped", [32, 1618]], [[65151, 65151], "mapped", [1600, 1618]], [[65152, 65152], "mapped", [1569]], [[65153, 65154], "mapped", [1570]], [[65155, 65156], "mapped", [1571]], [[65157, 65158], "mapped", [1572]], [[65159, 65160], "mapped", [1573]], [[65161, 65164], "mapped", [1574]], [[65165, 65166], "mapped", [1575]], [[65167, 65170], "mapped", [1576]], [[65171, 65172], "mapped", [1577]], [[65173, 65176], "mapped", [1578]], [[65177, 65180], "mapped", [1579]], [[65181, 65184], "mapped", [1580]], [[65185, 65188], "mapped", [1581]], [[65189, 65192], "mapped", [1582]], [[65193, 65194], "mapped", [1583]], [[65195, 65196], "mapped", [1584]], [[65197, 65198], "mapped", [1585]], [[65199, 65200], "mapped", [1586]], [[65201, 65204], "mapped", [1587]], [[65205, 65208], "mapped", [1588]], [[65209, 65212], "mapped", [1589]], [[65213, 65216], "mapped", [1590]], [[65217, 65220], "mapped", [1591]], [[65221, 65224], "mapped", [1592]], [[65225, 65228], "mapped", [1593]], [[65229, 65232], "mapped", [1594]], [[65233, 65236], "mapped", [1601]], [[65237, 65240], "mapped", [1602]], [[65241, 65244], "mapped", [1603]], [[65245, 65248], "mapped", [1604]], [[65249, 65252], "mapped", [1605]], [[65253, 65256], "mapped", [1606]], [[65257, 65260], "mapped", [1607]], [[65261, 65262], "mapped", [1608]], [[65263, 65264], "mapped", [1609]], [[65265, 65268], "mapped", [1610]], [[65269, 65270], "mapped", [1604, 1570]], [[65271, 65272], "mapped", [1604, 1571]], [[65273, 65274], "mapped", [1604, 1573]], [[65275, 65276], "mapped", [1604, 1575]], [[65277, 65278], "disallowed"], [[65279, 65279], "ignored"], [[65280, 65280], "disallowed"], [[65281, 65281], "disallowed_STD3_mapped", [33]], [[65282, 65282], "disallowed_STD3_mapped", [34]], [[65283, 65283], "disallowed_STD3_mapped", [35]], [[65284, 65284], "disallowed_STD3_mapped", [36]], [[65285, 65285], "disallowed_STD3_mapped", [37]], [[65286, 65286], "disallowed_STD3_mapped", [38]], [[65287, 65287], "disallowed_STD3_mapped", [39]], [[65288, 65288], "disallowed_STD3_mapped", [40]], [[65289, 65289], "disallowed_STD3_mapped", [41]], [[65290, 65290], "disallowed_STD3_mapped", [42]], [[65291, 65291], "disallowed_STD3_mapped", [43]], [[65292, 65292], "disallowed_STD3_mapped", [44]], [[65293, 65293], "mapped", [45]], [[65294, 65294], "mapped", [46]], [[65295, 65295], "disallowed_STD3_mapped", [47]], [[65296, 65296], "mapped", [48]], [[65297, 65297], "mapped", [49]], [[65298, 65298], "mapped", [50]], [[65299, 65299], "mapped", [51]], [[65300, 65300], "mapped", [52]], [[65301, 65301], "mapped", [53]], [[65302, 65302], "mapped", [54]], [[65303, 65303], "mapped", [55]], [[65304, 65304], "mapped", [56]], [[65305, 65305], "mapped", [57]], [[65306, 65306], "disallowed_STD3_mapped", [58]], [[65307, 65307], "disallowed_STD3_mapped", [59]], [[65308, 65308], "disallowed_STD3_mapped", [60]], [[65309, 65309], "disallowed_STD3_mapped", [61]], [[65310, 65310], "disallowed_STD3_mapped", [62]], [[65311, 65311], "disallowed_STD3_mapped", [63]], [[65312, 65312], "disallowed_STD3_mapped", [64]], [[65313, 65313], "mapped", [97]], [[65314, 65314], "mapped", [98]], [[65315, 65315], "mapped", [99]], [[65316, 65316], "mapped", [100]], [[65317, 65317], "mapped", [101]], [[65318, 65318], "mapped", [102]], [[65319, 65319], "mapped", [103]], [[65320, 65320], "mapped", [104]], [[65321, 65321], "mapped", [105]], [[65322, 65322], "mapped", [106]], [[65323, 65323], "mapped", [107]], [[65324, 65324], "mapped", [108]], [[65325, 65325], "mapped", [109]], [[65326, 65326], "mapped", [110]], [[65327, 65327], "mapped", [111]], [[65328, 65328], "mapped", [112]], [[65329, 65329], "mapped", [113]], [[65330, 65330], "mapped", [114]], [[65331, 65331], "mapped", [115]], [[65332, 65332], "mapped", [116]], [[65333, 65333], "mapped", [117]], [[65334, 65334], "mapped", [118]], [[65335, 65335], "mapped", [119]], [[65336, 65336], "mapped", [120]], [[65337, 65337], "mapped", [121]], [[65338, 65338], "mapped", [122]], [[65339, 65339], "disallowed_STD3_mapped", [91]], [[65340, 65340], "disallowed_STD3_mapped", [92]], [[65341, 65341], "disallowed_STD3_mapped", [93]], [[65342, 65342], "disallowed_STD3_mapped", [94]], [[65343, 65343], "disallowed_STD3_mapped", [95]], [[65344, 65344], "disallowed_STD3_mapped", [96]], [[65345, 65345], "mapped", [97]], [[65346, 65346], "mapped", [98]], [[65347, 65347], "mapped", [99]], [[65348, 65348], "mapped", [100]], [[65349, 65349], "mapped", [101]], [[65350, 65350], "mapped", [102]], [[65351, 65351], "mapped", [103]], [[65352, 65352], "mapped", [104]], [[65353, 65353], "mapped", [105]], [[65354, 65354], "mapped", [106]], [[65355, 65355], "mapped", [107]], [[65356, 65356], "mapped", [108]], [[65357, 65357], "mapped", [109]], [[65358, 65358], "mapped", [110]], [[65359, 65359], "mapped", [111]], [[65360, 65360], "mapped", [112]], [[65361, 65361], "mapped", [113]], [[65362, 65362], "mapped", [114]], [[65363, 65363], "mapped", [115]], [[65364, 65364], "mapped", [116]], [[65365, 65365], "mapped", [117]], [[65366, 65366], "mapped", [118]], [[65367, 65367], "mapped", [119]], [[65368, 65368], "mapped", [120]], [[65369, 65369], "mapped", [121]], [[65370, 65370], "mapped", [122]], [[65371, 65371], "disallowed_STD3_mapped", [123]], [[65372, 65372], "disallowed_STD3_mapped", [124]], [[65373, 65373], "disallowed_STD3_mapped", [125]], [[65374, 65374], "disallowed_STD3_mapped", [126]], [[65375, 65375], "mapped", [10629]], [[65376, 65376], "mapped", [10630]], [[65377, 65377], "mapped", [46]], [[65378, 65378], "mapped", [12300]], [[65379, 65379], "mapped", [12301]], [[65380, 65380], "mapped", [12289]], [[65381, 65381], "mapped", [12539]], [[65382, 65382], "mapped", [12530]], [[65383, 65383], "mapped", [12449]], [[65384, 65384], "mapped", [12451]], [[65385, 65385], "mapped", [12453]], [[65386, 65386], "mapped", [12455]], [[65387, 65387], "mapped", [12457]], [[65388, 65388], "mapped", [12515]], [[65389, 65389], "mapped", [12517]], [[65390, 65390], "mapped", [12519]], [[65391, 65391], "mapped", [12483]], [[65392, 65392], "mapped", [12540]], [[65393, 65393], "mapped", [12450]], [[65394, 65394], "mapped", [12452]], [[65395, 65395], "mapped", [12454]], [[65396, 65396], "mapped", [12456]], [[65397, 65397], "mapped", [12458]], [[65398, 65398], "mapped", [12459]], [[65399, 65399], "mapped", [12461]], [[65400, 65400], "mapped", [12463]], [[65401, 65401], "mapped", [12465]], [[65402, 65402], "mapped", [12467]], [[65403, 65403], "mapped", [12469]], [[65404, 65404], "mapped", [12471]], [[65405, 65405], "mapped", [12473]], [[65406, 65406], "mapped", [12475]], [[65407, 65407], "mapped", [12477]], [[65408, 65408], "mapped", [12479]], [[65409, 65409], "mapped", [12481]], [[65410, 65410], "mapped", [12484]], [[65411, 65411], "mapped", [12486]], [[65412, 65412], "mapped", [12488]], [[65413, 65413], "mapped", [12490]], [[65414, 65414], "mapped", [12491]], [[65415, 65415], "mapped", [12492]], [[65416, 65416], "mapped", [12493]], [[65417, 65417], "mapped", [12494]], [[65418, 65418], "mapped", [12495]], [[65419, 65419], "mapped", [12498]], [[65420, 65420], "mapped", [12501]], [[65421, 65421], "mapped", [12504]], [[65422, 65422], "mapped", [12507]], [[65423, 65423], "mapped", [12510]], [[65424, 65424], "mapped", [12511]], [[65425, 65425], "mapped", [12512]], [[65426, 65426], "mapped", [12513]], [[65427, 65427], "mapped", [12514]], [[65428, 65428], "mapped", [12516]], [[65429, 65429], "mapped", [12518]], [[65430, 65430], "mapped", [12520]], [[65431, 65431], "mapped", [12521]], [[65432, 65432], "mapped", [12522]], [[65433, 65433], "mapped", [12523]], [[65434, 65434], "mapped", [12524]], [[65435, 65435], "mapped", [12525]], [[65436, 65436], "mapped", [12527]], [[65437, 65437], "mapped", [12531]], [[65438, 65438], "mapped", [12441]], [[65439, 65439], "mapped", [12442]], [[65440, 65440], "disallowed"], [[65441, 65441], "mapped", [4352]], [[65442, 65442], "mapped", [4353]], [[65443, 65443], "mapped", [4522]], [[65444, 65444], "mapped", [4354]], [[65445, 65445], "mapped", [4524]], [[65446, 65446], "mapped", [4525]], [[65447, 65447], "mapped", [4355]], [[65448, 65448], "mapped", [4356]], [[65449, 65449], "mapped", [4357]], [[65450, 65450], "mapped", [4528]], [[65451, 65451], "mapped", [4529]], [[65452, 65452], "mapped", [4530]], [[65453, 65453], "mapped", [4531]], [[65454, 65454], "mapped", [4532]], [[65455, 65455], "mapped", [4533]], [[65456, 65456], "mapped", [4378]], [[65457, 65457], "mapped", [4358]], [[65458, 65458], "mapped", [4359]], [[65459, 65459], "mapped", [4360]], [[65460, 65460], "mapped", [4385]], [[65461, 65461], "mapped", [4361]], [[65462, 65462], "mapped", [4362]], [[65463, 65463], "mapped", [4363]], [[65464, 65464], "mapped", [4364]], [[65465, 65465], "mapped", [4365]], [[65466, 65466], "mapped", [4366]], [[65467, 65467], "mapped", [4367]], [[65468, 65468], "mapped", [4368]], [[65469, 65469], "mapped", [4369]], [[65470, 65470], "mapped", [4370]], [[65471, 65473], "disallowed"], [[65474, 65474], "mapped", [4449]], [[65475, 65475], "mapped", [4450]], [[65476, 65476], "mapped", [4451]], [[65477, 65477], "mapped", [4452]], [[65478, 65478], "mapped", [4453]], [[65479, 65479], "mapped", [4454]], [[65480, 65481], "disallowed"], [[65482, 65482], "mapped", [4455]], [[65483, 65483], "mapped", [4456]], [[65484, 65484], "mapped", [4457]], [[65485, 65485], "mapped", [4458]], [[65486, 65486], "mapped", [4459]], [[65487, 65487], "mapped", [4460]], [[65488, 65489], "disallowed"], [[65490, 65490], "mapped", [4461]], [[65491, 65491], "mapped", [4462]], [[65492, 65492], "mapped", [4463]], [[65493, 65493], "mapped", [4464]], [[65494, 65494], "mapped", [4465]], [[65495, 65495], "mapped", [4466]], [[65496, 65497], "disallowed"], [[65498, 65498], "mapped", [4467]], [[65499, 65499], "mapped", [4468]], [[65500, 65500], "mapped", [4469]], [[65501, 65503], "disallowed"], [[65504, 65504], "mapped", [162]], [[65505, 65505], "mapped", [163]], [[65506, 65506], "mapped", [172]], [[65507, 65507], "disallowed_STD3_mapped", [32, 772]], [[65508, 65508], "mapped", [166]], [[65509, 65509], "mapped", [165]], [[65510, 65510], "mapped", [8361]], [[65511, 65511], "disallowed"], [[65512, 65512], "mapped", [9474]], [[65513, 65513], "mapped", [8592]], [[65514, 65514], "mapped", [8593]], [[65515, 65515], "mapped", [8594]], [[65516, 65516], "mapped", [8595]], [[65517, 65517], "mapped", [9632]], [[65518, 65518], "mapped", [9675]], [[65519, 65528], "disallowed"], [[65529, 65531], "disallowed"], [[65532, 65532], "disallowed"], [[65533, 65533], "disallowed"], [[65534, 65535], "disallowed"], [[65536, 65547], "valid"], [[65548, 65548], "disallowed"], [[65549, 65574], "valid"], [[65575, 65575], "disallowed"], [[65576, 65594], "valid"], [[65595, 65595], "disallowed"], [[65596, 65597], "valid"], [[65598, 65598], "disallowed"], [[65599, 65613], "valid"], [[65614, 65615], "disallowed"], [[65616, 65629], "valid"], [[65630, 65663], "disallowed"], [[65664, 65786], "valid"], [[65787, 65791], "disallowed"], [[65792, 65794], "valid", [], "NV8"], [[65795, 65798], "disallowed"], [[65799, 65843], "valid", [], "NV8"], [[65844, 65846], "disallowed"], [[65847, 65855], "valid", [], "NV8"], [[65856, 65930], "valid", [], "NV8"], [[65931, 65932], "valid", [], "NV8"], [[65933, 65935], "disallowed"], [[65936, 65947], "valid", [], "NV8"], [[65948, 65951], "disallowed"], [[65952, 65952], "valid", [], "NV8"], [[65953, 65999], "disallowed"], [[66e3, 66044], "valid", [], "NV8"], [[66045, 66045], "valid"], [[66046, 66175], "disallowed"], [[66176, 66204], "valid"], [[66205, 66207], "disallowed"], [[66208, 66256], "valid"], [[66257, 66271], "disallowed"], [[66272, 66272], "valid"], [[66273, 66299], "valid", [], "NV8"], [[66300, 66303], "disallowed"], [[66304, 66334], "valid"], [[66335, 66335], "valid"], [[66336, 66339], "valid", [], "NV8"], [[66340, 66351], "disallowed"], [[66352, 66368], "valid"], [[66369, 66369], "valid", [], "NV8"], [[66370, 66377], "valid"], [[66378, 66378], "valid", [], "NV8"], [[66379, 66383], "disallowed"], [[66384, 66426], "valid"], [[66427, 66431], "disallowed"], [[66432, 66461], "valid"], [[66462, 66462], "disallowed"], [[66463, 66463], "valid", [], "NV8"], [[66464, 66499], "valid"], [[66500, 66503], "disallowed"], [[66504, 66511], "valid"], [[66512, 66517], "valid", [], "NV8"], [[66518, 66559], "disallowed"], [[66560, 66560], "mapped", [66600]], [[66561, 66561], "mapped", [66601]], [[66562, 66562], "mapped", [66602]], [[66563, 66563], "mapped", [66603]], [[66564, 66564], "mapped", [66604]], [[66565, 66565], "mapped", [66605]], [[66566, 66566], "mapped", [66606]], [[66567, 66567], "mapped", [66607]], [[66568, 66568], "mapped", [66608]], [[66569, 66569], "mapped", [66609]], [[66570, 66570], "mapped", [66610]], [[66571, 66571], "mapped", [66611]], [[66572, 66572], "mapped", [66612]], [[66573, 66573], "mapped", [66613]], [[66574, 66574], "mapped", [66614]], [[66575, 66575], "mapped", [66615]], [[66576, 66576], "mapped", [66616]], [[66577, 66577], "mapped", [66617]], [[66578, 66578], "mapped", [66618]], [[66579, 66579], "mapped", [66619]], [[66580, 66580], "mapped", [66620]], [[66581, 66581], "mapped", [66621]], [[66582, 66582], "mapped", [66622]], [[66583, 66583], "mapped", [66623]], [[66584, 66584], "mapped", [66624]], [[66585, 66585], "mapped", [66625]], [[66586, 66586], "mapped", [66626]], [[66587, 66587], "mapped", [66627]], [[66588, 66588], "mapped", [66628]], [[66589, 66589], "mapped", [66629]], [[66590, 66590], "mapped", [66630]], [[66591, 66591], "mapped", [66631]], [[66592, 66592], "mapped", [66632]], [[66593, 66593], "mapped", [66633]], [[66594, 66594], "mapped", [66634]], [[66595, 66595], "mapped", [66635]], [[66596, 66596], "mapped", [66636]], [[66597, 66597], "mapped", [66637]], [[66598, 66598], "mapped", [66638]], [[66599, 66599], "mapped", [66639]], [[66600, 66637], "valid"], [[66638, 66717], "valid"], [[66718, 66719], "disallowed"], [[66720, 66729], "valid"], [[66730, 66815], "disallowed"], [[66816, 66855], "valid"], [[66856, 66863], "disallowed"], [[66864, 66915], "valid"], [[66916, 66926], "disallowed"], [[66927, 66927], "valid", [], "NV8"], [[66928, 67071], "disallowed"], [[67072, 67382], "valid"], [[67383, 67391], "disallowed"], [[67392, 67413], "valid"], [[67414, 67423], "disallowed"], [[67424, 67431], "valid"], [[67432, 67583], "disallowed"], [[67584, 67589], "valid"], [[67590, 67591], "disallowed"], [[67592, 67592], "valid"], [[67593, 67593], "disallowed"], [[67594, 67637], "valid"], [[67638, 67638], "disallowed"], [[67639, 67640], "valid"], [[67641, 67643], "disallowed"], [[67644, 67644], "valid"], [[67645, 67646], "disallowed"], [[67647, 67647], "valid"], [[67648, 67669], "valid"], [[67670, 67670], "disallowed"], [[67671, 67679], "valid", [], "NV8"], [[67680, 67702], "valid"], [[67703, 67711], "valid", [], "NV8"], [[67712, 67742], "valid"], [[67743, 67750], "disallowed"], [[67751, 67759], "valid", [], "NV8"], [[67760, 67807], "disallowed"], [[67808, 67826], "valid"], [[67827, 67827], "disallowed"], [[67828, 67829], "valid"], [[67830, 67834], "disallowed"], [[67835, 67839], "valid", [], "NV8"], [[67840, 67861], "valid"], [[67862, 67865], "valid", [], "NV8"], [[67866, 67867], "valid", [], "NV8"], [[67868, 67870], "disallowed"], [[67871, 67871], "valid", [], "NV8"], [[67872, 67897], "valid"], [[67898, 67902], "disallowed"], [[67903, 67903], "valid", [], "NV8"], [[67904, 67967], "disallowed"], [[67968, 68023], "valid"], [[68024, 68027], "disallowed"], [[68028, 68029], "valid", [], "NV8"], [[68030, 68031], "valid"], [[68032, 68047], "valid", [], "NV8"], [[68048, 68049], "disallowed"], [[68050, 68095], "valid", [], "NV8"], [[68096, 68099], "valid"], [[68100, 68100], "disallowed"], [[68101, 68102], "valid"], [[68103, 68107], "disallowed"], [[68108, 68115], "valid"], [[68116, 68116], "disallowed"], [[68117, 68119], "valid"], [[68120, 68120], "disallowed"], [[68121, 68147], "valid"], [[68148, 68151], "disallowed"], [[68152, 68154], "valid"], [[68155, 68158], "disallowed"], [[68159, 68159], "valid"], [[68160, 68167], "valid", [], "NV8"], [[68168, 68175], "disallowed"], [[68176, 68184], "valid", [], "NV8"], [[68185, 68191], "disallowed"], [[68192, 68220], "valid"], [[68221, 68223], "valid", [], "NV8"], [[68224, 68252], "valid"], [[68253, 68255], "valid", [], "NV8"], [[68256, 68287], "disallowed"], [[68288, 68295], "valid"], [[68296, 68296], "valid", [], "NV8"], [[68297, 68326], "valid"], [[68327, 68330], "disallowed"], [[68331, 68342], "valid", [], "NV8"], [[68343, 68351], "disallowed"], [[68352, 68405], "valid"], [[68406, 68408], "disallowed"], [[68409, 68415], "valid", [], "NV8"], [[68416, 68437], "valid"], [[68438, 68439], "disallowed"], [[68440, 68447], "valid", [], "NV8"], [[68448, 68466], "valid"], [[68467, 68471], "disallowed"], [[68472, 68479], "valid", [], "NV8"], [[68480, 68497], "valid"], [[68498, 68504], "disallowed"], [[68505, 68508], "valid", [], "NV8"], [[68509, 68520], "disallowed"], [[68521, 68527], "valid", [], "NV8"], [[68528, 68607], "disallowed"], [[68608, 68680], "valid"], [[68681, 68735], "disallowed"], [[68736, 68736], "mapped", [68800]], [[68737, 68737], "mapped", [68801]], [[68738, 68738], "mapped", [68802]], [[68739, 68739], "mapped", [68803]], [[68740, 68740], "mapped", [68804]], [[68741, 68741], "mapped", [68805]], [[68742, 68742], "mapped", [68806]], [[68743, 68743], "mapped", [68807]], [[68744, 68744], "mapped", [68808]], [[68745, 68745], "mapped", [68809]], [[68746, 68746], "mapped", [68810]], [[68747, 68747], "mapped", [68811]], [[68748, 68748], "mapped", [68812]], [[68749, 68749], "mapped", [68813]], [[68750, 68750], "mapped", [68814]], [[68751, 68751], "mapped", [68815]], [[68752, 68752], "mapped", [68816]], [[68753, 68753], "mapped", [68817]], [[68754, 68754], "mapped", [68818]], [[68755, 68755], "mapped", [68819]], [[68756, 68756], "mapped", [68820]], [[68757, 68757], "mapped", [68821]], [[68758, 68758], "mapped", [68822]], [[68759, 68759], "mapped", [68823]], [[68760, 68760], "mapped", [68824]], [[68761, 68761], "mapped", [68825]], [[68762, 68762], "mapped", [68826]], [[68763, 68763], "mapped", [68827]], [[68764, 68764], "mapped", [68828]], [[68765, 68765], "mapped", [68829]], [[68766, 68766], "mapped", [68830]], [[68767, 68767], "mapped", [68831]], [[68768, 68768], "mapped", [68832]], [[68769, 68769], "mapped", [68833]], [[68770, 68770], "mapped", [68834]], [[68771, 68771], "mapped", [68835]], [[68772, 68772], "mapped", [68836]], [[68773, 68773], "mapped", [68837]], [[68774, 68774], "mapped", [68838]], [[68775, 68775], "mapped", [68839]], [[68776, 68776], "mapped", [68840]], [[68777, 68777], "mapped", [68841]], [[68778, 68778], "mapped", [68842]], [[68779, 68779], "mapped", [68843]], [[68780, 68780], "mapped", [68844]], [[68781, 68781], "mapped", [68845]], [[68782, 68782], "mapped", [68846]], [[68783, 68783], "mapped", [68847]], [[68784, 68784], "mapped", [68848]], [[68785, 68785], "mapped", [68849]], [[68786, 68786], "mapped", [68850]], [[68787, 68799], "disallowed"], [[68800, 68850], "valid"], [[68851, 68857], "disallowed"], [[68858, 68863], "valid", [], "NV8"], [[68864, 69215], "disallowed"], [[69216, 69246], "valid", [], "NV8"], [[69247, 69631], "disallowed"], [[69632, 69702], "valid"], [[69703, 69709], "valid", [], "NV8"], [[69710, 69713], "disallowed"], [[69714, 69733], "valid", [], "NV8"], [[69734, 69743], "valid"], [[69744, 69758], "disallowed"], [[69759, 69759], "valid"], [[69760, 69818], "valid"], [[69819, 69820], "valid", [], "NV8"], [[69821, 69821], "disallowed"], [[69822, 69825], "valid", [], "NV8"], [[69826, 69839], "disallowed"], [[69840, 69864], "valid"], [[69865, 69871], "disallowed"], [[69872, 69881], "valid"], [[69882, 69887], "disallowed"], [[69888, 69940], "valid"], [[69941, 69941], "disallowed"], [[69942, 69951], "valid"], [[69952, 69955], "valid", [], "NV8"], [[69956, 69967], "disallowed"], [[69968, 70003], "valid"], [[70004, 70005], "valid", [], "NV8"], [[70006, 70006], "valid"], [[70007, 70015], "disallowed"], [[70016, 70084], "valid"], [[70085, 70088], "valid", [], "NV8"], [[70089, 70089], "valid", [], "NV8"], [[70090, 70092], "valid"], [[70093, 70093], "valid", [], "NV8"], [[70094, 70095], "disallowed"], [[70096, 70105], "valid"], [[70106, 70106], "valid"], [[70107, 70107], "valid", [], "NV8"], [[70108, 70108], "valid"], [[70109, 70111], "valid", [], "NV8"], [[70112, 70112], "disallowed"], [[70113, 70132], "valid", [], "NV8"], [[70133, 70143], "disallowed"], [[70144, 70161], "valid"], [[70162, 70162], "disallowed"], [[70163, 70199], "valid"], [[70200, 70205], "valid", [], "NV8"], [[70206, 70271], "disallowed"], [[70272, 70278], "valid"], [[70279, 70279], "disallowed"], [[70280, 70280], "valid"], [[70281, 70281], "disallowed"], [[70282, 70285], "valid"], [[70286, 70286], "disallowed"], [[70287, 70301], "valid"], [[70302, 70302], "disallowed"], [[70303, 70312], "valid"], [[70313, 70313], "valid", [], "NV8"], [[70314, 70319], "disallowed"], [[70320, 70378], "valid"], [[70379, 70383], "disallowed"], [[70384, 70393], "valid"], [[70394, 70399], "disallowed"], [[70400, 70400], "valid"], [[70401, 70403], "valid"], [[70404, 70404], "disallowed"], [[70405, 70412], "valid"], [[70413, 70414], "disallowed"], [[70415, 70416], "valid"], [[70417, 70418], "disallowed"], [[70419, 70440], "valid"], [[70441, 70441], "disallowed"], [[70442, 70448], "valid"], [[70449, 70449], "disallowed"], [[70450, 70451], "valid"], [[70452, 70452], "disallowed"], [[70453, 70457], "valid"], [[70458, 70459], "disallowed"], [[70460, 70468], "valid"], [[70469, 70470], "disallowed"], [[70471, 70472], "valid"], [[70473, 70474], "disallowed"], [[70475, 70477], "valid"], [[70478, 70479], "disallowed"], [[70480, 70480], "valid"], [[70481, 70486], "disallowed"], [[70487, 70487], "valid"], [[70488, 70492], "disallowed"], [[70493, 70499], "valid"], [[70500, 70501], "disallowed"], [[70502, 70508], "valid"], [[70509, 70511], "disallowed"], [[70512, 70516], "valid"], [[70517, 70783], "disallowed"], [[70784, 70853], "valid"], [[70854, 70854], "valid", [], "NV8"], [[70855, 70855], "valid"], [[70856, 70863], "disallowed"], [[70864, 70873], "valid"], [[70874, 71039], "disallowed"], [[71040, 71093], "valid"], [[71094, 71095], "disallowed"], [[71096, 71104], "valid"], [[71105, 71113], "valid", [], "NV8"], [[71114, 71127], "valid", [], "NV8"], [[71128, 71133], "valid"], [[71134, 71167], "disallowed"], [[71168, 71232], "valid"], [[71233, 71235], "valid", [], "NV8"], [[71236, 71236], "valid"], [[71237, 71247], "disallowed"], [[71248, 71257], "valid"], [[71258, 71295], "disallowed"], [[71296, 71351], "valid"], [[71352, 71359], "disallowed"], [[71360, 71369], "valid"], [[71370, 71423], "disallowed"], [[71424, 71449], "valid"], [[71450, 71452], "disallowed"], [[71453, 71467], "valid"], [[71468, 71471], "disallowed"], [[71472, 71481], "valid"], [[71482, 71487], "valid", [], "NV8"], [[71488, 71839], "disallowed"], [[71840, 71840], "mapped", [71872]], [[71841, 71841], "mapped", [71873]], [[71842, 71842], "mapped", [71874]], [[71843, 71843], "mapped", [71875]], [[71844, 71844], "mapped", [71876]], [[71845, 71845], "mapped", [71877]], [[71846, 71846], "mapped", [71878]], [[71847, 71847], "mapped", [71879]], [[71848, 71848], "mapped", [71880]], [[71849, 71849], "mapped", [71881]], [[71850, 71850], "mapped", [71882]], [[71851, 71851], "mapped", [71883]], [[71852, 71852], "mapped", [71884]], [[71853, 71853], "mapped", [71885]], [[71854, 71854], "mapped", [71886]], [[71855, 71855], "mapped", [71887]], [[71856, 71856], "mapped", [71888]], [[71857, 71857], "mapped", [71889]], [[71858, 71858], "mapped", [71890]], [[71859, 71859], "mapped", [71891]], [[71860, 71860], "mapped", [71892]], [[71861, 71861], "mapped", [71893]], [[71862, 71862], "mapped", [71894]], [[71863, 71863], "mapped", [71895]], [[71864, 71864], "mapped", [71896]], [[71865, 71865], "mapped", [71897]], [[71866, 71866], "mapped", [71898]], [[71867, 71867], "mapped", [71899]], [[71868, 71868], "mapped", [71900]], [[71869, 71869], "mapped", [71901]], [[71870, 71870], "mapped", [71902]], [[71871, 71871], "mapped", [71903]], [[71872, 71913], "valid"], [[71914, 71922], "valid", [], "NV8"], [[71923, 71934], "disallowed"], [[71935, 71935], "valid"], [[71936, 72383], "disallowed"], [[72384, 72440], "valid"], [[72441, 73727], "disallowed"], [[73728, 74606], "valid"], [[74607, 74648], "valid"], [[74649, 74649], "valid"], [[74650, 74751], "disallowed"], [[74752, 74850], "valid", [], "NV8"], [[74851, 74862], "valid", [], "NV8"], [[74863, 74863], "disallowed"], [[74864, 74867], "valid", [], "NV8"], [[74868, 74868], "valid", [], "NV8"], [[74869, 74879], "disallowed"], [[74880, 75075], "valid"], [[75076, 77823], "disallowed"], [[77824, 78894], "valid"], [[78895, 82943], "disallowed"], [[82944, 83526], "valid"], [[83527, 92159], "disallowed"], [[92160, 92728], "valid"], [[92729, 92735], "disallowed"], [[92736, 92766], "valid"], [[92767, 92767], "disallowed"], [[92768, 92777], "valid"], [[92778, 92781], "disallowed"], [[92782, 92783], "valid", [], "NV8"], [[92784, 92879], "disallowed"], [[92880, 92909], "valid"], [[92910, 92911], "disallowed"], [[92912, 92916], "valid"], [[92917, 92917], "valid", [], "NV8"], [[92918, 92927], "disallowed"], [[92928, 92982], "valid"], [[92983, 92991], "valid", [], "NV8"], [[92992, 92995], "valid"], [[92996, 92997], "valid", [], "NV8"], [[92998, 93007], "disallowed"], [[93008, 93017], "valid"], [[93018, 93018], "disallowed"], [[93019, 93025], "valid", [], "NV8"], [[93026, 93026], "disallowed"], [[93027, 93047], "valid"], [[93048, 93052], "disallowed"], [[93053, 93071], "valid"], [[93072, 93951], "disallowed"], [[93952, 94020], "valid"], [[94021, 94031], "disallowed"], [[94032, 94078], "valid"], [[94079, 94094], "disallowed"], [[94095, 94111], "valid"], [[94112, 110591], "disallowed"], [[110592, 110593], "valid"], [[110594, 113663], "disallowed"], [[113664, 113770], "valid"], [[113771, 113775], "disallowed"], [[113776, 113788], "valid"], [[113789, 113791], "disallowed"], [[113792, 113800], "valid"], [[113801, 113807], "disallowed"], [[113808, 113817], "valid"], [[113818, 113819], "disallowed"], [[113820, 113820], "valid", [], "NV8"], [[113821, 113822], "valid"], [[113823, 113823], "valid", [], "NV8"], [[113824, 113827], "ignored"], [[113828, 118783], "disallowed"], [[118784, 119029], "valid", [], "NV8"], [[119030, 119039], "disallowed"], [[119040, 119078], "valid", [], "NV8"], [[119079, 119080], "disallowed"], [[119081, 119081], "valid", [], "NV8"], [[119082, 119133], "valid", [], "NV8"], [[119134, 119134], "mapped", [119127, 119141]], [[119135, 119135], "mapped", [119128, 119141]], [[119136, 119136], "mapped", [119128, 119141, 119150]], [[119137, 119137], "mapped", [119128, 119141, 119151]], [[119138, 119138], "mapped", [119128, 119141, 119152]], [[119139, 119139], "mapped", [119128, 119141, 119153]], [[119140, 119140], "mapped", [119128, 119141, 119154]], [[119141, 119154], "valid", [], "NV8"], [[119155, 119162], "disallowed"], [[119163, 119226], "valid", [], "NV8"], [[119227, 119227], "mapped", [119225, 119141]], [[119228, 119228], "mapped", [119226, 119141]], [[119229, 119229], "mapped", [119225, 119141, 119150]], [[119230, 119230], "mapped", [119226, 119141, 119150]], [[119231, 119231], "mapped", [119225, 119141, 119151]], [[119232, 119232], "mapped", [119226, 119141, 119151]], [[119233, 119261], "valid", [], "NV8"], [[119262, 119272], "valid", [], "NV8"], [[119273, 119295], "disallowed"], [[119296, 119365], "valid", [], "NV8"], [[119366, 119551], "disallowed"], [[119552, 119638], "valid", [], "NV8"], [[119639, 119647], "disallowed"], [[119648, 119665], "valid", [], "NV8"], [[119666, 119807], "disallowed"], [[119808, 119808], "mapped", [97]], [[119809, 119809], "mapped", [98]], [[119810, 119810], "mapped", [99]], [[119811, 119811], "mapped", [100]], [[119812, 119812], "mapped", [101]], [[119813, 119813], "mapped", [102]], [[119814, 119814], "mapped", [103]], [[119815, 119815], "mapped", [104]], [[119816, 119816], "mapped", [105]], [[119817, 119817], "mapped", [106]], [[119818, 119818], "mapped", [107]], [[119819, 119819], "mapped", [108]], [[119820, 119820], "mapped", [109]], [[119821, 119821], "mapped", [110]], [[119822, 119822], "mapped", [111]], [[119823, 119823], "mapped", [112]], [[119824, 119824], "mapped", [113]], [[119825, 119825], "mapped", [114]], [[119826, 119826], "mapped", [115]], [[119827, 119827], "mapped", [116]], [[119828, 119828], "mapped", [117]], [[119829, 119829], "mapped", [118]], [[119830, 119830], "mapped", [119]], [[119831, 119831], "mapped", [120]], [[119832, 119832], "mapped", [121]], [[119833, 119833], "mapped", [122]], [[119834, 119834], "mapped", [97]], [[119835, 119835], "mapped", [98]], [[119836, 119836], "mapped", [99]], [[119837, 119837], "mapped", [100]], [[119838, 119838], "mapped", [101]], [[119839, 119839], "mapped", [102]], [[119840, 119840], "mapped", [103]], [[119841, 119841], "mapped", [104]], [[119842, 119842], "mapped", [105]], [[119843, 119843], "mapped", [106]], [[119844, 119844], "mapped", [107]], [[119845, 119845], "mapped", [108]], [[119846, 119846], "mapped", [109]], [[119847, 119847], "mapped", [110]], [[119848, 119848], "mapped", [111]], [[119849, 119849], "mapped", [112]], [[119850, 119850], "mapped", [113]], [[119851, 119851], "mapped", [114]], [[119852, 119852], "mapped", [115]], [[119853, 119853], "mapped", [116]], [[119854, 119854], "mapped", [117]], [[119855, 119855], "mapped", [118]], [[119856, 119856], "mapped", [119]], [[119857, 119857], "mapped", [120]], [[119858, 119858], "mapped", [121]], [[119859, 119859], "mapped", [122]], [[119860, 119860], "mapped", [97]], [[119861, 119861], "mapped", [98]], [[119862, 119862], "mapped", [99]], [[119863, 119863], "mapped", [100]], [[119864, 119864], "mapped", [101]], [[119865, 119865], "mapped", [102]], [[119866, 119866], "mapped", [103]], [[119867, 119867], "mapped", [104]], [[119868, 119868], "mapped", [105]], [[119869, 119869], "mapped", [106]], [[119870, 119870], "mapped", [107]], [[119871, 119871], "mapped", [108]], [[119872, 119872], "mapped", [109]], [[119873, 119873], "mapped", [110]], [[119874, 119874], "mapped", [111]], [[119875, 119875], "mapped", [112]], [[119876, 119876], "mapped", [113]], [[119877, 119877], "mapped", [114]], [[119878, 119878], "mapped", [115]], [[119879, 119879], "mapped", [116]], [[119880, 119880], "mapped", [117]], [[119881, 119881], "mapped", [118]], [[119882, 119882], "mapped", [119]], [[119883, 119883], "mapped", [120]], [[119884, 119884], "mapped", [121]], [[119885, 119885], "mapped", [122]], [[119886, 119886], "mapped", [97]], [[119887, 119887], "mapped", [98]], [[119888, 119888], "mapped", [99]], [[119889, 119889], "mapped", [100]], [[119890, 119890], "mapped", [101]], [[119891, 119891], "mapped", [102]], [[119892, 119892], "mapped", [103]], [[119893, 119893], "disallowed"], [[119894, 119894], "mapped", [105]], [[119895, 119895], "mapped", [106]], [[119896, 119896], "mapped", [107]], [[119897, 119897], "mapped", [108]], [[119898, 119898], "mapped", [109]], [[119899, 119899], "mapped", [110]], [[119900, 119900], "mapped", [111]], [[119901, 119901], "mapped", [112]], [[119902, 119902], "mapped", [113]], [[119903, 119903], "mapped", [114]], [[119904, 119904], "mapped", [115]], [[119905, 119905], "mapped", [116]], [[119906, 119906], "mapped", [117]], [[119907, 119907], "mapped", [118]], [[119908, 119908], "mapped", [119]], [[119909, 119909], "mapped", [120]], [[119910, 119910], "mapped", [121]], [[119911, 119911], "mapped", [122]], [[119912, 119912], "mapped", [97]], [[119913, 119913], "mapped", [98]], [[119914, 119914], "mapped", [99]], [[119915, 119915], "mapped", [100]], [[119916, 119916], "mapped", [101]], [[119917, 119917], "mapped", [102]], [[119918, 119918], "mapped", [103]], [[119919, 119919], "mapped", [104]], [[119920, 119920], "mapped", [105]], [[119921, 119921], "mapped", [106]], [[119922, 119922], "mapped", [107]], [[119923, 119923], "mapped", [108]], [[119924, 119924], "mapped", [109]], [[119925, 119925], "mapped", [110]], [[119926, 119926], "mapped", [111]], [[119927, 119927], "mapped", [112]], [[119928, 119928], "mapped", [113]], [[119929, 119929], "mapped", [114]], [[119930, 119930], "mapped", [115]], [[119931, 119931], "mapped", [116]], [[119932, 119932], "mapped", [117]], [[119933, 119933], "mapped", [118]], [[119934, 119934], "mapped", [119]], [[119935, 119935], "mapped", [120]], [[119936, 119936], "mapped", [121]], [[119937, 119937], "mapped", [122]], [[119938, 119938], "mapped", [97]], [[119939, 119939], "mapped", [98]], [[119940, 119940], "mapped", [99]], [[119941, 119941], "mapped", [100]], [[119942, 119942], "mapped", [101]], [[119943, 119943], "mapped", [102]], [[119944, 119944], "mapped", [103]], [[119945, 119945], "mapped", [104]], [[119946, 119946], "mapped", [105]], [[119947, 119947], "mapped", [106]], [[119948, 119948], "mapped", [107]], [[119949, 119949], "mapped", [108]], [[119950, 119950], "mapped", [109]], [[119951, 119951], "mapped", [110]], [[119952, 119952], "mapped", [111]], [[119953, 119953], "mapped", [112]], [[119954, 119954], "mapped", [113]], [[119955, 119955], "mapped", [114]], [[119956, 119956], "mapped", [115]], [[119957, 119957], "mapped", [116]], [[119958, 119958], "mapped", [117]], [[119959, 119959], "mapped", [118]], [[119960, 119960], "mapped", [119]], [[119961, 119961], "mapped", [120]], [[119962, 119962], "mapped", [121]], [[119963, 119963], "mapped", [122]], [[119964, 119964], "mapped", [97]], [[119965, 119965], "disallowed"], [[119966, 119966], "mapped", [99]], [[119967, 119967], "mapped", [100]], [[119968, 119969], "disallowed"], [[119970, 119970], "mapped", [103]], [[119971, 119972], "disallowed"], [[119973, 119973], "mapped", [106]], [[119974, 119974], "mapped", [107]], [[119975, 119976], "disallowed"], [[119977, 119977], "mapped", [110]], [[119978, 119978], "mapped", [111]], [[119979, 119979], "mapped", [112]], [[119980, 119980], "mapped", [113]], [[119981, 119981], "disallowed"], [[119982, 119982], "mapped", [115]], [[119983, 119983], "mapped", [116]], [[119984, 119984], "mapped", [117]], [[119985, 119985], "mapped", [118]], [[119986, 119986], "mapped", [119]], [[119987, 119987], "mapped", [120]], [[119988, 119988], "mapped", [121]], [[119989, 119989], "mapped", [122]], [[119990, 119990], "mapped", [97]], [[119991, 119991], "mapped", [98]], [[119992, 119992], "mapped", [99]], [[119993, 119993], "mapped", [100]], [[119994, 119994], "disallowed"], [[119995, 119995], "mapped", [102]], [[119996, 119996], "disallowed"], [[119997, 119997], "mapped", [104]], [[119998, 119998], "mapped", [105]], [[119999, 119999], "mapped", [106]], [[12e4, 12e4], "mapped", [107]], [[120001, 120001], "mapped", [108]], [[120002, 120002], "mapped", [109]], [[120003, 120003], "mapped", [110]], [[120004, 120004], "disallowed"], [[120005, 120005], "mapped", [112]], [[120006, 120006], "mapped", [113]], [[120007, 120007], "mapped", [114]], [[120008, 120008], "mapped", [115]], [[120009, 120009], "mapped", [116]], [[120010, 120010], "mapped", [117]], [[120011, 120011], "mapped", [118]], [[120012, 120012], "mapped", [119]], [[120013, 120013], "mapped", [120]], [[120014, 120014], "mapped", [121]], [[120015, 120015], "mapped", [122]], [[120016, 120016], "mapped", [97]], [[120017, 120017], "mapped", [98]], [[120018, 120018], "mapped", [99]], [[120019, 120019], "mapped", [100]], [[120020, 120020], "mapped", [101]], [[120021, 120021], "mapped", [102]], [[120022, 120022], "mapped", [103]], [[120023, 120023], "mapped", [104]], [[120024, 120024], "mapped", [105]], [[120025, 120025], "mapped", [106]], [[120026, 120026], "mapped", [107]], [[120027, 120027], "mapped", [108]], [[120028, 120028], "mapped", [109]], [[120029, 120029], "mapped", [110]], [[120030, 120030], "mapped", [111]], [[120031, 120031], "mapped", [112]], [[120032, 120032], "mapped", [113]], [[120033, 120033], "mapped", [114]], [[120034, 120034], "mapped", [115]], [[120035, 120035], "mapped", [116]], [[120036, 120036], "mapped", [117]], [[120037, 120037], "mapped", [118]], [[120038, 120038], "mapped", [119]], [[120039, 120039], "mapped", [120]], [[120040, 120040], "mapped", [121]], [[120041, 120041], "mapped", [122]], [[120042, 120042], "mapped", [97]], [[120043, 120043], "mapped", [98]], [[120044, 120044], "mapped", [99]], [[120045, 120045], "mapped", [100]], [[120046, 120046], "mapped", [101]], [[120047, 120047], "mapped", [102]], [[120048, 120048], "mapped", [103]], [[120049, 120049], "mapped", [104]], [[120050, 120050], "mapped", [105]], [[120051, 120051], "mapped", [106]], [[120052, 120052], "mapped", [107]], [[120053, 120053], "mapped", [108]], [[120054, 120054], "mapped", [109]], [[120055, 120055], "mapped", [110]], [[120056, 120056], "mapped", [111]], [[120057, 120057], "mapped", [112]], [[120058, 120058], "mapped", [113]], [[120059, 120059], "mapped", [114]], [[120060, 120060], "mapped", [115]], [[120061, 120061], "mapped", [116]], [[120062, 120062], "mapped", [117]], [[120063, 120063], "mapped", [118]], [[120064, 120064], "mapped", [119]], [[120065, 120065], "mapped", [120]], [[120066, 120066], "mapped", [121]], [[120067, 120067], "mapped", [122]], [[120068, 120068], "mapped", [97]], [[120069, 120069], "mapped", [98]], [[120070, 120070], "disallowed"], [[120071, 120071], "mapped", [100]], [[120072, 120072], "mapped", [101]], [[120073, 120073], "mapped", [102]], [[120074, 120074], "mapped", [103]], [[120075, 120076], "disallowed"], [[120077, 120077], "mapped", [106]], [[120078, 120078], "mapped", [107]], [[120079, 120079], "mapped", [108]], [[120080, 120080], "mapped", [109]], [[120081, 120081], "mapped", [110]], [[120082, 120082], "mapped", [111]], [[120083, 120083], "mapped", [112]], [[120084, 120084], "mapped", [113]], [[120085, 120085], "disallowed"], [[120086, 120086], "mapped", [115]], [[120087, 120087], "mapped", [116]], [[120088, 120088], "mapped", [117]], [[120089, 120089], "mapped", [118]], [[120090, 120090], "mapped", [119]], [[120091, 120091], "mapped", [120]], [[120092, 120092], "mapped", [121]], [[120093, 120093], "disallowed"], [[120094, 120094], "mapped", [97]], [[120095, 120095], "mapped", [98]], [[120096, 120096], "mapped", [99]], [[120097, 120097], "mapped", [100]], [[120098, 120098], "mapped", [101]], [[120099, 120099], "mapped", [102]], [[120100, 120100], "mapped", [103]], [[120101, 120101], "mapped", [104]], [[120102, 120102], "mapped", [105]], [[120103, 120103], "mapped", [106]], [[120104, 120104], "mapped", [107]], [[120105, 120105], "mapped", [108]], [[120106, 120106], "mapped", [109]], [[120107, 120107], "mapped", [110]], [[120108, 120108], "mapped", [111]], [[120109, 120109], "mapped", [112]], [[120110, 120110], "mapped", [113]], [[120111, 120111], "mapped", [114]], [[120112, 120112], "mapped", [115]], [[120113, 120113], "mapped", [116]], [[120114, 120114], "mapped", [117]], [[120115, 120115], "mapped", [118]], [[120116, 120116], "mapped", [119]], [[120117, 120117], "mapped", [120]], [[120118, 120118], "mapped", [121]], [[120119, 120119], "mapped", [122]], [[120120, 120120], "mapped", [97]], [[120121, 120121], "mapped", [98]], [[120122, 120122], "disallowed"], [[120123, 120123], "mapped", [100]], [[120124, 120124], "mapped", [101]], [[120125, 120125], "mapped", [102]], [[120126, 120126], "mapped", [103]], [[120127, 120127], "disallowed"], [[120128, 120128], "mapped", [105]], [[120129, 120129], "mapped", [106]], [[120130, 120130], "mapped", [107]], [[120131, 120131], "mapped", [108]], [[120132, 120132], "mapped", [109]], [[120133, 120133], "disallowed"], [[120134, 120134], "mapped", [111]], [[120135, 120137], "disallowed"], [[120138, 120138], "mapped", [115]], [[120139, 120139], "mapped", [116]], [[120140, 120140], "mapped", [117]], [[120141, 120141], "mapped", [118]], [[120142, 120142], "mapped", [119]], [[120143, 120143], "mapped", [120]], [[120144, 120144], "mapped", [121]], [[120145, 120145], "disallowed"], [[120146, 120146], "mapped", [97]], [[120147, 120147], "mapped", [98]], [[120148, 120148], "mapped", [99]], [[120149, 120149], "mapped", [100]], [[120150, 120150], "mapped", [101]], [[120151, 120151], "mapped", [102]], [[120152, 120152], "mapped", [103]], [[120153, 120153], "mapped", [104]], [[120154, 120154], "mapped", [105]], [[120155, 120155], "mapped", [106]], [[120156, 120156], "mapped", [107]], [[120157, 120157], "mapped", [108]], [[120158, 120158], "mapped", [109]], [[120159, 120159], "mapped", [110]], [[120160, 120160], "mapped", [111]], [[120161, 120161], "mapped", [112]], [[120162, 120162], "mapped", [113]], [[120163, 120163], "mapped", [114]], [[120164, 120164], "mapped", [115]], [[120165, 120165], "mapped", [116]], [[120166, 120166], "mapped", [117]], [[120167, 120167], "mapped", [118]], [[120168, 120168], "mapped", [119]], [[120169, 120169], "mapped", [120]], [[120170, 120170], "mapped", [121]], [[120171, 120171], "mapped", [122]], [[120172, 120172], "mapped", [97]], [[120173, 120173], "mapped", [98]], [[120174, 120174], "mapped", [99]], [[120175, 120175], "mapped", [100]], [[120176, 120176], "mapped", [101]], [[120177, 120177], "mapped", [102]], [[120178, 120178], "mapped", [103]], [[120179, 120179], "mapped", [104]], [[120180, 120180], "mapped", [105]], [[120181, 120181], "mapped", [106]], [[120182, 120182], "mapped", [107]], [[120183, 120183], "mapped", [108]], [[120184, 120184], "mapped", [109]], [[120185, 120185], "mapped", [110]], [[120186, 120186], "mapped", [111]], [[120187, 120187], "mapped", [112]], [[120188, 120188], "mapped", [113]], [[120189, 120189], "mapped", [114]], [[120190, 120190], "mapped", [115]], [[120191, 120191], "mapped", [116]], [[120192, 120192], "mapped", [117]], [[120193, 120193], "mapped", [118]], [[120194, 120194], "mapped", [119]], [[120195, 120195], "mapped", [120]], [[120196, 120196], "mapped", [121]], [[120197, 120197], "mapped", [122]], [[120198, 120198], "mapped", [97]], [[120199, 120199], "mapped", [98]], [[120200, 120200], "mapped", [99]], [[120201, 120201], "mapped", [100]], [[120202, 120202], "mapped", [101]], [[120203, 120203], "mapped", [102]], [[120204, 120204], "mapped", [103]], [[120205, 120205], "mapped", [104]], [[120206, 120206], "mapped", [105]], [[120207, 120207], "mapped", [106]], [[120208, 120208], "mapped", [107]], [[120209, 120209], "mapped", [108]], [[120210, 120210], "mapped", [109]], [[120211, 120211], "mapped", [110]], [[120212, 120212], "mapped", [111]], [[120213, 120213], "mapped", [112]], [[120214, 120214], "mapped", [113]], [[120215, 120215], "mapped", [114]], [[120216, 120216], "mapped", [115]], [[120217, 120217], "mapped", [116]], [[120218, 120218], "mapped", [117]], [[120219, 120219], "mapped", [118]], [[120220, 120220], "mapped", [119]], [[120221, 120221], "mapped", [120]], [[120222, 120222], "mapped", [121]], [[120223, 120223], "mapped", [122]], [[120224, 120224], "mapped", [97]], [[120225, 120225], "mapped", [98]], [[120226, 120226], "mapped", [99]], [[120227, 120227], "mapped", [100]], [[120228, 120228], "mapped", [101]], [[120229, 120229], "mapped", [102]], [[120230, 120230], "mapped", [103]], [[120231, 120231], "mapped", [104]], [[120232, 120232], "mapped", [105]], [[120233, 120233], "mapped", [106]], [[120234, 120234], "mapped", [107]], [[120235, 120235], "mapped", [108]], [[120236, 120236], "mapped", [109]], [[120237, 120237], "mapped", [110]], [[120238, 120238], "mapped", [111]], [[120239, 120239], "mapped", [112]], [[120240, 120240], "mapped", [113]], [[120241, 120241], "mapped", [114]], [[120242, 120242], "mapped", [115]], [[120243, 120243], "mapped", [116]], [[120244, 120244], "mapped", [117]], [[120245, 120245], "mapped", [118]], [[120246, 120246], "mapped", [119]], [[120247, 120247], "mapped", [120]], [[120248, 120248], "mapped", [121]], [[120249, 120249], "mapped", [122]], [[120250, 120250], "mapped", [97]], [[120251, 120251], "mapped", [98]], [[120252, 120252], "mapped", [99]], [[120253, 120253], "mapped", [100]], [[120254, 120254], "mapped", [101]], [[120255, 120255], "mapped", [102]], [[120256, 120256], "mapped", [103]], [[120257, 120257], "mapped", [104]], [[120258, 120258], "mapped", [105]], [[120259, 120259], "mapped", [106]], [[120260, 120260], "mapped", [107]], [[120261, 120261], "mapped", [108]], [[120262, 120262], "mapped", [109]], [[120263, 120263], "mapped", [110]], [[120264, 120264], "mapped", [111]], [[120265, 120265], "mapped", [112]], [[120266, 120266], "mapped", [113]], [[120267, 120267], "mapped", [114]], [[120268, 120268], "mapped", [115]], [[120269, 120269], "mapped", [116]], [[120270, 120270], "mapped", [117]], [[120271, 120271], "mapped", [118]], [[120272, 120272], "mapped", [119]], [[120273, 120273], "mapped", [120]], [[120274, 120274], "mapped", [121]], [[120275, 120275], "mapped", [122]], [[120276, 120276], "mapped", [97]], [[120277, 120277], "mapped", [98]], [[120278, 120278], "mapped", [99]], [[120279, 120279], "mapped", [100]], [[120280, 120280], "mapped", [101]], [[120281, 120281], "mapped", [102]], [[120282, 120282], "mapped", [103]], [[120283, 120283], "mapped", [104]], [[120284, 120284], "mapped", [105]], [[120285, 120285], "mapped", [106]], [[120286, 120286], "mapped", [107]], [[120287, 120287], "mapped", [108]], [[120288, 120288], "mapped", [109]], [[120289, 120289], "mapped", [110]], [[120290, 120290], "mapped", [111]], [[120291, 120291], "mapped", [112]], [[120292, 120292], "mapped", [113]], [[120293, 120293], "mapped", [114]], [[120294, 120294], "mapped", [115]], [[120295, 120295], "mapped", [116]], [[120296, 120296], "mapped", [117]], [[120297, 120297], "mapped", [118]], [[120298, 120298], "mapped", [119]], [[120299, 120299], "mapped", [120]], [[120300, 120300], "mapped", [121]], [[120301, 120301], "mapped", [122]], [[120302, 120302], "mapped", [97]], [[120303, 120303], "mapped", [98]], [[120304, 120304], "mapped", [99]], [[120305, 120305], "mapped", [100]], [[120306, 120306], "mapped", [101]], [[120307, 120307], "mapped", [102]], [[120308, 120308], "mapped", [103]], [[120309, 120309], "mapped", [104]], [[120310, 120310], "mapped", [105]], [[120311, 120311], "mapped", [106]], [[120312, 120312], "mapped", [107]], [[120313, 120313], "mapped", [108]], [[120314, 120314], "mapped", [109]], [[120315, 120315], "mapped", [110]], [[120316, 120316], "mapped", [111]], [[120317, 120317], "mapped", [112]], [[120318, 120318], "mapped", [113]], [[120319, 120319], "mapped", [114]], [[120320, 120320], "mapped", [115]], [[120321, 120321], "mapped", [116]], [[120322, 120322], "mapped", [117]], [[120323, 120323], "mapped", [118]], [[120324, 120324], "mapped", [119]], [[120325, 120325], "mapped", [120]], [[120326, 120326], "mapped", [121]], [[120327, 120327], "mapped", [122]], [[120328, 120328], "mapped", [97]], [[120329, 120329], "mapped", [98]], [[120330, 120330], "mapped", [99]], [[120331, 120331], "mapped", [100]], [[120332, 120332], "mapped", [101]], [[120333, 120333], "mapped", [102]], [[120334, 120334], "mapped", [103]], [[120335, 120335], "mapped", [104]], [[120336, 120336], "mapped", [105]], [[120337, 120337], "mapped", [106]], [[120338, 120338], "mapped", [107]], [[120339, 120339], "mapped", [108]], [[120340, 120340], "mapped", [109]], [[120341, 120341], "mapped", [110]], [[120342, 120342], "mapped", [111]], [[120343, 120343], "mapped", [112]], [[120344, 120344], "mapped", [113]], [[120345, 120345], "mapped", [114]], [[120346, 120346], "mapped", [115]], [[120347, 120347], "mapped", [116]], [[120348, 120348], "mapped", [117]], [[120349, 120349], "mapped", [118]], [[120350, 120350], "mapped", [119]], [[120351, 120351], "mapped", [120]], [[120352, 120352], "mapped", [121]], [[120353, 120353], "mapped", [122]], [[120354, 120354], "mapped", [97]], [[120355, 120355], "mapped", [98]], [[120356, 120356], "mapped", [99]], [[120357, 120357], "mapped", [100]], [[120358, 120358], "mapped", [101]], [[120359, 120359], "mapped", [102]], [[120360, 120360], "mapped", [103]], [[120361, 120361], "mapped", [104]], [[120362, 120362], "mapped", [105]], [[120363, 120363], "mapped", [106]], [[120364, 120364], "mapped", [107]], [[120365, 120365], "mapped", [108]], [[120366, 120366], "mapped", [109]], [[120367, 120367], "mapped", [110]], [[120368, 120368], "mapped", [111]], [[120369, 120369], "mapped", [112]], [[120370, 120370], "mapped", [113]], [[120371, 120371], "mapped", [114]], [[120372, 120372], "mapped", [115]], [[120373, 120373], "mapped", [116]], [[120374, 120374], "mapped", [117]], [[120375, 120375], "mapped", [118]], [[120376, 120376], "mapped", [119]], [[120377, 120377], "mapped", [120]], [[120378, 120378], "mapped", [121]], [[120379, 120379], "mapped", [122]], [[120380, 120380], "mapped", [97]], [[120381, 120381], "mapped", [98]], [[120382, 120382], "mapped", [99]], [[120383, 120383], "mapped", [100]], [[120384, 120384], "mapped", [101]], [[120385, 120385], "mapped", [102]], [[120386, 120386], "mapped", [103]], [[120387, 120387], "mapped", [104]], [[120388, 120388], "mapped", [105]], [[120389, 120389], "mapped", [106]], [[120390, 120390], "mapped", [107]], [[120391, 120391], "mapped", [108]], [[120392, 120392], "mapped", [109]], [[120393, 120393], "mapped", [110]], [[120394, 120394], "mapped", [111]], [[120395, 120395], "mapped", [112]], [[120396, 120396], "mapped", [113]], [[120397, 120397], "mapped", [114]], [[120398, 120398], "mapped", [115]], [[120399, 120399], "mapped", [116]], [[120400, 120400], "mapped", [117]], [[120401, 120401], "mapped", [118]], [[120402, 120402], "mapped", [119]], [[120403, 120403], "mapped", [120]], [[120404, 120404], "mapped", [121]], [[120405, 120405], "mapped", [122]], [[120406, 120406], "mapped", [97]], [[120407, 120407], "mapped", [98]], [[120408, 120408], "mapped", [99]], [[120409, 120409], "mapped", [100]], [[120410, 120410], "mapped", [101]], [[120411, 120411], "mapped", [102]], [[120412, 120412], "mapped", [103]], [[120413, 120413], "mapped", [104]], [[120414, 120414], "mapped", [105]], [[120415, 120415], "mapped", [106]], [[120416, 120416], "mapped", [107]], [[120417, 120417], "mapped", [108]], [[120418, 120418], "mapped", [109]], [[120419, 120419], "mapped", [110]], [[120420, 120420], "mapped", [111]], [[120421, 120421], "mapped", [112]], [[120422, 120422], "mapped", [113]], [[120423, 120423], "mapped", [114]], [[120424, 120424], "mapped", [115]], [[120425, 120425], "mapped", [116]], [[120426, 120426], "mapped", [117]], [[120427, 120427], "mapped", [118]], [[120428, 120428], "mapped", [119]], [[120429, 120429], "mapped", [120]], [[120430, 120430], "mapped", [121]], [[120431, 120431], "mapped", [122]], [[120432, 120432], "mapped", [97]], [[120433, 120433], "mapped", [98]], [[120434, 120434], "mapped", [99]], [[120435, 120435], "mapped", [100]], [[120436, 120436], "mapped", [101]], [[120437, 120437], "mapped", [102]], [[120438, 120438], "mapped", [103]], [[120439, 120439], "mapped", [104]], [[120440, 120440], "mapped", [105]], [[120441, 120441], "mapped", [106]], [[120442, 120442], "mapped", [107]], [[120443, 120443], "mapped", [108]], [[120444, 120444], "mapped", [109]], [[120445, 120445], "mapped", [110]], [[120446, 120446], "mapped", [111]], [[120447, 120447], "mapped", [112]], [[120448, 120448], "mapped", [113]], [[120449, 120449], "mapped", [114]], [[120450, 120450], "mapped", [115]], [[120451, 120451], "mapped", [116]], [[120452, 120452], "mapped", [117]], [[120453, 120453], "mapped", [118]], [[120454, 120454], "mapped", [119]], [[120455, 120455], "mapped", [120]], [[120456, 120456], "mapped", [121]], [[120457, 120457], "mapped", [122]], [[120458, 120458], "mapped", [97]], [[120459, 120459], "mapped", [98]], [[120460, 120460], "mapped", [99]], [[120461, 120461], "mapped", [100]], [[120462, 120462], "mapped", [101]], [[120463, 120463], "mapped", [102]], [[120464, 120464], "mapped", [103]], [[120465, 120465], "mapped", [104]], [[120466, 120466], "mapped", [105]], [[120467, 120467], "mapped", [106]], [[120468, 120468], "mapped", [107]], [[120469, 120469], "mapped", [108]], [[120470, 120470], "mapped", [109]], [[120471, 120471], "mapped", [110]], [[120472, 120472], "mapped", [111]], [[120473, 120473], "mapped", [112]], [[120474, 120474], "mapped", [113]], [[120475, 120475], "mapped", [114]], [[120476, 120476], "mapped", [115]], [[120477, 120477], "mapped", [116]], [[120478, 120478], "mapped", [117]], [[120479, 120479], "mapped", [118]], [[120480, 120480], "mapped", [119]], [[120481, 120481], "mapped", [120]], [[120482, 120482], "mapped", [121]], [[120483, 120483], "mapped", [122]], [[120484, 120484], "mapped", [305]], [[120485, 120485], "mapped", [567]], [[120486, 120487], "disallowed"], [[120488, 120488], "mapped", [945]], [[120489, 120489], "mapped", [946]], [[120490, 120490], "mapped", [947]], [[120491, 120491], "mapped", [948]], [[120492, 120492], "mapped", [949]], [[120493, 120493], "mapped", [950]], [[120494, 120494], "mapped", [951]], [[120495, 120495], "mapped", [952]], [[120496, 120496], "mapped", [953]], [[120497, 120497], "mapped", [954]], [[120498, 120498], "mapped", [955]], [[120499, 120499], "mapped", [956]], [[120500, 120500], "mapped", [957]], [[120501, 120501], "mapped", [958]], [[120502, 120502], "mapped", [959]], [[120503, 120503], "mapped", [960]], [[120504, 120504], "mapped", [961]], [[120505, 120505], "mapped", [952]], [[120506, 120506], "mapped", [963]], [[120507, 120507], "mapped", [964]], [[120508, 120508], "mapped", [965]], [[120509, 120509], "mapped", [966]], [[120510, 120510], "mapped", [967]], [[120511, 120511], "mapped", [968]], [[120512, 120512], "mapped", [969]], [[120513, 120513], "mapped", [8711]], [[120514, 120514], "mapped", [945]], [[120515, 120515], "mapped", [946]], [[120516, 120516], "mapped", [947]], [[120517, 120517], "mapped", [948]], [[120518, 120518], "mapped", [949]], [[120519, 120519], "mapped", [950]], [[120520, 120520], "mapped", [951]], [[120521, 120521], "mapped", [952]], [[120522, 120522], "mapped", [953]], [[120523, 120523], "mapped", [954]], [[120524, 120524], "mapped", [955]], [[120525, 120525], "mapped", [956]], [[120526, 120526], "mapped", [957]], [[120527, 120527], "mapped", [958]], [[120528, 120528], "mapped", [959]], [[120529, 120529], "mapped", [960]], [[120530, 120530], "mapped", [961]], [[120531, 120532], "mapped", [963]], [[120533, 120533], "mapped", [964]], [[120534, 120534], "mapped", [965]], [[120535, 120535], "mapped", [966]], [[120536, 120536], "mapped", [967]], [[120537, 120537], "mapped", [968]], [[120538, 120538], "mapped", [969]], [[120539, 120539], "mapped", [8706]], [[120540, 120540], "mapped", [949]], [[120541, 120541], "mapped", [952]], [[120542, 120542], "mapped", [954]], [[120543, 120543], "mapped", [966]], [[120544, 120544], "mapped", [961]], [[120545, 120545], "mapped", [960]], [[120546, 120546], "mapped", [945]], [[120547, 120547], "mapped", [946]], [[120548, 120548], "mapped", [947]], [[120549, 120549], "mapped", [948]], [[120550, 120550], "mapped", [949]], [[120551, 120551], "mapped", [950]], [[120552, 120552], "mapped", [951]], [[120553, 120553], "mapped", [952]], [[120554, 120554], "mapped", [953]], [[120555, 120555], "mapped", [954]], [[120556, 120556], "mapped", [955]], [[120557, 120557], "mapped", [956]], [[120558, 120558], "mapped", [957]], [[120559, 120559], "mapped", [958]], [[120560, 120560], "mapped", [959]], [[120561, 120561], "mapped", [960]], [[120562, 120562], "mapped", [961]], [[120563, 120563], "mapped", [952]], [[120564, 120564], "mapped", [963]], [[120565, 120565], "mapped", [964]], [[120566, 120566], "mapped", [965]], [[120567, 120567], "mapped", [966]], [[120568, 120568], "mapped", [967]], [[120569, 120569], "mapped", [968]], [[120570, 120570], "mapped", [969]], [[120571, 120571], "mapped", [8711]], [[120572, 120572], "mapped", [945]], [[120573, 120573], "mapped", [946]], [[120574, 120574], "mapped", [947]], [[120575, 120575], "mapped", [948]], [[120576, 120576], "mapped", [949]], [[120577, 120577], "mapped", [950]], [[120578, 120578], "mapped", [951]], [[120579, 120579], "mapped", [952]], [[120580, 120580], "mapped", [953]], [[120581, 120581], "mapped", [954]], [[120582, 120582], "mapped", [955]], [[120583, 120583], "mapped", [956]], [[120584, 120584], "mapped", [957]], [[120585, 120585], "mapped", [958]], [[120586, 120586], "mapped", [959]], [[120587, 120587], "mapped", [960]], [[120588, 120588], "mapped", [961]], [[120589, 120590], "mapped", [963]], [[120591, 120591], "mapped", [964]], [[120592, 120592], "mapped", [965]], [[120593, 120593], "mapped", [966]], [[120594, 120594], "mapped", [967]], [[120595, 120595], "mapped", [968]], [[120596, 120596], "mapped", [969]], [[120597, 120597], "mapped", [8706]], [[120598, 120598], "mapped", [949]], [[120599, 120599], "mapped", [952]], [[120600, 120600], "mapped", [954]], [[120601, 120601], "mapped", [966]], [[120602, 120602], "mapped", [961]], [[120603, 120603], "mapped", [960]], [[120604, 120604], "mapped", [945]], [[120605, 120605], "mapped", [946]], [[120606, 120606], "mapped", [947]], [[120607, 120607], "mapped", [948]], [[120608, 120608], "mapped", [949]], [[120609, 120609], "mapped", [950]], [[120610, 120610], "mapped", [951]], [[120611, 120611], "mapped", [952]], [[120612, 120612], "mapped", [953]], [[120613, 120613], "mapped", [954]], [[120614, 120614], "mapped", [955]], [[120615, 120615], "mapped", [956]], [[120616, 120616], "mapped", [957]], [[120617, 120617], "mapped", [958]], [[120618, 120618], "mapped", [959]], [[120619, 120619], "mapped", [960]], [[120620, 120620], "mapped", [961]], [[120621, 120621], "mapped", [952]], [[120622, 120622], "mapped", [963]], [[120623, 120623], "mapped", [964]], [[120624, 120624], "mapped", [965]], [[120625, 120625], "mapped", [966]], [[120626, 120626], "mapped", [967]], [[120627, 120627], "mapped", [968]], [[120628, 120628], "mapped", [969]], [[120629, 120629], "mapped", [8711]], [[120630, 120630], "mapped", [945]], [[120631, 120631], "mapped", [946]], [[120632, 120632], "mapped", [947]], [[120633, 120633], "mapped", [948]], [[120634, 120634], "mapped", [949]], [[120635, 120635], "mapped", [950]], [[120636, 120636], "mapped", [951]], [[120637, 120637], "mapped", [952]], [[120638, 120638], "mapped", [953]], [[120639, 120639], "mapped", [954]], [[120640, 120640], "mapped", [955]], [[120641, 120641], "mapped", [956]], [[120642, 120642], "mapped", [957]], [[120643, 120643], "mapped", [958]], [[120644, 120644], "mapped", [959]], [[120645, 120645], "mapped", [960]], [[120646, 120646], "mapped", [961]], [[120647, 120648], "mapped", [963]], [[120649, 120649], "mapped", [964]], [[120650, 120650], "mapped", [965]], [[120651, 120651], "mapped", [966]], [[120652, 120652], "mapped", [967]], [[120653, 120653], "mapped", [968]], [[120654, 120654], "mapped", [969]], [[120655, 120655], "mapped", [8706]], [[120656, 120656], "mapped", [949]], [[120657, 120657], "mapped", [952]], [[120658, 120658], "mapped", [954]], [[120659, 120659], "mapped", [966]], [[120660, 120660], "mapped", [961]], [[120661, 120661], "mapped", [960]], [[120662, 120662], "mapped", [945]], [[120663, 120663], "mapped", [946]], [[120664, 120664], "mapped", [947]], [[120665, 120665], "mapped", [948]], [[120666, 120666], "mapped", [949]], [[120667, 120667], "mapped", [950]], [[120668, 120668], "mapped", [951]], [[120669, 120669], "mapped", [952]], [[120670, 120670], "mapped", [953]], [[120671, 120671], "mapped", [954]], [[120672, 120672], "mapped", [955]], [[120673, 120673], "mapped", [956]], [[120674, 120674], "mapped", [957]], [[120675, 120675], "mapped", [958]], [[120676, 120676], "mapped", [959]], [[120677, 120677], "mapped", [960]], [[120678, 120678], "mapped", [961]], [[120679, 120679], "mapped", [952]], [[120680, 120680], "mapped", [963]], [[120681, 120681], "mapped", [964]], [[120682, 120682], "mapped", [965]], [[120683, 120683], "mapped", [966]], [[120684, 120684], "mapped", [967]], [[120685, 120685], "mapped", [968]], [[120686, 120686], "mapped", [969]], [[120687, 120687], "mapped", [8711]], [[120688, 120688], "mapped", [945]], [[120689, 120689], "mapped", [946]], [[120690, 120690], "mapped", [947]], [[120691, 120691], "mapped", [948]], [[120692, 120692], "mapped", [949]], [[120693, 120693], "mapped", [950]], [[120694, 120694], "mapped", [951]], [[120695, 120695], "mapped", [952]], [[120696, 120696], "mapped", [953]], [[120697, 120697], "mapped", [954]], [[120698, 120698], "mapped", [955]], [[120699, 120699], "mapped", [956]], [[120700, 120700], "mapped", [957]], [[120701, 120701], "mapped", [958]], [[120702, 120702], "mapped", [959]], [[120703, 120703], "mapped", [960]], [[120704, 120704], "mapped", [961]], [[120705, 120706], "mapped", [963]], [[120707, 120707], "mapped", [964]], [[120708, 120708], "mapped", [965]], [[120709, 120709], "mapped", [966]], [[120710, 120710], "mapped", [967]], [[120711, 120711], "mapped", [968]], [[120712, 120712], "mapped", [969]], [[120713, 120713], "mapped", [8706]], [[120714, 120714], "mapped", [949]], [[120715, 120715], "mapped", [952]], [[120716, 120716], "mapped", [954]], [[120717, 120717], "mapped", [966]], [[120718, 120718], "mapped", [961]], [[120719, 120719], "mapped", [960]], [[120720, 120720], "mapped", [945]], [[120721, 120721], "mapped", [946]], [[120722, 120722], "mapped", [947]], [[120723, 120723], "mapped", [948]], [[120724, 120724], "mapped", [949]], [[120725, 120725], "mapped", [950]], [[120726, 120726], "mapped", [951]], [[120727, 120727], "mapped", [952]], [[120728, 120728], "mapped", [953]], [[120729, 120729], "mapped", [954]], [[120730, 120730], "mapped", [955]], [[120731, 120731], "mapped", [956]], [[120732, 120732], "mapped", [957]], [[120733, 120733], "mapped", [958]], [[120734, 120734], "mapped", [959]], [[120735, 120735], "mapped", [960]], [[120736, 120736], "mapped", [961]], [[120737, 120737], "mapped", [952]], [[120738, 120738], "mapped", [963]], [[120739, 120739], "mapped", [964]], [[120740, 120740], "mapped", [965]], [[120741, 120741], "mapped", [966]], [[120742, 120742], "mapped", [967]], [[120743, 120743], "mapped", [968]], [[120744, 120744], "mapped", [969]], [[120745, 120745], "mapped", [8711]], [[120746, 120746], "mapped", [945]], [[120747, 120747], "mapped", [946]], [[120748, 120748], "mapped", [947]], [[120749, 120749], "mapped", [948]], [[120750, 120750], "mapped", [949]], [[120751, 120751], "mapped", [950]], [[120752, 120752], "mapped", [951]], [[120753, 120753], "mapped", [952]], [[120754, 120754], "mapped", [953]], [[120755, 120755], "mapped", [954]], [[120756, 120756], "mapped", [955]], [[120757, 120757], "mapped", [956]], [[120758, 120758], "mapped", [957]], [[120759, 120759], "mapped", [958]], [[120760, 120760], "mapped", [959]], [[120761, 120761], "mapped", [960]], [[120762, 120762], "mapped", [961]], [[120763, 120764], "mapped", [963]], [[120765, 120765], "mapped", [964]], [[120766, 120766], "mapped", [965]], [[120767, 120767], "mapped", [966]], [[120768, 120768], "mapped", [967]], [[120769, 120769], "mapped", [968]], [[120770, 120770], "mapped", [969]], [[120771, 120771], "mapped", [8706]], [[120772, 120772], "mapped", [949]], [[120773, 120773], "mapped", [952]], [[120774, 120774], "mapped", [954]], [[120775, 120775], "mapped", [966]], [[120776, 120776], "mapped", [961]], [[120777, 120777], "mapped", [960]], [[120778, 120779], "mapped", [989]], [[120780, 120781], "disallowed"], [[120782, 120782], "mapped", [48]], [[120783, 120783], "mapped", [49]], [[120784, 120784], "mapped", [50]], [[120785, 120785], "mapped", [51]], [[120786, 120786], "mapped", [52]], [[120787, 120787], "mapped", [53]], [[120788, 120788], "mapped", [54]], [[120789, 120789], "mapped", [55]], [[120790, 120790], "mapped", [56]], [[120791, 120791], "mapped", [57]], [[120792, 120792], "mapped", [48]], [[120793, 120793], "mapped", [49]], [[120794, 120794], "mapped", [50]], [[120795, 120795], "mapped", [51]], [[120796, 120796], "mapped", [52]], [[120797, 120797], "mapped", [53]], [[120798, 120798], "mapped", [54]], [[120799, 120799], "mapped", [55]], [[120800, 120800], "mapped", [56]], [[120801, 120801], "mapped", [57]], [[120802, 120802], "mapped", [48]], [[120803, 120803], "mapped", [49]], [[120804, 120804], "mapped", [50]], [[120805, 120805], "mapped", [51]], [[120806, 120806], "mapped", [52]], [[120807, 120807], "mapped", [53]], [[120808, 120808], "mapped", [54]], [[120809, 120809], "mapped", [55]], [[120810, 120810], "mapped", [56]], [[120811, 120811], "mapped", [57]], [[120812, 120812], "mapped", [48]], [[120813, 120813], "mapped", [49]], [[120814, 120814], "mapped", [50]], [[120815, 120815], "mapped", [51]], [[120816, 120816], "mapped", [52]], [[120817, 120817], "mapped", [53]], [[120818, 120818], "mapped", [54]], [[120819, 120819], "mapped", [55]], [[120820, 120820], "mapped", [56]], [[120821, 120821], "mapped", [57]], [[120822, 120822], "mapped", [48]], [[120823, 120823], "mapped", [49]], [[120824, 120824], "mapped", [50]], [[120825, 120825], "mapped", [51]], [[120826, 120826], "mapped", [52]], [[120827, 120827], "mapped", [53]], [[120828, 120828], "mapped", [54]], [[120829, 120829], "mapped", [55]], [[120830, 120830], "mapped", [56]], [[120831, 120831], "mapped", [57]], [[120832, 121343], "valid", [], "NV8"], [[121344, 121398], "valid"], [[121399, 121402], "valid", [], "NV8"], [[121403, 121452], "valid"], [[121453, 121460], "valid", [], "NV8"], [[121461, 121461], "valid"], [[121462, 121475], "valid", [], "NV8"], [[121476, 121476], "valid"], [[121477, 121483], "valid", [], "NV8"], [[121484, 121498], "disallowed"], [[121499, 121503], "valid"], [[121504, 121504], "disallowed"], [[121505, 121519], "valid"], [[121520, 124927], "disallowed"], [[124928, 125124], "valid"], [[125125, 125126], "disallowed"], [[125127, 125135], "valid", [], "NV8"], [[125136, 125142], "valid"], [[125143, 126463], "disallowed"], [[126464, 126464], "mapped", [1575]], [[126465, 126465], "mapped", [1576]], [[126466, 126466], "mapped", [1580]], [[126467, 126467], "mapped", [1583]], [[126468, 126468], "disallowed"], [[126469, 126469], "mapped", [1608]], [[126470, 126470], "mapped", [1586]], [[126471, 126471], "mapped", [1581]], [[126472, 126472], "mapped", [1591]], [[126473, 126473], "mapped", [1610]], [[126474, 126474], "mapped", [1603]], [[126475, 126475], "mapped", [1604]], [[126476, 126476], "mapped", [1605]], [[126477, 126477], "mapped", [1606]], [[126478, 126478], "mapped", [1587]], [[126479, 126479], "mapped", [1593]], [[126480, 126480], "mapped", [1601]], [[126481, 126481], "mapped", [1589]], [[126482, 126482], "mapped", [1602]], [[126483, 126483], "mapped", [1585]], [[126484, 126484], "mapped", [1588]], [[126485, 126485], "mapped", [1578]], [[126486, 126486], "mapped", [1579]], [[126487, 126487], "mapped", [1582]], [[126488, 126488], "mapped", [1584]], [[126489, 126489], "mapped", [1590]], [[126490, 126490], "mapped", [1592]], [[126491, 126491], "mapped", [1594]], [[126492, 126492], "mapped", [1646]], [[126493, 126493], "mapped", [1722]], [[126494, 126494], "mapped", [1697]], [[126495, 126495], "mapped", [1647]], [[126496, 126496], "disallowed"], [[126497, 126497], "mapped", [1576]], [[126498, 126498], "mapped", [1580]], [[126499, 126499], "disallowed"], [[126500, 126500], "mapped", [1607]], [[126501, 126502], "disallowed"], [[126503, 126503], "mapped", [1581]], [[126504, 126504], "disallowed"], [[126505, 126505], "mapped", [1610]], [[126506, 126506], "mapped", [1603]], [[126507, 126507], "mapped", [1604]], [[126508, 126508], "mapped", [1605]], [[126509, 126509], "mapped", [1606]], [[126510, 126510], "mapped", [1587]], [[126511, 126511], "mapped", [1593]], [[126512, 126512], "mapped", [1601]], [[126513, 126513], "mapped", [1589]], [[126514, 126514], "mapped", [1602]], [[126515, 126515], "disallowed"], [[126516, 126516], "mapped", [1588]], [[126517, 126517], "mapped", [1578]], [[126518, 126518], "mapped", [1579]], [[126519, 126519], "mapped", [1582]], [[126520, 126520], "disallowed"], [[126521, 126521], "mapped", [1590]], [[126522, 126522], "disallowed"], [[126523, 126523], "mapped", [1594]], [[126524, 126529], "disallowed"], [[126530, 126530], "mapped", [1580]], [[126531, 126534], "disallowed"], [[126535, 126535], "mapped", [1581]], [[126536, 126536], "disallowed"], [[126537, 126537], "mapped", [1610]], [[126538, 126538], "disallowed"], [[126539, 126539], "mapped", [1604]], [[126540, 126540], "disallowed"], [[126541, 126541], "mapped", [1606]], [[126542, 126542], "mapped", [1587]], [[126543, 126543], "mapped", [1593]], [[126544, 126544], "disallowed"], [[126545, 126545], "mapped", [1589]], [[126546, 126546], "mapped", [1602]], [[126547, 126547], "disallowed"], [[126548, 126548], "mapped", [1588]], [[126549, 126550], "disallowed"], [[126551, 126551], "mapped", [1582]], [[126552, 126552], "disallowed"], [[126553, 126553], "mapped", [1590]], [[126554, 126554], "disallowed"], [[126555, 126555], "mapped", [1594]], [[126556, 126556], "disallowed"], [[126557, 126557], "mapped", [1722]], [[126558, 126558], "disallowed"], [[126559, 126559], "mapped", [1647]], [[126560, 126560], "disallowed"], [[126561, 126561], "mapped", [1576]], [[126562, 126562], "mapped", [1580]], [[126563, 126563], "disallowed"], [[126564, 126564], "mapped", [1607]], [[126565, 126566], "disallowed"], [[126567, 126567], "mapped", [1581]], [[126568, 126568], "mapped", [1591]], [[126569, 126569], "mapped", [1610]], [[126570, 126570], "mapped", [1603]], [[126571, 126571], "disallowed"], [[126572, 126572], "mapped", [1605]], [[126573, 126573], "mapped", [1606]], [[126574, 126574], "mapped", [1587]], [[126575, 126575], "mapped", [1593]], [[126576, 126576], "mapped", [1601]], [[126577, 126577], "mapped", [1589]], [[126578, 126578], "mapped", [1602]], [[126579, 126579], "disallowed"], [[126580, 126580], "mapped", [1588]], [[126581, 126581], "mapped", [1578]], [[126582, 126582], "mapped", [1579]], [[126583, 126583], "mapped", [1582]], [[126584, 126584], "disallowed"], [[126585, 126585], "mapped", [1590]], [[126586, 126586], "mapped", [1592]], [[126587, 126587], "mapped", [1594]], [[126588, 126588], "mapped", [1646]], [[126589, 126589], "disallowed"], [[126590, 126590], "mapped", [1697]], [[126591, 126591], "disallowed"], [[126592, 126592], "mapped", [1575]], [[126593, 126593], "mapped", [1576]], [[126594, 126594], "mapped", [1580]], [[126595, 126595], "mapped", [1583]], [[126596, 126596], "mapped", [1607]], [[126597, 126597], "mapped", [1608]], [[126598, 126598], "mapped", [1586]], [[126599, 126599], "mapped", [1581]], [[126600, 126600], "mapped", [1591]], [[126601, 126601], "mapped", [1610]], [[126602, 126602], "disallowed"], [[126603, 126603], "mapped", [1604]], [[126604, 126604], "mapped", [1605]], [[126605, 126605], "mapped", [1606]], [[126606, 126606], "mapped", [1587]], [[126607, 126607], "mapped", [1593]], [[126608, 126608], "mapped", [1601]], [[126609, 126609], "mapped", [1589]], [[126610, 126610], "mapped", [1602]], [[126611, 126611], "mapped", [1585]], [[126612, 126612], "mapped", [1588]], [[126613, 126613], "mapped", [1578]], [[126614, 126614], "mapped", [1579]], [[126615, 126615], "mapped", [1582]], [[126616, 126616], "mapped", [1584]], [[126617, 126617], "mapped", [1590]], [[126618, 126618], "mapped", [1592]], [[126619, 126619], "mapped", [1594]], [[126620, 126624], "disallowed"], [[126625, 126625], "mapped", [1576]], [[126626, 126626], "mapped", [1580]], [[126627, 126627], "mapped", [1583]], [[126628, 126628], "disallowed"], [[126629, 126629], "mapped", [1608]], [[126630, 126630], "mapped", [1586]], [[126631, 126631], "mapped", [1581]], [[126632, 126632], "mapped", [1591]], [[126633, 126633], "mapped", [1610]], [[126634, 126634], "disallowed"], [[126635, 126635], "mapped", [1604]], [[126636, 126636], "mapped", [1605]], [[126637, 126637], "mapped", [1606]], [[126638, 126638], "mapped", [1587]], [[126639, 126639], "mapped", [1593]], [[126640, 126640], "mapped", [1601]], [[126641, 126641], "mapped", [1589]], [[126642, 126642], "mapped", [1602]], [[126643, 126643], "mapped", [1585]], [[126644, 126644], "mapped", [1588]], [[126645, 126645], "mapped", [1578]], [[126646, 126646], "mapped", [1579]], [[126647, 126647], "mapped", [1582]], [[126648, 126648], "mapped", [1584]], [[126649, 126649], "mapped", [1590]], [[126650, 126650], "mapped", [1592]], [[126651, 126651], "mapped", [1594]], [[126652, 126703], "disallowed"], [[126704, 126705], "valid", [], "NV8"], [[126706, 126975], "disallowed"], [[126976, 127019], "valid", [], "NV8"], [[127020, 127023], "disallowed"], [[127024, 127123], "valid", [], "NV8"], [[127124, 127135], "disallowed"], [[127136, 127150], "valid", [], "NV8"], [[127151, 127152], "disallowed"], [[127153, 127166], "valid", [], "NV8"], [[127167, 127167], "valid", [], "NV8"], [[127168, 127168], "disallowed"], [[127169, 127183], "valid", [], "NV8"], [[127184, 127184], "disallowed"], [[127185, 127199], "valid", [], "NV8"], [[127200, 127221], "valid", [], "NV8"], [[127222, 127231], "disallowed"], [[127232, 127232], "disallowed"], [[127233, 127233], "disallowed_STD3_mapped", [48, 44]], [[127234, 127234], "disallowed_STD3_mapped", [49, 44]], [[127235, 127235], "disallowed_STD3_mapped", [50, 44]], [[127236, 127236], "disallowed_STD3_mapped", [51, 44]], [[127237, 127237], "disallowed_STD3_mapped", [52, 44]], [[127238, 127238], "disallowed_STD3_mapped", [53, 44]], [[127239, 127239], "disallowed_STD3_mapped", [54, 44]], [[127240, 127240], "disallowed_STD3_mapped", [55, 44]], [[127241, 127241], "disallowed_STD3_mapped", [56, 44]], [[127242, 127242], "disallowed_STD3_mapped", [57, 44]], [[127243, 127244], "valid", [], "NV8"], [[127245, 127247], "disallowed"], [[127248, 127248], "disallowed_STD3_mapped", [40, 97, 41]], [[127249, 127249], "disallowed_STD3_mapped", [40, 98, 41]], [[127250, 127250], "disallowed_STD3_mapped", [40, 99, 41]], [[127251, 127251], "disallowed_STD3_mapped", [40, 100, 41]], [[127252, 127252], "disallowed_STD3_mapped", [40, 101, 41]], [[127253, 127253], "disallowed_STD3_mapped", [40, 102, 41]], [[127254, 127254], "disallowed_STD3_mapped", [40, 103, 41]], [[127255, 127255], "disallowed_STD3_mapped", [40, 104, 41]], [[127256, 127256], "disallowed_STD3_mapped", [40, 105, 41]], [[127257, 127257], "disallowed_STD3_mapped", [40, 106, 41]], [[127258, 127258], "disallowed_STD3_mapped", [40, 107, 41]], [[127259, 127259], "disallowed_STD3_mapped", [40, 108, 41]], [[127260, 127260], "disallowed_STD3_mapped", [40, 109, 41]], [[127261, 127261], "disallowed_STD3_mapped", [40, 110, 41]], [[127262, 127262], "disallowed_STD3_mapped", [40, 111, 41]], [[127263, 127263], "disallowed_STD3_mapped", [40, 112, 41]], [[127264, 127264], "disallowed_STD3_mapped", [40, 113, 41]], [[127265, 127265], "disallowed_STD3_mapped", [40, 114, 41]], [[127266, 127266], "disallowed_STD3_mapped", [40, 115, 41]], [[127267, 127267], "disallowed_STD3_mapped", [40, 116, 41]], [[127268, 127268], "disallowed_STD3_mapped", [40, 117, 41]], [[127269, 127269], "disallowed_STD3_mapped", [40, 118, 41]], [[127270, 127270], "disallowed_STD3_mapped", [40, 119, 41]], [[127271, 127271], "disallowed_STD3_mapped", [40, 120, 41]], [[127272, 127272], "disallowed_STD3_mapped", [40, 121, 41]], [[127273, 127273], "disallowed_STD3_mapped", [40, 122, 41]], [[127274, 127274], "mapped", [12308, 115, 12309]], [[127275, 127275], "mapped", [99]], [[127276, 127276], "mapped", [114]], [[127277, 127277], "mapped", [99, 100]], [[127278, 127278], "mapped", [119, 122]], [[127279, 127279], "disallowed"], [[127280, 127280], "mapped", [97]], [[127281, 127281], "mapped", [98]], [[127282, 127282], "mapped", [99]], [[127283, 127283], "mapped", [100]], [[127284, 127284], "mapped", [101]], [[127285, 127285], "mapped", [102]], [[127286, 127286], "mapped", [103]], [[127287, 127287], "mapped", [104]], [[127288, 127288], "mapped", [105]], [[127289, 127289], "mapped", [106]], [[127290, 127290], "mapped", [107]], [[127291, 127291], "mapped", [108]], [[127292, 127292], "mapped", [109]], [[127293, 127293], "mapped", [110]], [[127294, 127294], "mapped", [111]], [[127295, 127295], "mapped", [112]], [[127296, 127296], "mapped", [113]], [[127297, 127297], "mapped", [114]], [[127298, 127298], "mapped", [115]], [[127299, 127299], "mapped", [116]], [[127300, 127300], "mapped", [117]], [[127301, 127301], "mapped", [118]], [[127302, 127302], "mapped", [119]], [[127303, 127303], "mapped", [120]], [[127304, 127304], "mapped", [121]], [[127305, 127305], "mapped", [122]], [[127306, 127306], "mapped", [104, 118]], [[127307, 127307], "mapped", [109, 118]], [[127308, 127308], "mapped", [115, 100]], [[127309, 127309], "mapped", [115, 115]], [[127310, 127310], "mapped", [112, 112, 118]], [[127311, 127311], "mapped", [119, 99]], [[127312, 127318], "valid", [], "NV8"], [[127319, 127319], "valid", [], "NV8"], [[127320, 127326], "valid", [], "NV8"], [[127327, 127327], "valid", [], "NV8"], [[127328, 127337], "valid", [], "NV8"], [[127338, 127338], "mapped", [109, 99]], [[127339, 127339], "mapped", [109, 100]], [[127340, 127343], "disallowed"], [[127344, 127352], "valid", [], "NV8"], [[127353, 127353], "valid", [], "NV8"], [[127354, 127354], "valid", [], "NV8"], [[127355, 127356], "valid", [], "NV8"], [[127357, 127358], "valid", [], "NV8"], [[127359, 127359], "valid", [], "NV8"], [[127360, 127369], "valid", [], "NV8"], [[127370, 127373], "valid", [], "NV8"], [[127374, 127375], "valid", [], "NV8"], [[127376, 127376], "mapped", [100, 106]], [[127377, 127386], "valid", [], "NV8"], [[127387, 127461], "disallowed"], [[127462, 127487], "valid", [], "NV8"], [[127488, 127488], "mapped", [12411, 12363]], [[127489, 127489], "mapped", [12467, 12467]], [[127490, 127490], "mapped", [12469]], [[127491, 127503], "disallowed"], [[127504, 127504], "mapped", [25163]], [[127505, 127505], "mapped", [23383]], [[127506, 127506], "mapped", [21452]], [[127507, 127507], "mapped", [12487]], [[127508, 127508], "mapped", [20108]], [[127509, 127509], "mapped", [22810]], [[127510, 127510], "mapped", [35299]], [[127511, 127511], "mapped", [22825]], [[127512, 127512], "mapped", [20132]], [[127513, 127513], "mapped", [26144]], [[127514, 127514], "mapped", [28961]], [[127515, 127515], "mapped", [26009]], [[127516, 127516], "mapped", [21069]], [[127517, 127517], "mapped", [24460]], [[127518, 127518], "mapped", [20877]], [[127519, 127519], "mapped", [26032]], [[127520, 127520], "mapped", [21021]], [[127521, 127521], "mapped", [32066]], [[127522, 127522], "mapped", [29983]], [[127523, 127523], "mapped", [36009]], [[127524, 127524], "mapped", [22768]], [[127525, 127525], "mapped", [21561]], [[127526, 127526], "mapped", [28436]], [[127527, 127527], "mapped", [25237]], [[127528, 127528], "mapped", [25429]], [[127529, 127529], "mapped", [19968]], [[127530, 127530], "mapped", [19977]], [[127531, 127531], "mapped", [36938]], [[127532, 127532], "mapped", [24038]], [[127533, 127533], "mapped", [20013]], [[127534, 127534], "mapped", [21491]], [[127535, 127535], "mapped", [25351]], [[127536, 127536], "mapped", [36208]], [[127537, 127537], "mapped", [25171]], [[127538, 127538], "mapped", [31105]], [[127539, 127539], "mapped", [31354]], [[127540, 127540], "mapped", [21512]], [[127541, 127541], "mapped", [28288]], [[127542, 127542], "mapped", [26377]], [[127543, 127543], "mapped", [26376]], [[127544, 127544], "mapped", [30003]], [[127545, 127545], "mapped", [21106]], [[127546, 127546], "mapped", [21942]], [[127547, 127551], "disallowed"], [[127552, 127552], "mapped", [12308, 26412, 12309]], [[127553, 127553], "mapped", [12308, 19977, 12309]], [[127554, 127554], "mapped", [12308, 20108, 12309]], [[127555, 127555], "mapped", [12308, 23433, 12309]], [[127556, 127556], "mapped", [12308, 28857, 12309]], [[127557, 127557], "mapped", [12308, 25171, 12309]], [[127558, 127558], "mapped", [12308, 30423, 12309]], [[127559, 127559], "mapped", [12308, 21213, 12309]], [[127560, 127560], "mapped", [12308, 25943, 12309]], [[127561, 127567], "disallowed"], [[127568, 127568], "mapped", [24471]], [[127569, 127569], "mapped", [21487]], [[127570, 127743], "disallowed"], [[127744, 127776], "valid", [], "NV8"], [[127777, 127788], "valid", [], "NV8"], [[127789, 127791], "valid", [], "NV8"], [[127792, 127797], "valid", [], "NV8"], [[127798, 127798], "valid", [], "NV8"], [[127799, 127868], "valid", [], "NV8"], [[127869, 127869], "valid", [], "NV8"], [[127870, 127871], "valid", [], "NV8"], [[127872, 127891], "valid", [], "NV8"], [[127892, 127903], "valid", [], "NV8"], [[127904, 127940], "valid", [], "NV8"], [[127941, 127941], "valid", [], "NV8"], [[127942, 127946], "valid", [], "NV8"], [[127947, 127950], "valid", [], "NV8"], [[127951, 127955], "valid", [], "NV8"], [[127956, 127967], "valid", [], "NV8"], [[127968, 127984], "valid", [], "NV8"], [[127985, 127991], "valid", [], "NV8"], [[127992, 127999], "valid", [], "NV8"], [[128e3, 128062], "valid", [], "NV8"], [[128063, 128063], "valid", [], "NV8"], [[128064, 128064], "valid", [], "NV8"], [[128065, 128065], "valid", [], "NV8"], [[128066, 128247], "valid", [], "NV8"], [[128248, 128248], "valid", [], "NV8"], [[128249, 128252], "valid", [], "NV8"], [[128253, 128254], "valid", [], "NV8"], [[128255, 128255], "valid", [], "NV8"], [[128256, 128317], "valid", [], "NV8"], [[128318, 128319], "valid", [], "NV8"], [[128320, 128323], "valid", [], "NV8"], [[128324, 128330], "valid", [], "NV8"], [[128331, 128335], "valid", [], "NV8"], [[128336, 128359], "valid", [], "NV8"], [[128360, 128377], "valid", [], "NV8"], [[128378, 128378], "disallowed"], [[128379, 128419], "valid", [], "NV8"], [[128420, 128420], "disallowed"], [[128421, 128506], "valid", [], "NV8"], [[128507, 128511], "valid", [], "NV8"], [[128512, 128512], "valid", [], "NV8"], [[128513, 128528], "valid", [], "NV8"], [[128529, 128529], "valid", [], "NV8"], [[128530, 128532], "valid", [], "NV8"], [[128533, 128533], "valid", [], "NV8"], [[128534, 128534], "valid", [], "NV8"], [[128535, 128535], "valid", [], "NV8"], [[128536, 128536], "valid", [], "NV8"], [[128537, 128537], "valid", [], "NV8"], [[128538, 128538], "valid", [], "NV8"], [[128539, 128539], "valid", [], "NV8"], [[128540, 128542], "valid", [], "NV8"], [[128543, 128543], "valid", [], "NV8"], [[128544, 128549], "valid", [], "NV8"], [[128550, 128551], "valid", [], "NV8"], [[128552, 128555], "valid", [], "NV8"], [[128556, 128556], "valid", [], "NV8"], [[128557, 128557], "valid", [], "NV8"], [[128558, 128559], "valid", [], "NV8"], [[128560, 128563], "valid", [], "NV8"], [[128564, 128564], "valid", [], "NV8"], [[128565, 128576], "valid", [], "NV8"], [[128577, 128578], "valid", [], "NV8"], [[128579, 128580], "valid", [], "NV8"], [[128581, 128591], "valid", [], "NV8"], [[128592, 128639], "valid", [], "NV8"], [[128640, 128709], "valid", [], "NV8"], [[128710, 128719], "valid", [], "NV8"], [[128720, 128720], "valid", [], "NV8"], [[128721, 128735], "disallowed"], [[128736, 128748], "valid", [], "NV8"], [[128749, 128751], "disallowed"], [[128752, 128755], "valid", [], "NV8"], [[128756, 128767], "disallowed"], [[128768, 128883], "valid", [], "NV8"], [[128884, 128895], "disallowed"], [[128896, 128980], "valid", [], "NV8"], [[128981, 129023], "disallowed"], [[129024, 129035], "valid", [], "NV8"], [[129036, 129039], "disallowed"], [[129040, 129095], "valid", [], "NV8"], [[129096, 129103], "disallowed"], [[129104, 129113], "valid", [], "NV8"], [[129114, 129119], "disallowed"], [[129120, 129159], "valid", [], "NV8"], [[129160, 129167], "disallowed"], [[129168, 129197], "valid", [], "NV8"], [[129198, 129295], "disallowed"], [[129296, 129304], "valid", [], "NV8"], [[129305, 129407], "disallowed"], [[129408, 129412], "valid", [], "NV8"], [[129413, 129471], "disallowed"], [[129472, 129472], "valid", [], "NV8"], [[129473, 131069], "disallowed"], [[131070, 131071], "disallowed"], [[131072, 173782], "valid"], [[173783, 173823], "disallowed"], [[173824, 177972], "valid"], [[177973, 177983], "disallowed"], [[177984, 178205], "valid"], [[178206, 178207], "disallowed"], [[178208, 183969], "valid"], [[183970, 194559], "disallowed"], [[194560, 194560], "mapped", [20029]], [[194561, 194561], "mapped", [20024]], [[194562, 194562], "mapped", [20033]], [[194563, 194563], "mapped", [131362]], [[194564, 194564], "mapped", [20320]], [[194565, 194565], "mapped", [20398]], [[194566, 194566], "mapped", [20411]], [[194567, 194567], "mapped", [20482]], [[194568, 194568], "mapped", [20602]], [[194569, 194569], "mapped", [20633]], [[194570, 194570], "mapped", [20711]], [[194571, 194571], "mapped", [20687]], [[194572, 194572], "mapped", [13470]], [[194573, 194573], "mapped", [132666]], [[194574, 194574], "mapped", [20813]], [[194575, 194575], "mapped", [20820]], [[194576, 194576], "mapped", [20836]], [[194577, 194577], "mapped", [20855]], [[194578, 194578], "mapped", [132380]], [[194579, 194579], "mapped", [13497]], [[194580, 194580], "mapped", [20839]], [[194581, 194581], "mapped", [20877]], [[194582, 194582], "mapped", [132427]], [[194583, 194583], "mapped", [20887]], [[194584, 194584], "mapped", [20900]], [[194585, 194585], "mapped", [20172]], [[194586, 194586], "mapped", [20908]], [[194587, 194587], "mapped", [20917]], [[194588, 194588], "mapped", [168415]], [[194589, 194589], "mapped", [20981]], [[194590, 194590], "mapped", [20995]], [[194591, 194591], "mapped", [13535]], [[194592, 194592], "mapped", [21051]], [[194593, 194593], "mapped", [21062]], [[194594, 194594], "mapped", [21106]], [[194595, 194595], "mapped", [21111]], [[194596, 194596], "mapped", [13589]], [[194597, 194597], "mapped", [21191]], [[194598, 194598], "mapped", [21193]], [[194599, 194599], "mapped", [21220]], [[194600, 194600], "mapped", [21242]], [[194601, 194601], "mapped", [21253]], [[194602, 194602], "mapped", [21254]], [[194603, 194603], "mapped", [21271]], [[194604, 194604], "mapped", [21321]], [[194605, 194605], "mapped", [21329]], [[194606, 194606], "mapped", [21338]], [[194607, 194607], "mapped", [21363]], [[194608, 194608], "mapped", [21373]], [[194609, 194611], "mapped", [21375]], [[194612, 194612], "mapped", [133676]], [[194613, 194613], "mapped", [28784]], [[194614, 194614], "mapped", [21450]], [[194615, 194615], "mapped", [21471]], [[194616, 194616], "mapped", [133987]], [[194617, 194617], "mapped", [21483]], [[194618, 194618], "mapped", [21489]], [[194619, 194619], "mapped", [21510]], [[194620, 194620], "mapped", [21662]], [[194621, 194621], "mapped", [21560]], [[194622, 194622], "mapped", [21576]], [[194623, 194623], "mapped", [21608]], [[194624, 194624], "mapped", [21666]], [[194625, 194625], "mapped", [21750]], [[194626, 194626], "mapped", [21776]], [[194627, 194627], "mapped", [21843]], [[194628, 194628], "mapped", [21859]], [[194629, 194630], "mapped", [21892]], [[194631, 194631], "mapped", [21913]], [[194632, 194632], "mapped", [21931]], [[194633, 194633], "mapped", [21939]], [[194634, 194634], "mapped", [21954]], [[194635, 194635], "mapped", [22294]], [[194636, 194636], "mapped", [22022]], [[194637, 194637], "mapped", [22295]], [[194638, 194638], "mapped", [22097]], [[194639, 194639], "mapped", [22132]], [[194640, 194640], "mapped", [20999]], [[194641, 194641], "mapped", [22766]], [[194642, 194642], "mapped", [22478]], [[194643, 194643], "mapped", [22516]], [[194644, 194644], "mapped", [22541]], [[194645, 194645], "mapped", [22411]], [[194646, 194646], "mapped", [22578]], [[194647, 194647], "mapped", [22577]], [[194648, 194648], "mapped", [22700]], [[194649, 194649], "mapped", [136420]], [[194650, 194650], "mapped", [22770]], [[194651, 194651], "mapped", [22775]], [[194652, 194652], "mapped", [22790]], [[194653, 194653], "mapped", [22810]], [[194654, 194654], "mapped", [22818]], [[194655, 194655], "mapped", [22882]], [[194656, 194656], "mapped", [136872]], [[194657, 194657], "mapped", [136938]], [[194658, 194658], "mapped", [23020]], [[194659, 194659], "mapped", [23067]], [[194660, 194660], "mapped", [23079]], [[194661, 194661], "mapped", [23e3]], [[194662, 194662], "mapped", [23142]], [[194663, 194663], "mapped", [14062]], [[194664, 194664], "disallowed"], [[194665, 194665], "mapped", [23304]], [[194666, 194667], "mapped", [23358]], [[194668, 194668], "mapped", [137672]], [[194669, 194669], "mapped", [23491]], [[194670, 194670], "mapped", [23512]], [[194671, 194671], "mapped", [23527]], [[194672, 194672], "mapped", [23539]], [[194673, 194673], "mapped", [138008]], [[194674, 194674], "mapped", [23551]], [[194675, 194675], "mapped", [23558]], [[194676, 194676], "disallowed"], [[194677, 194677], "mapped", [23586]], [[194678, 194678], "mapped", [14209]], [[194679, 194679], "mapped", [23648]], [[194680, 194680], "mapped", [23662]], [[194681, 194681], "mapped", [23744]], [[194682, 194682], "mapped", [23693]], [[194683, 194683], "mapped", [138724]], [[194684, 194684], "mapped", [23875]], [[194685, 194685], "mapped", [138726]], [[194686, 194686], "mapped", [23918]], [[194687, 194687], "mapped", [23915]], [[194688, 194688], "mapped", [23932]], [[194689, 194689], "mapped", [24033]], [[194690, 194690], "mapped", [24034]], [[194691, 194691], "mapped", [14383]], [[194692, 194692], "mapped", [24061]], [[194693, 194693], "mapped", [24104]], [[194694, 194694], "mapped", [24125]], [[194695, 194695], "mapped", [24169]], [[194696, 194696], "mapped", [14434]], [[194697, 194697], "mapped", [139651]], [[194698, 194698], "mapped", [14460]], [[194699, 194699], "mapped", [24240]], [[194700, 194700], "mapped", [24243]], [[194701, 194701], "mapped", [24246]], [[194702, 194702], "mapped", [24266]], [[194703, 194703], "mapped", [172946]], [[194704, 194704], "mapped", [24318]], [[194705, 194706], "mapped", [140081]], [[194707, 194707], "mapped", [33281]], [[194708, 194709], "mapped", [24354]], [[194710, 194710], "mapped", [14535]], [[194711, 194711], "mapped", [144056]], [[194712, 194712], "mapped", [156122]], [[194713, 194713], "mapped", [24418]], [[194714, 194714], "mapped", [24427]], [[194715, 194715], "mapped", [14563]], [[194716, 194716], "mapped", [24474]], [[194717, 194717], "mapped", [24525]], [[194718, 194718], "mapped", [24535]], [[194719, 194719], "mapped", [24569]], [[194720, 194720], "mapped", [24705]], [[194721, 194721], "mapped", [14650]], [[194722, 194722], "mapped", [14620]], [[194723, 194723], "mapped", [24724]], [[194724, 194724], "mapped", [141012]], [[194725, 194725], "mapped", [24775]], [[194726, 194726], "mapped", [24904]], [[194727, 194727], "mapped", [24908]], [[194728, 194728], "mapped", [24910]], [[194729, 194729], "mapped", [24908]], [[194730, 194730], "mapped", [24954]], [[194731, 194731], "mapped", [24974]], [[194732, 194732], "mapped", [25010]], [[194733, 194733], "mapped", [24996]], [[194734, 194734], "mapped", [25007]], [[194735, 194735], "mapped", [25054]], [[194736, 194736], "mapped", [25074]], [[194737, 194737], "mapped", [25078]], [[194738, 194738], "mapped", [25104]], [[194739, 194739], "mapped", [25115]], [[194740, 194740], "mapped", [25181]], [[194741, 194741], "mapped", [25265]], [[194742, 194742], "mapped", [25300]], [[194743, 194743], "mapped", [25424]], [[194744, 194744], "mapped", [142092]], [[194745, 194745], "mapped", [25405]], [[194746, 194746], "mapped", [25340]], [[194747, 194747], "mapped", [25448]], [[194748, 194748], "mapped", [25475]], [[194749, 194749], "mapped", [25572]], [[194750, 194750], "mapped", [142321]], [[194751, 194751], "mapped", [25634]], [[194752, 194752], "mapped", [25541]], [[194753, 194753], "mapped", [25513]], [[194754, 194754], "mapped", [14894]], [[194755, 194755], "mapped", [25705]], [[194756, 194756], "mapped", [25726]], [[194757, 194757], "mapped", [25757]], [[194758, 194758], "mapped", [25719]], [[194759, 194759], "mapped", [14956]], [[194760, 194760], "mapped", [25935]], [[194761, 194761], "mapped", [25964]], [[194762, 194762], "mapped", [143370]], [[194763, 194763], "mapped", [26083]], [[194764, 194764], "mapped", [26360]], [[194765, 194765], "mapped", [26185]], [[194766, 194766], "mapped", [15129]], [[194767, 194767], "mapped", [26257]], [[194768, 194768], "mapped", [15112]], [[194769, 194769], "mapped", [15076]], [[194770, 194770], "mapped", [20882]], [[194771, 194771], "mapped", [20885]], [[194772, 194772], "mapped", [26368]], [[194773, 194773], "mapped", [26268]], [[194774, 194774], "mapped", [32941]], [[194775, 194775], "mapped", [17369]], [[194776, 194776], "mapped", [26391]], [[194777, 194777], "mapped", [26395]], [[194778, 194778], "mapped", [26401]], [[194779, 194779], "mapped", [26462]], [[194780, 194780], "mapped", [26451]], [[194781, 194781], "mapped", [144323]], [[194782, 194782], "mapped", [15177]], [[194783, 194783], "mapped", [26618]], [[194784, 194784], "mapped", [26501]], [[194785, 194785], "mapped", [26706]], [[194786, 194786], "mapped", [26757]], [[194787, 194787], "mapped", [144493]], [[194788, 194788], "mapped", [26766]], [[194789, 194789], "mapped", [26655]], [[194790, 194790], "mapped", [26900]], [[194791, 194791], "mapped", [15261]], [[194792, 194792], "mapped", [26946]], [[194793, 194793], "mapped", [27043]], [[194794, 194794], "mapped", [27114]], [[194795, 194795], "mapped", [27304]], [[194796, 194796], "mapped", [145059]], [[194797, 194797], "mapped", [27355]], [[194798, 194798], "mapped", [15384]], [[194799, 194799], "mapped", [27425]], [[194800, 194800], "mapped", [145575]], [[194801, 194801], "mapped", [27476]], [[194802, 194802], "mapped", [15438]], [[194803, 194803], "mapped", [27506]], [[194804, 194804], "mapped", [27551]], [[194805, 194805], "mapped", [27578]], [[194806, 194806], "mapped", [27579]], [[194807, 194807], "mapped", [146061]], [[194808, 194808], "mapped", [138507]], [[194809, 194809], "mapped", [146170]], [[194810, 194810], "mapped", [27726]], [[194811, 194811], "mapped", [146620]], [[194812, 194812], "mapped", [27839]], [[194813, 194813], "mapped", [27853]], [[194814, 194814], "mapped", [27751]], [[194815, 194815], "mapped", [27926]], [[194816, 194816], "mapped", [27966]], [[194817, 194817], "mapped", [28023]], [[194818, 194818], "mapped", [27969]], [[194819, 194819], "mapped", [28009]], [[194820, 194820], "mapped", [28024]], [[194821, 194821], "mapped", [28037]], [[194822, 194822], "mapped", [146718]], [[194823, 194823], "mapped", [27956]], [[194824, 194824], "mapped", [28207]], [[194825, 194825], "mapped", [28270]], [[194826, 194826], "mapped", [15667]], [[194827, 194827], "mapped", [28363]], [[194828, 194828], "mapped", [28359]], [[194829, 194829], "mapped", [147153]], [[194830, 194830], "mapped", [28153]], [[194831, 194831], "mapped", [28526]], [[194832, 194832], "mapped", [147294]], [[194833, 194833], "mapped", [147342]], [[194834, 194834], "mapped", [28614]], [[194835, 194835], "mapped", [28729]], [[194836, 194836], "mapped", [28702]], [[194837, 194837], "mapped", [28699]], [[194838, 194838], "mapped", [15766]], [[194839, 194839], "mapped", [28746]], [[194840, 194840], "mapped", [28797]], [[194841, 194841], "mapped", [28791]], [[194842, 194842], "mapped", [28845]], [[194843, 194843], "mapped", [132389]], [[194844, 194844], "mapped", [28997]], [[194845, 194845], "mapped", [148067]], [[194846, 194846], "mapped", [29084]], [[194847, 194847], "disallowed"], [[194848, 194848], "mapped", [29224]], [[194849, 194849], "mapped", [29237]], [[194850, 194850], "mapped", [29264]], [[194851, 194851], "mapped", [149e3]], [[194852, 194852], "mapped", [29312]], [[194853, 194853], "mapped", [29333]], [[194854, 194854], "mapped", [149301]], [[194855, 194855], "mapped", [149524]], [[194856, 194856], "mapped", [29562]], [[194857, 194857], "mapped", [29579]], [[194858, 194858], "mapped", [16044]], [[194859, 194859], "mapped", [29605]], [[194860, 194861], "mapped", [16056]], [[194862, 194862], "mapped", [29767]], [[194863, 194863], "mapped", [29788]], [[194864, 194864], "mapped", [29809]], [[194865, 194865], "mapped", [29829]], [[194866, 194866], "mapped", [29898]], [[194867, 194867], "mapped", [16155]], [[194868, 194868], "mapped", [29988]], [[194869, 194869], "mapped", [150582]], [[194870, 194870], "mapped", [30014]], [[194871, 194871], "mapped", [150674]], [[194872, 194872], "mapped", [30064]], [[194873, 194873], "mapped", [139679]], [[194874, 194874], "mapped", [30224]], [[194875, 194875], "mapped", [151457]], [[194876, 194876], "mapped", [151480]], [[194877, 194877], "mapped", [151620]], [[194878, 194878], "mapped", [16380]], [[194879, 194879], "mapped", [16392]], [[194880, 194880], "mapped", [30452]], [[194881, 194881], "mapped", [151795]], [[194882, 194882], "mapped", [151794]], [[194883, 194883], "mapped", [151833]], [[194884, 194884], "mapped", [151859]], [[194885, 194885], "mapped", [30494]], [[194886, 194887], "mapped", [30495]], [[194888, 194888], "mapped", [30538]], [[194889, 194889], "mapped", [16441]], [[194890, 194890], "mapped", [30603]], [[194891, 194891], "mapped", [16454]], [[194892, 194892], "mapped", [16534]], [[194893, 194893], "mapped", [152605]], [[194894, 194894], "mapped", [30798]], [[194895, 194895], "mapped", [30860]], [[194896, 194896], "mapped", [30924]], [[194897, 194897], "mapped", [16611]], [[194898, 194898], "mapped", [153126]], [[194899, 194899], "mapped", [31062]], [[194900, 194900], "mapped", [153242]], [[194901, 194901], "mapped", [153285]], [[194902, 194902], "mapped", [31119]], [[194903, 194903], "mapped", [31211]], [[194904, 194904], "mapped", [16687]], [[194905, 194905], "mapped", [31296]], [[194906, 194906], "mapped", [31306]], [[194907, 194907], "mapped", [31311]], [[194908, 194908], "mapped", [153980]], [[194909, 194910], "mapped", [154279]], [[194911, 194911], "disallowed"], [[194912, 194912], "mapped", [16898]], [[194913, 194913], "mapped", [154539]], [[194914, 194914], "mapped", [31686]], [[194915, 194915], "mapped", [31689]], [[194916, 194916], "mapped", [16935]], [[194917, 194917], "mapped", [154752]], [[194918, 194918], "mapped", [31954]], [[194919, 194919], "mapped", [17056]], [[194920, 194920], "mapped", [31976]], [[194921, 194921], "mapped", [31971]], [[194922, 194922], "mapped", [32e3]], [[194923, 194923], "mapped", [155526]], [[194924, 194924], "mapped", [32099]], [[194925, 194925], "mapped", [17153]], [[194926, 194926], "mapped", [32199]], [[194927, 194927], "mapped", [32258]], [[194928, 194928], "mapped", [32325]], [[194929, 194929], "mapped", [17204]], [[194930, 194930], "mapped", [156200]], [[194931, 194931], "mapped", [156231]], [[194932, 194932], "mapped", [17241]], [[194933, 194933], "mapped", [156377]], [[194934, 194934], "mapped", [32634]], [[194935, 194935], "mapped", [156478]], [[194936, 194936], "mapped", [32661]], [[194937, 194937], "mapped", [32762]], [[194938, 194938], "mapped", [32773]], [[194939, 194939], "mapped", [156890]], [[194940, 194940], "mapped", [156963]], [[194941, 194941], "mapped", [32864]], [[194942, 194942], "mapped", [157096]], [[194943, 194943], "mapped", [32880]], [[194944, 194944], "mapped", [144223]], [[194945, 194945], "mapped", [17365]], [[194946, 194946], "mapped", [32946]], [[194947, 194947], "mapped", [33027]], [[194948, 194948], "mapped", [17419]], [[194949, 194949], "mapped", [33086]], [[194950, 194950], "mapped", [23221]], [[194951, 194951], "mapped", [157607]], [[194952, 194952], "mapped", [157621]], [[194953, 194953], "mapped", [144275]], [[194954, 194954], "mapped", [144284]], [[194955, 194955], "mapped", [33281]], [[194956, 194956], "mapped", [33284]], [[194957, 194957], "mapped", [36766]], [[194958, 194958], "mapped", [17515]], [[194959, 194959], "mapped", [33425]], [[194960, 194960], "mapped", [33419]], [[194961, 194961], "mapped", [33437]], [[194962, 194962], "mapped", [21171]], [[194963, 194963], "mapped", [33457]], [[194964, 194964], "mapped", [33459]], [[194965, 194965], "mapped", [33469]], [[194966, 194966], "mapped", [33510]], [[194967, 194967], "mapped", [158524]], [[194968, 194968], "mapped", [33509]], [[194969, 194969], "mapped", [33565]], [[194970, 194970], "mapped", [33635]], [[194971, 194971], "mapped", [33709]], [[194972, 194972], "mapped", [33571]], [[194973, 194973], "mapped", [33725]], [[194974, 194974], "mapped", [33767]], [[194975, 194975], "mapped", [33879]], [[194976, 194976], "mapped", [33619]], [[194977, 194977], "mapped", [33738]], [[194978, 194978], "mapped", [33740]], [[194979, 194979], "mapped", [33756]], [[194980, 194980], "mapped", [158774]], [[194981, 194981], "mapped", [159083]], [[194982, 194982], "mapped", [158933]], [[194983, 194983], "mapped", [17707]], [[194984, 194984], "mapped", [34033]], [[194985, 194985], "mapped", [34035]], [[194986, 194986], "mapped", [34070]], [[194987, 194987], "mapped", [160714]], [[194988, 194988], "mapped", [34148]], [[194989, 194989], "mapped", [159532]], [[194990, 194990], "mapped", [17757]], [[194991, 194991], "mapped", [17761]], [[194992, 194992], "mapped", [159665]], [[194993, 194993], "mapped", [159954]], [[194994, 194994], "mapped", [17771]], [[194995, 194995], "mapped", [34384]], [[194996, 194996], "mapped", [34396]], [[194997, 194997], "mapped", [34407]], [[194998, 194998], "mapped", [34409]], [[194999, 194999], "mapped", [34473]], [[195e3, 195e3], "mapped", [34440]], [[195001, 195001], "mapped", [34574]], [[195002, 195002], "mapped", [34530]], [[195003, 195003], "mapped", [34681]], [[195004, 195004], "mapped", [34600]], [[195005, 195005], "mapped", [34667]], [[195006, 195006], "mapped", [34694]], [[195007, 195007], "disallowed"], [[195008, 195008], "mapped", [34785]], [[195009, 195009], "mapped", [34817]], [[195010, 195010], "mapped", [17913]], [[195011, 195011], "mapped", [34912]], [[195012, 195012], "mapped", [34915]], [[195013, 195013], "mapped", [161383]], [[195014, 195014], "mapped", [35031]], [[195015, 195015], "mapped", [35038]], [[195016, 195016], "mapped", [17973]], [[195017, 195017], "mapped", [35066]], [[195018, 195018], "mapped", [13499]], [[195019, 195019], "mapped", [161966]], [[195020, 195020], "mapped", [162150]], [[195021, 195021], "mapped", [18110]], [[195022, 195022], "mapped", [18119]], [[195023, 195023], "mapped", [35488]], [[195024, 195024], "mapped", [35565]], [[195025, 195025], "mapped", [35722]], [[195026, 195026], "mapped", [35925]], [[195027, 195027], "mapped", [162984]], [[195028, 195028], "mapped", [36011]], [[195029, 195029], "mapped", [36033]], [[195030, 195030], "mapped", [36123]], [[195031, 195031], "mapped", [36215]], [[195032, 195032], "mapped", [163631]], [[195033, 195033], "mapped", [133124]], [[195034, 195034], "mapped", [36299]], [[195035, 195035], "mapped", [36284]], [[195036, 195036], "mapped", [36336]], [[195037, 195037], "mapped", [133342]], [[195038, 195038], "mapped", [36564]], [[195039, 195039], "mapped", [36664]], [[195040, 195040], "mapped", [165330]], [[195041, 195041], "mapped", [165357]], [[195042, 195042], "mapped", [37012]], [[195043, 195043], "mapped", [37105]], [[195044, 195044], "mapped", [37137]], [[195045, 195045], "mapped", [165678]], [[195046, 195046], "mapped", [37147]], [[195047, 195047], "mapped", [37432]], [[195048, 195048], "mapped", [37591]], [[195049, 195049], "mapped", [37592]], [[195050, 195050], "mapped", [37500]], [[195051, 195051], "mapped", [37881]], [[195052, 195052], "mapped", [37909]], [[195053, 195053], "mapped", [166906]], [[195054, 195054], "mapped", [38283]], [[195055, 195055], "mapped", [18837]], [[195056, 195056], "mapped", [38327]], [[195057, 195057], "mapped", [167287]], [[195058, 195058], "mapped", [18918]], [[195059, 195059], "mapped", [38595]], [[195060, 195060], "mapped", [23986]], [[195061, 195061], "mapped", [38691]], [[195062, 195062], "mapped", [168261]], [[195063, 195063], "mapped", [168474]], [[195064, 195064], "mapped", [19054]], [[195065, 195065], "mapped", [19062]], [[195066, 195066], "mapped", [38880]], [[195067, 195067], "mapped", [168970]], [[195068, 195068], "mapped", [19122]], [[195069, 195069], "mapped", [169110]], [[195070, 195071], "mapped", [38923]], [[195072, 195072], "mapped", [38953]], [[195073, 195073], "mapped", [169398]], [[195074, 195074], "mapped", [39138]], [[195075, 195075], "mapped", [19251]], [[195076, 195076], "mapped", [39209]], [[195077, 195077], "mapped", [39335]], [[195078, 195078], "mapped", [39362]], [[195079, 195079], "mapped", [39422]], [[195080, 195080], "mapped", [19406]], [[195081, 195081], "mapped", [170800]], [[195082, 195082], "mapped", [39698]], [[195083, 195083], "mapped", [4e4]], [[195084, 195084], "mapped", [40189]], [[195085, 195085], "mapped", [19662]], [[195086, 195086], "mapped", [19693]], [[195087, 195087], "mapped", [40295]], [[195088, 195088], "mapped", [172238]], [[195089, 195089], "mapped", [19704]], [[195090, 195090], "mapped", [172293]], [[195091, 195091], "mapped", [172558]], [[195092, 195092], "mapped", [172689]], [[195093, 195093], "mapped", [40635]], [[195094, 195094], "mapped", [19798]], [[195095, 195095], "mapped", [40697]], [[195096, 195096], "mapped", [40702]], [[195097, 195097], "mapped", [40709]], [[195098, 195098], "mapped", [40719]], [[195099, 195099], "mapped", [40726]], [[195100, 195100], "mapped", [40763]], [[195101, 195101], "mapped", [173568]], [[195102, 196605], "disallowed"], [[196606, 196607], "disallowed"], [[196608, 262141], "disallowed"], [[262142, 262143], "disallowed"], [[262144, 327677], "disallowed"], [[327678, 327679], "disallowed"], [[327680, 393213], "disallowed"], [[393214, 393215], "disallowed"], [[393216, 458749], "disallowed"], [[458750, 458751], "disallowed"], [[458752, 524285], "disallowed"], [[524286, 524287], "disallowed"], [[524288, 589821], "disallowed"], [[589822, 589823], "disallowed"], [[589824, 655357], "disallowed"], [[655358, 655359], "disallowed"], [[655360, 720893], "disallowed"], [[720894, 720895], "disallowed"], [[720896, 786429], "disallowed"], [[786430, 786431], "disallowed"], [[786432, 851965], "disallowed"], [[851966, 851967], "disallowed"], [[851968, 917501], "disallowed"], [[917502, 917503], "disallowed"], [[917504, 917504], "disallowed"], [[917505, 917505], "disallowed"], [[917506, 917535], "disallowed"], [[917536, 917631], "disallowed"], [[917632, 917759], "disallowed"], [[917760, 917999], "ignored"], [[918e3, 983037], "disallowed"], [[983038, 983039], "disallowed"], [[983040, 1048573], "disallowed"], [[1048574, 1048575], "disallowed"], [[1048576, 1114109], "disallowed"], [[1114110, 1114111], "disallowed"]]; - } -}); - -// node_modules/tr46/index.js -var require_tr46 = __commonJS({ - "node_modules/tr46/index.js"(exports, module2) { - "use strict"; - var punycode = require("punycode"); - var mappingTable = require_mappingTable(); - var PROCESSING_OPTIONS = { - TRANSITIONAL: 0, - NONTRANSITIONAL: 1 - }; - function normalize2(str2) { - return str2.split("\0").map(function(s3) { - return s3.normalize("NFC"); - }).join("\0"); - } - function findStatus(val) { - var start2 = 0; - var end2 = mappingTable.length - 1; - while (start2 <= end2) { - var mid = Math.floor((start2 + end2) / 2); - var target = mappingTable[mid]; - if (target[0][0] <= val && target[0][1] >= val) { - return target; - } else if (target[0][0] > val) { - end2 = mid - 1; - } else { - start2 = mid + 1; - } - } - return null; - } - var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; - function countSymbols(string) { - return string.replace(regexAstralSymbols, "_").length; - } - function mapChars(domain_name, useSTD3, processing_option) { - var hasError = false; - var processed = ""; - var len = countSymbols(domain_name); - for (var i4 = 0; i4 < len; ++i4) { - var codePoint = domain_name.codePointAt(i4); - var status = findStatus(codePoint); - switch (status[1]) { - case "disallowed": - hasError = true; - processed += String.fromCodePoint(codePoint); - break; - case "ignored": - break; - case "mapped": - processed += String.fromCodePoint.apply(String, status[2]); - break; - case "deviation": - if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) { - processed += String.fromCodePoint.apply(String, status[2]); - } else { - processed += String.fromCodePoint(codePoint); - } - break; - case "valid": - processed += String.fromCodePoint(codePoint); - break; - case "disallowed_STD3_mapped": - if (useSTD3) { - hasError = true; - processed += String.fromCodePoint(codePoint); - } else { - processed += String.fromCodePoint.apply(String, status[2]); - } - break; - case "disallowed_STD3_valid": - if (useSTD3) { - hasError = true; - } - processed += String.fromCodePoint(codePoint); - break; - } - } - return { - string: processed, - error: hasError - }; - } - var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/; - function validateLabel(label, processing_option) { - if (label.substr(0, 4) === "xn--") { - label = punycode.toUnicode(label); - processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL; - } - var error = false; - if (normalize2(label) !== label || label[3] === "-" && label[4] === "-" || label[0] === "-" || label[label.length - 1] === "-" || label.indexOf(".") !== -1 || label.search(combiningMarksRegex) === 0) { - error = true; - } - var len = countSymbols(label); - for (var i4 = 0; i4 < len; ++i4) { - var status = findStatus(label.codePointAt(i4)); - if (processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid" || processing === PROCESSING_OPTIONS.NONTRANSITIONAL && status[1] !== "valid" && status[1] !== "deviation") { - error = true; - break; - } - } - return { - label, - error - }; - } - function processing(domain_name, useSTD3, processing_option) { - var result = mapChars(domain_name, useSTD3, processing_option); - result.string = normalize2(result.string); - var labels = result.string.split("."); - for (var i4 = 0; i4 < labels.length; ++i4) { - try { - var validation = validateLabel(labels[i4]); - labels[i4] = validation.label; - result.error = result.error || validation.error; - } catch (e3) { - result.error = true; - } - } - return { - string: labels.join("."), - error: result.error - }; - } - module2.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) { - var result = processing(domain_name, useSTD3, processing_option); - var labels = result.string.split("."); - labels = labels.map(function(l3) { - try { - return punycode.toASCII(l3); - } catch (e3) { - result.error = true; - return l3; - } - }); - if (verifyDnsLength) { - var total = labels.slice(0, labels.length - 1).join(".").length; - if (total.length > 253 || total.length === 0) { - result.error = true; - } - for (var i4 = 0; i4 < labels.length; ++i4) { - if (labels.length > 63 || labels.length === 0) { - result.error = true; - break; - } - } - } - if (result.error) - return null; - return labels.join("."); - }; - module2.exports.toUnicode = function(domain_name, useSTD3) { - var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL); - return { - domain: result.string, - error: result.error - }; - }; - module2.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS; - } -}); - -// node_modules/whatwg-url/lib/url-state-machine.js -var require_url_state_machine = __commonJS({ - "node_modules/whatwg-url/lib/url-state-machine.js"(exports, module2) { - "use strict"; - var punycode = require("punycode"); - var tr46 = require_tr46(); - var specialSchemes = { - ftp: 21, - file: null, - gopher: 70, - http: 80, - https: 443, - ws: 80, - wss: 443 - }; - var failure = Symbol("failure"); - function countSymbols(str2) { - return punycode.ucs2.decode(str2).length; - } - function at2(input, idx) { - const c3 = input[idx]; - return isNaN(c3) ? void 0 : String.fromCodePoint(c3); - } - function isASCIIDigit(c3) { - return c3 >= 48 && c3 <= 57; - } - function isASCIIAlpha(c3) { - return c3 >= 65 && c3 <= 90 || c3 >= 97 && c3 <= 122; - } - function isASCIIAlphanumeric(c3) { - return isASCIIAlpha(c3) || isASCIIDigit(c3); - } - function isASCIIHex(c3) { - return isASCIIDigit(c3) || c3 >= 65 && c3 <= 70 || c3 >= 97 && c3 <= 102; - } - function isSingleDot(buffer) { - return buffer === "." || buffer.toLowerCase() === "%2e"; - } - function isDoubleDot(buffer) { - buffer = buffer.toLowerCase(); - return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e"; - } - function isWindowsDriveLetterCodePoints(cp1, cp2) { - return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124); - } - function isWindowsDriveLetterString(string) { - return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|"); - } - function isNormalizedWindowsDriveLetterString(string) { - return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":"; - } - function containsForbiddenHostCodePoint(string) { - return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1; - } - function containsForbiddenHostCodePointExcludingPercent(string) { - return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1; - } - function isSpecialScheme(scheme) { - return specialSchemes[scheme] !== void 0; - } - function isSpecial(url) { - return isSpecialScheme(url.scheme); - } - function defaultPort2(scheme) { - return specialSchemes[scheme]; - } - function percentEncode(c3) { - let hex = c3.toString(16).toUpperCase(); - if (hex.length === 1) { - hex = "0" + hex; - } - return "%" + hex; - } - function utf8PercentEncode(c3) { - const buf = new Buffer(c3); - let str2 = ""; - for (let i4 = 0; i4 < buf.length; ++i4) { - str2 += percentEncode(buf[i4]); - } - return str2; - } - function utf8PercentDecode(str2) { - const input = new Buffer(str2); - const output = []; - for (let i4 = 0; i4 < input.length; ++i4) { - if (input[i4] !== 37) { - output.push(input[i4]); - } else if (input[i4] === 37 && isASCIIHex(input[i4 + 1]) && isASCIIHex(input[i4 + 2])) { - output.push(parseInt(input.slice(i4 + 1, i4 + 3).toString(), 16)); - i4 += 2; - } else { - output.push(input[i4]); - } - } - return new Buffer(output).toString(); - } - function isC0ControlPercentEncode(c3) { - return c3 <= 31 || c3 > 126; - } - var extraPathPercentEncodeSet = /* @__PURE__ */ new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]); - function isPathPercentEncode(c3) { - return isC0ControlPercentEncode(c3) || extraPathPercentEncodeSet.has(c3); - } - var extraUserinfoPercentEncodeSet = /* @__PURE__ */ new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]); - function isUserinfoPercentEncode(c3) { - return isPathPercentEncode(c3) || extraUserinfoPercentEncodeSet.has(c3); - } - function percentEncodeChar(c3, encodeSetPredicate) { - const cStr = String.fromCodePoint(c3); - if (encodeSetPredicate(c3)) { - return utf8PercentEncode(cStr); - } - return cStr; - } - function parseIPv4Number(input) { - let R2 = 10; - if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") { - input = input.substring(2); - R2 = 16; - } else if (input.length >= 2 && input.charAt(0) === "0") { - input = input.substring(1); - R2 = 8; - } - if (input === "") { - return 0; - } - const regex = R2 === 10 ? /[^0-9]/ : R2 === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/; - if (regex.test(input)) { - return failure; - } - return parseInt(input, R2); - } - function parseIPv4(input) { - const parts = input.split("."); - if (parts[parts.length - 1] === "") { - if (parts.length > 1) { - parts.pop(); - } - } - if (parts.length > 4) { - return input; - } - const numbers = []; - for (const part of parts) { - if (part === "") { - return input; - } - const n3 = parseIPv4Number(part); - if (n3 === failure) { - return input; - } - numbers.push(n3); - } - for (let i4 = 0; i4 < numbers.length - 1; ++i4) { - if (numbers[i4] > 255) { - return failure; - } - } - if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { - return failure; - } - let ipv4 = numbers.pop(); - let counter = 0; - for (const n3 of numbers) { - ipv4 += n3 * Math.pow(256, 3 - counter); - ++counter; - } - return ipv4; - } - function serializeIPv4(address) { - let output = ""; - let n3 = address; - for (let i4 = 1; i4 <= 4; ++i4) { - output = String(n3 % 256) + output; - if (i4 !== 4) { - output = "." + output; - } - n3 = Math.floor(n3 / 256); - } - return output; - } - function parseIPv6(input) { - const address = [0, 0, 0, 0, 0, 0, 0, 0]; - let pieceIndex = 0; - let compress2 = null; - let pointer = 0; - input = punycode.ucs2.decode(input); - if (input[pointer] === 58) { - if (input[pointer + 1] !== 58) { - return failure; - } - pointer += 2; - ++pieceIndex; - compress2 = pieceIndex; - } - while (pointer < input.length) { - if (pieceIndex === 8) { - return failure; - } - if (input[pointer] === 58) { - if (compress2 !== null) { - return failure; - } - ++pointer; - ++pieceIndex; - compress2 = pieceIndex; - continue; - } - let value = 0; - let length2 = 0; - while (length2 < 4 && isASCIIHex(input[pointer])) { - value = value * 16 + parseInt(at2(input, pointer), 16); - ++pointer; - ++length2; - } - if (input[pointer] === 46) { - if (length2 === 0) { - return failure; - } - pointer -= length2; - if (pieceIndex > 6) { - return failure; - } - let numbersSeen = 0; - while (input[pointer] !== void 0) { - let ipv4Piece = null; - if (numbersSeen > 0) { - if (input[pointer] === 46 && numbersSeen < 4) { - ++pointer; - } else { - return failure; - } - } - if (!isASCIIDigit(input[pointer])) { - return failure; - } - while (isASCIIDigit(input[pointer])) { - const number = parseInt(at2(input, pointer)); - if (ipv4Piece === null) { - ipv4Piece = number; - } else if (ipv4Piece === 0) { - return failure; - } else { - ipv4Piece = ipv4Piece * 10 + number; - } - if (ipv4Piece > 255) { - return failure; - } - ++pointer; - } - address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece; - ++numbersSeen; - if (numbersSeen === 2 || numbersSeen === 4) { - ++pieceIndex; - } - } - if (numbersSeen !== 4) { - return failure; - } - break; - } else if (input[pointer] === 58) { - ++pointer; - if (input[pointer] === void 0) { - return failure; - } - } else if (input[pointer] !== void 0) { - return failure; - } - address[pieceIndex] = value; - ++pieceIndex; - } - if (compress2 !== null) { - let swaps = pieceIndex - compress2; - pieceIndex = 7; - while (pieceIndex !== 0 && swaps > 0) { - const temp = address[compress2 + swaps - 1]; - address[compress2 + swaps - 1] = address[pieceIndex]; - address[pieceIndex] = temp; - --pieceIndex; - --swaps; - } - } else if (compress2 === null && pieceIndex !== 8) { - return failure; - } - return address; - } - function serializeIPv6(address) { - let output = ""; - const seqResult = findLongestZeroSequence(address); - const compress2 = seqResult.idx; - let ignore0 = false; - for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) { - if (ignore0 && address[pieceIndex] === 0) { - continue; - } else if (ignore0) { - ignore0 = false; - } - if (compress2 === pieceIndex) { - const separator = pieceIndex === 0 ? "::" : ":"; - output += separator; - ignore0 = true; - continue; - } - output += address[pieceIndex].toString(16); - if (pieceIndex !== 7) { - output += ":"; - } - } - return output; - } - function parseHost(input, isSpecialArg) { - if (input[0] === "[") { - if (input[input.length - 1] !== "]") { - return failure; - } - return parseIPv6(input.substring(1, input.length - 1)); - } - if (!isSpecialArg) { - return parseOpaqueHost(input); - } - const domain = utf8PercentDecode(input); - const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false); - if (asciiDomain === null) { - return failure; - } - if (containsForbiddenHostCodePoint(asciiDomain)) { - return failure; - } - const ipv4Host = parseIPv4(asciiDomain); - if (typeof ipv4Host === "number" || ipv4Host === failure) { - return ipv4Host; - } - return asciiDomain; - } - function parseOpaqueHost(input) { - if (containsForbiddenHostCodePointExcludingPercent(input)) { - return failure; - } - let output = ""; - const decoded = punycode.ucs2.decode(input); - for (let i4 = 0; i4 < decoded.length; ++i4) { - output += percentEncodeChar(decoded[i4], isC0ControlPercentEncode); - } - return output; - } - function findLongestZeroSequence(arr) { - let maxIdx = null; - let maxLen = 1; - let currStart = null; - let currLen = 0; - for (let i4 = 0; i4 < arr.length; ++i4) { - if (arr[i4] !== 0) { - if (currLen > maxLen) { - maxIdx = currStart; - maxLen = currLen; - } - currStart = null; - currLen = 0; - } else { - if (currStart === null) { - currStart = i4; - } - ++currLen; - } - } - if (currLen > maxLen) { - maxIdx = currStart; - maxLen = currLen; - } - return { - idx: maxIdx, - len: maxLen - }; - } - function serializeHost(host) { - if (typeof host === "number") { - return serializeIPv4(host); - } - if (host instanceof Array) { - return "[" + serializeIPv6(host) + "]"; - } - return host; - } - function trimControlChars(url) { - return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, ""); - } - function trimTabAndNewline(url) { - return url.replace(/\u0009|\u000A|\u000D/g, ""); - } - function shortenPath(url) { - const path = url.path; - if (path.length === 0) { - return; - } - if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) { - return; - } - path.pop(); - } - function includesCredentials(url) { - return url.username !== "" || url.password !== ""; - } - function cannotHaveAUsernamePasswordPort(url) { - return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file"; - } - function isNormalizedWindowsDriveLetter(string) { - return /^[A-Za-z]:$/.test(string); - } - function URLStateMachine(input, base, encodingOverride, url, stateOverride) { - this.pointer = 0; - this.input = input; - this.base = base || null; - this.encodingOverride = encodingOverride || "utf-8"; - this.stateOverride = stateOverride; - this.url = url; - this.failure = false; - this.parseError = false; - if (!this.url) { - this.url = { - scheme: "", - username: "", - password: "", - host: null, - port: null, - path: [], - query: null, - fragment: null, - cannotBeABaseURL: false - }; - const res2 = trimControlChars(this.input); - if (res2 !== this.input) { - this.parseError = true; - } - this.input = res2; - } - const res = trimTabAndNewline(this.input); - if (res !== this.input) { - this.parseError = true; - } - this.input = res; - this.state = stateOverride || "scheme start"; - this.buffer = ""; - this.atFlag = false; - this.arrFlag = false; - this.passwordTokenSeenFlag = false; - this.input = punycode.ucs2.decode(this.input); - for (; this.pointer <= this.input.length; ++this.pointer) { - const c3 = this.input[this.pointer]; - const cStr = isNaN(c3) ? void 0 : String.fromCodePoint(c3); - const ret = this["parse " + this.state](c3, cStr); - if (!ret) { - break; - } else if (ret === failure) { - this.failure = true; - break; - } - } - } - URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c3, cStr) { - if (isASCIIAlpha(c3)) { - this.buffer += cStr.toLowerCase(); - this.state = "scheme"; - } else if (!this.stateOverride) { - this.state = "no scheme"; - --this.pointer; - } else { - this.parseError = true; - return failure; - } - return true; - }; - URLStateMachine.prototype["parse scheme"] = function parseScheme(c3, cStr) { - if (isASCIIAlphanumeric(c3) || c3 === 43 || c3 === 45 || c3 === 46) { - this.buffer += cStr.toLowerCase(); - } else if (c3 === 58) { - if (this.stateOverride) { - if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) { - return false; - } - if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) { - return false; - } - if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") { - return false; - } - if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) { - return false; - } - } - this.url.scheme = this.buffer; - this.buffer = ""; - if (this.stateOverride) { - return false; - } - if (this.url.scheme === "file") { - if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) { - this.parseError = true; - } - this.state = "file"; - } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) { - this.state = "special relative or authority"; - } else if (isSpecial(this.url)) { - this.state = "special authority slashes"; - } else if (this.input[this.pointer + 1] === 47) { - this.state = "path or authority"; - ++this.pointer; - } else { - this.url.cannotBeABaseURL = true; - this.url.path.push(""); - this.state = "cannot-be-a-base-URL path"; - } - } else if (!this.stateOverride) { - this.buffer = ""; - this.state = "no scheme"; - this.pointer = -1; - } else { - this.parseError = true; - return failure; - } - return true; - }; - URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c3) { - if (this.base === null || this.base.cannotBeABaseURL && c3 !== 35) { - return failure; - } else if (this.base.cannotBeABaseURL && c3 === 35) { - this.url.scheme = this.base.scheme; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - this.url.fragment = ""; - this.url.cannotBeABaseURL = true; - this.state = "fragment"; - } else if (this.base.scheme === "file") { - this.state = "file"; - --this.pointer; - } else { - this.state = "relative"; - --this.pointer; - } - return true; - }; - URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c3) { - if (c3 === 47 && this.input[this.pointer + 1] === 47) { - this.state = "special authority ignore slashes"; - ++this.pointer; - } else { - this.parseError = true; - this.state = "relative"; - --this.pointer; - } - return true; - }; - URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c3) { - if (c3 === 47) { - this.state = "authority"; - } else { - this.state = "path"; - --this.pointer; - } - return true; - }; - URLStateMachine.prototype["parse relative"] = function parseRelative(c3) { - this.url.scheme = this.base.scheme; - if (isNaN(c3)) { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - } else if (c3 === 47) { - this.state = "relative slash"; - } else if (c3 === 63) { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(); - this.url.query = ""; - this.state = "query"; - } else if (c3 === 35) { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - this.url.fragment = ""; - this.state = "fragment"; - } else if (isSpecial(this.url) && c3 === 92) { - this.parseError = true; - this.state = "relative slash"; - } else { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(0, this.base.path.length - 1); - this.state = "path"; - --this.pointer; - } - return true; - }; - URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c3) { - if (isSpecial(this.url) && (c3 === 47 || c3 === 92)) { - if (c3 === 92) { - this.parseError = true; - } - this.state = "special authority ignore slashes"; - } else if (c3 === 47) { - this.state = "authority"; - } else { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.state = "path"; - --this.pointer; - } - return true; - }; - URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c3) { - if (c3 === 47 && this.input[this.pointer + 1] === 47) { - this.state = "special authority ignore slashes"; - ++this.pointer; - } else { - this.parseError = true; - this.state = "special authority ignore slashes"; - --this.pointer; - } - return true; - }; - URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c3) { - if (c3 !== 47 && c3 !== 92) { - this.state = "authority"; - --this.pointer; - } else { - this.parseError = true; - } - return true; - }; - URLStateMachine.prototype["parse authority"] = function parseAuthority(c3, cStr) { - if (c3 === 64) { - this.parseError = true; - if (this.atFlag) { - this.buffer = "%40" + this.buffer; - } - this.atFlag = true; - const len = countSymbols(this.buffer); - for (let pointer = 0; pointer < len; ++pointer) { - const codePoint = this.buffer.codePointAt(pointer); - if (codePoint === 58 && !this.passwordTokenSeenFlag) { - this.passwordTokenSeenFlag = true; - continue; - } - const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode); - if (this.passwordTokenSeenFlag) { - this.url.password += encodedCodePoints; - } else { - this.url.username += encodedCodePoints; - } - } - this.buffer = ""; - } else if (isNaN(c3) || c3 === 47 || c3 === 63 || c3 === 35 || isSpecial(this.url) && c3 === 92) { - if (this.atFlag && this.buffer === "") { - this.parseError = true; - return failure; - } - this.pointer -= countSymbols(this.buffer) + 1; - this.buffer = ""; - this.state = "host"; - } else { - this.buffer += cStr; - } - return true; - }; - URLStateMachine.prototype["parse hostname"] = URLStateMachine.prototype["parse host"] = function parseHostName(c3, cStr) { - if (this.stateOverride && this.url.scheme === "file") { - --this.pointer; - this.state = "file host"; - } else if (c3 === 58 && !this.arrFlag) { - if (this.buffer === "") { - this.parseError = true; - return failure; - } - const host = parseHost(this.buffer, isSpecial(this.url)); - if (host === failure) { - return failure; - } - this.url.host = host; - this.buffer = ""; - this.state = "port"; - if (this.stateOverride === "hostname") { - return false; - } - } else if (isNaN(c3) || c3 === 47 || c3 === 63 || c3 === 35 || isSpecial(this.url) && c3 === 92) { - --this.pointer; - if (isSpecial(this.url) && this.buffer === "") { - this.parseError = true; - return failure; - } else if (this.stateOverride && this.buffer === "" && (includesCredentials(this.url) || this.url.port !== null)) { - this.parseError = true; - return false; - } - const host = parseHost(this.buffer, isSpecial(this.url)); - if (host === failure) { - return failure; - } - this.url.host = host; - this.buffer = ""; - this.state = "path start"; - if (this.stateOverride) { - return false; - } - } else { - if (c3 === 91) { - this.arrFlag = true; - } else if (c3 === 93) { - this.arrFlag = false; - } - this.buffer += cStr; - } - return true; - }; - URLStateMachine.prototype["parse port"] = function parsePort(c3, cStr) { - if (isASCIIDigit(c3)) { - this.buffer += cStr; - } else if (isNaN(c3) || c3 === 47 || c3 === 63 || c3 === 35 || isSpecial(this.url) && c3 === 92 || this.stateOverride) { - if (this.buffer !== "") { - const port = parseInt(this.buffer); - if (port > Math.pow(2, 16) - 1) { - this.parseError = true; - return failure; - } - this.url.port = port === defaultPort2(this.url.scheme) ? null : port; - this.buffer = ""; - } - if (this.stateOverride) { - return false; - } - this.state = "path start"; - --this.pointer; - } else { - this.parseError = true; - return failure; - } - return true; - }; - var fileOtherwiseCodePoints = /* @__PURE__ */ new Set([47, 92, 63, 35]); - URLStateMachine.prototype["parse file"] = function parseFile(c3) { - this.url.scheme = "file"; - if (c3 === 47 || c3 === 92) { - if (c3 === 92) { - this.parseError = true; - } - this.state = "file slash"; - } else if (this.base !== null && this.base.scheme === "file") { - if (isNaN(c3)) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - } else if (c3 === 63) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - this.url.query = ""; - this.state = "query"; - } else if (c3 === 35) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - this.url.fragment = ""; - this.state = "fragment"; - } else { - if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points - !isWindowsDriveLetterCodePoints(c3, this.input[this.pointer + 1]) || this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points - !fileOtherwiseCodePoints.has(this.input[this.pointer + 2])) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - shortenPath(this.url); - } else { - this.parseError = true; - } - this.state = "path"; - --this.pointer; - } - } else { - this.state = "path"; - --this.pointer; - } - return true; - }; - URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c3) { - if (c3 === 47 || c3 === 92) { - if (c3 === 92) { - this.parseError = true; - } - this.state = "file host"; - } else { - if (this.base !== null && this.base.scheme === "file") { - if (isNormalizedWindowsDriveLetterString(this.base.path[0])) { - this.url.path.push(this.base.path[0]); - } else { - this.url.host = this.base.host; - } - } - this.state = "path"; - --this.pointer; - } - return true; - }; - URLStateMachine.prototype["parse file host"] = function parseFileHost(c3, cStr) { - if (isNaN(c3) || c3 === 47 || c3 === 92 || c3 === 63 || c3 === 35) { - --this.pointer; - if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) { - this.parseError = true; - this.state = "path"; - } else if (this.buffer === "") { - this.url.host = ""; - if (this.stateOverride) { - return false; - } - this.state = "path start"; - } else { - let host = parseHost(this.buffer, isSpecial(this.url)); - if (host === failure) { - return failure; - } - if (host === "localhost") { - host = ""; - } - this.url.host = host; - if (this.stateOverride) { - return false; - } - this.buffer = ""; - this.state = "path start"; - } - } else { - this.buffer += cStr; - } - return true; - }; - URLStateMachine.prototype["parse path start"] = function parsePathStart(c3) { - if (isSpecial(this.url)) { - if (c3 === 92) { - this.parseError = true; - } - this.state = "path"; - if (c3 !== 47 && c3 !== 92) { - --this.pointer; - } - } else if (!this.stateOverride && c3 === 63) { - this.url.query = ""; - this.state = "query"; - } else if (!this.stateOverride && c3 === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } else if (c3 !== void 0) { - this.state = "path"; - if (c3 !== 47) { - --this.pointer; - } - } - return true; - }; - URLStateMachine.prototype["parse path"] = function parsePath(c3) { - if (isNaN(c3) || c3 === 47 || isSpecial(this.url) && c3 === 92 || !this.stateOverride && (c3 === 63 || c3 === 35)) { - if (isSpecial(this.url) && c3 === 92) { - this.parseError = true; - } - if (isDoubleDot(this.buffer)) { - shortenPath(this.url); - if (c3 !== 47 && !(isSpecial(this.url) && c3 === 92)) { - this.url.path.push(""); - } - } else if (isSingleDot(this.buffer) && c3 !== 47 && !(isSpecial(this.url) && c3 === 92)) { - this.url.path.push(""); - } else if (!isSingleDot(this.buffer)) { - if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) { - if (this.url.host !== "" && this.url.host !== null) { - this.parseError = true; - this.url.host = ""; - } - this.buffer = this.buffer[0] + ":"; - } - this.url.path.push(this.buffer); - } - this.buffer = ""; - if (this.url.scheme === "file" && (c3 === void 0 || c3 === 63 || c3 === 35)) { - while (this.url.path.length > 1 && this.url.path[0] === "") { - this.parseError = true; - this.url.path.shift(); - } - } - if (c3 === 63) { - this.url.query = ""; - this.state = "query"; - } - if (c3 === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } - } else { - if (c3 === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } - this.buffer += percentEncodeChar(c3, isPathPercentEncode); - } - return true; - }; - URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c3) { - if (c3 === 63) { - this.url.query = ""; - this.state = "query"; - } else if (c3 === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } else { - if (!isNaN(c3) && c3 !== 37) { - this.parseError = true; - } - if (c3 === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } - if (!isNaN(c3)) { - this.url.path[0] = this.url.path[0] + percentEncodeChar(c3, isC0ControlPercentEncode); - } - } - return true; - }; - URLStateMachine.prototype["parse query"] = function parseQuery(c3, cStr) { - if (isNaN(c3) || !this.stateOverride && c3 === 35) { - if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") { - this.encodingOverride = "utf-8"; - } - const buffer = new Buffer(this.buffer); - for (let i4 = 0; i4 < buffer.length; ++i4) { - if (buffer[i4] < 33 || buffer[i4] > 126 || buffer[i4] === 34 || buffer[i4] === 35 || buffer[i4] === 60 || buffer[i4] === 62) { - this.url.query += percentEncode(buffer[i4]); - } else { - this.url.query += String.fromCodePoint(buffer[i4]); - } - } - this.buffer = ""; - if (c3 === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } - } else { - if (c3 === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } - this.buffer += cStr; - } - return true; - }; - URLStateMachine.prototype["parse fragment"] = function parseFragment(c3) { - if (isNaN(c3)) { - } else if (c3 === 0) { - this.parseError = true; - } else { - if (c3 === 37 && (!isASCIIHex(this.input[this.pointer + 1]) || !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } - this.url.fragment += percentEncodeChar(c3, isC0ControlPercentEncode); - } - return true; - }; - function serializeURL(url, excludeFragment) { - let output = url.scheme + ":"; - if (url.host !== null) { - output += "//"; - if (url.username !== "" || url.password !== "") { - output += url.username; - if (url.password !== "") { - output += ":" + url.password; - } - output += "@"; - } - output += serializeHost(url.host); - if (url.port !== null) { - output += ":" + url.port; - } - } else if (url.host === null && url.scheme === "file") { - output += "//"; - } - if (url.cannotBeABaseURL) { - output += url.path[0]; - } else { - for (const string of url.path) { - output += "/" + string; - } - } - if (url.query !== null) { - output += "?" + url.query; - } - if (!excludeFragment && url.fragment !== null) { - output += "#" + url.fragment; - } - return output; - } - function serializeOrigin(tuple) { - let result = tuple.scheme + "://"; - result += serializeHost(tuple.host); - if (tuple.port !== null) { - result += ":" + tuple.port; - } - return result; - } - module2.exports.serializeURL = serializeURL; - module2.exports.serializeURLOrigin = function(url) { - switch (url.scheme) { - case "blob": - try { - return module2.exports.serializeURLOrigin(module2.exports.parseURL(url.path[0])); - } catch (e3) { - return "null"; - } - case "ftp": - case "gopher": - case "http": - case "https": - case "ws": - case "wss": - return serializeOrigin({ - scheme: url.scheme, - host: url.host, - port: url.port - }); - case "file": - return "file://"; - default: - return "null"; - } - }; - module2.exports.basicURLParse = function(input, options) { - if (options === void 0) { - options = {}; - } - const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride); - if (usm.failure) { - return "failure"; - } - return usm.url; - }; - module2.exports.setTheUsername = function(url, username) { - url.username = ""; - const decoded = punycode.ucs2.decode(username); - for (let i4 = 0; i4 < decoded.length; ++i4) { - url.username += percentEncodeChar(decoded[i4], isUserinfoPercentEncode); - } - }; - module2.exports.setThePassword = function(url, password) { - url.password = ""; - const decoded = punycode.ucs2.decode(password); - for (let i4 = 0; i4 < decoded.length; ++i4) { - url.password += percentEncodeChar(decoded[i4], isUserinfoPercentEncode); - } - }; - module2.exports.serializeHost = serializeHost; - module2.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; - module2.exports.serializeInteger = function(integer) { - return String(integer); - }; - module2.exports.parseURL = function(input, options) { - if (options === void 0) { - options = {}; - } - return module2.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride }); - }; - } -}); - -// node_modules/whatwg-url/lib/URL-impl.js -var require_URL_impl = __commonJS({ - "node_modules/whatwg-url/lib/URL-impl.js"(exports) { - "use strict"; - var usm = require_url_state_machine(); - exports.implementation = class URLImpl { - constructor(constructorArgs) { - const url = constructorArgs[0]; - const base = constructorArgs[1]; - let parsedBase = null; - if (base !== void 0) { - parsedBase = usm.basicURLParse(base); - if (parsedBase === "failure") { - throw new TypeError("Invalid base URL"); - } - } - const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase }); - if (parsedURL === "failure") { - throw new TypeError("Invalid URL"); - } - this._url = parsedURL; - } - get href() { - return usm.serializeURL(this._url); - } - set href(v2) { - const parsedURL = usm.basicURLParse(v2); - if (parsedURL === "failure") { - throw new TypeError("Invalid URL"); - } - this._url = parsedURL; - } - get origin() { - return usm.serializeURLOrigin(this._url); - } - get protocol() { - return this._url.scheme + ":"; - } - set protocol(v2) { - usm.basicURLParse(v2 + ":", { url: this._url, stateOverride: "scheme start" }); - } - get username() { - return this._url.username; - } - set username(v2) { - if (usm.cannotHaveAUsernamePasswordPort(this._url)) { - return; - } - usm.setTheUsername(this._url, v2); - } - get password() { - return this._url.password; - } - set password(v2) { - if (usm.cannotHaveAUsernamePasswordPort(this._url)) { - return; - } - usm.setThePassword(this._url, v2); - } - get host() { - const url = this._url; - if (url.host === null) { - return ""; - } - if (url.port === null) { - return usm.serializeHost(url.host); - } - return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port); - } - set host(v2) { - if (this._url.cannotBeABaseURL) { - return; - } - usm.basicURLParse(v2, { url: this._url, stateOverride: "host" }); - } - get hostname() { - if (this._url.host === null) { - return ""; - } - return usm.serializeHost(this._url.host); - } - set hostname(v2) { - if (this._url.cannotBeABaseURL) { - return; - } - usm.basicURLParse(v2, { url: this._url, stateOverride: "hostname" }); - } - get port() { - if (this._url.port === null) { - return ""; - } - return usm.serializeInteger(this._url.port); - } - set port(v2) { - if (usm.cannotHaveAUsernamePasswordPort(this._url)) { - return; - } - if (v2 === "") { - this._url.port = null; - } else { - usm.basicURLParse(v2, { url: this._url, stateOverride: "port" }); - } - } - get pathname() { - if (this._url.cannotBeABaseURL) { - return this._url.path[0]; - } - if (this._url.path.length === 0) { - return ""; - } - return "/" + this._url.path.join("/"); - } - set pathname(v2) { - if (this._url.cannotBeABaseURL) { - return; - } - this._url.path = []; - usm.basicURLParse(v2, { url: this._url, stateOverride: "path start" }); - } - get search() { - if (this._url.query === null || this._url.query === "") { - return ""; - } - return "?" + this._url.query; - } - set search(v2) { - const url = this._url; - if (v2 === "") { - url.query = null; - return; - } - const input = v2[0] === "?" ? v2.substring(1) : v2; - url.query = ""; - usm.basicURLParse(input, { url, stateOverride: "query" }); - } - get hash() { - if (this._url.fragment === null || this._url.fragment === "") { - return ""; - } - return "#" + this._url.fragment; - } - set hash(v2) { - if (v2 === "") { - this._url.fragment = null; - return; - } - const input = v2[0] === "#" ? v2.substring(1) : v2; - this._url.fragment = ""; - usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" }); - } - toJSON() { - return this.href; - } - }; - } -}); - -// node_modules/whatwg-url/lib/URL.js -var require_URL = __commonJS({ - "node_modules/whatwg-url/lib/URL.js"(exports, module2) { - "use strict"; - var conversions = require_lib(); - var utils2 = require_utils(); - var Impl = require_URL_impl(); - var impl = utils2.implSymbol; - function URL2(url) { - if (!this || this[impl] || !(this instanceof URL2)) { - throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); - } - if (arguments.length < 1) { - throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present."); - } - const args = []; - for (let i4 = 0; i4 < arguments.length && i4 < 2; ++i4) { - args[i4] = arguments[i4]; - } - args[0] = conversions["USVString"](args[0]); - if (args[1] !== void 0) { - args[1] = conversions["USVString"](args[1]); - } - module2.exports.setup(this, args); - } - URL2.prototype.toJSON = function toJSON2() { - if (!this || !module2.exports.is(this)) { - throw new TypeError("Illegal invocation"); - } - const args = []; - for (let i4 = 0; i4 < arguments.length && i4 < 0; ++i4) { - args[i4] = arguments[i4]; - } - return this[impl].toJSON.apply(this[impl], args); - }; - Object.defineProperty(URL2.prototype, "href", { - get() { - return this[impl].href; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].href = V2; - }, - enumerable: true, - configurable: true - }); - URL2.prototype.toString = function() { - if (!this || !module2.exports.is(this)) { - throw new TypeError("Illegal invocation"); - } - return this.href; - }; - Object.defineProperty(URL2.prototype, "origin", { - get() { - return this[impl].origin; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(URL2.prototype, "protocol", { - get() { - return this[impl].protocol; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].protocol = V2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(URL2.prototype, "username", { - get() { - return this[impl].username; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].username = V2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(URL2.prototype, "password", { - get() { - return this[impl].password; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].password = V2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(URL2.prototype, "host", { - get() { - return this[impl].host; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].host = V2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(URL2.prototype, "hostname", { - get() { - return this[impl].hostname; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].hostname = V2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(URL2.prototype, "port", { - get() { - return this[impl].port; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].port = V2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(URL2.prototype, "pathname", { - get() { - return this[impl].pathname; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].pathname = V2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(URL2.prototype, "search", { - get() { - return this[impl].search; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].search = V2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(URL2.prototype, "hash", { - get() { - return this[impl].hash; - }, - set(V2) { - V2 = conversions["USVString"](V2); - this[impl].hash = V2; - }, - enumerable: true, - configurable: true - }); - module2.exports = { - is(obj) { - return !!obj && obj[impl] instanceof Impl.implementation; - }, - create(constructorArgs, privateData) { - let obj = Object.create(URL2.prototype); - this.setup(obj, constructorArgs, privateData); - return obj; - }, - setup(obj, constructorArgs, privateData) { - if (!privateData) - privateData = {}; - privateData.wrapper = obj; - obj[impl] = new Impl.implementation(constructorArgs, privateData); - obj[impl][utils2.wrapperSymbol] = obj; - }, - interface: URL2, - expose: { - Window: { URL: URL2 }, - Worker: { URL: URL2 } - } - }; - } -}); - -// node_modules/whatwg-url/lib/public-api.js -var require_public_api = __commonJS({ - "node_modules/whatwg-url/lib/public-api.js"(exports) { - "use strict"; - exports.URL = require_URL().interface; - exports.serializeURL = require_url_state_machine().serializeURL; - exports.serializeURLOrigin = require_url_state_machine().serializeURLOrigin; - exports.basicURLParse = require_url_state_machine().basicURLParse; - exports.setTheUsername = require_url_state_machine().setTheUsername; - exports.setThePassword = require_url_state_machine().setThePassword; - exports.serializeHost = require_url_state_machine().serializeHost; - exports.serializeInteger = require_url_state_machine().serializeInteger; - exports.parseURL = require_url_state_machine().parseURL; - } -}); - -// node_modules/node-fetch/lib/index.js -var require_lib2 = __commonJS({ - "node_modules/node-fetch/lib/index.js"(exports, module2) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function _interopDefault(ex) { - return ex && typeof ex === "object" && "default" in ex ? ex["default"] : ex; - } - var Stream2 = _interopDefault(require("stream")); - var http = _interopDefault(require("http")); - var Url = _interopDefault(require("url")); - var whatwgUrl = _interopDefault(require_public_api()); - var https = _interopDefault(require("https")); - var zlib = _interopDefault(require("zlib")); - var Readable2 = Stream2.Readable; - var BUFFER = Symbol("buffer"); - var TYPE = Symbol("type"); - var Blob4 = class { - constructor() { - this[TYPE] = ""; - const blobParts = arguments[0]; - const options = arguments[1]; - const buffers = []; - let size = 0; - if (blobParts) { - const a3 = blobParts; - const length2 = Number(a3.length); - for (let i4 = 0; i4 < length2; i4++) { - const element = a3[i4]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob4) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === "string" ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } - this[BUFFER] = Buffer.concat(buffers); - let type = options && options.type !== void 0 && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable2(); - readable._read = function() { - }; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return "[object Blob]"; - } - slice() { - const size = this.size; - const start2 = arguments[0]; - const end2 = arguments[1]; - let relativeStart, relativeEnd; - if (start2 === void 0) { - relativeStart = 0; - } else if (start2 < 0) { - relativeStart = Math.max(size + start2, 0); - } else { - relativeStart = Math.min(start2, size); - } - if (end2 === void 0) { - relativeEnd = size; - } else if (end2 < 0) { - relativeEnd = Math.max(size + end2, 0); - } else { - relativeEnd = Math.min(end2, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob4([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } - }; - Object.defineProperties(Blob4.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } - }); - Object.defineProperty(Blob4.prototype, Symbol.toStringTag, { - value: "Blob", - writable: false, - enumerable: false, - configurable: true - }); - function FetchError(message, type, systemError) { - Error.call(this, message); - this.message = message; - this.type = type; - if (systemError) { - this.code = this.errno = systemError.code; - } - Error.captureStackTrace(this, this.constructor); - } - FetchError.prototype = Object.create(Error.prototype); - FetchError.prototype.constructor = FetchError; - FetchError.prototype.name = "FetchError"; - var convert; - try { - convert = require("encoding").convert; - } catch (e3) { - } - var INTERNALS = Symbol("Body internals"); - var PassThrough = Stream2.PassThrough; - function Body(body) { - var _this = this; - var _ref = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, _ref$size = _ref.size; - let size = _ref$size === void 0 ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === void 0 ? 0 : _ref$timeout; - if (body == null) { - body = null; - } else if (isURLSearchParams(body)) { - body = Buffer.from(body.toString()); - } else if (isBlob2(body)) - ; - else if (Buffer.isBuffer(body)) - ; - else if (Object.prototype.toString.call(body) === "[object ArrayBuffer]") { - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof Stream2) - ; - else { - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; - if (body instanceof Stream2) { - body.on("error", function(err) { - const error = err.name === "AbortError" ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, "system", err); - _this[INTERNALS].error = error; - }); - } - } - Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function(buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct2 = this.headers && this.headers.get("content-type") || ""; - return consumeBody.call(this).then(function(buf) { - return Object.assign( - // Prevent copying - new Blob4([], { - type: ct2.toLowerCase() - }), - { - [BUFFER]: buf - } - ); - }); - }, - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - return consumeBody.call(this).then(function(buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, "invalid-json")); - } - }); - }, - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function(buffer) { - return buffer.toString(); - }); - }, - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - return consumeBody.call(this).then(function(buffer) { - return convertBody(buffer, _this3.headers); - }); - } - }; - Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } - }); - Body.mixIn = function(proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } - }; - function consumeBody() { - var _this4 = this; - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - this[INTERNALS].disturbed = true; - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } - let body = this.body; - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - if (isBlob2(body)) { - body = body.stream(); - } - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } - if (!(body instanceof Stream2)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - let accum = []; - let accumBytes = 0; - let abort = false; - return new Body.Promise(function(resolve2, reject) { - let resTimeout; - if (_this4.timeout) { - resTimeout = setTimeout(function() { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, "body-timeout")); - }, _this4.timeout); - } - body.on("error", function(err) { - if (err.name === "AbortError") { - abort = true; - reject(err); - } else { - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, "system", err)); - } - }); - body.on("data", function(chunk) { - if (abort || chunk === null) { - return; - } - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, "max-size")); - return; - } - accumBytes += chunk.length; - accum.push(chunk); - }); - body.on("end", function() { - if (abort) { - return; - } - clearTimeout(resTimeout); - try { - resolve2(Buffer.concat(accum, accumBytes)); - } catch (err) { - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, "system", err)); - } - }); - }); - } - function convertBody(buffer, headers) { - if (typeof convert !== "function") { - throw new Error("The package `encoding` must be installed to use the textConverted() function"); - } - const ct2 = headers.get("content-type"); - let charset = "utf-8"; - let res, str2; - if (ct2) { - res = /charset=([^;]*)/i.exec(ct2); - } - str2 = buffer.slice(0, 1024).toString(); - if (!res && str2) { - res = / 0 && arguments[0] !== void 0 ? arguments[0] : void 0; - this[MAP] = /* @__PURE__ */ Object.create(null); - if (init instanceof Headers4) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } - return; - } - if (init == null) - ; - else if (typeof init === "object") { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== "function") { - throw new TypeError("Header pairs must be iterable"); - } - const pairs2 = []; - for (const pair of init) { - if (typeof pair !== "object" || typeof pair[Symbol.iterator] !== "function") { - throw new TypeError("Each header pair must be iterable"); - } - pairs2.push(Array.from(pair)); - } - for (const pair of pairs2) { - if (pair.length !== 2) { - throw new TypeError("Each header pair must be a name/value tuple"); - } - this.append(pair[0], pair[1]); - } - } else { - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError("Provided initializer must be an object"); - } - } - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find2(this[MAP], name); - if (key === void 0) { - return null; - } - return this[MAP][key].join(", "); - } - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : void 0; - let pairs2 = getHeaders(this); - let i4 = 0; - while (i4 < pairs2.length) { - var _pairs$i = pairs2[i4]; - const name = _pairs$i[0], value = _pairs$i[1]; - callback.call(thisArg, value, name, this); - pairs2 = getHeaders(this); - i4++; - } - } - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find2(this[MAP], name); - this[MAP][key !== void 0 ? key : name] = [value]; - } - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find2(this[MAP], name); - if (key !== void 0) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find2(this[MAP], name) !== void 0; - } - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find2(this[MAP], name); - if (key !== void 0) { - delete this[MAP][key]; - } - } - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, "key"); - } - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, "value"); - } - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, "key+value"); - } - }; - Headers4.prototype.entries = Headers4.prototype[Symbol.iterator]; - Object.defineProperty(Headers4.prototype, Symbol.toStringTag, { - value: "Headers", - writable: false, - enumerable: false, - configurable: true - }); - Object.defineProperties(Headers4.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } - }); - function getHeaders(headers) { - let kind2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "key+value"; - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind2 === "key" ? function(k3) { - return k3.toLowerCase(); - } : kind2 === "value" ? function(k3) { - return headers[MAP][k3].join(", "); - } : function(k3) { - return [k3.toLowerCase(), headers[MAP][k3].join(", ")]; - }); - } - var INTERNAL = Symbol("internal"); - function createHeadersIterator(target, kind2) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind: kind2, - index: 0 - }; - return iterator; - } - var HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError("Value of `this` is not a HeadersIterator"); - } - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, kind2 = _INTERNAL.kind, index4 = _INTERNAL.index; - const values = getHeaders(target, kind2); - const len = values.length; - if (index4 >= len) { - return { - value: void 0, - done: true - }; - } - this[INTERNAL].index = index4 + 1; - return { - value: values[index4], - done: false - }; - } - }, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); - Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: "HeadersIterator", - writable: false, - enumerable: false, - configurable: true - }); - function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - const hostHeaderKey = find2(headers[MAP], "Host"); - if (hostHeaderKey !== void 0) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - return obj; - } - function createHeadersLenient(obj) { - const headers = new Headers4(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === void 0) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; - } - var INTERNALS$1 = Symbol("Response internals"); - var STATUS_CODES = http.STATUS_CODES; - var Response3 = class { - constructor() { - let body = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null; - let opts2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - Body.call(this, body, opts2); - const status = opts2.status || 200; - const headers = new Headers4(opts2.headers); - if (body != null && !headers.has("Content-Type")) { - const contentType = extractContentType(body); - if (contentType) { - headers.append("Content-Type", contentType); - } - } - this[INTERNALS$1] = { - url: opts2.url, - status, - statusText: opts2.statusText || STATUS_CODES[status], - headers, - counter: opts2.counter - }; - } - get url() { - return this[INTERNALS$1].url || ""; - } - get status() { - return this[INTERNALS$1].status; - } - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } - get redirected() { - return this[INTERNALS$1].counter > 0; - } - get statusText() { - return this[INTERNALS$1].statusText; - } - get headers() { - return this[INTERNALS$1].headers; - } - /** - * Clone this response - * - * @return Response - */ - clone() { - return new Response3(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected - }); - } - }; - Body.mixIn(Response3.prototype); - Object.defineProperties(Response3.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } - }); - Object.defineProperty(Response3.prototype, Symbol.toStringTag, { - value: "Response", - writable: false, - enumerable: false, - configurable: true - }); - var INTERNALS$2 = Symbol("Request internals"); - var URL2 = Url.URL || whatwgUrl.URL; - var parse_url = Url.parse; - var format_url = Url.format; - function parseURL(urlStr) { - if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { - urlStr = new URL2(urlStr).toString(); - } - return parse_url(urlStr); - } - var streamDestructionSupported = "destroy" in Stream2.Readable.prototype; - function isRequest(input) { - return typeof input === "object" && typeof input[INTERNALS$2] === "object"; - } - function isAbortSignal(signal) { - const proto = signal && typeof signal === "object" && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === "AbortSignal"); - } - var Request3 = class { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - let parsedURL; - if (!isRequest(input)) { - if (input && input.href) { - parsedURL = parseURL(input.href); - } else { - parsedURL = parseURL(`${input}`); - } - input = {}; - } else { - parsedURL = parseURL(input.url); - } - let method = init.method || input.method || "GET"; - method = method.toUpperCase(); - if ((init.body != null || isRequest(input) && input.body !== null) && (method === "GET" || method === "HEAD")) { - throw new TypeError("Request with GET/HEAD method cannot have body"); - } - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }); - const headers = new Headers4(init.headers || input.headers || {}); - if (inputBody != null && !headers.has("Content-Type")) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append("Content-Type", contentType); - } - } - let signal = isRequest(input) ? input.signal : null; - if ("signal" in init) - signal = init.signal; - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError("Expected signal to be an instanceof AbortSignal"); - } - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || "follow", - headers, - parsedURL, - signal - }; - this.follow = init.follow !== void 0 ? init.follow : input.follow !== void 0 ? input.follow : 20; - this.compress = init.compress !== void 0 ? init.compress : input.compress !== void 0 ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; - } - get method() { - return this[INTERNALS$2].method; - } - get url() { - return format_url(this[INTERNALS$2].parsedURL); - } - get headers() { - return this[INTERNALS$2].headers; - } - get redirect() { - return this[INTERNALS$2].redirect; - } - get signal() { - return this[INTERNALS$2].signal; - } - /** - * Clone this request - * - * @return Request - */ - clone() { - return new Request3(this); - } - }; - Body.mixIn(Request3.prototype); - Object.defineProperty(Request3.prototype, Symbol.toStringTag, { - value: "Request", - writable: false, - enumerable: false, - configurable: true - }); - Object.defineProperties(Request3.prototype, { - method: { enumerable: true }, - url: { enumerable: true }, - headers: { enumerable: true }, - redirect: { enumerable: true }, - clone: { enumerable: true }, - signal: { enumerable: true } - }); - function getNodeRequestOptions(request) { - const parsedURL = request[INTERNALS$2].parsedURL; - const headers = new Headers4(request[INTERNALS$2].headers); - if (!headers.has("Accept")) { - headers.set("Accept", "*/*"); - } - if (!parsedURL.protocol || !parsedURL.hostname) { - throw new TypeError("Only absolute URLs are supported"); - } - if (!/^https?:$/.test(parsedURL.protocol)) { - throw new TypeError("Only HTTP(S) protocols are supported"); - } - if (request.signal && request.body instanceof Stream2.Readable && !streamDestructionSupported) { - throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8"); - } - let contentLengthValue = null; - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = "0"; - } - if (request.body != null) { - const totalBytes = getTotalBytes(request); - if (typeof totalBytes === "number") { - contentLengthValue = String(totalBytes); - } - } - if (contentLengthValue) { - headers.set("Content-Length", contentLengthValue); - } - if (!headers.has("User-Agent")) { - headers.set("User-Agent", "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)"); - } - if (request.compress && !headers.has("Accept-Encoding")) { - headers.set("Accept-Encoding", "gzip,deflate"); - } - let agent = request.agent; - if (typeof agent === "function") { - agent = agent(parsedURL); - } - return Object.assign({}, parsedURL, { - method: request.method, - headers: exportNodeCompatibleHeaders(headers), - agent - }); - } - function AbortError(message) { - Error.call(this, message); - this.type = "aborted"; - this.message = message; - Error.captureStackTrace(this, this.constructor); - } - AbortError.prototype = Object.create(Error.prototype); - AbortError.prototype.constructor = AbortError; - AbortError.prototype.name = "AbortError"; - var URL$1 = Url.URL || whatwgUrl.URL; - var PassThrough$1 = Stream2.PassThrough; - var isDomainOrSubdomain = function isDomainOrSubdomain2(destination, original) { - const orig = new URL$1(original).hostname; - const dest = new URL$1(destination).hostname; - return orig === dest || orig[orig.length - dest.length - 1] === "." && orig.endsWith(dest); - }; - var isSameProtocol = function isSameProtocol2(destination, original) { - const orig = new URL$1(original).protocol; - const dest = new URL$1(destination).protocol; - return orig === dest; - }; - function fetch3(url, opts2) { - if (!fetch3.Promise) { - throw new Error("native promise missing, set fetch.Promise to your favorite alternative"); - } - Body.Promise = fetch3.Promise; - return new fetch3.Promise(function(resolve2, reject) { - const request = new Request3(url, opts2); - const options = getNodeRequestOptions(request); - const send = (options.protocol === "https:" ? https : http).request; - const signal = request.signal; - let response = null; - const abort = function abort2() { - let error = new AbortError("The user aborted a request."); - reject(error); - if (request.body && request.body instanceof Stream2.Readable) { - destroyStream(request.body, error); - } - if (!response || !response.body) - return; - response.body.emit("error", error); - }; - if (signal && signal.aborted) { - abort(); - return; - } - const abortAndFinalize = function abortAndFinalize2() { - abort(); - finalize(); - }; - const req = send(options); - let reqTimeout; - if (signal) { - signal.addEventListener("abort", abortAndFinalize); - } - function finalize() { - req.abort(); - if (signal) - signal.removeEventListener("abort", abortAndFinalize); - clearTimeout(reqTimeout); - } - if (request.timeout) { - req.once("socket", function(socket) { - reqTimeout = setTimeout(function() { - reject(new FetchError(`network timeout at: ${request.url}`, "request-timeout")); - finalize(); - }, request.timeout); - }); - } - req.on("error", function(err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, "system", err)); - if (response && response.body) { - destroyStream(response.body, err); - } - finalize(); - }); - fixResponseChunkedTransferBadEnding(req, function(err) { - if (signal && signal.aborted) { - return; - } - if (response && response.body) { - destroyStream(response.body, err); - } - }); - if (parseInt(process.version.substring(1)) < 14) { - req.on("socket", function(s3) { - s3.addListener("close", function(hadError) { - const hasDataListener = s3.listenerCount("data") > 0; - if (response && hasDataListener && !hadError && !(signal && signal.aborted)) { - const err = new Error("Premature close"); - err.code = "ERR_STREAM_PREMATURE_CLOSE"; - response.body.emit("error", err); - } - }); - }); - } - req.on("response", function(res) { - clearTimeout(reqTimeout); - const headers = createHeadersLenient(res.headers); - if (fetch3.isRedirect(res.statusCode)) { - const location = headers.get("Location"); - let locationURL = null; - try { - locationURL = location === null ? null : new URL$1(location, request.url).toString(); - } catch (err) { - if (request.redirect !== "manual") { - reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, "invalid-redirect")); - finalize(); - return; - } - } - switch (request.redirect) { - case "error": - reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, "no-redirect")); - finalize(); - return; - case "manual": - if (locationURL !== null) { - try { - headers.set("Location", locationURL); - } catch (err) { - reject(err); - } - } - break; - case "follow": - if (locationURL === null) { - break; - } - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, "max-redirect")); - finalize(); - return; - } - const requestOpts = { - headers: new Headers4(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout, - size: request.size - }; - if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) { - for (const name of ["authorization", "www-authenticate", "cookie", "cookie2"]) { - requestOpts.headers.delete(name); - } - } - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError("Cannot follow redirect with body being a readable stream", "unsupported-redirect")); - finalize(); - return; - } - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === "POST") { - requestOpts.method = "GET"; - requestOpts.body = void 0; - requestOpts.headers.delete("content-length"); - } - resolve2(fetch3(new Request3(locationURL, requestOpts))); - finalize(); - return; - } - } - res.once("end", function() { - if (signal) - signal.removeEventListener("abort", abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; - const codings = headers.get("Content-Encoding"); - if (!request.compress || request.method === "HEAD" || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response3(body, response_options); - resolve2(response); - return; - } - const zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - }; - if (codings == "gzip" || codings == "x-gzip") { - body = body.pipe(zlib.createGunzip(zlibOptions)); - response = new Response3(body, response_options); - resolve2(response); - return; - } - if (codings == "deflate" || codings == "x-deflate") { - const raw = res.pipe(new PassThrough$1()); - raw.once("data", function(chunk) { - if ((chunk[0] & 15) === 8) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - response = new Response3(body, response_options); - resolve2(response); - }); - raw.on("end", function() { - if (!response) { - response = new Response3(body, response_options); - resolve2(response); - } - }); - return; - } - if (codings == "br" && typeof zlib.createBrotliDecompress === "function") { - body = body.pipe(zlib.createBrotliDecompress()); - response = new Response3(body, response_options); - resolve2(response); - return; - } - response = new Response3(body, response_options); - resolve2(response); - }); - writeToStream(req, request); - }); - } - function fixResponseChunkedTransferBadEnding(request, errorCallback) { - let socket; - request.on("socket", function(s3) { - socket = s3; - }); - request.on("response", function(response) { - const headers = response.headers; - if (headers["transfer-encoding"] === "chunked" && !headers["content-length"]) { - response.once("close", function(hadError) { - const hasDataListener = socket && socket.listenerCount("data") > 0; - if (hasDataListener && !hadError) { - const err = new Error("Premature close"); - err.code = "ERR_STREAM_PREMATURE_CLOSE"; - errorCallback(err); - } - }); - } - }); - } - function destroyStream(stream, err) { - if (stream.destroy) { - stream.destroy(err); - } else { - stream.emit("error", err); - stream.end(); - } - } - fetch3.isRedirect = function(code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; - }; - fetch3.Promise = global.Promise; - module2.exports = exports = fetch3; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = exports; - exports.Headers = Headers4; - exports.Request = Request3; - exports.Response = Response3; - exports.FetchError = FetchError; - exports.AbortError = AbortError; - } -}); - -// node_modules/web-streams-polyfill/dist/ponyfill.mjs -function t3() { -} -function r2(e3) { - return "object" == typeof e3 && null !== e3 || "function" == typeof e3; -} -function n2(e3, t4) { - try { - Object.defineProperty(e3, "name", { value: t4, configurable: true }); - } catch (e4) { - } -} -function u2(e3) { - return new a2(e3); -} -function c2(e3) { - return l2(e3); -} -function d2(e3) { - return s2(e3); -} -function f2(e3, t4, r3) { - return i3.call(e3, t4, r3); -} -function b(e3, t4, r3) { - f2(f2(e3, t4, r3), void 0, o2); -} -function h2(e3, t4) { - b(e3, t4); -} -function _2(e3, t4) { - b(e3, void 0, t4); -} -function p2(e3, t4, r3) { - return f2(e3, t4, r3); -} -function m(e3) { - f2(e3, void 0, o2); -} -function g2(e3, t4, r3) { - if ("function" != typeof e3) - throw new TypeError("Argument is not a function"); - return Function.prototype.apply.call(e3, t4, r3); -} -function w(e3, t4, r3) { - try { - return c2(g2(e3, t4, r3)); - } catch (e4) { - return d2(e4); - } -} -function E(e3, t4) { - e3._ownerReadableStream = t4, t4._reader = e3, "readable" === t4._state ? O(e3) : "closed" === t4._state ? function(e4) { - O(e4), j2(e4); - }(e3) : B(e3, t4._storedError); -} -function P(e3, t4) { - return Gt(e3._ownerReadableStream, t4); -} -function W(e3) { - const t4 = e3._ownerReadableStream; - "readable" === t4._state ? A(e3, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")) : function(e4, t5) { - B(e4, t5); - }(e3, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")), t4._readableStreamController[C](), t4._reader = void 0, e3._ownerReadableStream = void 0; -} -function k2(e3) { - return new TypeError("Cannot " + e3 + " a stream using a released reader"); -} -function O(e3) { - e3._closedPromise = u2((t4, r3) => { - e3._closedPromise_resolve = t4, e3._closedPromise_reject = r3; - }); -} -function B(e3, t4) { - O(e3), A(e3, t4); -} -function A(e3, t4) { - void 0 !== e3._closedPromise_reject && (m(e3._closedPromise), e3._closedPromise_reject(t4), e3._closedPromise_resolve = void 0, e3._closedPromise_reject = void 0); -} -function j2(e3) { - void 0 !== e3._closedPromise_resolve && (e3._closedPromise_resolve(void 0), e3._closedPromise_resolve = void 0, e3._closedPromise_reject = void 0); -} -function F(e3, t4) { - if (void 0 !== e3 && ("object" != typeof (r3 = e3) && "function" != typeof r3)) - throw new TypeError(`${t4} is not an object.`); - var r3; -} -function I(e3, t4) { - if ("function" != typeof e3) - throw new TypeError(`${t4} is not a function.`); -} -function D(e3, t4) { - if (!function(e4) { - return "object" == typeof e4 && null !== e4 || "function" == typeof e4; - }(e3)) - throw new TypeError(`${t4} is not an object.`); -} -function $(e3, t4, r3) { - if (void 0 === e3) - throw new TypeError(`Parameter ${t4} is required in '${r3}'.`); -} -function M(e3, t4, r3) { - if (void 0 === e3) - throw new TypeError(`${t4} is required in '${r3}'.`); -} -function Y(e3) { - return Number(e3); -} -function Q(e3) { - return 0 === e3 ? 0 : e3; -} -function N(e3, t4) { - const r3 = Number.MAX_SAFE_INTEGER; - let o3 = Number(e3); - if (o3 = Q(o3), !z(o3)) - throw new TypeError(`${t4} is not a finite number`); - if (o3 = function(e4) { - return Q(L(e4)); - }(o3), o3 < 0 || o3 > r3) - throw new TypeError(`${t4} is outside the accepted range of 0 to ${r3}, inclusive`); - return z(o3) && 0 !== o3 ? o3 : 0; -} -function H(e3) { - if (!r2(e3)) - return false; - if ("function" != typeof e3.getReader) - return false; - try { - return "boolean" == typeof e3.locked; - } catch (e4) { - return false; - } -} -function x(e3) { - if (!r2(e3)) - return false; - if ("function" != typeof e3.getWriter) - return false; - try { - return "boolean" == typeof e3.locked; - } catch (e4) { - return false; - } -} -function V(e3, t4) { - if (!Vt(e3)) - throw new TypeError(`${t4} is not a ReadableStream.`); -} -function U(e3, t4) { - e3._reader._readRequests.push(t4); -} -function G(e3, t4, r3) { - const o3 = e3._reader._readRequests.shift(); - r3 ? o3._closeSteps() : o3._chunkSteps(t4); -} -function X(e3) { - return e3._reader._readRequests.length; -} -function J(e3) { - const t4 = e3._reader; - return void 0 !== t4 && !!K(t4); -} -function K(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_readRequests") && e3 instanceof ReadableStreamDefaultReader); -} -function Z(e3, t4) { - const r3 = e3._readRequests; - e3._readRequests = new S(), r3.forEach((e4) => { - e4._errorSteps(t4); - }); -} -function ee(e3) { - return new TypeError(`ReadableStreamDefaultReader.prototype.${e3} can only be used on a ReadableStreamDefaultReader`); -} -function oe(e3) { - if (!r2(e3)) - return false; - if (!Object.prototype.hasOwnProperty.call(e3, "_asyncIteratorImpl")) - return false; - try { - return e3._asyncIteratorImpl instanceof te; - } catch (e4) { - return false; - } -} -function ne(e3) { - return new TypeError(`ReadableStreamAsyncIterator.${e3} can only be used on a ReadableSteamAsyncIterator`); -} -function ie(e3, t4, r3, o3, n3) { - new Uint8Array(e3).set(new Uint8Array(r3, o3, n3), t4); -} -function le(e3) { - const t4 = function(e4, t5, r3) { - if (e4.slice) - return e4.slice(t5, r3); - const o3 = r3 - t5, n3 = new ArrayBuffer(o3); - return ie(n3, 0, e4, t5, o3), n3; - }(e3.buffer, e3.byteOffset, e3.byteOffset + e3.byteLength); - return new Uint8Array(t4); -} -function se(e3) { - const t4 = e3._queue.shift(); - return e3._queueTotalSize -= t4.size, e3._queueTotalSize < 0 && (e3._queueTotalSize = 0), t4.value; -} -function ue(e3, t4, r3) { - if ("number" != typeof (o3 = r3) || ae(o3) || o3 < 0 || r3 === 1 / 0) - throw new RangeError("Size must be a finite, non-NaN, non-negative number."); - var o3; - e3._queue.push({ value: t4, size: r3 }), e3._queueTotalSize += r3; -} -function ce(e3) { - e3._queue = new S(), e3._queueTotalSize = 0; -} -function de(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_controlledReadableByteStream") && e3 instanceof ReadableByteStreamController); -} -function fe(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_associatedReadableByteStreamController") && e3 instanceof ReadableStreamBYOBRequest); -} -function be(e3) { - const t4 = function(e4) { - const t5 = e4._controlledReadableByteStream; - if ("readable" !== t5._state) - return false; - if (e4._closeRequested) - return false; - if (!e4._started) - return false; - if (J(t5) && X(t5) > 0) - return true; - if (Le(t5) && ze(t5) > 0) - return true; - if (ke(e4) > 0) - return true; - return false; - }(e3); - if (!t4) - return; - if (e3._pulling) - return void (e3._pullAgain = true); - e3._pulling = true; - b(e3._pullAlgorithm(), () => (e3._pulling = false, e3._pullAgain && (e3._pullAgain = false, be(e3)), null), (t5) => (Pe(e3, t5), null)); -} -function he(e3) { - Re(e3), e3._pendingPullIntos = new S(); -} -function _e(e3, t4) { - let r3 = false; - "closed" === e3._state && (r3 = true); - const o3 = pe(t4); - "default" === t4.readerType ? G(e3, o3, r3) : function(e4, t5, r4) { - const o4 = e4._reader._readIntoRequests.shift(); - r4 ? o4._closeSteps(t5) : o4._chunkSteps(t5); - }(e3, o3, r3); -} -function pe(e3) { - const t4 = e3.bytesFilled, r3 = e3.elementSize; - return new e3.viewConstructor(e3.buffer, e3.byteOffset, t4 / r3); -} -function me(e3, t4, r3, o3) { - e3._queue.push({ buffer: t4, byteOffset: r3, byteLength: o3 }), e3._queueTotalSize += o3; -} -function ye(e3, t4, r3, o3) { - let n3; - try { - n3 = t4.slice(r3, r3 + o3); - } catch (t5) { - throw Pe(e3, t5), t5; - } - me(e3, n3, 0, o3); -} -function ge(e3, t4) { - t4.bytesFilled > 0 && ye(e3, t4.buffer, t4.byteOffset, t4.bytesFilled), Ce(e3); -} -function we(e3, t4) { - const r3 = t4.elementSize, o3 = t4.bytesFilled - t4.bytesFilled % r3, n3 = Math.min(e3._queueTotalSize, t4.byteLength - t4.bytesFilled), a3 = t4.bytesFilled + n3, i4 = a3 - a3 % r3; - let l3 = n3, s3 = false; - i4 > o3 && (l3 = i4 - t4.bytesFilled, s3 = true); - const u3 = e3._queue; - for (; l3 > 0; ) { - const r4 = u3.peek(), o4 = Math.min(l3, r4.byteLength), n4 = t4.byteOffset + t4.bytesFilled; - ie(t4.buffer, n4, r4.buffer, r4.byteOffset, o4), r4.byteLength === o4 ? u3.shift() : (r4.byteOffset += o4, r4.byteLength -= o4), e3._queueTotalSize -= o4, Se(e3, o4, t4), l3 -= o4; - } - return s3; -} -function Se(e3, t4, r3) { - r3.bytesFilled += t4; -} -function ve(e3) { - 0 === e3._queueTotalSize && e3._closeRequested ? (Ee(e3), Xt(e3._controlledReadableByteStream)) : be(e3); -} -function Re(e3) { - null !== e3._byobRequest && (e3._byobRequest._associatedReadableByteStreamController = void 0, e3._byobRequest._view = null, e3._byobRequest = null); -} -function Te(e3) { - for (; e3._pendingPullIntos.length > 0; ) { - if (0 === e3._queueTotalSize) - return; - const t4 = e3._pendingPullIntos.peek(); - we(e3, t4) && (Ce(e3), _e(e3._controlledReadableByteStream, t4)); - } -} -function qe(e3, t4) { - const r3 = e3._pendingPullIntos.peek(); - Re(e3); - "closed" === e3._controlledReadableByteStream._state ? function(e4, t5) { - "none" === t5.readerType && Ce(e4); - const r4 = e4._controlledReadableByteStream; - if (Le(r4)) - for (; ze(r4) > 0; ) - _e(r4, Ce(e4)); - }(e3, r3) : function(e4, t5, r4) { - if (Se(0, t5, r4), "none" === r4.readerType) - return ge(e4, r4), void Te(e4); - if (r4.bytesFilled < r4.elementSize) - return; - Ce(e4); - const o3 = r4.bytesFilled % r4.elementSize; - if (o3 > 0) { - const t6 = r4.byteOffset + r4.bytesFilled; - ye(e4, r4.buffer, t6 - o3, o3); - } - r4.bytesFilled -= o3, _e(e4._controlledReadableByteStream, r4), Te(e4); - }(e3, t4, r3), be(e3); -} -function Ce(e3) { - return e3._pendingPullIntos.shift(); -} -function Ee(e3) { - e3._pullAlgorithm = void 0, e3._cancelAlgorithm = void 0; -} -function Pe(e3, t4) { - const r3 = e3._controlledReadableByteStream; - "readable" === r3._state && (he(e3), ce(e3), Ee(e3), Jt(r3, t4)); -} -function We(e3, t4) { - const r3 = e3._queue.shift(); - e3._queueTotalSize -= r3.byteLength, ve(e3); - const o3 = new Uint8Array(r3.buffer, r3.byteOffset, r3.byteLength); - t4._chunkSteps(o3); -} -function ke(e3) { - const t4 = e3._controlledReadableByteStream._state; - return "errored" === t4 ? null : "closed" === t4 ? 0 : e3._strategyHWM - e3._queueTotalSize; -} -function Oe(e3, t4, r3) { - const o3 = Object.create(ReadableByteStreamController.prototype); - let n3, a3, i4; - n3 = void 0 !== t4.start ? () => t4.start(o3) : () => { - }, a3 = void 0 !== t4.pull ? () => t4.pull(o3) : () => c2(void 0), i4 = void 0 !== t4.cancel ? (e4) => t4.cancel(e4) : () => c2(void 0); - const l3 = t4.autoAllocateChunkSize; - if (0 === l3) - throw new TypeError("autoAllocateChunkSize must be greater than 0"); - !function(e4, t5, r4, o4, n4, a4, i5) { - t5._controlledReadableByteStream = e4, t5._pullAgain = false, t5._pulling = false, t5._byobRequest = null, t5._queue = t5._queueTotalSize = void 0, ce(t5), t5._closeRequested = false, t5._started = false, t5._strategyHWM = a4, t5._pullAlgorithm = o4, t5._cancelAlgorithm = n4, t5._autoAllocateChunkSize = i5, t5._pendingPullIntos = new S(), e4._readableStreamController = t5, b(c2(r4()), () => (t5._started = true, be(t5), null), (e5) => (Pe(t5, e5), null)); - }(e3, o3, n3, a3, i4, r3, l3); -} -function Be(e3) { - return new TypeError(`ReadableStreamBYOBRequest.prototype.${e3} can only be used on a ReadableStreamBYOBRequest`); -} -function Ae(e3) { - return new TypeError(`ReadableByteStreamController.prototype.${e3} can only be used on a ReadableByteStreamController`); -} -function je(e3, t4) { - e3._reader._readIntoRequests.push(t4); -} -function ze(e3) { - return e3._reader._readIntoRequests.length; -} -function Le(e3) { - const t4 = e3._reader; - return void 0 !== t4 && !!Fe(t4); -} -function Fe(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_readIntoRequests") && e3 instanceof ReadableStreamBYOBReader); -} -function Ie(e3, t4) { - const r3 = e3._readIntoRequests; - e3._readIntoRequests = new S(), r3.forEach((e4) => { - e4._errorSteps(t4); - }); -} -function De(e3) { - return new TypeError(`ReadableStreamBYOBReader.prototype.${e3} can only be used on a ReadableStreamBYOBReader`); -} -function $e(e3, t4) { - const { highWaterMark: r3 } = e3; - if (void 0 === r3) - return t4; - if (ae(r3) || r3 < 0) - throw new RangeError("Invalid highWaterMark"); - return r3; -} -function Me(e3) { - const { size: t4 } = e3; - return t4 || (() => 1); -} -function Ye(e3, t4) { - F(e3, t4); - const r3 = null == e3 ? void 0 : e3.highWaterMark, o3 = null == e3 ? void 0 : e3.size; - return { highWaterMark: void 0 === r3 ? void 0 : Y(r3), size: void 0 === o3 ? void 0 : Qe(o3, `${t4} has member 'size' that`) }; -} -function Qe(e3, t4) { - return I(e3, t4), (t5) => Y(e3(t5)); -} -function Ne(e3, t4, r3) { - return I(e3, r3), (r4) => w(e3, t4, [r4]); -} -function He(e3, t4, r3) { - return I(e3, r3), () => w(e3, t4, []); -} -function xe(e3, t4, r3) { - return I(e3, r3), (r4) => g2(e3, t4, [r4]); -} -function Ve(e3, t4, r3) { - return I(e3, r3), (r4, o3) => w(e3, t4, [r4, o3]); -} -function Ge(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_writableStreamController") && e3 instanceof WritableStream); -} -function Xe(e3) { - return void 0 !== e3._writer; -} -function Je(e3, t4) { - var r3; - if ("closed" === e3._state || "errored" === e3._state) - return c2(void 0); - e3._writableStreamController._abortReason = t4, null === (r3 = e3._writableStreamController._abortController) || void 0 === r3 || r3.abort(t4); - const o3 = e3._state; - if ("closed" === o3 || "errored" === o3) - return c2(void 0); - if (void 0 !== e3._pendingAbortRequest) - return e3._pendingAbortRequest._promise; - let n3 = false; - "erroring" === o3 && (n3 = true, t4 = void 0); - const a3 = u2((r4, o4) => { - e3._pendingAbortRequest = { _promise: void 0, _resolve: r4, _reject: o4, _reason: t4, _wasAlreadyErroring: n3 }; - }); - return e3._pendingAbortRequest._promise = a3, n3 || et(e3, t4), a3; -} -function Ke(e3) { - const t4 = e3._state; - if ("closed" === t4 || "errored" === t4) - return d2(new TypeError(`The stream (in ${t4} state) is not in the writable state and cannot be closed`)); - const r3 = u2((t5, r4) => { - const o4 = { _resolve: t5, _reject: r4 }; - e3._closeRequest = o4; - }), o3 = e3._writer; - var n3; - return void 0 !== o3 && e3._backpressure && "writable" === t4 && Et(o3), ue(n3 = e3._writableStreamController, lt, 0), dt(n3), r3; -} -function Ze(e3, t4) { - "writable" !== e3._state ? tt(e3) : et(e3, t4); -} -function et(e3, t4) { - const r3 = e3._writableStreamController; - e3._state = "erroring", e3._storedError = t4; - const o3 = e3._writer; - void 0 !== o3 && it(o3, t4), !function(e4) { - if (void 0 === e4._inFlightWriteRequest && void 0 === e4._inFlightCloseRequest) - return false; - return true; - }(e3) && r3._started && tt(e3); -} -function tt(e3) { - e3._state = "errored", e3._writableStreamController[R](); - const t4 = e3._storedError; - if (e3._writeRequests.forEach((e4) => { - e4._reject(t4); - }), e3._writeRequests = new S(), void 0 === e3._pendingAbortRequest) - return void ot(e3); - const r3 = e3._pendingAbortRequest; - if (e3._pendingAbortRequest = void 0, r3._wasAlreadyErroring) - return r3._reject(t4), void ot(e3); - b(e3._writableStreamController[v](r3._reason), () => (r3._resolve(), ot(e3), null), (t5) => (r3._reject(t5), ot(e3), null)); -} -function rt(e3) { - return void 0 !== e3._closeRequest || void 0 !== e3._inFlightCloseRequest; -} -function ot(e3) { - void 0 !== e3._closeRequest && (e3._closeRequest._reject(e3._storedError), e3._closeRequest = void 0); - const t4 = e3._writer; - void 0 !== t4 && St(t4, e3._storedError); -} -function nt(e3, t4) { - const r3 = e3._writer; - void 0 !== r3 && t4 !== e3._backpressure && (t4 ? function(e4) { - Rt(e4); - }(r3) : Et(r3)), e3._backpressure = t4; -} -function at(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_ownerWritableStream") && e3 instanceof WritableStreamDefaultWriter); -} -function it(e3, t4) { - "pending" === e3._readyPromiseState ? Ct(e3, t4) : function(e4, t5) { - Tt(e4, t5); - }(e3, t4); -} -function st(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_controlledWritableStream") && e3 instanceof WritableStreamDefaultController); -} -function ut(e3) { - e3._writeAlgorithm = void 0, e3._closeAlgorithm = void 0, e3._abortAlgorithm = void 0, e3._strategySizeAlgorithm = void 0; -} -function ct(e3) { - return e3._strategyHWM - e3._queueTotalSize; -} -function dt(e3) { - const t4 = e3._controlledWritableStream; - if (!e3._started) - return; - if (void 0 !== t4._inFlightWriteRequest) - return; - if ("erroring" === t4._state) - return void tt(t4); - if (0 === e3._queue.length) - return; - const r3 = e3._queue.peek().value; - r3 === lt ? function(e4) { - const t5 = e4._controlledWritableStream; - (function(e5) { - e5._inFlightCloseRequest = e5._closeRequest, e5._closeRequest = void 0; - })(t5), se(e4); - const r4 = e4._closeAlgorithm(); - ut(e4), b(r4, () => (function(e5) { - e5._inFlightCloseRequest._resolve(void 0), e5._inFlightCloseRequest = void 0, "erroring" === e5._state && (e5._storedError = void 0, void 0 !== e5._pendingAbortRequest && (e5._pendingAbortRequest._resolve(), e5._pendingAbortRequest = void 0)), e5._state = "closed"; - const t6 = e5._writer; - void 0 !== t6 && vt(t6); - }(t5), null), (e5) => (function(e6, t6) { - e6._inFlightCloseRequest._reject(t6), e6._inFlightCloseRequest = void 0, void 0 !== e6._pendingAbortRequest && (e6._pendingAbortRequest._reject(t6), e6._pendingAbortRequest = void 0), Ze(e6, t6); - }(t5, e5), null)); - }(e3) : function(e4, t5) { - const r4 = e4._controlledWritableStream; - !function(e5) { - e5._inFlightWriteRequest = e5._writeRequests.shift(); - }(r4); - b(e4._writeAlgorithm(t5), () => { - !function(e5) { - e5._inFlightWriteRequest._resolve(void 0), e5._inFlightWriteRequest = void 0; - }(r4); - const t6 = r4._state; - if (se(e4), !rt(r4) && "writable" === t6) { - const t7 = bt(e4); - nt(r4, t7); - } - return dt(e4), null; - }, (t6) => ("writable" === r4._state && ut(e4), function(e5, t7) { - e5._inFlightWriteRequest._reject(t7), e5._inFlightWriteRequest = void 0, Ze(e5, t7); - }(r4, t6), null)); - }(e3, r3); -} -function ft(e3, t4) { - "writable" === e3._controlledWritableStream._state && ht(e3, t4); -} -function bt(e3) { - return ct(e3) <= 0; -} -function ht(e3, t4) { - const r3 = e3._controlledWritableStream; - ut(e3), et(r3, t4); -} -function _t(e3) { - return new TypeError(`WritableStream.prototype.${e3} can only be used on a WritableStream`); -} -function pt(e3) { - return new TypeError(`WritableStreamDefaultController.prototype.${e3} can only be used on a WritableStreamDefaultController`); -} -function mt(e3) { - return new TypeError(`WritableStreamDefaultWriter.prototype.${e3} can only be used on a WritableStreamDefaultWriter`); -} -function yt(e3) { - return new TypeError("Cannot " + e3 + " a stream using a released writer"); -} -function gt(e3) { - e3._closedPromise = u2((t4, r3) => { - e3._closedPromise_resolve = t4, e3._closedPromise_reject = r3, e3._closedPromiseState = "pending"; - }); -} -function wt(e3, t4) { - gt(e3), St(e3, t4); -} -function St(e3, t4) { - void 0 !== e3._closedPromise_reject && (m(e3._closedPromise), e3._closedPromise_reject(t4), e3._closedPromise_resolve = void 0, e3._closedPromise_reject = void 0, e3._closedPromiseState = "rejected"); -} -function vt(e3) { - void 0 !== e3._closedPromise_resolve && (e3._closedPromise_resolve(void 0), e3._closedPromise_resolve = void 0, e3._closedPromise_reject = void 0, e3._closedPromiseState = "resolved"); -} -function Rt(e3) { - e3._readyPromise = u2((t4, r3) => { - e3._readyPromise_resolve = t4, e3._readyPromise_reject = r3; - }), e3._readyPromiseState = "pending"; -} -function Tt(e3, t4) { - Rt(e3), Ct(e3, t4); -} -function qt(e3) { - Rt(e3), Et(e3); -} -function Ct(e3, t4) { - void 0 !== e3._readyPromise_reject && (m(e3._readyPromise), e3._readyPromise_reject(t4), e3._readyPromise_resolve = void 0, e3._readyPromise_reject = void 0, e3._readyPromiseState = "rejected"); -} -function Et(e3) { - void 0 !== e3._readyPromise_resolve && (e3._readyPromise_resolve(void 0), e3._readyPromise_resolve = void 0, e3._readyPromise_reject = void 0, e3._readyPromiseState = "fulfilled"); -} -function kt(e3, t4, r3, o3, n3, a3) { - const i4 = e3.getReader(), l3 = t4.getWriter(); - Vt(e3) && (e3._disturbed = true); - let s3, _3, g3, w2 = false, S2 = false, v2 = "readable", R2 = "writable", T2 = false, q2 = false; - const C2 = u2((e4) => { - g3 = e4; - }); - let E2 = Promise.resolve(void 0); - return u2((P2, W2) => { - let k3; - function O2() { - if (w2) - return; - const e4 = u2((e5, t5) => { - !function r4(o4) { - o4 ? e5() : f2(function() { - if (w2) - return c2(true); - return f2(l3.ready, () => f2(i4.read(), (e6) => !!e6.done || (E2 = l3.write(e6.value), m(E2), false))); - }(), r4, t5); - }(false); - }); - m(e4); - } - function B2() { - return v2 = "closed", r3 ? L2() : z2(() => (Ge(t4) && (T2 = rt(t4), R2 = t4._state), T2 || "closed" === R2 ? c2(void 0) : "erroring" === R2 || "errored" === R2 ? d2(_3) : (T2 = true, l3.close())), false, void 0), null; - } - function A2(e4) { - return w2 || (v2 = "errored", s3 = e4, o3 ? L2(true, e4) : z2(() => l3.abort(e4), true, e4)), null; - } - function j3(e4) { - return S2 || (R2 = "errored", _3 = e4, n3 ? L2(true, e4) : z2(() => i4.cancel(e4), true, e4)), null; - } - if (void 0 !== a3 && (k3 = () => { - const e4 = void 0 !== a3.reason ? a3.reason : new Wt("Aborted", "AbortError"), t5 = []; - o3 || t5.push(() => "writable" === R2 ? l3.abort(e4) : c2(void 0)), n3 || t5.push(() => "readable" === v2 ? i4.cancel(e4) : c2(void 0)), z2(() => Promise.all(t5.map((e5) => e5())), true, e4); - }, a3.aborted ? k3() : a3.addEventListener("abort", k3)), Vt(e3) && (v2 = e3._state, s3 = e3._storedError), Ge(t4) && (R2 = t4._state, _3 = t4._storedError, T2 = rt(t4)), Vt(e3) && Ge(t4) && (q2 = true, g3()), "errored" === v2) - A2(s3); - else if ("erroring" === R2 || "errored" === R2) - j3(_3); - else if ("closed" === v2) - B2(); - else if (T2 || "closed" === R2) { - const e4 = new TypeError("the destination writable stream closed before all data could be piped to it"); - n3 ? L2(true, e4) : z2(() => i4.cancel(e4), true, e4); - } - function z2(e4, t5, r4) { - function o4() { - return "writable" !== R2 || T2 ? n4() : h2(function() { - let e5; - return c2(function t6() { - if (e5 !== E2) - return e5 = E2, p2(E2, t6, t6); - }()); - }(), n4), null; - } - function n4() { - return e4 ? b(e4(), () => F2(t5, r4), (e5) => F2(true, e5)) : F2(t5, r4), null; - } - w2 || (w2 = true, q2 ? o4() : h2(C2, o4)); - } - function L2(e4, t5) { - z2(void 0, e4, t5); - } - function F2(e4, t5) { - return S2 = true, l3.releaseLock(), i4.releaseLock(), void 0 !== a3 && a3.removeEventListener("abort", k3), e4 ? W2(t5) : P2(void 0), null; - } - w2 || (b(i4.closed, B2, A2), b(l3.closed, function() { - return S2 || (R2 = "closed"), null; - }, j3)), q2 ? O2() : y(() => { - q2 = true, g3(), O2(); - }); - }); -} -function Ot(e3, t4) { - return function(e4) { - try { - return e4.getReader({ mode: "byob" }).releaseLock(), true; - } catch (e5) { - return false; - } - }(e3) ? function(e4) { - let t5, r3, o3, n3, a3, i4 = e4.getReader(), l3 = false, s3 = false, d3 = false, f3 = false, h3 = false, p3 = false; - const m2 = u2((e5) => { - a3 = e5; - }); - function y2(e5) { - _2(e5.closed, (t6) => (e5 !== i4 || (o3.error(t6), n3.error(t6), h3 && p3 || a3(void 0)), null)); - } - function g3() { - l3 && (i4.releaseLock(), i4 = e4.getReader(), y2(i4), l3 = false), b(i4.read(), (e5) => { - var t6, r4; - if (d3 = false, f3 = false, e5.done) - return h3 || o3.close(), p3 || n3.close(), null === (t6 = o3.byobRequest) || void 0 === t6 || t6.respond(0), null === (r4 = n3.byobRequest) || void 0 === r4 || r4.respond(0), h3 && p3 || a3(void 0), null; - const l4 = e5.value, u3 = l4; - let c3 = l4; - if (!h3 && !p3) - try { - c3 = le(l4); - } catch (e6) { - return o3.error(e6), n3.error(e6), a3(i4.cancel(e6)), null; - } - return h3 || o3.enqueue(u3), p3 || n3.enqueue(c3), s3 = false, d3 ? S2() : f3 && v2(), null; - }, () => (s3 = false, null)); - } - function w2(t6, r4) { - l3 || (i4.releaseLock(), i4 = e4.getReader({ mode: "byob" }), y2(i4), l3 = true); - const u3 = r4 ? n3 : o3, c3 = r4 ? o3 : n3; - b(i4.read(t6), (e5) => { - var t7; - d3 = false, f3 = false; - const o4 = r4 ? p3 : h3, n4 = r4 ? h3 : p3; - if (e5.done) { - o4 || u3.close(), n4 || c3.close(); - const r5 = e5.value; - return void 0 !== r5 && (o4 || u3.byobRequest.respondWithNewView(r5), n4 || null === (t7 = c3.byobRequest) || void 0 === t7 || t7.respond(0)), o4 && n4 || a3(void 0), null; - } - const l4 = e5.value; - if (n4) - o4 || u3.byobRequest.respondWithNewView(l4); - else { - let e6; - try { - e6 = le(l4); - } catch (e7) { - return u3.error(e7), c3.error(e7), a3(i4.cancel(e7)), null; - } - o4 || u3.byobRequest.respondWithNewView(l4), c3.enqueue(e6); - } - return s3 = false, d3 ? S2() : f3 && v2(), null; - }, () => (s3 = false, null)); - } - function S2() { - if (s3) - return d3 = true, c2(void 0); - s3 = true; - const e5 = o3.byobRequest; - return null === e5 ? g3() : w2(e5.view, false), c2(void 0); - } - function v2() { - if (s3) - return f3 = true, c2(void 0); - s3 = true; - const e5 = n3.byobRequest; - return null === e5 ? g3() : w2(e5.view, true), c2(void 0); - } - function R2(e5) { - if (h3 = true, t5 = e5, p3) { - const e6 = [t5, r3], o4 = i4.cancel(e6); - a3(o4); - } - return m2; - } - function T2(e5) { - if (p3 = true, r3 = e5, h3) { - const e6 = [t5, r3], o4 = i4.cancel(e6); - a3(o4); - } - return m2; - } - const q2 = new ReadableStream2({ type: "bytes", start(e5) { - o3 = e5; - }, pull: S2, cancel: R2 }), C2 = new ReadableStream2({ type: "bytes", start(e5) { - n3 = e5; - }, pull: v2, cancel: T2 }); - return y2(i4), [q2, C2]; - }(e3) : function(e4, t5) { - const r3 = e4.getReader(); - let o3, n3, a3, i4, l3, s3 = false, d3 = false, f3 = false, h3 = false; - const p3 = u2((e5) => { - l3 = e5; - }); - function m2() { - return s3 ? (d3 = true, c2(void 0)) : (s3 = true, b(r3.read(), (e5) => { - if (d3 = false, e5.done) - return f3 || a3.close(), h3 || i4.close(), f3 && h3 || l3(void 0), null; - const t6 = e5.value, r4 = t6, o4 = t6; - return f3 || a3.enqueue(r4), h3 || i4.enqueue(o4), s3 = false, d3 && m2(), null; - }, () => (s3 = false, null)), c2(void 0)); - } - function y2(e5) { - if (f3 = true, o3 = e5, h3) { - const e6 = [o3, n3], t6 = r3.cancel(e6); - l3(t6); - } - return p3; - } - function g3(e5) { - if (h3 = true, n3 = e5, f3) { - const e6 = [o3, n3], t6 = r3.cancel(e6); - l3(t6); - } - return p3; - } - const w2 = new ReadableStream2({ start(e5) { - a3 = e5; - }, pull: m2, cancel: y2 }), S2 = new ReadableStream2({ start(e5) { - i4 = e5; - }, pull: m2, cancel: g3 }); - return _2(r3.closed, (e5) => (a3.error(e5), i4.error(e5), f3 && h3 || l3(void 0), null)), [w2, S2]; - }(e3); -} -function Bt(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_controlledReadableStream") && e3 instanceof ReadableStreamDefaultController); -} -function At(e3) { - const t4 = function(e4) { - const t5 = e4._controlledReadableStream; - if (!Ft(e4)) - return false; - if (!e4._started) - return false; - if (Ut(t5) && X(t5) > 0) - return true; - if (Lt(e4) > 0) - return true; - return false; - }(e3); - if (!t4) - return; - if (e3._pulling) - return void (e3._pullAgain = true); - e3._pulling = true; - b(e3._pullAlgorithm(), () => (e3._pulling = false, e3._pullAgain && (e3._pullAgain = false, At(e3)), null), (t5) => (zt(e3, t5), null)); -} -function jt(e3) { - e3._pullAlgorithm = void 0, e3._cancelAlgorithm = void 0, e3._strategySizeAlgorithm = void 0; -} -function zt(e3, t4) { - const r3 = e3._controlledReadableStream; - "readable" === r3._state && (ce(e3), jt(e3), Jt(r3, t4)); -} -function Lt(e3) { - const t4 = e3._controlledReadableStream._state; - return "errored" === t4 ? null : "closed" === t4 ? 0 : e3._strategyHWM - e3._queueTotalSize; -} -function Ft(e3) { - return !e3._closeRequested && "readable" === e3._controlledReadableStream._state; -} -function It(e3, t4, r3, o3) { - const n3 = Object.create(ReadableStreamDefaultController.prototype); - let a3, i4, l3; - a3 = void 0 !== t4.start ? () => t4.start(n3) : () => { - }, i4 = void 0 !== t4.pull ? () => t4.pull(n3) : () => c2(void 0), l3 = void 0 !== t4.cancel ? (e4) => t4.cancel(e4) : () => c2(void 0), function(e4, t5, r4, o4, n4, a4, i5) { - t5._controlledReadableStream = e4, t5._queue = void 0, t5._queueTotalSize = void 0, ce(t5), t5._started = false, t5._closeRequested = false, t5._pullAgain = false, t5._pulling = false, t5._strategySizeAlgorithm = i5, t5._strategyHWM = a4, t5._pullAlgorithm = o4, t5._cancelAlgorithm = n4, e4._readableStreamController = t5, b(c2(r4()), () => (t5._started = true, At(t5), null), (e5) => (zt(t5, e5), null)); - }(e3, n3, a3, i4, l3, r3, o3); -} -function Dt(e3) { - return new TypeError(`ReadableStreamDefaultController.prototype.${e3} can only be used on a ReadableStreamDefaultController`); -} -function $t(e3, t4, r3) { - return I(e3, r3), (r4) => w(e3, t4, [r4]); -} -function Mt(e3, t4, r3) { - return I(e3, r3), (r4) => w(e3, t4, [r4]); -} -function Yt(e3, t4, r3) { - return I(e3, r3), (r4) => g2(e3, t4, [r4]); -} -function Qt(e3, t4) { - if ("bytes" !== (e3 = `${e3}`)) - throw new TypeError(`${t4} '${e3}' is not a valid enumeration value for ReadableStreamType`); - return e3; -} -function Nt(e3, t4) { - if ("byob" !== (e3 = `${e3}`)) - throw new TypeError(`${t4} '${e3}' is not a valid enumeration value for ReadableStreamReaderMode`); - return e3; -} -function Ht(e3, t4) { - F(e3, t4); - const r3 = null == e3 ? void 0 : e3.preventAbort, o3 = null == e3 ? void 0 : e3.preventCancel, n3 = null == e3 ? void 0 : e3.preventClose, a3 = null == e3 ? void 0 : e3.signal; - return void 0 !== a3 && function(e4, t5) { - if (!function(e5) { - if ("object" != typeof e5 || null === e5) - return false; - try { - return "boolean" == typeof e5.aborted; - } catch (e6) { - return false; - } - }(e4)) - throw new TypeError(`${t5} is not an AbortSignal.`); - }(a3, `${t4} has member 'signal' that`), { preventAbort: Boolean(r3), preventCancel: Boolean(o3), preventClose: Boolean(n3), signal: a3 }; -} -function xt(e3, t4) { - F(e3, t4); - const r3 = null == e3 ? void 0 : e3.readable; - M(r3, "readable", "ReadableWritablePair"), function(e4, t5) { - if (!H(e4)) - throw new TypeError(`${t5} is not a ReadableStream.`); - }(r3, `${t4} has member 'readable' that`); - const o3 = null == e3 ? void 0 : e3.writable; - return M(o3, "writable", "ReadableWritablePair"), function(e4, t5) { - if (!x(e4)) - throw new TypeError(`${t5} is not a WritableStream.`); - }(o3, `${t4} has member 'writable' that`), { readable: r3, writable: o3 }; -} -function Vt(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_readableStreamController") && e3 instanceof ReadableStream2); -} -function Ut(e3) { - return void 0 !== e3._reader; -} -function Gt(e3, r3) { - if (e3._disturbed = true, "closed" === e3._state) - return c2(void 0); - if ("errored" === e3._state) - return d2(e3._storedError); - Xt(e3); - const o3 = e3._reader; - if (void 0 !== o3 && Fe(o3)) { - const e4 = o3._readIntoRequests; - o3._readIntoRequests = new S(), e4.forEach((e5) => { - e5._closeSteps(void 0); - }); - } - return p2(e3._readableStreamController[T](r3), t3); -} -function Xt(e3) { - e3._state = "closed"; - const t4 = e3._reader; - if (void 0 !== t4 && (j2(t4), K(t4))) { - const e4 = t4._readRequests; - t4._readRequests = new S(), e4.forEach((e5) => { - e5._closeSteps(); - }); - } -} -function Jt(e3, t4) { - e3._state = "errored", e3._storedError = t4; - const r3 = e3._reader; - void 0 !== r3 && (A(r3, t4), K(r3) ? Z(r3, t4) : Ie(r3, t4)); -} -function Kt(e3) { - return new TypeError(`ReadableStream.prototype.${e3} can only be used on a ReadableStream`); -} -function Zt(e3, t4) { - F(e3, t4); - const r3 = null == e3 ? void 0 : e3.highWaterMark; - return M(r3, "highWaterMark", "QueuingStrategyInit"), { highWaterMark: Y(r3) }; -} -function tr(e3) { - return new TypeError(`ByteLengthQueuingStrategy.prototype.${e3} can only be used on a ByteLengthQueuingStrategy`); -} -function rr(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_byteLengthQueuingStrategyHighWaterMark") && e3 instanceof ByteLengthQueuingStrategy); -} -function nr(e3) { - return new TypeError(`CountQueuingStrategy.prototype.${e3} can only be used on a CountQueuingStrategy`); -} -function ar(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_countQueuingStrategyHighWaterMark") && e3 instanceof CountQueuingStrategy); -} -function ir(e3, t4, r3) { - return I(e3, r3), (r4) => w(e3, t4, [r4]); -} -function lr(e3, t4, r3) { - return I(e3, r3), (r4) => g2(e3, t4, [r4]); -} -function sr(e3, t4, r3) { - return I(e3, r3), (r4, o3) => w(e3, t4, [r4, o3]); -} -function ur(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_transformStreamController") && e3 instanceof TransformStream); -} -function cr(e3, t4) { - Sr(e3, t4), dr(e3, t4); -} -function dr(e3, t4) { - hr(e3._transformStreamController), function(e4, t5) { - e4._writableController.error(t5); - "writable" === e4._writableState && Tr(e4, t5); - }(e3, t4), e3._backpressure && fr(e3, false); -} -function fr(e3, t4) { - void 0 !== e3._backpressureChangePromise && e3._backpressureChangePromise_resolve(), e3._backpressureChangePromise = u2((t5) => { - e3._backpressureChangePromise_resolve = t5; - }), e3._backpressure = t4; -} -function br(e3) { - return !!r2(e3) && (!!Object.prototype.hasOwnProperty.call(e3, "_controlledTransformStream") && e3 instanceof TransformStreamDefaultController); -} -function hr(e3) { - e3._transformAlgorithm = void 0, e3._flushAlgorithm = void 0; -} -function _r(e3, t4) { - const r3 = e3._controlledTransformStream; - if (!gr(r3)) - throw new TypeError("Readable side is not in a state that permits enqueue"); - try { - !function(e4, t5) { - e4._readablePulling = false; - try { - e4._readableController.enqueue(t5); - } catch (t6) { - throw Sr(e4, t6), t6; - } - }(r3, t4); - } catch (e4) { - throw dr(r3, e4), r3._readableStoredError; - } - const o3 = function(e4) { - return !function(e5) { - if (!gr(e5)) - return false; - if (e5._readablePulling) - return true; - if (vr(e5) > 0) - return true; - return false; - }(e4); - }(r3); - o3 !== r3._backpressure && fr(r3, true); -} -function pr(e3, t4) { - return p2(e3._transformAlgorithm(t4), void 0, (t5) => { - throw cr(e3._controlledTransformStream, t5), t5; - }); -} -function mr(e3) { - return new TypeError(`TransformStreamDefaultController.prototype.${e3} can only be used on a TransformStreamDefaultController`); -} -function yr(e3) { - return new TypeError(`TransformStream.prototype.${e3} can only be used on a TransformStream`); -} -function gr(e3) { - return !e3._readableCloseRequested && "readable" === e3._readableState; -} -function wr(e3) { - e3._readableState = "closed", e3._readableCloseRequested = true, e3._readableController.close(); -} -function Sr(e3, t4) { - "readable" === e3._readableState && (e3._readableState = "errored", e3._readableStoredError = t4), e3._readableController.error(t4); -} -function vr(e3) { - return e3._readableController.desiredSize; -} -function Rr(e3, t4) { - "writable" !== e3._writableState ? qr(e3) : Tr(e3, t4); -} -function Tr(e3, t4) { - e3._writableState = "erroring", e3._writableStoredError = t4, !function(e4) { - return e4._writableHasInFlightOperation; - }(e3) && e3._writableStarted && qr(e3); -} -function qr(e3) { - e3._writableState = "errored"; -} -function Cr(e3) { - "erroring" === e3._writableState && qr(e3); -} -var e2, o2, a2, i3, l2, s2, y, S, v, R, T, q, C, z, L, ReadableStreamDefaultReader, te, re, ae, ReadableStreamBYOBRequest, ReadableByteStreamController, ReadableStreamBYOBReader, Ue, WritableStream, WritableStreamDefaultWriter, lt, WritableStreamDefaultController, Pt, Wt, ReadableStreamDefaultController, ReadableStream2, er, ByteLengthQueuingStrategy, or, CountQueuingStrategy, TransformStream, TransformStreamDefaultController; -var init_ponyfill = __esm({ - "node_modules/web-streams-polyfill/dist/ponyfill.mjs"() { - e2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? Symbol : (e3) => `Symbol(${e3})`; - o2 = t3; - a2 = Promise; - i3 = Promise.prototype.then; - l2 = Promise.resolve.bind(a2); - s2 = Promise.reject.bind(a2); - y = (e3) => { - if ("function" == typeof queueMicrotask) - y = queueMicrotask; - else { - const e4 = c2(void 0); - y = (t4) => f2(e4, t4); - } - return y(e3); - }; - S = class { - constructor() { - this._cursor = 0, this._size = 0, this._front = { _elements: [], _next: void 0 }, this._back = this._front, this._cursor = 0, this._size = 0; - } - get length() { - return this._size; - } - push(e3) { - const t4 = this._back; - let r3 = t4; - 16383 === t4._elements.length && (r3 = { _elements: [], _next: void 0 }), t4._elements.push(e3), r3 !== t4 && (this._back = r3, t4._next = r3), ++this._size; - } - shift() { - const e3 = this._front; - let t4 = e3; - const r3 = this._cursor; - let o3 = r3 + 1; - const n3 = e3._elements, a3 = n3[r3]; - return 16384 === o3 && (t4 = e3._next, o3 = 0), --this._size, this._cursor = o3, e3 !== t4 && (this._front = t4), n3[r3] = void 0, a3; - } - forEach(e3) { - let t4 = this._cursor, r3 = this._front, o3 = r3._elements; - for (; !(t4 === o3.length && void 0 === r3._next || t4 === o3.length && (r3 = r3._next, o3 = r3._elements, t4 = 0, 0 === o3.length)); ) - e3(o3[t4]), ++t4; - } - peek() { - const e3 = this._front, t4 = this._cursor; - return e3._elements[t4]; - } - }; - v = e2("[[AbortSteps]]"); - R = e2("[[ErrorSteps]]"); - T = e2("[[CancelSteps]]"); - q = e2("[[PullSteps]]"); - C = e2("[[ReleaseSteps]]"); - z = Number.isFinite || function(e3) { - return "number" == typeof e3 && isFinite(e3); - }; - L = Math.trunc || function(e3) { - return e3 < 0 ? Math.ceil(e3) : Math.floor(e3); - }; - ReadableStreamDefaultReader = class { - constructor(e3) { - if ($(e3, 1, "ReadableStreamDefaultReader"), V(e3, "First parameter"), Ut(e3)) - throw new TypeError("This stream has already been locked for exclusive reading by another reader"); - E(this, e3), this._readRequests = new S(); - } - get closed() { - return K(this) ? this._closedPromise : d2(ee("closed")); - } - cancel(e3) { - return K(this) ? void 0 === this._ownerReadableStream ? d2(k2("cancel")) : P(this, e3) : d2(ee("cancel")); - } - read() { - if (!K(this)) - return d2(ee("read")); - if (void 0 === this._ownerReadableStream) - return d2(k2("read from")); - let e3, t4; - const r3 = u2((r4, o3) => { - e3 = r4, t4 = o3; - }); - return function(e4, t5) { - const r4 = e4._ownerReadableStream; - r4._disturbed = true, "closed" === r4._state ? t5._closeSteps() : "errored" === r4._state ? t5._errorSteps(r4._storedError) : r4._readableStreamController[q](t5); - }(this, { _chunkSteps: (t5) => e3({ value: t5, done: false }), _closeSteps: () => e3({ value: void 0, done: true }), _errorSteps: (e4) => t4(e4) }), r3; - } - releaseLock() { - if (!K(this)) - throw ee("releaseLock"); - void 0 !== this._ownerReadableStream && function(e3) { - W(e3); - const t4 = new TypeError("Reader was released"); - Z(e3, t4); - }(this); - } - }; - Object.defineProperties(ReadableStreamDefaultReader.prototype, { cancel: { enumerable: true }, read: { enumerable: true }, releaseLock: { enumerable: true }, closed: { enumerable: true } }), n2(ReadableStreamDefaultReader.prototype.cancel, "cancel"), n2(ReadableStreamDefaultReader.prototype.read, "read"), n2(ReadableStreamDefaultReader.prototype.releaseLock, "releaseLock"), "symbol" == typeof e2.toStringTag && Object.defineProperty(ReadableStreamDefaultReader.prototype, e2.toStringTag, { value: "ReadableStreamDefaultReader", configurable: true }); - te = class { - constructor(e3, t4) { - this._ongoingPromise = void 0, this._isFinished = false, this._reader = e3, this._preventCancel = t4; - } - next() { - const e3 = () => this._nextSteps(); - return this._ongoingPromise = this._ongoingPromise ? p2(this._ongoingPromise, e3, e3) : e3(), this._ongoingPromise; - } - return(e3) { - const t4 = () => this._returnSteps(e3); - return this._ongoingPromise ? p2(this._ongoingPromise, t4, t4) : t4(); - } - _nextSteps() { - if (this._isFinished) - return Promise.resolve({ value: void 0, done: true }); - const e3 = this._reader; - return void 0 === e3 ? d2(k2("iterate")) : f2(e3.read(), (e4) => { - var t4; - return this._ongoingPromise = void 0, e4.done && (this._isFinished = true, null === (t4 = this._reader) || void 0 === t4 || t4.releaseLock(), this._reader = void 0), e4; - }, (e4) => { - var t4; - throw this._ongoingPromise = void 0, this._isFinished = true, null === (t4 = this._reader) || void 0 === t4 || t4.releaseLock(), this._reader = void 0, e4; - }); - } - _returnSteps(e3) { - if (this._isFinished) - return Promise.resolve({ value: e3, done: true }); - this._isFinished = true; - const t4 = this._reader; - if (void 0 === t4) - return d2(k2("finish iterating")); - if (this._reader = void 0, !this._preventCancel) { - const r3 = t4.cancel(e3); - return t4.releaseLock(), p2(r3, () => ({ value: e3, done: true })); - } - return t4.releaseLock(), c2({ value: e3, done: true }); - } - }; - re = { next() { - return oe(this) ? this._asyncIteratorImpl.next() : d2(ne("next")); - }, return(e3) { - return oe(this) ? this._asyncIteratorImpl.return(e3) : d2(ne("return")); - } }; - "symbol" == typeof e2.asyncIterator && Object.defineProperty(re, e2.asyncIterator, { value() { - return this; - }, writable: true, configurable: true }); - ae = Number.isNaN || function(e3) { - return e3 != e3; - }; - ReadableStreamBYOBRequest = class { - constructor() { - throw new TypeError("Illegal constructor"); - } - get view() { - if (!fe(this)) - throw Be("view"); - return this._view; - } - respond(e3) { - if (!fe(this)) - throw Be("respond"); - if ($(e3, 1, "respond"), e3 = N(e3, "First parameter"), void 0 === this._associatedReadableByteStreamController) - throw new TypeError("This BYOB request has been invalidated"); - this._view.buffer, function(e4, t4) { - const r3 = e4._pendingPullIntos.peek(); - if ("closed" === e4._controlledReadableByteStream._state) { - if (0 !== t4) - throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream"); - } else { - if (0 === t4) - throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream"); - if (r3.bytesFilled + t4 > r3.byteLength) - throw new RangeError("bytesWritten out of range"); - } - r3.buffer = r3.buffer, qe(e4, t4); - }(this._associatedReadableByteStreamController, e3); - } - respondWithNewView(e3) { - if (!fe(this)) - throw Be("respondWithNewView"); - if ($(e3, 1, "respondWithNewView"), !ArrayBuffer.isView(e3)) - throw new TypeError("You can only respond with array buffer views"); - if (void 0 === this._associatedReadableByteStreamController) - throw new TypeError("This BYOB request has been invalidated"); - e3.buffer, function(e4, t4) { - const r3 = e4._pendingPullIntos.peek(); - if ("closed" === e4._controlledReadableByteStream._state) { - if (0 !== t4.byteLength) - throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream"); - } else if (0 === t4.byteLength) - throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream"); - if (r3.byteOffset + r3.bytesFilled !== t4.byteOffset) - throw new RangeError("The region specified by view does not match byobRequest"); - if (r3.bufferByteLength !== t4.buffer.byteLength) - throw new RangeError("The buffer of view has different capacity than byobRequest"); - if (r3.bytesFilled + t4.byteLength > r3.byteLength) - throw new RangeError("The region specified by view is larger than byobRequest"); - const o3 = t4.byteLength; - r3.buffer = t4.buffer, qe(e4, o3); - }(this._associatedReadableByteStreamController, e3); - } - }; - Object.defineProperties(ReadableStreamBYOBRequest.prototype, { respond: { enumerable: true }, respondWithNewView: { enumerable: true }, view: { enumerable: true } }), n2(ReadableStreamBYOBRequest.prototype.respond, "respond"), n2(ReadableStreamBYOBRequest.prototype.respondWithNewView, "respondWithNewView"), "symbol" == typeof e2.toStringTag && Object.defineProperty(ReadableStreamBYOBRequest.prototype, e2.toStringTag, { value: "ReadableStreamBYOBRequest", configurable: true }); - ReadableByteStreamController = class { - constructor() { - throw new TypeError("Illegal constructor"); - } - get byobRequest() { - if (!de(this)) - throw Ae("byobRequest"); - return function(e3) { - if (null === e3._byobRequest && e3._pendingPullIntos.length > 0) { - const t4 = e3._pendingPullIntos.peek(), r3 = new Uint8Array(t4.buffer, t4.byteOffset + t4.bytesFilled, t4.byteLength - t4.bytesFilled), o3 = Object.create(ReadableStreamBYOBRequest.prototype); - !function(e4, t5, r4) { - e4._associatedReadableByteStreamController = t5, e4._view = r4; - }(o3, e3, r3), e3._byobRequest = o3; - } - return e3._byobRequest; - }(this); - } - get desiredSize() { - if (!de(this)) - throw Ae("desiredSize"); - return ke(this); - } - close() { - if (!de(this)) - throw Ae("close"); - if (this._closeRequested) - throw new TypeError("The stream has already been closed; do not close it again!"); - const e3 = this._controlledReadableByteStream._state; - if ("readable" !== e3) - throw new TypeError(`The stream (in ${e3} state) is not in the readable state and cannot be closed`); - !function(e4) { - const t4 = e4._controlledReadableByteStream; - if (e4._closeRequested || "readable" !== t4._state) - return; - if (e4._queueTotalSize > 0) - return void (e4._closeRequested = true); - if (e4._pendingPullIntos.length > 0) { - if (e4._pendingPullIntos.peek().bytesFilled > 0) { - const t5 = new TypeError("Insufficient bytes to fill elements in the given buffer"); - throw Pe(e4, t5), t5; - } - } - Ee(e4), Xt(t4); - }(this); - } - enqueue(e3) { - if (!de(this)) - throw Ae("enqueue"); - if ($(e3, 1, "enqueue"), !ArrayBuffer.isView(e3)) - throw new TypeError("chunk must be an array buffer view"); - if (0 === e3.byteLength) - throw new TypeError("chunk must have non-zero byteLength"); - if (0 === e3.buffer.byteLength) - throw new TypeError("chunk's buffer must have non-zero byteLength"); - if (this._closeRequested) - throw new TypeError("stream is closed or draining"); - const t4 = this._controlledReadableByteStream._state; - if ("readable" !== t4) - throw new TypeError(`The stream (in ${t4} state) is not in the readable state and cannot be enqueued to`); - !function(e4, t5) { - const r3 = e4._controlledReadableByteStream; - if (e4._closeRequested || "readable" !== r3._state) - return; - const o3 = t5.buffer, n3 = t5.byteOffset, a3 = t5.byteLength, i4 = o3; - if (e4._pendingPullIntos.length > 0) { - const t6 = e4._pendingPullIntos.peek(); - t6.buffer, 0, Re(e4), t6.buffer = t6.buffer, "none" === t6.readerType && ge(e4, t6); - } - if (J(r3)) - if (function(e5) { - const t6 = e5._controlledReadableByteStream._reader; - for (; t6._readRequests.length > 0; ) { - if (0 === e5._queueTotalSize) - return; - We(e5, t6._readRequests.shift()); - } - }(e4), 0 === X(r3)) - me(e4, i4, n3, a3); - else { - e4._pendingPullIntos.length > 0 && Ce(e4); - G(r3, new Uint8Array(i4, n3, a3), false); - } - else - Le(r3) ? (me(e4, i4, n3, a3), Te(e4)) : me(e4, i4, n3, a3); - be(e4); - }(this, e3); - } - error(e3) { - if (!de(this)) - throw Ae("error"); - Pe(this, e3); - } - [T](e3) { - he(this), ce(this); - const t4 = this._cancelAlgorithm(e3); - return Ee(this), t4; - } - [q](e3) { - const t4 = this._controlledReadableByteStream; - if (this._queueTotalSize > 0) - return void We(this, e3); - const r3 = this._autoAllocateChunkSize; - if (void 0 !== r3) { - let t5; - try { - t5 = new ArrayBuffer(r3); - } catch (t6) { - return void e3._errorSteps(t6); - } - const o3 = { buffer: t5, bufferByteLength: r3, byteOffset: 0, byteLength: r3, bytesFilled: 0, elementSize: 1, viewConstructor: Uint8Array, readerType: "default" }; - this._pendingPullIntos.push(o3); - } - U(t4, e3), be(this); - } - [C]() { - if (this._pendingPullIntos.length > 0) { - const e3 = this._pendingPullIntos.peek(); - e3.readerType = "none", this._pendingPullIntos = new S(), this._pendingPullIntos.push(e3); - } - } - }; - Object.defineProperties(ReadableByteStreamController.prototype, { close: { enumerable: true }, enqueue: { enumerable: true }, error: { enumerable: true }, byobRequest: { enumerable: true }, desiredSize: { enumerable: true } }), n2(ReadableByteStreamController.prototype.close, "close"), n2(ReadableByteStreamController.prototype.enqueue, "enqueue"), n2(ReadableByteStreamController.prototype.error, "error"), "symbol" == typeof e2.toStringTag && Object.defineProperty(ReadableByteStreamController.prototype, e2.toStringTag, { value: "ReadableByteStreamController", configurable: true }); - ReadableStreamBYOBReader = class { - constructor(e3) { - if ($(e3, 1, "ReadableStreamBYOBReader"), V(e3, "First parameter"), Ut(e3)) - throw new TypeError("This stream has already been locked for exclusive reading by another reader"); - if (!de(e3._readableStreamController)) - throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source"); - E(this, e3), this._readIntoRequests = new S(); - } - get closed() { - return Fe(this) ? this._closedPromise : d2(De("closed")); - } - cancel(e3) { - return Fe(this) ? void 0 === this._ownerReadableStream ? d2(k2("cancel")) : P(this, e3) : d2(De("cancel")); - } - read(e3) { - if (!Fe(this)) - return d2(De("read")); - if (!ArrayBuffer.isView(e3)) - return d2(new TypeError("view must be an array buffer view")); - if (0 === e3.byteLength) - return d2(new TypeError("view must have non-zero byteLength")); - if (0 === e3.buffer.byteLength) - return d2(new TypeError("view's buffer must have non-zero byteLength")); - if (e3.buffer, void 0 === this._ownerReadableStream) - return d2(k2("read from")); - let t4, r3; - const o3 = u2((e4, o4) => { - t4 = e4, r3 = o4; - }); - return function(e4, t5, r4) { - const o4 = e4._ownerReadableStream; - o4._disturbed = true, "errored" === o4._state ? r4._errorSteps(o4._storedError) : function(e5, t6, r5) { - const o5 = e5._controlledReadableByteStream; - let n3 = 1; - t6.constructor !== DataView && (n3 = t6.constructor.BYTES_PER_ELEMENT); - const a3 = t6.constructor, i4 = t6.buffer, l3 = { buffer: i4, bufferByteLength: i4.byteLength, byteOffset: t6.byteOffset, byteLength: t6.byteLength, bytesFilled: 0, elementSize: n3, viewConstructor: a3, readerType: "byob" }; - if (e5._pendingPullIntos.length > 0) - return e5._pendingPullIntos.push(l3), void je(o5, r5); - if ("closed" !== o5._state) { - if (e5._queueTotalSize > 0) { - if (we(e5, l3)) { - const t7 = pe(l3); - return ve(e5), void r5._chunkSteps(t7); - } - if (e5._closeRequested) { - const t7 = new TypeError("Insufficient bytes to fill elements in the given buffer"); - return Pe(e5, t7), void r5._errorSteps(t7); - } - } - e5._pendingPullIntos.push(l3), je(o5, r5), be(e5); - } else { - const e6 = new a3(l3.buffer, l3.byteOffset, 0); - r5._closeSteps(e6); - } - }(o4._readableStreamController, t5, r4); - }(this, e3, { _chunkSteps: (e4) => t4({ value: e4, done: false }), _closeSteps: (e4) => t4({ value: e4, done: true }), _errorSteps: (e4) => r3(e4) }), o3; - } - releaseLock() { - if (!Fe(this)) - throw De("releaseLock"); - void 0 !== this._ownerReadableStream && function(e3) { - W(e3); - const t4 = new TypeError("Reader was released"); - Ie(e3, t4); - }(this); - } - }; - Object.defineProperties(ReadableStreamBYOBReader.prototype, { cancel: { enumerable: true }, read: { enumerable: true }, releaseLock: { enumerable: true }, closed: { enumerable: true } }), n2(ReadableStreamBYOBReader.prototype.cancel, "cancel"), n2(ReadableStreamBYOBReader.prototype.read, "read"), n2(ReadableStreamBYOBReader.prototype.releaseLock, "releaseLock"), "symbol" == typeof e2.toStringTag && Object.defineProperty(ReadableStreamBYOBReader.prototype, e2.toStringTag, { value: "ReadableStreamBYOBReader", configurable: true }); - Ue = "function" == typeof AbortController; - WritableStream = class { - constructor(e3 = {}, t4 = {}) { - void 0 === e3 ? e3 = null : D(e3, "First parameter"); - const r3 = Ye(t4, "Second parameter"), o3 = function(e4, t5) { - F(e4, t5); - const r4 = null == e4 ? void 0 : e4.abort, o4 = null == e4 ? void 0 : e4.close, n4 = null == e4 ? void 0 : e4.start, a4 = null == e4 ? void 0 : e4.type, i4 = null == e4 ? void 0 : e4.write; - return { abort: void 0 === r4 ? void 0 : Ne(r4, e4, `${t5} has member 'abort' that`), close: void 0 === o4 ? void 0 : He(o4, e4, `${t5} has member 'close' that`), start: void 0 === n4 ? void 0 : xe(n4, e4, `${t5} has member 'start' that`), write: void 0 === i4 ? void 0 : Ve(i4, e4, `${t5} has member 'write' that`), type: a4 }; - }(e3, "First parameter"); - var n3; - (n3 = this)._state = "writable", n3._storedError = void 0, n3._writer = void 0, n3._writableStreamController = void 0, n3._writeRequests = new S(), n3._inFlightWriteRequest = void 0, n3._closeRequest = void 0, n3._inFlightCloseRequest = void 0, n3._pendingAbortRequest = void 0, n3._backpressure = false; - if (void 0 !== o3.type) - throw new RangeError("Invalid type is specified"); - const a3 = Me(r3); - !function(e4, t5, r4, o4) { - const n4 = Object.create(WritableStreamDefaultController.prototype); - let a4, i4, l3, s3; - a4 = void 0 !== t5.start ? () => t5.start(n4) : () => { - }; - i4 = void 0 !== t5.write ? (e5) => t5.write(e5, n4) : () => c2(void 0); - l3 = void 0 !== t5.close ? () => t5.close() : () => c2(void 0); - s3 = void 0 !== t5.abort ? (e5) => t5.abort(e5) : () => c2(void 0); - !function(e5, t6, r5, o5, n5, a5, i5, l4) { - t6._controlledWritableStream = e5, e5._writableStreamController = t6, t6._queue = void 0, t6._queueTotalSize = void 0, ce(t6), t6._abortReason = void 0, t6._abortController = function() { - if (Ue) - return new AbortController(); - }(), t6._started = false, t6._strategySizeAlgorithm = l4, t6._strategyHWM = i5, t6._writeAlgorithm = o5, t6._closeAlgorithm = n5, t6._abortAlgorithm = a5; - const s4 = bt(t6); - nt(e5, s4); - const u3 = r5(); - b(c2(u3), () => (t6._started = true, dt(t6), null), (r6) => (t6._started = true, Ze(e5, r6), null)); - }(e4, n4, a4, i4, l3, s3, r4, o4); - }(this, o3, $e(r3, 1), a3); - } - get locked() { - if (!Ge(this)) - throw _t("locked"); - return Xe(this); - } - abort(e3) { - return Ge(this) ? Xe(this) ? d2(new TypeError("Cannot abort a stream that already has a writer")) : Je(this, e3) : d2(_t("abort")); - } - close() { - return Ge(this) ? Xe(this) ? d2(new TypeError("Cannot close a stream that already has a writer")) : rt(this) ? d2(new TypeError("Cannot close an already-closing stream")) : Ke(this) : d2(_t("close")); - } - getWriter() { - if (!Ge(this)) - throw _t("getWriter"); - return new WritableStreamDefaultWriter(this); - } - }; - Object.defineProperties(WritableStream.prototype, { abort: { enumerable: true }, close: { enumerable: true }, getWriter: { enumerable: true }, locked: { enumerable: true } }), n2(WritableStream.prototype.abort, "abort"), n2(WritableStream.prototype.close, "close"), n2(WritableStream.prototype.getWriter, "getWriter"), "symbol" == typeof e2.toStringTag && Object.defineProperty(WritableStream.prototype, e2.toStringTag, { value: "WritableStream", configurable: true }); - WritableStreamDefaultWriter = class { - constructor(e3) { - if ($(e3, 1, "WritableStreamDefaultWriter"), function(e4, t5) { - if (!Ge(e4)) - throw new TypeError(`${t5} is not a WritableStream.`); - }(e3, "First parameter"), Xe(e3)) - throw new TypeError("This stream has already been locked for exclusive writing by another writer"); - this._ownerWritableStream = e3, e3._writer = this; - const t4 = e3._state; - if ("writable" === t4) - !rt(e3) && e3._backpressure ? Rt(this) : qt(this), gt(this); - else if ("erroring" === t4) - Tt(this, e3._storedError), gt(this); - else if ("closed" === t4) - qt(this), gt(r3 = this), vt(r3); - else { - const t5 = e3._storedError; - Tt(this, t5), wt(this, t5); - } - var r3; - } - get closed() { - return at(this) ? this._closedPromise : d2(mt("closed")); - } - get desiredSize() { - if (!at(this)) - throw mt("desiredSize"); - if (void 0 === this._ownerWritableStream) - throw yt("desiredSize"); - return function(e3) { - const t4 = e3._ownerWritableStream, r3 = t4._state; - if ("errored" === r3 || "erroring" === r3) - return null; - if ("closed" === r3) - return 0; - return ct(t4._writableStreamController); - }(this); - } - get ready() { - return at(this) ? this._readyPromise : d2(mt("ready")); - } - abort(e3) { - return at(this) ? void 0 === this._ownerWritableStream ? d2(yt("abort")) : function(e4, t4) { - return Je(e4._ownerWritableStream, t4); - }(this, e3) : d2(mt("abort")); - } - close() { - if (!at(this)) - return d2(mt("close")); - const e3 = this._ownerWritableStream; - return void 0 === e3 ? d2(yt("close")) : rt(e3) ? d2(new TypeError("Cannot close an already-closing stream")) : Ke(this._ownerWritableStream); - } - releaseLock() { - if (!at(this)) - throw mt("releaseLock"); - void 0 !== this._ownerWritableStream && function(e3) { - const t4 = e3._ownerWritableStream, r3 = new TypeError("Writer was released and can no longer be used to monitor the stream's closedness"); - it(e3, r3), function(e4, t5) { - "pending" === e4._closedPromiseState ? St(e4, t5) : function(e5, t6) { - wt(e5, t6); - }(e4, t5); - }(e3, r3), t4._writer = void 0, e3._ownerWritableStream = void 0; - }(this); - } - write(e3) { - return at(this) ? void 0 === this._ownerWritableStream ? d2(yt("write to")) : function(e4, t4) { - const r3 = e4._ownerWritableStream, o3 = r3._writableStreamController, n3 = function(e5, t5) { - try { - return e5._strategySizeAlgorithm(t5); - } catch (t6) { - return ft(e5, t6), 1; - } - }(o3, t4); - if (r3 !== e4._ownerWritableStream) - return d2(yt("write to")); - const a3 = r3._state; - if ("errored" === a3) - return d2(r3._storedError); - if (rt(r3) || "closed" === a3) - return d2(new TypeError("The stream is closing or closed and cannot be written to")); - if ("erroring" === a3) - return d2(r3._storedError); - const i4 = function(e5) { - return u2((t5, r4) => { - const o4 = { _resolve: t5, _reject: r4 }; - e5._writeRequests.push(o4); - }); - }(r3); - return function(e5, t5, r4) { - try { - ue(e5, t5, r4); - } catch (t6) { - return void ft(e5, t6); - } - const o4 = e5._controlledWritableStream; - if (!rt(o4) && "writable" === o4._state) { - nt(o4, bt(e5)); - } - dt(e5); - }(o3, t4, n3), i4; - }(this, e3) : d2(mt("write")); - } - }; - Object.defineProperties(WritableStreamDefaultWriter.prototype, { abort: { enumerable: true }, close: { enumerable: true }, releaseLock: { enumerable: true }, write: { enumerable: true }, closed: { enumerable: true }, desiredSize: { enumerable: true }, ready: { enumerable: true } }), n2(WritableStreamDefaultWriter.prototype.abort, "abort"), n2(WritableStreamDefaultWriter.prototype.close, "close"), n2(WritableStreamDefaultWriter.prototype.releaseLock, "releaseLock"), n2(WritableStreamDefaultWriter.prototype.write, "write"), "symbol" == typeof e2.toStringTag && Object.defineProperty(WritableStreamDefaultWriter.prototype, e2.toStringTag, { value: "WritableStreamDefaultWriter", configurable: true }); - lt = {}; - WritableStreamDefaultController = class { - constructor() { - throw new TypeError("Illegal constructor"); - } - get abortReason() { - if (!st(this)) - throw pt("abortReason"); - return this._abortReason; - } - get signal() { - if (!st(this)) - throw pt("signal"); - if (void 0 === this._abortController) - throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported"); - return this._abortController.signal; - } - error(e3) { - if (!st(this)) - throw pt("error"); - "writable" === this._controlledWritableStream._state && ht(this, e3); - } - [v](e3) { - const t4 = this._abortAlgorithm(e3); - return ut(this), t4; - } - [R]() { - ce(this); - } - }; - Object.defineProperties(WritableStreamDefaultController.prototype, { abortReason: { enumerable: true }, signal: { enumerable: true }, error: { enumerable: true } }), "symbol" == typeof e2.toStringTag && Object.defineProperty(WritableStreamDefaultController.prototype, e2.toStringTag, { value: "WritableStreamDefaultController", configurable: true }); - Pt = "undefined" != typeof DOMException ? DOMException : void 0; - Wt = function(e3) { - if ("function" != typeof e3 && "object" != typeof e3) - return false; - try { - return new e3(), true; - } catch (e4) { - return false; - } - }(Pt) ? Pt : function() { - const e3 = function(e4, t4) { - this.message = e4 || "", this.name = t4 || "Error", Error.captureStackTrace && Error.captureStackTrace(this, this.constructor); - }; - return e3.prototype = Object.create(Error.prototype), Object.defineProperty(e3.prototype, "constructor", { value: e3, writable: true, configurable: true }), e3; - }(); - ReadableStreamDefaultController = class { - constructor() { - throw new TypeError("Illegal constructor"); - } - get desiredSize() { - if (!Bt(this)) - throw Dt("desiredSize"); - return Lt(this); - } - close() { - if (!Bt(this)) - throw Dt("close"); - if (!Ft(this)) - throw new TypeError("The stream is not in a state that permits close"); - !function(e3) { - if (!Ft(e3)) - return; - const t4 = e3._controlledReadableStream; - e3._closeRequested = true, 0 === e3._queue.length && (jt(e3), Xt(t4)); - }(this); - } - enqueue(e3) { - if (!Bt(this)) - throw Dt("enqueue"); - if (!Ft(this)) - throw new TypeError("The stream is not in a state that permits enqueue"); - return function(e4, t4) { - if (!Ft(e4)) - return; - const r3 = e4._controlledReadableStream; - if (Ut(r3) && X(r3) > 0) - G(r3, t4, false); - else { - let r4; - try { - r4 = e4._strategySizeAlgorithm(t4); - } catch (t5) { - throw zt(e4, t5), t5; - } - try { - ue(e4, t4, r4); - } catch (t5) { - throw zt(e4, t5), t5; - } - } - At(e4); - }(this, e3); - } - error(e3) { - if (!Bt(this)) - throw Dt("error"); - zt(this, e3); - } - [T](e3) { - ce(this); - const t4 = this._cancelAlgorithm(e3); - return jt(this), t4; - } - [q](e3) { - const t4 = this._controlledReadableStream; - if (this._queue.length > 0) { - const r3 = se(this); - this._closeRequested && 0 === this._queue.length ? (jt(this), Xt(t4)) : At(this), e3._chunkSteps(r3); - } else - U(t4, e3), At(this); - } - [C]() { - } - }; - Object.defineProperties(ReadableStreamDefaultController.prototype, { close: { enumerable: true }, enqueue: { enumerable: true }, error: { enumerable: true }, desiredSize: { enumerable: true } }), n2(ReadableStreamDefaultController.prototype.close, "close"), n2(ReadableStreamDefaultController.prototype.enqueue, "enqueue"), n2(ReadableStreamDefaultController.prototype.error, "error"), "symbol" == typeof e2.toStringTag && Object.defineProperty(ReadableStreamDefaultController.prototype, e2.toStringTag, { value: "ReadableStreamDefaultController", configurable: true }); - ReadableStream2 = class { - constructor(e3 = {}, t4 = {}) { - void 0 === e3 ? e3 = null : D(e3, "First parameter"); - const r3 = Ye(t4, "Second parameter"), o3 = function(e4, t5) { - F(e4, t5); - const r4 = e4, o4 = null == r4 ? void 0 : r4.autoAllocateChunkSize, n4 = null == r4 ? void 0 : r4.cancel, a3 = null == r4 ? void 0 : r4.pull, i4 = null == r4 ? void 0 : r4.start, l3 = null == r4 ? void 0 : r4.type; - return { autoAllocateChunkSize: void 0 === o4 ? void 0 : N(o4, `${t5} has member 'autoAllocateChunkSize' that`), cancel: void 0 === n4 ? void 0 : $t(n4, r4, `${t5} has member 'cancel' that`), pull: void 0 === a3 ? void 0 : Mt(a3, r4, `${t5} has member 'pull' that`), start: void 0 === i4 ? void 0 : Yt(i4, r4, `${t5} has member 'start' that`), type: void 0 === l3 ? void 0 : Qt(l3, `${t5} has member 'type' that`) }; - }(e3, "First parameter"); - var n3; - if ((n3 = this)._state = "readable", n3._reader = void 0, n3._storedError = void 0, n3._disturbed = false, "bytes" === o3.type) { - if (void 0 !== r3.size) - throw new RangeError("The strategy for a byte stream cannot have a size function"); - Oe(this, o3, $e(r3, 0)); - } else { - const e4 = Me(r3); - It(this, o3, $e(r3, 1), e4); - } - } - get locked() { - if (!Vt(this)) - throw Kt("locked"); - return Ut(this); - } - cancel(e3) { - return Vt(this) ? Ut(this) ? d2(new TypeError("Cannot cancel a stream that already has a reader")) : Gt(this, e3) : d2(Kt("cancel")); - } - getReader(e3) { - if (!Vt(this)) - throw Kt("getReader"); - return void 0 === function(e4, t4) { - F(e4, t4); - const r3 = null == e4 ? void 0 : e4.mode; - return { mode: void 0 === r3 ? void 0 : Nt(r3, `${t4} has member 'mode' that`) }; - }(e3, "First parameter").mode ? new ReadableStreamDefaultReader(this) : function(e4) { - return new ReadableStreamBYOBReader(e4); - }(this); - } - pipeThrough(e3, t4 = {}) { - if (!H(this)) - throw Kt("pipeThrough"); - $(e3, 1, "pipeThrough"); - const r3 = xt(e3, "First parameter"), o3 = Ht(t4, "Second parameter"); - if (this.locked) - throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream"); - if (r3.writable.locked) - throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream"); - return m(kt(this, r3.writable, o3.preventClose, o3.preventAbort, o3.preventCancel, o3.signal)), r3.readable; - } - pipeTo(e3, t4 = {}) { - if (!H(this)) - return d2(Kt("pipeTo")); - if (void 0 === e3) - return d2("Parameter 1 is required in 'pipeTo'."); - if (!x(e3)) - return d2(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream")); - let r3; - try { - r3 = Ht(t4, "Second parameter"); - } catch (e4) { - return d2(e4); - } - return this.locked ? d2(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")) : e3.locked ? d2(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")) : kt(this, e3, r3.preventClose, r3.preventAbort, r3.preventCancel, r3.signal); - } - tee() { - if (!H(this)) - throw Kt("tee"); - if (this.locked) - throw new TypeError("Cannot tee a stream that already has a reader"); - return Ot(this); - } - values(e3) { - if (!H(this)) - throw Kt("values"); - return function(e4, t4) { - const r3 = e4.getReader(), o3 = new te(r3, t4), n3 = Object.create(re); - return n3._asyncIteratorImpl = o3, n3; - }(this, function(e4, t4) { - F(e4, t4); - const r3 = null == e4 ? void 0 : e4.preventCancel; - return { preventCancel: Boolean(r3) }; - }(e3, "First parameter").preventCancel); - } - }; - Object.defineProperties(ReadableStream2.prototype, { cancel: { enumerable: true }, getReader: { enumerable: true }, pipeThrough: { enumerable: true }, pipeTo: { enumerable: true }, tee: { enumerable: true }, values: { enumerable: true }, locked: { enumerable: true } }), n2(ReadableStream2.prototype.cancel, "cancel"), n2(ReadableStream2.prototype.getReader, "getReader"), n2(ReadableStream2.prototype.pipeThrough, "pipeThrough"), n2(ReadableStream2.prototype.pipeTo, "pipeTo"), n2(ReadableStream2.prototype.tee, "tee"), n2(ReadableStream2.prototype.values, "values"), "symbol" == typeof e2.toStringTag && Object.defineProperty(ReadableStream2.prototype, e2.toStringTag, { value: "ReadableStream", configurable: true }), "symbol" == typeof e2.asyncIterator && Object.defineProperty(ReadableStream2.prototype, e2.asyncIterator, { value: ReadableStream2.prototype.values, writable: true, configurable: true }); - er = (e3) => e3.byteLength; - n2(er, "size"); - ByteLengthQueuingStrategy = class { - constructor(e3) { - $(e3, 1, "ByteLengthQueuingStrategy"), e3 = Zt(e3, "First parameter"), this._byteLengthQueuingStrategyHighWaterMark = e3.highWaterMark; - } - get highWaterMark() { - if (!rr(this)) - throw tr("highWaterMark"); - return this._byteLengthQueuingStrategyHighWaterMark; - } - get size() { - if (!rr(this)) - throw tr("size"); - return er; - } - }; - Object.defineProperties(ByteLengthQueuingStrategy.prototype, { highWaterMark: { enumerable: true }, size: { enumerable: true } }), "symbol" == typeof e2.toStringTag && Object.defineProperty(ByteLengthQueuingStrategy.prototype, e2.toStringTag, { value: "ByteLengthQueuingStrategy", configurable: true }); - or = () => 1; - n2(or, "size"); - CountQueuingStrategy = class { - constructor(e3) { - $(e3, 1, "CountQueuingStrategy"), e3 = Zt(e3, "First parameter"), this._countQueuingStrategyHighWaterMark = e3.highWaterMark; - } - get highWaterMark() { - if (!ar(this)) - throw nr("highWaterMark"); - return this._countQueuingStrategyHighWaterMark; - } - get size() { - if (!ar(this)) - throw nr("size"); - return or; - } - }; - Object.defineProperties(CountQueuingStrategy.prototype, { highWaterMark: { enumerable: true }, size: { enumerable: true } }), "symbol" == typeof e2.toStringTag && Object.defineProperty(CountQueuingStrategy.prototype, e2.toStringTag, { value: "CountQueuingStrategy", configurable: true }); - TransformStream = class { - constructor(e3 = {}, t4 = {}, r3 = {}) { - void 0 === e3 && (e3 = null); - const o3 = Ye(t4, "Second parameter"), n3 = Ye(r3, "Third parameter"), a3 = function(e4, t5) { - F(e4, t5); - const r4 = null == e4 ? void 0 : e4.flush, o4 = null == e4 ? void 0 : e4.readableType, n4 = null == e4 ? void 0 : e4.start, a4 = null == e4 ? void 0 : e4.transform, i5 = null == e4 ? void 0 : e4.writableType; - return { flush: void 0 === r4 ? void 0 : ir(r4, e4, `${t5} has member 'flush' that`), readableType: o4, start: void 0 === n4 ? void 0 : lr(n4, e4, `${t5} has member 'start' that`), transform: void 0 === a4 ? void 0 : sr(a4, e4, `${t5} has member 'transform' that`), writableType: i5 }; - }(e3, "First parameter"); - if (void 0 !== a3.readableType) - throw new RangeError("Invalid readableType specified"); - if (void 0 !== a3.writableType) - throw new RangeError("Invalid writableType specified"); - const i4 = $e(n3, 0), l3 = Me(n3), s3 = $e(o3, 1), f3 = Me(o3); - let b2; - !function(e4, t5, r4, o4, n4, a4) { - function i5() { - return t5; - } - function l4(t6) { - return function(e5, t7) { - const r5 = e5._transformStreamController; - if (e5._backpressure) { - return p2(e5._backpressureChangePromise, () => { - if ("erroring" === (Ge(e5._writable) ? e5._writable._state : e5._writableState)) - throw Ge(e5._writable) ? e5._writable._storedError : e5._writableStoredError; - return pr(r5, t7); - }); - } - return pr(r5, t7); - }(e4, t6); - } - function s4(t6) { - return function(e5, t7) { - return cr(e5, t7), c2(void 0); - }(e4, t6); - } - function u3() { - return function(e5) { - const t6 = e5._transformStreamController, r5 = t6._flushAlgorithm(); - return hr(t6), p2(r5, () => { - if ("errored" === e5._readableState) - throw e5._readableStoredError; - gr(e5) && wr(e5); - }, (t7) => { - throw cr(e5, t7), e5._readableStoredError; - }); - }(e4); - } - function d3() { - return function(e5) { - return fr(e5, false), e5._backpressureChangePromise; - }(e4); - } - function f4(t6) { - return dr(e4, t6), c2(void 0); - } - e4._writableState = "writable", e4._writableStoredError = void 0, e4._writableHasInFlightOperation = false, e4._writableStarted = false, e4._writable = function(e5, t6, r5, o5, n5, a5, i6) { - return new WritableStream({ start(r6) { - e5._writableController = r6; - try { - const t7 = r6.signal; - void 0 !== t7 && t7.addEventListener("abort", () => { - "writable" === e5._writableState && (e5._writableState = "erroring", t7.reason && (e5._writableStoredError = t7.reason)); - }); - } catch (e6) { - } - return p2(t6(), () => (e5._writableStarted = true, Cr(e5), null), (t7) => { - throw e5._writableStarted = true, Rr(e5, t7), t7; - }); - }, write: (t7) => (function(e6) { - e6._writableHasInFlightOperation = true; - }(e5), p2(r5(t7), () => (function(e6) { - e6._writableHasInFlightOperation = false; - }(e5), Cr(e5), null), (t8) => { - throw function(e6, t9) { - e6._writableHasInFlightOperation = false, Rr(e6, t9); - }(e5, t8), t8; - })), close: () => (function(e6) { - e6._writableHasInFlightOperation = true; - }(e5), p2(o5(), () => (function(e6) { - e6._writableHasInFlightOperation = false; - "erroring" === e6._writableState && (e6._writableStoredError = void 0); - e6._writableState = "closed"; - }(e5), null), (t7) => { - throw function(e6, t8) { - e6._writableHasInFlightOperation = false, e6._writableState, Rr(e6, t8); - }(e5, t7), t7; - })), abort: (t7) => (e5._writableState = "errored", e5._writableStoredError = t7, n5(t7)) }, { highWaterMark: a5, size: i6 }); - }(e4, i5, l4, u3, s4, r4, o4), e4._readableState = "readable", e4._readableStoredError = void 0, e4._readableCloseRequested = false, e4._readablePulling = false, e4._readable = function(e5, t6, r5, o5, n5, a5) { - return new ReadableStream2({ start: (r6) => (e5._readableController = r6, t6().catch((t7) => { - Sr(e5, t7); - })), pull: () => (e5._readablePulling = true, r5().catch((t7) => { - Sr(e5, t7); - })), cancel: (t7) => (e5._readableState = "closed", o5(t7)) }, { highWaterMark: n5, size: a5 }); - }(e4, i5, d3, f4, n4, a4), e4._backpressure = void 0, e4._backpressureChangePromise = void 0, e4._backpressureChangePromise_resolve = void 0, fr(e4, true), e4._transformStreamController = void 0; - }(this, u2((e4) => { - b2 = e4; - }), s3, f3, i4, l3), function(e4, t5) { - const r4 = Object.create(TransformStreamDefaultController.prototype); - let o4, n4; - o4 = void 0 !== t5.transform ? (e5) => t5.transform(e5, r4) : (e5) => { - try { - return _r(r4, e5), c2(void 0); - } catch (e6) { - return d2(e6); - } - }; - n4 = void 0 !== t5.flush ? () => t5.flush(r4) : () => c2(void 0); - !function(e5, t6, r5, o5) { - t6._controlledTransformStream = e5, e5._transformStreamController = t6, t6._transformAlgorithm = r5, t6._flushAlgorithm = o5; - }(e4, r4, o4, n4); - }(this, a3), void 0 !== a3.start ? b2(a3.start(this._transformStreamController)) : b2(void 0); - } - get readable() { - if (!ur(this)) - throw yr("readable"); - return this._readable; - } - get writable() { - if (!ur(this)) - throw yr("writable"); - return this._writable; - } - }; - Object.defineProperties(TransformStream.prototype, { readable: { enumerable: true }, writable: { enumerable: true } }), "symbol" == typeof e2.toStringTag && Object.defineProperty(TransformStream.prototype, e2.toStringTag, { value: "TransformStream", configurable: true }); - TransformStreamDefaultController = class { - constructor() { - throw new TypeError("Illegal constructor"); - } - get desiredSize() { - if (!br(this)) - throw mr("desiredSize"); - return vr(this._controlledTransformStream); - } - enqueue(e3) { - if (!br(this)) - throw mr("enqueue"); - _r(this, e3); - } - error(e3) { - if (!br(this)) - throw mr("error"); - var t4; - t4 = e3, cr(this._controlledTransformStream, t4); - } - terminate() { - if (!br(this)) - throw mr("terminate"); - !function(e3) { - const t4 = e3._controlledTransformStream; - gr(t4) && wr(t4); - const r3 = new TypeError("TransformStream terminated"); - dr(t4, r3); - }(this); - } - }; - Object.defineProperties(TransformStreamDefaultController.prototype, { enqueue: { enumerable: true }, error: { enumerable: true }, terminate: { enumerable: true }, desiredSize: { enumerable: true } }), n2(TransformStreamDefaultController.prototype.enqueue, "enqueue"), n2(TransformStreamDefaultController.prototype.error, "error"), n2(TransformStreamDefaultController.prototype.terminate, "terminate"), "symbol" == typeof e2.toStringTag && Object.defineProperty(TransformStreamDefaultController.prototype, e2.toStringTag, { value: "TransformStreamDefaultController", configurable: true }); - } -}); - -// node_modules/formdata-node/lib/esm/isFunction.js -var isFunction2; -var init_isFunction = __esm({ - "node_modules/formdata-node/lib/esm/isFunction.js"() { - isFunction2 = (value) => typeof value === "function"; - } -}); - -// node_modules/formdata-node/lib/esm/blobHelpers.js -async function* clonePart(part) { - const end2 = part.byteOffset + part.byteLength; - let position = part.byteOffset; - while (position !== end2) { - const size = Math.min(end2 - position, CHUNK_SIZE); - const chunk = part.buffer.slice(position, position + size); - position += chunk.byteLength; - yield new Uint8Array(chunk); - } -} -async function* consumeNodeBlob(blob) { - let position = 0; - while (position !== blob.size) { - const chunk = blob.slice(position, Math.min(blob.size, position + CHUNK_SIZE)); - const buffer = await chunk.arrayBuffer(); - position += buffer.byteLength; - yield new Uint8Array(buffer); - } -} -async function* consumeBlobParts(parts, clone = false) { - for (const part of parts) { - if (ArrayBuffer.isView(part)) { - if (clone) { - yield* clonePart(part); - } else { - yield part; - } - } else if (isFunction2(part.stream)) { - yield* part.stream(); - } else { - yield* consumeNodeBlob(part); - } - } -} -function* sliceBlob(blobParts, blobSize, start2 = 0, end2) { - end2 !== null && end2 !== void 0 ? end2 : end2 = blobSize; - let relativeStart = start2 < 0 ? Math.max(blobSize + start2, 0) : Math.min(start2, blobSize); - let relativeEnd = end2 < 0 ? Math.max(blobSize + end2, 0) : Math.min(end2, blobSize); - const span = Math.max(relativeEnd - relativeStart, 0); - let added = 0; - for (const part of blobParts) { - if (added >= span) { - break; - } - const partSize = ArrayBuffer.isView(part) ? part.byteLength : part.size; - if (relativeStart && partSize <= relativeStart) { - relativeStart -= partSize; - relativeEnd -= partSize; - } else { - let chunk; - if (ArrayBuffer.isView(part)) { - chunk = part.subarray(relativeStart, Math.min(partSize, relativeEnd)); - added += chunk.byteLength; - } else { - chunk = part.slice(relativeStart, Math.min(partSize, relativeEnd)); - added += chunk.size; - } - relativeEnd -= partSize; - relativeStart = 0; - yield chunk; - } - } -} -var CHUNK_SIZE; -var init_blobHelpers = __esm({ - "node_modules/formdata-node/lib/esm/blobHelpers.js"() { - init_isFunction(); - CHUNK_SIZE = 65536; - } -}); - -// node_modules/formdata-node/lib/esm/Blob.js -var __classPrivateFieldGet, __classPrivateFieldSet, _Blob_parts, _Blob_type, _Blob_size, Blob3; -var init_Blob = __esm({ - "node_modules/formdata-node/lib/esm/Blob.js"() { - init_ponyfill(); - init_isFunction(); - init_blobHelpers(); - __classPrivateFieldGet = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); - }; - __classPrivateFieldSet = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; - }; - Blob3 = class { - constructor(blobParts = [], options = {}) { - _Blob_parts.set(this, []); - _Blob_type.set(this, ""); - _Blob_size.set(this, 0); - options !== null && options !== void 0 ? options : options = {}; - if (typeof blobParts !== "object" || blobParts === null) { - throw new TypeError("Failed to construct 'Blob': The provided value cannot be converted to a sequence."); - } - if (!isFunction2(blobParts[Symbol.iterator])) { - throw new TypeError("Failed to construct 'Blob': The object must have a callable @@iterator property."); - } - if (typeof options !== "object" && !isFunction2(options)) { - throw new TypeError("Failed to construct 'Blob': parameter 2 cannot convert to dictionary."); - } - const encoder = new TextEncoder(); - for (const raw of blobParts) { - let part; - if (ArrayBuffer.isView(raw)) { - part = new Uint8Array(raw.buffer.slice(raw.byteOffset, raw.byteOffset + raw.byteLength)); - } else if (raw instanceof ArrayBuffer) { - part = new Uint8Array(raw.slice(0)); - } else if (raw instanceof Blob3) { - part = raw; - } else { - part = encoder.encode(String(raw)); - } - __classPrivateFieldSet(this, _Blob_size, __classPrivateFieldGet(this, _Blob_size, "f") + (ArrayBuffer.isView(part) ? part.byteLength : part.size), "f"); - __classPrivateFieldGet(this, _Blob_parts, "f").push(part); - } - const type = options.type === void 0 ? "" : String(options.type); - __classPrivateFieldSet(this, _Blob_type, /^[\x20-\x7E]*$/.test(type) ? type : "", "f"); - } - static [(_Blob_parts = /* @__PURE__ */ new WeakMap(), _Blob_type = /* @__PURE__ */ new WeakMap(), _Blob_size = /* @__PURE__ */ new WeakMap(), Symbol.hasInstance)](value) { - return Boolean(value && typeof value === "object" && isFunction2(value.constructor) && (isFunction2(value.stream) || isFunction2(value.arrayBuffer)) && /^(Blob|File)$/.test(value[Symbol.toStringTag])); - } - get type() { - return __classPrivateFieldGet(this, _Blob_type, "f"); - } - get size() { - return __classPrivateFieldGet(this, _Blob_size, "f"); - } - slice(start2, end2, contentType) { - return new Blob3(sliceBlob(__classPrivateFieldGet(this, _Blob_parts, "f"), this.size, start2, end2), { - type: contentType - }); - } - async text() { - const decoder = new TextDecoder(); - let result = ""; - for await (const chunk of consumeBlobParts(__classPrivateFieldGet(this, _Blob_parts, "f"))) { - result += decoder.decode(chunk, { stream: true }); - } - result += decoder.decode(); - return result; - } - async arrayBuffer() { - const view = new Uint8Array(this.size); - let offset2 = 0; - for await (const chunk of consumeBlobParts(__classPrivateFieldGet(this, _Blob_parts, "f"))) { - view.set(chunk, offset2); - offset2 += chunk.length; - } - return view.buffer; - } - stream() { - const iterator = consumeBlobParts(__classPrivateFieldGet(this, _Blob_parts, "f"), true); - return new ReadableStream2({ - async pull(controller) { - const { value, done } = await iterator.next(); - if (done) { - return queueMicrotask(() => controller.close()); - } - controller.enqueue(value); - }, - async cancel() { - await iterator.return(); - } - }); - } - get [Symbol.toStringTag]() { - return "Blob"; - } - }; - Object.defineProperties(Blob3.prototype, { - type: { enumerable: true }, - size: { enumerable: true }, - slice: { enumerable: true }, - stream: { enumerable: true }, - text: { enumerable: true }, - arrayBuffer: { enumerable: true } - }); - } -}); - -// node_modules/formdata-node/lib/esm/File.js -var __classPrivateFieldSet2, __classPrivateFieldGet2, _File_name, _File_lastModified, File2; -var init_File = __esm({ - "node_modules/formdata-node/lib/esm/File.js"() { - init_Blob(); - __classPrivateFieldSet2 = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; - }; - __classPrivateFieldGet2 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); - }; - File2 = class extends Blob3 { - constructor(fileBits, name, options = {}) { - super(fileBits, options); - _File_name.set(this, void 0); - _File_lastModified.set(this, 0); - if (arguments.length < 2) { - throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`); - } - __classPrivateFieldSet2(this, _File_name, String(name), "f"); - const lastModified = options.lastModified === void 0 ? Date.now() : Number(options.lastModified); - if (!Number.isNaN(lastModified)) { - __classPrivateFieldSet2(this, _File_lastModified, lastModified, "f"); - } - } - static [(_File_name = /* @__PURE__ */ new WeakMap(), _File_lastModified = /* @__PURE__ */ new WeakMap(), Symbol.hasInstance)](value) { - return value instanceof Blob3 && value[Symbol.toStringTag] === "File" && typeof value.name === "string"; - } - get name() { - return __classPrivateFieldGet2(this, _File_name, "f"); - } - get lastModified() { - return __classPrivateFieldGet2(this, _File_lastModified, "f"); - } - get webkitRelativePath() { - return ""; - } - get [Symbol.toStringTag]() { - return "File"; - } - }; - } -}); - -// node_modules/formdata-node/lib/esm/isFile.js -var isFile; -var init_isFile = __esm({ - "node_modules/formdata-node/lib/esm/isFile.js"() { - init_File(); - isFile = (value) => value instanceof File2; - } -}); - -// node_modules/ms/index.js -var require_ms = __commonJS({ - "node_modules/ms/index.js"(exports, module2) { - var s3 = 1e3; - var m2 = s3 * 60; - var h3 = m2 * 60; - var d3 = h3 * 24; - var w2 = d3 * 7; - var y2 = d3 * 365.25; - module2.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === "string" && val.length > 0) { - return parse5(val); - } else if (type === "number" && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - "val is not a non-empty string or a valid number. val=" + JSON.stringify(val) - ); - }; - function parse5(str2) { - str2 = String(str2); - if (str2.length > 100) { - return; - } - var match2 = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( - str2 - ); - if (!match2) { - return; - } - var n3 = parseFloat(match2[1]); - var type = (match2[2] || "ms").toLowerCase(); - switch (type) { - case "years": - case "year": - case "yrs": - case "yr": - case "y": - return n3 * y2; - case "weeks": - case "week": - case "w": - return n3 * w2; - case "days": - case "day": - case "d": - return n3 * d3; - case "hours": - case "hour": - case "hrs": - case "hr": - case "h": - return n3 * h3; - case "minutes": - case "minute": - case "mins": - case "min": - case "m": - return n3 * m2; - case "seconds": - case "second": - case "secs": - case "sec": - case "s": - return n3 * s3; - case "milliseconds": - case "millisecond": - case "msecs": - case "msec": - case "ms": - return n3; - default: - return void 0; - } - } - function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d3) { - return Math.round(ms / d3) + "d"; - } - if (msAbs >= h3) { - return Math.round(ms / h3) + "h"; - } - if (msAbs >= m2) { - return Math.round(ms / m2) + "m"; - } - if (msAbs >= s3) { - return Math.round(ms / s3) + "s"; - } - return ms + "ms"; - } - function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d3) { - return plural(ms, msAbs, d3, "day"); - } - if (msAbs >= h3) { - return plural(ms, msAbs, h3, "hour"); - } - if (msAbs >= m2) { - return plural(ms, msAbs, m2, "minute"); - } - if (msAbs >= s3) { - return plural(ms, msAbs, s3, "second"); - } - return ms + " ms"; - } - function plural(ms, msAbs, n3, name) { - var isPlural = msAbs >= n3 * 1.5; - return Math.round(ms / n3) + " " + name + (isPlural ? "s" : ""); - } - } -}); - -// node_modules/humanize-ms/index.js -var require_humanize_ms = __commonJS({ - "node_modules/humanize-ms/index.js"(exports, module2) { - "use strict"; - var util = require("util"); - var ms = require_ms(); - module2.exports = function(t4) { - if (typeof t4 === "number") - return t4; - var r3 = ms(t4); - if (r3 === void 0) { - var err = new Error(util.format("humanize-ms(%j) result undefined", t4)); - console.warn(err.stack); - } - return r3; - }; - } -}); - -// node_modules/agentkeepalive/lib/constants.js -var require_constants = __commonJS({ - "node_modules/agentkeepalive/lib/constants.js"(exports, module2) { - "use strict"; - module2.exports = { - // agent - CURRENT_ID: Symbol("agentkeepalive#currentId"), - CREATE_ID: Symbol("agentkeepalive#createId"), - INIT_SOCKET: Symbol("agentkeepalive#initSocket"), - CREATE_HTTPS_CONNECTION: Symbol("agentkeepalive#createHttpsConnection"), - // socket - SOCKET_CREATED_TIME: Symbol("agentkeepalive#socketCreatedTime"), - SOCKET_NAME: Symbol("agentkeepalive#socketName"), - SOCKET_REQUEST_COUNT: Symbol("agentkeepalive#socketRequestCount"), - SOCKET_REQUEST_FINISHED_COUNT: Symbol("agentkeepalive#socketRequestFinishedCount") - }; - } -}); - -// node_modules/agentkeepalive/lib/agent.js -var require_agent = __commonJS({ - "node_modules/agentkeepalive/lib/agent.js"(exports, module2) { - "use strict"; - var OriginalAgent = require("http").Agent; - var ms = require_humanize_ms(); - var debug5 = require("util").debuglog("agentkeepalive"); - var { - INIT_SOCKET, - CURRENT_ID, - CREATE_ID, - SOCKET_CREATED_TIME, - SOCKET_NAME, - SOCKET_REQUEST_COUNT, - SOCKET_REQUEST_FINISHED_COUNT - } = require_constants(); - var defaultTimeoutListenerCount = 1; - var majorVersion = parseInt(process.version.split(".", 1)[0].substring(1)); - if (majorVersion >= 11 && majorVersion <= 12) { - defaultTimeoutListenerCount = 2; - } else if (majorVersion >= 13) { - defaultTimeoutListenerCount = 3; - } - function deprecate2(message) { - console.log("[agentkeepalive:deprecated] %s", message); - } - var Agent = class extends OriginalAgent { - constructor(options) { - options = options || {}; - options.keepAlive = options.keepAlive !== false; - if (options.freeSocketTimeout === void 0) { - options.freeSocketTimeout = 4e3; - } - if (options.keepAliveTimeout) { - deprecate2("options.keepAliveTimeout is deprecated, please use options.freeSocketTimeout instead"); - options.freeSocketTimeout = options.keepAliveTimeout; - delete options.keepAliveTimeout; - } - if (options.freeSocketKeepAliveTimeout) { - deprecate2("options.freeSocketKeepAliveTimeout is deprecated, please use options.freeSocketTimeout instead"); - options.freeSocketTimeout = options.freeSocketKeepAliveTimeout; - delete options.freeSocketKeepAliveTimeout; - } - if (options.timeout === void 0) { - options.timeout = Math.max(options.freeSocketTimeout * 2, 8e3); - } - options.timeout = ms(options.timeout); - options.freeSocketTimeout = ms(options.freeSocketTimeout); - options.socketActiveTTL = options.socketActiveTTL ? ms(options.socketActiveTTL) : 0; - super(options); - this[CURRENT_ID] = 0; - this.createSocketCount = 0; - this.createSocketCountLastCheck = 0; - this.createSocketErrorCount = 0; - this.createSocketErrorCountLastCheck = 0; - this.closeSocketCount = 0; - this.closeSocketCountLastCheck = 0; - this.errorSocketCount = 0; - this.errorSocketCountLastCheck = 0; - this.requestCount = 0; - this.requestCountLastCheck = 0; - this.timeoutSocketCount = 0; - this.timeoutSocketCountLastCheck = 0; - this.on("free", (socket) => { - const timeout = this.calcSocketTimeout(socket); - if (timeout > 0 && socket.timeout !== timeout) { - socket.setTimeout(timeout); - } - }); - } - get freeSocketKeepAliveTimeout() { - deprecate2("agent.freeSocketKeepAliveTimeout is deprecated, please use agent.options.freeSocketTimeout instead"); - return this.options.freeSocketTimeout; - } - get timeout() { - deprecate2("agent.timeout is deprecated, please use agent.options.timeout instead"); - return this.options.timeout; - } - get socketActiveTTL() { - deprecate2("agent.socketActiveTTL is deprecated, please use agent.options.socketActiveTTL instead"); - return this.options.socketActiveTTL; - } - calcSocketTimeout(socket) { - let freeSocketTimeout = this.options.freeSocketTimeout; - const socketActiveTTL = this.options.socketActiveTTL; - if (socketActiveTTL) { - const aliveTime = Date.now() - socket[SOCKET_CREATED_TIME]; - const diff = socketActiveTTL - aliveTime; - if (diff <= 0) { - return diff; - } - if (freeSocketTimeout && diff < freeSocketTimeout) { - freeSocketTimeout = diff; - } - } - if (freeSocketTimeout) { - const customFreeSocketTimeout = socket.freeSocketTimeout || socket.freeSocketKeepAliveTimeout; - return customFreeSocketTimeout || freeSocketTimeout; - } - } - keepSocketAlive(socket) { - const result = super.keepSocketAlive(socket); - if (!result) - return result; - const customTimeout = this.calcSocketTimeout(socket); - if (typeof customTimeout === "undefined") { - return true; - } - if (customTimeout <= 0) { - debug5( - "%s(requests: %s, finished: %s) free but need to destroy by TTL, request count %s, diff is %s", - socket[SOCKET_NAME], - socket[SOCKET_REQUEST_COUNT], - socket[SOCKET_REQUEST_FINISHED_COUNT], - customTimeout - ); - return false; - } - if (socket.timeout !== customTimeout) { - socket.setTimeout(customTimeout); - } - return true; - } - // only call on addRequest - reuseSocket(...args) { - super.reuseSocket(...args); - const socket = args[0]; - const req = args[1]; - req.reusedSocket = true; - const agentTimeout = this.options.timeout; - if (getSocketTimeout(socket) !== agentTimeout) { - socket.setTimeout(agentTimeout); - debug5("%s reset timeout to %sms", socket[SOCKET_NAME], agentTimeout); - } - socket[SOCKET_REQUEST_COUNT]++; - debug5( - "%s(requests: %s, finished: %s) reuse on addRequest, timeout %sms", - socket[SOCKET_NAME], - socket[SOCKET_REQUEST_COUNT], - socket[SOCKET_REQUEST_FINISHED_COUNT], - getSocketTimeout(socket) - ); - } - [CREATE_ID]() { - const id = this[CURRENT_ID]++; - if (this[CURRENT_ID] === Number.MAX_SAFE_INTEGER) - this[CURRENT_ID] = 0; - return id; - } - [INIT_SOCKET](socket, options) { - if (options.timeout) { - const timeout = getSocketTimeout(socket); - if (!timeout) { - socket.setTimeout(options.timeout); - } - } - if (this.options.keepAlive) { - socket.setNoDelay(true); - } - this.createSocketCount++; - if (this.options.socketActiveTTL) { - socket[SOCKET_CREATED_TIME] = Date.now(); - } - socket[SOCKET_NAME] = `sock[${this[CREATE_ID]()}#${options._agentKey}]`.split("-----BEGIN", 1)[0]; - socket[SOCKET_REQUEST_COUNT] = 1; - socket[SOCKET_REQUEST_FINISHED_COUNT] = 0; - installListeners(this, socket, options); - } - createConnection(options, oncreate) { - let called = false; - const onNewCreate = (err, socket) => { - if (called) - return; - called = true; - if (err) { - this.createSocketErrorCount++; - return oncreate(err); - } - this[INIT_SOCKET](socket, options); - oncreate(err, socket); - }; - const newSocket = super.createConnection(options, onNewCreate); - if (newSocket) - onNewCreate(null, newSocket); - return newSocket; - } - get statusChanged() { - const changed = this.createSocketCount !== this.createSocketCountLastCheck || this.createSocketErrorCount !== this.createSocketErrorCountLastCheck || this.closeSocketCount !== this.closeSocketCountLastCheck || this.errorSocketCount !== this.errorSocketCountLastCheck || this.timeoutSocketCount !== this.timeoutSocketCountLastCheck || this.requestCount !== this.requestCountLastCheck; - if (changed) { - this.createSocketCountLastCheck = this.createSocketCount; - this.createSocketErrorCountLastCheck = this.createSocketErrorCount; - this.closeSocketCountLastCheck = this.closeSocketCount; - this.errorSocketCountLastCheck = this.errorSocketCount; - this.timeoutSocketCountLastCheck = this.timeoutSocketCount; - this.requestCountLastCheck = this.requestCount; - } - return changed; - } - getCurrentStatus() { - return { - createSocketCount: this.createSocketCount, - createSocketErrorCount: this.createSocketErrorCount, - closeSocketCount: this.closeSocketCount, - errorSocketCount: this.errorSocketCount, - timeoutSocketCount: this.timeoutSocketCount, - requestCount: this.requestCount, - freeSockets: inspect2(this.freeSockets), - sockets: inspect2(this.sockets), - requests: inspect2(this.requests) - }; - } - }; - function getSocketTimeout(socket) { - return socket.timeout || socket._idleTimeout; - } - function installListeners(agent, socket, options) { - debug5("%s create, timeout %sms", socket[SOCKET_NAME], getSocketTimeout(socket)); - function onFree() { - if (!socket._httpMessage && socket[SOCKET_REQUEST_COUNT] === 1) - return; - socket[SOCKET_REQUEST_FINISHED_COUNT]++; - agent.requestCount++; - debug5( - "%s(requests: %s, finished: %s) free", - socket[SOCKET_NAME], - socket[SOCKET_REQUEST_COUNT], - socket[SOCKET_REQUEST_FINISHED_COUNT] - ); - const name = agent.getName(options); - if (socket.writable && agent.requests[name] && agent.requests[name].length) { - socket[SOCKET_REQUEST_COUNT]++; - debug5( - "%s(requests: %s, finished: %s) will be reuse on agent free event", - socket[SOCKET_NAME], - socket[SOCKET_REQUEST_COUNT], - socket[SOCKET_REQUEST_FINISHED_COUNT] - ); - } - } - socket.on("free", onFree); - function onClose(isError) { - debug5( - "%s(requests: %s, finished: %s) close, isError: %s", - socket[SOCKET_NAME], - socket[SOCKET_REQUEST_COUNT], - socket[SOCKET_REQUEST_FINISHED_COUNT], - isError - ); - agent.closeSocketCount++; - } - socket.on("close", onClose); - function onTimeout() { - const listenerCount = socket.listeners("timeout").length; - const timeout = getSocketTimeout(socket); - const req = socket._httpMessage; - const reqTimeoutListenerCount = req && req.listeners("timeout").length || 0; - debug5( - "%s(requests: %s, finished: %s) timeout after %sms, listeners %s, defaultTimeoutListenerCount %s, hasHttpRequest %s, HttpRequest timeoutListenerCount %s", - socket[SOCKET_NAME], - socket[SOCKET_REQUEST_COUNT], - socket[SOCKET_REQUEST_FINISHED_COUNT], - timeout, - listenerCount, - defaultTimeoutListenerCount, - !!req, - reqTimeoutListenerCount - ); - if (debug5.enabled) { - debug5("timeout listeners: %s", socket.listeners("timeout").map((f3) => f3.name).join(", ")); - } - agent.timeoutSocketCount++; - const name = agent.getName(options); - if (agent.freeSockets[name] && agent.freeSockets[name].indexOf(socket) !== -1) { - socket.destroy(); - agent.removeSocket(socket, options); - debug5("%s is free, destroy quietly", socket[SOCKET_NAME]); - } else { - if (reqTimeoutListenerCount === 0) { - const error = new Error("Socket timeout"); - error.code = "ERR_SOCKET_TIMEOUT"; - error.timeout = timeout; - socket.destroy(error); - agent.removeSocket(socket, options); - debug5("%s destroy with timeout error", socket[SOCKET_NAME]); - } - } - } - socket.on("timeout", onTimeout); - function onError(err) { - const listenerCount = socket.listeners("error").length; - debug5( - "%s(requests: %s, finished: %s) error: %s, listenerCount: %s", - socket[SOCKET_NAME], - socket[SOCKET_REQUEST_COUNT], - socket[SOCKET_REQUEST_FINISHED_COUNT], - err, - listenerCount - ); - agent.errorSocketCount++; - if (listenerCount === 1) { - debug5("%s emit uncaught error event", socket[SOCKET_NAME]); - socket.removeListener("error", onError); - socket.emit("error", err); - } - } - socket.on("error", onError); - function onRemove() { - debug5( - "%s(requests: %s, finished: %s) agentRemove", - socket[SOCKET_NAME], - socket[SOCKET_REQUEST_COUNT], - socket[SOCKET_REQUEST_FINISHED_COUNT] - ); - socket.removeListener("close", onClose); - socket.removeListener("error", onError); - socket.removeListener("free", onFree); - socket.removeListener("timeout", onTimeout); - socket.removeListener("agentRemove", onRemove); - } - socket.on("agentRemove", onRemove); - } - module2.exports = Agent; - function inspect2(obj) { - const res = {}; - for (const key in obj) { - res[key] = obj[key].length; - } - return res; - } - } -}); - -// node_modules/agentkeepalive/lib/https_agent.js -var require_https_agent = __commonJS({ - "node_modules/agentkeepalive/lib/https_agent.js"(exports, module2) { - "use strict"; - var OriginalHttpsAgent = require("https").Agent; - var HttpAgent = require_agent(); - var { - INIT_SOCKET, - CREATE_HTTPS_CONNECTION - } = require_constants(); - var HttpsAgent = class extends HttpAgent { - constructor(options) { - super(options); - this.defaultPort = 443; - this.protocol = "https:"; - this.maxCachedSessions = this.options.maxCachedSessions; - if (this.maxCachedSessions === void 0) { - this.maxCachedSessions = 100; - } - this._sessionCache = { - map: {}, - list: [] - }; - } - createConnection(options, oncreate) { - const socket = this[CREATE_HTTPS_CONNECTION](options, oncreate); - this[INIT_SOCKET](socket, options); - return socket; - } - }; - HttpsAgent.prototype[CREATE_HTTPS_CONNECTION] = OriginalHttpsAgent.prototype.createConnection; - [ - "getName", - "_getSession", - "_cacheSession", - // https://github.com/nodejs/node/pull/4982 - "_evictSession" - ].forEach(function(method) { - if (typeof OriginalHttpsAgent.prototype[method] === "function") { - HttpsAgent.prototype[method] = OriginalHttpsAgent.prototype[method]; - } - }); - module2.exports = HttpsAgent; - } -}); - -// node_modules/agentkeepalive/index.js -var require_agentkeepalive = __commonJS({ - "node_modules/agentkeepalive/index.js"(exports, module2) { - "use strict"; - var HttpAgent = require_agent(); - module2.exports = HttpAgent; - module2.exports.HttpAgent = HttpAgent; - module2.exports.HttpsAgent = require_https_agent(); - module2.exports.constants = require_constants(); - } -}); - -// node_modules/event-target-shim/dist/event-target-shim.js -var require_event_target_shim = __commonJS({ - "node_modules/event-target-shim/dist/event-target-shim.js"(exports, module2) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var privateData = /* @__PURE__ */ new WeakMap(); - var wrappers = /* @__PURE__ */ new WeakMap(); - function pd(event) { - const retv = privateData.get(event); - console.assert( - retv != null, - "'this' is expected an Event object, but got", - event - ); - return retv; - } - function setCancelFlag(data) { - if (data.passiveListener != null) { - if (typeof console !== "undefined" && typeof console.error === "function") { - console.error( - "Unable to preventDefault inside passive event listener invocation.", - data.passiveListener - ); - } - return; - } - if (!data.event.cancelable) { - return; - } - data.canceled = true; - if (typeof data.event.preventDefault === "function") { - data.event.preventDefault(); - } - } - function Event(eventTarget, event) { - privateData.set(this, { - eventTarget, - event, - eventPhase: 2, - currentTarget: eventTarget, - canceled: false, - stopped: false, - immediateStopped: false, - passiveListener: null, - timeStamp: event.timeStamp || Date.now() - }); - Object.defineProperty(this, "isTrusted", { value: false, enumerable: true }); - const keys = Object.keys(event); - for (let i4 = 0; i4 < keys.length; ++i4) { - const key = keys[i4]; - if (!(key in this)) { - Object.defineProperty(this, key, defineRedirectDescriptor(key)); - } - } - } - Event.prototype = { - /** - * The type of this event. - * @type {string} - */ - get type() { - return pd(this).event.type; - }, - /** - * The target of this event. - * @type {EventTarget} - */ - get target() { - return pd(this).eventTarget; - }, - /** - * The target of this event. - * @type {EventTarget} - */ - get currentTarget() { - return pd(this).currentTarget; - }, - /** - * @returns {EventTarget[]} The composed path of this event. - */ - composedPath() { - const currentTarget = pd(this).currentTarget; - if (currentTarget == null) { - return []; - } - return [currentTarget]; - }, - /** - * Constant of NONE. - * @type {number} - */ - get NONE() { - return 0; - }, - /** - * Constant of CAPTURING_PHASE. - * @type {number} - */ - get CAPTURING_PHASE() { - return 1; - }, - /** - * Constant of AT_TARGET. - * @type {number} - */ - get AT_TARGET() { - return 2; - }, - /** - * Constant of BUBBLING_PHASE. - * @type {number} - */ - get BUBBLING_PHASE() { - return 3; - }, - /** - * The target of this event. - * @type {number} - */ - get eventPhase() { - return pd(this).eventPhase; - }, - /** - * Stop event bubbling. - * @returns {void} - */ - stopPropagation() { - const data = pd(this); - data.stopped = true; - if (typeof data.event.stopPropagation === "function") { - data.event.stopPropagation(); - } - }, - /** - * Stop event bubbling. - * @returns {void} - */ - stopImmediatePropagation() { - const data = pd(this); - data.stopped = true; - data.immediateStopped = true; - if (typeof data.event.stopImmediatePropagation === "function") { - data.event.stopImmediatePropagation(); - } - }, - /** - * The flag to be bubbling. - * @type {boolean} - */ - get bubbles() { - return Boolean(pd(this).event.bubbles); - }, - /** - * The flag to be cancelable. - * @type {boolean} - */ - get cancelable() { - return Boolean(pd(this).event.cancelable); - }, - /** - * Cancel this event. - * @returns {void} - */ - preventDefault() { - setCancelFlag(pd(this)); - }, - /** - * The flag to indicate cancellation state. - * @type {boolean} - */ - get defaultPrevented() { - return pd(this).canceled; - }, - /** - * The flag to be composed. - * @type {boolean} - */ - get composed() { - return Boolean(pd(this).event.composed); - }, - /** - * The unix time of this event. - * @type {number} - */ - get timeStamp() { - return pd(this).timeStamp; - }, - /** - * The target of this event. - * @type {EventTarget} - * @deprecated - */ - get srcElement() { - return pd(this).eventTarget; - }, - /** - * The flag to stop event bubbling. - * @type {boolean} - * @deprecated - */ - get cancelBubble() { - return pd(this).stopped; - }, - set cancelBubble(value) { - if (!value) { - return; - } - const data = pd(this); - data.stopped = true; - if (typeof data.event.cancelBubble === "boolean") { - data.event.cancelBubble = true; - } - }, - /** - * The flag to indicate cancellation state. - * @type {boolean} - * @deprecated - */ - get returnValue() { - return !pd(this).canceled; - }, - set returnValue(value) { - if (!value) { - setCancelFlag(pd(this)); - } - }, - /** - * Initialize this event object. But do nothing under event dispatching. - * @param {string} type The event type. - * @param {boolean} [bubbles=false] The flag to be possible to bubble up. - * @param {boolean} [cancelable=false] The flag to be possible to cancel. - * @deprecated - */ - initEvent() { - } - }; - Object.defineProperty(Event.prototype, "constructor", { - value: Event, - configurable: true, - writable: true - }); - if (typeof window !== "undefined" && typeof window.Event !== "undefined") { - Object.setPrototypeOf(Event.prototype, window.Event.prototype); - wrappers.set(window.Event.prototype, Event); - } - function defineRedirectDescriptor(key) { - return { - get() { - return pd(this).event[key]; - }, - set(value) { - pd(this).event[key] = value; - }, - configurable: true, - enumerable: true - }; - } - function defineCallDescriptor(key) { - return { - value() { - const event = pd(this).event; - return event[key].apply(event, arguments); - }, - configurable: true, - enumerable: true - }; - } - function defineWrapper(BaseEvent, proto) { - const keys = Object.keys(proto); - if (keys.length === 0) { - return BaseEvent; - } - function CustomEvent(eventTarget, event) { - BaseEvent.call(this, eventTarget, event); - } - CustomEvent.prototype = Object.create(BaseEvent.prototype, { - constructor: { value: CustomEvent, configurable: true, writable: true } - }); - for (let i4 = 0; i4 < keys.length; ++i4) { - const key = keys[i4]; - if (!(key in BaseEvent.prototype)) { - const descriptor = Object.getOwnPropertyDescriptor(proto, key); - const isFunc = typeof descriptor.value === "function"; - Object.defineProperty( - CustomEvent.prototype, - key, - isFunc ? defineCallDescriptor(key) : defineRedirectDescriptor(key) - ); - } - } - return CustomEvent; - } - function getWrapper(proto) { - if (proto == null || proto === Object.prototype) { - return Event; - } - let wrapper = wrappers.get(proto); - if (wrapper == null) { - wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto); - wrappers.set(proto, wrapper); - } - return wrapper; - } - function wrapEvent(eventTarget, event) { - const Wrapper = getWrapper(Object.getPrototypeOf(event)); - return new Wrapper(eventTarget, event); - } - function isStopped(event) { - return pd(event).immediateStopped; - } - function setEventPhase(event, eventPhase) { - pd(event).eventPhase = eventPhase; - } - function setCurrentTarget(event, currentTarget) { - pd(event).currentTarget = currentTarget; - } - function setPassiveListener(event, passiveListener) { - pd(event).passiveListener = passiveListener; - } - var listenersMap = /* @__PURE__ */ new WeakMap(); - var CAPTURE = 1; - var BUBBLE = 2; - var ATTRIBUTE = 3; - function isObject8(x2) { - return x2 !== null && typeof x2 === "object"; - } - function getListeners(eventTarget) { - const listeners = listenersMap.get(eventTarget); - if (listeners == null) { - throw new TypeError( - "'this' is expected an EventTarget object, but got another value." - ); - } - return listeners; - } - function defineEventAttributeDescriptor(eventName) { - return { - get() { - const listeners = getListeners(this); - let node = listeners.get(eventName); - while (node != null) { - if (node.listenerType === ATTRIBUTE) { - return node.listener; - } - node = node.next; - } - return null; - }, - set(listener) { - if (typeof listener !== "function" && !isObject8(listener)) { - listener = null; - } - const listeners = getListeners(this); - let prev = null; - let node = listeners.get(eventName); - while (node != null) { - if (node.listenerType === ATTRIBUTE) { - if (prev !== null) { - prev.next = node.next; - } else if (node.next !== null) { - listeners.set(eventName, node.next); - } else { - listeners.delete(eventName); - } - } else { - prev = node; - } - node = node.next; - } - if (listener !== null) { - const newNode = { - listener, - listenerType: ATTRIBUTE, - passive: false, - once: false, - next: null - }; - if (prev === null) { - listeners.set(eventName, newNode); - } else { - prev.next = newNode; - } - } - }, - configurable: true, - enumerable: true - }; - } - function defineEventAttribute(eventTargetPrototype, eventName) { - Object.defineProperty( - eventTargetPrototype, - `on${eventName}`, - defineEventAttributeDescriptor(eventName) - ); - } - function defineCustomEventTarget(eventNames) { - function CustomEventTarget() { - EventTarget.call(this); - } - CustomEventTarget.prototype = Object.create(EventTarget.prototype, { - constructor: { - value: CustomEventTarget, - configurable: true, - writable: true - } - }); - for (let i4 = 0; i4 < eventNames.length; ++i4) { - defineEventAttribute(CustomEventTarget.prototype, eventNames[i4]); - } - return CustomEventTarget; - } - function EventTarget() { - if (this instanceof EventTarget) { - listenersMap.set(this, /* @__PURE__ */ new Map()); - return; - } - if (arguments.length === 1 && Array.isArray(arguments[0])) { - return defineCustomEventTarget(arguments[0]); - } - if (arguments.length > 0) { - const types = new Array(arguments.length); - for (let i4 = 0; i4 < arguments.length; ++i4) { - types[i4] = arguments[i4]; - } - return defineCustomEventTarget(types); - } - throw new TypeError("Cannot call a class as a function"); - } - EventTarget.prototype = { - /** - * Add a given listener to this event target. - * @param {string} eventName The event name to add. - * @param {Function} listener The listener to add. - * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener. - * @returns {void} - */ - addEventListener(eventName, listener, options) { - if (listener == null) { - return; - } - if (typeof listener !== "function" && !isObject8(listener)) { - throw new TypeError("'listener' should be a function or an object."); - } - const listeners = getListeners(this); - const optionsIsObj = isObject8(options); - const capture = optionsIsObj ? Boolean(options.capture) : Boolean(options); - const listenerType = capture ? CAPTURE : BUBBLE; - const newNode = { - listener, - listenerType, - passive: optionsIsObj && Boolean(options.passive), - once: optionsIsObj && Boolean(options.once), - next: null - }; - let node = listeners.get(eventName); - if (node === void 0) { - listeners.set(eventName, newNode); - return; - } - let prev = null; - while (node != null) { - if (node.listener === listener && node.listenerType === listenerType) { - return; - } - prev = node; - node = node.next; - } - prev.next = newNode; - }, - /** - * Remove a given listener from this event target. - * @param {string} eventName The event name to remove. - * @param {Function} listener The listener to remove. - * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener. - * @returns {void} - */ - removeEventListener(eventName, listener, options) { - if (listener == null) { - return; - } - const listeners = getListeners(this); - const capture = isObject8(options) ? Boolean(options.capture) : Boolean(options); - const listenerType = capture ? CAPTURE : BUBBLE; - let prev = null; - let node = listeners.get(eventName); - while (node != null) { - if (node.listener === listener && node.listenerType === listenerType) { - if (prev !== null) { - prev.next = node.next; - } else if (node.next !== null) { - listeners.set(eventName, node.next); - } else { - listeners.delete(eventName); - } - return; - } - prev = node; - node = node.next; - } - }, - /** - * Dispatch a given event. - * @param {Event|{type:string}} event The event to dispatch. - * @returns {boolean} `false` if canceled. - */ - dispatchEvent(event) { - if (event == null || typeof event.type !== "string") { - throw new TypeError('"event.type" should be a string.'); - } - const listeners = getListeners(this); - const eventName = event.type; - let node = listeners.get(eventName); - if (node == null) { - return true; - } - const wrappedEvent = wrapEvent(this, event); - let prev = null; - while (node != null) { - if (node.once) { - if (prev !== null) { - prev.next = node.next; - } else if (node.next !== null) { - listeners.set(eventName, node.next); - } else { - listeners.delete(eventName); - } - } else { - prev = node; - } - setPassiveListener( - wrappedEvent, - node.passive ? node.listener : null - ); - if (typeof node.listener === "function") { - try { - node.listener.call(this, wrappedEvent); - } catch (err) { - if (typeof console !== "undefined" && typeof console.error === "function") { - console.error(err); - } - } - } else if (node.listenerType !== ATTRIBUTE && typeof node.listener.handleEvent === "function") { - node.listener.handleEvent(wrappedEvent); - } - if (isStopped(wrappedEvent)) { - break; - } - node = node.next; - } - setPassiveListener(wrappedEvent, null); - setEventPhase(wrappedEvent, 0); - setCurrentTarget(wrappedEvent, null); - return !wrappedEvent.defaultPrevented; - } - }; - Object.defineProperty(EventTarget.prototype, "constructor", { - value: EventTarget, - configurable: true, - writable: true - }); - if (typeof window !== "undefined" && typeof window.EventTarget !== "undefined") { - Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype); - } - exports.defineEventAttribute = defineEventAttribute; - exports.EventTarget = EventTarget; - exports.default = EventTarget; - module2.exports = EventTarget; - module2.exports.EventTarget = module2.exports["default"] = EventTarget; - module2.exports.defineEventAttribute = defineEventAttribute; - } -}); - -// node_modules/abort-controller/dist/abort-controller.js -var require_abort_controller = __commonJS({ - "node_modules/abort-controller/dist/abort-controller.js"(exports, module2) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var eventTargetShim = require_event_target_shim(); - var AbortSignal = class extends eventTargetShim.EventTarget { - /** - * AbortSignal cannot be constructed directly. - */ - constructor() { - super(); - throw new TypeError("AbortSignal cannot be constructed directly"); - } - /** - * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise. - */ - get aborted() { - const aborted = abortedFlags.get(this); - if (typeof aborted !== "boolean") { - throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? "null" : typeof this}`); - } - return aborted; - } - }; - eventTargetShim.defineEventAttribute(AbortSignal.prototype, "abort"); - function createAbortSignal() { - const signal = Object.create(AbortSignal.prototype); - eventTargetShim.EventTarget.call(signal); - abortedFlags.set(signal, false); - return signal; - } - function abortSignal(signal) { - if (abortedFlags.get(signal) !== false) { - return; - } - abortedFlags.set(signal, true); - signal.dispatchEvent({ type: "abort" }); - } - var abortedFlags = /* @__PURE__ */ new WeakMap(); - Object.defineProperties(AbortSignal.prototype, { - aborted: { enumerable: true } - }); - if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") { - Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, { - configurable: true, - value: "AbortSignal" - }); - } - var AbortController2 = class { - /** - * Initialize this controller. - */ - constructor() { - signals.set(this, createAbortSignal()); - } - /** - * Returns the `AbortSignal` object associated with this object. - */ - get signal() { - return getSignal(this); - } - /** - * Abort and signal to any observers that the associated activity is to be aborted. - */ - abort() { - abortSignal(getSignal(this)); - } - }; - var signals = /* @__PURE__ */ new WeakMap(); - function getSignal(controller) { - const signal = signals.get(controller); - if (signal == null) { - throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? "null" : typeof controller}`); - } - return signal; - } - Object.defineProperties(AbortController2.prototype, { - signal: { enumerable: true }, - abort: { enumerable: true } - }); - if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") { - Object.defineProperty(AbortController2.prototype, Symbol.toStringTag, { - configurable: true, - value: "AbortController" - }); - } - exports.AbortController = AbortController2; - exports.AbortSignal = AbortSignal; - exports.default = AbortController2; - module2.exports = AbortController2; - module2.exports.AbortController = module2.exports["default"] = AbortController2; - module2.exports.AbortSignal = AbortSignal; - } -}); - -// node_modules/node-domexception/index.js -var require_node_domexception = __commonJS({ - "node_modules/node-domexception/index.js"(exports, module2) { - if (!globalThis.DOMException) { - try { - const { MessageChannel } = require("worker_threads"), port = new MessageChannel().port1, ab = new ArrayBuffer(); - port.postMessage(ab, [ab, ab]); - } catch (err) { - err.constructor.name === "DOMException" && (globalThis.DOMException = err.constructor); - } - } - module2.exports = globalThis.DOMException; - } -}); - -// node_modules/formdata-node/lib/esm/isPlainObject.js -function isPlainObject2(value) { - if (getType2(value) !== "object") { - return false; - } - const pp = Object.getPrototypeOf(value); - if (pp === null || pp === void 0) { - return true; - } - const Ctor = pp.constructor && pp.constructor.toString(); - return Ctor === Object.toString(); -} -var getType2, isPlainObject_default2; -var init_isPlainObject = __esm({ - "node_modules/formdata-node/lib/esm/isPlainObject.js"() { - getType2 = (value) => Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); - isPlainObject_default2 = isPlainObject2; - } -}); - -// node_modules/formdata-node/lib/esm/fileFromPath.js -var fileFromPath_exports = {}; -__export(fileFromPath_exports, { - fileFromPath: () => fileFromPath2, - fileFromPathSync: () => fileFromPathSync, - isFile: () => isFile -}); -function createFileFromPath(path, { mtimeMs, size }, filenameOrOptions, options = {}) { - let filename; - if (isPlainObject_default2(filenameOrOptions)) { - [options, filename] = [filenameOrOptions, void 0]; - } else { - filename = filenameOrOptions; - } - const file = new FileFromPath({ path, size, lastModified: mtimeMs }); - if (!filename) { - filename = file.name; - } - return new File2([file], filename, { - ...options, - lastModified: file.lastModified - }); -} -function fileFromPathSync(path, filenameOrOptions, options = {}) { - const stats = (0, import_fs.statSync)(path); - return createFileFromPath(path, stats, filenameOrOptions, options); -} -async function fileFromPath2(path, filenameOrOptions, options) { - const stats = await import_fs.promises.stat(path); - return createFileFromPath(path, stats, filenameOrOptions, options); -} -var import_fs, import_path, import_node_domexception, __classPrivateFieldSet4, __classPrivateFieldGet5, _FileFromPath_path, _FileFromPath_start, MESSAGE, FileFromPath; -var init_fileFromPath = __esm({ - "node_modules/formdata-node/lib/esm/fileFromPath.js"() { - import_fs = require("fs"); - import_path = require("path"); - import_node_domexception = __toESM(require_node_domexception(), 1); - init_File(); - init_isPlainObject(); - init_isFile(); - __classPrivateFieldSet4 = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; - }; - __classPrivateFieldGet5 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); - }; - MESSAGE = "The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired."; - FileFromPath = class { - constructor(input) { - _FileFromPath_path.set(this, void 0); - _FileFromPath_start.set(this, void 0); - __classPrivateFieldSet4(this, _FileFromPath_path, input.path, "f"); - __classPrivateFieldSet4(this, _FileFromPath_start, input.start || 0, "f"); - this.name = (0, import_path.basename)(__classPrivateFieldGet5(this, _FileFromPath_path, "f")); - this.size = input.size; - this.lastModified = input.lastModified; - } - slice(start2, end2) { - return new FileFromPath({ - path: __classPrivateFieldGet5(this, _FileFromPath_path, "f"), - lastModified: this.lastModified, - size: end2 - start2, - start: start2 - }); - } - async *stream() { - const { mtimeMs } = await import_fs.promises.stat(__classPrivateFieldGet5(this, _FileFromPath_path, "f")); - if (mtimeMs > this.lastModified) { - throw new import_node_domexception.default(MESSAGE, "NotReadableError"); - } - if (this.size) { - yield* (0, import_fs.createReadStream)(__classPrivateFieldGet5(this, _FileFromPath_path, "f"), { - start: __classPrivateFieldGet5(this, _FileFromPath_start, "f"), - end: __classPrivateFieldGet5(this, _FileFromPath_start, "f") + this.size - 1 - }); - } - } - get [(_FileFromPath_path = /* @__PURE__ */ new WeakMap(), _FileFromPath_start = /* @__PURE__ */ new WeakMap(), Symbol.toStringTag)]() { - return "File"; - } - }; - } -}); - -// src/main.ts -var main_exports = {}; -__export(main_exports, { - default: () => Inscribe -}); -module.exports = __toCommonJS(main_exports); -var import_obsidian4 = require("obsidian"); - -// src/extension/index.ts -var import_view = require("@codemirror/view"); -var import_state = require("@codemirror/state"); -var TextSplitStrategies = { - /** - * Word-level segmentation (space-delimited). - * Accepts text until (and including) the first space. - */ - word: (text) => { - const nextSpace = text.indexOf(" "); - return nextSpace === -1 ? { accepted: text, remaining: "" } : { - accepted: text.slice(0, nextSpace + 1), - remaining: text.slice(nextSpace + 1) - }; - }, - /** - * Sentence-level segmentation (punctuation followed by whitespace). - */ - sentence: (text) => { - const match2 = text.match(/[.!?]\s+/); - if (match2 && match2.index !== void 0) { - return { - accepted: text.slice(0, match2.index + 1), - remaining: text.slice(match2.index + 1) - }; - } - return { accepted: text, remaining: "" }; - }, - /** - * Paragraph-level segmentation (double newline). - */ - paragraph: (text) => { - const paragraphEnd = text.indexOf("\n\n"); - return paragraphEnd === -1 ? { accepted: text, remaining: "" } : { - accepted: text.slice(0, paragraphEnd + 2), - remaining: text.slice(paragraphEnd + 2) - }; - }, - /** - * Atomic acceptance – consume the entire suggestion. - */ - full: (text) => ({ accepted: text, remaining: "" }) -}; -var SuggestionUpdateEffect = import_state.StateEffect.define(); -var suggestionSessionState = import_state.StateField.define({ - create: () => getResetSession(), - update(session, transaction) { - const effect = transaction.effects.find( - (e3) => e3.is(SuggestionUpdateEffect) - ); - if (effect) - return updateSessionFromEffect(effect.value); - if (transaction.docChanged && session.remainingText && session.anchorPosition !== null) { - return updateSessionOnDocumentChange(session, transaction); - } - if (session.remainingText !== null && session.anchorPosition !== null) { - return updateSessionOnCursorDrift(session, transaction); - } - return session; - } -}); -function getResetSession() { - return { - fullText: null, - remainingText: null, - baselineDocument: null, - anchorPosition: null - }; -} -function updateSessionFromEffect(effect) { - return effect.content === null ? getResetSession() : initializeSession(effect); -} -function initializeSession(effect) { - return { - fullText: effect.content, - remainingText: effect.content, - baselineDocument: effect.document, - anchorPosition: effect.anchor - }; -} -function updateSessionOnDocumentChange(session, transaction) { - let insertedContent = ""; - let insertionAtAnchor = false; - transaction.changes.iterChanges((fromA, toA, _fromB, _toB, inserted) => { - if (fromA === session.anchorPosition && toA === fromA) { - insertedContent = inserted.toString(); - insertionAtAnchor = true; - } - }); - if (!insertionAtAnchor || !session.remainingText) { - return invalidateSession(session); - } - if (session.remainingText.startsWith(insertedContent)) { - return advanceSession(session, insertedContent.length); - } - return invalidateSession(session); -} -function advanceSession(session, consumedLength) { - return { - ...session, - remainingText: session.remainingText.slice(consumedLength).length > 0 ? session.remainingText.slice(consumedLength) : null, - anchorPosition: session.anchorPosition + consumedLength - }; -} -function invalidateSession(session) { - return { - ...session, - remainingText: null, - anchorPosition: null - }; -} -function updateSessionOnCursorDrift(session, transaction) { - return transaction.state.selection.main.head !== session.anchorPosition ? invalidateSession(session) : session; -} -var _SuggestionWidget = class extends import_view.WidgetType { - constructor(content) { - super(); - this.content = content; - } - toDOM() { - const span = document.createElement("span"); - span.className = _SuggestionWidget.CSS_CLASS; - span.style.opacity = _SuggestionWidget.OPACITY.toString(); - span.textContent = this.content; - return span; - } -}; -var SuggestionWidget = _SuggestionWidget; -SuggestionWidget.OPACITY = 0.4; -SuggestionWidget.CSS_CLASS = "cm-inline-prediction"; -var suggestionRenderer = import_view.ViewPlugin.fromClass( - class { - constructor() { - this.decorations = import_view.Decoration.none; - } - update(update) { - const session = update.state.field(suggestionSessionState); - this.decorations = session.remainingText ? this.createDecoration(update.view, session.remainingText) : import_view.Decoration.none; - } - createDecoration(view, suggestionText) { - const cursorPosition = view.state.selection.main.head; - return import_view.Decoration.set([ - import_view.Decoration.widget({ - widget: new SuggestionWidget(suggestionText), - side: 1 - }).range(cursorPosition) - ]); - } - }, - { decorations: (v2) => v2.decorations } -); -var createDebouncedFetcher = (fetch3, getDelay) => { - let activeRequest = true; - let timeoutId; - const throttledFetch = async function* (state) { - clearTimeout(timeoutId); - activeRequest = true; - await new Promise((resolve2) => { - timeoutId = setTimeout(resolve2, getDelay()); - }); - if (activeRequest) - yield* fetch3(state); - }; - const fetcherPlugin = import_view.ViewPlugin.fromClass( - class { - constructor() { - this.currentRequestId = 0; - } - async update(update) { - const state = update.state; - if (!update.docChanged || state.field(suggestionSessionState).remainingText) - return; - const requestId = ++this.currentRequestId; - for await (const suggestion of throttledFetch(state)) { - if (requestId !== this.currentRequestId) - return; - update.view.dispatch({ - effects: SuggestionUpdateEffect.of({ - content: suggestion.text, - document: state.doc, - anchor: state.selection.main.head - }) - }); - } - } - } - ); - return { - fetcherPlugin, - terminate: () => { - activeRequest = false; - clearTimeout(timeoutId); - } - }; -}; -var createAcceptanceHandler = (terminateFetch, hotkey, getOptions) => import_state.Prec.highest( - import_view.keymap.of([ - { - key: hotkey, - run: (view) => { - var _a2; - const session = view.state.field(suggestionSessionState); - if (!session.remainingText) - return false; - const dynamicOptions = getOptions(); - const segmentationKey = (_a2 = dynamicOptions.splitStrategy) != null ? _a2 : "word"; - const { accepted, remaining } = TextSplitStrategies[segmentationKey](session.remainingText); - if (!accepted) - return false; - view.dispatch({ - ...insertCompletion(view.state, accepted), - effects: SuggestionUpdateEffect.of({ - content: remaining || null, - document: remaining ? session.baselineDocument : null, - anchor: remaining ? session.anchorPosition + accepted.length : null - }) - }); - if (!remaining) - terminateFetch(); - return true; - } - } - ]) -); -var insertCompletion = (state, text) => { - const cursorPos = state.selection.main.head; - return { - ...state.changeByRange(() => ({ - changes: { from: cursorPos, insert: text }, - range: import_state.EditorSelection.cursor(cursorPos + text.length) - })), - userEvent: "completion.accept" - }; -}; -function inlineSuggestions(config) { - const { fetchFunc, getOptions } = config; - const staticHotkey = config.acceptanceHotkey || "Tab"; - const normalizeFetch = async function* (state) { - const result = await fetchFunc(state); - if (Symbol.asyncIterator in result) { - yield* result; - } else { - yield result; - } - }; - const getDelay = () => { - var _a2; - return (_a2 = getOptions().delayMs) != null ? _a2 : 300; - }; - const { fetcherPlugin, terminate } = createDebouncedFetcher(normalizeFetch, getDelay); - const acceptanceHandler = createAcceptanceHandler(terminate, staticHotkey, getOptions); - return [ - suggestionSessionState, - fetcherPlugin, - suggestionRenderer, - acceptanceHandler - ]; -} - -// node_modules/ollama/dist/index.mjs -var import_node_fs = __toESM(require("fs"), 1); -var import_node_path = require("path"); - -// node_modules/ollama/dist/browser.mjs -var import_whatwg_fetch = __toESM(require_fetch_umd(), 1); -var version = "0.5.14"; -var defaultPort = "11434"; -var defaultHost = `http://127.0.0.1:${defaultPort}`; -var __defProp$1 = Object.defineProperty; -var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __publicField$1 = (obj, key, value) => { - __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var ResponseError = class extends Error { - constructor(error, status_code) { - super(error); - this.error = error; - this.status_code = status_code; - this.name = "ResponseError"; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, ResponseError); - } - } -}; -var AbortableAsyncIterator = class { - constructor(abortController, itr, doneCallback) { - __publicField$1(this, "abortController"); - __publicField$1(this, "itr"); - __publicField$1(this, "doneCallback"); - this.abortController = abortController; - this.itr = itr; - this.doneCallback = doneCallback; - } - abort() { - this.abortController.abort(); - } - async *[Symbol.asyncIterator]() { - for await (const message of this.itr) { - if ("error" in message) { - throw new Error(message.error); - } - yield message; - if (message.done || message.status === "success") { - this.doneCallback(); - return; - } - } - throw new Error("Did not receive done or success response in stream."); - } -}; -var checkOk = async (response) => { - var _a2; - if (response.ok) { - return; - } - let message = `Error ${response.status}: ${response.statusText}`; - let errorData = null; - if ((_a2 = response.headers.get("content-type")) == null ? void 0 : _a2.includes("application/json")) { - try { - errorData = await response.json(); - message = errorData.error || message; - } catch (error) { - console.log("Failed to parse error response as JSON"); - } - } else { - try { - console.log("Getting text from response"); - const textResponse = await response.text(); - message = textResponse || message; - } catch (error) { - console.log("Failed to get text from error response"); - } - } - throw new ResponseError(message, response.status); -}; -function getPlatform() { - var _a2; - if (typeof window !== "undefined" && window.navigator) { - const nav = navigator; - if ("userAgentData" in nav && ((_a2 = nav.userAgentData) == null ? void 0 : _a2.platform)) { - return `${nav.userAgentData.platform.toLowerCase()} Browser/${navigator.userAgent};`; - } - if (navigator.platform) { - return `${navigator.platform.toLowerCase()} Browser/${navigator.userAgent};`; - } - return `unknown Browser/${navigator.userAgent};`; - } else if (typeof process !== "undefined") { - return `${process.arch} ${process.platform} Node.js/${process.version}`; - } - return ""; -} -function normalizeHeaders(headers) { - if (headers instanceof Headers) { - const obj = {}; - headers.forEach((value, key) => { - obj[key] = value; - }); - return obj; - } else if (Array.isArray(headers)) { - return Object.fromEntries(headers); - } else { - return headers || {}; - } -} -var fetchWithHeaders = async (fetch3, url, options = {}) => { - const defaultHeaders = { - "Content-Type": "application/json", - Accept: "application/json", - "User-Agent": `ollama-js/${version} (${getPlatform()})` - }; - options.headers = normalizeHeaders(options.headers); - const customHeaders = Object.fromEntries( - Object.entries(options.headers).filter(([key]) => !Object.keys(defaultHeaders).some((defaultKey) => defaultKey.toLowerCase() === key.toLowerCase())) - ); - options.headers = { - ...defaultHeaders, - ...customHeaders - }; - return fetch3(url, options); -}; -var get = async (fetch3, host, options) => { - const response = await fetchWithHeaders(fetch3, host, { - headers: options == null ? void 0 : options.headers - }); - await checkOk(response); - return response; -}; -var post = async (fetch3, host, data, options) => { - const isRecord = (input) => { - return input !== null && typeof input === "object" && !Array.isArray(input); - }; - const formattedData = isRecord(data) ? JSON.stringify(data) : data; - const response = await fetchWithHeaders(fetch3, host, { - method: "POST", - body: formattedData, - signal: options == null ? void 0 : options.signal, - headers: options == null ? void 0 : options.headers - }); - await checkOk(response); - return response; -}; -var del = async (fetch3, host, data, options) => { - const response = await fetchWithHeaders(fetch3, host, { - method: "DELETE", - body: JSON.stringify(data), - headers: options == null ? void 0 : options.headers - }); - await checkOk(response); - return response; -}; -var parseJSON = async function* (itr) { - var _a2; - const decoder = new TextDecoder("utf-8"); - let buffer = ""; - const reader = itr.getReader(); - while (true) { - const { done, value: chunk } = await reader.read(); - if (done) { - break; - } - buffer += decoder.decode(chunk); - const parts = buffer.split("\n"); - buffer = (_a2 = parts.pop()) != null ? _a2 : ""; - for (const part of parts) { - try { - yield JSON.parse(part); - } catch (error) { - console.warn("invalid json: ", part); - } - } - } - for (const part of buffer.split("\n").filter((p3) => p3 !== "")) { - try { - yield JSON.parse(part); - } catch (error) { - console.warn("invalid json: ", part); - } - } -}; -var formatHost = (host) => { - if (!host) { - return defaultHost; - } - let isExplicitProtocol = host.includes("://"); - if (host.startsWith(":")) { - host = `http://127.0.0.1${host}`; - isExplicitProtocol = true; - } - if (!isExplicitProtocol) { - host = `http://${host}`; - } - const url = new URL(host); - let port = url.port; - if (!port) { - if (!isExplicitProtocol) { - port = defaultPort; - } else { - port = url.protocol === "https:" ? "443" : "80"; - } - } - let formattedHost = `${url.protocol}//${url.hostname}:${port}${url.pathname}`; - if (formattedHost.endsWith("/")) { - formattedHost = formattedHost.slice(0, -1); - } - return formattedHost; -}; -var __defProp2 = Object.defineProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Ollama$1 = class Ollama { - constructor(config) { - var _a2, _b; - __publicField(this, "config"); - __publicField(this, "fetch"); - __publicField(this, "ongoingStreamedRequests", []); - this.config = { - host: "", - headers: config == null ? void 0 : config.headers - }; - if (!(config == null ? void 0 : config.proxy)) { - this.config.host = formatHost((_a2 = config == null ? void 0 : config.host) != null ? _a2 : defaultHost); - } - this.fetch = (_b = config == null ? void 0 : config.fetch) != null ? _b : fetch; - } - // Abort any ongoing streamed requests to Ollama - abort() { - for (const request of this.ongoingStreamedRequests) { - request.abort(); - } - this.ongoingStreamedRequests.length = 0; - } - /** - * Processes a request to the Ollama server. If the request is streamable, it will return a - * AbortableAsyncIterator that yields the response messages. Otherwise, it will return the response - * object. - * @param endpoint {string} - The endpoint to send the request to. - * @param request {object} - The request object to send to the endpoint. - * @protected {T | AbortableAsyncIterator} - The response object or a AbortableAsyncIterator that yields - * response messages. - * @throws {Error} - If the response body is missing or if the response is an error. - * @returns {Promise>} - The response object or a AbortableAsyncIterator that yields the streamed response. - */ - async processStreamableRequest(endpoint, request) { - var _a2; - request.stream = (_a2 = request.stream) != null ? _a2 : false; - const host = `${this.config.host}/api/${endpoint}`; - if (request.stream) { - const abortController = new AbortController(); - const response2 = await post(this.fetch, host, request, { - signal: abortController.signal, - headers: this.config.headers - }); - if (!response2.body) { - throw new Error("Missing body"); - } - const itr = parseJSON(response2.body); - const abortableAsyncIterator = new AbortableAsyncIterator( - abortController, - itr, - () => { - const i4 = this.ongoingStreamedRequests.indexOf(abortableAsyncIterator); - if (i4 > -1) { - this.ongoingStreamedRequests.splice(i4, 1); - } - } - ); - this.ongoingStreamedRequests.push(abortableAsyncIterator); - return abortableAsyncIterator; - } - const response = await post(this.fetch, host, request, { - headers: this.config.headers - }); - return await response.json(); - } - /** - * Encodes an image to base64 if it is a Uint8Array. - * @param image {Uint8Array | string} - The image to encode. - * @returns {Promise} - The base64 encoded image. - */ - async encodeImage(image) { - if (typeof image !== "string") { - const uint8Array = new Uint8Array(image); - let byteString = ""; - const len = uint8Array.byteLength; - for (let i4 = 0; i4 < len; i4++) { - byteString += String.fromCharCode(uint8Array[i4]); - } - return btoa(byteString); - } - return image; - } - /** - * Generates a response from a text prompt. - * @param request {GenerateRequest} - The request object. - * @returns {Promise>} - The response object or - * an AbortableAsyncIterator that yields response messages. - */ - async generate(request) { - if (request.images) { - request.images = await Promise.all(request.images.map(this.encodeImage.bind(this))); - } - return this.processStreamableRequest("generate", request); - } - /** - * Chats with the model. The request object can contain messages with images that are either - * Uint8Arrays or base64 encoded strings. The images will be base64 encoded before sending the - * request. - * @param request {ChatRequest} - The request object. - * @returns {Promise>} - The response object or an - * AbortableAsyncIterator that yields response messages. - */ - async chat(request) { - if (request.messages) { - for (const message of request.messages) { - if (message.images) { - message.images = await Promise.all( - message.images.map(this.encodeImage.bind(this)) - ); - } - } - } - return this.processStreamableRequest("chat", request); - } - /** - * Creates a new model from a stream of data. - * @param request {CreateRequest} - The request object. - * @returns {Promise>} - The response object or a stream of progress responses. - */ - async create(request) { - return this.processStreamableRequest("create", { - ...request - }); - } - /** - * Pulls a model from the Ollama registry. The request object can contain a stream flag to indicate if the - * response should be streamed. - * @param request {PullRequest} - The request object. - * @returns {Promise>} - The response object or - * an AbortableAsyncIterator that yields response messages. - */ - async pull(request) { - return this.processStreamableRequest("pull", { - name: request.model, - stream: request.stream, - insecure: request.insecure - }); - } - /** - * Pushes a model to the Ollama registry. The request object can contain a stream flag to indicate if the - * response should be streamed. - * @param request {PushRequest} - The request object. - * @returns {Promise>} - The response object or - * an AbortableAsyncIterator that yields response messages. - */ - async push(request) { - return this.processStreamableRequest("push", { - name: request.model, - stream: request.stream, - insecure: request.insecure - }); - } - /** - * Deletes a model from the server. The request object should contain the name of the model to - * delete. - * @param request {DeleteRequest} - The request object. - * @returns {Promise} - The response object. - */ - async delete(request) { - await del( - this.fetch, - `${this.config.host}/api/delete`, - { name: request.model }, - { headers: this.config.headers } - ); - return { status: "success" }; - } - /** - * Copies a model from one name to another. The request object should contain the name of the - * model to copy and the new name. - * @param request {CopyRequest} - The request object. - * @returns {Promise} - The response object. - */ - async copy(request) { - await post(this.fetch, `${this.config.host}/api/copy`, { ...request }, { - headers: this.config.headers - }); - return { status: "success" }; - } - /** - * Lists the models on the server. - * @returns {Promise} - The response object. - * @throws {Error} - If the response body is missing. - */ - async list() { - const response = await get(this.fetch, `${this.config.host}/api/tags`, { - headers: this.config.headers - }); - return await response.json(); - } - /** - * Shows the metadata of a model. The request object should contain the name of the model. - * @param request {ShowRequest} - The request object. - * @returns {Promise} - The response object. - */ - async show(request) { - const response = await post(this.fetch, `${this.config.host}/api/show`, { - ...request - }, { - headers: this.config.headers - }); - return await response.json(); - } - /** - * Embeds text input into vectors. - * @param request {EmbedRequest} - The request object. - * @returns {Promise} - The response object. - */ - async embed(request) { - const response = await post(this.fetch, `${this.config.host}/api/embed`, { - ...request - }, { - headers: this.config.headers - }); - return await response.json(); - } - /** - * Embeds a text prompt into a vector. - * @param request {EmbeddingsRequest} - The request object. - * @returns {Promise} - The response object. - */ - async embeddings(request) { - const response = await post(this.fetch, `${this.config.host}/api/embeddings`, { - ...request - }, { - headers: this.config.headers - }); - return await response.json(); - } - /** - * Lists the running models on the server - * @returns {Promise} - The response object. - * @throws {Error} - If the response body is missing. - */ - async ps() { - const response = await get(this.fetch, `${this.config.host}/api/ps`, { - headers: this.config.headers - }); - return await response.json(); - } -}; -var browser = new Ollama$1(); - -// node_modules/ollama/dist/index.mjs -var import_whatwg_fetch2 = __toESM(require_fetch_umd(), 1); -var Ollama2 = class extends Ollama$1 { - async encodeImage(image) { - if (typeof image !== "string") { - return Buffer.from(image).toString("base64"); - } - try { - if (import_node_fs.default.existsSync(image)) { - const fileBuffer = await import_node_fs.promises.readFile((0, import_node_path.resolve)(image)); - return Buffer.from(fileBuffer).toString("base64"); - } - } catch (e3) { - } - return image; - } - /** - * checks if a file exists - * @param path {string} - The path to the file - * @private @internal - * @returns {Promise} - Whether the file exists or not - */ - async fileExists(path) { - try { - await import_node_fs.promises.access(path); - return true; - } catch (e3) { - return false; - } - } - async create(request) { - if (request.from && await this.fileExists((0, import_node_path.resolve)(request.from))) { - throw Error("Creating with a local path is not currently supported from ollama-js"); - } - if (request.stream) { - return super.create(request); - } else { - return super.create(request); - } - } -}; -var index = new Ollama2(); - -// node_modules/mustache/mustache.mjs -var objectToString = Object.prototype.toString; -var isArray = Array.isArray || function isArrayPolyfill(object) { - return objectToString.call(object) === "[object Array]"; -}; -function isFunction(object) { - return typeof object === "function"; -} -function typeStr(obj) { - return isArray(obj) ? "array" : typeof obj; -} -function escapeRegExp(string) { - return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); -} -function hasProperty(obj, propName) { - return obj != null && typeof obj === "object" && propName in obj; -} -function primitiveHasOwnProperty(primitive, propName) { - return primitive != null && typeof primitive !== "object" && primitive.hasOwnProperty && primitive.hasOwnProperty(propName); -} -var regExpTest = RegExp.prototype.test; -function testRegExp(re2, string) { - return regExpTest.call(re2, string); -} -var nonSpaceRe = /\S/; -function isWhitespace(string) { - return !testRegExp(nonSpaceRe, string); -} -var entityMap = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'", - "/": "/", - "`": "`", - "=": "=" -}; -function escapeHtml(string) { - return String(string).replace(/[&<>"'`=\/]/g, function fromEntityMap(s3) { - return entityMap[s3]; - }); -} -var whiteRe = /\s*/; -var spaceRe = /\s+/; -var equalsRe = /\s*=/; -var curlyRe = /\s*\}/; -var tagRe = /#|\^|\/|>|\{|&|=|!/; -function parseTemplate(template, tags) { - if (!template) - return []; - var lineHasNonSpace = false; - var sections = []; - var tokens = []; - var spaces = []; - var hasTag = false; - var nonSpace = false; - var indentation = ""; - var tagIndex = 0; - function stripSpace() { - if (hasTag && !nonSpace) { - while (spaces.length) - delete tokens[spaces.pop()]; - } else { - spaces = []; - } - hasTag = false; - nonSpace = false; - } - var openingTagRe, closingTagRe, closingCurlyRe; - function compileTags(tagsToCompile) { - if (typeof tagsToCompile === "string") - tagsToCompile = tagsToCompile.split(spaceRe, 2); - if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) - throw new Error("Invalid tags: " + tagsToCompile); - openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + "\\s*"); - closingTagRe = new RegExp("\\s*" + escapeRegExp(tagsToCompile[1])); - closingCurlyRe = new RegExp("\\s*" + escapeRegExp("}" + tagsToCompile[1])); - } - compileTags(tags || mustache.tags); - var scanner = new Scanner(template); - var start2, type, value, chr, token, openSection; - while (!scanner.eos()) { - start2 = scanner.pos; - value = scanner.scanUntil(openingTagRe); - if (value) { - for (var i4 = 0, valueLength = value.length; i4 < valueLength; ++i4) { - chr = value.charAt(i4); - if (isWhitespace(chr)) { - spaces.push(tokens.length); - indentation += chr; - } else { - nonSpace = true; - lineHasNonSpace = true; - indentation += " "; - } - tokens.push(["text", chr, start2, start2 + 1]); - start2 += 1; - if (chr === "\n") { - stripSpace(); - indentation = ""; - tagIndex = 0; - lineHasNonSpace = false; - } - } - } - if (!scanner.scan(openingTagRe)) - break; - hasTag = true; - type = scanner.scan(tagRe) || "name"; - scanner.scan(whiteRe); - if (type === "=") { - value = scanner.scanUntil(equalsRe); - scanner.scan(equalsRe); - scanner.scanUntil(closingTagRe); - } else if (type === "{") { - value = scanner.scanUntil(closingCurlyRe); - scanner.scan(curlyRe); - scanner.scanUntil(closingTagRe); - type = "&"; - } else { - value = scanner.scanUntil(closingTagRe); - } - if (!scanner.scan(closingTagRe)) - throw new Error("Unclosed tag at " + scanner.pos); - if (type == ">") { - token = [type, value, start2, scanner.pos, indentation, tagIndex, lineHasNonSpace]; - } else { - token = [type, value, start2, scanner.pos]; - } - tagIndex++; - tokens.push(token); - if (type === "#" || type === "^") { - sections.push(token); - } else if (type === "/") { - openSection = sections.pop(); - if (!openSection) - throw new Error('Unopened section "' + value + '" at ' + start2); - if (openSection[1] !== value) - throw new Error('Unclosed section "' + openSection[1] + '" at ' + start2); - } else if (type === "name" || type === "{" || type === "&") { - nonSpace = true; - } else if (type === "=") { - compileTags(value); - } - } - stripSpace(); - openSection = sections.pop(); - if (openSection) - throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos); - return nestTokens(squashTokens(tokens)); -} -function squashTokens(tokens) { - var squashedTokens = []; - var token, lastToken; - for (var i4 = 0, numTokens = tokens.length; i4 < numTokens; ++i4) { - token = tokens[i4]; - if (token) { - if (token[0] === "text" && lastToken && lastToken[0] === "text") { - lastToken[1] += token[1]; - lastToken[3] = token[3]; - } else { - squashedTokens.push(token); - lastToken = token; - } - } - } - return squashedTokens; -} -function nestTokens(tokens) { - var nestedTokens = []; - var collector = nestedTokens; - var sections = []; - var token, section; - for (var i4 = 0, numTokens = tokens.length; i4 < numTokens; ++i4) { - token = tokens[i4]; - switch (token[0]) { - case "#": - case "^": - collector.push(token); - sections.push(token); - collector = token[4] = []; - break; - case "/": - section = sections.pop(); - section[5] = token[2]; - collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens; - break; - default: - collector.push(token); - } - } - return nestedTokens; -} -function Scanner(string) { - this.string = string; - this.tail = string; - this.pos = 0; -} -Scanner.prototype.eos = function eos() { - return this.tail === ""; -}; -Scanner.prototype.scan = function scan(re2) { - var match2 = this.tail.match(re2); - if (!match2 || match2.index !== 0) - return ""; - var string = match2[0]; - this.tail = this.tail.substring(string.length); - this.pos += string.length; - return string; -}; -Scanner.prototype.scanUntil = function scanUntil(re2) { - var index4 = this.tail.search(re2), match2; - switch (index4) { - case -1: - match2 = this.tail; - this.tail = ""; - break; - case 0: - match2 = ""; - break; - default: - match2 = this.tail.substring(0, index4); - this.tail = this.tail.substring(index4); - } - this.pos += match2.length; - return match2; -}; -function Context(view, parentContext) { - this.view = view; - this.cache = { ".": this.view }; - this.parent = parentContext; -} -Context.prototype.push = function push(view) { - return new Context(view, this); -}; -Context.prototype.lookup = function lookup(name) { - var cache = this.cache; - var value; - if (cache.hasOwnProperty(name)) { - value = cache[name]; - } else { - var context = this, intermediateValue, names, index4, lookupHit = false; - while (context) { - if (name.indexOf(".") > 0) { - intermediateValue = context.view; - names = name.split("."); - index4 = 0; - while (intermediateValue != null && index4 < names.length) { - if (index4 === names.length - 1) - lookupHit = hasProperty(intermediateValue, names[index4]) || primitiveHasOwnProperty(intermediateValue, names[index4]); - intermediateValue = intermediateValue[names[index4++]]; - } - } else { - intermediateValue = context.view[name]; - lookupHit = hasProperty(context.view, name); - } - if (lookupHit) { - value = intermediateValue; - break; - } - context = context.parent; - } - cache[name] = value; - } - if (isFunction(value)) - value = value.call(this.view); - return value; -}; -function Writer() { - this.templateCache = { - _cache: {}, - set: function set(key, value) { - this._cache[key] = value; - }, - get: function get2(key) { - return this._cache[key]; - }, - clear: function clear() { - this._cache = {}; - } - }; -} -Writer.prototype.clearCache = function clearCache() { - if (typeof this.templateCache !== "undefined") { - this.templateCache.clear(); - } -}; -Writer.prototype.parse = function parse(template, tags) { - var cache = this.templateCache; - var cacheKey = template + ":" + (tags || mustache.tags).join(":"); - var isCacheEnabled = typeof cache !== "undefined"; - var tokens = isCacheEnabled ? cache.get(cacheKey) : void 0; - if (tokens == void 0) { - tokens = parseTemplate(template, tags); - isCacheEnabled && cache.set(cacheKey, tokens); - } - return tokens; -}; -Writer.prototype.render = function render(template, view, partials, config) { - var tags = this.getConfigTags(config); - var tokens = this.parse(template, tags); - var context = view instanceof Context ? view : new Context(view, void 0); - return this.renderTokens(tokens, context, partials, template, config); -}; -Writer.prototype.renderTokens = function renderTokens(tokens, context, partials, originalTemplate, config) { - var buffer = ""; - var token, symbol, value; - for (var i4 = 0, numTokens = tokens.length; i4 < numTokens; ++i4) { - value = void 0; - token = tokens[i4]; - symbol = token[0]; - if (symbol === "#") - value = this.renderSection(token, context, partials, originalTemplate, config); - else if (symbol === "^") - value = this.renderInverted(token, context, partials, originalTemplate, config); - else if (symbol === ">") - value = this.renderPartial(token, context, partials, config); - else if (symbol === "&") - value = this.unescapedValue(token, context); - else if (symbol === "name") - value = this.escapedValue(token, context, config); - else if (symbol === "text") - value = this.rawValue(token); - if (value !== void 0) - buffer += value; - } - return buffer; -}; -Writer.prototype.renderSection = function renderSection(token, context, partials, originalTemplate, config) { - var self2 = this; - var buffer = ""; - var value = context.lookup(token[1]); - function subRender(template) { - return self2.render(template, context, partials, config); - } - if (!value) - return; - if (isArray(value)) { - for (var j3 = 0, valueLength = value.length; j3 < valueLength; ++j3) { - buffer += this.renderTokens(token[4], context.push(value[j3]), partials, originalTemplate, config); - } - } else if (typeof value === "object" || typeof value === "string" || typeof value === "number") { - buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config); - } else if (isFunction(value)) { - if (typeof originalTemplate !== "string") - throw new Error("Cannot use higher-order sections without the original template"); - value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender); - if (value != null) - buffer += value; - } else { - buffer += this.renderTokens(token[4], context, partials, originalTemplate, config); - } - return buffer; -}; -Writer.prototype.renderInverted = function renderInverted(token, context, partials, originalTemplate, config) { - var value = context.lookup(token[1]); - if (!value || isArray(value) && value.length === 0) - return this.renderTokens(token[4], context, partials, originalTemplate, config); -}; -Writer.prototype.indentPartial = function indentPartial(partial, indentation, lineHasNonSpace) { - var filteredIndentation = indentation.replace(/[^ \t]/g, ""); - var partialByNl = partial.split("\n"); - for (var i4 = 0; i4 < partialByNl.length; i4++) { - if (partialByNl[i4].length && (i4 > 0 || !lineHasNonSpace)) { - partialByNl[i4] = filteredIndentation + partialByNl[i4]; - } - } - return partialByNl.join("\n"); -}; -Writer.prototype.renderPartial = function renderPartial(token, context, partials, config) { - if (!partials) - return; - var tags = this.getConfigTags(config); - var value = isFunction(partials) ? partials(token[1]) : partials[token[1]]; - if (value != null) { - var lineHasNonSpace = token[6]; - var tagIndex = token[5]; - var indentation = token[4]; - var indentedValue = value; - if (tagIndex == 0 && indentation) { - indentedValue = this.indentPartial(value, indentation, lineHasNonSpace); - } - var tokens = this.parse(indentedValue, tags); - return this.renderTokens(tokens, context, partials, indentedValue, config); - } -}; -Writer.prototype.unescapedValue = function unescapedValue(token, context) { - var value = context.lookup(token[1]); - if (value != null) - return value; -}; -Writer.prototype.escapedValue = function escapedValue(token, context, config) { - var escape2 = this.getConfigEscape(config) || mustache.escape; - var value = context.lookup(token[1]); - if (value != null) - return typeof value === "number" && escape2 === mustache.escape ? String(value) : escape2(value); -}; -Writer.prototype.rawValue = function rawValue(token) { - return token[1]; -}; -Writer.prototype.getConfigTags = function getConfigTags(config) { - if (isArray(config)) { - return config; - } else if (config && typeof config === "object") { - return config.tags; - } else { - return void 0; - } -}; -Writer.prototype.getConfigEscape = function getConfigEscape(config) { - if (config && typeof config === "object" && !isArray(config)) { - return config.escape; - } else { - return void 0; - } -}; -var mustache = { - name: "mustache.js", - version: "4.2.0", - tags: ["{{", "}}"], - clearCache: void 0, - escape: void 0, - parse: void 0, - render: void 0, - Scanner: void 0, - Context: void 0, - Writer: void 0, - /** - * Allows a user to override the default caching strategy, by providing an - * object with set, get and clear methods. This can also be used to disable - * the cache by setting it to the literal `undefined`. - */ - set templateCache(cache) { - defaultWriter.templateCache = cache; - }, - /** - * Gets the default or overridden caching object from the default writer. - */ - get templateCache() { - return defaultWriter.templateCache; - } -}; -var defaultWriter = new Writer(); -mustache.clearCache = function clearCache2() { - return defaultWriter.clearCache(); -}; -mustache.parse = function parse2(template, tags) { - return defaultWriter.parse(template, tags); -}; -mustache.render = function render2(template, view, partials, config) { - if (typeof template !== "string") { - throw new TypeError('Invalid template! Template should be a "string" but "' + typeStr(template) + '" was given as the first argument for mustache#render(template, view, partials)'); - } - return defaultWriter.render(template, view, partials, config); -}; -mustache.escape = escapeHtml; -mustache.Scanner = Scanner; -mustache.Context = Context; -mustache.Writer = Writer; -var mustache_default = mustache; - -// node_modules/compromise/src/API/world.js -var methods = { - one: {}, - two: {}, - three: {}, - four: {} -}; -var model = { - one: {}, - two: {}, - three: {} -}; -var compute = {}; -var hooks = []; -var world_default = { methods, model, compute, hooks }; - -// node_modules/compromise/src/API/methods/compute.js -var isArray2 = (input) => Object.prototype.toString.call(input) === "[object Array]"; -var fns = { - /** add metadata to term objects */ - compute: function(input) { - const { world: world2 } = this; - const compute4 = world2.compute; - if (typeof input === "string" && compute4.hasOwnProperty(input)) { - compute4[input](this); - } else if (isArray2(input)) { - input.forEach((name) => { - if (world2.compute.hasOwnProperty(name)) { - compute4[name](this); - } else { - console.warn("no compute:", input); - } - }); - } else if (typeof input === "function") { - input(this); - } else { - console.warn("no compute:", input); - } - return this; - } -}; -var compute_default = fns; - -// node_modules/compromise/src/API/methods/loops.js -var forEach = function(cb) { - let ptrs = this.fullPointer; - ptrs.forEach((ptr, i4) => { - let view = this.update([ptr]); - cb(view, i4); - }); - return this; -}; -var map = function(cb, empty) { - let ptrs = this.fullPointer; - let res = ptrs.map((ptr, i4) => { - let view = this.update([ptr]); - let out2 = cb(view, i4); - if (out2 === void 0) { - return this.none(); - } - return out2; - }); - if (res.length === 0) { - return empty || this.update([]); - } - if (res[0] !== void 0) { - if (typeof res[0] === "string") { - return res; - } - if (typeof res[0] === "object" && (res[0] === null || !res[0].isView)) { - return res; - } - } - let all = []; - res.forEach((ptr) => { - all = all.concat(ptr.fullPointer); - }); - return this.toView(all); -}; -var filter = function(cb) { - let ptrs = this.fullPointer; - ptrs = ptrs.filter((ptr, i4) => { - let view = this.update([ptr]); - return cb(view, i4); - }); - let res = this.update(ptrs); - return res; -}; -var find = function(cb) { - let ptrs = this.fullPointer; - let found = ptrs.find((ptr, i4) => { - let view = this.update([ptr]); - return cb(view, i4); - }); - return this.update([found]); -}; -var some = function(cb) { - let ptrs = this.fullPointer; - return ptrs.some((ptr, i4) => { - let view = this.update([ptr]); - return cb(view, i4); - }); -}; -var random = function(n3 = 1) { - let ptrs = this.fullPointer; - let r3 = Math.floor(Math.random() * ptrs.length); - if (r3 + n3 > this.length) { - r3 = this.length - n3; - r3 = r3 < 0 ? 0 : r3; - } - ptrs = ptrs.slice(r3, r3 + n3); - return this.update(ptrs); -}; -var loops_default = { forEach, map, filter, find, some, random }; - -// node_modules/compromise/src/API/methods/utils.js -var utils = { - /** */ - termList: function() { - return this.methods.one.termList(this.docs); - }, - /** return individual terms*/ - terms: function(n3) { - let m2 = this.match("."); - return typeof n3 === "number" ? m2.eq(n3) : m2; - }, - /** */ - groups: function(group) { - if (group || group === 0) { - return this.update(this._groups[group] || []); - } - let res = {}; - Object.keys(this._groups).forEach((k3) => { - res[k3] = this.update(this._groups[k3]); - }); - return res; - }, - /** */ - eq: function(n3) { - let ptr = this.pointer; - if (!ptr) { - ptr = this.docs.map((_doc, i4) => [i4]); - } - if (ptr[n3]) { - return this.update([ptr[n3]]); - } - return this.none(); - }, - /** */ - first: function() { - return this.eq(0); - }, - /** */ - last: function() { - let n3 = this.fullPointer.length - 1; - return this.eq(n3); - }, - /** grab term[0] for every match */ - firstTerms: function() { - return this.match("^."); - }, - /** grab the last term for every match */ - lastTerms: function() { - return this.match(".$"); - }, - /** */ - slice: function(min, max2) { - let pntrs = this.pointer || this.docs.map((_o, n3) => [n3]); - pntrs = pntrs.slice(min, max2); - return this.update(pntrs); - }, - /** return a view of the entire document */ - all: function() { - return this.update().toView(); - }, - /** */ - fullSentences: function() { - let ptrs = this.fullPointer.map((a3) => [a3[0]]); - return this.update(ptrs).toView(); - }, - /** return a view of no parts of the document */ - none: function() { - return this.update([]); - }, - /** are these two views looking at the same words? */ - isDoc: function(b2) { - if (!b2 || !b2.isView) { - return false; - } - let aPtr = this.fullPointer; - let bPtr = b2.fullPointer; - if (!aPtr.length === bPtr.length) { - return false; - } - return aPtr.every((ptr, i4) => { - if (!bPtr[i4]) { - return false; - } - return ptr[0] === bPtr[i4][0] && ptr[1] === bPtr[i4][1] && ptr[2] === bPtr[i4][2]; - }); - }, - /** how many seperate terms does the document have? */ - wordCount: function() { - return this.docs.reduce((count, terms) => { - count += terms.filter((t4) => t4.text !== "").length; - return count; - }, 0); - }, - // is the pointer the full sentence? - isFull: function() { - let ptrs = this.pointer; - if (!ptrs) { - return true; - } - if (ptrs.length === 0 || ptrs[0][0] !== 0) { - return false; - } - let wantTerms = 0; - let haveTerms = 0; - this.document.forEach((terms) => wantTerms += terms.length); - this.docs.forEach((terms) => haveTerms += terms.length); - return wantTerms === haveTerms; - }, - // return the nth elem of a doc - getNth: function(n3) { - if (typeof n3 === "number") { - return this.eq(n3); - } else if (typeof n3 === "string") { - return this.if(n3); - } - return this; - } -}; -utils.group = utils.groups; -utils.fullSentence = utils.fullSentences; -utils.sentence = utils.fullSentences; -utils.lastTerm = utils.lastTerms; -utils.firstTerm = utils.firstTerms; -var utils_default = utils; - -// node_modules/compromise/src/API/methods/index.js -var methods2 = Object.assign({}, utils_default, compute_default, loops_default); -methods2.get = methods2.eq; -var methods_default = methods2; - -// node_modules/compromise/src/API/View.js -var View = class { - constructor(document2, pointer, groups = {}) { - let props = [ - ["document", document2], - ["world", world_default], - ["_groups", groups], - ["_cache", null], - ["viewType", "View"] - ]; - props.forEach((a3) => { - Object.defineProperty(this, a3[0], { - value: a3[1], - writable: true - }); - }); - this.ptrs = pointer; - } - /* getters: */ - get docs() { - let docs = this.document; - if (this.ptrs) { - docs = world_default.methods.one.getDoc(this.ptrs, this.document); - } - return docs; - } - get pointer() { - return this.ptrs; - } - get methods() { - return this.world.methods; - } - get model() { - return this.world.model; - } - get hooks() { - return this.world.hooks; - } - get isView() { - return true; - } - // is the view not-empty? - get found() { - return this.docs.length > 0; - } - // how many matches we have - get length() { - return this.docs.length; - } - // return a more-hackable pointer - get fullPointer() { - let { docs, ptrs, document: document2 } = this; - let pointers = ptrs || docs.map((_d, n3) => [n3]); - return pointers.map((a3) => { - let [n3, start2, end2, id, endId] = a3; - start2 = start2 || 0; - end2 = end2 || (document2[n3] || []).length; - if (document2[n3] && document2[n3][start2]) { - id = id || document2[n3][start2].id; - if (document2[n3][end2 - 1]) { - endId = endId || document2[n3][end2 - 1].id; - } - } - return [n3, start2, end2, id, endId]; - }); - } - // create a new View, from this one - update(pointer) { - let m2 = new View(this.document, pointer); - if (this._cache && pointer && pointer.length > 0) { - let cache = []; - pointer.forEach((ptr, i4) => { - let [n3, start2, end2] = ptr; - if (ptr.length === 1) { - cache[i4] = this._cache[n3]; - } else if (start2 === 0 && this.document[n3].length === end2) { - cache[i4] = this._cache[n3]; - } - }); - if (cache.length > 0) { - m2._cache = cache; - } - } - m2.world = this.world; - return m2; - } - // create a new View, from this one - toView(pointer) { - return new View(this.document, pointer || this.pointer); - } - fromText(input) { - const { methods: methods17 } = this; - let document2 = methods17.one.tokenize.fromString(input, this.world); - let doc = new View(document2); - doc.world = this.world; - doc.compute(["normal", "freeze", "lexicon"]); - if (this.world.compute.preTagger) { - doc.compute("preTagger"); - } - doc.compute("unfreeze"); - return doc; - } - clone() { - let document2 = this.document.slice(0); - document2 = document2.map((terms) => { - return terms.map((term) => { - term = Object.assign({}, term); - term.tags = new Set(term.tags); - return term; - }); - }); - let m2 = this.update(this.pointer); - m2.document = document2; - m2._cache = this._cache; - return m2; - } -}; -Object.assign(View.prototype, methods_default); -var View_default = View; - -// node_modules/compromise/src/_version.js -var version_default = "14.14.4"; - -// node_modules/compromise/src/API/extend.js -var isObject = function(item) { - return item && typeof item === "object" && !Array.isArray(item); -}; -function mergeDeep(model4, plugin2) { - if (isObject(plugin2)) { - for (const key in plugin2) { - if (isObject(plugin2[key])) { - if (!model4[key]) - Object.assign(model4, { [key]: {} }); - mergeDeep(model4[key], plugin2[key]); - } else { - Object.assign(model4, { [key]: plugin2[key] }); - } - } - } - return model4; -} -function mergeQuick(model4, plugin2) { - for (const key in plugin2) { - model4[key] = model4[key] || {}; - Object.assign(model4[key], plugin2[key]); - } - return model4; -} -var addIrregulars = function(model4, conj) { - let m2 = model4.two.models || {}; - Object.keys(conj).forEach((k3) => { - if (conj[k3].pastTense) { - if (m2.toPast) { - m2.toPast.ex[k3] = conj[k3].pastTense; - } - if (m2.fromPast) { - m2.fromPast.ex[conj[k3].pastTense] = k3; - } - } - if (conj[k3].presentTense) { - if (m2.toPresent) { - m2.toPresent.ex[k3] = conj[k3].presentTense; - } - if (m2.fromPresent) { - m2.fromPresent.ex[conj[k3].presentTense] = k3; - } - } - if (conj[k3].gerund) { - if (m2.toGerund) { - m2.toGerund.ex[k3] = conj[k3].gerund; - } - if (m2.fromGerund) { - m2.fromGerund.ex[conj[k3].gerund] = k3; - } - } - if (conj[k3].comparative) { - if (m2.toComparative) { - m2.toComparative.ex[k3] = conj[k3].comparative; - } - if (m2.fromComparative) { - m2.fromComparative.ex[conj[k3].comparative] = k3; - } - } - if (conj[k3].superlative) { - if (m2.toSuperlative) { - m2.toSuperlative.ex[k3] = conj[k3].superlative; - } - if (m2.fromSuperlative) { - m2.fromSuperlative.ex[conj[k3].superlative] = k3; - } - } - }); -}; -var extend = function(plugin2, world2, View2, nlp2) { - const { methods: methods17, model: model4, compute: compute4, hooks: hooks2 } = world2; - if (plugin2.methods) { - mergeQuick(methods17, plugin2.methods); - } - if (plugin2.model) { - mergeDeep(model4, plugin2.model); - } - if (plugin2.irregulars) { - addIrregulars(model4, plugin2.irregulars); - } - if (plugin2.compute) { - Object.assign(compute4, plugin2.compute); - } - if (hooks2) { - world2.hooks = hooks2.concat(plugin2.hooks || []); - } - if (plugin2.api) { - plugin2.api(View2); - } - if (plugin2.lib) { - Object.keys(plugin2.lib).forEach((k3) => nlp2[k3] = plugin2.lib[k3]); - } - if (plugin2.tags) { - nlp2.addTags(plugin2.tags); - } - if (plugin2.words) { - nlp2.addWords(plugin2.words); - } - if (plugin2.frozen) { - nlp2.addWords(plugin2.frozen, true); - } - if (plugin2.mutate) { - plugin2.mutate(world2, nlp2); - } -}; -var extend_default = extend; - -// node_modules/compromise/src/API/_lib.js -var verbose = function(set) { - const env = typeof process === "undefined" || !process.env ? self.env || {} : process.env; - env.DEBUG_TAGS = set === "tagger" || set === true ? true : ""; - env.DEBUG_MATCH = set === "match" || set === true ? true : ""; - env.DEBUG_CHUNKS = set === "chunker" || set === true ? true : ""; - return this; -}; - -// node_modules/compromise/src/API/inputs.js -var isObject2 = (val) => { - return Object.prototype.toString.call(val) === "[object Object]"; -}; -var isArray3 = function(arr) { - return Object.prototype.toString.call(arr) === "[object Array]"; -}; -var fromJson = function(json) { - return json.map((o3) => { - return o3.terms.map((term) => { - if (isArray3(term.tags)) { - term.tags = new Set(term.tags); - } - return term; - }); - }); -}; -var preTokenized = function(arr) { - return arr.map((a3) => { - return a3.map((str2) => { - return { - text: str2, - normal: str2, - //cleanup - pre: "", - post: " ", - tags: /* @__PURE__ */ new Set() - }; - }); - }); -}; -var inputs = function(input, View2, world2) { - const { methods: methods17 } = world2; - let doc = new View2([]); - doc.world = world2; - if (typeof input === "number") { - input = String(input); - } - if (!input) { - return doc; - } - if (typeof input === "string") { - let document2 = methods17.one.tokenize.fromString(input, world2); - return new View2(document2); - } - if (isObject2(input) && input.isView) { - return new View2(input.document, input.ptrs); - } - if (isArray3(input)) { - if (isArray3(input[0])) { - let document3 = preTokenized(input); - return new View2(document3); - } - let document2 = fromJson(input); - return new View2(document2); - } - return doc; -}; -var inputs_default = inputs; - -// node_modules/compromise/src/nlp.js -var world = Object.assign({}, world_default); -var nlp = function(input, lex) { - if (lex) { - nlp.addWords(lex); - } - let doc = inputs_default(input, View_default, world); - if (input) { - doc.compute(world.hooks); - } - return doc; -}; -Object.defineProperty(nlp, "_world", { - value: world, - writable: true -}); -nlp.tokenize = function(input, lex) { - const { compute: compute4 } = this._world; - if (lex) { - nlp.addWords(lex); - } - let doc = inputs_default(input, View_default, world); - if (compute4.contractions) { - doc.compute(["alias", "normal", "machine", "contractions"]); - } - return doc; -}; -nlp.plugin = function(plugin2) { - extend_default(plugin2, this._world, View_default, this); - return this; -}; -nlp.extend = nlp.plugin; -nlp.world = function() { - return this._world; -}; -nlp.model = function() { - return this._world.model; -}; -nlp.methods = function() { - return this._world.methods; -}; -nlp.hooks = function() { - return this._world.hooks; -}; -nlp.verbose = verbose; -nlp.version = version_default; -var nlp_default = nlp; - -// node_modules/compromise/src/1-one/cache/methods/cacheDoc.js -var createCache = function(document2) { - let cache = document2.map((terms) => { - let items = /* @__PURE__ */ new Set(); - terms.forEach((term) => { - if (term.normal !== "") { - items.add(term.normal); - } - if (term.switch) { - items.add(`%${term.switch}%`); - } - if (term.implicit) { - items.add(term.implicit); - } - if (term.machine) { - items.add(term.machine); - } - if (term.root) { - items.add(term.root); - } - if (term.alias) { - term.alias.forEach((str2) => items.add(str2)); - } - let tags = Array.from(term.tags); - for (let t4 = 0; t4 < tags.length; t4 += 1) { - items.add("#" + tags[t4]); - } - }); - return items; - }); - return cache; -}; -var cacheDoc_default = createCache; - -// node_modules/compromise/src/1-one/cache/methods/index.js -var methods_default2 = { - one: { - cacheDoc: cacheDoc_default - } -}; - -// node_modules/compromise/src/1-one/cache/api.js -var methods3 = { - /** */ - cache: function() { - this._cache = this.methods.one.cacheDoc(this.document); - return this; - }, - /** */ - uncache: function() { - this._cache = null; - return this; - } -}; -var addAPI = function(View2) { - Object.assign(View2.prototype, methods3); -}; -var api_default = addAPI; - -// node_modules/compromise/src/1-one/cache/compute.js -var compute_default2 = { - cache: function(view) { - view._cache = view.methods.one.cacheDoc(view.document); - } -}; - -// node_modules/compromise/src/1-one/cache/plugin.js -var plugin_default = { - api: api_default, - compute: compute_default2, - methods: methods_default2 -}; - -// node_modules/compromise/src/1-one/change/api/case.js -var case_default = { - /** */ - toLowerCase: function() { - this.termList().forEach((t4) => { - t4.text = t4.text.toLowerCase(); - }); - return this; - }, - /** */ - toUpperCase: function() { - this.termList().forEach((t4) => { - t4.text = t4.text.toUpperCase(); - }); - return this; - }, - /** */ - toTitleCase: function() { - this.termList().forEach((t4) => { - t4.text = t4.text.replace(/^ *[a-z\u00C0-\u00FF]/, (x2) => x2.toUpperCase()); - }); - return this; - }, - /** */ - toCamelCase: function() { - this.docs.forEach((terms) => { - terms.forEach((t4, i4) => { - if (i4 !== 0) { - t4.text = t4.text.replace(/^ *[a-z\u00C0-\u00FF]/, (x2) => x2.toUpperCase()); - } - if (i4 !== terms.length - 1) { - t4.post = ""; - } - }); - }); - return this; - } -}; - -// node_modules/compromise/src/1-one/change/api/lib/insert.js -var isTitleCase = (str2) => /^\p{Lu}[\p{Ll}'’]/u.test(str2) || /^\p{Lu}$/u.test(str2); -var toTitleCase = (str2) => str2.replace(/^\p{Ll}/u, (x2) => x2.toUpperCase()); -var toLowerCase = (str2) => str2.replace(/^\p{Lu}/u, (x2) => x2.toLowerCase()); -var spliceArr = (parent, index4, child) => { - child.forEach((term) => term.dirty = true); - if (parent) { - let args = [index4, 0].concat(child); - Array.prototype.splice.apply(parent, args); - } - return parent; -}; -var endSpace = function(terms) { - const hasSpace2 = / $/; - const hasDash4 = /[-–—]/; - let lastTerm = terms[terms.length - 1]; - if (lastTerm && !hasSpace2.test(lastTerm.post) && !hasDash4.test(lastTerm.post)) { - lastTerm.post += " "; - } -}; -var movePunct = (source, end2, needle) => { - const juicy = /[-.?!,;:)–—'"]/g; - let wasLast = source[end2 - 1]; - if (!wasLast) { - return; - } - let post2 = wasLast.post; - if (juicy.test(post2)) { - let punct = post2.match(juicy).join(""); - let last = needle[needle.length - 1]; - last.post = punct + last.post; - wasLast.post = wasLast.post.replace(juicy, ""); - } -}; -var moveTitleCase = function(home, start2, needle) { - let from = home[start2]; - if (start2 !== 0 || !isTitleCase(from.text)) { - return; - } - needle[0].text = toTitleCase(needle[0].text); - let old = home[start2]; - if (old.tags.has("ProperNoun") || old.tags.has("Acronym")) { - return; - } - if (isTitleCase(old.text) && old.text.length > 1) { - old.text = toLowerCase(old.text); - } -}; -var cleanPrepend = function(home, ptr, needle, document2) { - let [n3, start2, end2] = ptr; - if (start2 === 0) { - endSpace(needle); - } else if (end2 === document2[n3].length) { - endSpace(needle); - } else { - endSpace(needle); - endSpace([home[ptr[1]]]); - } - moveTitleCase(home, start2, needle); - spliceArr(home, start2, needle); -}; -var cleanAppend = function(home, ptr, needle, document2) { - let [n3, , end2] = ptr; - let total = (document2[n3] || []).length; - if (end2 < total) { - movePunct(home, end2, needle); - endSpace(needle); - } else if (total === end2) { - endSpace(home); - movePunct(home, end2, needle); - if (document2[n3 + 1]) { - needle[needle.length - 1].post += " "; - } - } - spliceArr(home, ptr[2], needle); - ptr[4] = needle[needle.length - 1].id; -}; - -// node_modules/compromise/src/1-one/change/compute/uuid.js -var index2 = 0; -var pad3 = (str2) => { - str2 = str2.length < 3 ? "0" + str2 : str2; - return str2.length < 3 ? "0" + str2 : str2; -}; -var toId = function(term) { - let [n3, i4] = term.index || [0, 0]; - index2 += 1; - index2 = index2 > 46655 ? 0 : index2; - n3 = n3 > 46655 ? 0 : n3; - i4 = i4 > 1294 ? 0 : i4; - let id = pad3(index2.toString(36)); - id += pad3(n3.toString(36)); - let tx = i4.toString(36); - tx = tx.length < 2 ? "0" + tx : tx; - id += tx; - let r3 = parseInt(Math.random() * 36, 10); - id += r3.toString(36); - return term.normal + "|" + id.toUpperCase(); -}; -var uuid_default = toId; - -// node_modules/compromise/src/1-one/change/api/insert.js -var expand = function(m2) { - if (m2.has("@hasContraction") && typeof m2.contractions === "function") { - let more = m2.grow("@hasContraction"); - more.contractions().expand(); - } -}; -var isArray4 = (arr) => Object.prototype.toString.call(arr) === "[object Array]"; -var addIds = function(terms) { - terms = terms.map((term) => { - term.id = uuid_default(term); - return term; - }); - return terms; -}; -var getTerms = function(input, world2) { - const { methods: methods17 } = world2; - if (typeof input === "string") { - return methods17.one.tokenize.fromString(input, world2)[0]; - } - if (typeof input === "object" && input.isView) { - return input.clone().docs[0] || []; - } - if (isArray4(input)) { - return isArray4(input[0]) ? input[0] : input; - } - return []; -}; -var insert = function(input, view, prepend) { - const { document: document2, world: world2 } = view; - view.uncache(); - let ptrs = view.fullPointer; - let selfPtrs = view.fullPointer; - view.forEach((m2, i4) => { - let ptr = m2.fullPointer[0]; - let [n3] = ptr; - let home = document2[n3]; - let terms = getTerms(input, world2); - if (terms.length === 0) { - return; - } - terms = addIds(terms); - if (prepend) { - expand(view.update([ptr]).firstTerm()); - cleanPrepend(home, ptr, terms, document2); - } else { - expand(view.update([ptr]).lastTerm()); - cleanAppend(home, ptr, terms, document2); - } - if (document2[n3] && document2[n3][ptr[1]]) { - ptr[3] = document2[n3][ptr[1]].id; - } - selfPtrs[i4] = ptr; - ptr[2] += terms.length; - ptrs[i4] = ptr; - }); - let doc = view.toView(ptrs); - view.ptrs = selfPtrs; - doc.compute(["id", "index", "freeze", "lexicon"]); - if (doc.world.compute.preTagger) { - doc.compute("preTagger"); - } - doc.compute("unfreeze"); - return doc; -}; -var fns2 = { - insertAfter: function(input) { - return insert(input, this, false); - }, - insertBefore: function(input) { - return insert(input, this, true); - } -}; -fns2.append = fns2.insertAfter; -fns2.prepend = fns2.insertBefore; -fns2.insert = fns2.insertAfter; -var insert_default = fns2; - -// node_modules/compromise/src/1-one/change/api/replace.js -var dollarStub = /\$[0-9a-z]+/g; -var fns3 = {}; -var isTitleCase2 = (str2) => /^\p{Lu}[\p{Ll}'’]/u.test(str2) || /^\p{Lu}$/u.test(str2); -var toTitleCase2 = (str2) => str2.replace(/^\p{Ll}/u, (x2) => x2.toUpperCase()); -var toLowerCase2 = (str2) => str2.replace(/^\p{Lu}/u, (x2) => x2.toLowerCase()); -var replaceByFn = function(main, fn, keep) { - main.forEach((m2) => { - let out2 = fn(m2); - m2.replaceWith(out2, keep); - }); - return main; -}; -var subDollarSign = function(input, main) { - if (typeof input !== "string") { - return input; - } - let groups = main.groups(); - input = input.replace(dollarStub, (a3) => { - let num = a3.replace(/\$/, ""); - if (groups.hasOwnProperty(num)) { - return groups[num].text(); - } - return a3; - }); - return input; -}; -fns3.replaceWith = function(input, keep = {}) { - let ptrs = this.fullPointer; - let main = this; - this.uncache(); - if (typeof input === "function") { - return replaceByFn(main, input, keep); - } - let terms = main.docs[0]; - if (!terms) - return main; - let isOriginalPossessive = keep.possessives && terms[terms.length - 1].tags.has("Possessive"); - let isOriginalTitleCase = keep.case && isTitleCase2(terms[0].text); - input = subDollarSign(input, main); - let original = this.update(ptrs); - ptrs = ptrs.map((ptr) => ptr.slice(0, 3)); - let oldTags = (original.docs[0] || []).map((term) => Array.from(term.tags)); - let originalPre = original.docs[0][0].pre; - let originalPost = original.docs[0][original.docs[0].length - 1].post; - if (typeof input === "string") { - input = this.fromText(input).compute("id"); - } - main.insertAfter(input); - if (original.has("@hasContraction") && main.contractions) { - let more = main.grow("@hasContraction+"); - more.contractions().expand(); - } - main.delete(original); - if (isOriginalPossessive) { - let tmp = main.docs[0]; - let term = tmp[tmp.length - 1]; - if (!term.tags.has("Possessive")) { - term.text += "'s"; - term.normal += "'s"; - term.tags.add("Possessive"); - } - } - if (originalPre && main.docs[0]) { - main.docs[0][0].pre = originalPre; - } - if (originalPost && main.docs[0]) { - let lastOne = main.docs[0][main.docs[0].length - 1]; - if (!lastOne.post.trim()) { - lastOne.post = originalPost; - } - } - let m2 = main.toView(ptrs).compute(["index", "freeze", "lexicon"]); - if (m2.world.compute.preTagger) { - m2.compute("preTagger"); - } - m2.compute("unfreeze"); - if (keep.tags) { - m2.terms().forEach((term, i4) => { - term.tagSafe(oldTags[i4]); - }); - } - if (!m2.docs[0] || !m2.docs[0][0]) - return m2; - if (keep.case) { - let transformCase = isOriginalTitleCase ? toTitleCase2 : toLowerCase2; - m2.docs[0][0].text = transformCase(m2.docs[0][0].text); - } - return m2; -}; -fns3.replace = function(match2, input, keep) { - if (match2 && !input) { - return this.replaceWith(match2, keep); - } - let m2 = this.match(match2); - if (!m2.found) { - return this; - } - this.soften(); - return m2.replaceWith(input, keep); -}; -var replace_default = fns3; - -// node_modules/compromise/src/1-one/change/api/lib/remove.js -var repairPunct = function(terms, len) { - let last = terms.length - 1; - let from = terms[last]; - let to = terms[last - len]; - if (to && from) { - to.post += from.post; - to.post = to.post.replace(/ +([.?!,;:])/, "$1"); - to.post = to.post.replace(/[,;:]+([.?!])/, "$1"); - } -}; -var pluckOut = function(document2, nots) { - nots.forEach((ptr) => { - let [n3, start2, end2] = ptr; - let len = end2 - start2; - if (!document2[n3]) { - return; - } - if (end2 === document2[n3].length && end2 > 1) { - repairPunct(document2[n3], len); - } - document2[n3].splice(start2, len); - }); - for (let i4 = document2.length - 1; i4 >= 0; i4 -= 1) { - if (document2[i4].length === 0) { - document2.splice(i4, 1); - if (i4 === document2.length && document2[i4 - 1]) { - let terms = document2[i4 - 1]; - let lastTerm = terms[terms.length - 1]; - if (lastTerm) { - lastTerm.post = lastTerm.post.trimEnd(); - } - } - } - } - return document2; -}; -var remove_default = pluckOut; - -// node_modules/compromise/src/1-one/change/api/remove.js -var fixPointers = function(ptrs, gonePtrs) { - ptrs = ptrs.map((ptr) => { - let [n3] = ptr; - if (!gonePtrs[n3]) { - return ptr; - } - gonePtrs[n3].forEach((no) => { - let len = no[2] - no[1]; - if (ptr[1] <= no[1] && ptr[2] >= no[2]) { - ptr[2] -= len; - } - }); - return ptr; - }); - ptrs.forEach((ptr, i4) => { - if (ptr[1] === 0 && ptr[2] == 0) { - for (let n3 = i4 + 1; n3 < ptrs.length; n3 += 1) { - ptrs[n3][0] -= 1; - if (ptrs[n3][0] < 0) { - ptrs[n3][0] = 0; - } - } - } - }); - ptrs = ptrs.filter((ptr) => ptr[2] - ptr[1] > 0); - ptrs = ptrs.map((ptr) => { - ptr[3] = null; - ptr[4] = null; - return ptr; - }); - return ptrs; -}; -var methods4 = { - /** */ - remove: function(reg) { - const { indexN: indexN2 } = this.methods.one.pointer; - this.uncache(); - let self2 = this.all(); - let not = this; - if (reg) { - self2 = this; - not = this.match(reg); - } - let isFull = !self2.ptrs; - if (not.has("@hasContraction") && not.contractions) { - let more = not.grow("@hasContraction"); - more.contractions().expand(); - } - let ptrs = self2.fullPointer; - let nots = not.fullPointer.reverse(); - let document2 = remove_default(this.document, nots); - let gonePtrs = indexN2(nots); - ptrs = fixPointers(ptrs, gonePtrs); - self2.ptrs = ptrs; - self2.document = document2; - self2.compute("index"); - if (isFull) { - self2.ptrs = void 0; - } - if (!reg) { - this.ptrs = []; - return self2.none(); - } - let res = self2.toView(ptrs); - return res; - } -}; -methods4.delete = methods4.remove; -var remove_default2 = methods4; - -// node_modules/compromise/src/1-one/change/api/whitespace.js -var methods5 = { - /** add this punctuation or whitespace before each match: */ - pre: function(str2, concat) { - if (str2 === void 0 && this.found) { - return this.docs[0][0].pre; - } - this.docs.forEach((terms) => { - let term = terms[0]; - if (concat === true) { - term.pre += str2; - } else { - term.pre = str2; - } - }); - return this; - }, - /** add this punctuation or whitespace after each match: */ - post: function(str2, concat) { - if (str2 === void 0) { - let last = this.docs[this.docs.length - 1]; - return last[last.length - 1].post; - } - this.docs.forEach((terms) => { - let term = terms[terms.length - 1]; - if (concat === true) { - term.post += str2; - } else { - term.post = str2; - } - }); - return this; - }, - /** remove whitespace from start/end */ - trim: function() { - if (!this.found) { - return this; - } - let docs = this.docs; - let start2 = docs[0][0]; - start2.pre = start2.pre.trimStart(); - let last = docs[docs.length - 1]; - let end2 = last[last.length - 1]; - end2.post = end2.post.trimEnd(); - return this; - }, - /** connect words with hyphen, and remove whitespace */ - hyphenate: function() { - this.docs.forEach((terms) => { - terms.forEach((t4, i4) => { - if (i4 !== 0) { - t4.pre = ""; - } - if (terms[i4 + 1]) { - t4.post = "-"; - } - }); - }); - return this; - }, - /** remove hyphens between words, and set whitespace */ - dehyphenate: function() { - const hasHyphen3 = /[-–—]/; - this.docs.forEach((terms) => { - terms.forEach((t4) => { - if (hasHyphen3.test(t4.post)) { - t4.post = " "; - } - }); - }); - return this; - }, - /** add quotations around these matches */ - toQuotations: function(start2, end2) { - start2 = start2 || `"`; - end2 = end2 || `"`; - this.docs.forEach((terms) => { - terms[0].pre = start2 + terms[0].pre; - let last = terms[terms.length - 1]; - last.post = end2 + last.post; - }); - return this; - }, - /** add brackets around these matches */ - toParentheses: function(start2, end2) { - start2 = start2 || `(`; - end2 = end2 || `)`; - this.docs.forEach((terms) => { - terms[0].pre = start2 + terms[0].pre; - let last = terms[terms.length - 1]; - last.post = end2 + last.post; - }); - return this; - } -}; -methods5.deHyphenate = methods5.dehyphenate; -methods5.toQuotation = methods5.toQuotations; -var whitespace_default = methods5; - -// node_modules/compromise/src/1-one/change/api/lib/_sort.js -var alpha = (a3, b2) => { - if (a3.normal < b2.normal) { - return -1; - } - if (a3.normal > b2.normal) { - return 1; - } - return 0; -}; -var length = (a3, b2) => { - let left = a3.normal.trim().length; - let right = b2.normal.trim().length; - if (left < right) { - return 1; - } - if (left > right) { - return -1; - } - return 0; -}; -var wordCount = (a3, b2) => { - if (a3.words < b2.words) { - return 1; - } - if (a3.words > b2.words) { - return -1; - } - return 0; -}; -var sequential = (a3, b2) => { - if (a3[0] < b2[0]) { - return 1; - } - if (a3[0] > b2[0]) { - return -1; - } - return a3[1] > b2[1] ? 1 : -1; -}; -var byFreq = function(arr) { - let counts = {}; - arr.forEach((o3) => { - counts[o3.normal] = counts[o3.normal] || 0; - counts[o3.normal] += 1; - }); - arr.sort((a3, b2) => { - let left = counts[a3.normal]; - let right = counts[b2.normal]; - if (left < right) { - return 1; - } - if (left > right) { - return -1; - } - return 0; - }); - return arr; -}; -var sort_default = { alpha, length, wordCount, sequential, byFreq }; - -// node_modules/compromise/src/1-one/change/api/sort.js -var seqNames = /* @__PURE__ */ new Set(["index", "sequence", "seq", "sequential", "chron", "chronological"]); -var freqNames = /* @__PURE__ */ new Set(["freq", "frequency", "topk", "repeats"]); -var alphaNames = /* @__PURE__ */ new Set(["alpha", "alphabetical"]); -var customSort = function(view, fn) { - let ptrs = view.fullPointer; - ptrs = ptrs.sort((a3, b2) => { - a3 = view.update([a3]); - b2 = view.update([b2]); - return fn(a3, b2); - }); - view.ptrs = ptrs; - return view; -}; -var sort = function(input) { - let { docs, pointer } = this; - this.uncache(); - if (typeof input === "function") { - return customSort(this, input); - } - input = input || "alpha"; - let ptrs = pointer || docs.map((_d, n3) => [n3]); - let arr = docs.map((terms, n3) => { - return { - index: n3, - words: terms.length, - normal: terms.map((t4) => t4.machine || t4.normal || "").join(" "), - pointer: ptrs[n3] - }; - }); - if (seqNames.has(input)) { - input = "sequential"; - } - if (alphaNames.has(input)) { - input = "alpha"; - } - if (freqNames.has(input)) { - arr = sort_default.byFreq(arr); - return this.update(arr.map((o3) => o3.pointer)); - } - if (typeof sort_default[input] === "function") { - arr = arr.sort(sort_default[input]); - return this.update(arr.map((o3) => o3.pointer)); - } - return this; -}; -var reverse = function() { - let ptrs = this.pointer || this.docs.map((_d, n3) => [n3]); - ptrs = [].concat(ptrs); - ptrs = ptrs.reverse(); - if (this._cache) { - this._cache = this._cache.reverse(); - } - return this.update(ptrs); -}; -var unique = function() { - let already = /* @__PURE__ */ new Set(); - let res = this.filter((m2) => { - let txt = m2.text("machine"); - if (already.has(txt)) { - return false; - } - already.add(txt); - return true; - }); - return res; -}; -var sort_default2 = { unique, reverse, sort }; - -// node_modules/compromise/src/1-one/change/api/concat.js -var isArray5 = (arr) => Object.prototype.toString.call(arr) === "[object Array]"; -var combineDocs = function(homeDocs, inputDocs) { - if (homeDocs.length > 0) { - let end2 = homeDocs[homeDocs.length - 1]; - let last = end2[end2.length - 1]; - if (/ /.test(last.post) === false) { - last.post += " "; - } - } - homeDocs = homeDocs.concat(inputDocs); - return homeDocs; -}; -var combineViews = function(home, input) { - if (home.document === input.document) { - let ptrs2 = home.fullPointer.concat(input.fullPointer); - return home.toView(ptrs2).compute("index"); - } - let ptrs = input.fullPointer; - ptrs.forEach((a3) => { - a3[0] += home.document.length; - }); - home.document = combineDocs(home.document, input.docs); - return home.all(); -}; -var concat_default = { - // add string as new match/sentence - concat: function(input) { - if (typeof input === "string") { - let more = this.fromText(input); - if (!this.found || !this.ptrs) { - this.document = this.document.concat(more.document); - } else { - let ptrs = this.fullPointer; - let at2 = ptrs[ptrs.length - 1][0]; - this.document.splice(at2, 0, ...more.document); - } - return this.all().compute("index"); - } - if (typeof input === "object" && input.isView) { - return combineViews(this, input); - } - if (isArray5(input)) { - let docs = combineDocs(this.document, input); - this.document = docs; - return this.all(); - } - return this; - } -}; - -// node_modules/compromise/src/1-one/change/api/harden.js -var harden = function() { - this.ptrs = this.fullPointer; - return this; -}; -var soften = function() { - let ptr = this.ptrs; - if (!ptr || ptr.length < 1) { - return this; - } - ptr = ptr.map((a3) => a3.slice(0, 3)); - this.ptrs = ptr; - return this; -}; -var harden_default = { harden, soften }; - -// node_modules/compromise/src/1-one/change/api/index.js -var methods6 = Object.assign({}, case_default, insert_default, replace_default, remove_default2, whitespace_default, sort_default2, concat_default, harden_default); -var addAPI2 = function(View2) { - Object.assign(View2.prototype, methods6); -}; -var api_default2 = addAPI2; - -// node_modules/compromise/src/1-one/change/compute/index.js -var compute2 = { - id: function(view) { - let docs = view.docs; - for (let n3 = 0; n3 < docs.length; n3 += 1) { - for (let i4 = 0; i4 < docs[n3].length; i4 += 1) { - let term = docs[n3][i4]; - term.id = term.id || uuid_default(term); - } - } - } -}; -var compute_default3 = compute2; - -// node_modules/compromise/src/1-one/change/plugin.js -var plugin_default2 = { - api: api_default2, - compute: compute_default3 -}; - -// node_modules/compromise/src/1-one/contraction-one/model/contractions.js -var contractions_default = [ - // simple mappings - { word: "@", out: ["at"] }, - { word: "arent", out: ["are", "not"] }, - { word: "alot", out: ["a", "lot"] }, - { word: "brb", out: ["be", "right", "back"] }, - { word: "cannot", out: ["can", "not"] }, - { word: "dun", out: ["do", "not"] }, - { word: "can't", out: ["can", "not"] }, - { word: "shan't", out: ["should", "not"] }, - { word: "won't", out: ["will", "not"] }, - { word: "that's", out: ["that", "is"] }, - { word: "what's", out: ["what", "is"] }, - { word: "let's", out: ["let", "us"] }, - // { word: "there's", out: ['there', 'is'] }, - { word: "dunno", out: ["do", "not", "know"] }, - { word: "gonna", out: ["going", "to"] }, - { word: "gotta", out: ["have", "got", "to"] }, - //hmm - { word: "gimme", out: ["give", "me"] }, - { word: "outta", out: ["out", "of"] }, - { word: "tryna", out: ["trying", "to"] }, - { word: "gtg", out: ["got", "to", "go"] }, - { word: "im", out: ["i", "am"] }, - { word: "imma", out: ["I", "will"] }, - { word: "imo", out: ["in", "my", "opinion"] }, - { word: "irl", out: ["in", "real", "life"] }, - { word: "ive", out: ["i", "have"] }, - { word: "rn", out: ["right", "now"] }, - { word: "tbh", out: ["to", "be", "honest"] }, - { word: "wanna", out: ["want", "to"] }, - { word: `c'mere`, out: ["come", "here"] }, - { word: `c'mon`, out: ["come", "on"] }, - // shoulda, coulda - { word: "shoulda", out: ["should", "have"] }, - { word: "coulda", out: ["coulda", "have"] }, - { word: "woulda", out: ["woulda", "have"] }, - { word: "musta", out: ["must", "have"] }, - { word: "tis", out: ["it", "is"] }, - { word: "twas", out: ["it", "was"] }, - { word: `y'know`, out: ["you", "know"] }, - { word: "ne'er", out: ["never"] }, - { word: "o'er", out: ["over"] }, - // contraction-part mappings - { after: "ll", out: ["will"] }, - { after: "ve", out: ["have"] }, - { after: "re", out: ["are"] }, - { after: "m", out: ["am"] }, - // french contractions - { before: "c", out: ["ce"] }, - { before: "m", out: ["me"] }, - { before: "n", out: ["ne"] }, - { before: "qu", out: ["que"] }, - { before: "s", out: ["se"] }, - { before: "t", out: ["tu"] }, - // t'aime - // missing apostrophes - { word: "shouldnt", out: ["should", "not"] }, - { word: "couldnt", out: ["could", "not"] }, - { word: "wouldnt", out: ["would", "not"] }, - { word: "hasnt", out: ["has", "not"] }, - { word: "wasnt", out: ["was", "not"] }, - { word: "isnt", out: ["is", "not"] }, - { word: "cant", out: ["can", "not"] }, - { word: "dont", out: ["do", "not"] }, - { word: "wont", out: ["will", "not"] }, - // apostrophe d - { word: "howd", out: ["how", "did"] }, - { word: "whatd", out: ["what", "did"] }, - { word: "whend", out: ["when", "did"] }, - { word: "whered", out: ["where", "did"] } -]; - -// node_modules/compromise/src/1-one/contraction-one/model/number-suffix.js -var t = true; -var number_suffix_default = { - "st": t, - "nd": t, - "rd": t, - "th": t, - "am": t, - "pm": t, - "max": t, - "\xB0": t, - "s": t, - // 1990s - "e": t, - // 18e - french/spanish ordinal - "er": t, - //french 1er - "\xE8re": t, - //'' - "\xE8me": t - //french 2ème -}; - -// node_modules/compromise/src/1-one/contraction-one/model/index.js -var model_default = { - one: { - contractions: contractions_default, - numberSuffixes: number_suffix_default - } -}; - -// node_modules/compromise/src/1-one/contraction-one/compute/contractions/_splice.js -var insertContraction = function(document2, point, words) { - let [n3, w2] = point; - if (!words || words.length === 0) { - return; - } - words = words.map((word, i4) => { - word.implicit = word.text; - word.machine = word.text; - word.pre = ""; - word.post = ""; - word.text = ""; - word.normal = ""; - word.index = [n3, w2 + i4]; - return word; - }); - if (words[0]) { - words[0].pre = document2[n3][w2].pre; - words[words.length - 1].post = document2[n3][w2].post; - words[0].text = document2[n3][w2].text; - words[0].normal = document2[n3][w2].normal; - } - document2[n3].splice(w2, 1, ...words); -}; -var splice_default = insertContraction; - -// node_modules/compromise/src/1-one/contraction-one/compute/contractions/apostrophe-d.js -var hasContraction = /'/; -var alwaysDid = /* @__PURE__ */ new Set([ - "what", - "how", - "when", - "where", - "why" -]); -var useWould = /* @__PURE__ */ new Set([ - "be", - "go", - "start", - "think", - "need" -]); -var useHad = /* @__PURE__ */ new Set([ - "been", - "gone" -]); -var _apostropheD = function(terms, i4) { - let before2 = terms[i4].normal.split(hasContraction)[0]; - if (alwaysDid.has(before2)) { - return [before2, "did"]; - } - if (terms[i4 + 1]) { - if (useHad.has(terms[i4 + 1].normal)) { - return [before2, "had"]; - } - if (useWould.has(terms[i4 + 1].normal)) { - return [before2, "would"]; - } - } - return null; -}; -var apostrophe_d_default = _apostropheD; - -// node_modules/compromise/src/1-one/contraction-one/compute/contractions/apostrophe-t.js -var apostropheT = function(terms, i4) { - if (terms[i4].normal === "ain't" || terms[i4].normal === "aint") { - return null; - } - let before2 = terms[i4].normal.replace(/n't/, ""); - return [before2, "not"]; -}; -var apostrophe_t_default = apostropheT; - -// node_modules/compromise/src/1-one/contraction-one/compute/contractions/french.js -var hasContraction2 = /'/; -var isFeminine = /(e|é|aison|sion|tion)$/; -var isMasculine = /(age|isme|acle|ege|oire)$/; -var preL = (terms, i4) => { - let after2 = terms[i4].normal.split(hasContraction2)[1]; - if (after2 && after2.endsWith("e")) { - return ["la", after2]; - } - return ["le", after2]; -}; -var preD = (terms, i4) => { - let after2 = terms[i4].normal.split(hasContraction2)[1]; - if (after2 && isFeminine.test(after2) && !isMasculine.test(after2)) { - return ["du", after2]; - } else if (after2 && after2.endsWith("s")) { - return ["des", after2]; - } - return ["de", after2]; -}; -var preJ = (terms, i4) => { - let after2 = terms[i4].normal.split(hasContraction2)[1]; - return ["je", after2]; -}; -var french_default = { - preJ, - preL, - preD -}; - -// node_modules/compromise/src/1-one/contraction-one/compute/contractions/number-range.js -var isRange = /^([0-9.]{1,4}[a-z]{0,2}) ?[-–—] ?([0-9]{1,4}[a-z]{0,2})$/i; -var timeRange = /^([0-9]{1,2}(:[0-9][0-9])?(am|pm)?) ?[-–—] ?([0-9]{1,2}(:[0-9][0-9])?(am|pm)?)$/i; -var phoneNum = /^[0-9]{3}-[0-9]{4}$/; -var numberRange = function(terms, i4) { - let term = terms[i4]; - let parts = term.text.match(isRange); - if (parts !== null) { - if (term.tags.has("PhoneNumber") === true || phoneNum.test(term.text)) { - return null; - } - return [parts[1], "to", parts[2]]; - } else { - parts = term.text.match(timeRange); - if (parts !== null) { - return [parts[1], "to", parts[4]]; - } - } - return null; -}; -var number_range_default = numberRange; - -// node_modules/compromise/src/1-one/contraction-one/compute/contractions/number-unit.js -var numUnit = /^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/; -var numberUnit = function(terms, i4, world2) { - const notUnit = world2.model.one.numberSuffixes || {}; - let term = terms[i4]; - let parts = term.text.match(numUnit); - if (parts !== null) { - let unit = parts[2].toLowerCase().trim(); - if (notUnit.hasOwnProperty(unit)) { - return null; - } - return [parts[1], unit]; - } - return null; -}; -var number_unit_default = numberUnit; - -// node_modules/compromise/src/1-one/contraction-one/compute/contractions/index.js -var byApostrophe = /'/; -var numDash = /^[0-9][^-–—]*[-–—].*?[0-9]/; -var reTag = function(terms, view, start2, len) { - let tmp = view.update(); - tmp.document = [terms]; - let end2 = start2 + len; - if (start2 > 0) { - start2 -= 1; - } - if (terms[end2]) { - end2 += 1; - } - tmp.ptrs = [[0, start2, end2]]; -}; -var byEnd = { - // ain't - t: (terms, i4) => apostrophe_t_default(terms, i4), - // how'd - d: (terms, i4) => apostrophe_d_default(terms, i4) -}; -var byStart = { - // j'aime - j: (terms, i4) => french_default.preJ(terms, i4), - // l'amour - l: (terms, i4) => french_default.preL(terms, i4), - // d'amerique - d: (terms, i4) => french_default.preD(terms, i4) -}; -var knownOnes = function(list2, term, before2, after2) { - for (let i4 = 0; i4 < list2.length; i4 += 1) { - let o3 = list2[i4]; - if (o3.word === term.normal) { - return o3.out; - } else if (after2 !== null && after2 === o3.after) { - return [before2].concat(o3.out); - } else if (before2 !== null && before2 === o3.before && after2 && after2.length > 2) { - return o3.out.concat(after2); - } - } - return null; -}; -var toDocs = function(words, view) { - let doc = view.fromText(words.join(" ")); - doc.compute(["id", "alias"]); - return doc.docs[0]; -}; -var thereHas = function(terms, i4) { - for (let k3 = i4 + 1; k3 < 5; k3 += 1) { - if (!terms[k3]) { - break; - } - if (terms[k3].normal === "been") { - return ["there", "has"]; - } - } - return ["there", "is"]; -}; -var contractions = (view) => { - let { world: world2, document: document2 } = view; - const { model: model4, methods: methods17 } = world2; - let list2 = model4.one.contractions || []; - document2.forEach((terms, n3) => { - for (let i4 = terms.length - 1; i4 >= 0; i4 -= 1) { - let before2 = null; - let after2 = null; - if (byApostrophe.test(terms[i4].normal) === true) { - let res = terms[i4].normal.split(byApostrophe); - before2 = res[0]; - after2 = res[1]; - } - let words = knownOnes(list2, terms[i4], before2, after2); - if (!words && byEnd.hasOwnProperty(after2)) { - words = byEnd[after2](terms, i4, world2); - } - if (!words && byStart.hasOwnProperty(before2)) { - words = byStart[before2](terms, i4); - } - if (before2 === "there" && after2 === "s") { - words = thereHas(terms, i4); - } - if (words) { - words = toDocs(words, view); - splice_default(document2, [n3, i4], words); - reTag(document2[n3], view, i4, words.length); - continue; - } - if (numDash.test(terms[i4].normal)) { - words = number_range_default(terms, i4); - if (words) { - words = toDocs(words, view); - splice_default(document2, [n3, i4], words); - methods17.one.setTag(words, "NumberRange", world2); - if (words[2] && words[2].tags.has("Time")) { - methods17.one.setTag([words[0]], "Time", world2, null, "time-range"); - } - reTag(document2[n3], view, i4, words.length); - } - continue; - } - words = number_unit_default(terms, i4, world2); - if (words) { - words = toDocs(words, view); - splice_default(document2, [n3, i4], words); - methods17.one.setTag([words[1]], "Unit", world2, null, "contraction-unit"); - } - } - }); -}; -var contractions_default2 = contractions; - -// node_modules/compromise/src/1-one/contraction-one/compute/index.js -var compute_default4 = { contractions: contractions_default2 }; - -// node_modules/compromise/src/1-one/contraction-one/plugin.js -var plugin = { - model: model_default, - compute: compute_default4, - hooks: ["contractions"] -}; -var plugin_default3 = plugin; - -// node_modules/compromise/src/1-one/freeze/compute.js -var freeze = function(view) { - const world2 = view.world; - const { model: model4, methods: methods17 } = view.world; - const setTag2 = methods17.one.setTag; - const { frozenLex } = model4.one; - const multi = model4.one._multiCache || {}; - view.docs.forEach((terms) => { - for (let i4 = 0; i4 < terms.length; i4 += 1) { - let t4 = terms[i4]; - let word = t4.machine || t4.normal; - if (multi[word] !== void 0 && terms[i4 + 1]) { - let end2 = i4 + multi[word] - 1; - for (let k3 = end2; k3 > i4; k3 -= 1) { - let words = terms.slice(i4, k3 + 1); - let str2 = words.map((term) => term.machine || term.normal).join(" "); - if (frozenLex.hasOwnProperty(str2) === true) { - setTag2(words, frozenLex[str2], world2, false, "1-frozen-multi-lexicon"); - words.forEach((term) => term.frozen = true); - continue; - } - } - } - if (frozenLex[word] !== void 0 && frozenLex.hasOwnProperty(word)) { - setTag2([t4], frozenLex[word], world2, false, "1-freeze-lexicon"); - t4.frozen = true; - continue; - } - } - }); -}; -var unfreeze = function(view) { - view.docs.forEach((ts) => { - ts.forEach((term) => { - delete term.frozen; - }); - }); - return view; -}; -var compute_default5 = { frozen: freeze, freeze, unfreeze }; - -// node_modules/compromise/src/1-one/freeze/debug.js -var blue = (str2) => "\x1B[34m" + str2 + "\x1B[0m"; -var dim = (str2) => "\x1B[3m\x1B[2m" + str2 + "\x1B[0m"; -var debug = function(view) { - view.docs.forEach((terms) => { - console.log(blue("\n \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")); - terms.forEach((t4) => { - let str2 = ` ${dim("\u2502")} `; - let txt = t4.implicit || t4.text || "-"; - if (t4.frozen === true) { - str2 += `${blue(txt)} \u2744\uFE0F`; - } else { - str2 += dim(txt); - } - console.log(str2); - }); - }); -}; -var debug_default = debug; - -// node_modules/compromise/src/1-one/freeze/plugin.js -var plugin_default4 = { - // add .compute('freeze') - compute: compute_default5, - mutate: (world2) => { - const methods17 = world2.methods.one; - methods17.termMethods.isFrozen = (term) => term.frozen === true; - methods17.debug.freeze = debug_default; - methods17.debug.frozen = debug_default; - }, - api: function(View2) { - View2.prototype.freeze = function() { - this.docs.forEach((ts) => { - ts.forEach((term) => { - term.frozen = true; - }); - }); - return this; - }; - View2.prototype.unfreeze = function() { - this.compute("unfreeze"); - }; - View2.prototype.isFrozen = function() { - return this.match("@isFrozen+"); - }; - }, - // run it in init - hooks: ["freeze"] -}; - -// node_modules/compromise/src/1-one/lexicon/compute/multi-word.js -var multiWord = function(terms, start_i, world2) { - const { model: model4, methods: methods17 } = world2; - const setTag2 = methods17.one.setTag; - const multi = model4.one._multiCache || {}; - const { lexicon: lexicon3 } = model4.one || {}; - let t4 = terms[start_i]; - let word = t4.machine || t4.normal; - if (multi[word] !== void 0 && terms[start_i + 1]) { - let end2 = start_i + multi[word] - 1; - for (let i4 = end2; i4 > start_i; i4 -= 1) { - let words = terms.slice(start_i, i4 + 1); - if (words.length <= 1) { - return false; - } - let str2 = words.map((term) => term.machine || term.normal).join(" "); - if (lexicon3.hasOwnProperty(str2) === true) { - let tag = lexicon3[str2]; - setTag2(words, tag, world2, false, "1-multi-lexicon"); - if (tag && tag.length === 2 && (tag[0] === "PhrasalVerb" || tag[1] === "PhrasalVerb")) { - setTag2([words[1]], "Particle", world2, false, "1-phrasal-particle"); - } - return true; - } - } - return false; - } - return null; -}; -var multi_word_default = multiWord; - -// node_modules/compromise/src/1-one/lexicon/compute/single-word.js -var prefix = /^(under|over|mis|re|un|dis|semi|pre|post)-?/; -var allowPrefix = /* @__PURE__ */ new Set(["Verb", "Infinitive", "PastTense", "Gerund", "PresentTense", "Adjective", "Participle"]); -var checkLexicon = function(terms, i4, world2) { - const { model: model4, methods: methods17 } = world2; - const setTag2 = methods17.one.setTag; - const { lexicon: lexicon3 } = model4.one; - let t4 = terms[i4]; - let word = t4.machine || t4.normal; - if (lexicon3[word] !== void 0 && lexicon3.hasOwnProperty(word)) { - setTag2([t4], lexicon3[word], world2, false, "1-lexicon"); - return true; - } - if (t4.alias) { - let found = t4.alias.find((str2) => lexicon3.hasOwnProperty(str2)); - if (found) { - setTag2([t4], lexicon3[found], world2, false, "1-lexicon-alias"); - return true; - } - } - if (prefix.test(word) === true) { - let stem = word.replace(prefix, ""); - if (lexicon3.hasOwnProperty(stem) && stem.length > 3) { - if (allowPrefix.has(lexicon3[stem])) { - setTag2([t4], lexicon3[stem], world2, false, "1-lexicon-prefix"); - return true; - } - } - } - return null; -}; -var single_word_default = checkLexicon; - -// node_modules/compromise/src/1-one/lexicon/compute/index.js -var lexicon = function(view) { - const world2 = view.world; - view.docs.forEach((terms) => { - for (let i4 = 0; i4 < terms.length; i4 += 1) { - if (terms[i4].tags.size === 0) { - let found = null; - found = found || multi_word_default(terms, i4, world2); - found = found || single_word_default(terms, i4, world2); - } - } - }); -}; -var compute_default6 = { - lexicon -}; - -// node_modules/compromise/src/1-one/lexicon/methods/expand.js -var expand2 = function(words) { - let lex = {}; - let _multi = {}; - Object.keys(words).forEach((word) => { - let tag = words[word]; - word = word.toLowerCase().trim(); - word = word.replace(/'s\b/, ""); - let split2 = word.split(/ /); - if (split2.length > 1) { - if (_multi[split2[0]] === void 0 || split2.length > _multi[split2[0]]) { - _multi[split2[0]] = split2.length; - } - } - lex[word] = lex[word] || tag; - }); - delete lex[""]; - delete lex[null]; - delete lex[" "]; - return { lex, _multi }; -}; -var expand_default = expand2; - -// node_modules/compromise/src/1-one/lexicon/methods/index.js -var methods_default3 = { - one: { - expandLexicon: expand_default - } -}; - -// node_modules/compromise/src/1-one/lexicon/lib.js -var addWords = function(words, isFrozen = false) { - const world2 = this.world(); - const { methods: methods17, model: model4 } = world2; - if (!words) { - return; - } - Object.keys(words).forEach((k3) => { - if (typeof words[k3] === "string" && words[k3].startsWith("#")) { - words[k3] = words[k3].replace(/^#/, ""); - } - }); - if (isFrozen === true) { - let { lex: lex2, _multi: _multi2 } = methods17.one.expandLexicon(words, world2); - Object.assign(model4.one._multiCache, _multi2); - Object.assign(model4.one.frozenLex, lex2); - return; - } - if (methods17.two.expandLexicon) { - let { lex: lex2, _multi: _multi2 } = methods17.two.expandLexicon(words, world2); - Object.assign(model4.one.lexicon, lex2); - Object.assign(model4.one._multiCache, _multi2); - } - let { lex, _multi } = methods17.one.expandLexicon(words, world2); - Object.assign(model4.one.lexicon, lex); - Object.assign(model4.one._multiCache, _multi); -}; -var lib_default = { addWords }; - -// node_modules/compromise/src/1-one/lexicon/plugin.js -var model2 = { - one: { - lexicon: {}, - //setup blank lexicon - _multiCache: {}, - frozenLex: {} - //2nd lexicon - } -}; -var plugin_default5 = { - model: model2, - methods: methods_default3, - compute: compute_default6, - lib: lib_default, - hooks: ["lexicon"] -}; - -// node_modules/compromise/src/1-one/lookup/api/buildTrie/index.js -var tokenize = function(phrase, world2) { - const { methods: methods17, model: model4 } = world2; - let terms = methods17.one.tokenize.splitTerms(phrase, model4).map((t4) => methods17.one.tokenize.splitWhitespace(t4, model4)); - return terms.map((term) => term.text.toLowerCase()); -}; -var buildTrie = function(phrases, world2) { - let goNext = [{}]; - let endAs = [null]; - let failTo = [0]; - let xs = []; - let n3 = 0; - phrases.forEach(function(phrase) { - let curr = 0; - let words = tokenize(phrase, world2); - for (let i4 = 0; i4 < words.length; i4++) { - let word = words[i4]; - if (goNext[curr] && goNext[curr].hasOwnProperty(word)) { - curr = goNext[curr][word]; - } else { - n3++; - goNext[curr][word] = n3; - goNext[n3] = {}; - curr = n3; - endAs[n3] = null; - } - } - endAs[curr] = [words.length]; - }); - for (let word in goNext[0]) { - n3 = goNext[0][word]; - failTo[n3] = 0; - xs.push(n3); - } - while (xs.length) { - let r3 = xs.shift(); - let keys = Object.keys(goNext[r3]); - for (let i4 = 0; i4 < keys.length; i4 += 1) { - let word = keys[i4]; - let s3 = goNext[r3][word]; - xs.push(s3); - n3 = failTo[r3]; - while (n3 > 0 && !goNext[n3].hasOwnProperty(word)) { - n3 = failTo[n3]; - } - if (goNext.hasOwnProperty(n3)) { - let fs3 = goNext[n3][word]; - failTo[s3] = fs3; - if (endAs[fs3]) { - endAs[s3] = endAs[s3] || []; - endAs[s3] = endAs[s3].concat(endAs[fs3]); - } - } else { - failTo[s3] = 0; - } - } - } - return { goNext, endAs, failTo }; -}; -var buildTrie_default = buildTrie; - -// node_modules/compromise/src/1-one/lookup/api/scan.js -var scanWords = function(terms, trie, opts2) { - let n3 = 0; - let results = []; - for (let i4 = 0; i4 < terms.length; i4++) { - let word = terms[i4][opts2.form] || terms[i4].normal; - while (n3 > 0 && (trie.goNext[n3] === void 0 || !trie.goNext[n3].hasOwnProperty(word))) { - n3 = trie.failTo[n3] || 0; - } - if (!trie.goNext[n3].hasOwnProperty(word)) { - continue; - } - n3 = trie.goNext[n3][word]; - if (trie.endAs[n3]) { - let arr = trie.endAs[n3]; - for (let o3 = 0; o3 < arr.length; o3++) { - let len = arr[o3]; - let term = terms[i4 - len + 1]; - let [no, start2] = term.index; - results.push([no, start2, start2 + len, term.id]); - } - } - } - return results; -}; -var cacheMiss = function(words, cache) { - for (let i4 = 0; i4 < words.length; i4 += 1) { - if (cache.has(words[i4]) === true) { - return false; - } - } - return true; -}; -var scan2 = function(view, trie, opts2) { - let results = []; - opts2.form = opts2.form || "normal"; - let docs = view.docs; - if (!trie.goNext || !trie.goNext[0]) { - console.error("Compromise invalid lookup trie"); - return view.none(); - } - let firstWords = Object.keys(trie.goNext[0]); - for (let i4 = 0; i4 < docs.length; i4++) { - if (view._cache && view._cache[i4] && cacheMiss(firstWords, view._cache[i4]) === true) { - continue; - } - let terms = docs[i4]; - let found = scanWords(terms, trie, opts2); - if (found.length > 0) { - results = results.concat(found); - } - } - return view.update(results); -}; -var scan_default = scan2; - -// node_modules/compromise/src/1-one/lookup/api/index.js -var isObject3 = (val) => { - return Object.prototype.toString.call(val) === "[object Object]"; -}; -function api_default3(View2) { - View2.prototype.lookup = function(input, opts2 = {}) { - if (!input) { - return this.none(); - } - if (typeof input === "string") { - input = [input]; - } - let trie = isObject3(input) ? input : buildTrie_default(input, this.world); - let res = scan_default(this, trie, opts2); - res = res.settle(); - return res; - }; -} - -// node_modules/compromise/src/1-one/lookup/api/buildTrie/compress.js -var truncate = (list2, val) => { - for (let i4 = list2.length - 1; i4 >= 0; i4 -= 1) { - if (list2[i4] !== val) { - list2 = list2.slice(0, i4 + 1); - return list2; - } - } - return list2; -}; -var compress = function(trie) { - trie.goNext = trie.goNext.map((o3) => { - if (Object.keys(o3).length === 0) { - return void 0; - } - return o3; - }); - trie.goNext = truncate(trie.goNext, void 0); - trie.failTo = truncate(trie.failTo, 0); - trie.endAs = truncate(trie.endAs, null); - return trie; -}; -var compress_default = compress; - -// node_modules/compromise/src/1-one/lookup/plugin.js -var lib = { - /** turn an array or object into a compressed trie*/ - buildTrie: function(input) { - const trie = buildTrie_default(input, this.world()); - return compress_default(trie); - } -}; -lib.compile = lib.buildTrie; -var plugin_default6 = { - api: api_default3, - lib -}; - -// node_modules/compromise/src/1-one/match/api/_lib.js -var relPointer = function(ptrs, parent) { - if (!parent) { - return ptrs; - } - ptrs.forEach((ptr) => { - let n3 = ptr[0]; - if (parent[n3]) { - ptr[0] = parent[n3][0]; - ptr[1] += parent[n3][1]; - ptr[2] += parent[n3][1]; - } - }); - return ptrs; -}; -var fixPointers2 = function(res, parent) { - let { ptrs, byGroup } = res; - ptrs = relPointer(ptrs, parent); - Object.keys(byGroup).forEach((k3) => { - byGroup[k3] = relPointer(byGroup[k3], parent); - }); - return { ptrs, byGroup }; -}; -var parseRegs = function(regs, opts2, world2) { - const one = world2.methods.one; - if (typeof regs === "number") { - regs = String(regs); - } - if (typeof regs === "string") { - regs = one.killUnicode(regs, world2); - regs = one.parseMatch(regs, opts2, world2); - } - return regs; -}; -var isObject4 = (val) => { - return Object.prototype.toString.call(val) === "[object Object]"; -}; -var isView = (val) => val && isObject4(val) && val.isView === true; -var isNet = (val) => val && isObject4(val) && val.isNet === true; - -// node_modules/compromise/src/1-one/match/api/match.js -var match = function(regs, group, opts2) { - const one = this.methods.one; - if (isView(regs)) { - return this.intersection(regs); - } - if (isNet(regs)) { - return this.sweep(regs, { tagger: false }).view.settle(); - } - regs = parseRegs(regs, opts2, this.world); - let todo = { regs, group }; - let res = one.match(this.docs, todo, this._cache); - let { ptrs, byGroup } = fixPointers2(res, this.fullPointer); - let view = this.toView(ptrs); - view._groups = byGroup; - return view; -}; -var matchOne = function(regs, group, opts2) { - const one = this.methods.one; - if (isView(regs)) { - return this.intersection(regs).eq(0); - } - if (isNet(regs)) { - return this.sweep(regs, { tagger: false, matchOne: true }).view; - } - regs = parseRegs(regs, opts2, this.world); - let todo = { regs, group, justOne: true }; - let res = one.match(this.docs, todo, this._cache); - let { ptrs, byGroup } = fixPointers2(res, this.fullPointer); - let view = this.toView(ptrs); - view._groups = byGroup; - return view; -}; -var has = function(regs, group, opts2) { - const one = this.methods.one; - if (isView(regs)) { - let ptrs2 = this.intersection(regs).fullPointer; - return ptrs2.length > 0; - } - if (isNet(regs)) { - return this.sweep(regs, { tagger: false }).view.found; - } - regs = parseRegs(regs, opts2, this.world); - let todo = { regs, group, justOne: true }; - let ptrs = one.match(this.docs, todo, this._cache).ptrs; - return ptrs.length > 0; -}; -var ifFn = function(regs, group, opts2) { - const one = this.methods.one; - if (isView(regs)) { - return this.filter((m2) => m2.intersection(regs).found); - } - if (isNet(regs)) { - let m2 = this.sweep(regs, { tagger: false }).view.settle(); - return this.if(m2); - } - regs = parseRegs(regs, opts2, this.world); - let todo = { regs, group, justOne: true }; - let ptrs = this.fullPointer; - let cache = this._cache || []; - ptrs = ptrs.filter((ptr, i4) => { - let m2 = this.update([ptr]); - let res = one.match(m2.docs, todo, cache[i4]).ptrs; - return res.length > 0; - }); - let view = this.update(ptrs); - if (this._cache) { - view._cache = ptrs.map((ptr) => cache[ptr[0]]); - } - return view; -}; -var ifNo = function(regs, group, opts2) { - const { methods: methods17 } = this; - const one = methods17.one; - if (isView(regs)) { - return this.filter((m2) => !m2.intersection(regs).found); - } - if (isNet(regs)) { - let m2 = this.sweep(regs, { tagger: false }).view.settle(); - return this.ifNo(m2); - } - regs = parseRegs(regs, opts2, this.world); - let cache = this._cache || []; - let view = this.filter((m2, i4) => { - let todo = { regs, group, justOne: true }; - let ptrs = one.match(m2.docs, todo, cache[i4]).ptrs; - return ptrs.length === 0; - }); - if (this._cache) { - view._cache = view.ptrs.map((ptr) => cache[ptr[0]]); - } - return view; -}; -var match_default = { matchOne, match, has, if: ifFn, ifNo }; - -// node_modules/compromise/src/1-one/match/api/lookaround.js -var before = function(regs, group, opts2) { - const { indexN: indexN2 } = this.methods.one.pointer; - let pre = []; - let byN = indexN2(this.fullPointer); - Object.keys(byN).forEach((k3) => { - let first = byN[k3].sort((a3, b2) => a3[1] > b2[1] ? 1 : -1)[0]; - if (first[1] > 0) { - pre.push([first[0], 0, first[1]]); - } - }); - let preWords = this.toView(pre); - if (!regs) { - return preWords; - } - return preWords.match(regs, group, opts2); -}; -var after = function(regs, group, opts2) { - const { indexN: indexN2 } = this.methods.one.pointer; - let post2 = []; - let byN = indexN2(this.fullPointer); - let document2 = this.document; - Object.keys(byN).forEach((k3) => { - let last = byN[k3].sort((a3, b2) => a3[1] > b2[1] ? -1 : 1)[0]; - let [n3, , end2] = last; - if (end2 < document2[n3].length) { - post2.push([n3, end2, document2[n3].length]); - } - }); - let postWords = this.toView(post2); - if (!regs) { - return postWords; - } - return postWords.match(regs, group, opts2); -}; -var growLeft = function(regs, group, opts2) { - if (typeof regs === "string") { - regs = this.world.methods.one.parseMatch(regs, opts2, this.world); - } - regs[regs.length - 1].end = true; - let ptrs = this.fullPointer; - this.forEach((m2, n3) => { - let more = m2.before(regs, group); - if (more.found) { - let terms = more.terms(); - ptrs[n3][1] -= terms.length; - ptrs[n3][3] = terms.docs[0][0].id; - } - }); - return this.update(ptrs); -}; -var growRight = function(regs, group, opts2) { - if (typeof regs === "string") { - regs = this.world.methods.one.parseMatch(regs, opts2, this.world); - } - regs[0].start = true; - let ptrs = this.fullPointer; - this.forEach((m2, n3) => { - let more = m2.after(regs, group); - if (more.found) { - let terms = more.terms(); - ptrs[n3][2] += terms.length; - ptrs[n3][4] = null; - } - }); - return this.update(ptrs); -}; -var grow = function(regs, group, opts2) { - return this.growRight(regs, group, opts2).growLeft(regs, group, opts2); -}; -var lookaround_default = { before, after, growLeft, growRight, grow }; - -// node_modules/compromise/src/1-one/match/api/split.js -var combine = function(left, right) { - return [left[0], left[1], right[2]]; -}; -var isArray6 = function(arr) { - return Object.prototype.toString.call(arr) === "[object Array]"; -}; -var getDoc = (reg, view, group) => { - if (typeof reg === "string" || isArray6(reg)) { - return view.match(reg, group); - } - if (!reg) { - return view.none(); - } - return reg; -}; -var addIds2 = function(ptr, view) { - let [n3, start2, end2] = ptr; - if (view.document[n3] && view.document[n3][start2]) { - ptr[3] = ptr[3] || view.document[n3][start2].id; - if (view.document[n3][end2 - 1]) { - ptr[4] = ptr[4] || view.document[n3][end2 - 1].id; - } - } - return ptr; -}; -var methods7 = {}; -methods7.splitOn = function(m2, group) { - const { splitAll: splitAll2 } = this.methods.one.pointer; - let splits = getDoc(m2, this, group).fullPointer; - let all = splitAll2(this.fullPointer, splits); - let res = []; - all.forEach((o3) => { - res.push(o3.passthrough); - res.push(o3.before); - res.push(o3.match); - res.push(o3.after); - }); - res = res.filter((p3) => p3); - res = res.map((p3) => addIds2(p3, this)); - return this.update(res); -}; -methods7.splitBefore = function(m2, group) { - const { splitAll: splitAll2 } = this.methods.one.pointer; - let splits = getDoc(m2, this, group).fullPointer; - let all = splitAll2(this.fullPointer, splits); - for (let i4 = 0; i4 < all.length; i4 += 1) { - if (!all[i4].after && all[i4 + 1] && all[i4 + 1].before) { - if (all[i4].match && all[i4].match[0] === all[i4 + 1].before[0]) { - all[i4].after = all[i4 + 1].before; - delete all[i4 + 1].before; - } - } - } - let res = []; - all.forEach((o3) => { - res.push(o3.passthrough); - res.push(o3.before); - if (o3.match && o3.after) { - res.push(combine(o3.match, o3.after)); - } else { - res.push(o3.match); - } - }); - res = res.filter((p3) => p3); - res = res.map((p3) => addIds2(p3, this)); - return this.update(res); -}; -methods7.splitAfter = function(m2, group) { - const { splitAll: splitAll2 } = this.methods.one.pointer; - let splits = getDoc(m2, this, group).fullPointer; - let all = splitAll2(this.fullPointer, splits); - let res = []; - all.forEach((o3) => { - res.push(o3.passthrough); - if (o3.before && o3.match) { - res.push(combine(o3.before, o3.match)); - } else { - res.push(o3.before); - res.push(o3.match); - } - res.push(o3.after); - }); - res = res.filter((p3) => p3); - res = res.map((p3) => addIds2(p3, this)); - return this.update(res); -}; -methods7.split = methods7.splitAfter; -var split_default = methods7; - -// node_modules/compromise/src/1-one/match/api/join.js -var isNeighbour = function(ptrL, ptrR) { - if (!ptrL || !ptrR) { - return false; - } - if (ptrL[0] !== ptrR[0]) { - return false; - } - return ptrL[2] === ptrR[1]; -}; -var mergeIf = function(doc, lMatch, rMatch) { - const world2 = doc.world; - const parseMatch = world2.methods.one.parseMatch; - lMatch = lMatch || ".$"; - rMatch = rMatch || "^."; - let leftMatch = parseMatch(lMatch, {}, world2); - let rightMatch = parseMatch(rMatch, {}, world2); - leftMatch[leftMatch.length - 1].end = true; - rightMatch[0].start = true; - let ptrs = doc.fullPointer; - let res = [ptrs[0]]; - for (let i4 = 1; i4 < ptrs.length; i4 += 1) { - let ptrL = res[res.length - 1]; - let ptrR = ptrs[i4]; - let left = doc.update([ptrL]); - let right = doc.update([ptrR]); - if (isNeighbour(ptrL, ptrR) && left.has(leftMatch) && right.has(rightMatch)) { - res[res.length - 1] = [ptrL[0], ptrL[1], ptrR[2], ptrL[3], ptrR[4]]; - } else { - res.push(ptrR); - } - } - return doc.update(res); -}; -var methods8 = { - // merge only if conditions are met - joinIf: function(lMatch, rMatch) { - return mergeIf(this, lMatch, rMatch); - }, - // merge all neighbouring matches - join: function() { - return mergeIf(this); - } -}; -var join_default = methods8; - -// node_modules/compromise/src/1-one/match/api/index.js -var methods9 = Object.assign({}, match_default, lookaround_default, split_default, join_default); -methods9.lookBehind = methods9.before; -methods9.lookBefore = methods9.before; -methods9.lookAhead = methods9.after; -methods9.lookAfter = methods9.after; -methods9.notIf = methods9.ifNo; -var matchAPI = function(View2) { - Object.assign(View2.prototype, methods9); -}; -var api_default4 = matchAPI; - -// node_modules/compromise/src/1-one/match/methods/parseMatch/01-parseBlocks.js -var bySlashes = /(?:^|\s)([![^]*(?:<[^<]*>)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/; -var byParentheses = /([!~[^]*(?:<[^<]*>)?\([^)]+[^\\)]\)[?\]+*$~]*)(?:\s|$)/; -var byWord = / /g; -var isBlock = (str2) => { - return /^[![^]*(<[^<]*>)?\(/.test(str2) && /\)[?\]+*$~]*$/.test(str2); -}; -var isReg = (str2) => { - return /^[![^]*(<[^<]*>)?\//.test(str2) && /\/[?\]+*$~]*$/.test(str2); -}; -var cleanUp = function(arr) { - arr = arr.map((str2) => str2.trim()); - arr = arr.filter((str2) => str2); - return arr; -}; -var parseBlocks = function(txt) { - let arr = txt.split(bySlashes); - let res = []; - arr.forEach((str2) => { - if (isReg(str2)) { - res.push(str2); - return; - } - res = res.concat(str2.split(byParentheses)); - }); - res = cleanUp(res); - let final = []; - res.forEach((str2) => { - if (isBlock(str2)) { - final.push(str2); - } else if (isReg(str2)) { - final.push(str2); - } else { - final = final.concat(str2.split(byWord)); - } - }); - final = cleanUp(final); - return final; -}; -var parseBlocks_default = parseBlocks; - -// node_modules/compromise/src/1-one/match/methods/parseMatch/02-parseToken.js -var hasMinMax = /\{([0-9]+)?(, *[0-9]*)?\}/; -var andSign = /&&/; -var captureName = new RegExp(/^<\s*(\S+)\s*>/); -var titleCase = (str2) => str2.charAt(0).toUpperCase() + str2.substring(1); -var end = (str2) => str2.charAt(str2.length - 1); -var start = (str2) => str2.charAt(0); -var stripStart = (str2) => str2.substring(1); -var stripEnd = (str2) => str2.substring(0, str2.length - 1); -var stripBoth = function(str2) { - str2 = stripStart(str2); - str2 = stripEnd(str2); - return str2; -}; -var parseToken = function(w2, opts2) { - let obj = {}; - for (let i4 = 0; i4 < 2; i4 += 1) { - if (end(w2) === "$") { - obj.end = true; - w2 = stripEnd(w2); - } - if (start(w2) === "^") { - obj.start = true; - w2 = stripStart(w2); - } - if (end(w2) === "?") { - obj.optional = true; - w2 = stripEnd(w2); - } - if (start(w2) === "[" || end(w2) === "]") { - obj.group = null; - if (start(w2) === "[") { - obj.groupStart = true; - } - if (end(w2) === "]") { - obj.groupEnd = true; - } - w2 = w2.replace(/^\[/, ""); - w2 = w2.replace(/\]$/, ""); - if (start(w2) === "<") { - const res = captureName.exec(w2); - if (res.length >= 2) { - obj.group = res[1]; - w2 = w2.replace(res[0], ""); - } - } - } - if (end(w2) === "+") { - obj.greedy = true; - w2 = stripEnd(w2); - } - if (w2 !== "*" && end(w2) === "*" && w2 !== "\\*") { - obj.greedy = true; - w2 = stripEnd(w2); - } - if (start(w2) === "!") { - obj.negative = true; - w2 = stripStart(w2); - } - if (start(w2) === "~" && end(w2) === "~" && w2.length > 2) { - w2 = stripBoth(w2); - obj.fuzzy = true; - obj.min = opts2.fuzzy || 0.85; - if (/\(/.test(w2) === false) { - obj.word = w2; - return obj; - } - } - if (start(w2) === "/" && end(w2) === "/") { - w2 = stripBoth(w2); - if (opts2.caseSensitive) { - obj.use = "text"; - } - obj.regex = new RegExp(w2); - return obj; - } - if (hasMinMax.test(w2) === true) { - w2 = w2.replace(hasMinMax, (_a2, b2, c3) => { - if (c3 === void 0) { - obj.min = Number(b2); - obj.max = Number(b2); - } else { - c3 = c3.replace(/, */, ""); - if (b2 === void 0) { - obj.min = 0; - obj.max = Number(c3); - } else { - obj.min = Number(b2); - obj.max = Number(c3 || 999); - } - } - obj.greedy = true; - if (!obj.min) { - obj.optional = true; - } - return ""; - }); - } - if (start(w2) === "(" && end(w2) === ")") { - if (andSign.test(w2)) { - obj.choices = w2.split(andSign); - obj.operator = "and"; - } else { - obj.choices = w2.split("|"); - obj.operator = "or"; - } - obj.choices[0] = stripStart(obj.choices[0]); - let last = obj.choices.length - 1; - obj.choices[last] = stripEnd(obj.choices[last]); - obj.choices = obj.choices.map((s3) => s3.trim()); - obj.choices = obj.choices.filter((s3) => s3); - obj.choices = obj.choices.map((str2) => { - return str2.split(/ /g).map((s3) => parseToken(s3, opts2)); - }); - w2 = ""; - } - if (start(w2) === "{" && end(w2) === "}") { - w2 = stripBoth(w2); - obj.root = w2; - if (/\//.test(w2)) { - let split2 = obj.root.split(/\//); - obj.root = split2[0]; - obj.pos = split2[1]; - if (obj.pos === "adj") { - obj.pos = "Adjective"; - } - obj.pos = obj.pos.charAt(0).toUpperCase() + obj.pos.substr(1).toLowerCase(); - if (split2[2] !== void 0) { - obj.sense = split2[2]; - } - } - return obj; - } - if (start(w2) === "<" && end(w2) === ">") { - w2 = stripBoth(w2); - obj.chunk = titleCase(w2); - obj.greedy = true; - return obj; - } - if (start(w2) === "%" && end(w2) === "%") { - w2 = stripBoth(w2); - obj.switch = w2; - return obj; - } - } - if (start(w2) === "#") { - obj.tag = stripStart(w2); - obj.tag = titleCase(obj.tag); - return obj; - } - if (start(w2) === "@") { - obj.method = stripStart(w2); - return obj; - } - if (w2 === ".") { - obj.anything = true; - return obj; - } - if (w2 === "*") { - obj.anything = true; - obj.greedy = true; - obj.optional = true; - return obj; - } - if (w2) { - w2 = w2.replace("\\*", "*"); - w2 = w2.replace("\\.", "."); - if (opts2.caseSensitive) { - obj.use = "text"; - } else { - w2 = w2.toLowerCase(); - } - obj.word = w2; - } - return obj; -}; -var parseToken_default = parseToken; - -// node_modules/compromise/src/1-one/match/methods/parseMatch/03-splitHyphens.js -var hasDash = /[a-z0-9][-–—][a-z]/i; -var splitHyphens = function(regs, world2) { - let prefixes = world2.model.one.prefixes; - for (let i4 = regs.length - 1; i4 >= 0; i4 -= 1) { - let reg = regs[i4]; - if (reg.word && hasDash.test(reg.word)) { - let words = reg.word.split(/[-–—]/g); - if (prefixes.hasOwnProperty(words[0])) { - continue; - } - words = words.filter((w2) => w2).reverse(); - regs.splice(i4, 1); - words.forEach((w2) => { - let obj = Object.assign({}, reg); - obj.word = w2; - regs.splice(i4, 0, obj); - }); - } - } - return regs; -}; -var splitHyphens_default = splitHyphens; - -// node_modules/compromise/src/1-one/match/methods/parseMatch/04-inflect-root.js -var addVerbs = function(token, world2) { - let { all } = world2.methods.two.transform.verb || {}; - let str2 = token.root; - if (!all) { - return []; - } - return all(str2, world2.model); -}; -var addNoun = function(token, world2) { - let { all } = world2.methods.two.transform.noun || {}; - if (!all) { - return [token.root]; - } - return all(token.root, world2.model); -}; -var addAdjective = function(token, world2) { - let { all } = world2.methods.two.transform.adjective || {}; - if (!all) { - return [token.root]; - } - return all(token.root, world2.model); -}; -var inflectRoot = function(regs, world2) { - regs = regs.map((token) => { - if (token.root) { - if (world2.methods.two && world2.methods.two.transform) { - let choices = []; - if (token.pos) { - if (token.pos === "Verb") { - choices = choices.concat(addVerbs(token, world2)); - } else if (token.pos === "Noun") { - choices = choices.concat(addNoun(token, world2)); - } else if (token.pos === "Adjective") { - choices = choices.concat(addAdjective(token, world2)); - } - } else { - choices = choices.concat(addVerbs(token, world2)); - choices = choices.concat(addNoun(token, world2)); - choices = choices.concat(addAdjective(token, world2)); - } - choices = choices.filter((str2) => str2); - if (choices.length > 0) { - token.operator = "or"; - token.fastOr = new Set(choices); - } - } else { - token.machine = token.root; - delete token.id; - delete token.root; - } - } - return token; - }); - return regs; -}; -var inflect_root_default = inflectRoot; - -// node_modules/compromise/src/1-one/match/methods/parseMatch/05-postProcess.js -var nameGroups = function(regs) { - let index4 = 0; - let inGroup = null; - for (let i4 = 0; i4 < regs.length; i4++) { - const token = regs[i4]; - if (token.groupStart === true) { - inGroup = token.group; - if (inGroup === null) { - inGroup = String(index4); - index4 += 1; - } - } - if (inGroup !== null) { - token.group = inGroup; - } - if (token.groupEnd === true) { - inGroup = null; - } - } - return regs; -}; -var doFastOrMode = function(tokens) { - return tokens.map((token) => { - if (token.choices !== void 0) { - if (token.operator !== "or") { - return token; - } - if (token.fuzzy === true) { - return token; - } - let shouldPack = token.choices.every((block) => { - if (block.length !== 1) { - return false; - } - let reg = block[0]; - if (reg.fuzzy === true) { - return false; - } - if (reg.start || reg.end) { - return false; - } - if (reg.word !== void 0 && reg.negative !== true && reg.optional !== true && reg.method !== true) { - return true; - } - return false; - }); - if (shouldPack === true) { - token.fastOr = /* @__PURE__ */ new Set(); - token.choices.forEach((block) => { - token.fastOr.add(block[0].word); - }); - delete token.choices; - } - } - return token; - }); -}; -var fuzzyOr = function(regs) { - return regs.map((reg) => { - if (reg.fuzzy && reg.choices) { - reg.choices.forEach((r3) => { - if (r3.length === 1 && r3[0].word) { - r3[0].fuzzy = true; - r3[0].min = reg.min; - } - }); - } - return reg; - }); -}; -var postProcess = function(regs) { - regs = nameGroups(regs); - regs = doFastOrMode(regs); - regs = fuzzyOr(regs); - return regs; -}; -var postProcess_default = postProcess; - -// node_modules/compromise/src/1-one/match/methods/parseMatch/index.js -var syntax = function(input, opts2, world2) { - if (input === null || input === void 0 || input === "") { - return []; - } - opts2 = opts2 || {}; - if (typeof input === "number") { - input = String(input); - } - let tokens = parseBlocks_default(input); - tokens = tokens.map((str2) => parseToken_default(str2, opts2)); - tokens = splitHyphens_default(tokens, world2); - tokens = inflect_root_default(tokens, world2); - tokens = postProcess_default(tokens, opts2); - return tokens; -}; -var parseMatch_default = syntax; - -// node_modules/compromise/src/1-one/match/methods/match/01-failFast.js -var anyIntersection = function(setA, setB) { - for (let elem of setB) { - if (setA.has(elem)) { - return true; - } - } - return false; -}; -var failFast = function(regs, cache) { - for (let i4 = 0; i4 < regs.length; i4 += 1) { - let reg = regs[i4]; - if (reg.optional === true || reg.negative === true || reg.fuzzy === true) { - continue; - } - if (reg.word !== void 0 && cache.has(reg.word) === false) { - return true; - } - if (reg.tag !== void 0 && cache.has("#" + reg.tag) === false) { - return true; - } - if (reg.fastOr && anyIntersection(reg.fastOr, cache) === false) { - return false; - } - } - return false; -}; -var failFast_default = failFast; - -// node_modules/compromise/src/1-one/match/methods/match/term/_fuzzy.js -var editDistance = function(strA, strB) { - let aLength = strA.length, bLength = strB.length; - if (aLength === 0) { - return bLength; - } - if (bLength === 0) { - return aLength; - } - let limit2 = (bLength > aLength ? bLength : aLength) + 1; - if (Math.abs(aLength - bLength) > (limit2 || 100)) { - return limit2 || 100; - } - let matrix = []; - for (let i4 = 0; i4 < limit2; i4++) { - matrix[i4] = [i4]; - matrix[i4].length = limit2; - } - for (let i4 = 0; i4 < limit2; i4++) { - matrix[0][i4] = i4; - } - let j3, a_index, b_index, cost, min, t4; - for (let i4 = 1; i4 <= aLength; ++i4) { - a_index = strA[i4 - 1]; - for (j3 = 1; j3 <= bLength; ++j3) { - if (i4 === j3 && matrix[i4][j3] > 4) { - return aLength; - } - b_index = strB[j3 - 1]; - cost = a_index === b_index ? 0 : 1; - min = matrix[i4 - 1][j3] + 1; - if ((t4 = matrix[i4][j3 - 1] + 1) < min) - min = t4; - if ((t4 = matrix[i4 - 1][j3 - 1] + cost) < min) - min = t4; - let shouldUpdate = i4 > 1 && j3 > 1 && a_index === strB[j3 - 2] && strA[i4 - 2] === b_index && (t4 = matrix[i4 - 2][j3 - 2] + cost) < min; - if (shouldUpdate) { - matrix[i4][j3] = t4; - } else { - matrix[i4][j3] = min; - } - } - } - return matrix[aLength][bLength]; -}; -var fuzzyMatch = function(strA, strB, minLength = 3) { - if (strA === strB) { - return 1; - } - if (strA.length < minLength || strB.length < minLength) { - return 0; - } - const steps = editDistance(strA, strB); - let length2 = Math.max(strA.length, strB.length); - let relative = length2 === 0 ? 0 : steps / length2; - let similarity = 1 - relative; - return similarity; -}; -var fuzzy_default = fuzzyMatch; - -// node_modules/compromise/src/1-one/match/methods/termMethods.js -var startQuote = /([\u0022\uFF02\u0027\u201C\u2018\u201F\u201B\u201E\u2E42\u201A\u00AB\u2039\u2035\u2036\u2037\u301D\u0060\u301F])/; -var endQuote = /([\u0022\uFF02\u0027\u201D\u2019\u00BB\u203A\u2032\u2033\u2034\u301E\u00B4])/; -var hasHyphen = /^[-–—]$/; -var hasDash2 = / [-–—]{1,3} /; -var hasPost = (term, punct) => term.post.indexOf(punct) !== -1; -var methods10 = { - /** does it have a quotation symbol? */ - hasQuote: (term) => startQuote.test(term.pre) || endQuote.test(term.post), - /** does it have a comma? */ - hasComma: (term) => hasPost(term, ","), - /** does it end in a period? */ - hasPeriod: (term) => hasPost(term, ".") === true && hasPost(term, "...") === false, - /** does it end in an exclamation */ - hasExclamation: (term) => hasPost(term, "!"), - /** does it end with a question mark? */ - hasQuestionMark: (term) => hasPost(term, "?") || hasPost(term, "\xBF"), - /** is there a ... at the end? */ - hasEllipses: (term) => hasPost(term, "..") || hasPost(term, "\u2026"), - /** is there a semicolon after term word? */ - hasSemicolon: (term) => hasPost(term, ";"), - /** is there a colon after term word? */ - hasColon: (term) => hasPost(term, ":"), - /** is there a slash '/' in term word? */ - hasSlash: (term) => /\//.test(term.text), - /** a hyphen connects two words like-term */ - hasHyphen: (term) => hasHyphen.test(term.post) || hasHyphen.test(term.pre), - /** a dash separates words - like that */ - hasDash: (term) => hasDash2.test(term.post) || hasDash2.test(term.pre), - /** is it multiple words combinded */ - hasContraction: (term) => Boolean(term.implicit), - /** is it an acronym */ - isAcronym: (term) => term.tags.has("Acronym"), - /** does it have any tags */ - isKnown: (term) => term.tags.size > 0, - /** uppercase first letter, then a lowercase */ - isTitleCase: (term) => /^\p{Lu}[a-z'\u00C0-\u00FF]/u.test(term.text), - /** uppercase all letters */ - isUpperCase: (term) => /^\p{Lu}+$/u.test(term.text) -}; -methods10.hasQuotation = methods10.hasQuote; -var termMethods_default = methods10; - -// node_modules/compromise/src/1-one/match/methods/match/term/doesMatch.js -var wrapMatch = function() { -}; -var doesMatch = function(term, reg, index4, length2) { - if (reg.anything === true) { - return true; - } - if (reg.start === true && index4 !== 0) { - return false; - } - if (reg.end === true && index4 !== length2 - 1) { - return false; - } - if (reg.id !== void 0 && reg.id === term.id) { - return true; - } - if (reg.word !== void 0) { - if (reg.use) { - return reg.word === term[reg.use]; - } - if (term.machine !== null && term.machine === reg.word) { - return true; - } - if (term.alias !== void 0 && term.alias.hasOwnProperty(reg.word)) { - return true; - } - if (reg.fuzzy === true) { - if (reg.word === term.root) { - return true; - } - let score = fuzzy_default(reg.word, term.normal); - if (score >= reg.min) { - return true; - } - } - if (term.alias && term.alias.some((str2) => str2 === reg.word)) { - return true; - } - return reg.word === term.text || reg.word === term.normal; - } - if (reg.tag !== void 0) { - return term.tags.has(reg.tag) === true; - } - if (reg.method !== void 0) { - if (typeof termMethods_default[reg.method] === "function" && termMethods_default[reg.method](term) === true) { - return true; - } - return false; - } - if (reg.pre !== void 0) { - return term.pre && term.pre.includes(reg.pre); - } - if (reg.post !== void 0) { - return term.post && term.post.includes(reg.post); - } - if (reg.regex !== void 0) { - let str2 = term.normal; - if (reg.use) { - str2 = term[reg.use]; - } - return reg.regex.test(str2); - } - if (reg.chunk !== void 0) { - return term.chunk === reg.chunk; - } - if (reg.switch !== void 0) { - return term.switch === reg.switch; - } - if (reg.machine !== void 0) { - return term.normal === reg.machine || term.machine === reg.machine || term.root === reg.machine; - } - if (reg.sense !== void 0) { - return term.sense === reg.sense; - } - if (reg.fastOr !== void 0) { - if (reg.pos && !term.tags.has(reg.pos)) { - return null; - } - let str2 = term.root || term.implicit || term.machine || term.normal; - return reg.fastOr.has(str2) || reg.fastOr.has(term.text); - } - if (reg.choices !== void 0) { - if (reg.operator === "and") { - return reg.choices.every((r3) => wrapMatch(term, r3, index4, length2)); - } - return reg.choices.some((r3) => wrapMatch(term, r3, index4, length2)); - } - return false; -}; -wrapMatch = function(t4, reg, index4, length2) { - let result = doesMatch(t4, reg, index4, length2); - if (reg.negative === true) { - return !result; - } - return result; -}; -var doesMatch_default = wrapMatch; - -// node_modules/compromise/src/1-one/match/methods/match/steps/logic/greedy.js -var getGreedy = function(state, endReg) { - let reg = Object.assign({}, state.regs[state.r], { start: false, end: false }); - let start2 = state.t; - for (; state.t < state.terms.length; state.t += 1) { - if (endReg && doesMatch_default(state.terms[state.t], endReg, state.start_i + state.t, state.phrase_length)) { - return state.t; - } - let count = state.t - start2 + 1; - if (reg.max !== void 0 && count === reg.max) { - return state.t; - } - if (doesMatch_default(state.terms[state.t], reg, state.start_i + state.t, state.phrase_length) === false) { - if (reg.min !== void 0 && count < reg.min) { - return null; - } - return state.t; - } - } - return state.t; -}; -var greedyTo = function(state, nextReg) { - let t4 = state.t; - if (!nextReg) { - return state.terms.length; - } - for (; t4 < state.terms.length; t4 += 1) { - if (doesMatch_default(state.terms[t4], nextReg, state.start_i + t4, state.phrase_length) === true) { - return t4; - } - } - return null; -}; -var isEndGreedy = function(reg, state) { - if (reg.end === true && reg.greedy === true) { - if (state.start_i + state.t < state.phrase_length - 1) { - let tmpReg = Object.assign({}, reg, { end: false }); - if (doesMatch_default(state.terms[state.t], tmpReg, state.start_i + state.t, state.phrase_length) === true) { - return true; - } - } - } - return false; -}; - -// node_modules/compromise/src/1-one/match/methods/match/_lib.js -var getGroup = function(state, term_index) { - if (state.groups[state.inGroup]) { - return state.groups[state.inGroup]; - } - state.groups[state.inGroup] = { - start: term_index, - length: 0 - }; - return state.groups[state.inGroup]; -}; - -// node_modules/compromise/src/1-one/match/methods/match/steps/astrix.js -var doAstrix = function(state) { - let { regs } = state; - let reg = regs[state.r]; - let skipto = greedyTo(state, regs[state.r + 1]); - if (skipto === null || skipto === 0) { - return null; - } - if (reg.min !== void 0 && skipto - state.t < reg.min) { - return null; - } - if (reg.max !== void 0 && skipto - state.t > reg.max) { - state.t = state.t + reg.max; - return true; - } - if (state.hasGroup === true) { - const g3 = getGroup(state, state.t); - g3.length = skipto - state.t; - } - state.t = skipto; - return true; -}; -var astrix_default = doAstrix; - -// node_modules/compromise/src/1-one/match/methods/match/steps/logic/and-or.js -var isArray7 = function(arr) { - return Object.prototype.toString.call(arr) === "[object Array]"; -}; -var doOrBlock = function(state, skipN = 0) { - let block = state.regs[state.r]; - let wasFound = false; - for (let c3 = 0; c3 < block.choices.length; c3 += 1) { - let regs = block.choices[c3]; - if (!isArray7(regs)) { - return false; - } - wasFound = regs.every((cr2, w_index) => { - let extra = 0; - let t4 = state.t + w_index + skipN + extra; - if (state.terms[t4] === void 0) { - return false; - } - let foundBlock = doesMatch_default(state.terms[t4], cr2, t4 + state.start_i, state.phrase_length); - if (foundBlock === true && cr2.greedy === true) { - for (let i4 = 1; i4 < state.terms.length; i4 += 1) { - let term = state.terms[t4 + i4]; - if (term) { - let keepGoing = doesMatch_default(term, cr2, state.start_i + i4, state.phrase_length); - if (keepGoing === true) { - extra += 1; - } else { - break; - } - } - } - } - skipN += extra; - return foundBlock; - }); - if (wasFound) { - skipN += regs.length; - break; - } - } - if (wasFound && block.greedy === true) { - return doOrBlock(state, skipN); - } - return skipN; -}; -var doAndBlock = function(state) { - let longest = 0; - let reg = state.regs[state.r]; - let allDidMatch = reg.choices.every((block) => { - let allWords = block.every((cr2, w_index) => { - let tryTerm = state.t + w_index; - if (state.terms[tryTerm] === void 0) { - return false; - } - return doesMatch_default(state.terms[tryTerm], cr2, tryTerm, state.phrase_length); - }); - if (allWords === true && block.length > longest) { - longest = block.length; - } - return allWords; - }); - if (allDidMatch === true) { - return longest; - } - return false; -}; - -// node_modules/compromise/src/1-one/match/methods/match/steps/or-block.js -var orBlock = function(state) { - const { regs } = state; - let reg = regs[state.r]; - let skipNum = doOrBlock(state); - if (skipNum) { - if (reg.negative === true) { - return null; - } - if (state.hasGroup === true) { - const g3 = getGroup(state, state.t); - g3.length += skipNum; - } - if (reg.end === true) { - let end2 = state.phrase_length; - if (state.t + state.start_i + skipNum !== end2) { - return null; - } - } - state.t += skipNum; - return true; - } else if (!reg.optional) { - return null; - } - return true; -}; -var or_block_default = orBlock; - -// node_modules/compromise/src/1-one/match/methods/match/steps/and-block.js -var andBlock = function(state) { - const { regs } = state; - let reg = regs[state.r]; - let skipNum = doAndBlock(state); - if (skipNum) { - if (reg.negative === true) { - return null; - } - if (state.hasGroup === true) { - const g3 = getGroup(state, state.t); - g3.length += skipNum; - } - if (reg.end === true) { - let end2 = state.phrase_length - 1; - if (state.t + state.start_i !== end2) { - return null; - } - } - state.t += skipNum; - return true; - } else if (!reg.optional) { - return null; - } - return true; -}; -var and_block_default = andBlock; - -// node_modules/compromise/src/1-one/match/methods/match/steps/logic/negative-greedy.js -var negGreedy = function(state, reg, nextReg) { - let skip = 0; - for (let t4 = state.t; t4 < state.terms.length; t4 += 1) { - let found = doesMatch_default(state.terms[t4], reg, state.start_i + state.t, state.phrase_length); - if (found) { - break; - } - if (nextReg) { - found = doesMatch_default(state.terms[t4], nextReg, state.start_i + state.t, state.phrase_length); - if (found) { - break; - } - } - skip += 1; - if (reg.max !== void 0 && skip === reg.max) { - break; - } - } - if (skip === 0) { - return false; - } - if (reg.min && reg.min > skip) { - return false; - } - state.t += skip; - return true; -}; -var negative_greedy_default = negGreedy; - -// node_modules/compromise/src/1-one/match/methods/match/steps/negative.js -var doNegative = function(state) { - const { regs } = state; - let reg = regs[state.r]; - let tmpReg = Object.assign({}, reg); - tmpReg.negative = false; - let found = doesMatch_default(state.terms[state.t], tmpReg, state.start_i + state.t, state.phrase_length); - if (found) { - return false; - } - if (reg.optional) { - let nextReg = regs[state.r + 1]; - if (nextReg) { - let fNext = doesMatch_default(state.terms[state.t], nextReg, state.start_i + state.t, state.phrase_length); - if (fNext) { - state.r += 1; - } else if (nextReg.optional && regs[state.r + 2]) { - let fNext2 = doesMatch_default(state.terms[state.t], regs[state.r + 2], state.start_i + state.t, state.phrase_length); - if (fNext2) { - state.r += 2; - } - } - } - } - if (reg.greedy) { - return negative_greedy_default(state, tmpReg, regs[state.r + 1]); - } - state.t += 1; - return true; -}; -var negative_default = doNegative; - -// node_modules/compromise/src/1-one/match/methods/match/steps/optional-match.js -var foundOptional = function(state) { - const { regs } = state; - let reg = regs[state.r]; - let term = state.terms[state.t]; - let nextRegMatched = doesMatch_default(term, regs[state.r + 1], state.start_i + state.t, state.phrase_length); - if (reg.negative || nextRegMatched) { - let nextTerm = state.terms[state.t + 1]; - if (!nextTerm || !doesMatch_default(nextTerm, regs[state.r + 1], state.start_i + state.t, state.phrase_length)) { - state.r += 1; - } - } -}; -var optional_match_default = foundOptional; - -// node_modules/compromise/src/1-one/match/methods/match/steps/greedy-match.js -var greedyMatch = function(state) { - const { regs, phrase_length } = state; - let reg = regs[state.r]; - state.t = getGreedy(state, regs[state.r + 1]); - if (state.t === null) { - return null; - } - if (reg.min && reg.min > state.t) { - return null; - } - if (reg.end === true && state.start_i + state.t !== phrase_length) { - return null; - } - return true; -}; -var greedy_match_default = greedyMatch; - -// node_modules/compromise/src/1-one/match/methods/match/steps/contraction-skip.js -var contractionSkip = function(state) { - let term = state.terms[state.t]; - let reg = state.regs[state.r]; - if (term.implicit && state.terms[state.t + 1]) { - let nextTerm = state.terms[state.t + 1]; - if (!nextTerm.implicit) { - return; - } - if (reg.word === term.normal) { - state.t += 1; - } - if (reg.method === "hasContraction") { - state.t += 1; - } - } -}; -var contraction_skip_default = contractionSkip; - -// node_modules/compromise/src/1-one/match/methods/match/steps/simple-match.js -var setGroup = function(state, startAt) { - let reg = state.regs[state.r]; - const g3 = getGroup(state, startAt); - if (state.t > 1 && reg.greedy) { - g3.length += state.t - startAt; - } else { - g3.length++; - } -}; -var simpleMatch = function(state) { - const { regs } = state; - let reg = regs[state.r]; - let term = state.terms[state.t]; - let startAt = state.t; - if (reg.optional && regs[state.r + 1] && reg.negative) { - return true; - } - if (reg.optional && regs[state.r + 1]) { - optional_match_default(state); - } - if (term.implicit && state.terms[state.t + 1]) { - contraction_skip_default(state); - } - state.t += 1; - if (reg.end === true && state.t !== state.terms.length && reg.greedy !== true) { - return null; - } - if (reg.greedy === true) { - let alive = greedy_match_default(state); - if (!alive) { - return null; - } - } - if (state.hasGroup === true) { - setGroup(state, startAt); - } - return true; -}; -var simple_match_default = simpleMatch; - -// node_modules/compromise/src/1-one/match/methods/match/02-from-here.js -var tryHere = function(terms, regs, start_i, phrase_length) { - if (terms.length === 0 || regs.length === 0) { - return null; - } - let state = { - t: 0, - terms, - r: 0, - regs, - groups: {}, - start_i, - phrase_length, - inGroup: null - }; - for (; state.r < regs.length; state.r += 1) { - let reg = regs[state.r]; - state.hasGroup = Boolean(reg.group); - if (state.hasGroup === true) { - state.inGroup = reg.group; - } else { - state.inGroup = null; - } - if (!state.terms[state.t]) { - const alive = regs.slice(state.r).some((remain) => !remain.optional); - if (alive === false) { - break; - } - return null; - } - if (reg.anything === true && reg.greedy === true) { - let alive = astrix_default(state); - if (!alive) { - return null; - } - continue; - } - if (reg.choices !== void 0 && reg.operator === "or") { - let alive = or_block_default(state); - if (!alive) { - return null; - } - continue; - } - if (reg.choices !== void 0 && reg.operator === "and") { - let alive = and_block_default(state); - if (!alive) { - return null; - } - continue; - } - if (reg.anything === true) { - if (reg.negative && reg.anything) { - return null; - } - let alive = simple_match_default(state); - if (!alive) { - return null; - } - continue; - } - if (isEndGreedy(reg, state) === true) { - let alive = simple_match_default(state); - if (!alive) { - return null; - } - continue; - } - if (reg.negative) { - let alive = negative_default(state); - if (!alive) { - return null; - } - continue; - } - let hasMatch = doesMatch_default(state.terms[state.t], reg, state.start_i + state.t, state.phrase_length); - if (hasMatch === true) { - let alive = simple_match_default(state); - if (!alive) { - return null; - } - continue; - } - if (reg.optional === true) { - continue; - } - return null; - } - let pntr = [null, start_i, state.t + start_i]; - if (pntr[1] === pntr[2]) { - return null; - } - let groups = {}; - Object.keys(state.groups).forEach((k3) => { - let o3 = state.groups[k3]; - let start2 = start_i + o3.start; - groups[k3] = [null, start2, start2 + o3.length]; - }); - return { pointer: pntr, groups }; -}; -var from_here_default = tryHere; - -// node_modules/compromise/src/1-one/match/methods/match/03-getGroup.js -var getGroup2 = function(res, group) { - let ptrs = []; - let byGroup = {}; - if (res.length === 0) { - return { ptrs, byGroup }; - } - if (typeof group === "number") { - group = String(group); - } - if (group) { - res.forEach((r3) => { - if (r3.groups[group]) { - ptrs.push(r3.groups[group]); - } - }); - } else { - res.forEach((r3) => { - ptrs.push(r3.pointer); - Object.keys(r3.groups).forEach((k3) => { - byGroup[k3] = byGroup[k3] || []; - byGroup[k3].push(r3.groups[k3]); - }); - }); - } - return { ptrs, byGroup }; -}; -var getGroup_default = getGroup2; - -// node_modules/compromise/src/1-one/match/methods/match/03-notIf.js -var notIf = function(results, not, docs) { - results = results.filter((res) => { - let [n3, start2, end2] = res.pointer; - let terms = docs[n3].slice(start2, end2); - for (let i4 = 0; i4 < terms.length; i4 += 1) { - let slice = terms.slice(i4); - let found = from_here_default(slice, not, i4, terms.length); - if (found !== null) { - return false; - } - } - return true; - }); - return results; -}; -var notIf_default = notIf; - -// node_modules/compromise/src/1-one/match/methods/match/index.js -var addSentence = function(res, n3) { - res.pointer[0] = n3; - Object.keys(res.groups).forEach((k3) => { - res.groups[k3][0] = n3; - }); - return res; -}; -var handleStart = function(terms, regs, n3) { - let res = from_here_default(terms, regs, 0, terms.length); - if (res) { - res = addSentence(res, n3); - return res; - } - return null; -}; -var runMatch = function(docs, todo, cache) { - cache = cache || []; - let { regs, group, justOne } = todo; - let results = []; - if (!regs || regs.length === 0) { - return { ptrs: [], byGroup: {} }; - } - const minLength = regs.filter((r3) => r3.optional !== true && r3.negative !== true).length; - docs: - for (let n3 = 0; n3 < docs.length; n3 += 1) { - let terms = docs[n3]; - if (cache[n3] && failFast_default(regs, cache[n3])) { - continue; - } - if (regs[0].start === true) { - let foundStart = handleStart(terms, regs, n3, group); - if (foundStart) { - results.push(foundStart); - } - continue; - } - for (let i4 = 0; i4 < terms.length; i4 += 1) { - let slice = terms.slice(i4); - if (slice.length < minLength) { - break; - } - let res = from_here_default(slice, regs, i4, terms.length); - if (res) { - res = addSentence(res, n3); - results.push(res); - if (justOne === true) { - break docs; - } - let end2 = res.pointer[2]; - if (Math.abs(end2 - 1) > i4) { - i4 = Math.abs(end2 - 1); - } - } - } - } - if (regs[regs.length - 1].end === true) { - results = results.filter((res) => { - let n3 = res.pointer[0]; - return docs[n3].length === res.pointer[2]; - }); - } - if (todo.notIf) { - results = notIf_default(results, todo.notIf, docs); - } - results = getGroup_default(results, group); - results.ptrs.forEach((ptr) => { - let [n3, start2, end2] = ptr; - ptr[3] = docs[n3][start2].id; - ptr[4] = docs[n3][end2 - 1].id; - }); - return results; -}; -var match_default2 = runMatch; - -// node_modules/compromise/src/1-one/match/methods/index.js -var methods11 = { - one: { - termMethods: termMethods_default, - parseMatch: parseMatch_default, - match: match_default2 - } -}; -var methods_default4 = methods11; - -// node_modules/compromise/src/1-one/match/lib.js -var lib_default2 = { - /** pre-parse any match statements */ - parseMatch: function(str2, opts2) { - const world2 = this.world(); - let killUnicode2 = world2.methods.one.killUnicode; - if (killUnicode2) { - str2 = killUnicode2(str2, world2); - } - return world2.methods.one.parseMatch(str2, opts2, world2); - } -}; - -// node_modules/compromise/src/1-one/match/plugin.js -var plugin_default7 = { - api: api_default4, - methods: methods_default4, - lib: lib_default2 -}; - -// node_modules/compromise/src/1-one/output/api/html.js -var isClass = /^\../; -var isId = /^#./; -var escapeXml = (str2) => { - str2 = str2.replace(/&/g, "&"); - str2 = str2.replace(//g, ">"); - str2 = str2.replace(/"/g, """); - str2 = str2.replace(/'/g, "'"); - return str2; -}; -var toTag = function(k3) { - let start2 = ""; - let end2 = ""; - k3 = escapeXml(k3); - if (isClass.test(k3)) { - start2 = ``; - } - start2 += ">"; - return { start: start2, end: end2 }; -}; -var getIndex = function(doc, obj) { - let starts = {}; - let ends = {}; - Object.keys(obj).forEach((k3) => { - let res = obj[k3]; - let tag = toTag(k3); - if (typeof res === "string") { - res = doc.match(res); - } - res.docs.forEach((terms) => { - if (terms.every((t4) => t4.implicit)) { - return; - } - let a3 = terms[0].id; - starts[a3] = starts[a3] || []; - starts[a3].push(tag.start); - let b2 = terms[terms.length - 1].id; - ends[b2] = ends[b2] || []; - ends[b2].push(tag.end); - }); - }); - return { starts, ends }; -}; -var html = function(obj) { - let { starts, ends } = getIndex(this, obj); - let out2 = ""; - this.docs.forEach((terms) => { - for (let i4 = 0; i4 < terms.length; i4 += 1) { - let t4 = terms[i4]; - if (starts.hasOwnProperty(t4.id)) { - out2 += starts[t4.id].join(""); - } - out2 += t4.pre || ""; - out2 += t4.text || ""; - if (ends.hasOwnProperty(t4.id)) { - out2 += ends[t4.id].join(""); - } - out2 += t4.post || ""; - } - }); - return out2; -}; -var html_default = { html }; - -// node_modules/compromise/src/1-one/output/api/_text.js -var trimEnd = /[,:;)\]*.?~!\u0022\uFF02\u201D\u2019\u00BB\u203A\u2032\u2033\u2034\u301E\u00B4—-]+$/; -var trimStart = /^[(['"*~\uFF02\u201C\u2018\u201F\u201B\u201E\u2E42\u201A\u00AB\u2039\u2035\u2036\u2037\u301D\u0060\u301F]+/; -var punctToKill = /[,:;)('"\u201D\]]/; -var isHyphen = /^[-–—]$/; -var hasSpace = / /; -var textFromTerms = function(terms, opts2, keepSpace = true) { - let txt = ""; - terms.forEach((t4) => { - let pre = t4.pre || ""; - let post2 = t4.post || ""; - if (opts2.punctuation === "some") { - pre = pre.replace(trimStart, ""); - if (isHyphen.test(post2)) { - post2 = " "; - } - post2 = post2.replace(punctToKill, ""); - post2 = post2.replace(/\?!+/, "?"); - post2 = post2.replace(/!+/, "!"); - post2 = post2.replace(/\?+/, "?"); - post2 = post2.replace(/\.{2,}/, ""); - if (t4.tags.has("Abbreviation")) { - post2 = post2.replace(/\./, ""); - } - } - if (opts2.whitespace === "some") { - pre = pre.replace(/\s/, ""); - post2 = post2.replace(/\s+/, " "); - } - if (!opts2.keepPunct) { - pre = pre.replace(trimStart, ""); - if (post2 === "-") { - post2 = " "; - } else { - post2 = post2.replace(trimEnd, ""); - } - } - let word = t4[opts2.form || "text"] || t4.normal || ""; - if (opts2.form === "implicit") { - word = t4.implicit || t4.text; - } - if (opts2.form === "root" && t4.implicit) { - word = t4.root || t4.implicit || t4.normal; - } - if ((opts2.form === "machine" || opts2.form === "implicit" || opts2.form === "root") && t4.implicit) { - if (!post2 || !hasSpace.test(post2)) { - post2 += " "; - } - } - txt += pre + word + post2; - }); - if (keepSpace === false) { - txt = txt.trim(); - } - if (opts2.lowerCase === true) { - txt = txt.toLowerCase(); - } - return txt; -}; -var textFromDoc = function(docs, opts2) { - let text = ""; - if (!docs || !docs[0] || !docs[0][0]) { - return text; - } - for (let i4 = 0; i4 < docs.length; i4 += 1) { - text += textFromTerms(docs[i4], opts2, true); - } - if (!opts2.keepSpace) { - text = text.trim(); - } - if (opts2.keepEndPunct === false) { - if (!docs[0][0].tags.has("Emoticon")) { - text = text.replace(trimStart, ""); - } - let last = docs[docs.length - 1]; - if (!last[last.length - 1].tags.has("Emoticon")) { - text = text.replace(trimEnd, ""); - } - if (text.endsWith(`'`) && !text.endsWith(`s'`)) { - text = text.replace(/'/, ""); - } - } - if (opts2.cleanWhitespace === true) { - text = text.trim(); - } - return text; -}; - -// node_modules/compromise/src/1-one/output/api/_fmts.js -var fmts = { - text: { - form: "text" - }, - normal: { - whitespace: "some", - punctuation: "some", - case: "some", - unicode: "some", - form: "normal" - }, - machine: { - keepSpace: false, - whitespace: "some", - punctuation: "some", - case: "none", - unicode: "some", - form: "machine" - }, - root: { - keepSpace: false, - whitespace: "some", - punctuation: "some", - case: "some", - unicode: "some", - form: "root" - }, - implicit: { - form: "implicit" - } -}; -fmts.clean = fmts.normal; -fmts.reduced = fmts.root; -var fmts_default = fmts; - -// node_modules/compromise/src/1-one/output/methods/hash.js -var k = []; -var i = 0; -for (; i < 64; ) { - k[i] = 0 | Math.sin(++i % Math.PI) * 4294967296; -} -var md5 = function(s3) { - let b2, c3, d3, h3 = [b2 = 1732584193, c3 = 4023233417, ~b2, ~c3], words = [], j3 = decodeURI(encodeURI(s3)) + "\x80", a3 = j3.length; - s3 = --a3 / 4 + 2 | 15; - words[--s3] = a3 * 8; - for (; ~a3; ) { - words[a3 >> 2] |= j3.charCodeAt(a3) << 8 * a3--; - } - for (i = j3 = 0; i < s3; i += 16) { - a3 = h3; - for (; j3 < 64; a3 = [ - d3 = a3[3], - b2 + ((d3 = a3[0] + [b2 & c3 | ~b2 & d3, d3 & b2 | ~d3 & c3, b2 ^ c3 ^ d3, c3 ^ (b2 | ~d3)][a3 = j3 >> 4] + k[j3] + ~~words[i | [j3, 5 * j3 + 1, 3 * j3 + 5, 7 * j3][a3] & 15]) << (a3 = [7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21][4 * a3 + j3++ % 4]) | d3 >>> -a3), - b2, - c3 - ]) { - b2 = a3[1] | 0; - c3 = a3[2]; - } - for (j3 = 4; j3; ) - h3[--j3] += a3[j3]; - } - for (s3 = ""; j3 < 32; ) { - s3 += (h3[j3 >> 3] >> (1 ^ j3++) * 4 & 15).toString(16); - } - return s3; -}; -var hash_default = md5; - -// node_modules/compromise/src/1-one/output/api/json.js -var defaults = { - text: true, - terms: true -}; -var opts = { case: "none", unicode: "some", form: "machine", punctuation: "some" }; -var merge = function(a3, b2) { - return Object.assign({}, a3, b2); -}; -var fns4 = { - text: (terms) => textFromTerms(terms, { keepPunct: true }, false), - normal: (terms) => textFromTerms(terms, merge(fmts_default.normal, { keepPunct: true }), false), - implicit: (terms) => textFromTerms(terms, merge(fmts_default.implicit, { keepPunct: true }), false), - machine: (terms) => textFromTerms(terms, opts, false), - root: (terms) => textFromTerms(terms, merge(opts, { form: "root" }), false), - hash: (terms) => hash_default(textFromTerms(terms, { keepPunct: true }, false)), - offset: (terms) => { - let len = fns4.text(terms).length; - return { - index: terms[0].offset.index, - start: terms[0].offset.start, - length: len - }; - }, - terms: (terms) => { - return terms.map((t4) => { - let term = Object.assign({}, t4); - term.tags = Array.from(t4.tags); - return term; - }); - }, - confidence: (_terms, view, i4) => view.eq(i4).confidence(), - syllables: (_terms, view, i4) => view.eq(i4).syllables(), - sentence: (_terms, view, i4) => view.eq(i4).fullSentence().text(), - dirty: (terms) => terms.some((t4) => t4.dirty === true) -}; -fns4.sentences = fns4.sentence; -fns4.clean = fns4.normal; -fns4.reduced = fns4.root; -var toJSON = function(view, option) { - option = option || {}; - if (typeof option === "string") { - option = {}; - } - option = Object.assign({}, defaults, option); - if (option.offset) { - view.compute("offset"); - } - return view.docs.map((terms, i4) => { - let res = {}; - Object.keys(option).forEach((k3) => { - if (option[k3] && fns4[k3]) { - res[k3] = fns4[k3](terms, view, i4); - } - }); - return res; - }); -}; -var methods12 = { - /** return data */ - json: function(n3) { - let res = toJSON(this, n3); - if (typeof n3 === "number") { - return res[n3]; - } - return res; - } -}; -methods12.data = methods12.json; -var json_default = methods12; - -// node_modules/compromise/src/1-one/output/api/debug.js -var isClientSide = () => typeof window !== "undefined" && window.document; -var debug2 = function(fmt2) { - let debugMethods = this.methods.one.debug || {}; - if (fmt2 && debugMethods.hasOwnProperty(fmt2)) { - debugMethods[fmt2](this); - return this; - } - if (isClientSide()) { - debugMethods.clientSide(this); - return this; - } - debugMethods.tags(this); - return this; -}; -var debug_default2 = debug2; - -// node_modules/compromise/src/1-one/output/api/wrap.js -var toText = function(term) { - let pre = term.pre || ""; - let post2 = term.post || ""; - return pre + term.text + post2; -}; -var findStarts = function(doc, obj) { - let starts = {}; - Object.keys(obj).forEach((reg) => { - let m2 = doc.match(reg); - m2.fullPointer.forEach((a3) => { - starts[a3[3]] = { fn: obj[reg], end: a3[2] }; - }); - }); - return starts; -}; -var wrap = function(doc, obj) { - let starts = findStarts(doc, obj); - let text = ""; - doc.docs.forEach((terms, n3) => { - for (let i4 = 0; i4 < terms.length; i4 += 1) { - let t4 = terms[i4]; - if (starts.hasOwnProperty(t4.id)) { - let { fn, end: end2 } = starts[t4.id]; - let m2 = doc.update([[n3, i4, end2]]); - text += terms[i4].pre || ""; - text += fn(m2); - i4 = end2 - 1; - text += terms[i4].post || ""; - } else { - text += toText(t4); - } - } - }); - return text; -}; -var wrap_default = wrap; - -// node_modules/compromise/src/1-one/output/api/out.js -var isObject5 = (val) => { - return Object.prototype.toString.call(val) === "[object Object]"; -}; -var topk = function(arr) { - let obj = {}; - arr.forEach((a3) => { - obj[a3] = obj[a3] || 0; - obj[a3] += 1; - }); - let res = Object.keys(obj).map((k3) => { - return { normal: k3, count: obj[k3] }; - }); - return res.sort((a3, b2) => a3.count > b2.count ? -1 : 0); -}; -var out = function(method) { - if (isObject5(method)) { - return wrap_default(this, method); - } - if (method === "text") { - return this.text(); - } - if (method === "normal") { - return this.text("normal"); - } - if (method === "root") { - return this.text("root"); - } - if (method === "machine" || method === "reduced") { - return this.text("machine"); - } - if (method === "hash" || method === "md5") { - return hash_default(this.text()); - } - if (method === "json") { - return this.json(); - } - if (method === "offset" || method === "offsets") { - this.compute("offset"); - return this.json({ offset: true }); - } - if (method === "array") { - let arr = this.docs.map((terms) => { - return terms.reduce((str2, t4) => { - return str2 + t4.pre + t4.text + t4.post; - }, "").trim(); - }); - return arr.filter((str2) => str2); - } - if (method === "freq" || method === "frequency" || method === "topk") { - return topk(this.json({ normal: true }).map((o3) => o3.normal)); - } - if (method === "terms") { - let list2 = []; - this.docs.forEach((terms) => { - let words = terms.map((t4) => t4.text); - words = words.filter((t4) => t4); - list2 = list2.concat(words); - }); - return list2; - } - if (method === "tags") { - return this.docs.map((terms) => { - return terms.reduce((h3, t4) => { - h3[t4.implicit || t4.normal] = Array.from(t4.tags); - return h3; - }, {}); - }); - } - if (method === "debug") { - return this.debug(); - } - return this.text(); -}; -var methods13 = { - /** */ - debug: debug_default2, - /** */ - out, - /** */ - wrap: function(obj) { - return wrap_default(this, obj); - } -}; -var out_default = methods13; - -// node_modules/compromise/src/1-one/output/api/text.js -var isObject6 = (val) => { - return Object.prototype.toString.call(val) === "[object Object]"; -}; -var text_default = { - /** */ - text: function(fmt2) { - let opts2 = {}; - if (fmt2 && typeof fmt2 === "string" && fmts_default.hasOwnProperty(fmt2)) { - opts2 = Object.assign({}, fmts_default[fmt2]); - } else if (fmt2 && isObject6(fmt2)) { - opts2 = Object.assign({}, fmt2); - } - if (opts2.keepSpace === void 0 && !this.isFull()) { - opts2.keepSpace = false; - } - if (opts2.keepEndPunct === void 0 && this.pointer) { - let ptr = this.pointer[0]; - if (ptr && ptr[1]) { - opts2.keepEndPunct = false; - } else { - opts2.keepEndPunct = true; - } - } - if (opts2.keepPunct === void 0) { - opts2.keepPunct = true; - } - if (opts2.keepSpace === void 0) { - opts2.keepSpace = true; - } - return textFromDoc(this.docs, opts2); - } -}; - -// node_modules/compromise/src/1-one/output/api/index.js -var methods14 = Object.assign({}, out_default, text_default, json_default, html_default); -var addAPI3 = function(View2) { - Object.assign(View2.prototype, methods14); -}; -var api_default5 = addAPI3; - -// node_modules/compromise/src/1-one/output/methods/debug/client-side.js -var logClientSide = function(view) { - console.log("%c -=-=- ", "background-color:#6699cc;"); - view.forEach((m2) => { - console.groupCollapsed(m2.text()); - let terms = m2.docs[0]; - let out2 = terms.map((t4) => { - let text = t4.text || "-"; - if (t4.implicit) { - text = "[" + t4.implicit + "]"; - } - let tags = "[" + Array.from(t4.tags).join(", ") + "]"; - return { text, tags }; - }); - console.table(out2, ["text", "tags"]); - console.groupEnd(); - }); -}; -var client_side_default = logClientSide; - -// node_modules/compromise/src/1-one/output/methods/debug/_color.js -var reset = "\x1B[0m"; -var cli = { - green: (str2) => "\x1B[32m" + str2 + reset, - red: (str2) => "\x1B[31m" + str2 + reset, - blue: (str2) => "\x1B[34m" + str2 + reset, - magenta: (str2) => "\x1B[35m" + str2 + reset, - cyan: (str2) => "\x1B[36m" + str2 + reset, - yellow: (str2) => "\x1B[33m" + str2 + reset, - black: (str2) => "\x1B[30m" + str2 + reset, - dim: (str2) => "\x1B[2m" + str2 + reset, - i: (str2) => "\x1B[3m" + str2 + reset -}; -var color_default = cli; - -// node_modules/compromise/src/1-one/output/methods/debug/tags.js -var tagString = function(tags, model4) { - if (model4.one.tagSet) { - tags = tags.map((tag) => { - if (!model4.one.tagSet.hasOwnProperty(tag)) { - return tag; - } - const c3 = model4.one.tagSet[tag].color || "blue"; - return color_default[c3](tag); - }); - } - return tags.join(", "); -}; -var showTags = function(view) { - let { docs, model: model4 } = view; - if (docs.length === 0) { - console.log(color_default.blue("\n \u2500\u2500\u2500\u2500\u2500\u2500")); - } - docs.forEach((terms) => { - console.log(color_default.blue("\n \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")); - terms.forEach((t4) => { - let tags = [...t4.tags || []]; - let text = t4.text || "-"; - if (t4.sense) { - text = `{${t4.normal}/${t4.sense}}`; - } - if (t4.implicit) { - text = "[" + t4.implicit + "]"; - } - text = color_default.yellow(text); - let word = "'" + text + "'"; - if (t4.reference) { - let str3 = view.update([t4.reference]).text("normal"); - word += ` - ${color_default.dim(color_default.i("[" + str3 + "]"))}`; - } - word = word.padEnd(18); - let str2 = color_default.blue(" \u2502 ") + color_default.i(word) + " - " + tagString(tags, model4); - console.log(str2); - }); - }); - console.log("\n"); -}; -var tags_default = showTags; - -// node_modules/compromise/src/1-one/output/methods/debug/chunks.js -var showChunks = function(view) { - let { docs } = view; - console.log(""); - docs.forEach((terms) => { - let out2 = []; - terms.forEach((term) => { - if (term.chunk === "Noun") { - out2.push(color_default.blue(term.implicit || term.normal)); - } else if (term.chunk === "Verb") { - out2.push(color_default.green(term.implicit || term.normal)); - } else if (term.chunk === "Adjective") { - out2.push(color_default.yellow(term.implicit || term.normal)); - } else if (term.chunk === "Pivot") { - out2.push(color_default.red(term.implicit || term.normal)); - } else { - out2.push(term.implicit || term.normal); - } - }); - console.log(out2.join(" "), "\n"); - }); - console.log("\n"); -}; -var chunks_default = showChunks; - -// node_modules/compromise/src/1-one/output/methods/debug/highlight.js -var split = (txt, offset2, index4) => { - let buff = index4 * 9; - let start2 = offset2.start + buff; - let end2 = start2 + offset2.length; - let pre = txt.substring(0, start2); - let mid = txt.substring(start2, end2); - let post2 = txt.substring(end2, txt.length); - return [pre, mid, post2]; -}; -var spliceIn = function(txt, offset2, index4) { - let parts = split(txt, offset2, index4); - return `${parts[0]}${color_default.blue(parts[1])}${parts[2]}`; -}; -var showHighlight = function(doc) { - if (!doc.found) { - return; - } - let bySentence = {}; - doc.fullPointer.forEach((ptr) => { - bySentence[ptr[0]] = bySentence[ptr[0]] || []; - bySentence[ptr[0]].push(ptr); - }); - Object.keys(bySentence).forEach((k3) => { - let full = doc.update([[Number(k3)]]); - let txt = full.text(); - let matches = doc.update(bySentence[k3]); - let json = matches.json({ offset: true }); - json.forEach((obj, i4) => { - txt = spliceIn(txt, obj.offset, i4); - }); - console.log(txt); - }); - console.log("\n"); -}; -var highlight_default = showHighlight; - -// node_modules/compromise/src/1-one/output/methods/debug/index.js -var debug3 = { - tags: tags_default, - clientSide: client_side_default, - chunks: chunks_default, - highlight: highlight_default -}; -var debug_default3 = debug3; - -// node_modules/compromise/src/1-one/output/plugin.js -var plugin_default8 = { - api: api_default5, - methods: { - one: { - hash: hash_default, - debug: debug_default3 - } - } -}; - -// node_modules/compromise/src/1-one/pointers/api/lib/_lib.js -var doesOverlap = function(a3, b2) { - if (a3[0] !== b2[0]) { - return false; - } - let [, startA, endA] = a3; - let [, startB, endB] = b2; - if (startA <= startB && endA > startB) { - return true; - } - if (startB <= startA && endB > startA) { - return true; - } - return false; -}; -var getExtent = function(ptrs) { - let min = ptrs[0][1]; - let max2 = ptrs[0][2]; - ptrs.forEach((ptr) => { - if (ptr[1] < min) { - min = ptr[1]; - } - if (ptr[2] > max2) { - max2 = ptr[2]; - } - }); - return [ptrs[0][0], min, max2]; -}; -var indexN = function(ptrs) { - let byN = {}; - ptrs.forEach((ref) => { - byN[ref[0]] = byN[ref[0]] || []; - byN[ref[0]].push(ref); - }); - return byN; -}; -var uniquePtrs = function(arr) { - let obj = {}; - for (let i4 = 0; i4 < arr.length; i4 += 1) { - obj[arr[i4].join(",")] = arr[i4]; - } - return Object.values(obj); -}; - -// node_modules/compromise/src/1-one/pointers/api/lib/split.js -var pivotBy = function(full, m2) { - let [n3, start2] = full; - let mStart = m2[1]; - let mEnd = m2[2]; - let res = {}; - if (start2 < mStart) { - let end2 = mStart < full[2] ? mStart : full[2]; - res.before = [n3, start2, end2]; - } - res.match = m2; - if (full[2] > mEnd) { - res.after = [n3, mEnd, full[2]]; - } - return res; -}; -var doesMatch2 = function(full, m2) { - return full[1] <= m2[1] && m2[2] <= full[2]; -}; -var splitAll = function(full, m2) { - let byN = indexN(m2); - let res = []; - full.forEach((ptr) => { - let [n3] = ptr; - let matches = byN[n3] || []; - matches = matches.filter((p3) => doesMatch2(ptr, p3)); - if (matches.length === 0) { - res.push({ passthrough: ptr }); - return; - } - matches = matches.sort((a3, b2) => a3[1] - b2[1]); - let carry = ptr; - matches.forEach((p3, i4) => { - let found = pivotBy(carry, p3); - if (!matches[i4 + 1]) { - res.push(found); - } else { - res.push({ before: found.before, match: found.match }); - if (found.after) { - carry = found.after; - } - } - }); - }); - return res; -}; -var split_default2 = splitAll; - -// node_modules/compromise/src/1-one/pointers/methods/getDoc.js -var max = 20; -var blindSweep = function(id, doc, n3) { - for (let i4 = 0; i4 < max; i4 += 1) { - if (doc[n3 - i4]) { - let index4 = doc[n3 - i4].findIndex((term) => term.id === id); - if (index4 !== -1) { - return [n3 - i4, index4]; - } - } - if (doc[n3 + i4]) { - let index4 = doc[n3 + i4].findIndex((term) => term.id === id); - if (index4 !== -1) { - return [n3 + i4, index4]; - } - } - } - return null; -}; -var repairEnding = function(ptr, document2) { - let [n3, start2, , , endId] = ptr; - let terms = document2[n3]; - let newEnd = terms.findIndex((t4) => t4.id === endId); - if (newEnd === -1) { - ptr[2] = document2[n3].length; - ptr[4] = terms.length ? terms[terms.length - 1].id : null; - } else { - ptr[2] = newEnd; - } - return document2[n3].slice(start2, ptr[2] + 1); -}; -var getDoc2 = function(ptrs, document2) { - let doc = []; - ptrs.forEach((ptr, i4) => { - if (!ptr) { - return; - } - let [n3, start2, end2, id, endId] = ptr; - let terms = document2[n3] || []; - if (start2 === void 0) { - start2 = 0; - } - if (end2 === void 0) { - end2 = terms.length; - } - if (id && (!terms[start2] || terms[start2].id !== id)) { - let wild = blindSweep(id, document2, n3); - if (wild !== null) { - let len = end2 - start2; - terms = document2[wild[0]].slice(wild[1], wild[1] + len); - let startId = terms[0] ? terms[0].id : null; - ptrs[i4] = [wild[0], wild[1], wild[1] + len, startId]; - } - } else { - terms = terms.slice(start2, end2); - } - if (terms.length === 0) { - return; - } - if (start2 === end2) { - return; - } - if (endId && terms[terms.length - 1].id !== endId) { - terms = repairEnding(ptr, document2); - } - doc.push(terms); - }); - doc = doc.filter((a3) => a3.length > 0); - return doc; -}; -var getDoc_default = getDoc2; - -// node_modules/compromise/src/1-one/pointers/methods/index.js -var termList = function(docs) { - let arr = []; - for (let i4 = 0; i4 < docs.length; i4 += 1) { - for (let t4 = 0; t4 < docs[i4].length; t4 += 1) { - arr.push(docs[i4][t4]); - } - } - return arr; -}; -var methods_default5 = { - one: { - termList, - getDoc: getDoc_default, - pointer: { - indexN, - splitAll: split_default2 - } - } -}; - -// node_modules/compromise/src/1-one/pointers/api/lib/union.js -var getUnion = function(a3, b2) { - let both = a3.concat(b2); - let byN = indexN(both); - let res = []; - both.forEach((ptr) => { - let [n3] = ptr; - if (byN[n3].length === 1) { - res.push(ptr); - return; - } - let hmm = byN[n3].filter((m2) => doesOverlap(ptr, m2)); - hmm.push(ptr); - let range = getExtent(hmm); - res.push(range); - }); - res = uniquePtrs(res); - return res; -}; -var union_default = getUnion; - -// node_modules/compromise/src/1-one/pointers/api/lib/difference.js -var subtract = function(refs, not) { - let res = []; - let found = split_default2(refs, not); - found.forEach((o3) => { - if (o3.passthrough) { - res.push(o3.passthrough); - } - if (o3.before) { - res.push(o3.before); - } - if (o3.after) { - res.push(o3.after); - } - }); - return res; -}; -var difference_default = subtract; - -// node_modules/compromise/src/1-one/pointers/api/lib/intersection.js -var intersection = function(a3, b2) { - let start2 = a3[1] < b2[1] ? b2[1] : a3[1]; - let end2 = a3[2] > b2[2] ? b2[2] : a3[2]; - if (start2 < end2) { - return [a3[0], start2, end2]; - } - return null; -}; -var getIntersection = function(a3, b2) { - let byN = indexN(b2); - let res = []; - a3.forEach((ptr) => { - let hmm = byN[ptr[0]] || []; - hmm = hmm.filter((p3) => doesOverlap(ptr, p3)); - if (hmm.length === 0) { - return; - } - hmm.forEach((h3) => { - let overlap = intersection(ptr, h3); - if (overlap) { - res.push(overlap); - } - }); - }); - return res; -}; -var intersection_default = getIntersection; - -// node_modules/compromise/src/1-one/pointers/api/index.js -var isArray8 = function(arr) { - return Object.prototype.toString.call(arr) === "[object Array]"; -}; -var getDoc3 = (m2, view) => { - if (typeof m2 === "string" || isArray8(m2)) { - return view.match(m2); - } - if (!m2) { - return view.none(); - } - return m2; -}; -var addIds3 = function(ptrs, docs) { - return ptrs.map((ptr) => { - let [n3, start2] = ptr; - if (docs[n3] && docs[n3][start2]) { - ptr[3] = docs[n3][start2].id; - } - return ptr; - }); -}; -var methods15 = {}; -methods15.union = function(m2) { - m2 = getDoc3(m2, this); - let ptrs = union_default(this.fullPointer, m2.fullPointer); - ptrs = addIds3(ptrs, this.document); - return this.toView(ptrs); -}; -methods15.and = methods15.union; -methods15.intersection = function(m2) { - m2 = getDoc3(m2, this); - let ptrs = intersection_default(this.fullPointer, m2.fullPointer); - ptrs = addIds3(ptrs, this.document); - return this.toView(ptrs); -}; -methods15.not = function(m2) { - m2 = getDoc3(m2, this); - let ptrs = difference_default(this.fullPointer, m2.fullPointer); - ptrs = addIds3(ptrs, this.document); - return this.toView(ptrs); -}; -methods15.difference = methods15.not; -methods15.complement = function() { - let doc = this.all(); - let ptrs = difference_default(doc.fullPointer, this.fullPointer); - ptrs = addIds3(ptrs, this.document); - return this.toView(ptrs); -}; -methods15.settle = function() { - let ptrs = this.fullPointer; - ptrs.forEach((ptr) => { - ptrs = union_default(ptrs, [ptr]); - }); - ptrs = addIds3(ptrs, this.document); - return this.update(ptrs); -}; -var addAPI4 = function(View2) { - Object.assign(View2.prototype, methods15); -}; -var api_default6 = addAPI4; - -// node_modules/compromise/src/1-one/pointers/plugin.js -var plugin_default9 = { - methods: methods_default5, - api: api_default6 -}; - -// node_modules/compromise/src/1-one/sweep/lib.js -var lib_default3 = { - // compile a list of matches into a match-net - buildNet: function(matches) { - const methods17 = this.methods(); - let net = methods17.one.buildNet(matches, this.world()); - net.isNet = true; - return net; - } -}; - -// node_modules/compromise/src/1-one/sweep/api.js -var api = function(View2) { - View2.prototype.sweep = function(net, opts2 = {}) { - const { world: world2, docs } = this; - const { methods: methods17 } = world2; - let found = methods17.one.bulkMatch(docs, net, this.methods, opts2); - if (opts2.tagger !== false) { - methods17.one.bulkTagger(found, docs, this.world); - } - found = found.map((o3) => { - let ptr = o3.pointer; - let term = docs[ptr[0]][ptr[1]]; - let len = ptr[2] - ptr[1]; - if (term.index) { - o3.pointer = [ - term.index[0], - term.index[1], - ptr[1] + len - ]; - } - return o3; - }); - let ptrs = found.map((o3) => o3.pointer); - found = found.map((obj) => { - obj.view = this.update([obj.pointer]); - delete obj.regs; - delete obj.needs; - delete obj.pointer; - delete obj._expanded; - return obj; - }); - return { - view: this.update(ptrs), - found - }; - }; -}; -var api_default7 = api; - -// node_modules/compromise/src/1-one/sweep/methods/buildNet/01-parse.js -var getTokenNeeds = function(reg) { - if (reg.optional === true || reg.negative === true) { - return null; - } - if (reg.tag) { - return "#" + reg.tag; - } - if (reg.word) { - return reg.word; - } - if (reg.switch) { - return `%${reg.switch}%`; - } - return null; -}; -var getNeeds = function(regs) { - let needs = []; - regs.forEach((reg) => { - needs.push(getTokenNeeds(reg)); - if (reg.operator === "and" && reg.choices) { - reg.choices.forEach((oneSide) => { - oneSide.forEach((r3) => { - needs.push(getTokenNeeds(r3)); - }); - }); - } - }); - return needs.filter((str2) => str2); -}; -var getWants = function(regs) { - let wants = []; - let count = 0; - regs.forEach((reg) => { - if (reg.operator === "or" && !reg.optional && !reg.negative) { - if (reg.fastOr) { - Array.from(reg.fastOr).forEach((w2) => { - wants.push(w2); - }); - } - if (reg.choices) { - reg.choices.forEach((rs) => { - rs.forEach((r3) => { - let n3 = getTokenNeeds(r3); - if (n3) { - wants.push(n3); - } - }); - }); - } - count += 1; - } - }); - return { wants, count }; -}; -var parse3 = function(matches, world2) { - const parseMatch = world2.methods.one.parseMatch; - matches.forEach((obj) => { - obj.regs = parseMatch(obj.match, {}, world2); - if (typeof obj.ifNo === "string") { - obj.ifNo = [obj.ifNo]; - } - if (obj.notIf) { - obj.notIf = parseMatch(obj.notIf, {}, world2); - } - obj.needs = getNeeds(obj.regs); - let { wants, count } = getWants(obj.regs); - obj.wants = wants; - obj.minWant = count; - obj.minWords = obj.regs.filter((o3) => !o3.optional).length; - }); - return matches; -}; -var parse_default = parse3; - -// node_modules/compromise/src/1-one/sweep/methods/buildNet/index.js -var buildNet = function(matches, world2) { - matches = parse_default(matches, world2); - let hooks2 = {}; - matches.forEach((obj) => { - obj.needs.forEach((str2) => { - hooks2[str2] = Array.isArray(hooks2[str2]) ? hooks2[str2] : []; - hooks2[str2].push(obj); - }); - obj.wants.forEach((str2) => { - hooks2[str2] = Array.isArray(hooks2[str2]) ? hooks2[str2] : []; - hooks2[str2].push(obj); - }); - }); - Object.keys(hooks2).forEach((k3) => { - let already = {}; - hooks2[k3] = hooks2[k3].filter((obj) => { - if (typeof already[obj.match] === "boolean") { - return false; - } - already[obj.match] = true; - return true; - }); - }); - let always = matches.filter((o3) => o3.needs.length === 0 && o3.wants.length === 0); - return { - hooks: hooks2, - always - }; -}; -var buildNet_default = buildNet; - -// node_modules/compromise/src/1-one/sweep/methods/sweep/01-getHooks.js -var getHooks = function(docCaches, hooks2) { - return docCaches.map((set, i4) => { - let maybe = []; - Object.keys(hooks2).forEach((k3) => { - if (docCaches[i4].has(k3)) { - maybe = maybe.concat(hooks2[k3]); - } - }); - let already = {}; - maybe = maybe.filter((m2) => { - if (typeof already[m2.match] === "boolean") { - return false; - } - already[m2.match] = true; - return true; - }); - return maybe; - }); -}; -var getHooks_default = getHooks; - -// node_modules/compromise/src/1-one/sweep/methods/sweep/02-trim-down.js -var localTrim = function(maybeList, docCache) { - return maybeList.map((list2, n3) => { - let haves = docCache[n3]; - list2 = list2.filter((obj) => { - return obj.needs.every((need) => haves.has(need)); - }); - list2 = list2.filter((obj) => { - if (obj.ifNo !== void 0 && obj.ifNo.some((no) => haves.has(no)) === true) { - return false; - } - return true; - }); - list2 = list2.filter((obj) => { - if (obj.wants.length === 0) { - return true; - } - let found = obj.wants.filter((str2) => haves.has(str2)).length; - return found >= obj.minWant; - }); - return list2; - }); -}; -var trim_down_default = localTrim; - -// node_modules/compromise/src/1-one/sweep/methods/sweep/04-runMatch.js -var runMatch2 = function(maybeList, document2, docCache, methods17, opts2) { - let results = []; - for (let n3 = 0; n3 < maybeList.length; n3 += 1) { - for (let i4 = 0; i4 < maybeList[n3].length; i4 += 1) { - let m2 = maybeList[n3][i4]; - let res = methods17.one.match([document2[n3]], m2); - if (res.ptrs.length > 0) { - res.ptrs.forEach((ptr) => { - ptr[0] = n3; - let todo = Object.assign({}, m2, { pointer: ptr }); - if (m2.unTag !== void 0) { - todo.unTag = m2.unTag; - } - results.push(todo); - }); - if (opts2.matchOne === true) { - return [results[0]]; - } - } - } - } - return results; -}; -var runMatch_default = runMatch2; - -// node_modules/compromise/src/1-one/sweep/methods/sweep/index.js -var tooSmall = function(maybeList, document2) { - return maybeList.map((arr, i4) => { - let termCount = document2[i4].length; - arr = arr.filter((o3) => { - return termCount >= o3.minWords; - }); - return arr; - }); -}; -var sweep = function(document2, net, methods17, opts2 = {}) { - let docCache = methods17.one.cacheDoc(document2); - let maybeList = getHooks_default(docCache, net.hooks); - maybeList = trim_down_default(maybeList, docCache, document2); - if (net.always.length > 0) { - maybeList = maybeList.map((arr) => arr.concat(net.always)); - } - maybeList = tooSmall(maybeList, document2); - let results = runMatch_default(maybeList, document2, docCache, methods17, opts2); - return results; -}; -var sweep_default = sweep; - -// node_modules/compromise/src/1-one/sweep/methods/tagger/canBe.js -var canBe = function(terms, tag, model4) { - let tagSet = model4.one.tagSet; - if (!tagSet.hasOwnProperty(tag)) { - return true; - } - let not = tagSet[tag].not || []; - for (let i4 = 0; i4 < terms.length; i4 += 1) { - let term = terms[i4]; - for (let k3 = 0; k3 < not.length; k3 += 1) { - if (term.tags.has(not[k3]) === true) { - return false; - } - } - } - return true; -}; -var canBe_default = canBe; - -// node_modules/compromise/src/1-one/sweep/methods/tagger/index.js -var tagger = function(list2, document2, world2) { - const { model: model4, methods: methods17 } = world2; - const { getDoc: getDoc4, setTag: setTag2, unTag: unTag2 } = methods17.one; - const looksPlural = methods17.two.looksPlural; - if (list2.length === 0) { - return list2; - } - const env = typeof process === "undefined" || !process.env ? self.env || {} : process.env; - if (env.DEBUG_TAGS) { - console.log(` - - \x1B[32m\u2192 ${list2.length} post-tagger:\x1B[0m`); - } - return list2.map((todo) => { - if (!todo.tag && !todo.chunk && !todo.unTag) { - return; - } - let reason = todo.reason || todo.match; - let terms = getDoc4([todo.pointer], document2)[0]; - if (todo.safe === true) { - if (canBe_default(terms, todo.tag, model4) === false) { - return; - } - if (terms[terms.length - 1].post === "-") { - return; - } - } - if (todo.tag !== void 0) { - setTag2(terms, todo.tag, world2, todo.safe, `[post] '${reason}'`); - if (todo.tag === "Noun" && looksPlural) { - let term = terms[terms.length - 1]; - if (looksPlural(term.text)) { - setTag2([term], "Plural", world2, todo.safe, "quick-plural"); - } else { - setTag2([term], "Singular", world2, todo.safe, "quick-singular"); - } - } - if (todo.freeze === true) { - terms.forEach((term) => term.frozen = true); - } - } - if (todo.unTag !== void 0) { - unTag2(terms, todo.unTag, world2, todo.safe, reason); - } - if (todo.chunk) { - terms.forEach((t4) => t4.chunk = todo.chunk); - } - }); -}; -var tagger_default = tagger; - -// node_modules/compromise/src/1-one/sweep/methods/index.js -var methods_default6 = { - buildNet: buildNet_default, - bulkMatch: sweep_default, - bulkTagger: tagger_default -}; - -// node_modules/compromise/src/1-one/sweep/plugin.js -var plugin_default10 = { - lib: lib_default3, - api: api_default7, - methods: { - one: methods_default6 - } -}; - -// node_modules/compromise/src/1-one/tag/methods/setTag.js -var isMulti = / /; -var addChunk = function(term, tag) { - if (tag === "Noun") { - term.chunk = tag; - } - if (tag === "Verb") { - term.chunk = tag; - } -}; -var tagTerm = function(term, tag, tagSet, isSafe) { - if (term.tags.has(tag) === true) { - return null; - } - if (tag === ".") { - return null; - } - if (term.frozen === true) { - isSafe = true; - } - let known = tagSet[tag]; - if (known) { - if (known.not && known.not.length > 0) { - for (let o3 = 0; o3 < known.not.length; o3 += 1) { - if (isSafe === true && term.tags.has(known.not[o3])) { - return null; - } - term.tags.delete(known.not[o3]); - } - } - if (known.parents && known.parents.length > 0) { - for (let o3 = 0; o3 < known.parents.length; o3 += 1) { - term.tags.add(known.parents[o3]); - addChunk(term, known.parents[o3]); - } - } - } - term.tags.add(tag); - term.dirty = true; - addChunk(term, tag); - return true; -}; -var multiTag = function(terms, tagString2, tagSet, isSafe) { - let tags = tagString2.split(isMulti); - terms.forEach((term, i4) => { - let tag = tags[i4]; - if (tag) { - tag = tag.replace(/^#/, ""); - tagTerm(term, tag, tagSet, isSafe); - } - }); -}; -var isArray9 = function(arr) { - return Object.prototype.toString.call(arr) === "[object Array]"; -}; -var log = (terms, tag, reason = "") => { - const yellow = (str2) => "\x1B[33m\x1B[3m" + str2 + "\x1B[0m"; - const i4 = (str2) => "\x1B[3m" + str2 + "\x1B[0m"; - let word = terms.map((t4) => { - return t4.text || "[" + t4.implicit + "]"; - }).join(" "); - if (typeof tag !== "string" && tag.length > 2) { - tag = tag.slice(0, 2).join(", #") + " +"; - } - tag = typeof tag !== "string" ? tag.join(", #") : tag; - console.log(` ${yellow(word).padEnd(24)} \x1B[32m\u2192\x1B[0m #${tag.padEnd(22)} ${i4(reason)}`); -}; -var setTag = function(terms, tag, world2 = {}, isSafe, reason) { - const tagSet = world2.model.one.tagSet || {}; - if (!tag) { - return; - } - const env = typeof process === "undefined" || !process.env ? self.env || {} : process.env; - if (env && env.DEBUG_TAGS) { - log(terms, tag, reason); - } - if (isArray9(tag) === true) { - tag.forEach((tg) => setTag(terms, tg, world2, isSafe)); - return; - } - if (typeof tag !== "string") { - console.warn(`compromise: Invalid tag '${tag}'`); - return; - } - tag = tag.trim(); - if (isMulti.test(tag)) { - multiTag(terms, tag, tagSet, isSafe); - return; - } - tag = tag.replace(/^#/, ""); - for (let i4 = 0; i4 < terms.length; i4 += 1) { - tagTerm(terms[i4], tag, tagSet, isSafe); - } -}; -var setTag_default = setTag; - -// node_modules/compromise/src/1-one/tag/methods/unTag.js -var unTag = function(terms, tag, tagSet) { - tag = tag.trim().replace(/^#/, ""); - for (let i4 = 0; i4 < terms.length; i4 += 1) { - let term = terms[i4]; - if (term.frozen === true) { - continue; - } - if (tag === "*") { - term.tags.clear(); - continue; - } - let known = tagSet[tag]; - if (known && known.children.length > 0) { - for (let o3 = 0; o3 < known.children.length; o3 += 1) { - term.tags.delete(known.children[o3]); - } - } - term.tags.delete(tag); - } -}; -var unTag_default = unTag; - -// node_modules/compromise/src/1-one/tag/methods/canBe.js -var canBe2 = function(term, tag, tagSet) { - if (!tagSet.hasOwnProperty(tag)) { - return true; - } - let not = tagSet[tag].not || []; - for (let i4 = 0; i4 < not.length; i4 += 1) { - if (term.tags.has(not[i4])) { - return false; - } - } - return true; -}; -var canBe_default2 = canBe2; - -// node_modules/grad-school/builds/grad-school.mjs -var e = function(e3) { - return e3.children = e3.children || [], e3._cache = e3._cache || {}, e3.props = e3.props || {}, e3._cache.parents = e3._cache.parents || [], e3._cache.children = e3._cache.children || [], e3; -}; -var t2 = /^ *(#|\/\/)/; -var n = function(t4) { - let n3 = t4.trim().split(/->/), r3 = []; - n3.forEach((t5) => { - r3 = r3.concat(function(t6) { - if (!(t6 = t6.trim())) - return null; - if (/^\[/.test(t6) && /\]$/.test(t6)) { - let n4 = (t6 = (t6 = t6.replace(/^\[/, "")).replace(/\]$/, "")).split(/,/); - return n4 = n4.map((e3) => e3.trim()).filter((e3) => e3), n4 = n4.map((t7) => e({ id: t7 })), n4; - } - return [e({ id: t6 })]; - }(t5)); - }), r3 = r3.filter((e3) => e3); - let i4 = r3[0]; - for (let e3 = 1; e3 < r3.length; e3 += 1) - i4.children.push(r3[e3]), i4 = r3[e3]; - return r3[0]; -}; -var r = (e3, t4) => { - let n3 = [], r3 = [e3]; - for (; r3.length > 0; ) { - let e4 = r3.pop(); - n3.push(e4), e4.children && e4.children.forEach((n4) => { - t4 && t4(e4, n4), r3.push(n4); - }); - } - return n3; -}; -var i2 = (e3) => "[object Array]" === Object.prototype.toString.call(e3); -var c = (e3) => (e3 = e3 || "").trim(); -var s = function(c3 = []) { - return "string" == typeof c3 ? function(r3) { - let i4 = r3.split(/\r?\n/), c4 = []; - i4.forEach((e3) => { - if (!e3.trim() || t2.test(e3)) - return; - let r4 = ((e4) => { - const t4 = /^( {2}|\t)/; - let n3 = 0; - for (; t4.test(e4); ) - e4 = e4.replace(t4, ""), n3 += 1; - return n3; - })(e3); - c4.push({ indent: r4, node: n(e3) }); - }); - let s4 = function(e3) { - let t4 = { children: [] }; - return e3.forEach((n3, r4) => { - 0 === n3.indent ? t4.children = t4.children.concat(n3.node) : e3[r4 - 1] && function(e4, t5) { - let n4 = e4[t5].indent; - for (; t5 >= 0; t5 -= 1) - if (e4[t5].indent < n4) - return e4[t5]; - return e4[0]; - }(e3, r4).node.children.push(n3.node); - }), t4; - }(c4); - return s4 = e(s4), s4; - }(c3) : i2(c3) ? function(t4) { - let n3 = {}; - t4.forEach((e3) => { - n3[e3.id] = e3; - }); - let r3 = e({}); - return t4.forEach((t5) => { - if ((t5 = e(t5)).parent) - if (n3.hasOwnProperty(t5.parent)) { - let e3 = n3[t5.parent]; - delete t5.parent, e3.children.push(t5); - } else - console.warn(`[Grad] - missing node '${t5.parent}'`); - else - r3.children.push(t5); - }), r3; - }(c3) : (r(s3 = c3).forEach(e), s3); - var s3; -}; -var h = (e3) => "\x1B[31m" + e3 + "\x1B[0m"; -var o = (e3) => "\x1B[2m" + e3 + "\x1B[0m"; -var l = function(e3, t4) { - let n3 = "-> "; - t4 && (n3 = o("\u2192 ")); - let i4 = ""; - return r(e3).forEach((e4, r3) => { - let c3 = e4.id || ""; - if (t4 && (c3 = h(c3)), 0 === r3 && !e4.id) - return; - let s3 = e4._cache.parents.length; - i4 += " ".repeat(s3) + n3 + c3 + "\n"; - }), i4; -}; -var a = function(e3) { - let t4 = r(e3); - t4.forEach((e4) => { - delete (e4 = Object.assign({}, e4)).children; - }); - let n3 = t4[0]; - return n3 && !n3.id && 0 === Object.keys(n3.props).length && t4.shift(), t4; -}; -var p = { text: l, txt: l, array: a, flat: a }; -var d = function(e3, t4) { - return "nested" === t4 || "json" === t4 ? e3 : "debug" === t4 ? (console.log(l(e3, true)), null) : p.hasOwnProperty(t4) ? p[t4](e3) : e3; -}; -var u = (e3) => { - r(e3, (e4, t4) => { - e4.id && (e4._cache.parents = e4._cache.parents || [], t4._cache.parents = e4._cache.parents.concat([e4.id])); - }); -}; -var f = (e3, t4) => (Object.keys(t4).forEach((n3) => { - if (t4[n3] instanceof Set) { - let r3 = e3[n3] || /* @__PURE__ */ new Set(); - e3[n3] = /* @__PURE__ */ new Set([...r3, ...t4[n3]]); - } else { - if (((e4) => e4 && "object" == typeof e4 && !Array.isArray(e4))(t4[n3])) { - let r3 = e3[n3] || {}; - e3[n3] = Object.assign({}, t4[n3], r3); - } else - i2(t4[n3]) ? e3[n3] = t4[n3].concat(e3[n3] || []) : void 0 === e3[n3] && (e3[n3] = t4[n3]); - } -}), e3); -var j = /\//; -var g = class { - constructor(e3 = {}) { - Object.defineProperty(this, "json", { enumerable: false, value: e3, writable: true }); - } - get children() { - return this.json.children; - } - get id() { - return this.json.id; - } - get found() { - return this.json.id || this.json.children.length > 0; - } - props(e3 = {}) { - let t4 = this.json.props || {}; - return "string" == typeof e3 && (t4[e3] = true), this.json.props = Object.assign(t4, e3), this; - } - get(t4) { - if (t4 = c(t4), !j.test(t4)) { - let e3 = this.json.children.find((e4) => e4.id === t4); - return new g(e3); - } - let n3 = ((e3, t5) => { - let n4 = ((e4) => "string" != typeof e4 ? e4 : (e4 = e4.replace(/^\//, "")).split(/\//))(t5 = t5 || ""); - for (let t6 = 0; t6 < n4.length; t6 += 1) { - let r3 = e3.children.find((e4) => e4.id === n4[t6]); - if (!r3) - return null; - e3 = r3; - } - return e3; - })(this.json, t4) || e({}); - return new g(n3); - } - add(t4, n3 = {}) { - if (i2(t4)) - return t4.forEach((e3) => this.add(c(e3), n3)), this; - t4 = c(t4); - let r3 = e({ id: t4, props: n3 }); - return this.json.children.push(r3), new g(r3); - } - remove(e3) { - return e3 = c(e3), this.json.children = this.json.children.filter((t4) => t4.id !== e3), this; - } - nodes() { - return r(this.json).map((e3) => (delete (e3 = Object.assign({}, e3)).children, e3)); - } - cache() { - return ((e3) => { - let t4 = r(e3, (e4, t5) => { - e4.id && (e4._cache.parents = e4._cache.parents || [], e4._cache.children = e4._cache.children || [], t5._cache.parents = e4._cache.parents.concat([e4.id])); - }), n3 = {}; - t4.forEach((e4) => { - e4.id && (n3[e4.id] = e4); - }), t4.forEach((e4) => { - e4._cache.parents.forEach((t5) => { - n3.hasOwnProperty(t5) && n3[t5]._cache.children.push(e4.id); - }); - }), e3._cache.children = Object.keys(n3); - })(this.json), this; - } - list() { - return r(this.json); - } - fillDown() { - var e3; - return e3 = this.json, r(e3, (e4, t4) => { - t4.props = f(t4.props, e4.props); - }), this; - } - depth() { - u(this.json); - let e3 = r(this.json), t4 = e3.length > 1 ? 1 : 0; - return e3.forEach((e4) => { - if (0 === e4._cache.parents.length) - return; - let n3 = e4._cache.parents.length + 1; - n3 > t4 && (t4 = n3); - }), t4; - } - out(e3) { - return u(this.json), d(this.json, e3); - } - debug() { - return u(this.json), d(this.json, "debug"), this; - } -}; -var _ = function(e3) { - let t4 = s(e3); - return new g(t4); -}; -_.prototype.plugin = function(e3) { - e3(this); -}; - -// node_modules/compromise/src/1-one/tag/methods/addTags/_colors.js -var colors = { - Noun: "blue", - Verb: "green", - Negative: "green", - Date: "red", - Value: "red", - Adjective: "magenta", - Preposition: "cyan", - Conjunction: "cyan", - Determiner: "cyan", - Hyphenated: "cyan", - Adverb: "cyan" -}; -var colors_default = colors; - -// node_modules/compromise/src/1-one/tag/methods/addTags/02-fmt.js -var getColor = function(node) { - if (colors_default.hasOwnProperty(node.id)) { - return colors_default[node.id]; - } - if (colors_default.hasOwnProperty(node.is)) { - return colors_default[node.is]; - } - let found = node._cache.parents.find((c3) => colors_default[c3]); - return colors_default[found]; -}; -var fmt = function(nodes) { - const res = {}; - nodes.forEach((node) => { - let { not, also, is, novel } = node.props; - let parents = node._cache.parents; - if (also) { - parents = parents.concat(also); - } - res[node.id] = { - is, - not, - novel, - also, - parents, - children: node._cache.children, - color: getColor(node) - }; - }); - Object.keys(res).forEach((k3) => { - let nots = new Set(res[k3].not); - res[k3].not.forEach((not) => { - if (res[not]) { - res[not].children.forEach((tag) => nots.add(tag)); - } - }); - res[k3].not = Array.from(nots); - }); - return res; -}; -var fmt_default = fmt; - -// node_modules/compromise/src/1-one/tag/methods/addTags/01-validate.js -var toArr = function(input) { - if (!input) { - return []; - } - if (typeof input === "string") { - return [input]; - } - return input; -}; -var addImplied = function(tags, already) { - Object.keys(tags).forEach((k3) => { - if (tags[k3].isA) { - tags[k3].is = tags[k3].isA; - } - if (tags[k3].notA) { - tags[k3].not = tags[k3].notA; - } - if (tags[k3].is && typeof tags[k3].is === "string") { - if (!already.hasOwnProperty(tags[k3].is) && !tags.hasOwnProperty(tags[k3].is)) { - tags[tags[k3].is] = {}; - } - } - if (tags[k3].not && typeof tags[k3].not === "string" && !tags.hasOwnProperty(tags[k3].not)) { - if (!already.hasOwnProperty(tags[k3].not) && !tags.hasOwnProperty(tags[k3].not)) { - tags[tags[k3].not] = {}; - } - } - }); - return tags; -}; -var validate = function(tags, already) { - tags = addImplied(tags, already); - Object.keys(tags).forEach((k3) => { - tags[k3].children = toArr(tags[k3].children); - tags[k3].not = toArr(tags[k3].not); - }); - Object.keys(tags).forEach((k3) => { - let nots = tags[k3].not || []; - nots.forEach((no) => { - if (tags[no] && tags[no].not) { - tags[no].not.push(k3); - } - }); - }); - return tags; -}; -var validate_default = validate; - -// node_modules/compromise/src/1-one/tag/methods/addTags/index.js -var compute3 = function(allTags) { - const flatList = Object.keys(allTags).map((k3) => { - let o3 = allTags[k3]; - const props = { not: new Set(o3.not), also: o3.also, is: o3.is, novel: o3.novel }; - return { id: k3, parent: o3.is, props, children: [] }; - }); - const graph = _(flatList).cache().fillDown(); - return graph.out("array"); -}; -var fromUser = function(tags) { - Object.keys(tags).forEach((k3) => { - tags[k3] = Object.assign({}, tags[k3]); - tags[k3].novel = true; - }); - return tags; -}; -var addTags = function(tags, already) { - if (Object.keys(already).length > 0) { - tags = fromUser(tags); - } - tags = validate_default(tags, already); - let allTags = Object.assign({}, already, tags); - const nodes = compute3(allTags); - const res = fmt_default(nodes); - return res; -}; -var addTags_default = addTags; - -// node_modules/compromise/src/1-one/tag/methods/index.js -var methods_default7 = { - one: { - setTag: setTag_default, - unTag: unTag_default, - addTags: addTags_default, - canBe: canBe_default2 - } -}; - -// node_modules/compromise/src/1-one/tag/api/tag.js -var isArray10 = function(arr) { - return Object.prototype.toString.call(arr) === "[object Array]"; -}; -var fns5 = { - /** add a given tag, to all these terms */ - tag: function(input, reason = "", isSafe) { - if (!this.found || !input) { - return this; - } - let terms = this.termList(); - if (terms.length === 0) { - return this; - } - const { methods: methods17, verbose: verbose2, world: world2 } = this; - if (verbose2 === true) { - console.log(" + ", input, reason || ""); - } - if (isArray10(input)) { - input.forEach((tag) => methods17.one.setTag(terms, tag, world2, isSafe, reason)); - } else { - methods17.one.setTag(terms, input, world2, isSafe, reason); - } - this.uncache(); - return this; - }, - /** add a given tag, only if it is consistent */ - tagSafe: function(input, reason = "") { - return this.tag(input, reason, true); - }, - /** remove a given tag from all these terms */ - unTag: function(input, reason) { - if (!this.found || !input) { - return this; - } - let terms = this.termList(); - if (terms.length === 0) { - return this; - } - const { methods: methods17, verbose: verbose2, model: model4 } = this; - if (verbose2 === true) { - console.log(" - ", input, reason || ""); - } - let tagSet = model4.one.tagSet; - if (isArray10(input)) { - input.forEach((tag) => methods17.one.unTag(terms, tag, tagSet)); - } else { - methods17.one.unTag(terms, input, tagSet); - } - this.uncache(); - return this; - }, - /** return only the terms that can be this tag */ - canBe: function(tag) { - tag = tag.replace(/^#/, ""); - let tagSet = this.model.one.tagSet; - let canBe3 = this.methods.one.canBe; - let nope = []; - this.document.forEach((terms, n3) => { - terms.forEach((term, i4) => { - if (!canBe3(term, tag, tagSet)) { - nope.push([n3, i4, i4 + 1]); - } - }); - }); - let noDoc = this.update(nope); - return this.difference(noDoc); - } -}; -var tag_default = fns5; - -// node_modules/compromise/src/1-one/tag/api/index.js -var tagAPI = function(View2) { - Object.assign(View2.prototype, tag_default); -}; -var api_default8 = tagAPI; - -// node_modules/compromise/src/1-one/tag/lib.js -var addTags2 = function(tags) { - const { model: model4, methods: methods17 } = this.world(); - const tagSet = model4.one.tagSet; - const fn = methods17.one.addTags; - let res = fn(tags, tagSet); - model4.one.tagSet = res; - return this; -}; -var lib_default4 = { addTags: addTags2 }; - -// node_modules/compromise/src/1-one/tag/compute/tagRank.js -var boringTags = /* @__PURE__ */ new Set(["Auxiliary", "Possessive"]); -var sortByKids = function(tags, tagSet) { - tags = tags.sort((a3, b2) => { - if (boringTags.has(a3) || !tagSet.hasOwnProperty(b2)) { - return 1; - } - if (boringTags.has(b2) || !tagSet.hasOwnProperty(a3)) { - return -1; - } - let kids = tagSet[a3].children || []; - let aKids = kids.length; - kids = tagSet[b2].children || []; - let bKids = kids.length; - return aKids - bKids; - }); - return tags; -}; -var tagRank = function(view) { - const { document: document2, world: world2 } = view; - const tagSet = world2.model.one.tagSet; - document2.forEach((terms) => { - terms.forEach((term) => { - let tags = Array.from(term.tags); - term.tagRank = sortByKids(tags, tagSet); - }); - }); -}; -var tagRank_default = tagRank; - -// node_modules/compromise/src/1-one/tag/plugin.js -var plugin_default11 = { - model: { - one: { tagSet: {} } - }, - compute: { - tagRank: tagRank_default - }, - methods: methods_default7, - api: api_default8, - lib: lib_default4 -}; - -// node_modules/compromise/src/1-one/tokenize/methods/01-sentences/01-simple-split.js -var initSplit = /([.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s)/g; -var splitsOnly = /^[.!?\u203D\u2E18\u203C\u2047-\u2049\u3002]+\s$/; -var newLine = /((?:\r?\n|\r)+)/; -var basicSplit = function(text) { - let all = []; - let lines = text.split(newLine); - for (let i4 = 0; i4 < lines.length; i4++) { - let arr = lines[i4].split(initSplit); - for (let o3 = 0; o3 < arr.length; o3++) { - if (arr[o3 + 1] && splitsOnly.test(arr[o3 + 1]) === true) { - arr[o3] += arr[o3 + 1]; - arr[o3 + 1] = ""; - } - if (arr[o3] !== "") { - all.push(arr[o3]); - } - } - } - return all; -}; -var simple_split_default = basicSplit; - -// node_modules/compromise/src/1-one/tokenize/methods/01-sentences/02-simple-merge.js -var hasLetter = /[a-z0-9\u00C0-\u00FF\u00a9\u00ae\u2000-\u3300\ud000-\udfff]/i; -var hasSomething = /\S/; -var notEmpty = function(splits) { - let chunks = []; - for (let i4 = 0; i4 < splits.length; i4++) { - let s3 = splits[i4]; - if (s3 === void 0 || s3 === "") { - continue; - } - if (hasSomething.test(s3) === false || hasLetter.test(s3) === false) { - if (chunks[chunks.length - 1]) { - chunks[chunks.length - 1] += s3; - continue; - } else if (splits[i4 + 1]) { - splits[i4 + 1] = s3 + splits[i4 + 1]; - continue; - } - } - chunks.push(s3); - } - return chunks; -}; -var simple_merge_default = notEmpty; - -// node_modules/compromise/src/1-one/tokenize/methods/01-sentences/03-smart-merge.js -var smartMerge = function(chunks, world2) { - const isSentence2 = world2.methods.one.tokenize.isSentence; - const abbrevs = world2.model.one.abbreviations || /* @__PURE__ */ new Set(); - let sentences = []; - for (let i4 = 0; i4 < chunks.length; i4++) { - let c3 = chunks[i4]; - if (chunks[i4 + 1] && isSentence2(c3, abbrevs) === false) { - chunks[i4 + 1] = c3 + (chunks[i4 + 1] || ""); - } else if (c3 && c3.length > 0) { - sentences.push(c3); - chunks[i4] = ""; - } - } - return sentences; -}; -var smart_merge_default = smartMerge; - -// node_modules/compromise/src/1-one/tokenize/methods/01-sentences/04-quote-merge.js -var MAX_QUOTE = 280; -var pairs = { - '"': '"', - // 'StraightDoubleQuotes' - "\uFF02": "\uFF02", - // 'StraightDoubleQuotesWide' - // '\u0027': '\u0027', // 'StraightSingleQuotes' - "\u201C": "\u201D", - // 'CommaDoubleQuotes' - // '\u2018': '\u2019', // 'CommaSingleQuotes' - "\u201F": "\u201D", - // 'CurlyDoubleQuotesReversed' - // '\u201B': '\u2019', // 'CurlySingleQuotesReversed' - "\u201E": "\u201D", - // 'LowCurlyDoubleQuotes' - "\u2E42": "\u201D", - // 'LowCurlyDoubleQuotesReversed' - "\u201A": "\u2019", - // 'LowCurlySingleQuotes' - "\xAB": "\xBB", - // 'AngleDoubleQuotes' - "\u2039": "\u203A", - // 'AngleSingleQuotes' - "\u2035": "\u2032", - // 'PrimeSingleQuotes' - "\u2036": "\u2033", - // 'PrimeDoubleQuotes' - "\u2037": "\u2034", - // 'PrimeTripleQuotes' - "\u301D": "\u301E", - // 'PrimeDoubleQuotes' - // '\u0060': '\u00B4', // 'PrimeSingleQuotes' - "\u301F": "\u301E" - // 'LowPrimeDoubleQuotesReversed' -}; -var openQuote = RegExp("[" + Object.keys(pairs).join("") + "]", "g"); -var closeQuote = RegExp("[" + Object.values(pairs).join("") + "]", "g"); -var closesQuote = function(str2) { - if (!str2) { - return false; - } - let m2 = str2.match(closeQuote); - if (m2 !== null && m2.length === 1) { - return true; - } - return false; -}; -var quoteMerge = function(splits) { - let arr = []; - for (let i4 = 0; i4 < splits.length; i4 += 1) { - let split2 = splits[i4]; - let m2 = split2.match(openQuote); - if (m2 !== null && m2.length === 1) { - if (closesQuote(splits[i4 + 1]) && splits[i4 + 1].length < MAX_QUOTE) { - splits[i4] += splits[i4 + 1]; - arr.push(splits[i4]); - splits[i4 + 1] = ""; - i4 += 1; - continue; - } - if (closesQuote(splits[i4 + 2])) { - let toAdd = splits[i4 + 1] + splits[i4 + 2]; - if (toAdd.length < MAX_QUOTE) { - splits[i4] += toAdd; - arr.push(splits[i4]); - splits[i4 + 1] = ""; - splits[i4 + 2] = ""; - i4 += 2; - continue; - } - } - } - arr.push(splits[i4]); - } - return arr; -}; -var quote_merge_default = quoteMerge; - -// node_modules/compromise/src/1-one/tokenize/methods/01-sentences/05-parens-merge.js -var MAX_LEN = 250; -var hasOpen = /\(/g; -var hasClosed = /\)/g; -var mergeParens = function(splits) { - let arr = []; - for (let i4 = 0; i4 < splits.length; i4 += 1) { - let split2 = splits[i4]; - let m2 = split2.match(hasOpen); - if (m2 !== null && m2.length === 1) { - if (splits[i4 + 1] && splits[i4 + 1].length < MAX_LEN) { - let m22 = splits[i4 + 1].match(hasClosed); - if (m22 !== null && m2.length === 1 && !hasOpen.test(splits[i4 + 1])) { - splits[i4] += splits[i4 + 1]; - arr.push(splits[i4]); - splits[i4 + 1] = ""; - i4 += 1; - continue; - } - } - } - arr.push(splits[i4]); - } - return arr; -}; -var parens_merge_default = mergeParens; - -// node_modules/compromise/src/1-one/tokenize/methods/01-sentences/index.js -var hasSomething2 = /\S/; -var startWhitespace = /^\s+/; -var splitSentences = function(text, world2) { - text = text || ""; - text = String(text); - if (!text || typeof text !== "string" || hasSomething2.test(text) === false) { - return []; - } - text = text.replace("\xA0", " "); - let splits = simple_split_default(text); - let sentences = simple_merge_default(splits); - sentences = smart_merge_default(sentences, world2); - sentences = quote_merge_default(sentences); - sentences = parens_merge_default(sentences); - if (sentences.length === 0) { - return [text]; - } - for (let i4 = 1; i4 < sentences.length; i4 += 1) { - let ws = sentences[i4].match(startWhitespace); - if (ws !== null) { - sentences[i4 - 1] += ws[0]; - sentences[i4] = sentences[i4].replace(startWhitespace, ""); - } - } - return sentences; -}; -var sentences_default = splitSentences; - -// node_modules/compromise/src/1-one/tokenize/methods/02-terms/01-hyphens.js -var hasHyphen2 = function(str2, model4) { - let parts = str2.split(/[-–—]/); - if (parts.length <= 1) { - return false; - } - const { prefixes, suffixes } = model4.one; - if (parts[0].length === 1 && /[a-z]/i.test(parts[0])) { - return false; - } - if (prefixes.hasOwnProperty(parts[0])) { - return false; - } - parts[1] = parts[1].trim().replace(/[.?!]$/, ""); - if (suffixes.hasOwnProperty(parts[1])) { - return false; - } - let reg = /^([a-z\u00C0-\u00FF`"'/]+)[-–—]([a-z0-9\u00C0-\u00FF].*)/i; - if (reg.test(str2) === true) { - return true; - } - let reg2 = /^[('"]?([0-9]{1,4})[-–—]([a-z\u00C0-\u00FF`"'/-]+[)'"]?$)/i; - if (reg2.test(str2) === true) { - return true; - } - return false; -}; -var splitHyphens2 = function(word) { - let arr = []; - const hyphens = word.split(/[-–—]/); - let whichDash = "-"; - let found = word.match(/[-–—]/); - if (found && found[0]) { - whichDash = found; - } - for (let o3 = 0; o3 < hyphens.length; o3++) { - if (o3 === hyphens.length - 1) { - arr.push(hyphens[o3]); - } else { - arr.push(hyphens[o3] + whichDash); - } - } - return arr; -}; - -// node_modules/compromise/src/1-one/tokenize/methods/02-terms/03-ranges.js -var combineRanges = function(arr) { - const startRange = /^[0-9]{1,4}(:[0-9][0-9])?([a-z]{1,2})? ?[-–—] ?$/; - const endRange = /^[0-9]{1,4}([a-z]{1,2})? ?$/; - for (let i4 = 0; i4 < arr.length - 1; i4 += 1) { - if (arr[i4 + 1] && startRange.test(arr[i4]) && endRange.test(arr[i4 + 1])) { - arr[i4] = arr[i4] + arr[i4 + 1]; - arr[i4 + 1] = null; - } - } - return arr; -}; -var ranges_default = combineRanges; - -// node_modules/compromise/src/1-one/tokenize/methods/02-terms/02-slashes.js -var isSlash = /\p{L} ?\/ ?\p{L}+$/u; -var combineSlashes = function(arr) { - for (let i4 = 1; i4 < arr.length - 1; i4++) { - if (isSlash.test(arr[i4])) { - arr[i4 - 1] += arr[i4] + arr[i4 + 1]; - arr[i4] = null; - arr[i4 + 1] = null; - } - } - return arr; -}; -var slashes_default = combineSlashes; - -// node_modules/compromise/src/1-one/tokenize/methods/02-terms/index.js -var wordlike = /\S/; -var isBoundary = /^[!?.]+$/; -var naiiveSplit = /(\S+)/; -var notWord = [ - ".", - "?", - "!", - ":", - ";", - "-", - "\u2013", - "\u2014", - "--", - "...", - "(", - ")", - "[", - "]", - '"', - "'", - "`", - "\xAB", - "\xBB", - "*", - "\u2022" -]; -notWord = notWord.reduce((h3, c3) => { - h3[c3] = true; - return h3; -}, {}); -var isArray11 = function(arr) { - return Object.prototype.toString.call(arr) === "[object Array]"; -}; -var splitWords = function(str2, model4) { - let result = []; - let arr = []; - str2 = str2 || ""; - if (typeof str2 === "number") { - str2 = String(str2); - } - if (isArray11(str2)) { - return str2; - } - const words = str2.split(naiiveSplit); - for (let i4 = 0; i4 < words.length; i4++) { - if (hasHyphen2(words[i4], model4) === true) { - arr = arr.concat(splitHyphens2(words[i4])); - continue; - } - arr.push(words[i4]); - } - let carry = ""; - for (let i4 = 0; i4 < arr.length; i4++) { - let word = arr[i4]; - if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) { - if (result.length > 0) { - result[result.length - 1] += carry; - result.push(word); - } else { - result.push(carry + word); - } - carry = ""; - } else { - carry += word; - } - } - if (carry) { - if (result.length === 0) { - result[0] = ""; - } - result[result.length - 1] += carry; - } - result = slashes_default(result); - result = ranges_default(result); - result = result.filter((s3) => s3); - return result; -}; -var terms_default = splitWords; - -// node_modules/compromise/src/1-one/tokenize/methods/03-whitespace/tokenize.js -var isLetter = /\p{Letter}/u; -var isNumber = /[\p{Number}\p{Currency_Symbol}]/u; -var hasAcronym = /^[a-z]\.([a-z]\.)+/i; -var chillin = /[sn]['’]$/; -var normalizePunctuation = function(str2, model4) { - let { prePunctuation: prePunctuation2, postPunctuation: postPunctuation2, emoticons: emoticons2 } = model4.one; - let original = str2; - let pre = ""; - let post2 = ""; - let chars = Array.from(str2); - if (emoticons2.hasOwnProperty(str2.trim())) { - return { str: str2.trim(), pre, post: " " }; - } - let len = chars.length; - for (let i4 = 0; i4 < len; i4 += 1) { - let c3 = chars[0]; - if (prePunctuation2[c3] === true) { - continue; - } - if ((c3 === "+" || c3 === "-") && isNumber.test(chars[1])) { - break; - } - if (c3 === "'" && c3.length === 3 && isNumber.test(chars[1])) { - break; - } - if (isLetter.test(c3) || isNumber.test(c3)) { - break; - } - pre += chars.shift(); - } - len = chars.length; - for (let i4 = 0; i4 < len; i4 += 1) { - let c3 = chars[chars.length - 1]; - if (postPunctuation2[c3] === true) { - continue; - } - if (isLetter.test(c3) || isNumber.test(c3)) { - break; - } - if (c3 === "." && hasAcronym.test(original) === true) { - continue; - } - if (c3 === "'" && chillin.test(original) === true) { - continue; - } - post2 = chars.pop() + post2; - } - str2 = chars.join(""); - if (str2 === "") { - original = original.replace(/ *$/, (after2) => { - post2 = after2 || ""; - return ""; - }); - str2 = original; - pre = ""; - } - return { str: str2, pre, post: post2 }; -}; -var tokenize_default = normalizePunctuation; - -// node_modules/compromise/src/1-one/tokenize/methods/03-whitespace/index.js -var parseTerm = (txt, model4) => { - let { str: str2, pre, post: post2 } = tokenize_default(txt, model4); - const parsed = { - text: str2, - pre, - post: post2, - tags: /* @__PURE__ */ new Set() - }; - return parsed; -}; -var whitespace_default2 = parseTerm; - -// node_modules/compromise/src/1-one/tokenize/methods/unicode.js -var killUnicode = function(str2, world2) { - const unicode2 = world2.model.one.unicode || {}; - str2 = str2 || ""; - let chars = str2.split(""); - chars.forEach((s3, i4) => { - if (unicode2[s3]) { - chars[i4] = unicode2[s3]; - } - }); - return chars.join(""); -}; -var unicode_default = killUnicode; - -// node_modules/compromise/src/1-one/tokenize/compute/normal/01-cleanup.js -var clean = function(str2) { - str2 = str2 || ""; - str2 = str2.toLowerCase(); - str2 = str2.trim(); - let original = str2; - str2 = str2.replace(/[,;.!?]+$/, ""); - str2 = str2.replace(/\u2026/g, "..."); - str2 = str2.replace(/\u2013/g, "-"); - if (/^[:;]/.test(str2) === false) { - str2 = str2.replace(/\.{3,}$/g, ""); - str2 = str2.replace(/[",.!:;?)]+$/g, ""); - str2 = str2.replace(/^['"(]+/g, ""); - } - str2 = str2.replace(/[\u200B-\u200D\uFEFF]/g, ""); - str2 = str2.trim(); - if (str2 === "") { - str2 = original; - } - str2 = str2.replace(/([0-9]),([0-9])/g, "$1$2"); - return str2; -}; -var cleanup_default = clean; - -// node_modules/compromise/src/1-one/tokenize/compute/normal/02-acronyms.js -var periodAcronym = /([A-Z]\.)+[A-Z]?,?$/; -var oneLetterAcronym = /^[A-Z]\.,?$/; -var noPeriodAcronym = /[A-Z]{2,}('s|,)?$/; -var lowerCaseAcronym = /([a-z]\.)+[a-z]\.?$/; -var isAcronym = function(str2) { - if (periodAcronym.test(str2) === true) { - return true; - } - if (lowerCaseAcronym.test(str2) === true) { - return true; - } - if (oneLetterAcronym.test(str2) === true) { - return true; - } - if (noPeriodAcronym.test(str2) === true) { - return true; - } - return false; -}; -var doAcronym = function(str2) { - if (isAcronym(str2)) { - str2 = str2.replace(/\./g, ""); - } - return str2; -}; -var acronyms_default = doAcronym; - -// node_modules/compromise/src/1-one/tokenize/compute/normal/index.js -var normalize = function(term, world2) { - const killUnicode2 = world2.methods.one.killUnicode; - let str2 = term.text || ""; - str2 = cleanup_default(str2); - str2 = killUnicode2(str2, world2); - str2 = acronyms_default(str2); - term.normal = str2; -}; -var normal_default = normalize; - -// node_modules/compromise/src/1-one/tokenize/methods/parse.js -var parse4 = function(input, world2) { - const { methods: methods17, model: model4 } = world2; - const { splitSentences: splitSentences2, splitTerms, splitWhitespace } = methods17.one.tokenize; - input = input || ""; - let sentences = splitSentences2(input, world2); - input = sentences.map((txt) => { - let terms = splitTerms(txt, model4); - terms = terms.map((t4) => splitWhitespace(t4, model4)); - terms.forEach((t4) => { - normal_default(t4, world2); - }); - return terms; - }); - return input; -}; -var parse_default2 = parse4; - -// node_modules/compromise/src/1-one/tokenize/methods/01-sentences/is-sentence.js -var isAcronym2 = /[ .][A-Z]\.? *$/i; -var hasEllipse = /(?:\u2026|\.{2,}) *$/; -var hasLetter2 = /\p{L}/u; -var hasPeriod = /\. *$/; -var leadInit = /^[A-Z]\. $/; -var isSentence = function(str2, abbrevs) { - if (hasLetter2.test(str2) === false) { - return false; - } - if (isAcronym2.test(str2) === true) { - return false; - } - if (str2.length === 3 && leadInit.test(str2)) { - return false; - } - if (hasEllipse.test(str2) === true) { - return false; - } - let txt = str2.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/, ""); - let words = txt.split(" "); - let lastWord = words[words.length - 1].toLowerCase(); - if (abbrevs.hasOwnProperty(lastWord) === true && hasPeriod.test(str2) === true) { - return false; - } - return true; -}; -var is_sentence_default = isSentence; - -// node_modules/compromise/src/1-one/tokenize/methods/index.js -var methods_default8 = { - one: { - killUnicode: unicode_default, - tokenize: { - splitSentences: sentences_default, - isSentence: is_sentence_default, - splitTerms: terms_default, - splitWhitespace: whitespace_default2, - fromString: parse_default2 - } - } -}; - -// node_modules/compromise/src/1-one/tokenize/model/aliases.js -var aliases = { - "&": "and", - "@": "at", - "%": "percent", - "plz": "please", - "bein": "being" -}; -var aliases_default = aliases; - -// node_modules/compromise/src/1-one/tokenize/model/abbreviations/misc.js -var misc_default = [ - "approx", - "apt", - "bc", - "cyn", - "eg", - "esp", - "est", - "etc", - "ex", - "exp", - "prob", - //probably - "pron", - // Pronunciation - "gal", - //gallon - "min", - "pseud", - "fig", - //figure - "jd", - "lat", - //latitude - "lng", - //longitude - "vol", - //volume - "fm", - //not am - "def", - //definition - "misc", - "plz", - //please - "ea", - //each - "ps", - "sec", - //second - "pt", - "pref", - //preface - "pl", - //plural - "pp", - //pages - "qt", - //quarter - "fr", - //french - "sq", - "nee", - //given name at birth - "ss", - //ship, or sections - "tel", - "temp", - "vet", - "ver", - //version - "fem", - //feminine - "masc", - //masculine - "eng", - //engineering/english - "adj", - //adjective - "vb", - //verb - "rb", - //adverb - "inf", - //infinitive - "situ", - // in situ - "vivo", - "vitro", - "wr" - //world record -]; - -// node_modules/compromise/src/1-one/tokenize/model/abbreviations/honorifics.js -var honorifics_default = [ - "adj", - "adm", - "adv", - "asst", - "atty", - "bldg", - "brig", - "capt", - "cmdr", - "comdr", - "cpl", - "det", - "dr", - "esq", - "gen", - "gov", - "hon", - "jr", - "llb", - "lt", - "maj", - "messrs", - "mlle", - "mme", - "mr", - "mrs", - "ms", - "mstr", - "phd", - "prof", - "pvt", - "rep", - "reps", - "res", - "rev", - "sen", - "sens", - "sfc", - "sgt", - "sir", - "sr", - "supt", - "surg" - //miss - //misses -]; - -// node_modules/compromise/src/1-one/tokenize/model/abbreviations/months.js -var months_default = ["jan", "feb", "mar", "apr", "jun", "jul", "aug", "sep", "sept", "oct", "nov", "dec"]; - -// node_modules/compromise/src/1-one/tokenize/model/abbreviations/nouns.js -var nouns_default = [ - "ad", - "al", - "arc", - "ba", - "bl", - "ca", - "cca", - "col", - "corp", - "ft", - "fy", - "ie", - "lit", - "ma", - "md", - "pd", - "tce" -]; - -// node_modules/compromise/src/1-one/tokenize/model/abbreviations/organizations.js -var organizations_default = ["dept", "univ", "assn", "bros", "inc", "ltd", "co"]; - -// node_modules/compromise/src/1-one/tokenize/model/abbreviations/places.js -var places_default = [ - "rd", - "st", - "dist", - "mt", - "ave", - "blvd", - "cl", - // 'ct', - "cres", - "hwy", - //states - "ariz", - "cal", - "calif", - "colo", - "conn", - "fla", - "fl", - "ga", - "ida", - "ia", - "kan", - "kans", - "minn", - "neb", - "nebr", - "okla", - "penna", - "penn", - "pa", - "dak", - "tenn", - "tex", - "ut", - "vt", - "va", - "wis", - "wisc", - "wy", - "wyo", - "usafa", - "alta", - "ont", - "que", - "sask" -]; - -// node_modules/compromise/src/1-one/tokenize/model/abbreviations/units.js -var units_default = [ - "dl", - "ml", - "gal", - // 'ft', //ambiguous - "qt", - "pt", - "tbl", - "tsp", - "tbsp", - "km", - "dm", - //decimeter - "cm", - "mm", - "mi", - "td", - "hr", - //hour - "hrs", - //hour - "kg", - "hg", - "dg", - //decigram - "cg", - //centigram - "mg", - //milligram - "\xB5g", - //microgram - "lb", - //pound - "oz", - //ounce - "sq ft", - "hz", - //hertz - "mps", - //meters per second - "mph", - "kmph", - //kilometers per hour - "kb", - //kilobyte - "mb", - //megabyte - // 'gb', //ambig - "tb", - //terabyte - "lx", - //lux - "lm", - //lumen - // 'pa', //ambig - "fl oz", - // - "yb" -]; - -// node_modules/compromise/src/1-one/tokenize/model/lexicon.js -var list = [ - [misc_default], - [units_default, "Unit"], - [nouns_default, "Noun"], - [honorifics_default, "Honorific"], - [months_default, "Month"], - [organizations_default, "Organization"], - [places_default, "Place"] -]; -var abbreviations = {}; -var lexicon2 = {}; -list.forEach((a3) => { - a3[0].forEach((w2) => { - abbreviations[w2] = true; - lexicon2[w2] = "Abbreviation"; - if (a3[1] !== void 0) { - lexicon2[w2] = [lexicon2[w2], a3[1]]; - } - }); -}); - -// node_modules/compromise/src/1-one/tokenize/model/prefixes.js -var prefixes_default = [ - "anti", - "bi", - "co", - "contra", - "de", - "extra", - "infra", - "inter", - "intra", - "macro", - "micro", - "mis", - "mono", - "multi", - "peri", - "pre", - "pro", - "proto", - "pseudo", - "re", - "sub", - "supra", - "trans", - "tri", - "un", - "out", - //out-lived - "ex" - //ex-wife - // 'counter', - // 'mid', - // 'out', - // 'non', - // 'over', - // 'post', - // 'semi', - // 'super', //'super-cool' - // 'ultra', //'ulta-cool' - // 'under', - // 'whole', -].reduce((h3, str2) => { - h3[str2] = true; - return h3; -}, {}); - -// node_modules/compromise/src/1-one/tokenize/model/suffixes.js -var suffixes_default = { - "like": true, - "ish": true, - "less": true, - "able": true, - "elect": true, - "type": true, - "designate": true - // 'fold':true, -}; - -// node_modules/compromise/src/1-one/tokenize/model/unicode.js -var compact = { - "!": "\xA1", - "?": "\xBF\u0241", - '"': '\u201C\u201D"\u275D\u275E', - "'": "\u2018\u201B\u275B\u275C\u2019", - "-": "\u2014\u2013", - a: "\xAA\xC0\xC1\xC2\xC3\xC4\xC5\xE0\xE1\xE2\xE3\xE4\xE5\u0100\u0101\u0102\u0103\u0104\u0105\u01CD\u01CE\u01DE\u01DF\u01E0\u01E1\u01FA\u01FB\u0200\u0201\u0202\u0203\u0226\u0227\u023A\u0386\u0391\u0394\u039B\u03AC\u03B1\u03BB\u0410\u0430\u0466\u0467\u04D0\u04D1\u04D2\u04D3\u019B\xE6", - b: "\xDF\xFE\u0180\u0181\u0182\u0183\u0184\u0185\u0243\u0392\u03B2\u03D0\u03E6\u0411\u0412\u042A\u042C\u0432\u044A\u044C\u0462\u0463\u048C\u048D", - c: "\xA2\xA9\xC7\xE7\u0106\u0107\u0108\u0109\u010A\u010B\u010C\u010D\u0186\u0187\u0188\u023B\u023C\u037B\u037C\u03F2\u03F9\u03FD\u03FE\u0421\u0441\u0454\u0480\u0481\u04AA\u04AB", - d: "\xD0\u010E\u010F\u0110\u0111\u0189\u018A\u0221\u018B\u018C", - e: "\xC8\xC9\xCA\xCB\xE8\xE9\xEA\xEB\u0112\u0113\u0114\u0115\u0116\u0117\u0118\u0119\u011A\u011B\u0190\u0204\u0205\u0206\u0207\u0228\u0229\u0246\u0247\u0388\u0395\u039E\u03A3\u03AD\u03B5\u03BE\u03F5\u0400\u0401\u0415\u0435\u0450\u0451\u04BC\u04BD\u04BE\u04BF\u04D6\u04D7\u1EC5", - f: "\u0191\u0192\u03DC\u03DD\u04FA\u04FB\u0492\u0493\u017F", - g: "\u011C\u011D\u011E\u011F\u0120\u0121\u0122\u0123\u0193\u01E4\u01E5\u01E6\u01E7\u01F4\u01F5", - h: "\u0124\u0125\u0126\u0127\u0195\u01F6\u021E\u021F\u0389\u0397\u0402\u040A\u040B\u041D\u043D\u0452\u045B\u04A2\u04A3\u04A4\u04A5\u04BA\u04BB\u04C9\u04CA", - I: "\xCC\xCD\xCE\xCF", - i: "\xEC\xED\xEE\xEF\u0128\u0129\u012A\u012B\u012C\u012D\u012E\u012F\u0130\u0131\u0196\u0197\u0208\u0209\u020A\u020B\u038A\u0390\u03AA\u03AF\u03B9\u03CA\u0406\u0407\u0456\u0457i\u0307", - j: "\u0134\u0135\u01F0\u0237\u0248\u0249\u03F3\u0408\u0458", - k: "\u0136\u0137\u0138\u0198\u0199\u01E8\u01E9\u039A\u03BA\u040C\u0416\u041A\u0436\u043A\u045C\u049A\u049B\u049C\u049D\u049E\u049F\u04A0\u04A1", - l: "\u0139\u013A\u013B\u013C\u013D\u013E\u013F\u0140\u0141\u0142\u019A\u01AA\u01C0\u01CF\u01D0\u0234\u023D\u0399\u04C0\u04CF", - m: "\u039C\u03FA\u03FB\u041C\u043C\u04CD\u04CE", - n: "\xD1\xF1\u0143\u0144\u0145\u0146\u0147\u0148\u0149\u014A\u014B\u019D\u019E\u01F8\u01F9\u0220\u0235\u039D\u03A0\u03AE\u03B7\u03DE\u040D\u0418\u0419\u041B\u041F\u0438\u0439\u043B\u043F\u045D\u048A\u048B\u04C5\u04C6\u04E2\u04E3\u04E4\u04E5\u03C0", - o: "\xD2\xD3\xD4\xD5\xD6\xD8\xF0\xF2\xF3\xF4\xF5\xF6\xF8\u014C\u014D\u014E\u014F\u0150\u0151\u019F\u01A0\u01A1\u01D1\u01D2\u01EA\u01EB\u01EC\u01ED\u01FE\u01FF\u020C\u020D\u020E\u020F\u022A\u022B\u022C\u022D\u022E\u022F\u0230\u0231\u038C\u0398\u039F\u03B8\u03BF\u03C3\u03CC\u03D5\u03D8\u03D9\u03EC\u03F4\u041E\u0424\u043E\u0472\u0473\u04E6\u04E7\u04E8\u04E9\u04EA\u04EB", - p: "\u01A4\u03A1\u03C1\u03F7\u03F8\u03FC\u0420\u0440\u048E\u048F\xDE", - q: "\u024A\u024B", - r: "\u0154\u0155\u0156\u0157\u0158\u0159\u01A6\u0210\u0211\u0212\u0213\u024C\u024D\u0403\u0413\u042F\u0433\u044F\u0453\u0490\u0491", - s: "\u015A\u015B\u015C\u015D\u015E\u015F\u0160\u0161\u01A7\u01A8\u0218\u0219\u023F\u0405\u0455", - t: "\u0162\u0163\u0164\u0165\u0166\u0167\u01AB\u01AC\u01AD\u01AE\u021A\u021B\u0236\u023E\u0393\u03A4\u03C4\u03EE\u0422\u0442", - u: "\xD9\xDA\xDB\xDC\xF9\xFA\xFB\xFC\u0168\u0169\u016A\u016B\u016C\u016D\u016E\u016F\u0170\u0171\u0172\u0173\u01AF\u01B0\u01B1\u01B2\u01D3\u01D4\u01D5\u01D6\u01D7\u01D8\u01D9\u01DA\u01DB\u01DC\u0214\u0215\u0216\u0217\u0244\u03B0\u03C5\u03CB\u03CD", - v: "\u03BD\u0474\u0475\u0476\u0477", - w: "\u0174\u0175\u019C\u03C9\u03CE\u03D6\u03E2\u03E3\u0428\u0429\u0448\u0449\u0461\u047F", - x: "\xD7\u03A7\u03C7\u03D7\u03F0\u0425\u0445\u04B2\u04B3\u04FC\u04FD\u04FE\u04FF", - y: "\xDD\xFD\xFF\u0176\u0177\u0178\u01B3\u01B4\u0232\u0233\u024E\u024F\u038E\u03A5\u03AB\u03B3\u03C8\u03D2\u03D3\u03D4\u040E\u0423\u0443\u0447\u045E\u0470\u0471\u04AE\u04AF\u04B0\u04B1\u04EE\u04EF\u04F0\u04F1\u04F2\u04F3", - z: "\u0179\u017A\u017B\u017C\u017D\u017E\u01B5\u01B6\u0224\u0225\u0240\u0396" -}; -var unicode = {}; -Object.keys(compact).forEach(function(k3) { - compact[k3].split("").forEach(function(s3) { - unicode[s3] = k3; - }); -}); -var unicode_default2 = unicode; - -// node_modules/compromise/src/1-one/tokenize/model/punctuation.js -var prePunctuation = { - "#": true, - //#hastag - "@": true, - //@atmention - "_": true, - //underscore - "\xB0": true, - // '+': true,//+4 - // '\\-',//-4 (escape) - // '.',//.4 - // zero-width chars - "\u200B": true, - "\u200C": true, - "\u200D": true, - "\uFEFF": true -}; -var postPunctuation = { - "%": true, - //88% - "_": true, - //underscore - "\xB0": true, - //degrees, italian ordinal - // '\'',// sometimes - // zero-width chars - "\u200B": true, - "\u200C": true, - "\u200D": true, - "\uFEFF": true -}; -var emoticons = { - "<3": true, - " { - word = word.trim(); - if (word !== "") { - term.alias = term.alias || []; - term.alias.push(word); - } - }); - } - } - return term; -}; -var alias_default = addAliases; - -// node_modules/compromise/src/1-one/tokenize/compute/machine.js -var hasDash3 = /^\p{Letter}+-\p{Letter}+$/u; -var doMachine = function(term) { - let str2 = term.implicit || term.normal || term.text; - str2 = str2.replace(/['’]s$/, ""); - str2 = str2.replace(/s['’]$/, "s"); - str2 = str2.replace(/([aeiou][ktrp])in'$/, "$1ing"); - if (hasDash3.test(str2)) { - str2 = str2.replace(/-/g, ""); - } - str2 = str2.replace(/^[#@]/, ""); - if (str2 !== term.normal) { - term.machine = str2; - } -}; -var machine_default = doMachine; - -// node_modules/compromise/src/1-one/tokenize/compute/freq.js -var freq = function(view) { - let docs = view.docs; - let counts = {}; - for (let i4 = 0; i4 < docs.length; i4 += 1) { - for (let t4 = 0; t4 < docs[i4].length; t4 += 1) { - let term = docs[i4][t4]; - let word = term.machine || term.normal; - counts[word] = counts[word] || 0; - counts[word] += 1; - } - } - for (let i4 = 0; i4 < docs.length; i4 += 1) { - for (let t4 = 0; t4 < docs[i4].length; t4 += 1) { - let term = docs[i4][t4]; - let word = term.machine || term.normal; - term.freq = counts[word]; - } - } -}; -var freq_default = freq; - -// node_modules/compromise/src/1-one/tokenize/compute/offset.js -var offset = function(view) { - let elapsed = 0; - let index4 = 0; - let docs = view.document; - for (let i4 = 0; i4 < docs.length; i4 += 1) { - for (let t4 = 0; t4 < docs[i4].length; t4 += 1) { - let term = docs[i4][t4]; - term.offset = { - index: index4, - start: elapsed + term.pre.length, - length: term.text.length - }; - elapsed += term.pre.length + term.text.length + term.post.length; - index4 += 1; - } - } -}; -var offset_default = offset; - -// node_modules/compromise/src/1-one/tokenize/compute/reindex.js -var index3 = function(view) { - let document2 = view.document; - for (let n3 = 0; n3 < document2.length; n3 += 1) { - for (let i4 = 0; i4 < document2[n3].length; i4 += 1) { - document2[n3][i4].index = [n3, i4]; - } - } -}; -var reindex_default = index3; - -// node_modules/compromise/src/1-one/tokenize/compute/wordCount.js -var wordCount2 = function(view) { - let n3 = 0; - let docs = view.docs; - for (let i4 = 0; i4 < docs.length; i4 += 1) { - for (let t4 = 0; t4 < docs[i4].length; t4 += 1) { - if (docs[i4][t4].normal === "") { - continue; - } - n3 += 1; - docs[i4][t4].wordCount = n3; - } - } -}; -var wordCount_default = wordCount2; - -// node_modules/compromise/src/1-one/tokenize/compute/index.js -var termLoop = function(view, fn) { - let docs = view.docs; - for (let i4 = 0; i4 < docs.length; i4 += 1) { - for (let t4 = 0; t4 < docs[i4].length; t4 += 1) { - fn(docs[i4][t4], view.world); - } - } -}; -var methods16 = { - alias: (view) => termLoop(view, alias_default), - machine: (view) => termLoop(view, machine_default), - normal: (view) => termLoop(view, normal_default), - freq: freq_default, - offset: offset_default, - index: reindex_default, - wordCount: wordCount_default -}; -var compute_default7 = methods16; - -// node_modules/compromise/src/1-one/tokenize/plugin.js -var plugin_default12 = { - compute: compute_default7, - methods: methods_default8, - model: model_default2, - hooks: ["alias", "machine", "index", "id"] -}; - -// node_modules/compromise/src/1-one/typeahead/compute.js -var typeahead = function(view) { - const prefixes = view.model.one.typeahead; - const docs = view.docs; - if (docs.length === 0 || Object.keys(prefixes).length === 0) { - return; - } - let lastPhrase = docs[docs.length - 1] || []; - let lastTerm = lastPhrase[lastPhrase.length - 1]; - if (lastTerm.post) { - return; - } - if (prefixes.hasOwnProperty(lastTerm.normal)) { - let found = prefixes[lastTerm.normal]; - lastTerm.implicit = found; - lastTerm.machine = found; - lastTerm.typeahead = true; - if (view.compute.preTagger) { - view.last().unTag("*").compute(["lexicon", "preTagger"]); - } - } -}; -var compute_default8 = { typeahead }; - -// node_modules/compromise/src/1-one/typeahead/api.js -var autoFill = function() { - const docs = this.docs; - if (docs.length === 0) { - return this; - } - let lastPhrase = docs[docs.length - 1] || []; - let term = lastPhrase[lastPhrase.length - 1]; - if (term.typeahead === true && term.machine) { - term.text = term.machine; - term.normal = term.machine; - } - return this; -}; -var api2 = function(View2) { - View2.prototype.autoFill = autoFill; -}; -var api_default9 = api2; - -// node_modules/compromise/src/1-one/typeahead/lib/allPrefixes.js -var getPrefixes = function(arr, opts2, world2) { - let index4 = {}; - let collisions = []; - let existing = world2.prefixes || {}; - arr.forEach((str2) => { - str2 = str2.toLowerCase().trim(); - let max2 = str2.length; - if (opts2.max && max2 > opts2.max) { - max2 = opts2.max; - } - for (let size = opts2.min; size < max2; size += 1) { - let prefix2 = str2.substring(0, size); - if (opts2.safe && world2.model.one.lexicon.hasOwnProperty(prefix2)) { - continue; - } - if (existing.hasOwnProperty(prefix2) === true) { - collisions.push(prefix2); - continue; - } - if (index4.hasOwnProperty(prefix2) === true) { - collisions.push(prefix2); - continue; - } - index4[prefix2] = str2; - } - }); - index4 = Object.assign({}, existing, index4); - collisions.forEach((str2) => { - delete index4[str2]; - }); - return index4; -}; -var allPrefixes_default = getPrefixes; - -// node_modules/compromise/src/1-one/typeahead/lib/index.js -var isObject7 = (val) => { - return Object.prototype.toString.call(val) === "[object Object]"; -}; -var defaults2 = { - safe: true, - min: 3 -}; -var prepare = function(words = [], opts2 = {}) { - let model4 = this.model(); - opts2 = Object.assign({}, defaults2, opts2); - if (isObject7(words)) { - Object.assign(model4.one.lexicon, words); - words = Object.keys(words); - } - let prefixes = allPrefixes_default(words, opts2, this.world()); - Object.keys(prefixes).forEach((str2) => { - if (model4.one.typeahead.hasOwnProperty(str2)) { - delete model4.one.typeahead[str2]; - return; - } - model4.one.typeahead[str2] = prefixes[str2]; - }); - return this; -}; -var lib_default5 = { - typeahead: prepare -}; - -// node_modules/compromise/src/1-one/typeahead/plugin.js -var model3 = { - one: { - typeahead: {} - //set a blank key-val - } -}; -var plugin_default13 = { - model: model3, - api: api_default9, - lib: lib_default5, - compute: compute_default8, - hooks: ["typeahead"] -}; - -// node_modules/compromise/src/one.js -nlp_default.extend(plugin_default2); -nlp_default.extend(plugin_default8); -nlp_default.extend(plugin_default7); -nlp_default.extend(plugin_default9); -nlp_default.extend(plugin_default11); -nlp_default.plugin(plugin_default3); -nlp_default.extend(plugin_default12); -nlp_default.extend(plugin_default4); -nlp_default.plugin(plugin_default); -nlp_default.extend(plugin_default6); -nlp_default.extend(plugin_default13); -nlp_default.extend(plugin_default5); -nlp_default.extend(plugin_default10); -var one_default = nlp_default; - -// src/prompt/prompt.ts -var TEMPLATE_VARIABLES = `{{pre_cursor}} -{{post_cursor}} -{{active_sentence}} -{{last_line}}`; -function preparePrompt(editor, template = TEMPLATE_VARIABLES) { - const cursor = editor.getCursor(); - const preCursor = editor.getRange({ line: 0, ch: 0 }, cursor); - const postCursor = editor.getRange(cursor, { line: editor.lastLine(), ch: editor.getLine(editor.lastLine()).length }); - const activeSentence = one_default(preCursor).fullSentences().last().out("text"); - const lastLine = editor.getLine(editor.lastLine()); - return renderTemplate(template, { - pre_cursor: preCursor, - post_cursor: postCursor, - active_sentence: activeSentence, - last_line: lastLine - }); -} -function renderTemplate(template, args) { - return mustache_default.render(template, args); -} - -// src/providers/ollama/provider.ts -var OllamaProvider = class { - constructor(settins) { - this.aborted = false; - this.settings = settins; - this.client = new Ollama2({ host: this.settings.host }); - } - async *generate(editor, options) { - this.aborted = false; - const prompt = preparePrompt(editor, options.userPrompt); - const completionIterator = await this.client.generate({ - model: options.model, - prompt, - system: options.systemPrompt, - stream: true, - options: { - temperature: options.temperature - } - }); - const initialPosition = editor.getCursor(); - let completion = ""; - for await (let response of completionIterator) { - if (this.aborted) { - return; - } - if (this.cursorMoved(editor, initialPosition)) { - this.abort(); - return; - } - completion += response.response; - yield completion; - } - } - cursorMoved(editor, initialPosition) { - const currentPosition = editor.getCursor(); - return currentPosition.line !== initialPosition.line || currentPosition.ch !== initialPosition.ch; - } - async abort() { - if (this.aborted) - return; - this.client.abort(); - this.aborted = true; - } - async updateModels() { - const response = await this.client.list(); - this.settings.models = response.models.map((model4) => model4.name); - return this.settings.models; - } - async connectionTest() { - try { - await this.client.list(); - return true; - } catch (error) { - console.error("Error testing connection:", error); - return false; - } - } -}; - -// node_modules/openai/internal/qs/formats.mjs -var default_format = "RFC3986"; -var formatters = { - RFC1738: (v2) => String(v2).replace(/%20/g, "+"), - RFC3986: (v2) => String(v2) -}; -var RFC1738 = "RFC1738"; - -// node_modules/openai/internal/qs/utils.mjs -var is_array = Array.isArray; -var hex_table = (() => { - const array = []; - for (let i4 = 0; i4 < 256; ++i4) { - array.push("%" + ((i4 < 16 ? "0" : "") + i4.toString(16)).toUpperCase()); - } - return array; -})(); -var limit = 1024; -var encode = (str2, _defaultEncoder, charset, _kind, format) => { - if (str2.length === 0) { - return str2; - } - let string = str2; - if (typeof str2 === "symbol") { - string = Symbol.prototype.toString.call(str2); - } else if (typeof str2 !== "string") { - string = String(str2); - } - if (charset === "iso-8859-1") { - return escape(string).replace(/%u[0-9a-f]{4}/gi, function($0) { - return "%26%23" + parseInt($0.slice(2), 16) + "%3B"; - }); - } - let out2 = ""; - for (let j3 = 0; j3 < string.length; j3 += limit) { - const segment = string.length >= limit ? string.slice(j3, j3 + limit) : string; - const arr = []; - for (let i4 = 0; i4 < segment.length; ++i4) { - let c3 = segment.charCodeAt(i4); - if (c3 === 45 || // - - c3 === 46 || // . - c3 === 95 || // _ - c3 === 126 || // ~ - c3 >= 48 && c3 <= 57 || // 0-9 - c3 >= 65 && c3 <= 90 || // a-z - c3 >= 97 && c3 <= 122 || // A-Z - format === RFC1738 && (c3 === 40 || c3 === 41)) { - arr[arr.length] = segment.charAt(i4); - continue; - } - if (c3 < 128) { - arr[arr.length] = hex_table[c3]; - continue; - } - if (c3 < 2048) { - arr[arr.length] = hex_table[192 | c3 >> 6] + hex_table[128 | c3 & 63]; - continue; - } - if (c3 < 55296 || c3 >= 57344) { - arr[arr.length] = hex_table[224 | c3 >> 12] + hex_table[128 | c3 >> 6 & 63] + hex_table[128 | c3 & 63]; - continue; - } - i4 += 1; - c3 = 65536 + ((c3 & 1023) << 10 | segment.charCodeAt(i4) & 1023); - arr[arr.length] = hex_table[240 | c3 >> 18] + hex_table[128 | c3 >> 12 & 63] + hex_table[128 | c3 >> 6 & 63] + hex_table[128 | c3 & 63]; - } - out2 += arr.join(""); - } - return out2; -}; -function is_buffer(obj) { - if (!obj || typeof obj !== "object") { - return false; - } - return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); -} -function maybe_map(val, fn) { - if (is_array(val)) { - const mapped = []; - for (let i4 = 0; i4 < val.length; i4 += 1) { - mapped.push(fn(val[i4])); - } - return mapped; - } - return fn(val); -} - -// node_modules/openai/internal/qs/stringify.mjs -var has2 = Object.prototype.hasOwnProperty; -var array_prefix_generators = { - brackets(prefix2) { - return String(prefix2) + "[]"; - }, - comma: "comma", - indices(prefix2, key) { - return String(prefix2) + "[" + key + "]"; - }, - repeat(prefix2) { - return String(prefix2); - } -}; -var is_array2 = Array.isArray; -var push2 = Array.prototype.push; -var push_to_array = function(arr, value_or_array) { - push2.apply(arr, is_array2(value_or_array) ? value_or_array : [value_or_array]); -}; -var to_ISO = Date.prototype.toISOString; -var defaults3 = { - addQueryPrefix: false, - allowDots: false, - allowEmptyArrays: false, - arrayFormat: "indices", - charset: "utf-8", - charsetSentinel: false, - delimiter: "&", - encode: true, - encodeDotInKeys: false, - encoder: encode, - encodeValuesOnly: false, - format: default_format, - formatter: formatters[default_format], - /** @deprecated */ - indices: false, - serializeDate(date) { - return to_ISO.call(date); - }, - skipNulls: false, - strictNullHandling: false -}; -function is_non_nullish_primitive(v2) { - return typeof v2 === "string" || typeof v2 === "number" || typeof v2 === "boolean" || typeof v2 === "symbol" || typeof v2 === "bigint"; -} -var sentinel = {}; -function inner_stringify(object, prefix2, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter2, sort2, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { - let obj = object; - let tmp_sc = sideChannel; - let step = 0; - let find_flag = false; - while ((tmp_sc = tmp_sc.get(sentinel)) !== void 0 && !find_flag) { - const pos = tmp_sc.get(object); - step += 1; - if (typeof pos !== "undefined") { - if (pos === step) { - throw new RangeError("Cyclic object value"); - } else { - find_flag = true; - } - } - if (typeof tmp_sc.get(sentinel) === "undefined") { - step = 0; - } - } - if (typeof filter2 === "function") { - obj = filter2(prefix2, obj); - } else if (obj instanceof Date) { - obj = serializeDate == null ? void 0 : serializeDate(obj); - } else if (generateArrayPrefix === "comma" && is_array2(obj)) { - obj = maybe_map(obj, function(value) { - if (value instanceof Date) { - return serializeDate == null ? void 0 : serializeDate(value); - } - return value; - }); - } - if (obj === null) { - if (strictNullHandling) { - return encoder && !encodeValuesOnly ? ( - // @ts-expect-error - encoder(prefix2, defaults3.encoder, charset, "key", format) - ) : prefix2; - } - obj = ""; - } - if (is_non_nullish_primitive(obj) || is_buffer(obj)) { - if (encoder) { - const key_value = encodeValuesOnly ? prefix2 : encoder(prefix2, defaults3.encoder, charset, "key", format); - return [ - (formatter == null ? void 0 : formatter(key_value)) + "=" + // @ts-expect-error - (formatter == null ? void 0 : formatter(encoder(obj, defaults3.encoder, charset, "value", format))) - ]; - } - return [(formatter == null ? void 0 : formatter(prefix2)) + "=" + (formatter == null ? void 0 : formatter(String(obj)))]; - } - const values = []; - if (typeof obj === "undefined") { - return values; - } - let obj_keys; - if (generateArrayPrefix === "comma" && is_array2(obj)) { - if (encodeValuesOnly && encoder) { - obj = maybe_map(obj, encoder); - } - obj_keys = [{ value: obj.length > 0 ? obj.join(",") || null : void 0 }]; - } else if (is_array2(filter2)) { - obj_keys = filter2; - } else { - const keys = Object.keys(obj); - obj_keys = sort2 ? keys.sort(sort2) : keys; - } - const encoded_prefix = encodeDotInKeys ? String(prefix2).replace(/\./g, "%2E") : String(prefix2); - const adjusted_prefix = commaRoundTrip && is_array2(obj) && obj.length === 1 ? encoded_prefix + "[]" : encoded_prefix; - if (allowEmptyArrays && is_array2(obj) && obj.length === 0) { - return adjusted_prefix + "[]"; - } - for (let j3 = 0; j3 < obj_keys.length; ++j3) { - const key = obj_keys[j3]; - const value = ( - // @ts-ignore - typeof key === "object" && typeof key.value !== "undefined" ? key.value : obj[key] - ); - if (skipNulls && value === null) { - continue; - } - const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\./g, "%2E") : key; - const key_prefix = is_array2(obj) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjusted_prefix, encoded_key) : adjusted_prefix : adjusted_prefix + (allowDots ? "." + encoded_key : "[" + encoded_key + "]"); - sideChannel.set(object, step); - const valueSideChannel = /* @__PURE__ */ new WeakMap(); - valueSideChannel.set(sentinel, sideChannel); - push_to_array(values, inner_stringify( - value, - key_prefix, - generateArrayPrefix, - commaRoundTrip, - allowEmptyArrays, - strictNullHandling, - skipNulls, - encodeDotInKeys, - // @ts-ignore - generateArrayPrefix === "comma" && encodeValuesOnly && is_array2(obj) ? null : encoder, - filter2, - sort2, - allowDots, - serializeDate, - format, - formatter, - encodeValuesOnly, - charset, - valueSideChannel - )); - } - return values; -} -function normalize_stringify_options(opts2 = defaults3) { - if (typeof opts2.allowEmptyArrays !== "undefined" && typeof opts2.allowEmptyArrays !== "boolean") { - throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); - } - if (typeof opts2.encodeDotInKeys !== "undefined" && typeof opts2.encodeDotInKeys !== "boolean") { - throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided"); - } - if (opts2.encoder !== null && typeof opts2.encoder !== "undefined" && typeof opts2.encoder !== "function") { - throw new TypeError("Encoder has to be a function."); - } - const charset = opts2.charset || defaults3.charset; - if (typeof opts2.charset !== "undefined" && opts2.charset !== "utf-8" && opts2.charset !== "iso-8859-1") { - throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); - } - let format = default_format; - if (typeof opts2.format !== "undefined") { - if (!has2.call(formatters, opts2.format)) { - throw new TypeError("Unknown format option provided."); - } - format = opts2.format; - } - const formatter = formatters[format]; - let filter2 = defaults3.filter; - if (typeof opts2.filter === "function" || is_array2(opts2.filter)) { - filter2 = opts2.filter; - } - let arrayFormat; - if (opts2.arrayFormat && opts2.arrayFormat in array_prefix_generators) { - arrayFormat = opts2.arrayFormat; - } else if ("indices" in opts2) { - arrayFormat = opts2.indices ? "indices" : "repeat"; - } else { - arrayFormat = defaults3.arrayFormat; - } - if ("commaRoundTrip" in opts2 && typeof opts2.commaRoundTrip !== "boolean") { - throw new TypeError("`commaRoundTrip` must be a boolean, or absent"); - } - const allowDots = typeof opts2.allowDots === "undefined" ? !!opts2.encodeDotInKeys === true ? true : defaults3.allowDots : !!opts2.allowDots; - return { - addQueryPrefix: typeof opts2.addQueryPrefix === "boolean" ? opts2.addQueryPrefix : defaults3.addQueryPrefix, - // @ts-ignore - allowDots, - allowEmptyArrays: typeof opts2.allowEmptyArrays === "boolean" ? !!opts2.allowEmptyArrays : defaults3.allowEmptyArrays, - arrayFormat, - charset, - charsetSentinel: typeof opts2.charsetSentinel === "boolean" ? opts2.charsetSentinel : defaults3.charsetSentinel, - commaRoundTrip: !!opts2.commaRoundTrip, - delimiter: typeof opts2.delimiter === "undefined" ? defaults3.delimiter : opts2.delimiter, - encode: typeof opts2.encode === "boolean" ? opts2.encode : defaults3.encode, - encodeDotInKeys: typeof opts2.encodeDotInKeys === "boolean" ? opts2.encodeDotInKeys : defaults3.encodeDotInKeys, - encoder: typeof opts2.encoder === "function" ? opts2.encoder : defaults3.encoder, - encodeValuesOnly: typeof opts2.encodeValuesOnly === "boolean" ? opts2.encodeValuesOnly : defaults3.encodeValuesOnly, - filter: filter2, - format, - formatter, - serializeDate: typeof opts2.serializeDate === "function" ? opts2.serializeDate : defaults3.serializeDate, - skipNulls: typeof opts2.skipNulls === "boolean" ? opts2.skipNulls : defaults3.skipNulls, - // @ts-ignore - sort: typeof opts2.sort === "function" ? opts2.sort : null, - strictNullHandling: typeof opts2.strictNullHandling === "boolean" ? opts2.strictNullHandling : defaults3.strictNullHandling - }; -} -function stringify(object, opts2 = {}) { - let obj = object; - const options = normalize_stringify_options(opts2); - let obj_keys; - let filter2; - if (typeof options.filter === "function") { - filter2 = options.filter; - obj = filter2("", obj); - } else if (is_array2(options.filter)) { - filter2 = options.filter; - obj_keys = filter2; - } - const keys = []; - if (typeof obj !== "object" || obj === null) { - return ""; - } - const generateArrayPrefix = array_prefix_generators[options.arrayFormat]; - const commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip; - if (!obj_keys) { - obj_keys = Object.keys(obj); - } - if (options.sort) { - obj_keys.sort(options.sort); - } - const sideChannel = /* @__PURE__ */ new WeakMap(); - for (let i4 = 0; i4 < obj_keys.length; ++i4) { - const key = obj_keys[i4]; - if (options.skipNulls && obj[key] === null) { - continue; - } - push_to_array(keys, inner_stringify( - obj[key], - key, - // @ts-expect-error - generateArrayPrefix, - commaRoundTrip, - options.allowEmptyArrays, - options.strictNullHandling, - options.skipNulls, - options.encodeDotInKeys, - options.encode ? options.encoder : null, - options.filter, - options.sort, - options.allowDots, - options.serializeDate, - options.format, - options.formatter, - options.encodeValuesOnly, - options.charset, - sideChannel - )); - } - const joined = keys.join(options.delimiter); - let prefix2 = options.addQueryPrefix === true ? "?" : ""; - if (options.charsetSentinel) { - if (options.charset === "iso-8859-1") { - prefix2 += "utf8=%26%2310003%3B&"; - } else { - prefix2 += "utf8=%E2%9C%93&"; - } - } - return joined.length > 0 ? prefix2 + joined : ""; -} - -// node_modules/openai/version.mjs -var VERSION = "4.89.0"; - -// node_modules/openai/_shims/registry.mjs -var auto = false; -var kind = void 0; -var fetch2 = void 0; -var Request = void 0; -var Response = void 0; -var Headers2 = void 0; -var FormData2 = void 0; -var Blob2 = void 0; -var File = void 0; -var ReadableStream = void 0; -var getMultipartRequestOptions = void 0; -var getDefaultAgent = void 0; -var fileFromPath = void 0; -var isFsReadStream = void 0; -function setShims(shims, options = { auto: false }) { - if (auto) { - throw new Error(`you must \`import 'openai/shims/${shims.kind}'\` before importing anything else from openai`); - } - if (kind) { - throw new Error(`can't \`import 'openai/shims/${shims.kind}'\` after \`import 'openai/shims/${kind}'\``); - } - auto = options.auto; - kind = shims.kind; - fetch2 = shims.fetch; - Request = shims.Request; - Response = shims.Response; - Headers2 = shims.Headers; - FormData2 = shims.FormData; - Blob2 = shims.Blob; - File = shims.File; - ReadableStream = shims.ReadableStream; - getMultipartRequestOptions = shims.getMultipartRequestOptions; - getDefaultAgent = shims.getDefaultAgent; - fileFromPath = shims.fileFromPath; - isFsReadStream = shims.isFsReadStream; -} - -// node_modules/openai/_shims/node-runtime.mjs -var nf = __toESM(require_lib2(), 1); - -// node_modules/formdata-node/lib/esm/FormData.js -var import_util2 = require("util"); -init_File(); -init_isFile(); - -// node_modules/formdata-node/lib/esm/isBlob.js -init_Blob(); -var isBlob = (value) => value instanceof Blob3; - -// node_modules/formdata-node/lib/esm/FormData.js -init_isFunction(); - -// node_modules/formdata-node/lib/esm/deprecateConstructorEntries.js -var import_util = require("util"); -var deprecateConstructorEntries = (0, import_util.deprecate)(() => { -}, 'Constructor "entries" argument is not spec-compliant and will be removed in next major release.'); - -// node_modules/formdata-node/lib/esm/FormData.js -var __classPrivateFieldGet3 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); -}; -var _FormData_instances; -var _FormData_entries; -var _FormData_setEntry; -var FormData3 = class { - constructor(entries) { - _FormData_instances.add(this); - _FormData_entries.set(this, /* @__PURE__ */ new Map()); - if (entries) { - deprecateConstructorEntries(); - entries.forEach(({ name, value, fileName }) => this.append(name, value, fileName)); - } - } - static [(_FormData_entries = /* @__PURE__ */ new WeakMap(), _FormData_instances = /* @__PURE__ */ new WeakSet(), Symbol.hasInstance)](value) { - return Boolean(value && isFunction2(value.constructor) && value[Symbol.toStringTag] === "FormData" && isFunction2(value.append) && isFunction2(value.set) && isFunction2(value.get) && isFunction2(value.getAll) && isFunction2(value.has) && isFunction2(value.delete) && isFunction2(value.entries) && isFunction2(value.values) && isFunction2(value.keys) && isFunction2(value[Symbol.iterator]) && isFunction2(value.forEach)); - } - append(name, value, fileName) { - __classPrivateFieldGet3(this, _FormData_instances, "m", _FormData_setEntry).call(this, { - name, - fileName, - append: true, - rawValue: value, - argsLength: arguments.length - }); - } - set(name, value, fileName) { - __classPrivateFieldGet3(this, _FormData_instances, "m", _FormData_setEntry).call(this, { - name, - fileName, - append: false, - rawValue: value, - argsLength: arguments.length - }); - } - get(name) { - const field = __classPrivateFieldGet3(this, _FormData_entries, "f").get(String(name)); - if (!field) { - return null; - } - return field[0]; - } - getAll(name) { - const field = __classPrivateFieldGet3(this, _FormData_entries, "f").get(String(name)); - if (!field) { - return []; - } - return field.slice(); - } - has(name) { - return __classPrivateFieldGet3(this, _FormData_entries, "f").has(String(name)); - } - delete(name) { - __classPrivateFieldGet3(this, _FormData_entries, "f").delete(String(name)); - } - *keys() { - for (const key of __classPrivateFieldGet3(this, _FormData_entries, "f").keys()) { - yield key; - } - } - *entries() { - for (const name of this.keys()) { - const values = this.getAll(name); - for (const value of values) { - yield [name, value]; - } - } - } - *values() { - for (const [, value] of this) { - yield value; - } - } - [(_FormData_setEntry = function _FormData_setEntry2({ name, rawValue: rawValue2, append, fileName, argsLength }) { - const methodName = append ? "append" : "set"; - if (argsLength < 2) { - throw new TypeError(`Failed to execute '${methodName}' on 'FormData': 2 arguments required, but only ${argsLength} present.`); - } - name = String(name); - let value; - if (isFile(rawValue2)) { - value = fileName === void 0 ? rawValue2 : new File2([rawValue2], fileName, { - type: rawValue2.type, - lastModified: rawValue2.lastModified - }); - } else if (isBlob(rawValue2)) { - value = new File2([rawValue2], fileName === void 0 ? "blob" : fileName, { - type: rawValue2.type - }); - } else if (fileName) { - throw new TypeError(`Failed to execute '${methodName}' on 'FormData': parameter 2 is not of type 'Blob'.`); - } else { - value = String(rawValue2); - } - const values = __classPrivateFieldGet3(this, _FormData_entries, "f").get(name); - if (!values) { - return void __classPrivateFieldGet3(this, _FormData_entries, "f").set(name, [value]); - } - if (!append) { - return void __classPrivateFieldGet3(this, _FormData_entries, "f").set(name, [value]); - } - values.push(value); - }, Symbol.iterator)]() { - return this.entries(); - } - forEach(callback, thisArg) { - for (const [name, value] of this) { - callback.call(thisArg, value, name, this); - } - } - get [Symbol.toStringTag]() { - return "FormData"; - } - [import_util2.inspect.custom]() { - return this[Symbol.toStringTag]; - } -}; - -// node_modules/formdata-node/lib/esm/index.js -init_Blob(); -init_File(); - -// node_modules/openai/_shims/node-runtime.mjs -var import_agentkeepalive = __toESM(require_agentkeepalive(), 1); -var import_abort_controller = __toESM(require_abort_controller(), 1); -var import_node_fs2 = require("fs"); - -// node_modules/form-data-encoder/lib/esm/util/createBoundary.js -var alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"; -function createBoundary() { - let size = 16; - let res = ""; - while (size--) { - res += alphabet[Math.random() * alphabet.length << 0]; - } - return res; -} -var createBoundary_default = createBoundary; - -// node_modules/form-data-encoder/lib/esm/util/isPlainObject.js -var getType = (value) => Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); -function isPlainObject(value) { - if (getType(value) !== "object") { - return false; - } - const pp = Object.getPrototypeOf(value); - if (pp === null || pp === void 0) { - return true; - } - const Ctor = pp.constructor && pp.constructor.toString(); - return Ctor === Object.toString(); -} -var isPlainObject_default = isPlainObject; - -// node_modules/form-data-encoder/lib/esm/util/normalizeValue.js -var normalizeValue = (value) => String(value).replace(/\r|\n/g, (match2, i4, str2) => { - if (match2 === "\r" && str2[i4 + 1] !== "\n" || match2 === "\n" && str2[i4 - 1] !== "\r") { - return "\r\n"; - } - return match2; -}); -var normalizeValue_default = normalizeValue; - -// node_modules/form-data-encoder/lib/esm/util/escapeName.js -var escapeName = (name) => String(name).replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/"/g, "%22"); -var escapeName_default = escapeName; - -// node_modules/form-data-encoder/lib/esm/util/isFunction.js -var isFunction3 = (value) => typeof value === "function"; -var isFunction_default = isFunction3; - -// node_modules/form-data-encoder/lib/esm/util/isFileLike.js -var isFileLike = (value) => Boolean(value && typeof value === "object" && isFunction_default(value.constructor) && value[Symbol.toStringTag] === "File" && isFunction_default(value.stream) && value.name != null && value.size != null && value.lastModified != null); - -// node_modules/form-data-encoder/lib/esm/util/isFormData.js -var isFormData = (value) => Boolean(value && isFunction_default(value.constructor) && value[Symbol.toStringTag] === "FormData" && isFunction_default(value.append) && isFunction_default(value.getAll) && isFunction_default(value.entries) && isFunction_default(value[Symbol.iterator])); - -// node_modules/form-data-encoder/lib/esm/FormDataEncoder.js -var __classPrivateFieldSet3 = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; -}; -var __classPrivateFieldGet4 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); -}; -var _FormDataEncoder_instances; -var _FormDataEncoder_CRLF; -var _FormDataEncoder_CRLF_BYTES; -var _FormDataEncoder_CRLF_BYTES_LENGTH; -var _FormDataEncoder_DASHES; -var _FormDataEncoder_encoder; -var _FormDataEncoder_footer; -var _FormDataEncoder_form; -var _FormDataEncoder_options; -var _FormDataEncoder_getFieldHeader; -var defaultOptions = { - enableAdditionalHeaders: false -}; -var FormDataEncoder = class { - constructor(form, boundaryOrOptions, options) { - _FormDataEncoder_instances.add(this); - _FormDataEncoder_CRLF.set(this, "\r\n"); - _FormDataEncoder_CRLF_BYTES.set(this, void 0); - _FormDataEncoder_CRLF_BYTES_LENGTH.set(this, void 0); - _FormDataEncoder_DASHES.set(this, "-".repeat(2)); - _FormDataEncoder_encoder.set(this, new TextEncoder()); - _FormDataEncoder_footer.set(this, void 0); - _FormDataEncoder_form.set(this, void 0); - _FormDataEncoder_options.set(this, void 0); - if (!isFormData(form)) { - throw new TypeError("Expected first argument to be a FormData instance."); - } - let boundary; - if (isPlainObject_default(boundaryOrOptions)) { - options = boundaryOrOptions; - } else { - boundary = boundaryOrOptions; - } - if (!boundary) { - boundary = createBoundary_default(); - } - if (typeof boundary !== "string") { - throw new TypeError("Expected boundary argument to be a string."); - } - if (options && !isPlainObject_default(options)) { - throw new TypeError("Expected options argument to be an object."); - } - __classPrivateFieldSet3(this, _FormDataEncoder_form, form, "f"); - __classPrivateFieldSet3(this, _FormDataEncoder_options, { ...defaultOptions, ...options }, "f"); - __classPrivateFieldSet3(this, _FormDataEncoder_CRLF_BYTES, __classPrivateFieldGet4(this, _FormDataEncoder_encoder, "f").encode(__classPrivateFieldGet4(this, _FormDataEncoder_CRLF, "f")), "f"); - __classPrivateFieldSet3(this, _FormDataEncoder_CRLF_BYTES_LENGTH, __classPrivateFieldGet4(this, _FormDataEncoder_CRLF_BYTES, "f").byteLength, "f"); - this.boundary = `form-data-boundary-${boundary}`; - this.contentType = `multipart/form-data; boundary=${this.boundary}`; - __classPrivateFieldSet3(this, _FormDataEncoder_footer, __classPrivateFieldGet4(this, _FormDataEncoder_encoder, "f").encode(`${__classPrivateFieldGet4(this, _FormDataEncoder_DASHES, "f")}${this.boundary}${__classPrivateFieldGet4(this, _FormDataEncoder_DASHES, "f")}${__classPrivateFieldGet4(this, _FormDataEncoder_CRLF, "f").repeat(2)}`), "f"); - this.contentLength = String(this.getContentLength()); - this.headers = Object.freeze({ - "Content-Type": this.contentType, - "Content-Length": this.contentLength - }); - Object.defineProperties(this, { - boundary: { writable: false, configurable: false }, - contentType: { writable: false, configurable: false }, - contentLength: { writable: false, configurable: false }, - headers: { writable: false, configurable: false } - }); - } - getContentLength() { - let length2 = 0; - for (const [name, raw] of __classPrivateFieldGet4(this, _FormDataEncoder_form, "f")) { - const value = isFileLike(raw) ? raw : __classPrivateFieldGet4(this, _FormDataEncoder_encoder, "f").encode(normalizeValue_default(raw)); - length2 += __classPrivateFieldGet4(this, _FormDataEncoder_instances, "m", _FormDataEncoder_getFieldHeader).call(this, name, value).byteLength; - length2 += isFileLike(value) ? value.size : value.byteLength; - length2 += __classPrivateFieldGet4(this, _FormDataEncoder_CRLF_BYTES_LENGTH, "f"); - } - return length2 + __classPrivateFieldGet4(this, _FormDataEncoder_footer, "f").byteLength; - } - *values() { - for (const [name, raw] of __classPrivateFieldGet4(this, _FormDataEncoder_form, "f").entries()) { - const value = isFileLike(raw) ? raw : __classPrivateFieldGet4(this, _FormDataEncoder_encoder, "f").encode(normalizeValue_default(raw)); - yield __classPrivateFieldGet4(this, _FormDataEncoder_instances, "m", _FormDataEncoder_getFieldHeader).call(this, name, value); - yield value; - yield __classPrivateFieldGet4(this, _FormDataEncoder_CRLF_BYTES, "f"); - } - yield __classPrivateFieldGet4(this, _FormDataEncoder_footer, "f"); - } - async *encode() { - for (const part of this.values()) { - if (isFileLike(part)) { - yield* part.stream(); - } else { - yield part; - } - } - } - [(_FormDataEncoder_CRLF = /* @__PURE__ */ new WeakMap(), _FormDataEncoder_CRLF_BYTES = /* @__PURE__ */ new WeakMap(), _FormDataEncoder_CRLF_BYTES_LENGTH = /* @__PURE__ */ new WeakMap(), _FormDataEncoder_DASHES = /* @__PURE__ */ new WeakMap(), _FormDataEncoder_encoder = /* @__PURE__ */ new WeakMap(), _FormDataEncoder_footer = /* @__PURE__ */ new WeakMap(), _FormDataEncoder_form = /* @__PURE__ */ new WeakMap(), _FormDataEncoder_options = /* @__PURE__ */ new WeakMap(), _FormDataEncoder_instances = /* @__PURE__ */ new WeakSet(), _FormDataEncoder_getFieldHeader = function _FormDataEncoder_getFieldHeader2(name, value) { - let header = ""; - header += `${__classPrivateFieldGet4(this, _FormDataEncoder_DASHES, "f")}${this.boundary}${__classPrivateFieldGet4(this, _FormDataEncoder_CRLF, "f")}`; - header += `Content-Disposition: form-data; name="${escapeName_default(name)}"`; - if (isFileLike(value)) { - header += `; filename="${escapeName_default(value.name)}"${__classPrivateFieldGet4(this, _FormDataEncoder_CRLF, "f")}`; - header += `Content-Type: ${value.type || "application/octet-stream"}`; - } - if (__classPrivateFieldGet4(this, _FormDataEncoder_options, "f").enableAdditionalHeaders === true) { - header += `${__classPrivateFieldGet4(this, _FormDataEncoder_CRLF, "f")}Content-Length: ${isFileLike(value) ? value.size : value.byteLength}`; - } - return __classPrivateFieldGet4(this, _FormDataEncoder_encoder, "f").encode(`${header}${__classPrivateFieldGet4(this, _FormDataEncoder_CRLF, "f").repeat(2)}`); - }, Symbol.iterator)]() { - return this.values(); - } - [Symbol.asyncIterator]() { - return this.encode(); - } -}; - -// node_modules/openai/_shims/node-runtime.mjs -var import_node_stream = require("stream"); - -// node_modules/openai/_shims/MultipartBody.mjs -var MultipartBody = class { - constructor(body) { - this.body = body; - } - get [Symbol.toStringTag]() { - return "MultipartBody"; - } -}; - -// node_modules/openai/_shims/node-runtime.mjs -var import_web = require("stream/web"); -var fileFromPathWarned = false; -async function fileFromPath3(path, ...args) { - const { fileFromPath: _fileFromPath } = await Promise.resolve().then(() => (init_fileFromPath(), fileFromPath_exports)); - if (!fileFromPathWarned) { - console.warn(`fileFromPath is deprecated; use fs.createReadStream(${JSON.stringify(path)}) instead`); - fileFromPathWarned = true; - } - return await _fileFromPath(path, ...args); -} -var defaultHttpAgent = new import_agentkeepalive.default({ keepAlive: true, timeout: 5 * 60 * 1e3 }); -var defaultHttpsAgent = new import_agentkeepalive.default.HttpsAgent({ keepAlive: true, timeout: 5 * 60 * 1e3 }); -async function getMultipartRequestOptions2(form, opts2) { - const encoder = new FormDataEncoder(form); - const readable = import_node_stream.Readable.from(encoder); - const body = new MultipartBody(readable); - const headers = { - ...opts2.headers, - ...encoder.headers, - "Content-Length": encoder.contentLength - }; - return { ...opts2, body, headers }; -} -function getRuntime() { - if (typeof AbortController === "undefined") { - globalThis.AbortController = import_abort_controller.AbortController; - } - return { - kind: "node", - fetch: nf.default, - Request: nf.Request, - Response: nf.Response, - Headers: nf.Headers, - FormData: FormData3, - Blob: Blob3, - File: File2, - ReadableStream: import_web.ReadableStream, - getMultipartRequestOptions: getMultipartRequestOptions2, - getDefaultAgent: (url) => url.startsWith("https") ? defaultHttpsAgent : defaultHttpAgent, - fileFromPath: fileFromPath3, - isFsReadStream: (value) => value instanceof import_node_fs2.ReadStream - }; -} - -// node_modules/openai/_shims/index.mjs -if (!kind) - setShims(getRuntime(), { auto: true }); - -// node_modules/openai/error.mjs -var OpenAIError = class extends Error { -}; -var APIError = class extends OpenAIError { - constructor(status, error, message, headers) { - super(`${APIError.makeMessage(status, error, message)}`); - this.status = status; - this.headers = headers; - this.request_id = headers == null ? void 0 : headers["x-request-id"]; - this.error = error; - const data = error; - this.code = data == null ? void 0 : data["code"]; - this.param = data == null ? void 0 : data["param"]; - this.type = data == null ? void 0 : data["type"]; - } - static makeMessage(status, error, message) { - const msg = (error == null ? void 0 : error.message) ? typeof error.message === "string" ? error.message : JSON.stringify(error.message) : error ? JSON.stringify(error) : message; - if (status && msg) { - return `${status} ${msg}`; - } - if (status) { - return `${status} status code (no body)`; - } - if (msg) { - return msg; - } - return "(no status code or body)"; - } - static generate(status, errorResponse, message, headers) { - if (!status || !headers) { - return new APIConnectionError({ message, cause: castToError(errorResponse) }); - } - const error = errorResponse == null ? void 0 : errorResponse["error"]; - if (status === 400) { - return new BadRequestError(status, error, message, headers); - } - if (status === 401) { - return new AuthenticationError(status, error, message, headers); - } - if (status === 403) { - return new PermissionDeniedError(status, error, message, headers); - } - if (status === 404) { - return new NotFoundError(status, error, message, headers); - } - if (status === 409) { - return new ConflictError(status, error, message, headers); - } - if (status === 422) { - return new UnprocessableEntityError(status, error, message, headers); - } - if (status === 429) { - return new RateLimitError(status, error, message, headers); - } - if (status >= 500) { - return new InternalServerError(status, error, message, headers); - } - return new APIError(status, error, message, headers); - } -}; -var APIUserAbortError = class extends APIError { - constructor({ message } = {}) { - super(void 0, void 0, message || "Request was aborted.", void 0); - } -}; -var APIConnectionError = class extends APIError { - constructor({ message, cause }) { - super(void 0, void 0, message || "Connection error.", void 0); - if (cause) - this.cause = cause; - } -}; -var APIConnectionTimeoutError = class extends APIConnectionError { - constructor({ message } = {}) { - super({ message: message != null ? message : "Request timed out." }); - } -}; -var BadRequestError = class extends APIError { -}; -var AuthenticationError = class extends APIError { -}; -var PermissionDeniedError = class extends APIError { -}; -var NotFoundError = class extends APIError { -}; -var ConflictError = class extends APIError { -}; -var UnprocessableEntityError = class extends APIError { -}; -var RateLimitError = class extends APIError { -}; -var InternalServerError = class extends APIError { -}; -var LengthFinishReasonError = class extends OpenAIError { - constructor() { - super(`Could not parse response content as the length limit was reached`); - } -}; -var ContentFilterFinishReasonError = class extends OpenAIError { - constructor() { - super(`Could not parse response content as the request was rejected by the content filter`); - } -}; - -// node_modules/openai/internal/decoders/line.mjs -var __classPrivateFieldSet5 = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; -}; -var __classPrivateFieldGet6 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); -}; -var _LineDecoder_carriageReturnIndex; -var LineDecoder = class { - constructor() { - _LineDecoder_carriageReturnIndex.set(this, void 0); - this.buffer = new Uint8Array(); - __classPrivateFieldSet5(this, _LineDecoder_carriageReturnIndex, null, "f"); - } - decode(chunk) { - if (chunk == null) { - return []; - } - const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) : typeof chunk === "string" ? new TextEncoder().encode(chunk) : chunk; - let newData = new Uint8Array(this.buffer.length + binaryChunk.length); - newData.set(this.buffer); - newData.set(binaryChunk, this.buffer.length); - this.buffer = newData; - const lines = []; - let patternIndex; - while ((patternIndex = findNewlineIndex(this.buffer, __classPrivateFieldGet6(this, _LineDecoder_carriageReturnIndex, "f"))) != null) { - if (patternIndex.carriage && __classPrivateFieldGet6(this, _LineDecoder_carriageReturnIndex, "f") == null) { - __classPrivateFieldSet5(this, _LineDecoder_carriageReturnIndex, patternIndex.index, "f"); - continue; - } - if (__classPrivateFieldGet6(this, _LineDecoder_carriageReturnIndex, "f") != null && (patternIndex.index !== __classPrivateFieldGet6(this, _LineDecoder_carriageReturnIndex, "f") + 1 || patternIndex.carriage)) { - lines.push(this.decodeText(this.buffer.slice(0, __classPrivateFieldGet6(this, _LineDecoder_carriageReturnIndex, "f") - 1))); - this.buffer = this.buffer.slice(__classPrivateFieldGet6(this, _LineDecoder_carriageReturnIndex, "f")); - __classPrivateFieldSet5(this, _LineDecoder_carriageReturnIndex, null, "f"); - continue; - } - const endIndex = __classPrivateFieldGet6(this, _LineDecoder_carriageReturnIndex, "f") !== null ? patternIndex.preceding - 1 : patternIndex.preceding; - const line = this.decodeText(this.buffer.slice(0, endIndex)); - lines.push(line); - this.buffer = this.buffer.slice(patternIndex.index); - __classPrivateFieldSet5(this, _LineDecoder_carriageReturnIndex, null, "f"); - } - return lines; - } - decodeText(bytes) { - var _a2; - if (bytes == null) - return ""; - if (typeof bytes === "string") - return bytes; - if (typeof Buffer !== "undefined") { - if (bytes instanceof Buffer) { - return bytes.toString(); - } - if (bytes instanceof Uint8Array) { - return Buffer.from(bytes).toString(); - } - throw new OpenAIError(`Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`); - } - if (typeof TextDecoder !== "undefined") { - if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) { - (_a2 = this.textDecoder) != null ? _a2 : this.textDecoder = new TextDecoder("utf8"); - return this.textDecoder.decode(bytes); - } - throw new OpenAIError(`Unexpected: received non-Uint8Array/ArrayBuffer (${bytes.constructor.name}) in a web platform. Please report this error.`); - } - throw new OpenAIError(`Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.`); - } - flush() { - if (!this.buffer.length) { - return []; - } - return this.decode("\n"); - } -}; -_LineDecoder_carriageReturnIndex = /* @__PURE__ */ new WeakMap(); -LineDecoder.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]); -LineDecoder.NEWLINE_REGEXP = /\r\n|[\n\r]/g; -function findNewlineIndex(buffer, startIndex) { - const newline = 10; - const carriage = 13; - for (let i4 = startIndex != null ? startIndex : 0; i4 < buffer.length; i4++) { - if (buffer[i4] === newline) { - return { preceding: i4, index: i4 + 1, carriage: false }; - } - if (buffer[i4] === carriage) { - return { preceding: i4, index: i4 + 1, carriage: true }; - } - } - return null; -} -function findDoubleNewlineIndex(buffer) { - const newline = 10; - const carriage = 13; - for (let i4 = 0; i4 < buffer.length - 1; i4++) { - if (buffer[i4] === newline && buffer[i4 + 1] === newline) { - return i4 + 2; - } - if (buffer[i4] === carriage && buffer[i4 + 1] === carriage) { - return i4 + 2; - } - if (buffer[i4] === carriage && buffer[i4 + 1] === newline && i4 + 3 < buffer.length && buffer[i4 + 2] === carriage && buffer[i4 + 3] === newline) { - return i4 + 4; - } - } - return -1; -} - -// node_modules/openai/internal/stream-utils.mjs -function ReadableStreamToAsyncIterable(stream) { - if (stream[Symbol.asyncIterator]) - return stream; - const reader = stream.getReader(); - return { - async next() { - try { - const result = await reader.read(); - if (result == null ? void 0 : result.done) - reader.releaseLock(); - return result; - } catch (e3) { - reader.releaseLock(); - throw e3; - } - }, - async return() { - const cancelPromise = reader.cancel(); - reader.releaseLock(); - await cancelPromise; - return { done: true, value: void 0 }; - }, - [Symbol.asyncIterator]() { - return this; - } - }; -} - -// node_modules/openai/streaming.mjs -var Stream = class { - constructor(iterator, controller) { - this.iterator = iterator; - this.controller = controller; - } - static fromSSEResponse(response, controller) { - let consumed = false; - async function* iterator() { - if (consumed) { - throw new Error("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); - } - consumed = true; - let done = false; - try { - for await (const sse of _iterSSEMessages(response, controller)) { - if (done) - continue; - if (sse.data.startsWith("[DONE]")) { - done = true; - continue; - } - if (sse.event === null || sse.event.startsWith("response.")) { - let data; - try { - data = JSON.parse(sse.data); - } catch (e3) { - console.error(`Could not parse message into JSON:`, sse.data); - console.error(`From chunk:`, sse.raw); - throw e3; - } - if (data && data.error) { - throw new APIError(void 0, data.error, void 0, void 0); - } - yield data; - } else { - let data; - try { - data = JSON.parse(sse.data); - } catch (e3) { - console.error(`Could not parse message into JSON:`, sse.data); - console.error(`From chunk:`, sse.raw); - throw e3; - } - if (sse.event == "error") { - throw new APIError(void 0, data.error, data.message, void 0); - } - yield { event: sse.event, data }; - } - } - done = true; - } catch (e3) { - if (e3 instanceof Error && e3.name === "AbortError") - return; - throw e3; - } finally { - if (!done) - controller.abort(); - } - } - return new Stream(iterator, controller); - } - /** - * Generates a Stream from a newline-separated ReadableStream - * where each item is a JSON value. - */ - static fromReadableStream(readableStream, controller) { - let consumed = false; - async function* iterLines() { - const lineDecoder = new LineDecoder(); - const iter = ReadableStreamToAsyncIterable(readableStream); - for await (const chunk of iter) { - for (const line of lineDecoder.decode(chunk)) { - yield line; - } - } - for (const line of lineDecoder.flush()) { - yield line; - } - } - async function* iterator() { - if (consumed) { - throw new Error("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); - } - consumed = true; - let done = false; - try { - for await (const line of iterLines()) { - if (done) - continue; - if (line) - yield JSON.parse(line); - } - done = true; - } catch (e3) { - if (e3 instanceof Error && e3.name === "AbortError") - return; - throw e3; - } finally { - if (!done) - controller.abort(); - } - } - return new Stream(iterator, controller); - } - [Symbol.asyncIterator]() { - return this.iterator(); - } - /** - * Splits the stream into two streams which can be - * independently read from at different speeds. - */ - tee() { - const left = []; - const right = []; - const iterator = this.iterator(); - const teeIterator = (queue) => { - return { - next: () => { - if (queue.length === 0) { - const result = iterator.next(); - left.push(result); - right.push(result); - } - return queue.shift(); - } - }; - }; - return [ - new Stream(() => teeIterator(left), this.controller), - new Stream(() => teeIterator(right), this.controller) - ]; - } - /** - * Converts this stream to a newline-separated ReadableStream of - * JSON stringified values in the stream - * which can be turned back into a Stream with `Stream.fromReadableStream()`. - */ - toReadableStream() { - const self2 = this; - let iter; - const encoder = new TextEncoder(); - return new ReadableStream({ - async start() { - iter = self2[Symbol.asyncIterator](); - }, - async pull(ctrl) { - try { - const { value, done } = await iter.next(); - if (done) - return ctrl.close(); - const bytes = encoder.encode(JSON.stringify(value) + "\n"); - ctrl.enqueue(bytes); - } catch (err) { - ctrl.error(err); - } - }, - async cancel() { - var _a2; - await ((_a2 = iter.return) == null ? void 0 : _a2.call(iter)); - } - }); - } -}; -async function* _iterSSEMessages(response, controller) { - if (!response.body) { - controller.abort(); - throw new OpenAIError(`Attempted to iterate over a response with no body`); - } - const sseDecoder = new SSEDecoder(); - const lineDecoder = new LineDecoder(); - const iter = ReadableStreamToAsyncIterable(response.body); - for await (const sseChunk of iterSSEChunks(iter)) { - for (const line of lineDecoder.decode(sseChunk)) { - const sse = sseDecoder.decode(line); - if (sse) - yield sse; - } - } - for (const line of lineDecoder.flush()) { - const sse = sseDecoder.decode(line); - if (sse) - yield sse; - } -} -async function* iterSSEChunks(iterator) { - let data = new Uint8Array(); - for await (const chunk of iterator) { - if (chunk == null) { - continue; - } - const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) : typeof chunk === "string" ? new TextEncoder().encode(chunk) : chunk; - let newData = new Uint8Array(data.length + binaryChunk.length); - newData.set(data); - newData.set(binaryChunk, data.length); - data = newData; - let patternIndex; - while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) { - yield data.slice(0, patternIndex); - data = data.slice(patternIndex); - } - } - if (data.length > 0) { - yield data; - } -} -var SSEDecoder = class { - constructor() { - this.event = null; - this.data = []; - this.chunks = []; - } - decode(line) { - if (line.endsWith("\r")) { - line = line.substring(0, line.length - 1); - } - if (!line) { - if (!this.event && !this.data.length) - return null; - const sse = { - event: this.event, - data: this.data.join("\n"), - raw: this.chunks - }; - this.event = null; - this.data = []; - this.chunks = []; - return sse; - } - this.chunks.push(line); - if (line.startsWith(":")) { - return null; - } - let [fieldname, _3, value] = partition(line, ":"); - if (value.startsWith(" ")) { - value = value.substring(1); - } - if (fieldname === "event") { - this.event = value; - } else if (fieldname === "data") { - this.data.push(value); - } - return null; - } -}; -function partition(str2, delimiter) { - const index4 = str2.indexOf(delimiter); - if (index4 !== -1) { - return [str2.substring(0, index4), delimiter, str2.substring(index4 + delimiter.length)]; - } - return [str2, "", ""]; -} - -// node_modules/openai/uploads.mjs -var isResponseLike = (value) => value != null && typeof value === "object" && typeof value.url === "string" && typeof value.blob === "function"; -var isFileLike2 = (value) => value != null && typeof value === "object" && typeof value.name === "string" && typeof value.lastModified === "number" && isBlobLike(value); -var isBlobLike = (value) => value != null && typeof value === "object" && typeof value.size === "number" && typeof value.type === "string" && typeof value.text === "function" && typeof value.slice === "function" && typeof value.arrayBuffer === "function"; -var isUploadable = (value) => { - return isFileLike2(value) || isResponseLike(value) || isFsReadStream(value); -}; -async function toFile(value, name, options) { - var _a2, _b, _c; - value = await value; - if (isFileLike2(value)) { - return value; - } - if (isResponseLike(value)) { - const blob = await value.blob(); - name || (name = (_a2 = new URL(value.url).pathname.split(/[\\/]/).pop()) != null ? _a2 : "unknown_file"); - const data = isBlobLike(blob) ? [await blob.arrayBuffer()] : [blob]; - return new File(data, name, options); - } - const bits = await getBytes(value); - name || (name = (_b = getName(value)) != null ? _b : "unknown_file"); - if (!(options == null ? void 0 : options.type)) { - const type = (_c = bits[0]) == null ? void 0 : _c.type; - if (typeof type === "string") { - options = { ...options, type }; - } - } - return new File(bits, name, options); -} -async function getBytes(value) { - var _a2; - let parts = []; - if (typeof value === "string" || ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc. - value instanceof ArrayBuffer) { - parts.push(value); - } else if (isBlobLike(value)) { - parts.push(await value.arrayBuffer()); - } else if (isAsyncIterableIterator(value)) { - for await (const chunk of value) { - parts.push(chunk); - } - } else { - throw new Error(`Unexpected data type: ${typeof value}; constructor: ${(_a2 = value == null ? void 0 : value.constructor) == null ? void 0 : _a2.name}; props: ${propsForError(value)}`); - } - return parts; -} -function propsForError(value) { - const props = Object.getOwnPropertyNames(value); - return `[${props.map((p3) => `"${p3}"`).join(", ")}]`; -} -function getName(value) { - var _a2; - return getStringFromMaybeBuffer(value.name) || getStringFromMaybeBuffer(value.filename) || // For fs.ReadStream - ((_a2 = getStringFromMaybeBuffer(value.path)) == null ? void 0 : _a2.split(/[\\/]/).pop()); -} -var getStringFromMaybeBuffer = (x2) => { - if (typeof x2 === "string") - return x2; - if (typeof Buffer !== "undefined" && x2 instanceof Buffer) - return String(x2); - return void 0; -}; -var isAsyncIterableIterator = (value) => value != null && typeof value === "object" && typeof value[Symbol.asyncIterator] === "function"; -var isMultipartBody = (body) => body && typeof body === "object" && body.body && body[Symbol.toStringTag] === "MultipartBody"; -var multipartFormRequestOptions = async (opts2) => { - const form = await createForm(opts2.body); - return getMultipartRequestOptions(form, opts2); -}; -var createForm = async (body) => { - const form = new FormData2(); - await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value))); - return form; -}; -var addFormValue = async (form, key, value) => { - if (value === void 0) - return; - if (value == null) { - throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`); - } - if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { - form.append(key, String(value)); - } else if (isUploadable(value)) { - const file = await toFile(value); - form.append(key, file); - } else if (Array.isArray(value)) { - await Promise.all(value.map((entry) => addFormValue(form, key + "[]", entry))); - } else if (typeof value === "object") { - await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop))); - } else { - throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`); - } -}; - -// node_modules/openai/core.mjs -var __classPrivateFieldSet6 = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; -}; -var __classPrivateFieldGet7 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); -}; -var _AbstractPage_client; -async function defaultParseResponse(props) { - var _a2; - const { response } = props; - if (props.options.stream) { - debug4("response", response.status, response.url, response.headers, response.body); - if (props.options.__streamClass) { - return props.options.__streamClass.fromSSEResponse(response, props.controller); - } - return Stream.fromSSEResponse(response, props.controller); - } - if (response.status === 204) { - return null; - } - if (props.options.__binaryResponse) { - return response; - } - const contentType = response.headers.get("content-type"); - const mediaType = (_a2 = contentType == null ? void 0 : contentType.split(";")[0]) == null ? void 0 : _a2.trim(); - const isJSON = (mediaType == null ? void 0 : mediaType.includes("application/json")) || (mediaType == null ? void 0 : mediaType.endsWith("+json")); - if (isJSON) { - const json = await response.json(); - debug4("response", response.status, response.url, response.headers, json); - return _addRequestID(json, response); - } - const text = await response.text(); - debug4("response", response.status, response.url, response.headers, text); - return text; -} -function _addRequestID(value, response) { - if (!value || typeof value !== "object" || Array.isArray(value)) { - return value; - } - return Object.defineProperty(value, "_request_id", { - value: response.headers.get("x-request-id"), - enumerable: false - }); -} -var APIPromise = class extends Promise { - constructor(responsePromise, parseResponse2 = defaultParseResponse) { - super((resolve2) => { - resolve2(null); - }); - this.responsePromise = responsePromise; - this.parseResponse = parseResponse2; - } - _thenUnwrap(transform) { - return new APIPromise(this.responsePromise, async (props) => _addRequestID(transform(await this.parseResponse(props), props), props.response)); - } - /** - * Gets the raw `Response` instance instead of parsing the response - * data. - * - * If you want to parse the response body but still get the `Response` - * instance, you can use {@link withResponse()}. - * - * 👋 Getting the wrong TypeScript type for `Response`? - * Try setting `"moduleResolution": "NodeNext"` if you can, - * or add one of these imports before your first `import … from 'openai'`: - * - `import 'openai/shims/node'` (if you're running on Node) - * - `import 'openai/shims/web'` (otherwise) - */ - asResponse() { - return this.responsePromise.then((p3) => p3.response); - } - /** - * Gets the parsed response data, the raw `Response` instance and the ID of the request, - * returned via the X-Request-ID header which is useful for debugging requests and reporting - * issues to OpenAI. - * - * If you just want to get the raw `Response` instance without parsing it, - * you can use {@link asResponse()}. - * - * - * 👋 Getting the wrong TypeScript type for `Response`? - * Try setting `"moduleResolution": "NodeNext"` if you can, - * or add one of these imports before your first `import … from 'openai'`: - * - `import 'openai/shims/node'` (if you're running on Node) - * - `import 'openai/shims/web'` (otherwise) - */ - async withResponse() { - const [data, response] = await Promise.all([this.parse(), this.asResponse()]); - return { data, response, request_id: response.headers.get("x-request-id") }; - } - parse() { - if (!this.parsedPromise) { - this.parsedPromise = this.responsePromise.then(this.parseResponse); - } - return this.parsedPromise; - } - then(onfulfilled, onrejected) { - return this.parse().then(onfulfilled, onrejected); - } - catch(onrejected) { - return this.parse().catch(onrejected); - } - finally(onfinally) { - return this.parse().finally(onfinally); - } -}; -var APIClient = class { - constructor({ - baseURL, - maxRetries = 2, - timeout = 6e5, - // 10 minutes - httpAgent, - fetch: overriddenFetch - }) { - this.baseURL = baseURL; - this.maxRetries = validatePositiveInteger("maxRetries", maxRetries); - this.timeout = validatePositiveInteger("timeout", timeout); - this.httpAgent = httpAgent; - this.fetch = overriddenFetch != null ? overriddenFetch : fetch2; - } - authHeaders(opts2) { - return {}; - } - /** - * Override this to add your own default headers, for example: - * - * { - * ...super.defaultHeaders(), - * Authorization: 'Bearer 123', - * } - */ - defaultHeaders(opts2) { - return { - Accept: "application/json", - "Content-Type": "application/json", - "User-Agent": this.getUserAgent(), - ...getPlatformHeaders(), - ...this.authHeaders(opts2) - }; - } - /** - * Override this to add your own headers validation: - */ - validateHeaders(headers, customHeaders) { - } - defaultIdempotencyKey() { - return `stainless-node-retry-${uuid4()}`; - } - get(path, opts2) { - return this.methodRequest("get", path, opts2); - } - post(path, opts2) { - return this.methodRequest("post", path, opts2); - } - patch(path, opts2) { - return this.methodRequest("patch", path, opts2); - } - put(path, opts2) { - return this.methodRequest("put", path, opts2); - } - delete(path, opts2) { - return this.methodRequest("delete", path, opts2); - } - methodRequest(method, path, opts2) { - return this.request(Promise.resolve(opts2).then(async (opts3) => { - const body = opts3 && isBlobLike(opts3 == null ? void 0 : opts3.body) ? new DataView(await opts3.body.arrayBuffer()) : (opts3 == null ? void 0 : opts3.body) instanceof DataView ? opts3.body : (opts3 == null ? void 0 : opts3.body) instanceof ArrayBuffer ? new DataView(opts3.body) : opts3 && ArrayBuffer.isView(opts3 == null ? void 0 : opts3.body) ? new DataView(opts3.body.buffer) : opts3 == null ? void 0 : opts3.body; - return { method, path, ...opts3, body }; - })); - } - getAPIList(path, Page2, opts2) { - return this.requestAPIList(Page2, { method: "get", path, ...opts2 }); - } - calculateContentLength(body) { - if (typeof body === "string") { - if (typeof Buffer !== "undefined") { - return Buffer.byteLength(body, "utf8").toString(); - } - if (typeof TextEncoder !== "undefined") { - const encoder = new TextEncoder(); - const encoded = encoder.encode(body); - return encoded.length.toString(); - } - } else if (ArrayBuffer.isView(body)) { - return body.byteLength.toString(); - } - return null; - } - buildRequest(options, { retryCount = 0 } = {}) { - var _a2, _b, _c, _d, _e2, _f; - options = { ...options }; - const { method, path, query, headers = {} } = options; - const body = ArrayBuffer.isView(options.body) || options.__binaryRequest && typeof options.body === "string" ? options.body : isMultipartBody(options.body) ? options.body.body : options.body ? JSON.stringify(options.body, null, 2) : null; - const contentLength = this.calculateContentLength(body); - const url = this.buildURL(path, query); - if ("timeout" in options) - validatePositiveInteger("timeout", options.timeout); - options.timeout = (_a2 = options.timeout) != null ? _a2 : this.timeout; - const httpAgent = (_c = (_b = options.httpAgent) != null ? _b : this.httpAgent) != null ? _c : getDefaultAgent(url); - const minAgentTimeout = options.timeout + 1e3; - if (typeof ((_d = httpAgent == null ? void 0 : httpAgent.options) == null ? void 0 : _d.timeout) === "number" && minAgentTimeout > ((_e2 = httpAgent.options.timeout) != null ? _e2 : 0)) { - httpAgent.options.timeout = minAgentTimeout; - } - if (this.idempotencyHeader && method !== "get") { - if (!options.idempotencyKey) - options.idempotencyKey = this.defaultIdempotencyKey(); - headers[this.idempotencyHeader] = options.idempotencyKey; - } - const reqHeaders = this.buildHeaders({ options, headers, contentLength, retryCount }); - const req = { - method, - ...body && { body }, - headers: reqHeaders, - ...httpAgent && { agent: httpAgent }, - // @ts-ignore node-fetch uses a custom AbortSignal type that is - // not compatible with standard web types - signal: (_f = options.signal) != null ? _f : null - }; - return { req, url, timeout: options.timeout }; - } - buildHeaders({ options, headers, contentLength, retryCount }) { - const reqHeaders = {}; - if (contentLength) { - reqHeaders["content-length"] = contentLength; - } - const defaultHeaders = this.defaultHeaders(options); - applyHeadersMut(reqHeaders, defaultHeaders); - applyHeadersMut(reqHeaders, headers); - if (isMultipartBody(options.body) && kind !== "node") { - delete reqHeaders["content-type"]; - } - if (getHeader(defaultHeaders, "x-stainless-retry-count") === void 0 && getHeader(headers, "x-stainless-retry-count") === void 0) { - reqHeaders["x-stainless-retry-count"] = String(retryCount); - } - if (getHeader(defaultHeaders, "x-stainless-timeout") === void 0 && getHeader(headers, "x-stainless-timeout") === void 0 && options.timeout) { - reqHeaders["x-stainless-timeout"] = String(options.timeout); - } - this.validateHeaders(reqHeaders, headers); - return reqHeaders; - } - /** - * Used as a callback for mutating the given `FinalRequestOptions` object. - */ - async prepareOptions(options) { - } - /** - * Used as a callback for mutating the given `RequestInit` object. - * - * This is useful for cases where you want to add certain headers based off of - * the request properties, e.g. `method` or `url`. - */ - async prepareRequest(request, { url, options }) { - } - parseHeaders(headers) { - return !headers ? {} : Symbol.iterator in headers ? Object.fromEntries(Array.from(headers).map((header) => [...header])) : { ...headers }; - } - makeStatusError(status, error, message, headers) { - return APIError.generate(status, error, message, headers); - } - request(options, remainingRetries = null) { - return new APIPromise(this.makeRequest(options, remainingRetries)); - } - async makeRequest(optionsInput, retriesRemaining) { - var _a2, _b, _c; - const options = await optionsInput; - const maxRetries = (_a2 = options.maxRetries) != null ? _a2 : this.maxRetries; - if (retriesRemaining == null) { - retriesRemaining = maxRetries; - } - await this.prepareOptions(options); - const { req, url, timeout } = this.buildRequest(options, { retryCount: maxRetries - retriesRemaining }); - await this.prepareRequest(req, { url, options }); - debug4("request", url, options, req.headers); - if ((_b = options.signal) == null ? void 0 : _b.aborted) { - throw new APIUserAbortError(); - } - const controller = new AbortController(); - const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError); - if (response instanceof Error) { - if ((_c = options.signal) == null ? void 0 : _c.aborted) { - throw new APIUserAbortError(); - } - if (retriesRemaining) { - return this.retryRequest(options, retriesRemaining); - } - if (response.name === "AbortError") { - throw new APIConnectionTimeoutError(); - } - throw new APIConnectionError({ cause: response }); - } - const responseHeaders = createResponseHeaders(response.headers); - if (!response.ok) { - if (retriesRemaining && this.shouldRetry(response)) { - const retryMessage2 = `retrying, ${retriesRemaining} attempts remaining`; - debug4(`response (error; ${retryMessage2})`, response.status, url, responseHeaders); - return this.retryRequest(options, retriesRemaining, responseHeaders); - } - const errText = await response.text().catch((e3) => castToError(e3).message); - const errJSON = safeJSON(errText); - const errMessage = errJSON ? void 0 : errText; - const retryMessage = retriesRemaining ? `(error; no more retries left)` : `(error; not retryable)`; - debug4(`response (error; ${retryMessage})`, response.status, url, responseHeaders, errMessage); - const err = this.makeStatusError(response.status, errJSON, errMessage, responseHeaders); - throw err; - } - return { response, options, controller }; - } - requestAPIList(Page2, options) { - const request = this.makeRequest(options, null); - return new PagePromise(this, request, Page2); - } - buildURL(path, query) { - const url = isAbsoluteURL(path) ? new URL(path) : new URL(this.baseURL + (this.baseURL.endsWith("/") && path.startsWith("/") ? path.slice(1) : path)); - const defaultQuery = this.defaultQuery(); - if (!isEmptyObj(defaultQuery)) { - query = { ...defaultQuery, ...query }; - } - if (typeof query === "object" && query && !Array.isArray(query)) { - url.search = this.stringifyQuery(query); - } - return url.toString(); - } - stringifyQuery(query) { - return Object.entries(query).filter(([_3, value]) => typeof value !== "undefined").map(([key, value]) => { - if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { - return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`; - } - if (value === null) { - return `${encodeURIComponent(key)}=`; - } - throw new OpenAIError(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`); - }).join("&"); - } - async fetchWithTimeout(url, init, ms, controller) { - const { signal, ...options } = init || {}; - if (signal) - signal.addEventListener("abort", () => controller.abort()); - const timeout = setTimeout(() => controller.abort(), ms); - const fetchOptions = { - signal: controller.signal, - ...options - }; - if (fetchOptions.method) { - fetchOptions.method = fetchOptions.method.toUpperCase(); - } - return ( - // use undefined this binding; fetch errors if bound to something else in browser/cloudflare - this.fetch.call(void 0, url, fetchOptions).finally(() => { - clearTimeout(timeout); - }) - ); - } - shouldRetry(response) { - const shouldRetryHeader = response.headers.get("x-should-retry"); - if (shouldRetryHeader === "true") - return true; - if (shouldRetryHeader === "false") - return false; - if (response.status === 408) - return true; - if (response.status === 409) - return true; - if (response.status === 429) - return true; - if (response.status >= 500) - return true; - return false; - } - async retryRequest(options, retriesRemaining, responseHeaders) { - var _a2; - let timeoutMillis; - const retryAfterMillisHeader = responseHeaders == null ? void 0 : responseHeaders["retry-after-ms"]; - if (retryAfterMillisHeader) { - const timeoutMs = parseFloat(retryAfterMillisHeader); - if (!Number.isNaN(timeoutMs)) { - timeoutMillis = timeoutMs; - } - } - const retryAfterHeader = responseHeaders == null ? void 0 : responseHeaders["retry-after"]; - if (retryAfterHeader && !timeoutMillis) { - const timeoutSeconds = parseFloat(retryAfterHeader); - if (!Number.isNaN(timeoutSeconds)) { - timeoutMillis = timeoutSeconds * 1e3; - } else { - timeoutMillis = Date.parse(retryAfterHeader) - Date.now(); - } - } - if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1e3)) { - const maxRetries = (_a2 = options.maxRetries) != null ? _a2 : this.maxRetries; - timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); - } - await sleep(timeoutMillis); - return this.makeRequest(options, retriesRemaining - 1); - } - calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) { - const initialRetryDelay = 0.5; - const maxRetryDelay = 8; - const numRetries = maxRetries - retriesRemaining; - const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay); - const jitter = 1 - Math.random() * 0.25; - return sleepSeconds * jitter * 1e3; - } - getUserAgent() { - return `${this.constructor.name}/JS ${VERSION}`; - } -}; -var AbstractPage = class { - constructor(client, response, body, options) { - _AbstractPage_client.set(this, void 0); - __classPrivateFieldSet6(this, _AbstractPage_client, client, "f"); - this.options = options; - this.response = response; - this.body = body; - } - hasNextPage() { - const items = this.getPaginatedItems(); - if (!items.length) - return false; - return this.nextPageInfo() != null; - } - async getNextPage() { - const nextInfo = this.nextPageInfo(); - if (!nextInfo) { - throw new OpenAIError("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`."); - } - const nextOptions = { ...this.options }; - if ("params" in nextInfo && typeof nextOptions.query === "object") { - nextOptions.query = { ...nextOptions.query, ...nextInfo.params }; - } else if ("url" in nextInfo) { - const params = [...Object.entries(nextOptions.query || {}), ...nextInfo.url.searchParams.entries()]; - for (const [key, value] of params) { - nextInfo.url.searchParams.set(key, value); - } - nextOptions.query = void 0; - nextOptions.path = nextInfo.url.toString(); - } - return await __classPrivateFieldGet7(this, _AbstractPage_client, "f").requestAPIList(this.constructor, nextOptions); - } - async *iterPages() { - let page = this; - yield page; - while (page.hasNextPage()) { - page = await page.getNextPage(); - yield page; - } - } - async *[(_AbstractPage_client = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { - for await (const page of this.iterPages()) { - for (const item of page.getPaginatedItems()) { - yield item; - } - } - } -}; -var PagePromise = class extends APIPromise { - constructor(client, request, Page2) { - super(request, async (props) => new Page2(client, props.response, await defaultParseResponse(props), props.options)); - } - /** - * Allow auto-paginating iteration on an unawaited list call, eg: - * - * for await (const item of client.items.list()) { - * console.log(item) - * } - */ - async *[Symbol.asyncIterator]() { - const page = await this; - for await (const item of page) { - yield item; - } - } -}; -var createResponseHeaders = (headers) => { - return new Proxy(Object.fromEntries( - // @ts-ignore - headers.entries() - ), { - get(target, name) { - const key = name.toString(); - return target[key.toLowerCase()] || target[key]; - } - }); -}; -var requestOptionsKeys = { - method: true, - path: true, - query: true, - body: true, - headers: true, - maxRetries: true, - stream: true, - timeout: true, - httpAgent: true, - signal: true, - idempotencyKey: true, - __metadata: true, - __binaryRequest: true, - __binaryResponse: true, - __streamClass: true -}; -var isRequestOptions = (obj) => { - return typeof obj === "object" && obj !== null && !isEmptyObj(obj) && Object.keys(obj).every((k3) => hasOwn(requestOptionsKeys, k3)); -}; -var getPlatformProperties = () => { - var _a2, _b; - if (typeof Deno !== "undefined" && Deno.build != null) { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": normalizePlatform(Deno.build.os), - "X-Stainless-Arch": normalizeArch(Deno.build.arch), - "X-Stainless-Runtime": "deno", - "X-Stainless-Runtime-Version": typeof Deno.version === "string" ? Deno.version : (_b = (_a2 = Deno.version) == null ? void 0 : _a2.deno) != null ? _b : "unknown" - }; - } - if (typeof EdgeRuntime !== "undefined") { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": "Unknown", - "X-Stainless-Arch": `other:${EdgeRuntime}`, - "X-Stainless-Runtime": "edge", - "X-Stainless-Runtime-Version": process.version - }; - } - if (Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) === "[object process]") { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": normalizePlatform(process.platform), - "X-Stainless-Arch": normalizeArch(process.arch), - "X-Stainless-Runtime": "node", - "X-Stainless-Runtime-Version": process.version - }; - } - const browserInfo = getBrowserInfo(); - if (browserInfo) { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": "Unknown", - "X-Stainless-Arch": "unknown", - "X-Stainless-Runtime": `browser:${browserInfo.browser}`, - "X-Stainless-Runtime-Version": browserInfo.version - }; - } - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": "Unknown", - "X-Stainless-Arch": "unknown", - "X-Stainless-Runtime": "unknown", - "X-Stainless-Runtime-Version": "unknown" - }; -}; -function getBrowserInfo() { - if (typeof navigator === "undefined" || !navigator) { - return null; - } - const browserPatterns = [ - { key: "edge", pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "ie", pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "ie", pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "chrome", pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "firefox", pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "safari", pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ } - ]; - for (const { key, pattern } of browserPatterns) { - const match2 = pattern.exec(navigator.userAgent); - if (match2) { - const major = match2[1] || 0; - const minor = match2[2] || 0; - const patch = match2[3] || 0; - return { browser: key, version: `${major}.${minor}.${patch}` }; - } - } - return null; -} -var normalizeArch = (arch) => { - if (arch === "x32") - return "x32"; - if (arch === "x86_64" || arch === "x64") - return "x64"; - if (arch === "arm") - return "arm"; - if (arch === "aarch64" || arch === "arm64") - return "arm64"; - if (arch) - return `other:${arch}`; - return "unknown"; -}; -var normalizePlatform = (platform) => { - platform = platform.toLowerCase(); - if (platform.includes("ios")) - return "iOS"; - if (platform === "android") - return "Android"; - if (platform === "darwin") - return "MacOS"; - if (platform === "win32") - return "Windows"; - if (platform === "freebsd") - return "FreeBSD"; - if (platform === "openbsd") - return "OpenBSD"; - if (platform === "linux") - return "Linux"; - if (platform) - return `Other:${platform}`; - return "Unknown"; -}; -var _platformHeaders; -var getPlatformHeaders = () => { - return _platformHeaders != null ? _platformHeaders : _platformHeaders = getPlatformProperties(); -}; -var safeJSON = (text) => { - try { - return JSON.parse(text); - } catch (err) { - return void 0; - } -}; -var startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i; -var isAbsoluteURL = (url) => { - return startsWithSchemeRegexp.test(url); -}; -var sleep = (ms) => new Promise((resolve2) => setTimeout(resolve2, ms)); -var validatePositiveInteger = (name, n3) => { - if (typeof n3 !== "number" || !Number.isInteger(n3)) { - throw new OpenAIError(`${name} must be an integer`); - } - if (n3 < 0) { - throw new OpenAIError(`${name} must be a positive integer`); - } - return n3; -}; -var castToError = (err) => { - if (err instanceof Error) - return err; - if (typeof err === "object" && err !== null) { - try { - return new Error(JSON.stringify(err)); - } catch (e3) { - } - } - return new Error(err); -}; -var readEnv = (env) => { - var _a2, _b, _c, _d, _e2, _f; - if (typeof process !== "undefined") { - return (_c = (_b = (_a2 = process.env) == null ? void 0 : _a2[env]) == null ? void 0 : _b.trim()) != null ? _c : void 0; - } - if (typeof Deno !== "undefined") { - return (_f = (_e2 = (_d = Deno.env) == null ? void 0 : _d.get) == null ? void 0 : _e2.call(_d, env)) == null ? void 0 : _f.trim(); - } - return void 0; -}; -function isEmptyObj(obj) { - if (!obj) - return true; - for (const _k in obj) - return false; - return true; -} -function hasOwn(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); -} -function applyHeadersMut(targetHeaders, newHeaders) { - for (const k3 in newHeaders) { - if (!hasOwn(newHeaders, k3)) - continue; - const lowerKey = k3.toLowerCase(); - if (!lowerKey) - continue; - const val = newHeaders[k3]; - if (val === null) { - delete targetHeaders[lowerKey]; - } else if (val !== void 0) { - targetHeaders[lowerKey] = val; - } - } -} -var SENSITIVE_HEADERS = /* @__PURE__ */ new Set(["authorization", "api-key"]); -function debug4(action, ...args) { - var _a2; - if (typeof process !== "undefined" && ((_a2 = process == null ? void 0 : process.env) == null ? void 0 : _a2["DEBUG"]) === "true") { - const modifiedArgs = args.map((arg) => { - if (!arg) { - return arg; - } - if (arg["headers"]) { - const modifiedArg2 = { ...arg, headers: { ...arg["headers"] } }; - for (const header in arg["headers"]) { - if (SENSITIVE_HEADERS.has(header.toLowerCase())) { - modifiedArg2["headers"][header] = "REDACTED"; - } - } - return modifiedArg2; - } - let modifiedArg = null; - for (const header in arg) { - if (SENSITIVE_HEADERS.has(header.toLowerCase())) { - modifiedArg != null ? modifiedArg : modifiedArg = { ...arg }; - modifiedArg[header] = "REDACTED"; - } - } - return modifiedArg != null ? modifiedArg : arg; - }); - console.log(`OpenAI:DEBUG:${action}`, ...modifiedArgs); - } -} -var uuid4 = () => { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c3) => { - const r3 = Math.random() * 16 | 0; - const v2 = c3 === "x" ? r3 : r3 & 3 | 8; - return v2.toString(16); - }); -}; -var isRunningInBrowser = () => { - return ( - // @ts-ignore - typeof window !== "undefined" && // @ts-ignore - typeof window.document !== "undefined" && // @ts-ignore - typeof navigator !== "undefined" - ); -}; -var isHeadersProtocol = (headers) => { - return typeof (headers == null ? void 0 : headers.get) === "function"; -}; -var getHeader = (headers, header) => { - var _a2; - const lowerCasedHeader = header.toLowerCase(); - if (isHeadersProtocol(headers)) { - const intercapsHeader = ((_a2 = header[0]) == null ? void 0 : _a2.toUpperCase()) + header.substring(1).replace(/([^\w])(\w)/g, (_m, g1, g22) => g1 + g22.toUpperCase()); - for (const key of [header, lowerCasedHeader, header.toUpperCase(), intercapsHeader]) { - const value = headers.get(key); - if (value) { - return value; - } - } - } - for (const [key, value] of Object.entries(headers)) { - if (key.toLowerCase() === lowerCasedHeader) { - if (Array.isArray(value)) { - if (value.length <= 1) - return value[0]; - console.warn(`Received ${value.length} entries for the ${header} header, using the first entry.`); - return value[0]; - } - return value; - } - } - return void 0; -}; -function isObj(obj) { - return obj != null && typeof obj === "object" && !Array.isArray(obj); -} - -// node_modules/openai/pagination.mjs -var Page = class extends AbstractPage { - constructor(client, response, body, options) { - super(client, response, body, options); - this.data = body.data || []; - this.object = body.object; - } - getPaginatedItems() { - var _a2; - return (_a2 = this.data) != null ? _a2 : []; - } - // @deprecated Please use `nextPageInfo()` instead - /** - * This page represents a response that isn't actually paginated at the API level - * so there will never be any next page params. - */ - nextPageParams() { - return null; - } - nextPageInfo() { - return null; - } -}; -var CursorPage = class extends AbstractPage { - constructor(client, response, body, options) { - super(client, response, body, options); - this.data = body.data || []; - this.has_more = body.has_more || false; - } - getPaginatedItems() { - var _a2; - return (_a2 = this.data) != null ? _a2 : []; - } - hasNextPage() { - if (this.has_more === false) { - return false; - } - return super.hasNextPage(); - } - // @deprecated Please use `nextPageInfo()` instead - nextPageParams() { - const info = this.nextPageInfo(); - if (!info) - return null; - if ("params" in info) - return info.params; - const params = Object.fromEntries(info.url.searchParams); - if (!Object.keys(params).length) - return null; - return params; - } - nextPageInfo() { - var _a2; - const data = this.getPaginatedItems(); - if (!data.length) { - return null; - } - const id = (_a2 = data[data.length - 1]) == null ? void 0 : _a2.id; - if (!id) { - return null; - } - return { params: { after: id } }; - } -}; - -// node_modules/openai/resource.mjs -var APIResource = class { - constructor(client) { - this._client = client; - } -}; - -// node_modules/openai/resources/chat/completions/messages.mjs -var Messages = class extends APIResource { - list(completionId, query = {}, options) { - if (isRequestOptions(query)) { - return this.list(completionId, {}, query); - } - return this._client.getAPIList(`/chat/completions/${completionId}/messages`, ChatCompletionStoreMessagesPage, { query, ...options }); - } -}; - -// node_modules/openai/resources/chat/completions/completions.mjs -var Completions = class extends APIResource { - constructor() { - super(...arguments); - this.messages = new Messages(this._client); - } - create(body, options) { - var _a2; - return this._client.post("/chat/completions", { body, ...options, stream: (_a2 = body.stream) != null ? _a2 : false }); - } - /** - * Get a stored chat completion. Only Chat Completions that have been created with - * the `store` parameter set to `true` will be returned. - */ - retrieve(completionId, options) { - return this._client.get(`/chat/completions/${completionId}`, options); - } - /** - * Modify a stored chat completion. Only Chat Completions that have been created - * with the `store` parameter set to `true` can be modified. Currently, the only - * supported modification is to update the `metadata` field. - */ - update(completionId, body, options) { - return this._client.post(`/chat/completions/${completionId}`, { body, ...options }); - } - list(query = {}, options) { - if (isRequestOptions(query)) { - return this.list({}, query); - } - return this._client.getAPIList("/chat/completions", ChatCompletionsPage, { query, ...options }); - } - /** - * Delete a stored chat completion. Only Chat Completions that have been created - * with the `store` parameter set to `true` can be deleted. - */ - del(completionId, options) { - return this._client.delete(`/chat/completions/${completionId}`, options); - } -}; -var ChatCompletionsPage = class extends CursorPage { -}; -var ChatCompletionStoreMessagesPage = class extends CursorPage { -}; -Completions.ChatCompletionsPage = ChatCompletionsPage; -Completions.Messages = Messages; - -// node_modules/openai/resources/chat/chat.mjs -var Chat = class extends APIResource { - constructor() { - super(...arguments); - this.completions = new Completions(this._client); - } -}; -Chat.Completions = Completions; -Chat.ChatCompletionsPage = ChatCompletionsPage; - -// node_modules/openai/resources/audio/speech.mjs -var Speech = class extends APIResource { - /** - * Generates audio from the input text. - */ - create(body, options) { - return this._client.post("/audio/speech", { - body, - ...options, - headers: { Accept: "application/octet-stream", ...options == null ? void 0 : options.headers }, - __binaryResponse: true - }); - } -}; - -// node_modules/openai/resources/audio/transcriptions.mjs -var Transcriptions = class extends APIResource { - create(body, options) { - return this._client.post("/audio/transcriptions", multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } })); - } -}; - -// node_modules/openai/resources/audio/translations.mjs -var Translations = class extends APIResource { - create(body, options) { - return this._client.post("/audio/translations", multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } })); - } -}; - -// node_modules/openai/resources/audio/audio.mjs -var Audio = class extends APIResource { - constructor() { - super(...arguments); - this.transcriptions = new Transcriptions(this._client); - this.translations = new Translations(this._client); - this.speech = new Speech(this._client); - } -}; -Audio.Transcriptions = Transcriptions; -Audio.Translations = Translations; -Audio.Speech = Speech; - -// node_modules/openai/resources/batches.mjs -var Batches = class extends APIResource { - /** - * Creates and executes a batch from an uploaded file of requests - */ - create(body, options) { - return this._client.post("/batches", { body, ...options }); - } - /** - * Retrieves a batch. - */ - retrieve(batchId, options) { - return this._client.get(`/batches/${batchId}`, options); - } - list(query = {}, options) { - if (isRequestOptions(query)) { - return this.list({}, query); - } - return this._client.getAPIList("/batches", BatchesPage, { query, ...options }); - } - /** - * Cancels an in-progress batch. The batch will be in status `cancelling` for up to - * 10 minutes, before changing to `cancelled`, where it will have partial results - * (if any) available in the output file. - */ - cancel(batchId, options) { - return this._client.post(`/batches/${batchId}/cancel`, options); - } -}; -var BatchesPage = class extends CursorPage { -}; -Batches.BatchesPage = BatchesPage; - -// node_modules/openai/resources/beta/assistants.mjs -var Assistants = class extends APIResource { - /** - * Create an assistant with a model and instructions. - */ - create(body, options) { - return this._client.post("/assistants", { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Retrieves an assistant. - */ - retrieve(assistantId, options) { - return this._client.get(`/assistants/${assistantId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Modifies an assistant. - */ - update(assistantId, body, options) { - return this._client.post(`/assistants/${assistantId}`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - list(query = {}, options) { - if (isRequestOptions(query)) { - return this.list({}, query); - } - return this._client.getAPIList("/assistants", AssistantsPage, { - query, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Delete an assistant. - */ - del(assistantId, options) { - return this._client.delete(`/assistants/${assistantId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } -}; -var AssistantsPage = class extends CursorPage { -}; -Assistants.AssistantsPage = AssistantsPage; - -// node_modules/openai/lib/RunnableFunction.mjs -function isRunnableFunctionWithParse(fn) { - return typeof fn.parse === "function"; -} - -// node_modules/openai/lib/chatCompletionUtils.mjs -var isAssistantMessage = (message) => { - return (message == null ? void 0 : message.role) === "assistant"; -}; -var isFunctionMessage = (message) => { - return (message == null ? void 0 : message.role) === "function"; -}; -var isToolMessage = (message) => { - return (message == null ? void 0 : message.role) === "tool"; -}; - -// node_modules/openai/lib/EventStream.mjs -var __classPrivateFieldSet7 = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; -}; -var __classPrivateFieldGet8 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); -}; -var _EventStream_instances; -var _EventStream_connectedPromise; -var _EventStream_resolveConnectedPromise; -var _EventStream_rejectConnectedPromise; -var _EventStream_endPromise; -var _EventStream_resolveEndPromise; -var _EventStream_rejectEndPromise; -var _EventStream_listeners; -var _EventStream_ended; -var _EventStream_errored; -var _EventStream_aborted; -var _EventStream_catchingPromiseCreated; -var _EventStream_handleError; -var EventStream = class { - constructor() { - _EventStream_instances.add(this); - this.controller = new AbortController(); - _EventStream_connectedPromise.set(this, void 0); - _EventStream_resolveConnectedPromise.set(this, () => { - }); - _EventStream_rejectConnectedPromise.set(this, () => { - }); - _EventStream_endPromise.set(this, void 0); - _EventStream_resolveEndPromise.set(this, () => { - }); - _EventStream_rejectEndPromise.set(this, () => { - }); - _EventStream_listeners.set(this, {}); - _EventStream_ended.set(this, false); - _EventStream_errored.set(this, false); - _EventStream_aborted.set(this, false); - _EventStream_catchingPromiseCreated.set(this, false); - __classPrivateFieldSet7(this, _EventStream_connectedPromise, new Promise((resolve2, reject) => { - __classPrivateFieldSet7(this, _EventStream_resolveConnectedPromise, resolve2, "f"); - __classPrivateFieldSet7(this, _EventStream_rejectConnectedPromise, reject, "f"); - }), "f"); - __classPrivateFieldSet7(this, _EventStream_endPromise, new Promise((resolve2, reject) => { - __classPrivateFieldSet7(this, _EventStream_resolveEndPromise, resolve2, "f"); - __classPrivateFieldSet7(this, _EventStream_rejectEndPromise, reject, "f"); - }), "f"); - __classPrivateFieldGet8(this, _EventStream_connectedPromise, "f").catch(() => { - }); - __classPrivateFieldGet8(this, _EventStream_endPromise, "f").catch(() => { - }); - } - _run(executor) { - setTimeout(() => { - executor().then(() => { - this._emitFinal(); - this._emit("end"); - }, __classPrivateFieldGet8(this, _EventStream_instances, "m", _EventStream_handleError).bind(this)); - }, 0); - } - _connected() { - if (this.ended) - return; - __classPrivateFieldGet8(this, _EventStream_resolveConnectedPromise, "f").call(this); - this._emit("connect"); - } - get ended() { - return __classPrivateFieldGet8(this, _EventStream_ended, "f"); - } - get errored() { - return __classPrivateFieldGet8(this, _EventStream_errored, "f"); - } - get aborted() { - return __classPrivateFieldGet8(this, _EventStream_aborted, "f"); - } - abort() { - this.controller.abort(); - } - /** - * Adds the listener function to the end of the listeners array for the event. - * No checks are made to see if the listener has already been added. Multiple calls passing - * the same combination of event and listener will result in the listener being added, and - * called, multiple times. - * @returns this ChatCompletionStream, so that calls can be chained - */ - on(event, listener) { - const listeners = __classPrivateFieldGet8(this, _EventStream_listeners, "f")[event] || (__classPrivateFieldGet8(this, _EventStream_listeners, "f")[event] = []); - listeners.push({ listener }); - return this; - } - /** - * Removes the specified listener from the listener array for the event. - * off() will remove, at most, one instance of a listener from the listener array. If any single - * listener has been added multiple times to the listener array for the specified event, then - * off() must be called multiple times to remove each instance. - * @returns this ChatCompletionStream, so that calls can be chained - */ - off(event, listener) { - const listeners = __classPrivateFieldGet8(this, _EventStream_listeners, "f")[event]; - if (!listeners) - return this; - const index4 = listeners.findIndex((l3) => l3.listener === listener); - if (index4 >= 0) - listeners.splice(index4, 1); - return this; - } - /** - * Adds a one-time listener function for the event. The next time the event is triggered, - * this listener is removed and then invoked. - * @returns this ChatCompletionStream, so that calls can be chained - */ - once(event, listener) { - const listeners = __classPrivateFieldGet8(this, _EventStream_listeners, "f")[event] || (__classPrivateFieldGet8(this, _EventStream_listeners, "f")[event] = []); - listeners.push({ listener, once: true }); - return this; - } - /** - * This is similar to `.once()`, but returns a Promise that resolves the next time - * the event is triggered, instead of calling a listener callback. - * @returns a Promise that resolves the next time given event is triggered, - * or rejects if an error is emitted. (If you request the 'error' event, - * returns a promise that resolves with the error). - * - * Example: - * - * const message = await stream.emitted('message') // rejects if the stream errors - */ - emitted(event) { - return new Promise((resolve2, reject) => { - __classPrivateFieldSet7(this, _EventStream_catchingPromiseCreated, true, "f"); - if (event !== "error") - this.once("error", reject); - this.once(event, resolve2); - }); - } - async done() { - __classPrivateFieldSet7(this, _EventStream_catchingPromiseCreated, true, "f"); - await __classPrivateFieldGet8(this, _EventStream_endPromise, "f"); - } - _emit(event, ...args) { - if (__classPrivateFieldGet8(this, _EventStream_ended, "f")) { - return; - } - if (event === "end") { - __classPrivateFieldSet7(this, _EventStream_ended, true, "f"); - __classPrivateFieldGet8(this, _EventStream_resolveEndPromise, "f").call(this); - } - const listeners = __classPrivateFieldGet8(this, _EventStream_listeners, "f")[event]; - if (listeners) { - __classPrivateFieldGet8(this, _EventStream_listeners, "f")[event] = listeners.filter((l3) => !l3.once); - listeners.forEach(({ listener }) => listener(...args)); - } - if (event === "abort") { - const error = args[0]; - if (!__classPrivateFieldGet8(this, _EventStream_catchingPromiseCreated, "f") && !(listeners == null ? void 0 : listeners.length)) { - Promise.reject(error); - } - __classPrivateFieldGet8(this, _EventStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet8(this, _EventStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - return; - } - if (event === "error") { - const error = args[0]; - if (!__classPrivateFieldGet8(this, _EventStream_catchingPromiseCreated, "f") && !(listeners == null ? void 0 : listeners.length)) { - Promise.reject(error); - } - __classPrivateFieldGet8(this, _EventStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet8(this, _EventStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - } - } - _emitFinal() { - } -}; -_EventStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _EventStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _EventStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _EventStream_endPromise = /* @__PURE__ */ new WeakMap(), _EventStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _EventStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _EventStream_listeners = /* @__PURE__ */ new WeakMap(), _EventStream_ended = /* @__PURE__ */ new WeakMap(), _EventStream_errored = /* @__PURE__ */ new WeakMap(), _EventStream_aborted = /* @__PURE__ */ new WeakMap(), _EventStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _EventStream_instances = /* @__PURE__ */ new WeakSet(), _EventStream_handleError = function _EventStream_handleError2(error) { - __classPrivateFieldSet7(this, _EventStream_errored, true, "f"); - if (error instanceof Error && error.name === "AbortError") { - error = new APIUserAbortError(); - } - if (error instanceof APIUserAbortError) { - __classPrivateFieldSet7(this, _EventStream_aborted, true, "f"); - return this._emit("abort", error); - } - if (error instanceof OpenAIError) { - return this._emit("error", error); - } - if (error instanceof Error) { - const openAIError = new OpenAIError(error.message); - openAIError.cause = error; - return this._emit("error", openAIError); - } - return this._emit("error", new OpenAIError(String(error))); -}; - -// node_modules/openai/lib/parser.mjs -function isAutoParsableResponseFormat(response_format) { - return (response_format == null ? void 0 : response_format["$brand"]) === "auto-parseable-response-format"; -} -function isAutoParsableTool(tool) { - return (tool == null ? void 0 : tool["$brand"]) === "auto-parseable-tool"; -} -function maybeParseChatCompletion(completion, params) { - if (!params || !hasAutoParseableInput(params)) { - return { - ...completion, - choices: completion.choices.map((choice) => ({ - ...choice, - message: { - ...choice.message, - parsed: null, - ...choice.message.tool_calls ? { - tool_calls: choice.message.tool_calls - } : void 0 - } - })) - }; - } - return parseChatCompletion(completion, params); -} -function parseChatCompletion(completion, params) { - const choices = completion.choices.map((choice) => { - var _a2, _b; - if (choice.finish_reason === "length") { - throw new LengthFinishReasonError(); - } - if (choice.finish_reason === "content_filter") { - throw new ContentFilterFinishReasonError(); - } - return { - ...choice, - message: { - ...choice.message, - ...choice.message.tool_calls ? { - tool_calls: (_b = (_a2 = choice.message.tool_calls) == null ? void 0 : _a2.map((toolCall) => parseToolCall(params, toolCall))) != null ? _b : void 0 - } : void 0, - parsed: choice.message.content && !choice.message.refusal ? parseResponseFormat(params, choice.message.content) : null - } - }; - }); - return { ...completion, choices }; -} -function parseResponseFormat(params, content) { - var _a2, _b; - if (((_a2 = params.response_format) == null ? void 0 : _a2.type) !== "json_schema") { - return null; - } - if (((_b = params.response_format) == null ? void 0 : _b.type) === "json_schema") { - if ("$parseRaw" in params.response_format) { - const response_format = params.response_format; - return response_format.$parseRaw(content); - } - return JSON.parse(content); - } - return null; -} -function parseToolCall(params, toolCall) { - var _a2; - const inputTool = (_a2 = params.tools) == null ? void 0 : _a2.find((inputTool2) => { - var _a3; - return ((_a3 = inputTool2.function) == null ? void 0 : _a3.name) === toolCall.function.name; - }); - return { - ...toolCall, - function: { - ...toolCall.function, - parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments) : (inputTool == null ? void 0 : inputTool.function.strict) ? JSON.parse(toolCall.function.arguments) : null - } - }; -} -function shouldParseToolCall(params, toolCall) { - var _a2; - if (!params) { - return false; - } - const inputTool = (_a2 = params.tools) == null ? void 0 : _a2.find((inputTool2) => { - var _a3; - return ((_a3 = inputTool2.function) == null ? void 0 : _a3.name) === toolCall.function.name; - }); - return isAutoParsableTool(inputTool) || (inputTool == null ? void 0 : inputTool.function.strict) || false; -} -function hasAutoParseableInput(params) { - var _a2, _b; - if (isAutoParsableResponseFormat(params.response_format)) { - return true; - } - return (_b = (_a2 = params.tools) == null ? void 0 : _a2.some((t4) => isAutoParsableTool(t4) || t4.type === "function" && t4.function.strict === true)) != null ? _b : false; -} -function validateInputTools(tools) { - for (const tool of tools != null ? tools : []) { - if (tool.type !== "function") { - throw new OpenAIError(`Currently only \`function\` tool types support auto-parsing; Received \`${tool.type}\``); - } - if (tool.function.strict !== true) { - throw new OpenAIError(`The \`${tool.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`); - } - } -} - -// node_modules/openai/lib/AbstractChatCompletionRunner.mjs -var __classPrivateFieldGet9 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); -}; -var _AbstractChatCompletionRunner_instances; -var _AbstractChatCompletionRunner_getFinalContent; -var _AbstractChatCompletionRunner_getFinalMessage; -var _AbstractChatCompletionRunner_getFinalFunctionCall; -var _AbstractChatCompletionRunner_getFinalFunctionCallResult; -var _AbstractChatCompletionRunner_calculateTotalUsage; -var _AbstractChatCompletionRunner_validateParams; -var _AbstractChatCompletionRunner_stringifyFunctionCallResult; -var DEFAULT_MAX_CHAT_COMPLETIONS = 10; -var AbstractChatCompletionRunner = class extends EventStream { - constructor() { - super(...arguments); - _AbstractChatCompletionRunner_instances.add(this); - this._chatCompletions = []; - this.messages = []; - } - _addChatCompletion(chatCompletion) { - var _a2; - this._chatCompletions.push(chatCompletion); - this._emit("chatCompletion", chatCompletion); - const message = (_a2 = chatCompletion.choices[0]) == null ? void 0 : _a2.message; - if (message) - this._addMessage(message); - return chatCompletion; - } - _addMessage(message, emit = true) { - if (!("content" in message)) - message.content = null; - this.messages.push(message); - if (emit) { - this._emit("message", message); - if ((isFunctionMessage(message) || isToolMessage(message)) && message.content) { - this._emit("functionCallResult", message.content); - } else if (isAssistantMessage(message) && message.function_call) { - this._emit("functionCall", message.function_call); - } else if (isAssistantMessage(message) && message.tool_calls) { - for (const tool_call of message.tool_calls) { - if (tool_call.type === "function") { - this._emit("functionCall", tool_call.function); - } - } - } - } - } - /** - * @returns a promise that resolves with the final ChatCompletion, or rejects - * if an error occurred or the stream ended prematurely without producing a ChatCompletion. - */ - async finalChatCompletion() { - await this.done(); - const completion = this._chatCompletions[this._chatCompletions.length - 1]; - if (!completion) - throw new OpenAIError("stream ended without producing a ChatCompletion"); - return completion; - } - /** - * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects - * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage. - */ - async finalContent() { - await this.done(); - return __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); - } - /** - * @returns a promise that resolves with the the final assistant ChatCompletionMessage response, - * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage. - */ - async finalMessage() { - await this.done(); - return __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); - } - /** - * @returns a promise that resolves with the content of the final FunctionCall, or rejects - * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage. - */ - async finalFunctionCall() { - await this.done(); - return __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionCall).call(this); - } - async finalFunctionCallResult() { - await this.done(); - return __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionCallResult).call(this); - } - async totalUsage() { - await this.done(); - return __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this); - } - allChatCompletions() { - return [...this._chatCompletions]; - } - _emitFinal() { - const completion = this._chatCompletions[this._chatCompletions.length - 1]; - if (completion) - this._emit("finalChatCompletion", completion); - const finalMessage = __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); - if (finalMessage) - this._emit("finalMessage", finalMessage); - const finalContent = __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); - if (finalContent) - this._emit("finalContent", finalContent); - const finalFunctionCall = __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionCall).call(this); - if (finalFunctionCall) - this._emit("finalFunctionCall", finalFunctionCall); - const finalFunctionCallResult = __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionCallResult).call(this); - if (finalFunctionCallResult != null) - this._emit("finalFunctionCallResult", finalFunctionCallResult); - if (this._chatCompletions.some((c3) => c3.usage)) { - this._emit("totalUsage", __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this)); - } - } - async _createChatCompletion(client, params, options) { - const signal = options == null ? void 0 : options.signal; - if (signal) { - if (signal.aborted) - this.controller.abort(); - signal.addEventListener("abort", () => this.controller.abort()); - } - __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_validateParams).call(this, params); - const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal }); - this._connected(); - return this._addChatCompletion(parseChatCompletion(chatCompletion, params)); - } - async _runChatCompletion(client, params, options) { - for (const message of params.messages) { - this._addMessage(message, false); - } - return await this._createChatCompletion(client, params, options); - } - async _runFunctions(client, params, options) { - var _a2; - const role = "function"; - const { function_call = "auto", stream, ...restParams } = params; - const singleFunctionToCall = typeof function_call !== "string" && (function_call == null ? void 0 : function_call.name); - const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {}; - const functionsByName = {}; - for (const f3 of params.functions) { - functionsByName[f3.name || f3.function.name] = f3; - } - const functions = params.functions.map((f3) => ({ - name: f3.name || f3.function.name, - parameters: f3.parameters, - description: f3.description - })); - for (const message of params.messages) { - this._addMessage(message, false); - } - for (let i4 = 0; i4 < maxChatCompletions; ++i4) { - const chatCompletion = await this._createChatCompletion(client, { - ...restParams, - function_call, - functions, - messages: [...this.messages] - }, options); - const message = (_a2 = chatCompletion.choices[0]) == null ? void 0 : _a2.message; - if (!message) { - throw new OpenAIError(`missing message in ChatCompletion response`); - } - if (!message.function_call) - return; - const { name, arguments: args } = message.function_call; - const fn = functionsByName[name]; - if (!fn) { - const content2 = `Invalid function_call: ${JSON.stringify(name)}. Available options are: ${functions.map((f3) => JSON.stringify(f3.name)).join(", ")}. Please try again`; - this._addMessage({ role, name, content: content2 }); - continue; - } else if (singleFunctionToCall && singleFunctionToCall !== name) { - const content2 = `Invalid function_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`; - this._addMessage({ role, name, content: content2 }); - continue; - } - let parsed; - try { - parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args; - } catch (error) { - this._addMessage({ - role, - name, - content: error instanceof Error ? error.message : String(error) - }); - continue; - } - const rawContent = await fn.function(parsed, this); - const content = __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent); - this._addMessage({ role, name, content }); - if (singleFunctionToCall) - return; - } - } - async _runTools(client, params, options) { - var _a2, _b, _c; - const role = "tool"; - const { tool_choice = "auto", stream, ...restParams } = params; - const singleFunctionToCall = typeof tool_choice !== "string" && ((_a2 = tool_choice == null ? void 0 : tool_choice.function) == null ? void 0 : _a2.name); - const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {}; - const inputTools = params.tools.map((tool) => { - if (isAutoParsableTool(tool)) { - if (!tool.$callback) { - throw new OpenAIError("Tool given to `.runTools()` that does not have an associated function"); - } - return { - type: "function", - function: { - function: tool.$callback, - name: tool.function.name, - description: tool.function.description || "", - parameters: tool.function.parameters, - parse: tool.$parseRaw, - strict: true - } - }; - } - return tool; - }); - const functionsByName = {}; - for (const f3 of inputTools) { - if (f3.type === "function") { - functionsByName[f3.function.name || f3.function.function.name] = f3.function; - } - } - const tools = "tools" in params ? inputTools.map((t4) => t4.type === "function" ? { - type: "function", - function: { - name: t4.function.name || t4.function.function.name, - parameters: t4.function.parameters, - description: t4.function.description, - strict: t4.function.strict - } - } : t4) : void 0; - for (const message of params.messages) { - this._addMessage(message, false); - } - for (let i4 = 0; i4 < maxChatCompletions; ++i4) { - const chatCompletion = await this._createChatCompletion(client, { - ...restParams, - tool_choice, - tools, - messages: [...this.messages] - }, options); - const message = (_b = chatCompletion.choices[0]) == null ? void 0 : _b.message; - if (!message) { - throw new OpenAIError(`missing message in ChatCompletion response`); - } - if (!((_c = message.tool_calls) == null ? void 0 : _c.length)) { - return; - } - for (const tool_call of message.tool_calls) { - if (tool_call.type !== "function") - continue; - const tool_call_id = tool_call.id; - const { name, arguments: args } = tool_call.function; - const fn = functionsByName[name]; - if (!fn) { - const content2 = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName).map((name2) => JSON.stringify(name2)).join(", ")}. Please try again`; - this._addMessage({ role, tool_call_id, content: content2 }); - continue; - } else if (singleFunctionToCall && singleFunctionToCall !== name) { - const content2 = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`; - this._addMessage({ role, tool_call_id, content: content2 }); - continue; - } - let parsed; - try { - parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args; - } catch (error) { - const content2 = error instanceof Error ? error.message : String(error); - this._addMessage({ role, tool_call_id, content: content2 }); - continue; - } - const rawContent = await fn.function(parsed, this); - const content = __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent); - this._addMessage({ role, tool_call_id, content }); - if (singleFunctionToCall) { - return; - } - } - } - return; - } -}; -_AbstractChatCompletionRunner_instances = /* @__PURE__ */ new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent2() { - var _a2; - return (_a2 = __classPrivateFieldGet9(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this).content) != null ? _a2 : null; -}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage2() { - var _a2, _b; - let i4 = this.messages.length; - while (i4-- > 0) { - const message = this.messages[i4]; - if (isAssistantMessage(message)) { - const { function_call, ...rest } = message; - const ret = { - ...rest, - content: (_a2 = message.content) != null ? _a2 : null, - refusal: (_b = message.refusal) != null ? _b : null - }; - if (function_call) { - ret.function_call = function_call; - } - return ret; - } - } - throw new OpenAIError("stream ended without producing a ChatCompletionMessage with role=assistant"); -}, _AbstractChatCompletionRunner_getFinalFunctionCall = function _AbstractChatCompletionRunner_getFinalFunctionCall2() { - var _a2, _b; - for (let i4 = this.messages.length - 1; i4 >= 0; i4--) { - const message = this.messages[i4]; - if (isAssistantMessage(message) && (message == null ? void 0 : message.function_call)) { - return message.function_call; - } - if (isAssistantMessage(message) && ((_a2 = message == null ? void 0 : message.tool_calls) == null ? void 0 : _a2.length)) { - return (_b = message.tool_calls.at(-1)) == null ? void 0 : _b.function; - } - } - return; -}, _AbstractChatCompletionRunner_getFinalFunctionCallResult = function _AbstractChatCompletionRunner_getFinalFunctionCallResult2() { - for (let i4 = this.messages.length - 1; i4 >= 0; i4--) { - const message = this.messages[i4]; - if (isFunctionMessage(message) && message.content != null) { - return message.content; - } - if (isToolMessage(message) && message.content != null && typeof message.content === "string" && this.messages.some((x2) => { - var _a2; - return x2.role === "assistant" && ((_a2 = x2.tool_calls) == null ? void 0 : _a2.some((y2) => y2.type === "function" && y2.id === message.tool_call_id)); - })) { - return message.content; - } - } - return; -}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage2() { - const total = { - completion_tokens: 0, - prompt_tokens: 0, - total_tokens: 0 - }; - for (const { usage } of this._chatCompletions) { - if (usage) { - total.completion_tokens += usage.completion_tokens; - total.prompt_tokens += usage.prompt_tokens; - total.total_tokens += usage.total_tokens; - } - } - return total; -}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams2(params) { - if (params.n != null && params.n > 1) { - throw new OpenAIError("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly."); - } -}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult2(rawContent) { - return typeof rawContent === "string" ? rawContent : rawContent === void 0 ? "undefined" : JSON.stringify(rawContent); -}; - -// node_modules/openai/lib/ChatCompletionRunner.mjs -var ChatCompletionRunner = class extends AbstractChatCompletionRunner { - /** @deprecated - please use `runTools` instead. */ - static runFunctions(client, params, options) { - const runner = new ChatCompletionRunner(); - const opts2 = { - ...options, - headers: { ...options == null ? void 0 : options.headers, "X-Stainless-Helper-Method": "runFunctions" } - }; - runner._run(() => runner._runFunctions(client, params, opts2)); - return runner; - } - static runTools(client, params, options) { - const runner = new ChatCompletionRunner(); - const opts2 = { - ...options, - headers: { ...options == null ? void 0 : options.headers, "X-Stainless-Helper-Method": "runTools" } - }; - runner._run(() => runner._runTools(client, params, opts2)); - return runner; - } - _addMessage(message, emit = true) { - super._addMessage(message, emit); - if (isAssistantMessage(message) && message.content) { - this._emit("content", message.content); - } - } -}; - -// node_modules/openai/_vendor/partial-json-parser/parser.mjs -var STR = 1; -var NUM = 2; -var ARR = 4; -var OBJ = 8; -var NULL = 16; -var BOOL = 32; -var NAN = 64; -var INFINITY = 128; -var MINUS_INFINITY = 256; -var INF = INFINITY | MINUS_INFINITY; -var SPECIAL = NULL | BOOL | INF | NAN; -var ATOM = STR | NUM | SPECIAL; -var COLLECTION = ARR | OBJ; -var ALL = ATOM | COLLECTION; -var Allow = { - STR, - NUM, - ARR, - OBJ, - NULL, - BOOL, - NAN, - INFINITY, - MINUS_INFINITY, - INF, - SPECIAL, - ATOM, - COLLECTION, - ALL -}; -var PartialJSON = class extends Error { -}; -var MalformedJSON = class extends Error { -}; -function parseJSON2(jsonString, allowPartial = Allow.ALL) { - if (typeof jsonString !== "string") { - throw new TypeError(`expecting str, got ${typeof jsonString}`); - } - if (!jsonString.trim()) { - throw new Error(`${jsonString} is empty`); - } - return _parseJSON(jsonString.trim(), allowPartial); -} -var _parseJSON = (jsonString, allow) => { - const length2 = jsonString.length; - let index4 = 0; - const markPartialJSON = (msg) => { - throw new PartialJSON(`${msg} at position ${index4}`); - }; - const throwMalformedError = (msg) => { - throw new MalformedJSON(`${msg} at position ${index4}`); - }; - const parseAny = () => { - skipBlank(); - if (index4 >= length2) - markPartialJSON("Unexpected end of input"); - if (jsonString[index4] === '"') - return parseStr(); - if (jsonString[index4] === "{") - return parseObj(); - if (jsonString[index4] === "[") - return parseArr(); - if (jsonString.substring(index4, index4 + 4) === "null" || Allow.NULL & allow && length2 - index4 < 4 && "null".startsWith(jsonString.substring(index4))) { - index4 += 4; - return null; - } - if (jsonString.substring(index4, index4 + 4) === "true" || Allow.BOOL & allow && length2 - index4 < 4 && "true".startsWith(jsonString.substring(index4))) { - index4 += 4; - return true; - } - if (jsonString.substring(index4, index4 + 5) === "false" || Allow.BOOL & allow && length2 - index4 < 5 && "false".startsWith(jsonString.substring(index4))) { - index4 += 5; - return false; - } - if (jsonString.substring(index4, index4 + 8) === "Infinity" || Allow.INFINITY & allow && length2 - index4 < 8 && "Infinity".startsWith(jsonString.substring(index4))) { - index4 += 8; - return Infinity; - } - if (jsonString.substring(index4, index4 + 9) === "-Infinity" || Allow.MINUS_INFINITY & allow && 1 < length2 - index4 && length2 - index4 < 9 && "-Infinity".startsWith(jsonString.substring(index4))) { - index4 += 9; - return -Infinity; - } - if (jsonString.substring(index4, index4 + 3) === "NaN" || Allow.NAN & allow && length2 - index4 < 3 && "NaN".startsWith(jsonString.substring(index4))) { - index4 += 3; - return NaN; - } - return parseNum(); - }; - const parseStr = () => { - const start2 = index4; - let escape2 = false; - index4++; - while (index4 < length2 && (jsonString[index4] !== '"' || escape2 && jsonString[index4 - 1] === "\\")) { - escape2 = jsonString[index4] === "\\" ? !escape2 : false; - index4++; - } - if (jsonString.charAt(index4) == '"') { - try { - return JSON.parse(jsonString.substring(start2, ++index4 - Number(escape2))); - } catch (e3) { - throwMalformedError(String(e3)); - } - } else if (Allow.STR & allow) { - try { - return JSON.parse(jsonString.substring(start2, index4 - Number(escape2)) + '"'); - } catch (e3) { - return JSON.parse(jsonString.substring(start2, jsonString.lastIndexOf("\\")) + '"'); - } - } - markPartialJSON("Unterminated string literal"); - }; - const parseObj = () => { - index4++; - skipBlank(); - const obj = {}; - try { - while (jsonString[index4] !== "}") { - skipBlank(); - if (index4 >= length2 && Allow.OBJ & allow) - return obj; - const key = parseStr(); - skipBlank(); - index4++; - try { - const value = parseAny(); - Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true }); - } catch (e3) { - if (Allow.OBJ & allow) - return obj; - else - throw e3; - } - skipBlank(); - if (jsonString[index4] === ",") - index4++; - } - } catch (e3) { - if (Allow.OBJ & allow) - return obj; - else - markPartialJSON("Expected '}' at end of object"); - } - index4++; - return obj; - }; - const parseArr = () => { - index4++; - const arr = []; - try { - while (jsonString[index4] !== "]") { - arr.push(parseAny()); - skipBlank(); - if (jsonString[index4] === ",") { - index4++; - } - } - } catch (e3) { - if (Allow.ARR & allow) { - return arr; - } - markPartialJSON("Expected ']' at end of array"); - } - index4++; - return arr; - }; - const parseNum = () => { - if (index4 === 0) { - if (jsonString === "-" && Allow.NUM & allow) - markPartialJSON("Not sure what '-' is"); - try { - return JSON.parse(jsonString); - } catch (e3) { - if (Allow.NUM & allow) { - try { - if ("." === jsonString[jsonString.length - 1]) - return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf("."))); - return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf("e"))); - } catch (e4) { - } - } - throwMalformedError(String(e3)); - } - } - const start2 = index4; - if (jsonString[index4] === "-") - index4++; - while (jsonString[index4] && !",]}".includes(jsonString[index4])) - index4++; - if (index4 == length2 && !(Allow.NUM & allow)) - markPartialJSON("Unterminated number literal"); - try { - return JSON.parse(jsonString.substring(start2, index4)); - } catch (e3) { - if (jsonString.substring(start2, index4) === "-" && Allow.NUM & allow) - markPartialJSON("Not sure what '-' is"); - try { - return JSON.parse(jsonString.substring(start2, jsonString.lastIndexOf("e"))); - } catch (e4) { - throwMalformedError(String(e4)); - } - } - }; - const skipBlank = () => { - while (index4 < length2 && " \n\r ".includes(jsonString[index4])) { - index4++; - } - }; - return parseAny(); -}; -var partialParse = (input) => parseJSON2(input, Allow.ALL ^ Allow.NUM); - -// node_modules/openai/lib/ChatCompletionStream.mjs -var __classPrivateFieldSet8 = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; -}; -var __classPrivateFieldGet10 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); -}; -var _ChatCompletionStream_instances; -var _ChatCompletionStream_params; -var _ChatCompletionStream_choiceEventStates; -var _ChatCompletionStream_currentChatCompletionSnapshot; -var _ChatCompletionStream_beginRequest; -var _ChatCompletionStream_getChoiceEventState; -var _ChatCompletionStream_addChunk; -var _ChatCompletionStream_emitToolCallDoneEvent; -var _ChatCompletionStream_emitContentDoneEvents; -var _ChatCompletionStream_endRequest; -var _ChatCompletionStream_getAutoParseableResponseFormat; -var _ChatCompletionStream_accumulateChatCompletion; -var ChatCompletionStream = class extends AbstractChatCompletionRunner { - constructor(params) { - super(); - _ChatCompletionStream_instances.add(this); - _ChatCompletionStream_params.set(this, void 0); - _ChatCompletionStream_choiceEventStates.set(this, void 0); - _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0); - __classPrivateFieldSet8(this, _ChatCompletionStream_params, params, "f"); - __classPrivateFieldSet8(this, _ChatCompletionStream_choiceEventStates, [], "f"); - } - get currentChatCompletionSnapshot() { - return __classPrivateFieldGet10(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); - } - /** - * Intended for use on the frontend, consuming a stream produced with - * `.toReadableStream()` on the backend. - * - * Note that messages sent to the model do not appear in `.on('message')` - * in this context. - */ - static fromReadableStream(stream) { - const runner = new ChatCompletionStream(null); - runner._run(() => runner._fromReadableStream(stream)); - return runner; - } - static createChatCompletion(client, params, options) { - const runner = new ChatCompletionStream(params); - runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options == null ? void 0 : options.headers, "X-Stainless-Helper-Method": "stream" } })); - return runner; - } - async _createChatCompletion(client, params, options) { - var _a2; - super._createChatCompletion; - const signal = options == null ? void 0 : options.signal; - if (signal) { - if (signal.aborted) - this.controller.abort(); - signal.addEventListener("abort", () => this.controller.abort()); - } - __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); - const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }); - this._connected(); - for await (const chunk of stream) { - __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); - } - if ((_a2 = stream.controller.signal) == null ? void 0 : _a2.aborted) { - throw new APIUserAbortError(); - } - return this._addChatCompletion(__classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); - } - async _fromReadableStream(readableStream, options) { - var _a2; - const signal = options == null ? void 0 : options.signal; - if (signal) { - if (signal.aborted) - this.controller.abort(); - signal.addEventListener("abort", () => this.controller.abort()); - } - __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); - this._connected(); - const stream = Stream.fromReadableStream(readableStream, this.controller); - let chatId; - for await (const chunk of stream) { - if (chatId && chatId !== chunk.id) { - this._addChatCompletion(__classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); - } - __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); - chatId = chunk.id; - } - if ((_a2 = stream.controller.signal) == null ? void 0 : _a2.aborted) { - throw new APIUserAbortError(); - } - return this._addChatCompletion(__classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); - } - [(_ChatCompletionStream_params = /* @__PURE__ */ new WeakMap(), _ChatCompletionStream_choiceEventStates = /* @__PURE__ */ new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = /* @__PURE__ */ new WeakMap(), _ChatCompletionStream_instances = /* @__PURE__ */ new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest2() { - if (this.ended) - return; - __classPrivateFieldSet8(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); - }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState2(choice) { - let state = __classPrivateFieldGet10(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index]; - if (state) { - return state; - } - state = { - content_done: false, - refusal_done: false, - logprobs_content_done: false, - logprobs_refusal_done: false, - done_tool_calls: /* @__PURE__ */ new Set(), - current_tool_call_index: null - }; - __classPrivateFieldGet10(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index] = state; - return state; - }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk2(chunk) { - var _a2, _b, _c, _d, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r2, _s, _t2; - if (this.ended) - return; - const completion = __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk); - this._emit("chunk", chunk, completion); - for (const choice of chunk.choices) { - const choiceSnapshot = completion.choices[choice.index]; - if (choice.delta.content != null && ((_a2 = choiceSnapshot.message) == null ? void 0 : _a2.role) === "assistant" && ((_b = choiceSnapshot.message) == null ? void 0 : _b.content)) { - this._emit("content", choice.delta.content, choiceSnapshot.message.content); - this._emit("content.delta", { - delta: choice.delta.content, - snapshot: choiceSnapshot.message.content, - parsed: choiceSnapshot.message.parsed - }); - } - if (choice.delta.refusal != null && ((_c = choiceSnapshot.message) == null ? void 0 : _c.role) === "assistant" && ((_d = choiceSnapshot.message) == null ? void 0 : _d.refusal)) { - this._emit("refusal.delta", { - delta: choice.delta.refusal, - snapshot: choiceSnapshot.message.refusal - }); - } - if (((_e2 = choice.logprobs) == null ? void 0 : _e2.content) != null && ((_f = choiceSnapshot.message) == null ? void 0 : _f.role) === "assistant") { - this._emit("logprobs.content.delta", { - content: (_g = choice.logprobs) == null ? void 0 : _g.content, - snapshot: (_i = (_h = choiceSnapshot.logprobs) == null ? void 0 : _h.content) != null ? _i : [] - }); - } - if (((_j = choice.logprobs) == null ? void 0 : _j.refusal) != null && ((_k = choiceSnapshot.message) == null ? void 0 : _k.role) === "assistant") { - this._emit("logprobs.refusal.delta", { - refusal: (_l = choice.logprobs) == null ? void 0 : _l.refusal, - snapshot: (_n = (_m = choiceSnapshot.logprobs) == null ? void 0 : _m.refusal) != null ? _n : [] - }); - } - const state = __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); - if (choiceSnapshot.finish_reason) { - __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); - if (state.current_tool_call_index != null) { - __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index); - } - } - for (const toolCall of (_o = choice.delta.tool_calls) != null ? _o : []) { - if (state.current_tool_call_index !== toolCall.index) { - __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); - if (state.current_tool_call_index != null) { - __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index); - } - } - state.current_tool_call_index = toolCall.index; - } - for (const toolCallDelta of (_p = choice.delta.tool_calls) != null ? _p : []) { - const toolCallSnapshot = (_q = choiceSnapshot.message.tool_calls) == null ? void 0 : _q[toolCallDelta.index]; - if (!(toolCallSnapshot == null ? void 0 : toolCallSnapshot.type)) { - continue; - } - if ((toolCallSnapshot == null ? void 0 : toolCallSnapshot.type) === "function") { - this._emit("tool_calls.function.arguments.delta", { - name: (_r2 = toolCallSnapshot.function) == null ? void 0 : _r2.name, - index: toolCallDelta.index, - arguments: toolCallSnapshot.function.arguments, - parsed_arguments: toolCallSnapshot.function.parsed_arguments, - arguments_delta: (_t2 = (_s = toolCallDelta.function) == null ? void 0 : _s.arguments) != null ? _t2 : "" - }); - } else { - assertNever(toolCallSnapshot == null ? void 0 : toolCallSnapshot.type); - } - } - } - }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent2(choiceSnapshot, toolCallIndex) { - var _a2, _b, _c; - const state = __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); - if (state.done_tool_calls.has(toolCallIndex)) { - return; - } - const toolCallSnapshot = (_a2 = choiceSnapshot.message.tool_calls) == null ? void 0 : _a2[toolCallIndex]; - if (!toolCallSnapshot) { - throw new Error("no tool call snapshot"); - } - if (!toolCallSnapshot.type) { - throw new Error("tool call snapshot missing `type`"); - } - if (toolCallSnapshot.type === "function") { - const inputTool = (_c = (_b = __classPrivateFieldGet10(this, _ChatCompletionStream_params, "f")) == null ? void 0 : _b.tools) == null ? void 0 : _c.find((tool) => tool.type === "function" && tool.function.name === toolCallSnapshot.function.name); - this._emit("tool_calls.function.arguments.done", { - name: toolCallSnapshot.function.name, - index: toolCallIndex, - arguments: toolCallSnapshot.function.arguments, - parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments) : (inputTool == null ? void 0 : inputTool.function.strict) ? JSON.parse(toolCallSnapshot.function.arguments) : null - }); - } else { - assertNever(toolCallSnapshot.type); - } - }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents2(choiceSnapshot) { - var _a2, _b; - const state = __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); - if (choiceSnapshot.message.content && !state.content_done) { - state.content_done = true; - const responseFormat = __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getAutoParseableResponseFormat).call(this); - this._emit("content.done", { - content: choiceSnapshot.message.content, - parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null - }); - } - if (choiceSnapshot.message.refusal && !state.refusal_done) { - state.refusal_done = true; - this._emit("refusal.done", { refusal: choiceSnapshot.message.refusal }); - } - if (((_a2 = choiceSnapshot.logprobs) == null ? void 0 : _a2.content) && !state.logprobs_content_done) { - state.logprobs_content_done = true; - this._emit("logprobs.content.done", { content: choiceSnapshot.logprobs.content }); - } - if (((_b = choiceSnapshot.logprobs) == null ? void 0 : _b.refusal) && !state.logprobs_refusal_done) { - state.logprobs_refusal_done = true; - this._emit("logprobs.refusal.done", { refusal: choiceSnapshot.logprobs.refusal }); - } - }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest2() { - if (this.ended) { - throw new OpenAIError(`stream has ended, this shouldn't happen`); - } - const snapshot = __classPrivateFieldGet10(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); - if (!snapshot) { - throw new OpenAIError(`request ended without sending any chunks`); - } - __classPrivateFieldSet8(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); - __classPrivateFieldSet8(this, _ChatCompletionStream_choiceEventStates, [], "f"); - return finalizeChatCompletion(snapshot, __classPrivateFieldGet10(this, _ChatCompletionStream_params, "f")); - }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat2() { - var _a2; - const responseFormat = (_a2 = __classPrivateFieldGet10(this, _ChatCompletionStream_params, "f")) == null ? void 0 : _a2.response_format; - if (isAutoParsableResponseFormat(responseFormat)) { - return responseFormat; - } - return null; - }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion2(chunk) { - var _a3, _b2, _c2, _d2, _e2, _f; - var _a2, _b, _c, _d; - let snapshot = __classPrivateFieldGet10(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); - const { choices, ...rest } = chunk; - if (!snapshot) { - snapshot = __classPrivateFieldSet8(this, _ChatCompletionStream_currentChatCompletionSnapshot, { - ...rest, - choices: [] - }, "f"); - } else { - Object.assign(snapshot, rest); - } - for (const { delta, finish_reason, index: index4, logprobs = null, ...other } of chunk.choices) { - let choice = snapshot.choices[index4]; - if (!choice) { - choice = snapshot.choices[index4] = { finish_reason, index: index4, message: {}, logprobs, ...other }; - } - if (logprobs) { - if (!choice.logprobs) { - choice.logprobs = Object.assign({}, logprobs); - } else { - const { content: content2, refusal: refusal2, ...rest3 } = logprobs; - assertIsEmpty(rest3); - Object.assign(choice.logprobs, rest3); - if (content2) { - (_a3 = (_a2 = choice.logprobs).content) != null ? _a3 : _a2.content = []; - choice.logprobs.content.push(...content2); - } - if (refusal2) { - (_b2 = (_b = choice.logprobs).refusal) != null ? _b2 : _b.refusal = []; - choice.logprobs.refusal.push(...refusal2); - } - } - } - if (finish_reason) { - choice.finish_reason = finish_reason; - if (__classPrivateFieldGet10(this, _ChatCompletionStream_params, "f") && hasAutoParseableInput(__classPrivateFieldGet10(this, _ChatCompletionStream_params, "f"))) { - if (finish_reason === "length") { - throw new LengthFinishReasonError(); - } - if (finish_reason === "content_filter") { - throw new ContentFilterFinishReasonError(); - } - } - } - Object.assign(choice, other); - if (!delta) - continue; - const { content, refusal, function_call, role, tool_calls, ...rest2 } = delta; - assertIsEmpty(rest2); - Object.assign(choice.message, rest2); - if (refusal) { - choice.message.refusal = (choice.message.refusal || "") + refusal; - } - if (role) - choice.message.role = role; - if (function_call) { - if (!choice.message.function_call) { - choice.message.function_call = function_call; - } else { - if (function_call.name) - choice.message.function_call.name = function_call.name; - if (function_call.arguments) { - (_c2 = (_c = choice.message.function_call).arguments) != null ? _c2 : _c.arguments = ""; - choice.message.function_call.arguments += function_call.arguments; - } - } - } - if (content) { - choice.message.content = (choice.message.content || "") + content; - if (!choice.message.refusal && __classPrivateFieldGet10(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) { - choice.message.parsed = partialParse(choice.message.content); - } - } - if (tool_calls) { - if (!choice.message.tool_calls) - choice.message.tool_calls = []; - for (const { index: index5, id, type, function: fn, ...rest3 } of tool_calls) { - const tool_call = (_d2 = (_d = choice.message.tool_calls)[index5]) != null ? _d2 : _d[index5] = {}; - Object.assign(tool_call, rest3); - if (id) - tool_call.id = id; - if (type) - tool_call.type = type; - if (fn) - (_f = tool_call.function) != null ? _f : tool_call.function = { name: (_e2 = fn.name) != null ? _e2 : "", arguments: "" }; - if (fn == null ? void 0 : fn.name) - tool_call.function.name = fn.name; - if (fn == null ? void 0 : fn.arguments) { - tool_call.function.arguments += fn.arguments; - if (shouldParseToolCall(__classPrivateFieldGet10(this, _ChatCompletionStream_params, "f"), tool_call)) { - tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments); - } - } - } - } - } - return snapshot; - }, Symbol.asyncIterator)]() { - const pushQueue = []; - const readQueue = []; - let done = false; - this.on("chunk", (chunk) => { - const reader = readQueue.shift(); - if (reader) { - reader.resolve(chunk); - } else { - pushQueue.push(chunk); - } - }); - this.on("end", () => { - done = true; - for (const reader of readQueue) { - reader.resolve(void 0); - } - readQueue.length = 0; - }); - this.on("abort", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - this.on("error", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - return { - next: async () => { - if (!pushQueue.length) { - if (done) { - return { value: void 0, done: true }; - } - return new Promise((resolve2, reject) => readQueue.push({ resolve: resolve2, reject })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); - } - const chunk = pushQueue.shift(); - return { value: chunk, done: false }; - }, - return: async () => { - this.abort(); - return { value: void 0, done: true }; - } - }; - } - toReadableStream() { - const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); - return stream.toReadableStream(); - } -}; -function finalizeChatCompletion(snapshot, params) { - const { id, choices, created, model: model4, system_fingerprint, ...rest } = snapshot; - const completion = { - ...rest, - id, - choices: choices.map(({ message, finish_reason, index: index4, logprobs, ...choiceRest }) => { - var _a2, _b, _c; - if (!finish_reason) { - throw new OpenAIError(`missing finish_reason for choice ${index4}`); - } - const { content = null, function_call, tool_calls, ...messageRest } = message; - const role = message.role; - if (!role) { - throw new OpenAIError(`missing role for choice ${index4}`); - } - if (function_call) { - const { arguments: args, name } = function_call; - if (args == null) { - throw new OpenAIError(`missing function_call.arguments for choice ${index4}`); - } - if (!name) { - throw new OpenAIError(`missing function_call.name for choice ${index4}`); - } - return { - ...choiceRest, - message: { - content, - function_call: { arguments: args, name }, - role, - refusal: (_a2 = message.refusal) != null ? _a2 : null - }, - finish_reason, - index: index4, - logprobs - }; - } - if (tool_calls) { - return { - ...choiceRest, - index: index4, - finish_reason, - logprobs, - message: { - ...messageRest, - role, - content, - refusal: (_b = message.refusal) != null ? _b : null, - tool_calls: tool_calls.map((tool_call, i4) => { - const { function: fn, type, id: id2, ...toolRest } = tool_call; - const { arguments: args, name, ...fnRest } = fn || {}; - if (id2 == null) { - throw new OpenAIError(`missing choices[${index4}].tool_calls[${i4}].id -${str(snapshot)}`); - } - if (type == null) { - throw new OpenAIError(`missing choices[${index4}].tool_calls[${i4}].type -${str(snapshot)}`); - } - if (name == null) { - throw new OpenAIError(`missing choices[${index4}].tool_calls[${i4}].function.name -${str(snapshot)}`); - } - if (args == null) { - throw new OpenAIError(`missing choices[${index4}].tool_calls[${i4}].function.arguments -${str(snapshot)}`); - } - return { ...toolRest, id: id2, type, function: { ...fnRest, name, arguments: args } }; - }) - } - }; - } - return { - ...choiceRest, - message: { ...messageRest, content, role, refusal: (_c = message.refusal) != null ? _c : null }, - finish_reason, - index: index4, - logprobs - }; - }), - created, - model: model4, - object: "chat.completion", - ...system_fingerprint ? { system_fingerprint } : {} - }; - return maybeParseChatCompletion(completion, params); -} -function str(x2) { - return JSON.stringify(x2); -} -function assertIsEmpty(obj) { - return; -} -function assertNever(_x) { -} - -// node_modules/openai/lib/ChatCompletionStreamingRunner.mjs -var ChatCompletionStreamingRunner = class extends ChatCompletionStream { - static fromReadableStream(stream) { - const runner = new ChatCompletionStreamingRunner(null); - runner._run(() => runner._fromReadableStream(stream)); - return runner; - } - /** @deprecated - please use `runTools` instead. */ - static runFunctions(client, params, options) { - const runner = new ChatCompletionStreamingRunner(null); - const opts2 = { - ...options, - headers: { ...options == null ? void 0 : options.headers, "X-Stainless-Helper-Method": "runFunctions" } - }; - runner._run(() => runner._runFunctions(client, params, opts2)); - return runner; - } - static runTools(client, params, options) { - const runner = new ChatCompletionStreamingRunner( - // @ts-expect-error TODO these types are incompatible - params - ); - const opts2 = { - ...options, - headers: { ...options == null ? void 0 : options.headers, "X-Stainless-Helper-Method": "runTools" } - }; - runner._run(() => runner._runTools(client, params, opts2)); - return runner; - } -}; - -// node_modules/openai/resources/beta/chat/completions.mjs -var Completions2 = class extends APIResource { - parse(body, options) { - validateInputTools(body.tools); - return this._client.chat.completions.create(body, { - ...options, - headers: { - ...options == null ? void 0 : options.headers, - "X-Stainless-Helper-Method": "beta.chat.completions.parse" - } - })._thenUnwrap((completion) => parseChatCompletion(completion, body)); - } - runFunctions(body, options) { - if (body.stream) { - return ChatCompletionStreamingRunner.runFunctions(this._client, body, options); - } - return ChatCompletionRunner.runFunctions(this._client, body, options); - } - runTools(body, options) { - if (body.stream) { - return ChatCompletionStreamingRunner.runTools(this._client, body, options); - } - return ChatCompletionRunner.runTools(this._client, body, options); - } - /** - * Creates a chat completion stream - */ - stream(body, options) { - return ChatCompletionStream.createChatCompletion(this._client, body, options); - } -}; - -// node_modules/openai/resources/beta/chat/chat.mjs -var Chat2 = class extends APIResource { - constructor() { - super(...arguments); - this.completions = new Completions2(this._client); - } -}; -(function(Chat3) { - Chat3.Completions = Completions2; -})(Chat2 || (Chat2 = {})); - -// node_modules/openai/resources/beta/realtime/sessions.mjs -var Sessions = class extends APIResource { - /** - * Create an ephemeral API token for use in client-side applications with the - * Realtime API. Can be configured with the same session parameters as the - * `session.update` client event. - * - * It responds with a session object, plus a `client_secret` key which contains a - * usable ephemeral API token that can be used to authenticate browser clients for - * the Realtime API. - */ - create(body, options) { - return this._client.post("/realtime/sessions", { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } -}; - -// node_modules/openai/resources/beta/realtime/transcription-sessions.mjs -var TranscriptionSessions = class extends APIResource { - /** - * Create an ephemeral API token for use in client-side applications with the - * Realtime API specifically for realtime transcriptions. Can be configured with - * the same session parameters as the `transcription_session.update` client event. - * - * It responds with a session object, plus a `client_secret` key which contains a - * usable ephemeral API token that can be used to authenticate browser clients for - * the Realtime API. - */ - create(body, options) { - return this._client.post("/realtime/transcription_sessions", { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } -}; - -// node_modules/openai/resources/beta/realtime/realtime.mjs -var Realtime = class extends APIResource { - constructor() { - super(...arguments); - this.sessions = new Sessions(this._client); - this.transcriptionSessions = new TranscriptionSessions(this._client); - } -}; -Realtime.Sessions = Sessions; -Realtime.TranscriptionSessions = TranscriptionSessions; - -// node_modules/openai/lib/AssistantStream.mjs -var __classPrivateFieldGet11 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); -}; -var __classPrivateFieldSet9 = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; -}; -var _AssistantStream_instances; -var _AssistantStream_events; -var _AssistantStream_runStepSnapshots; -var _AssistantStream_messageSnapshots; -var _AssistantStream_messageSnapshot; -var _AssistantStream_finalRun; -var _AssistantStream_currentContentIndex; -var _AssistantStream_currentContent; -var _AssistantStream_currentToolCallIndex; -var _AssistantStream_currentToolCall; -var _AssistantStream_currentEvent; -var _AssistantStream_currentRunSnapshot; -var _AssistantStream_currentRunStepSnapshot; -var _AssistantStream_addEvent; -var _AssistantStream_endRequest; -var _AssistantStream_handleMessage; -var _AssistantStream_handleRunStep; -var _AssistantStream_handleEvent; -var _AssistantStream_accumulateRunStep; -var _AssistantStream_accumulateMessage; -var _AssistantStream_accumulateContent; -var _AssistantStream_handleRun; -var AssistantStream = class extends EventStream { - constructor() { - super(...arguments); - _AssistantStream_instances.add(this); - _AssistantStream_events.set(this, []); - _AssistantStream_runStepSnapshots.set(this, {}); - _AssistantStream_messageSnapshots.set(this, {}); - _AssistantStream_messageSnapshot.set(this, void 0); - _AssistantStream_finalRun.set(this, void 0); - _AssistantStream_currentContentIndex.set(this, void 0); - _AssistantStream_currentContent.set(this, void 0); - _AssistantStream_currentToolCallIndex.set(this, void 0); - _AssistantStream_currentToolCall.set(this, void 0); - _AssistantStream_currentEvent.set(this, void 0); - _AssistantStream_currentRunSnapshot.set(this, void 0); - _AssistantStream_currentRunStepSnapshot.set(this, void 0); - } - [(_AssistantStream_events = /* @__PURE__ */ new WeakMap(), _AssistantStream_runStepSnapshots = /* @__PURE__ */ new WeakMap(), _AssistantStream_messageSnapshots = /* @__PURE__ */ new WeakMap(), _AssistantStream_messageSnapshot = /* @__PURE__ */ new WeakMap(), _AssistantStream_finalRun = /* @__PURE__ */ new WeakMap(), _AssistantStream_currentContentIndex = /* @__PURE__ */ new WeakMap(), _AssistantStream_currentContent = /* @__PURE__ */ new WeakMap(), _AssistantStream_currentToolCallIndex = /* @__PURE__ */ new WeakMap(), _AssistantStream_currentToolCall = /* @__PURE__ */ new WeakMap(), _AssistantStream_currentEvent = /* @__PURE__ */ new WeakMap(), _AssistantStream_currentRunSnapshot = /* @__PURE__ */ new WeakMap(), _AssistantStream_currentRunStepSnapshot = /* @__PURE__ */ new WeakMap(), _AssistantStream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { - const pushQueue = []; - const readQueue = []; - let done = false; - this.on("event", (event) => { - const reader = readQueue.shift(); - if (reader) { - reader.resolve(event); - } else { - pushQueue.push(event); - } - }); - this.on("end", () => { - done = true; - for (const reader of readQueue) { - reader.resolve(void 0); - } - readQueue.length = 0; - }); - this.on("abort", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - this.on("error", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - return { - next: async () => { - if (!pushQueue.length) { - if (done) { - return { value: void 0, done: true }; - } - return new Promise((resolve2, reject) => readQueue.push({ resolve: resolve2, reject })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); - } - const chunk = pushQueue.shift(); - return { value: chunk, done: false }; - }, - return: async () => { - this.abort(); - return { value: void 0, done: true }; - } - }; - } - static fromReadableStream(stream) { - const runner = new AssistantStream(); - runner._run(() => runner._fromReadableStream(stream)); - return runner; - } - async _fromReadableStream(readableStream, options) { - var _a2; - const signal = options == null ? void 0 : options.signal; - if (signal) { - if (signal.aborted) - this.controller.abort(); - signal.addEventListener("abort", () => this.controller.abort()); - } - this._connected(); - const stream = Stream.fromReadableStream(readableStream, this.controller); - for await (const event of stream) { - __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); - } - if ((_a2 = stream.controller.signal) == null ? void 0 : _a2.aborted) { - throw new APIUserAbortError(); - } - return this._addRun(__classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); - } - toReadableStream() { - const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); - return stream.toReadableStream(); - } - static createToolAssistantStream(threadId, runId, runs, params, options) { - const runner = new AssistantStream(); - runner._run(() => runner._runToolAssistantStream(threadId, runId, runs, params, { - ...options, - headers: { ...options == null ? void 0 : options.headers, "X-Stainless-Helper-Method": "stream" } - })); - return runner; - } - async _createToolAssistantStream(run, threadId, runId, params, options) { - var _a2; - const signal = options == null ? void 0 : options.signal; - if (signal) { - if (signal.aborted) - this.controller.abort(); - signal.addEventListener("abort", () => this.controller.abort()); - } - const body = { ...params, stream: true }; - const stream = await run.submitToolOutputs(threadId, runId, body, { - ...options, - signal: this.controller.signal - }); - this._connected(); - for await (const event of stream) { - __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); - } - if ((_a2 = stream.controller.signal) == null ? void 0 : _a2.aborted) { - throw new APIUserAbortError(); - } - return this._addRun(__classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); - } - static createThreadAssistantStream(params, thread, options) { - const runner = new AssistantStream(); - runner._run(() => runner._threadAssistantStream(params, thread, { - ...options, - headers: { ...options == null ? void 0 : options.headers, "X-Stainless-Helper-Method": "stream" } - })); - return runner; - } - static createAssistantStream(threadId, runs, params, options) { - const runner = new AssistantStream(); - runner._run(() => runner._runAssistantStream(threadId, runs, params, { - ...options, - headers: { ...options == null ? void 0 : options.headers, "X-Stainless-Helper-Method": "stream" } - })); - return runner; - } - currentEvent() { - return __classPrivateFieldGet11(this, _AssistantStream_currentEvent, "f"); - } - currentRun() { - return __classPrivateFieldGet11(this, _AssistantStream_currentRunSnapshot, "f"); - } - currentMessageSnapshot() { - return __classPrivateFieldGet11(this, _AssistantStream_messageSnapshot, "f"); - } - currentRunStepSnapshot() { - return __classPrivateFieldGet11(this, _AssistantStream_currentRunStepSnapshot, "f"); - } - async finalRunSteps() { - await this.done(); - return Object.values(__classPrivateFieldGet11(this, _AssistantStream_runStepSnapshots, "f")); - } - async finalMessages() { - await this.done(); - return Object.values(__classPrivateFieldGet11(this, _AssistantStream_messageSnapshots, "f")); - } - async finalRun() { - await this.done(); - if (!__classPrivateFieldGet11(this, _AssistantStream_finalRun, "f")) - throw Error("Final run was not received."); - return __classPrivateFieldGet11(this, _AssistantStream_finalRun, "f"); - } - async _createThreadAssistantStream(thread, params, options) { - var _a2; - const signal = options == null ? void 0 : options.signal; - if (signal) { - if (signal.aborted) - this.controller.abort(); - signal.addEventListener("abort", () => this.controller.abort()); - } - const body = { ...params, stream: true }; - const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal }); - this._connected(); - for await (const event of stream) { - __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); - } - if ((_a2 = stream.controller.signal) == null ? void 0 : _a2.aborted) { - throw new APIUserAbortError(); - } - return this._addRun(__classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); - } - async _createAssistantStream(run, threadId, params, options) { - var _a2; - const signal = options == null ? void 0 : options.signal; - if (signal) { - if (signal.aborted) - this.controller.abort(); - signal.addEventListener("abort", () => this.controller.abort()); - } - const body = { ...params, stream: true }; - const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal }); - this._connected(); - for await (const event of stream) { - __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); - } - if ((_a2 = stream.controller.signal) == null ? void 0 : _a2.aborted) { - throw new APIUserAbortError(); - } - return this._addRun(__classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); - } - static accumulateDelta(acc, delta) { - for (const [key, deltaValue] of Object.entries(delta)) { - if (!acc.hasOwnProperty(key)) { - acc[key] = deltaValue; - continue; - } - let accValue = acc[key]; - if (accValue === null || accValue === void 0) { - acc[key] = deltaValue; - continue; - } - if (key === "index" || key === "type") { - acc[key] = deltaValue; - continue; - } - if (typeof accValue === "string" && typeof deltaValue === "string") { - accValue += deltaValue; - } else if (typeof accValue === "number" && typeof deltaValue === "number") { - accValue += deltaValue; - } else if (isObj(accValue) && isObj(deltaValue)) { - accValue = this.accumulateDelta(accValue, deltaValue); - } else if (Array.isArray(accValue) && Array.isArray(deltaValue)) { - if (accValue.every((x2) => typeof x2 === "string" || typeof x2 === "number")) { - accValue.push(...deltaValue); - continue; - } - for (const deltaEntry of deltaValue) { - if (!isObj(deltaEntry)) { - throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`); - } - const index4 = deltaEntry["index"]; - if (index4 == null) { - console.error(deltaEntry); - throw new Error("Expected array delta entry to have an `index` property"); - } - if (typeof index4 !== "number") { - throw new Error(`Expected array delta entry \`index\` property to be a number but got ${index4}`); - } - const accEntry = accValue[index4]; - if (accEntry == null) { - accValue.push(deltaEntry); - } else { - accValue[index4] = this.accumulateDelta(accEntry, deltaEntry); - } - } - continue; - } else { - throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`); - } - acc[key] = accValue; - } - return acc; - } - _addRun(run) { - return run; - } - async _threadAssistantStream(params, thread, options) { - return await this._createThreadAssistantStream(thread, params, options); - } - async _runAssistantStream(threadId, runs, params, options) { - return await this._createAssistantStream(runs, threadId, params, options); - } - async _runToolAssistantStream(threadId, runId, runs, params, options) { - return await this._createToolAssistantStream(runs, threadId, runId, params, options); - } -}; -_AssistantStream_addEvent = function _AssistantStream_addEvent2(event) { - if (this.ended) - return; - __classPrivateFieldSet9(this, _AssistantStream_currentEvent, event, "f"); - __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_handleEvent).call(this, event); - switch (event.event) { - case "thread.created": - break; - case "thread.run.created": - case "thread.run.queued": - case "thread.run.in_progress": - case "thread.run.requires_action": - case "thread.run.completed": - case "thread.run.incomplete": - case "thread.run.failed": - case "thread.run.cancelling": - case "thread.run.cancelled": - case "thread.run.expired": - __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_handleRun).call(this, event); - break; - case "thread.run.step.created": - case "thread.run.step.in_progress": - case "thread.run.step.delta": - case "thread.run.step.completed": - case "thread.run.step.failed": - case "thread.run.step.cancelled": - case "thread.run.step.expired": - __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_handleRunStep).call(this, event); - break; - case "thread.message.created": - case "thread.message.in_progress": - case "thread.message.delta": - case "thread.message.completed": - case "thread.message.incomplete": - __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_handleMessage).call(this, event); - break; - case "error": - throw new Error("Encountered an error event in event processing - errors should be processed earlier"); - default: - assertNever2(event); - } -}, _AssistantStream_endRequest = function _AssistantStream_endRequest2() { - if (this.ended) { - throw new OpenAIError(`stream has ended, this shouldn't happen`); - } - if (!__classPrivateFieldGet11(this, _AssistantStream_finalRun, "f")) - throw Error("Final run has not been received"); - return __classPrivateFieldGet11(this, _AssistantStream_finalRun, "f"); -}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage2(event) { - const [accumulatedMessage, newContent] = __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet11(this, _AssistantStream_messageSnapshot, "f")); - __classPrivateFieldSet9(this, _AssistantStream_messageSnapshot, accumulatedMessage, "f"); - __classPrivateFieldGet11(this, _AssistantStream_messageSnapshots, "f")[accumulatedMessage.id] = accumulatedMessage; - for (const content of newContent) { - const snapshotContent = accumulatedMessage.content[content.index]; - if ((snapshotContent == null ? void 0 : snapshotContent.type) == "text") { - this._emit("textCreated", snapshotContent.text); - } - } - switch (event.event) { - case "thread.message.created": - this._emit("messageCreated", event.data); - break; - case "thread.message.in_progress": - break; - case "thread.message.delta": - this._emit("messageDelta", event.data.delta, accumulatedMessage); - if (event.data.delta.content) { - for (const content of event.data.delta.content) { - if (content.type == "text" && content.text) { - let textDelta = content.text; - let snapshot = accumulatedMessage.content[content.index]; - if (snapshot && snapshot.type == "text") { - this._emit("textDelta", textDelta, snapshot.text); - } else { - throw Error("The snapshot associated with this text delta is not text or missing"); - } - } - if (content.index != __classPrivateFieldGet11(this, _AssistantStream_currentContentIndex, "f")) { - if (__classPrivateFieldGet11(this, _AssistantStream_currentContent, "f")) { - switch (__classPrivateFieldGet11(this, _AssistantStream_currentContent, "f").type) { - case "text": - this._emit("textDone", __classPrivateFieldGet11(this, _AssistantStream_currentContent, "f").text, __classPrivateFieldGet11(this, _AssistantStream_messageSnapshot, "f")); - break; - case "image_file": - this._emit("imageFileDone", __classPrivateFieldGet11(this, _AssistantStream_currentContent, "f").image_file, __classPrivateFieldGet11(this, _AssistantStream_messageSnapshot, "f")); - break; - } - } - __classPrivateFieldSet9(this, _AssistantStream_currentContentIndex, content.index, "f"); - } - __classPrivateFieldSet9(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], "f"); - } - } - break; - case "thread.message.completed": - case "thread.message.incomplete": - if (__classPrivateFieldGet11(this, _AssistantStream_currentContentIndex, "f") !== void 0) { - const currentContent = event.data.content[__classPrivateFieldGet11(this, _AssistantStream_currentContentIndex, "f")]; - if (currentContent) { - switch (currentContent.type) { - case "image_file": - this._emit("imageFileDone", currentContent.image_file, __classPrivateFieldGet11(this, _AssistantStream_messageSnapshot, "f")); - break; - case "text": - this._emit("textDone", currentContent.text, __classPrivateFieldGet11(this, _AssistantStream_messageSnapshot, "f")); - break; - } - } - } - if (__classPrivateFieldGet11(this, _AssistantStream_messageSnapshot, "f")) { - this._emit("messageDone", event.data); - } - __classPrivateFieldSet9(this, _AssistantStream_messageSnapshot, void 0, "f"); - } -}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep2(event) { - const accumulatedRunStep = __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_accumulateRunStep).call(this, event); - __classPrivateFieldSet9(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, "f"); - switch (event.event) { - case "thread.run.step.created": - this._emit("runStepCreated", event.data); - break; - case "thread.run.step.delta": - const delta = event.data.delta; - if (delta.step_details && delta.step_details.type == "tool_calls" && delta.step_details.tool_calls && accumulatedRunStep.step_details.type == "tool_calls") { - for (const toolCall of delta.step_details.tool_calls) { - if (toolCall.index == __classPrivateFieldGet11(this, _AssistantStream_currentToolCallIndex, "f")) { - this._emit("toolCallDelta", toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]); - } else { - if (__classPrivateFieldGet11(this, _AssistantStream_currentToolCall, "f")) { - this._emit("toolCallDone", __classPrivateFieldGet11(this, _AssistantStream_currentToolCall, "f")); - } - __classPrivateFieldSet9(this, _AssistantStream_currentToolCallIndex, toolCall.index, "f"); - __classPrivateFieldSet9(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], "f"); - if (__classPrivateFieldGet11(this, _AssistantStream_currentToolCall, "f")) - this._emit("toolCallCreated", __classPrivateFieldGet11(this, _AssistantStream_currentToolCall, "f")); - } - } - } - this._emit("runStepDelta", event.data.delta, accumulatedRunStep); - break; - case "thread.run.step.completed": - case "thread.run.step.failed": - case "thread.run.step.cancelled": - case "thread.run.step.expired": - __classPrivateFieldSet9(this, _AssistantStream_currentRunStepSnapshot, void 0, "f"); - const details = event.data.step_details; - if (details.type == "tool_calls") { - if (__classPrivateFieldGet11(this, _AssistantStream_currentToolCall, "f")) { - this._emit("toolCallDone", __classPrivateFieldGet11(this, _AssistantStream_currentToolCall, "f")); - __classPrivateFieldSet9(this, _AssistantStream_currentToolCall, void 0, "f"); - } - } - this._emit("runStepDone", event.data, accumulatedRunStep); - break; - case "thread.run.step.in_progress": - break; - } -}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent2(event) { - __classPrivateFieldGet11(this, _AssistantStream_events, "f").push(event); - this._emit("event", event); -}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep2(event) { - switch (event.event) { - case "thread.run.step.created": - __classPrivateFieldGet11(this, _AssistantStream_runStepSnapshots, "f")[event.data.id] = event.data; - return event.data; - case "thread.run.step.delta": - let snapshot = __classPrivateFieldGet11(this, _AssistantStream_runStepSnapshots, "f")[event.data.id]; - if (!snapshot) { - throw Error("Received a RunStepDelta before creation of a snapshot"); - } - let data = event.data; - if (data.delta) { - const accumulated = AssistantStream.accumulateDelta(snapshot, data.delta); - __classPrivateFieldGet11(this, _AssistantStream_runStepSnapshots, "f")[event.data.id] = accumulated; - } - return __classPrivateFieldGet11(this, _AssistantStream_runStepSnapshots, "f")[event.data.id]; - case "thread.run.step.completed": - case "thread.run.step.failed": - case "thread.run.step.cancelled": - case "thread.run.step.expired": - case "thread.run.step.in_progress": - __classPrivateFieldGet11(this, _AssistantStream_runStepSnapshots, "f")[event.data.id] = event.data; - break; - } - if (__classPrivateFieldGet11(this, _AssistantStream_runStepSnapshots, "f")[event.data.id]) - return __classPrivateFieldGet11(this, _AssistantStream_runStepSnapshots, "f")[event.data.id]; - throw new Error("No snapshot available"); -}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage2(event, snapshot) { - let newContent = []; - switch (event.event) { - case "thread.message.created": - return [event.data, newContent]; - case "thread.message.delta": - if (!snapshot) { - throw Error("Received a delta with no existing snapshot (there should be one from message creation)"); - } - let data = event.data; - if (data.delta.content) { - for (const contentElement of data.delta.content) { - if (contentElement.index in snapshot.content) { - let currentContent = snapshot.content[contentElement.index]; - snapshot.content[contentElement.index] = __classPrivateFieldGet11(this, _AssistantStream_instances, "m", _AssistantStream_accumulateContent).call(this, contentElement, currentContent); - } else { - snapshot.content[contentElement.index] = contentElement; - newContent.push(contentElement); - } - } - } - return [snapshot, newContent]; - case "thread.message.in_progress": - case "thread.message.completed": - case "thread.message.incomplete": - if (snapshot) { - return [snapshot, newContent]; - } else { - throw Error("Received thread message event with no existing snapshot"); - } - } - throw Error("Tried to accumulate a non-message event"); -}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent2(contentElement, currentContent) { - return AssistantStream.accumulateDelta(currentContent, contentElement); -}, _AssistantStream_handleRun = function _AssistantStream_handleRun2(event) { - __classPrivateFieldSet9(this, _AssistantStream_currentRunSnapshot, event.data, "f"); - switch (event.event) { - case "thread.run.created": - break; - case "thread.run.queued": - break; - case "thread.run.in_progress": - break; - case "thread.run.requires_action": - case "thread.run.cancelled": - case "thread.run.failed": - case "thread.run.completed": - case "thread.run.expired": - __classPrivateFieldSet9(this, _AssistantStream_finalRun, event.data, "f"); - if (__classPrivateFieldGet11(this, _AssistantStream_currentToolCall, "f")) { - this._emit("toolCallDone", __classPrivateFieldGet11(this, _AssistantStream_currentToolCall, "f")); - __classPrivateFieldSet9(this, _AssistantStream_currentToolCall, void 0, "f"); - } - break; - case "thread.run.cancelling": - break; - } -}; -function assertNever2(_x) { -} - -// node_modules/openai/resources/beta/threads/messages.mjs -var Messages2 = class extends APIResource { - /** - * Create a message. - */ - create(threadId, body, options) { - return this._client.post(`/threads/${threadId}/messages`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Retrieve a message. - */ - retrieve(threadId, messageId, options) { - return this._client.get(`/threads/${threadId}/messages/${messageId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Modifies a message. - */ - update(threadId, messageId, body, options) { - return this._client.post(`/threads/${threadId}/messages/${messageId}`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - list(threadId, query = {}, options) { - if (isRequestOptions(query)) { - return this.list(threadId, {}, query); - } - return this._client.getAPIList(`/threads/${threadId}/messages`, MessagesPage, { - query, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Deletes a message. - */ - del(threadId, messageId, options) { - return this._client.delete(`/threads/${threadId}/messages/${messageId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } -}; -var MessagesPage = class extends CursorPage { -}; -Messages2.MessagesPage = MessagesPage; - -// node_modules/openai/resources/beta/threads/runs/steps.mjs -var Steps = class extends APIResource { - retrieve(threadId, runId, stepId, query = {}, options) { - if (isRequestOptions(query)) { - return this.retrieve(threadId, runId, stepId, {}, query); - } - return this._client.get(`/threads/${threadId}/runs/${runId}/steps/${stepId}`, { - query, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - list(threadId, runId, query = {}, options) { - if (isRequestOptions(query)) { - return this.list(threadId, runId, {}, query); - } - return this._client.getAPIList(`/threads/${threadId}/runs/${runId}/steps`, RunStepsPage, { - query, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } -}; -var RunStepsPage = class extends CursorPage { -}; -Steps.RunStepsPage = RunStepsPage; - -// node_modules/openai/resources/beta/threads/runs/runs.mjs -var Runs = class extends APIResource { - constructor() { - super(...arguments); - this.steps = new Steps(this._client); - } - create(threadId, params, options) { - var _a2; - const { include, ...body } = params; - return this._client.post(`/threads/${threadId}/runs`, { - query: { include }, - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers }, - stream: (_a2 = params.stream) != null ? _a2 : false - }); - } - /** - * Retrieves a run. - */ - retrieve(threadId, runId, options) { - return this._client.get(`/threads/${threadId}/runs/${runId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Modifies a run. - */ - update(threadId, runId, body, options) { - return this._client.post(`/threads/${threadId}/runs/${runId}`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - list(threadId, query = {}, options) { - if (isRequestOptions(query)) { - return this.list(threadId, {}, query); - } - return this._client.getAPIList(`/threads/${threadId}/runs`, RunsPage, { - query, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Cancels a run that is `in_progress`. - */ - cancel(threadId, runId, options) { - return this._client.post(`/threads/${threadId}/runs/${runId}/cancel`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * A helper to create a run an poll for a terminal state. More information on Run - * lifecycles can be found here: - * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps - */ - async createAndPoll(threadId, body, options) { - const run = await this.create(threadId, body, options); - return await this.poll(threadId, run.id, options); - } - /** - * Create a Run stream - * - * @deprecated use `stream` instead - */ - createAndStream(threadId, body, options) { - return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options); - } - /** - * A helper to poll a run status until it reaches a terminal state. More - * information on Run lifecycles can be found here: - * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps - */ - async poll(threadId, runId, options) { - const headers = { ...options == null ? void 0 : options.headers, "X-Stainless-Poll-Helper": "true" }; - if (options == null ? void 0 : options.pollIntervalMs) { - headers["X-Stainless-Custom-Poll-Interval"] = options.pollIntervalMs.toString(); - } - while (true) { - const { data: run, response } = await this.retrieve(threadId, runId, { - ...options, - headers: { ...options == null ? void 0 : options.headers, ...headers } - }).withResponse(); - switch (run.status) { - case "queued": - case "in_progress": - case "cancelling": - let sleepInterval = 5e3; - if (options == null ? void 0 : options.pollIntervalMs) { - sleepInterval = options.pollIntervalMs; - } else { - const headerInterval = response.headers.get("openai-poll-after-ms"); - if (headerInterval) { - const headerIntervalMs = parseInt(headerInterval); - if (!isNaN(headerIntervalMs)) { - sleepInterval = headerIntervalMs; - } - } - } - await sleep(sleepInterval); - break; - case "requires_action": - case "incomplete": - case "cancelled": - case "completed": - case "failed": - case "expired": - return run; - } - } - } - /** - * Create a Run stream - */ - stream(threadId, body, options) { - return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options); - } - submitToolOutputs(threadId, runId, body, options) { - var _a2; - return this._client.post(`/threads/${threadId}/runs/${runId}/submit_tool_outputs`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers }, - stream: (_a2 = body.stream) != null ? _a2 : false - }); - } - /** - * A helper to submit a tool output to a run and poll for a terminal run state. - * More information on Run lifecycles can be found here: - * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps - */ - async submitToolOutputsAndPoll(threadId, runId, body, options) { - const run = await this.submitToolOutputs(threadId, runId, body, options); - return await this.poll(threadId, run.id, options); - } - /** - * Submit the tool outputs from a previous run and stream the run to a terminal - * state. More information on Run lifecycles can be found here: - * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps - */ - submitToolOutputsStream(threadId, runId, body, options) { - return AssistantStream.createToolAssistantStream(threadId, runId, this._client.beta.threads.runs, body, options); - } -}; -var RunsPage = class extends CursorPage { -}; -Runs.RunsPage = RunsPage; -Runs.Steps = Steps; -Runs.RunStepsPage = RunStepsPage; - -// node_modules/openai/resources/beta/threads/threads.mjs -var Threads = class extends APIResource { - constructor() { - super(...arguments); - this.runs = new Runs(this._client); - this.messages = new Messages2(this._client); - } - create(body = {}, options) { - if (isRequestOptions(body)) { - return this.create({}, body); - } - return this._client.post("/threads", { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Retrieves a thread. - */ - retrieve(threadId, options) { - return this._client.get(`/threads/${threadId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Modifies a thread. - */ - update(threadId, body, options) { - return this._client.post(`/threads/${threadId}`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Delete a thread. - */ - del(threadId, options) { - return this._client.delete(`/threads/${threadId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - createAndRun(body, options) { - var _a2; - return this._client.post("/threads/runs", { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers }, - stream: (_a2 = body.stream) != null ? _a2 : false - }); - } - /** - * A helper to create a thread, start a run and then poll for a terminal state. - * More information on Run lifecycles can be found here: - * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps - */ - async createAndRunPoll(body, options) { - const run = await this.createAndRun(body, options); - return await this.runs.poll(run.thread_id, run.id, options); - } - /** - * Create a thread and stream the run back - */ - createAndRunStream(body, options) { - return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options); - } -}; -Threads.Runs = Runs; -Threads.RunsPage = RunsPage; -Threads.Messages = Messages2; -Threads.MessagesPage = MessagesPage; - -// node_modules/openai/resources/beta/beta.mjs -var Beta = class extends APIResource { - constructor() { - super(...arguments); - this.realtime = new Realtime(this._client); - this.chat = new Chat2(this._client); - this.assistants = new Assistants(this._client); - this.threads = new Threads(this._client); - } -}; -Beta.Realtime = Realtime; -Beta.Assistants = Assistants; -Beta.AssistantsPage = AssistantsPage; -Beta.Threads = Threads; - -// node_modules/openai/resources/completions.mjs -var Completions3 = class extends APIResource { - create(body, options) { - var _a2; - return this._client.post("/completions", { body, ...options, stream: (_a2 = body.stream) != null ? _a2 : false }); - } -}; - -// node_modules/openai/resources/embeddings.mjs -var Embeddings = class extends APIResource { - /** - * Creates an embedding vector representing the input text. - */ - create(body, options) { - return this._client.post("/embeddings", { body, ...options }); - } -}; - -// node_modules/openai/resources/files.mjs -var Files = class extends APIResource { - /** - * Upload a file that can be used across various endpoints. Individual files can be - * up to 512 MB, and the size of all files uploaded by one organization can be up - * to 100 GB. - * - * The Assistants API supports files up to 2 million tokens and of specific file - * types. See the - * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for - * details. - * - * The Fine-tuning API only supports `.jsonl` files. The input also has certain - * required formats for fine-tuning - * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or - * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input) - * models. - * - * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also - * has a specific required - * [format](https://platform.openai.com/docs/api-reference/batch/request-input). - * - * Please [contact us](https://help.openai.com/) if you need to increase these - * storage limits. - */ - create(body, options) { - return this._client.post("/files", multipartFormRequestOptions({ body, ...options })); - } - /** - * Returns information about a specific file. - */ - retrieve(fileId, options) { - return this._client.get(`/files/${fileId}`, options); - } - list(query = {}, options) { - if (isRequestOptions(query)) { - return this.list({}, query); - } - return this._client.getAPIList("/files", FileObjectsPage, { query, ...options }); - } - /** - * Delete a file. - */ - del(fileId, options) { - return this._client.delete(`/files/${fileId}`, options); - } - /** - * Returns the contents of the specified file. - */ - content(fileId, options) { - return this._client.get(`/files/${fileId}/content`, { - ...options, - headers: { Accept: "application/binary", ...options == null ? void 0 : options.headers }, - __binaryResponse: true - }); - } - /** - * Returns the contents of the specified file. - * - * @deprecated The `.content()` method should be used instead - */ - retrieveContent(fileId, options) { - return this._client.get(`/files/${fileId}/content`, options); - } - /** - * Waits for the given file to be processed, default timeout is 30 mins. - */ - async waitForProcessing(id, { pollInterval = 5e3, maxWait = 30 * 60 * 1e3 } = {}) { - const TERMINAL_STATES = /* @__PURE__ */ new Set(["processed", "error", "deleted"]); - const start2 = Date.now(); - let file = await this.retrieve(id); - while (!file.status || !TERMINAL_STATES.has(file.status)) { - await sleep(pollInterval); - file = await this.retrieve(id); - if (Date.now() - start2 > maxWait) { - throw new APIConnectionTimeoutError({ - message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.` - }); - } - } - return file; - } -}; -var FileObjectsPage = class extends CursorPage { -}; -Files.FileObjectsPage = FileObjectsPage; - -// node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs -var Checkpoints = class extends APIResource { - list(fineTuningJobId, query = {}, options) { - if (isRequestOptions(query)) { - return this.list(fineTuningJobId, {}, query); - } - return this._client.getAPIList(`/fine_tuning/jobs/${fineTuningJobId}/checkpoints`, FineTuningJobCheckpointsPage, { query, ...options }); - } -}; -var FineTuningJobCheckpointsPage = class extends CursorPage { -}; -Checkpoints.FineTuningJobCheckpointsPage = FineTuningJobCheckpointsPage; - -// node_modules/openai/resources/fine-tuning/jobs/jobs.mjs -var Jobs = class extends APIResource { - constructor() { - super(...arguments); - this.checkpoints = new Checkpoints(this._client); - } - /** - * Creates a fine-tuning job which begins the process of creating a new model from - * a given dataset. - * - * Response includes details of the enqueued job including job status and the name - * of the fine-tuned models once complete. - * - * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/fine-tuning) - */ - create(body, options) { - return this._client.post("/fine_tuning/jobs", { body, ...options }); - } - /** - * Get info about a fine-tuning job. - * - * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/fine-tuning) - */ - retrieve(fineTuningJobId, options) { - return this._client.get(`/fine_tuning/jobs/${fineTuningJobId}`, options); - } - list(query = {}, options) { - if (isRequestOptions(query)) { - return this.list({}, query); - } - return this._client.getAPIList("/fine_tuning/jobs", FineTuningJobsPage, { query, ...options }); - } - /** - * Immediately cancel a fine-tune job. - */ - cancel(fineTuningJobId, options) { - return this._client.post(`/fine_tuning/jobs/${fineTuningJobId}/cancel`, options); - } - listEvents(fineTuningJobId, query = {}, options) { - if (isRequestOptions(query)) { - return this.listEvents(fineTuningJobId, {}, query); - } - return this._client.getAPIList(`/fine_tuning/jobs/${fineTuningJobId}/events`, FineTuningJobEventsPage, { - query, - ...options - }); - } -}; -var FineTuningJobsPage = class extends CursorPage { -}; -var FineTuningJobEventsPage = class extends CursorPage { -}; -Jobs.FineTuningJobsPage = FineTuningJobsPage; -Jobs.FineTuningJobEventsPage = FineTuningJobEventsPage; -Jobs.Checkpoints = Checkpoints; -Jobs.FineTuningJobCheckpointsPage = FineTuningJobCheckpointsPage; - -// node_modules/openai/resources/fine-tuning/fine-tuning.mjs -var FineTuning = class extends APIResource { - constructor() { - super(...arguments); - this.jobs = new Jobs(this._client); - } -}; -FineTuning.Jobs = Jobs; -FineTuning.FineTuningJobsPage = FineTuningJobsPage; -FineTuning.FineTuningJobEventsPage = FineTuningJobEventsPage; - -// node_modules/openai/resources/images.mjs -var Images = class extends APIResource { - /** - * Creates a variation of a given image. - */ - createVariation(body, options) { - return this._client.post("/images/variations", multipartFormRequestOptions({ body, ...options })); - } - /** - * Creates an edited or extended image given an original image and a prompt. - */ - edit(body, options) { - return this._client.post("/images/edits", multipartFormRequestOptions({ body, ...options })); - } - /** - * Creates an image given a prompt. - */ - generate(body, options) { - return this._client.post("/images/generations", { body, ...options }); - } -}; - -// node_modules/openai/resources/models.mjs -var Models = class extends APIResource { - /** - * Retrieves a model instance, providing basic information about the model such as - * the owner and permissioning. - */ - retrieve(model4, options) { - return this._client.get(`/models/${model4}`, options); - } - /** - * Lists the currently available models, and provides basic information about each - * one such as the owner and availability. - */ - list(options) { - return this._client.getAPIList("/models", ModelsPage, options); - } - /** - * Delete a fine-tuned model. You must have the Owner role in your organization to - * delete a model. - */ - del(model4, options) { - return this._client.delete(`/models/${model4}`, options); - } -}; -var ModelsPage = class extends Page { -}; -Models.ModelsPage = ModelsPage; - -// node_modules/openai/resources/moderations.mjs -var Moderations = class extends APIResource { - /** - * Classifies if text and/or image inputs are potentially harmful. Learn more in - * the [moderation guide](https://platform.openai.com/docs/guides/moderation). - */ - create(body, options) { - return this._client.post("/moderations", { body, ...options }); - } -}; - -// node_modules/openai/lib/ResponsesParser.mjs -function maybeParseResponse(response, params) { - if (!params || !hasAutoParseableInput2(params)) { - return { - ...response, - output_parsed: null, - output: response.output.map((item) => { - if (item.type === "function_call") { - return { - ...item, - parsed_arguments: null - }; - } - if (item.type === "message") { - return { - ...item, - content: item.content.map((content) => ({ - ...content, - parsed: null - })) - }; - } else { - return item; - } - }) - }; - } - return parseResponse(response, params); -} -function parseResponse(response, params) { - const output = response.output.map((item) => { - if (item.type === "function_call") { - return { - ...item, - parsed_arguments: parseToolCall2(params, item) - }; - } - if (item.type === "message") { - const content = item.content.map((content2) => { - if (content2.type === "output_text") { - return { - ...content2, - parsed: parseTextFormat(params, content2.text) - }; - } - return content2; - }); - return { - ...item, - content - }; - } - return item; - }); - const parsed = Object.assign({}, response, { output }); - if (!Object.getOwnPropertyDescriptor(response, "output_text")) { - addOutputText(parsed); - } - Object.defineProperty(parsed, "output_parsed", { - enumerable: true, - get() { - for (const output2 of parsed.output) { - if (output2.type !== "message") { - continue; - } - for (const content of output2.content) { - if (content.type === "output_text" && content.parsed !== null) { - return content.parsed; - } - } - } - return null; - } - }); - return parsed; -} -function parseTextFormat(params, content) { - var _a2, _b, _c, _d; - if (((_b = (_a2 = params.text) == null ? void 0 : _a2.format) == null ? void 0 : _b.type) !== "json_schema") { - return null; - } - if ("$parseRaw" in ((_c = params.text) == null ? void 0 : _c.format)) { - const text_format = (_d = params.text) == null ? void 0 : _d.format; - return text_format.$parseRaw(content); - } - return JSON.parse(content); -} -function hasAutoParseableInput2(params) { - var _a2; - if (isAutoParsableResponseFormat((_a2 = params.text) == null ? void 0 : _a2.format)) { - return true; - } - return false; -} -function isAutoParsableTool2(tool) { - return (tool == null ? void 0 : tool["$brand"]) === "auto-parseable-tool"; -} -function getInputToolByName(input_tools, name) { - return input_tools.find((tool) => tool.type === "function" && tool.name === name); -} -function parseToolCall2(params, toolCall) { - var _a2; - const inputTool = getInputToolByName((_a2 = params.tools) != null ? _a2 : [], toolCall.name); - return { - ...toolCall, - ...toolCall, - parsed_arguments: isAutoParsableTool2(inputTool) ? inputTool.$parseRaw(toolCall.arguments) : (inputTool == null ? void 0 : inputTool.strict) ? JSON.parse(toolCall.arguments) : null - }; -} -function addOutputText(rsp) { - const texts = []; - for (const output of rsp.output) { - if (output.type !== "message") { - continue; - } - for (const content of output.content) { - if (content.type === "output_text") { - texts.push(content.text); - } - } - } - rsp.output_text = texts.join(""); -} - -// node_modules/openai/resources/responses/input-items.mjs -var InputItems = class extends APIResource { - list(responseId, query = {}, options) { - if (isRequestOptions(query)) { - return this.list(responseId, {}, query); - } - return this._client.getAPIList(`/responses/${responseId}/input_items`, ResponseItemsPage, { - query, - ...options - }); - } -}; - -// node_modules/openai/lib/responses/ResponseStream.mjs -var __classPrivateFieldSet10 = function(receiver, state, value, kind2, f3) { - if (kind2 === "m") - throw new TypeError("Private method is not writable"); - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind2 === "a" ? f3.call(receiver, value) : f3 ? f3.value = value : state.set(receiver, value), value; -}; -var __classPrivateFieldGet12 = function(receiver, state, kind2, f3) { - if (kind2 === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f3 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind2 === "m" ? f3 : kind2 === "a" ? f3.call(receiver) : f3 ? f3.value : state.get(receiver); -}; -var _ResponseStream_instances; -var _ResponseStream_params; -var _ResponseStream_currentResponseSnapshot; -var _ResponseStream_finalResponse; -var _ResponseStream_beginRequest; -var _ResponseStream_addEvent; -var _ResponseStream_endRequest; -var _ResponseStream_accumulateResponse; -var ResponseStream = class extends EventStream { - constructor(params) { - super(); - _ResponseStream_instances.add(this); - _ResponseStream_params.set(this, void 0); - _ResponseStream_currentResponseSnapshot.set(this, void 0); - _ResponseStream_finalResponse.set(this, void 0); - __classPrivateFieldSet10(this, _ResponseStream_params, params, "f"); - } - static createResponse(client, params, options) { - const runner = new ResponseStream(params); - runner._run(() => runner._createResponse(client, params, { - ...options, - headers: { ...options == null ? void 0 : options.headers, "X-Stainless-Helper-Method": "stream" } - })); - return runner; - } - async _createResponse(client, params, options) { - var _a2; - const signal = options == null ? void 0 : options.signal; - if (signal) { - if (signal.aborted) - this.controller.abort(); - signal.addEventListener("abort", () => this.controller.abort()); - } - __classPrivateFieldGet12(this, _ResponseStream_instances, "m", _ResponseStream_beginRequest).call(this); - const stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }); - this._connected(); - for await (const event of stream) { - __classPrivateFieldGet12(this, _ResponseStream_instances, "m", _ResponseStream_addEvent).call(this, event); - } - if ((_a2 = stream.controller.signal) == null ? void 0 : _a2.aborted) { - throw new APIUserAbortError(); - } - return __classPrivateFieldGet12(this, _ResponseStream_instances, "m", _ResponseStream_endRequest).call(this); - } - [(_ResponseStream_params = /* @__PURE__ */ new WeakMap(), _ResponseStream_currentResponseSnapshot = /* @__PURE__ */ new WeakMap(), _ResponseStream_finalResponse = /* @__PURE__ */ new WeakMap(), _ResponseStream_instances = /* @__PURE__ */ new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest2() { - if (this.ended) - return; - __classPrivateFieldSet10(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); - }, _ResponseStream_addEvent = function _ResponseStream_addEvent2(event) { - if (this.ended) - return; - const response = __classPrivateFieldGet12(this, _ResponseStream_instances, "m", _ResponseStream_accumulateResponse).call(this, event); - this._emit("event", event); - switch (event.type) { - case "response.output_text.delta": { - const output = response.output[event.output_index]; - if (!output) { - throw new OpenAIError(`missing output at index ${event.output_index}`); - } - if (output.type === "message") { - const content = output.content[event.content_index]; - if (!content) { - throw new OpenAIError(`missing content at index ${event.content_index}`); - } - if (content.type !== "output_text") { - throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`); - } - this._emit("response.output_text.delta", { - ...event, - snapshot: content.text - }); - } - break; - } - case "response.function_call_arguments.delta": { - const output = response.output[event.output_index]; - if (!output) { - throw new OpenAIError(`missing output at index ${event.output_index}`); - } - if (output.type === "function_call") { - this._emit("response.function_call_arguments.delta", { - ...event, - snapshot: output.arguments - }); - } - break; - } - default: - this._emit(event.type, event); - break; - } - }, _ResponseStream_endRequest = function _ResponseStream_endRequest2() { - if (this.ended) { - throw new OpenAIError(`stream has ended, this shouldn't happen`); - } - const snapshot = __classPrivateFieldGet12(this, _ResponseStream_currentResponseSnapshot, "f"); - if (!snapshot) { - throw new OpenAIError(`request ended without sending any events`); - } - __classPrivateFieldSet10(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); - const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet12(this, _ResponseStream_params, "f")); - __classPrivateFieldSet10(this, _ResponseStream_finalResponse, parsedResponse, "f"); - return parsedResponse; - }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse2(event) { - let snapshot = __classPrivateFieldGet12(this, _ResponseStream_currentResponseSnapshot, "f"); - if (!snapshot) { - if (event.type !== "response.created") { - throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`); - } - snapshot = __classPrivateFieldSet10(this, _ResponseStream_currentResponseSnapshot, event.response, "f"); - return snapshot; - } - switch (event.type) { - case "response.output_item.added": { - snapshot.output.push(event.item); - break; - } - case "response.content_part.added": { - const output = snapshot.output[event.output_index]; - if (!output) { - throw new OpenAIError(`missing output at index ${event.output_index}`); - } - if (output.type === "message") { - output.content.push(event.part); - } - break; - } - case "response.output_text.delta": { - const output = snapshot.output[event.output_index]; - if (!output) { - throw new OpenAIError(`missing output at index ${event.output_index}`); - } - if (output.type === "message") { - const content = output.content[event.content_index]; - if (!content) { - throw new OpenAIError(`missing content at index ${event.content_index}`); - } - if (content.type !== "output_text") { - throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`); - } - content.text += event.delta; - } - break; - } - case "response.function_call_arguments.delta": { - const output = snapshot.output[event.output_index]; - if (!output) { - throw new OpenAIError(`missing output at index ${event.output_index}`); - } - if (output.type === "function_call") { - output.arguments += event.delta; - } - break; - } - case "response.completed": { - __classPrivateFieldSet10(this, _ResponseStream_currentResponseSnapshot, event.response, "f"); - break; - } - } - return snapshot; - }, Symbol.asyncIterator)]() { - const pushQueue = []; - const readQueue = []; - let done = false; - this.on("event", (event) => { - const reader = readQueue.shift(); - if (reader) { - reader.resolve(event); - } else { - pushQueue.push(event); - } - }); - this.on("end", () => { - done = true; - for (const reader of readQueue) { - reader.resolve(void 0); - } - readQueue.length = 0; - }); - this.on("abort", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - this.on("error", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - return { - next: async () => { - if (!pushQueue.length) { - if (done) { - return { value: void 0, done: true }; - } - return new Promise((resolve2, reject) => readQueue.push({ resolve: resolve2, reject })).then((event2) => event2 ? { value: event2, done: false } : { value: void 0, done: true }); - } - const event = pushQueue.shift(); - return { value: event, done: false }; - }, - return: async () => { - this.abort(); - return { value: void 0, done: true }; - } - }; - } - /** - * @returns a promise that resolves with the final Response, or rejects - * if an error occurred or the stream ended prematurely without producing a REsponse. - */ - async finalResponse() { - await this.done(); - const response = __classPrivateFieldGet12(this, _ResponseStream_finalResponse, "f"); - if (!response) - throw new OpenAIError("stream ended without producing a ChatCompletion"); - return response; - } -}; -function finalizeResponse(snapshot, params) { - return maybeParseResponse(snapshot, params); -} - -// node_modules/openai/resources/responses/responses.mjs -var Responses = class extends APIResource { - constructor() { - super(...arguments); - this.inputItems = new InputItems(this._client); - } - create(body, options) { - var _a2; - return this._client.post("/responses", { body, ...options, stream: (_a2 = body.stream) != null ? _a2 : false })._thenUnwrap((rsp) => { - if ("object" in rsp && rsp.object === "response") { - addOutputText(rsp); - } - return rsp; - }); - } - retrieve(responseId, query = {}, options) { - if (isRequestOptions(query)) { - return this.retrieve(responseId, {}, query); - } - return this._client.get(`/responses/${responseId}`, { query, ...options }); - } - /** - * Deletes a model response with the given ID. - */ - del(responseId, options) { - return this._client.delete(`/responses/${responseId}`, { - ...options, - headers: { Accept: "*/*", ...options == null ? void 0 : options.headers } - }); - } - parse(body, options) { - return this._client.responses.create(body, options)._thenUnwrap((response) => parseResponse(response, body)); - } - /** - * Creates a chat completion stream - */ - stream(body, options) { - return ResponseStream.createResponse(this._client, body, options); - } -}; -var ResponseItemsPage = class extends CursorPage { -}; -Responses.InputItems = InputItems; - -// node_modules/openai/resources/uploads/parts.mjs -var Parts = class extends APIResource { - /** - * Adds a - * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an - * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object. - * A Part represents a chunk of bytes from the file you are trying to upload. - * - * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload - * maximum of 8 GB. - * - * It is possible to add multiple Parts in parallel. You can decide the intended - * order of the Parts when you - * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete). - */ - create(uploadId, body, options) { - return this._client.post(`/uploads/${uploadId}/parts`, multipartFormRequestOptions({ body, ...options })); - } -}; - -// node_modules/openai/resources/uploads/uploads.mjs -var Uploads = class extends APIResource { - constructor() { - super(...arguments); - this.parts = new Parts(this._client); - } - /** - * Creates an intermediate - * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object - * that you can add - * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to. - * Currently, an Upload can accept at most 8 GB in total and expires after an hour - * after you create it. - * - * Once you complete the Upload, we will create a - * [File](https://platform.openai.com/docs/api-reference/files/object) object that - * contains all the parts you uploaded. This File is usable in the rest of our - * platform as a regular File object. - * - * For certain `purpose` values, the correct `mime_type` must be specified. Please - * refer to documentation for the - * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files). - * - * For guidance on the proper filename extensions for each purpose, please follow - * the documentation on - * [creating a File](https://platform.openai.com/docs/api-reference/files/create). - */ - create(body, options) { - return this._client.post("/uploads", { body, ...options }); - } - /** - * Cancels the Upload. No Parts may be added after an Upload is cancelled. - */ - cancel(uploadId, options) { - return this._client.post(`/uploads/${uploadId}/cancel`, options); - } - /** - * Completes the - * [Upload](https://platform.openai.com/docs/api-reference/uploads/object). - * - * Within the returned Upload object, there is a nested - * [File](https://platform.openai.com/docs/api-reference/files/object) object that - * is ready to use in the rest of the platform. - * - * You can specify the order of the Parts by passing in an ordered list of the Part - * IDs. - * - * The number of bytes uploaded upon completion must match the number of bytes - * initially specified when creating the Upload object. No Parts may be added after - * an Upload is completed. - */ - complete(uploadId, body, options) { - return this._client.post(`/uploads/${uploadId}/complete`, { body, ...options }); - } -}; -Uploads.Parts = Parts; - -// node_modules/openai/lib/Util.mjs -var allSettledWithThrow = async (promises2) => { - const results = await Promise.allSettled(promises2); - const rejected = results.filter((result) => result.status === "rejected"); - if (rejected.length) { - for (const result of rejected) { - console.error(result.reason); - } - throw new Error(`${rejected.length} promise(s) failed - see the above errors`); - } - const values = []; - for (const result of results) { - if (result.status === "fulfilled") { - values.push(result.value); - } - } - return values; -}; - -// node_modules/openai/resources/vector-stores/files.mjs -var Files2 = class extends APIResource { - /** - * Create a vector store file by attaching a - * [File](https://platform.openai.com/docs/api-reference/files) to a - * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object). - */ - create(vectorStoreId, body, options) { - return this._client.post(`/vector_stores/${vectorStoreId}/files`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Retrieves a vector store file. - */ - retrieve(vectorStoreId, fileId, options) { - return this._client.get(`/vector_stores/${vectorStoreId}/files/${fileId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Update attributes on a vector store file. - */ - update(vectorStoreId, fileId, body, options) { - return this._client.post(`/vector_stores/${vectorStoreId}/files/${fileId}`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - list(vectorStoreId, query = {}, options) { - if (isRequestOptions(query)) { - return this.list(vectorStoreId, {}, query); - } - return this._client.getAPIList(`/vector_stores/${vectorStoreId}/files`, VectorStoreFilesPage, { - query, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Delete a vector store file. This will remove the file from the vector store but - * the file itself will not be deleted. To delete the file, use the - * [delete file](https://platform.openai.com/docs/api-reference/files/delete) - * endpoint. - */ - del(vectorStoreId, fileId, options) { - return this._client.delete(`/vector_stores/${vectorStoreId}/files/${fileId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Attach a file to the given vector store and wait for it to be processed. - */ - async createAndPoll(vectorStoreId, body, options) { - const file = await this.create(vectorStoreId, body, options); - return await this.poll(vectorStoreId, file.id, options); - } - /** - * Wait for the vector store file to finish processing. - * - * Note: this will return even if the file failed to process, you need to check - * file.last_error and file.status to handle these cases - */ - async poll(vectorStoreId, fileId, options) { - const headers = { ...options == null ? void 0 : options.headers, "X-Stainless-Poll-Helper": "true" }; - if (options == null ? void 0 : options.pollIntervalMs) { - headers["X-Stainless-Custom-Poll-Interval"] = options.pollIntervalMs.toString(); - } - while (true) { - const fileResponse = await this.retrieve(vectorStoreId, fileId, { - ...options, - headers - }).withResponse(); - const file = fileResponse.data; - switch (file.status) { - case "in_progress": - let sleepInterval = 5e3; - if (options == null ? void 0 : options.pollIntervalMs) { - sleepInterval = options.pollIntervalMs; - } else { - const headerInterval = fileResponse.response.headers.get("openai-poll-after-ms"); - if (headerInterval) { - const headerIntervalMs = parseInt(headerInterval); - if (!isNaN(headerIntervalMs)) { - sleepInterval = headerIntervalMs; - } - } - } - await sleep(sleepInterval); - break; - case "failed": - case "completed": - return file; - } - } - } - /** - * Upload a file to the `files` API and then attach it to the given vector store. - * - * Note the file will be asynchronously processed (you can use the alternative - * polling helper method to wait for processing to complete). - */ - async upload(vectorStoreId, file, options) { - const fileInfo = await this._client.files.create({ file, purpose: "assistants" }, options); - return this.create(vectorStoreId, { file_id: fileInfo.id }, options); - } - /** - * Add a file to a vector store and poll until processing is complete. - */ - async uploadAndPoll(vectorStoreId, file, options) { - const fileInfo = await this.upload(vectorStoreId, file, options); - return await this.poll(vectorStoreId, fileInfo.id, options); - } - /** - * Retrieve the parsed contents of a vector store file. - */ - content(vectorStoreId, fileId, options) { - return this._client.getAPIList(`/vector_stores/${vectorStoreId}/files/${fileId}/content`, FileContentResponsesPage, { ...options, headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } }); - } -}; -var VectorStoreFilesPage = class extends CursorPage { -}; -var FileContentResponsesPage = class extends Page { -}; -Files2.VectorStoreFilesPage = VectorStoreFilesPage; -Files2.FileContentResponsesPage = FileContentResponsesPage; - -// node_modules/openai/resources/vector-stores/file-batches.mjs -var FileBatches = class extends APIResource { - /** - * Create a vector store file batch. - */ - create(vectorStoreId, body, options) { - return this._client.post(`/vector_stores/${vectorStoreId}/file_batches`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Retrieves a vector store file batch. - */ - retrieve(vectorStoreId, batchId, options) { - return this._client.get(`/vector_stores/${vectorStoreId}/file_batches/${batchId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Cancel a vector store file batch. This attempts to cancel the processing of - * files in this batch as soon as possible. - */ - cancel(vectorStoreId, batchId, options) { - return this._client.post(`/vector_stores/${vectorStoreId}/file_batches/${batchId}/cancel`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Create a vector store batch and poll until all files have been processed. - */ - async createAndPoll(vectorStoreId, body, options) { - const batch = await this.create(vectorStoreId, body); - return await this.poll(vectorStoreId, batch.id, options); - } - listFiles(vectorStoreId, batchId, query = {}, options) { - if (isRequestOptions(query)) { - return this.listFiles(vectorStoreId, batchId, {}, query); - } - return this._client.getAPIList(`/vector_stores/${vectorStoreId}/file_batches/${batchId}/files`, VectorStoreFilesPage, { query, ...options, headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } }); - } - /** - * Wait for the given file batch to be processed. - * - * Note: this will return even if one of the files failed to process, you need to - * check batch.file_counts.failed_count to handle this case. - */ - async poll(vectorStoreId, batchId, options) { - const headers = { ...options == null ? void 0 : options.headers, "X-Stainless-Poll-Helper": "true" }; - if (options == null ? void 0 : options.pollIntervalMs) { - headers["X-Stainless-Custom-Poll-Interval"] = options.pollIntervalMs.toString(); - } - while (true) { - const { data: batch, response } = await this.retrieve(vectorStoreId, batchId, { - ...options, - headers - }).withResponse(); - switch (batch.status) { - case "in_progress": - let sleepInterval = 5e3; - if (options == null ? void 0 : options.pollIntervalMs) { - sleepInterval = options.pollIntervalMs; - } else { - const headerInterval = response.headers.get("openai-poll-after-ms"); - if (headerInterval) { - const headerIntervalMs = parseInt(headerInterval); - if (!isNaN(headerIntervalMs)) { - sleepInterval = headerIntervalMs; - } - } - } - await sleep(sleepInterval); - break; - case "failed": - case "cancelled": - case "completed": - return batch; - } - } - } - /** - * Uploads the given files concurrently and then creates a vector store file batch. - * - * The concurrency limit is configurable using the `maxConcurrency` parameter. - */ - async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) { - var _a2; - if (files == null || files.length == 0) { - throw new Error(`No \`files\` provided to process. If you've already uploaded files you should use \`.createAndPoll()\` instead`); - } - const configuredConcurrency = (_a2 = options == null ? void 0 : options.maxConcurrency) != null ? _a2 : 5; - const concurrencyLimit = Math.min(configuredConcurrency, files.length); - const client = this._client; - const fileIterator = files.values(); - const allFileIds = [...fileIds]; - async function processFiles(iterator) { - for (let item of iterator) { - const fileObj = await client.files.create({ file: item, purpose: "assistants" }, options); - allFileIds.push(fileObj.id); - } - } - const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles); - await allSettledWithThrow(workers); - return await this.createAndPoll(vectorStoreId, { - file_ids: allFileIds - }); - } -}; - -// node_modules/openai/resources/vector-stores/vector-stores.mjs -var VectorStores = class extends APIResource { - constructor() { - super(...arguments); - this.files = new Files2(this._client); - this.fileBatches = new FileBatches(this._client); - } - /** - * Create a vector store. - */ - create(body, options) { - return this._client.post("/vector_stores", { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Retrieves a vector store. - */ - retrieve(vectorStoreId, options) { - return this._client.get(`/vector_stores/${vectorStoreId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Modifies a vector store. - */ - update(vectorStoreId, body, options) { - return this._client.post(`/vector_stores/${vectorStoreId}`, { - body, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - list(query = {}, options) { - if (isRequestOptions(query)) { - return this.list({}, query); - } - return this._client.getAPIList("/vector_stores", VectorStoresPage, { - query, - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Delete a vector store. - */ - del(vectorStoreId, options) { - return this._client.delete(`/vector_stores/${vectorStoreId}`, { - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } - /** - * Search a vector store for relevant chunks based on a query and file attributes - * filter. - */ - search(vectorStoreId, body, options) { - return this._client.getAPIList(`/vector_stores/${vectorStoreId}/search`, VectorStoreSearchResponsesPage, { - body, - method: "post", - ...options, - headers: { "OpenAI-Beta": "assistants=v2", ...options == null ? void 0 : options.headers } - }); - } -}; -var VectorStoresPage = class extends CursorPage { -}; -var VectorStoreSearchResponsesPage = class extends Page { -}; -VectorStores.VectorStoresPage = VectorStoresPage; -VectorStores.VectorStoreSearchResponsesPage = VectorStoreSearchResponsesPage; -VectorStores.Files = Files2; -VectorStores.VectorStoreFilesPage = VectorStoreFilesPage; -VectorStores.FileContentResponsesPage = FileContentResponsesPage; -VectorStores.FileBatches = FileBatches; - -// node_modules/openai/index.mjs -var _a; -var OpenAI = class extends APIClient { - /** - * API Client for interfacing with the OpenAI API. - * - * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined] - * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null] - * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null] - * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API. - * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. - * @param {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections. - * @param {Core.Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. - * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. - * @param {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API. - * @param {Core.DefaultQuery} opts.defaultQuery - Default query parameters to include with every request to the API. - * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. - */ - constructor({ baseURL = readEnv("OPENAI_BASE_URL"), apiKey = readEnv("OPENAI_API_KEY"), organization = ((_a2) => (_a2 = readEnv("OPENAI_ORG_ID")) != null ? _a2 : null)(), project = ((_b) => (_b = readEnv("OPENAI_PROJECT_ID")) != null ? _b : null)(), ...opts2 } = {}) { - var _a3; - if (apiKey === void 0) { - throw new OpenAIError("The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' })."); - } - const options = { - apiKey, - organization, - project, - ...opts2, - baseURL: baseURL || `https://api.openai.com/v1` - }; - if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) { - throw new OpenAIError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n"); - } - super({ - baseURL: options.baseURL, - timeout: (_a3 = options.timeout) != null ? _a3 : 6e5, - httpAgent: options.httpAgent, - maxRetries: options.maxRetries, - fetch: options.fetch - }); - this.completions = new Completions3(this); - this.chat = new Chat(this); - this.embeddings = new Embeddings(this); - this.files = new Files(this); - this.images = new Images(this); - this.audio = new Audio(this); - this.moderations = new Moderations(this); - this.models = new Models(this); - this.fineTuning = new FineTuning(this); - this.vectorStores = new VectorStores(this); - this.beta = new Beta(this); - this.batches = new Batches(this); - this.uploads = new Uploads(this); - this.responses = new Responses(this); - this._options = options; - this.apiKey = apiKey; - this.organization = organization; - this.project = project; - } - defaultQuery() { - return this._options.defaultQuery; - } - defaultHeaders(opts2) { - return { - ...super.defaultHeaders(opts2), - "OpenAI-Organization": this.organization, - "OpenAI-Project": this.project, - ...this._options.defaultHeaders - }; - } - authHeaders(opts2) { - return { Authorization: `Bearer ${this.apiKey}` }; - } - stringifyQuery(query) { - return stringify(query, { arrayFormat: "brackets" }); - } -}; -_a = OpenAI; -OpenAI.OpenAI = _a; -OpenAI.DEFAULT_TIMEOUT = 6e5; -OpenAI.OpenAIError = OpenAIError; -OpenAI.APIError = APIError; -OpenAI.APIConnectionError = APIConnectionError; -OpenAI.APIConnectionTimeoutError = APIConnectionTimeoutError; -OpenAI.APIUserAbortError = APIUserAbortError; -OpenAI.NotFoundError = NotFoundError; -OpenAI.ConflictError = ConflictError; -OpenAI.RateLimitError = RateLimitError; -OpenAI.BadRequestError = BadRequestError; -OpenAI.AuthenticationError = AuthenticationError; -OpenAI.InternalServerError = InternalServerError; -OpenAI.PermissionDeniedError = PermissionDeniedError; -OpenAI.UnprocessableEntityError = UnprocessableEntityError; -OpenAI.toFile = toFile; -OpenAI.fileFromPath = fileFromPath; -OpenAI.Completions = Completions3; -OpenAI.Chat = Chat; -OpenAI.ChatCompletionsPage = ChatCompletionsPage; -OpenAI.Embeddings = Embeddings; -OpenAI.Files = Files; -OpenAI.FileObjectsPage = FileObjectsPage; -OpenAI.Images = Images; -OpenAI.Audio = Audio; -OpenAI.Moderations = Moderations; -OpenAI.Models = Models; -OpenAI.ModelsPage = ModelsPage; -OpenAI.FineTuning = FineTuning; -OpenAI.VectorStores = VectorStores; -OpenAI.VectorStoresPage = VectorStoresPage; -OpenAI.VectorStoreSearchResponsesPage = VectorStoreSearchResponsesPage; -OpenAI.Beta = Beta; -OpenAI.Batches = Batches; -OpenAI.BatchesPage = BatchesPage; -OpenAI.Uploads = Uploads; -OpenAI.Responses = Responses; -var openai_default = OpenAI; - -// src/providers/openai/provider.ts -var OpenAIProvider = class { - constructor(settings) { - this.aborted = false; - this.settings = settings; - this.client = new openai_default({ - apiKey: this.settings.apiKey, - dangerouslyAllowBrowser: true - }); - } - async *generate(editor, options) { - var _a2, _b; - this.aborted = false; - this.abortcontroller = new AbortController(); - const initialPosition = editor.getCursor(); - const prompt = preparePrompt(editor, options.userPrompt); - const stream = await this.client.chat.completions.create({ - model: options.model, - messages: [ - { role: "system", content: options.systemPrompt }, - { role: "user", content: prompt } - ], - temperature: options.temperature, - stream: true - }, { signal: this.abortcontroller.signal }); - let completion = ""; - for await (const chunk of stream) { - if (this.aborted) { - return; - } - if (this.cursorMoved(editor, initialPosition)) { - this.abort(); - return; - } - const content = ((_b = (_a2 = chunk.choices[0]) == null ? void 0 : _a2.delta) == null ? void 0 : _b.content) || ""; - completion += content; - yield completion; - } - } - async abort() { - if (this.aborted) - return; - this.aborted = true; - this.abortcontroller.abort(); - } - async updateModels() { - if (!this.client) { - return this.settings.models; - } - const models = await this.client.models.list(); - const chatModels = models.data.filter((model4) => model4.id.includes("gpt")).map((model4) => model4.id); - this.settings.models = chatModels; - return chatModels; - } - async connectionTest() { - try { - await this.client.models.list(); - return true; - } catch (error) { - console.error("Error testing connection:", error); - return false; - } - } - cursorMoved(editor, initialPosition) { - const currentPosition = editor.getCursor(); - return currentPosition.line !== initialPosition.line || currentPosition.ch !== initialPosition.ch; - } -}; - -// src/providers/openai-compat/provider.ts -var OpenAICompatibleProvider = class { - constructor(settings) { - this.aborted = false; - this.settings = settings; - this.client = new openai_default({ - baseURL: this.settings.baseUrl, - apiKey: this.settings.apiKey, - dangerouslyAllowBrowser: true - }); - } - async *generate(editor, options) { - var _a2, _b; - this.aborted = false; - this.abortcontroller = new AbortController(); - const initialPosition = editor.getCursor(); - const prompt = preparePrompt(editor, options.userPrompt); - const stream = await this.client.chat.completions.create({ - model: options.model, - messages: [ - { role: "system", content: options.systemPrompt }, - { role: "user", content: prompt } - ], - temperature: options.temperature, - stream: true - }, { signal: this.abortcontroller.signal }); - let completion = ""; - for await (const chunk of stream) { - if (this.aborted) { - return; - } - if (this.cursorMoved(editor, initialPosition)) { - this.abort(); - return; - } - const content = ((_b = (_a2 = chunk.choices[0]) == null ? void 0 : _a2.delta) == null ? void 0 : _b.content) || ""; - completion += content; - yield completion; - } - } - async abort() { - if (this.aborted) - return; - this.aborted = true; - this.abortcontroller.abort(); - } - async updateModels() { - if (!this.client) { - return this.settings.models; - } - const models = await this.client.models.list(); - const chatModels = models.data.filter((model4) => model4.id.includes("gpt")).map((model4) => model4.id); - this.settings.models = chatModels; - return chatModels; - } - async connectionTest() { - try { - await this.client.models.list(); - return true; - } catch (error) { - console.error("Error testing connection:", error); - return false; - } - } - cursorMoved(editor, initialPosition) { - const currentPosition = editor.getCursor(); - return currentPosition.line !== initialPosition.line || currentPosition.ch !== initialPosition.ch; - } -}; - -// src/providers/factory.ts -var ProviderFactory = class { - constructor(plugin2) { - this.plugin = plugin2; - this.settings = this.plugin.settings; - this.providers = this.buildProviders(this.settings); - } - rebuildProviders() { - this.providers = this.buildProviders(this.settings); - } - getProvider(provider) { - return this.providers[provider]; - } - async updateModels(provider) { - return this.providers[provider].updateModels(); - } - async connectionTest(provider) { - return this.providers[provider].connectionTest(); - } - buildProviders(settings) { - return { - ["ollama" /* OLLAMA */]: new OllamaProvider(settings.providers.ollama), - ["openai" /* OPENAI */]: new OpenAIProvider(settings.providers.openai), - ["openai_compatible" /* OPENAI_COMPATIBLE */]: new OpenAICompatibleProvider(settings.providers.openai_compatible) - }; - } -}; - -// src/settings/settings.ts -var DEFAULT_PROFILE = "default"; -var DEFAULT_PATH = "/"; -var DEFAULT_SETTINGS = { - enabled: false, - providers: { - openai: { - integration: "openai" /* OPENAI */, - name: "Open AI", - description: "Use OpenAI APIs to generate text.", - apiKey: "api-key", - model: "gpt-4o-mini", - models: ["gpt-4o", "gpt-4o-mini"], - configured: false - }, - ollama: { - integration: "ollama" /* OLLAMA */, - name: "Ollama", - description: "Use your own Ollama instance to generate text.", - host: "http://localhost:11434", - models: ["llama3.2:latest", "mistral-nemo"], - configured: false - }, - openai_compatible: { - integration: "openai_compatible" /* OPENAI_COMPATIBLE */, - name: "OpenAI Compatible", - description: "Use OpenAI compatible APIs to generate completions.", - apiKey: "api-key", - baseUrl: "https://api.openai.com/v1", - model: "gpt-4o-mini", - models: ["gpt-4o", "gpt-4o-mini"], - configured: false - } - }, - profiles: { - default: { - name: "Default Profile", - provider: "ollama" /* OLLAMA */, - delayMs: 500, - splitStrategy: "sentence", - completionOptions: { - model: "gemma3:12b", - userPrompt: "If the last sentence is incomplete, only complete the sentence and nothing else. If the last sentence is complete, generate a new sentence that follows logically:\n---\n{{pre_cursor}}", - systemPrompt: "You are a writing assistant that predicts and completes sentences in a natural, context-aware manner. Your goal is to continue the user\u2019s text smoothly, maintaining coherence, fluency, and style. Adapt to the user\u2019s writing tone, whether formal, informal, creative, or technical. Ensure that completions feel intuitive, useful, and free of unnecessary repetition. Do not generate completion that includes the prompt itself.", - temperature: 0.5 - } - } - }, - path_configs: { - "/": { - profile: DEFAULT_PROFILE, - enabled: true - } - } -}; -function createProfile(settings) { - const profiles = settings.profiles; - const id = Math.random().toString(36).substring(2, 6); - let name = "New Profile"; - let i4 = 1; - Object.entries(profiles).forEach(([, value]) => { - if (value.name === name) { - name = `New Profile ${i4}`; - i4++; - } - }); - const defaultProfile = profiles[DEFAULT_PROFILE]; - const profile = { - ...defaultProfile, - name - }; - profiles[id] = profile; - return id; -} -function findPathConfig(settings, path) { - return settings.path_configs[path] || settings.path_configs[DEFAULT_PATH]; -} -function createPathConfig(settings, path, profile) { - path = path || DEFAULT_PATH; - settings.path_configs[path] = { profile, enabled: true }; -} -function resetSettings(settings) { - Object.assign(settings, DEFAULT_SETTINGS); -} - -// src/settings/tab.ts -var import_obsidian2 = require("obsidian"); - -// src/settings/provider.ts -var import_obsidian = require("obsidian"); -var ProviderSettingsModal = class extends import_obsidian.Modal { - constructor(app, plugin2, providerType) { - super(app); - this.plugin = plugin2; - this.providerType = providerType; - this.modalEl.addClass("inscribe-provider-settings-modal"); - } - onOpen() { - this.renderProviderSettings(); - } - async renderProviderSettings() { - const { contentEl } = this; - contentEl.empty(); - switch (this.providerType) { - case "ollama" /* OLLAMA */: - this.renderOllamaSettings(); - break; - case "openai" /* OPENAI */: - this.renderOpenAISettings(); - break; - case "openai_compatible" /* OPENAI_COMPATIBLE */: - this.renderOpenAICompatibleSettings(); - break; - default: - contentEl.createEl("h2", { text: "Unknown provider type" }); - break; - } - } - async renderOllamaSettings() { - const { contentEl } = this; - contentEl.empty(); - this.setTitle("Ollama Settings"); - new import_obsidian.Setting(contentEl).setName("Ollama Host").setDesc("The host of the Ollama API").addText((text) => { - text.setValue(this.plugin.settings.providers.ollama.host).onChange(async (value) => { - this.plugin.settings.providers.ollama.host = value; - await this.plugin.saveSettings(); - }); - }); - this.renderConnectionStatus(this.plugin.settings.providers.ollama); - } - async renderOpenAISettings() { - const { contentEl } = this; - contentEl.empty(); - this.setTitle("OpenAI Settings"); - new import_obsidian.Setting(contentEl).setName("OpenAI API Key").setDesc("The API key for OpenAI").addText((text) => { - text.setValue(this.plugin.settings.providers.openai.apiKey).onChange(async (value) => { - this.plugin.settings.providers.openai.apiKey = value; - await this.plugin.saveSettings(); - }); - }); - this.renderConnectionStatus(this.plugin.settings.providers.openai); - } - async renderOpenAICompatibleSettings() { - const { contentEl } = this; - contentEl.empty(); - this.setTitle("OpenAI Compatible Provider Settings"); - new import_obsidian.Setting(contentEl).setName("API Key").setDesc("The API key for OpenAI Compatible Provider").addText((text) => { - text.setValue(this.plugin.settings.providers.openai_compatible.apiKey).onChange(async (value) => { - this.plugin.settings.providers.openai_compatible.apiKey = value; - await this.plugin.saveSettings(); - }); - }); - new import_obsidian.Setting(contentEl).setName("Base URL").setDesc("The base URL for OpenAI Compatible Provider").addText((text) => { - text.setValue(this.plugin.settings.providers.openai_compatible.baseUrl).onChange(async (value) => { - this.plugin.settings.providers.openai_compatible.baseUrl = value; - await this.plugin.saveSettings(); - }); - }); - this.renderConnectionStatus(this.plugin.settings.providers.openai_compatible); - } - renderConnectionStatus(provider) { - new import_obsidian.Setting(this.contentEl).setName("Status").setDesc(`${provider.configured ? "Successful" : "Failed"}`).addButton((button) => { - button.setButtonText(`Connection Test`).onClick(async () => { - button.setDisabled(true).setButtonText("Testing..."); - provider.configured = await this.plugin.providerFactory.connectionTest(this.providerType); - await this.plugin.saveSettings(); - new import_obsidian.Notice(provider.configured ? "Connected!" : "Failed to connect"); - this.renderProviderSettings(); - }); - }); - } - onClose() { - var _a2; - const { contentEl } = this; - contentEl.empty(); - (_a2 = this.plugin.app.setting) == null ? void 0 : _a2.openTabById(this.plugin.manifest.id); - } -}; - -// src/settings/tab.ts -var InscribeSettingsTab = class extends import_obsidian2.PluginSettingTab { - constructor(plugin2) { - super(plugin2.app, plugin2); - this.plugin = plugin2; - } - display() { - this.containerEl.empty(); - const generalContainer = document.createElement("div"); - this.containerEl.appendChild(generalContainer); - const providersContainer = document.createElement("div"); - this.containerEl.appendChild(providersContainer); - const profilesContainer = document.createElement("div"); - this.containerEl.appendChild(profilesContainer); - const pathMappingsContainer = document.createElement("div"); - this.containerEl.appendChild(pathMappingsContainer); - this.generalSection = new GeneralSection(generalContainer, this.plugin, this.display.bind(this)); - this.providersSection = new ProvidersSection(providersContainer, this.app, this.plugin); - this.pathConfigsSection = new PathConfigsSection(pathMappingsContainer, this.plugin); - this.profilesSection = new ProfilesSection(profilesContainer, this.plugin, this.pathConfigsSection.render.bind(this.pathConfigsSection)); - this.generalSection.render(); - this.providersSection.render(); - this.profilesSection.render(); - this.pathConfigsSection.render(); - } -}; -var GeneralSection = class { - constructor(container, plugin2, displayFunc) { - this.container = container; - this.plugin = plugin2; - this.displayFunc = displayFunc; - } - async render() { - this.container.empty(); - new import_obsidian2.Setting(this.container).setName("Enabled").setDesc("Enable or disable completions globally").addToggle((toggle) => { - toggle.setValue(this.plugin.settings.enabled).onChange(async (value) => { - this.plugin.settings.enabled = value; - await this.plugin.saveSettings(); - this.plugin.statusBarItem.render(); - }); - }); - new import_obsidian2.Setting(this.container).setName("Reset Settings").setDesc("Reset all settings to default").addButton((button) => { - button.setWarning().setButtonText("Reset").setTooltip("Reset settings to default").onClick(async () => { - resetSettings(this.plugin.settings); - await this.plugin.saveSettings(); - this.displayFunc(); - this.plugin.statusBarItem.render(); - new import_obsidian2.Notice("Settings reset to default"); - }); - }); - } -}; -var ProvidersSection = class { - constructor(container, app, plugin2) { - this.app = app; - this.container = container; - this.plugin = plugin2; - } - async render() { - this.container.empty(); - this.container.createEl("h3", { text: "Providers" }); - new import_obsidian2.Setting(this.container).setName("Ollama").setDesc("Local AI provider running on your machine").addExtraButton((button) => this.createConfigureButton( - button, - "ollama" /* OLLAMA */, - this.plugin.settings.providers.ollama.configured - )); - new import_obsidian2.Setting(this.container).setName("OpenAI").setDesc("OpenAI API").addExtraButton((button) => this.createConfigureButton( - button, - "openai" /* OPENAI */, - this.plugin.settings.providers.openai.configured - )); - new import_obsidian2.Setting(this.container).setName("OpenAI Compatible").setDesc("OpenAI compatible provider").addExtraButton((button) => this.createConfigureButton( - button, - "openai_compatible" /* OPENAI_COMPATIBLE */, - this.plugin.settings.providers.openai_compatible.configured - )); - } - createConfigureButton(button, type, configured) { - button.extraSettingsEl.setCssProps({ - color: configured ? "var(--text-success)" : "var(--text-warning)" - }); - button.setIcon(configured ? "cog" : "cog").setTooltip(configured ? "Provider configured" : "Provider not configured").onClick(() => { - new ProviderSettingsModal(this.app, this.plugin, type).open(); - }); - } -}; -var ProfilesSection = class { - constructor(container, plugin2, onProfileUpdate) { - this.displayedProfileId = DEFAULT_PROFILE; - this.container = container; - this.plugin = plugin2; - this.onProfileUpdate = onProfileUpdate; - this.selectionContainer = document.createElement("div"); - this.profileContainer = document.createElement("div"); - this.container.appendChild(this.selectionContainer); - this.container.appendChild(this.profileContainer); - } - async render() { - this.container.empty(); - this.container.createEl("h3", { text: "Profiles" }); - this.container.appendChild(this.selectionContainer); - this.container.createEl("div", { cls: "setting-item" }); - this.container.appendChild(this.profileContainer); - await this.renderProfileSelection(); - const displayedProfile = this.plugin.settings.profiles[this.displayedProfileId]; - await this.renderProfileSettings(displayedProfile); - } - async renderProfileSelection() { - this.selectionContainer.empty(); - new import_obsidian2.Setting(this.selectionContainer).setName("Manage profile").setHeading().setDesc("Select a profile to configure its settings").addDropdown((dropdown) => this.profileDropdown(dropdown)).addExtraButton((button) => this.createNewProfileButton(button)).addExtraButton((button) => this.createDeleteProfileButton(button)); - } - profileDropdown(dropdown) { - Object.entries(this.plugin.settings.profiles).forEach(([id, profile]) => { - dropdown.addOption(id, profile.name); - }); - dropdown.setValue(this.displayedProfileId).onChange(async (value) => { - this.displayedProfileId = value; - await this.renderProfileSettings(this.plugin.settings.profiles[value]); - }); - } - createNewProfileButton(button) { - button.setIcon("plus").setTooltip("Create new profile").onClick(async () => { - this.displayedProfileId = createProfile(this.plugin.settings); - await this.plugin.saveSettings(); - await this.render(); - this.onProfileUpdate(); - }); - } - createDeleteProfileButton(button) { - const isDefault = this.displayedProfileId === DEFAULT_PROFILE; - button.setDisabled(isDefault).setIcon("trash").setTooltip(isDefault ? "Cannot delete default profile" : "Delete profile").onClick(async () => { - delete this.plugin.settings.profiles[this.displayedProfileId]; - this.displayedProfileId = DEFAULT_PROFILE; - await this.plugin.saveSettings(); - await this.render(); - this.onProfileUpdate(); - }); - } - async renderProfileSettings(profile) { - this.profileContainer.empty(); - new import_obsidian2.Setting(this.profileContainer).setName("Profile Name").setDesc("Name of the profile").addText((text) => { - text.setValue(profile.name).onChange(async (value) => { - profile.name = value; - await this.plugin.saveSettings(); - }); - }); - new import_obsidian2.Setting(this.profileContainer).setName("AI Provider").setDesc("Choose your preferred AI provider").addDropdown((dropdown) => { - dropdown.addOption("ollama" /* OLLAMA */, "Ollama").addOption("openai" /* OPENAI */, "OpenAI").addOption("openai_compatible" /* OPENAI_COMPATIBLE */, "OpenAI Compatible").setValue(profile.provider).onChange(async (value) => { - profile.provider = value; - await this.plugin.saveSettings(); - await this.renderProfileSettings(profile); - }); - }); - new import_obsidian2.Setting(this.profileContainer).setName("Model").setDesc("Select the model to use for completions").addExtraButton((button) => { - button.setIcon("refresh-ccw").setTooltip("Update model list").onClick(async () => { - await this.plugin.providerFactory.updateModels(profile.provider); - await this.plugin.saveSettings(); - await this.renderProfileSettings(profile); - new import_obsidian2.Notice("Model list updated"); - }); - }).addDropdown(async (dropdown) => { - const models = this.plugin.settings.providers[profile.provider].models; - dropdown.addOptions(Object.fromEntries(models.map((model4) => [model4, model4]))).setValue(profile.completionOptions.model).onChange(async (value) => { - profile.completionOptions.model = value; - await this.plugin.saveSettings(); - }); - }); - new import_obsidian2.Setting(this.profileContainer).setName("Temperature").setDesc("Control the randomness of completions (0 = deterministic, 1 = creative)").addSlider((slider) => { - slider.setLimits(0, 1, 0.1).setValue(profile.completionOptions.temperature).setDynamicTooltip().onChange(async (value) => { - profile.completionOptions.temperature = value; - await this.plugin.saveSettings(); - }); - }); - new import_obsidian2.Setting(this.profileContainer).setName("Suggestion Delay").setDesc("Delay in milliseconds before fetching suggestions").addText((text) => { - text.inputEl.setAttr("type", "number"); - text.setPlaceholder("1000").setValue(String(profile.delayMs)).onChange(async (value) => { - profile.delayMs = parseInt(value); - await this.plugin.saveSettings(); - }); - }); - new import_obsidian2.Setting(this.profileContainer).setName("Completion Strategy").setDesc("Choose how completions should be split and accepted").addDropdown((dropdown) => { - dropdown.addOption("word", "Word by Word").addOption("sentence", "Sentence by Sentence").addOption("paragraph", "Paragraph by Paragraph").addOption("full", "Full Completion").setValue(profile.splitStrategy).onChange(async (value) => { - profile.splitStrategy = value; - await this.plugin.saveSettings(); - }); - }); - new import_obsidian2.Setting(this.profileContainer).setName("System Prompt").setDesc("Set system prompt").addTextArea((text) => { - text.inputEl.rows = 7; - text.inputEl.setCssStyles({ - width: "100%", - resize: "vertical", - position: "relative" - }); - text.setValue(profile.completionOptions.systemPrompt).onChange( - async (value) => { - profile.completionOptions.systemPrompt = value; - await this.plugin.saveSettings(); - } - ); - }); - new import_obsidian2.Setting(this.profileContainer).setName("User Prompt").setDesc("User prompt template.").addExtraButton((button) => { - button.setIcon("list").setTooltip("Insert mustache template variables").onClick(async () => { - const text = profile.completionOptions.userPrompt + "\n" + TEMPLATE_VARIABLES; - profile.completionOptions.userPrompt = text; - await this.plugin.saveSettings(); - await this.renderProfileSettings(profile); - }); - }).addTextArea((text) => { - text.inputEl.rows = 7; - text.inputEl.setCssStyles({ - width: "100%", - resize: "vertical", - position: "relative" - }); - text.setValue(profile.completionOptions.userPrompt).onChange( - async (value) => { - profile.completionOptions.userPrompt = value; - await this.plugin.saveSettings(); - } - ); - }); - } -}; -var PathConfigsSection = class { - constructor(container, plugin2) { - this.container = container; - this.plugin = plugin2; - this.tableContainer = document.createElement("div"); - } - async render() { - this.container.empty(); - this.container.createEl("h3", { text: "Path configs" }); - this.container.createEl("p", { - text: "You can assign profiles to paths. Paths are matched by prefix, with longer paths taking precedence. For example, '/Daily' will match all files in the Daily folder.", - cls: "setting-item" - }); - this.container.appendChild(this.tableContainer); - await this.renderMappingsTable(); - } - async renderMappingsTable() { - this.tableContainer.empty(); - const table = this.tableContainer.createEl("table", { cls: "mapping-table" }); - const header = table.createEl("tr"); - header.createEl("th", { text: "Path" }); - header.createEl("th", { text: "Profile" }); - header.createEl("th", { text: "" }); - header.createEl("th", { text: "" }); - const newRow = table.createEl("tr", { cls: "new-mapping-row" }); - let pathInput = ""; - let selectedProfile = DEFAULT_PROFILE; - const pathCell = newRow.createEl("td"); - new import_obsidian2.TextComponent(pathCell).setPlaceholder("Enter path (e.g., Daily/Work)").onChange((value) => { - pathInput = value; - }); - const profileCell = newRow.createEl("td"); - const profileDropdown = new import_obsidian2.DropdownComponent(profileCell).setValue(selectedProfile); - Object.entries(this.plugin.settings.profiles).forEach(([id, profile]) => { - profileDropdown.addOption(id, profile.name); - }); - profileDropdown.onChange((value) => { - selectedProfile = value; - }); - newRow.createEl("td"); - const actionCell = newRow.createEl("td"); - new import_obsidian2.ExtraButtonComponent(actionCell).setIcon("plus").setTooltip("Add profile mapping").onClick(async () => { - if (!pathInput) { - new import_obsidian2.Notice("Path cannot be empty"); - return; - } - createPathConfig(this.plugin.settings, pathInput, selectedProfile); - await this.plugin.saveSettings(); - await this.render(); - }); - Object.entries(this.plugin.settings.path_configs).forEach(([path, mapping]) => { - const row = table.createEl("tr"); - const isDefaultMapping = path === DEFAULT_PATH; - row.createEl("td", { text: isDefaultMapping ? "Root" : path }); - const profileCell2 = row.createEl("td"); - const profileDropdown2 = new import_obsidian2.DropdownComponent(profileCell2).setDisabled(isDefaultMapping); - Object.entries(this.plugin.settings.profiles).forEach(([id, profile]) => { - profileDropdown2.addOption(id, profile.name); - }); - profileDropdown2.setValue(mapping.profile); - profileDropdown2.onChange(async (value) => { - createPathConfig(this.plugin.settings, path, value); - await this.plugin.saveSettings(); - }); - const deleteCell = row.createEl("td"); - new import_obsidian2.ExtraButtonComponent(deleteCell).setIcon("trash").setDisabled(isDefaultMapping).setTooltip("Delete mapping").onClick(async () => { - delete this.plugin.settings.path_configs[path]; - await this.plugin.saveSettings(); - await this.render(); - }); - const enabledCell = row.createEl("td"); - new import_obsidian2.ToggleComponent(enabledCell).setTooltip("Enable/disable mapping").setValue(mapping.enabled).onChange(async (value) => { - this.plugin.settings.path_configs[path].enabled = value; - await this.plugin.saveSettings(); - this.plugin.statusBarItem.render(); - }); - }); - } -}; - -// src/profile/service.ts -var ProfileService = class { - constructor(plugin2) { - this.inlineSuggestionOptions = { delayMs: 300, splitStrategy: "sentence" }; - this.profileChangeCallbacks = []; - this.plugin = plugin2; - this.app = this.plugin.app; - this.settings = this.plugin.settings; - this.update(this.getActiveFilePath()); - this.app.workspace.on("file-open", (file) => { - if (!file) - return; - this.update(file.path); - }); - } - getActiveProfile() { - return this.activeProfile; - } - getActivePath() { - return this.activePath; - } - getActivePathConfig() { - return findPathConfig(this.settings, this.activePath); - } - getOptions() { - return { - delayMs: this.activeProfile.delayMs, - splitStrategy: this.activeProfile.splitStrategy - }; - } - onProfileChange(callback) { - this.profileChangeCallbacks.push(callback); - } - update(filePath) { - [this.activePath, this.activeProfile] = this.resolveProfileFromPath(filePath); - this.profileChangeCallbacks.forEach((cb) => cb(this.activeProfile)); - } - getActiveFilePath() { - const activeEditor = this.app.workspace.activeEditor; - if (!activeEditor) - return ""; - if (!activeEditor.file) - return ""; - return activeEditor.file.path; - } - resolveProfileFromPath(filePath) { - if (!this.settings.path_configs || Object.keys(this.settings.path_configs).length === 0) { - return [DEFAULT_PATH, this.settings.profiles[DEFAULT_PROFILE]]; - } - const normalizedPath = filePath.replace(/^\/+|\/+$/g, ""); - let longestMatch = ""; - let matchedProfile = DEFAULT_PROFILE; - let pathMapping = "/"; - Object.entries(this.settings.path_configs).forEach(([path, mapping]) => { - const normalizedMappingPath = path.replace(/^\/+|\/+$/g, ""); - if (normalizedPath.startsWith(normalizedMappingPath)) { - if (normalizedMappingPath.length > longestMatch.length) { - longestMatch = normalizedMappingPath; - matchedProfile = mapping.profile; - pathMapping = path; - } - } - }); - return [pathMapping, this.settings.profiles[matchedProfile]]; - } - onunload() { - this.app.workspace.off("file-open", this.update); - } -}; - -// src/completions/service.ts -var CompletionService = class { - constructor(app, settings, profileService, providerFactory) { - this.completionStatusListeners = []; - this.app = app; - this.settings = settings; - this.profileService = profileService; - this.providerFactory = providerFactory; - } - async *fetchCompletion() { - if (!this.completionEnabled()) - return; - const activeEditor = this.app.workspace.activeEditor; - if (!activeEditor) - return; - if (!activeEditor.editor) - return; - const profile = this.profileService.getActiveProfile(); - const provider = this.providerFactory.getProvider(profile.provider); - const options = profile.completionOptions; - yield* this.complete(activeEditor.editor, provider, options); - } - onCompletionStatusChange(listener) { - this.completionStatusListeners.push(listener); - } - completionEnabled() { - return this.settings.enabled && this.profileService.getActivePathConfig().enabled; - } - notifyCompletionStatus(isGenerating) { - for (const listener of this.completionStatusListeners) { - listener(isGenerating); - } - } - async *complete(editor, provider, options) { - await provider.abort(); - const cursor = editor.getCursor(); - const currentLine = editor.getLine(cursor.line); - if (!currentLine.length) - return; - const lastChar = currentLine[cursor.ch - 1]; - if (lastChar !== " ") - return; - this.notifyCompletionStatus(true); - for await (const text of provider.generate(editor, options)) { - yield { text }; - } - this.notifyCompletionStatus(false); - } -}; - -// src/statusbar/statusbar.ts -var import_obsidian3 = require("obsidian"); -var StatusBarItem = class { - constructor(plugin2, profileService, completionService) { - this.isGenerating = false; - this.plugin = plugin2; - this.profileService = profileService; - this.completionService = completionService; - this.profileService.onProfileChange(this.handleProfileChange.bind(this)); - this.completionService.onCompletionStatusChange(this.handleCompletionStatusChange.bind(this)); - this.statusBarItem = this.createStatusBarItem(); - this.render(); - } - render() { - if (this.isGenerating) { - this.statusBarItem.addClass("active"); - (0, import_obsidian3.setTooltip)(this.statusBarItem, "Inscribing...", { placement: "top" }); - } else { - this.statusBarItem.removeClass("active"); - if (this.completionService.completionEnabled()) { - this.statusBarItem.removeClass("completion-disabled"); - this.updateProfile(this.profileService.getActiveProfile().name); - } else { - this.statusBarItem.addClass("completion-disabled"); - (0, import_obsidian3.setTooltip)(this.statusBarItem, `Completion disabled`, { placement: "top" }); - } - } - } - createStatusBarItem() { - const item = this.plugin.addStatusBarItem(); - (0, import_obsidian3.setIcon)(item, "feather"); - item.addClasses(["status-bar-item-icon", `mod-clickable`]); - item.addEventListener("click", this.displayContextMenu.bind(this)); - return item; - } - displayContextMenu(event) { - const menu = new import_obsidian3.Menu(); - const globalCompletionEnabled = this.plugin.settings.enabled; - const pathCompletionEnabled = this.profileService.getActivePathConfig().enabled; - const path = this.profileService.getActivePath(); - const profile = this.profileService.getActiveProfile(); - menu.addItem((item) => { - item.setTitle(`Profile: ${profile.name}`).setIsLabel(true); - }); - menu.addItem((item) => { - item.setTitle(`${pathCompletionEnabled ? "Disable" : "Enable"} this path: {${path}]}`).setChecked(pathCompletionEnabled).onClick(() => { - const pathConfig = findPathConfig(this.plugin.settings, path); - pathConfig.enabled = !pathCompletionEnabled; - this.plugin.saveSettings(); - this.render(); - }); - }); - menu.addItem((item) => { - item.setTitle(`${globalCompletionEnabled ? "Disable" : "Enable"} globally`).setChecked(globalCompletionEnabled).onClick(() => { - this.plugin.settings.enabled = !globalCompletionEnabled; - this.plugin.saveSettings(); - this.render(); - }); - }); - menu.addSeparator(); - menu.addItem((item) => { - item.setTitle("Open settings").onClick(() => { - const setting = this.plugin.app.setting; - setting.open(); - setting.openTabById(this.plugin.manifest.id); - }); - }); - menu.showAtMouseEvent(event); - } - handleCompletionStatusChange(isGenerating) { - this.isGenerating = isGenerating; - this.render(); - } - handleProfileChange(profile) { - this.render(); - } - updateProfile(profile) { - (0, import_obsidian3.setTooltip)(this.statusBarItem, `Profile: ${profile}`, { placement: "top" }); - } -}; - -// src/main.ts -var Inscribe = class extends import_obsidian4.Plugin { - async onload() { - await this.loadSettings(); - this.profileService = new ProfileService(this); - this.providerFactory = new ProviderFactory(this); - this.completionEngine = new CompletionService(this.app, this.settings, this.profileService, this.providerFactory); - this.statusBarItem = new StatusBarItem(this, this.profileService, this.completionEngine); - this.addSettingTab(new InscribeSettingsTab(this)); - await this.setupExtension(); - } - async onunload() { - this.profileService.onunload(); - } - async setupExtension() { - const extension = inlineSuggestions({ - fetchFunc: () => this.completionEngine.fetchCompletion(), - getOptions: () => this.profileService.getOptions() - }); - this.registerEditorExtension(extension); - } - async loadSettings() { - this.settings = Object.assign( - {}, - DEFAULT_SETTINGS, - await this.loadData() - ); - } - async saveSettings() { - await this.saveData(this.settings); - this.providerFactory.rebuildProviders(); - } -}; -// Annotate the CommonJS export names for ESM import in node: -0 && (module.exports = {}); -/*! Bundled license information: - -web-streams-polyfill/dist/ponyfill.mjs: - (** - * @license - * web-streams-polyfill v4.0.0-beta.3 - * Copyright 2021 Mattias Buelens, Diwank Singh Tomer and other contributors. - * This code is released under the MIT license. - * SPDX-License-Identifier: MIT - *) - -formdata-node/lib/esm/blobHelpers.js: - (*! Based on fetch-blob. MIT License. Jimmy Wärting & David Frank *) - -formdata-node/lib/esm/Blob.js: - (*! Based on fetch-blob. MIT License. Jimmy Wärting & David Frank *) - -humanize-ms/index.js: - (*! - * humanize-ms - index.js - * Copyright(c) 2014 dead_horse - * MIT Licensed - *) - -node-domexception/index.js: - (*! node-domexception. MIT License. Jimmy Wärting *) - -mustache/mustache.mjs: - (*! - * mustache.js - Logic-less {{mustache}} templates with JavaScript - * http://github.com/janl/mustache.js - *) -*/ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9kaXN0L2ZldGNoLnVtZC5qcyIsICJub2RlX21vZHVsZXMvd2ViaWRsLWNvbnZlcnNpb25zL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvdXRpbHMuanMiLCAibm9kZV9tb2R1bGVzL3RyNDYvbGliL21hcHBpbmdUYWJsZS5qc29uIiwgIm5vZGVfbW9kdWxlcy90cjQ2L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi91cmwtc3RhdGUtbWFjaGluZS5qcyIsICJub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvVVJMLWltcGwuanMiLCAibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC5qcyIsICJub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvcHVibGljLWFwaS5qcyIsICJub2RlX21vZHVsZXMvbm9kZS1mZXRjaC9saWIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dlYi1zdHJlYW1zLXBvbHlmaWxsL2Rpc3QvcG9ueWZpbGwubWpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtZGF0YS1ub2RlL2xpYi9lc20vaXNGdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvZm9ybWRhdGEtbm9kZS9saWIvZXNtL2Jsb2JIZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtZGF0YS1ub2RlL2xpYi9lc20vQmxvYi5qcyIsICJub2RlX21vZHVsZXMvZm9ybWRhdGEtbm9kZS9saWIvZXNtL0ZpbGUuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm1kYXRhLW5vZGUvbGliL2VzbS9pc0ZpbGUuanMiLCAibm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9odW1hbml6ZS1tcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvYWdlbnRrZWVwYWxpdmUvbGliL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvYWdlbnRrZWVwYWxpdmUvbGliL2FnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9hZ2VudGtlZXBhbGl2ZS9saWIvaHR0cHNfYWdlbnQuanMiLCAibm9kZV9tb2R1bGVzL2FnZW50a2VlcGFsaXZlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9ldmVudC10YXJnZXQtc2hpbS9zcmMvZXZlbnQubWpzIiwgIm5vZGVfbW9kdWxlcy9ldmVudC10YXJnZXQtc2hpbS9zcmMvZXZlbnQtdGFyZ2V0Lm1qcyIsICJub2RlX21vZHVsZXMvYWJvcnQtY29udHJvbGxlci9zcmMvYWJvcnQtc2lnbmFsLnRzIiwgIm5vZGVfbW9kdWxlcy9hYm9ydC1jb250cm9sbGVyL3NyYy9hYm9ydC1jb250cm9sbGVyLnRzIiwgIm5vZGVfbW9kdWxlcy9ub2RlLWRvbWV4Y2VwdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZm9ybWRhdGEtbm9kZS9saWIvZXNtL2lzUGxhaW5PYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm1kYXRhLW5vZGUvbGliL2VzbS9maWxlRnJvbVBhdGguanMiLCAic3JjL21haW4udHMiLCAic3JjL2V4dGVuc2lvbi9pbmRleC50cyIsICJub2RlX21vZHVsZXMvb2xsYW1hL2Rpc3QvaW5kZXgubWpzIiwgIm5vZGVfbW9kdWxlcy9vbGxhbWEvZGlzdC9icm93c2VyLm1qcyIsICJub2RlX21vZHVsZXMvbXVzdGFjaGUvbXVzdGFjaGUubWpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy9BUEkvd29ybGQuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjL0FQSS9tZXRob2RzL2NvbXB1dGUuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjL0FQSS9tZXRob2RzL2xvb3BzLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy9BUEkvbWV0aG9kcy91dGlscy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvQVBJL21ldGhvZHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjL0FQSS9WaWV3LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy9fdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvQVBJL2V4dGVuZC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvQVBJL19saWIuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjL0FQSS9pbnB1dHMuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjL25scC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvY2FjaGUvbWV0aG9kcy9jYWNoZURvYy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvY2FjaGUvbWV0aG9kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvY2FjaGUvYXBpLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jYWNoZS9jb21wdXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jYWNoZS9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NoYW5nZS9hcGkvY2FzZS5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvY2hhbmdlL2FwaS9saWIvaW5zZXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jaGFuZ2UvY29tcHV0ZS91dWlkLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jaGFuZ2UvYXBpL2luc2VydC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvY2hhbmdlL2FwaS9yZXBsYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jaGFuZ2UvYXBpL2xpYi9yZW1vdmUuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NoYW5nZS9hcGkvcmVtb3ZlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jaGFuZ2UvYXBpL3doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NoYW5nZS9hcGkvbGliL19zb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jaGFuZ2UvYXBpL3NvcnQuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NoYW5nZS9hcGkvY29uY2F0LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jaGFuZ2UvYXBpL2hhcmRlbi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvY2hhbmdlL2FwaS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvY2hhbmdlL2NvbXB1dGUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NoYW5nZS9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NvbnRyYWN0aW9uLW9uZS9tb2RlbC9jb250cmFjdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NvbnRyYWN0aW9uLW9uZS9tb2RlbC9udW1iZXItc3VmZml4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jb250cmFjdGlvbi1vbmUvbW9kZWwvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NvbnRyYWN0aW9uLW9uZS9jb21wdXRlL2NvbnRyYWN0aW9ucy9fc3BsaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jb250cmFjdGlvbi1vbmUvY29tcHV0ZS9jb250cmFjdGlvbnMvYXBvc3Ryb3BoZS1kLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jb250cmFjdGlvbi1vbmUvY29tcHV0ZS9jb250cmFjdGlvbnMvYXBvc3Ryb3BoZS10LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jb250cmFjdGlvbi1vbmUvY29tcHV0ZS9jb250cmFjdGlvbnMvZnJlbmNoLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jb250cmFjdGlvbi1vbmUvY29tcHV0ZS9jb250cmFjdGlvbnMvbnVtYmVyLXJhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9jb250cmFjdGlvbi1vbmUvY29tcHV0ZS9jb250cmFjdGlvbnMvbnVtYmVyLXVuaXQuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NvbnRyYWN0aW9uLW9uZS9jb21wdXRlL2NvbnRyYWN0aW9ucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvY29udHJhY3Rpb24tb25lL2NvbXB1dGUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2NvbnRyYWN0aW9uLW9uZS9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2ZyZWV6ZS9jb21wdXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9mcmVlemUvZGVidWcuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2ZyZWV6ZS9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2xleGljb24vY29tcHV0ZS9tdWx0aS13b3JkLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9sZXhpY29uL2NvbXB1dGUvc2luZ2xlLXdvcmQuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2xleGljb24vY29tcHV0ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbGV4aWNvbi9tZXRob2RzL2V4cGFuZC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbGV4aWNvbi9tZXRob2RzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9sZXhpY29uL2xpYi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbGV4aWNvbi9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2xvb2t1cC9hcGkvYnVpbGRUcmllL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9sb29rdXAvYXBpL3NjYW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2xvb2t1cC9hcGkvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL2xvb2t1cC9hcGkvYnVpbGRUcmllL2NvbXByZXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9sb29rdXAvcGx1Z2luLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9hcGkvX2xpYi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvYXBpL21hdGNoLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9hcGkvbG9va2Fyb3VuZC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvYXBpL3NwbGl0LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9hcGkvam9pbi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvYXBpL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9tZXRob2RzL3BhcnNlTWF0Y2gvMDEtcGFyc2VCbG9ja3MuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL21hdGNoL21ldGhvZHMvcGFyc2VNYXRjaC8wMi1wYXJzZVRva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9tZXRob2RzL3BhcnNlTWF0Y2gvMDMtc3BsaXRIeXBoZW5zLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9tZXRob2RzL3BhcnNlTWF0Y2gvMDQtaW5mbGVjdC1yb290LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9tZXRob2RzL3BhcnNlTWF0Y2gvMDUtcG9zdFByb2Nlc3MuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL21hdGNoL21ldGhvZHMvcGFyc2VNYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9tYXRjaC8wMS1mYWlsRmFzdC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9tYXRjaC90ZXJtL19mdXp6eS5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy90ZXJtTWV0aG9kcy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9tYXRjaC90ZXJtL2RvZXNNYXRjaC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9tYXRjaC9zdGVwcy9sb2dpYy9ncmVlZHkuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL21hdGNoL21ldGhvZHMvbWF0Y2gvX2xpYi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9tYXRjaC9zdGVwcy9hc3RyaXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL21hdGNoL21ldGhvZHMvbWF0Y2gvc3RlcHMvbG9naWMvYW5kLW9yLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9tZXRob2RzL21hdGNoL3N0ZXBzL29yLWJsb2NrLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9tZXRob2RzL21hdGNoL3N0ZXBzL2FuZC1ibG9jay5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9tYXRjaC9zdGVwcy9sb2dpYy9uZWdhdGl2ZS1ncmVlZHkuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL21hdGNoL21ldGhvZHMvbWF0Y2gvc3RlcHMvbmVnYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL21hdGNoL21ldGhvZHMvbWF0Y2gvc3RlcHMvb3B0aW9uYWwtbWF0Y2guanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL21hdGNoL21ldGhvZHMvbWF0Y2gvc3RlcHMvZ3JlZWR5LW1hdGNoLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9tZXRob2RzL21hdGNoL3N0ZXBzL2NvbnRyYWN0aW9uLXNraXAuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL21hdGNoL21ldGhvZHMvbWF0Y2gvc3RlcHMvc2ltcGxlLW1hdGNoLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9tZXRob2RzL21hdGNoLzAyLWZyb20taGVyZS5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9tYXRjaC8wMy1nZXRHcm91cC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9tYXRjaC8wMy1ub3RJZi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9tYXRjaC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbWV0aG9kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvbWF0Y2gvbGliLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9tYXRjaC9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL291dHB1dC9hcGkvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvb3V0cHV0L2FwaS9fdGV4dC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvb3V0cHV0L2FwaS9fZm10cy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvb3V0cHV0L21ldGhvZHMvaGFzaC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvb3V0cHV0L2FwaS9qc29uLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9vdXRwdXQvYXBpL2RlYnVnLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9vdXRwdXQvYXBpL3dyYXAuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL291dHB1dC9hcGkvb3V0LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9vdXRwdXQvYXBpL3RleHQuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL291dHB1dC9hcGkvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL291dHB1dC9tZXRob2RzL2RlYnVnL2NsaWVudC1zaWRlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9vdXRwdXQvbWV0aG9kcy9kZWJ1Zy9fY29sb3IuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL291dHB1dC9tZXRob2RzL2RlYnVnL3RhZ3MuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL291dHB1dC9tZXRob2RzL2RlYnVnL2NodW5rcy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvb3V0cHV0L21ldGhvZHMvZGVidWcvaGlnaGxpZ2h0LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9vdXRwdXQvbWV0aG9kcy9kZWJ1Zy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvb3V0cHV0L3BsdWdpbi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvcG9pbnRlcnMvYXBpL2xpYi9fbGliLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9wb2ludGVycy9hcGkvbGliL3NwbGl0LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9wb2ludGVycy9tZXRob2RzL2dldERvYy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvcG9pbnRlcnMvbWV0aG9kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvcG9pbnRlcnMvYXBpL2xpYi91bmlvbi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvcG9pbnRlcnMvYXBpL2xpYi9kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9wb2ludGVycy9hcGkvbGliL2ludGVyc2VjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvcG9pbnRlcnMvYXBpL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9wb2ludGVycy9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3N3ZWVwL2xpYi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvc3dlZXAvYXBpLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9zd2VlcC9tZXRob2RzL2J1aWxkTmV0LzAxLXBhcnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9zd2VlcC9tZXRob2RzL2J1aWxkTmV0L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9zd2VlcC9tZXRob2RzL3N3ZWVwLzAxLWdldEhvb2tzLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9zd2VlcC9tZXRob2RzL3N3ZWVwLzAyLXRyaW0tZG93bi5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvc3dlZXAvbWV0aG9kcy9zd2VlcC8wNC1ydW5NYXRjaC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvc3dlZXAvbWV0aG9kcy9zd2VlcC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvc3dlZXAvbWV0aG9kcy90YWdnZXIvY2FuQmUuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3N3ZWVwL21ldGhvZHMvdGFnZ2VyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9zd2VlcC9tZXRob2RzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS9zd2VlcC9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3RhZy9tZXRob2RzL3NldFRhZy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdGFnL21ldGhvZHMvdW5UYWcuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3RhZy9tZXRob2RzL2NhbkJlLmpzIiwgIm5vZGVfbW9kdWxlcy9ncmFkLXNjaG9vbC9idWlsZHMvZ3JhZC1zY2hvb2wubWpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90YWcvbWV0aG9kcy9hZGRUYWdzL19jb2xvcnMuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3RhZy9tZXRob2RzL2FkZFRhZ3MvMDItZm10LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90YWcvbWV0aG9kcy9hZGRUYWdzLzAxLXZhbGlkYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90YWcvbWV0aG9kcy9hZGRUYWdzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90YWcvbWV0aG9kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdGFnL2FwaS90YWcuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3RhZy9hcGkvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3RhZy9saWIuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3RhZy9jb21wdXRlL3RhZ1JhbmsuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3RhZy9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL21ldGhvZHMvMDEtc2VudGVuY2VzLzAxLXNpbXBsZS1zcGxpdC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbWV0aG9kcy8wMS1zZW50ZW5jZXMvMDItc2ltcGxlLW1lcmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tZXRob2RzLzAxLXNlbnRlbmNlcy8wMy1zbWFydC1tZXJnZS5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbWV0aG9kcy8wMS1zZW50ZW5jZXMvMDQtcXVvdGUtbWVyZ2UuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL21ldGhvZHMvMDEtc2VudGVuY2VzLzA1LXBhcmVucy1tZXJnZS5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbWV0aG9kcy8wMS1zZW50ZW5jZXMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL21ldGhvZHMvMDItdGVybXMvMDEtaHlwaGVucy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbWV0aG9kcy8wMi10ZXJtcy8wMy1yYW5nZXMuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL21ldGhvZHMvMDItdGVybXMvMDItc2xhc2hlcy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbWV0aG9kcy8wMi10ZXJtcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbWV0aG9kcy8wMy13aGl0ZXNwYWNlL3Rva2VuaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tZXRob2RzLzAzLXdoaXRlc3BhY2UvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL21ldGhvZHMvdW5pY29kZS5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvY29tcHV0ZS9ub3JtYWwvMDEtY2xlYW51cC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvY29tcHV0ZS9ub3JtYWwvMDItYWNyb255bXMuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL2NvbXB1dGUvbm9ybWFsL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tZXRob2RzL3BhcnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tZXRob2RzLzAxLXNlbnRlbmNlcy9pcy1zZW50ZW5jZS5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbWV0aG9kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbW9kZWwvYWxpYXNlcy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbW9kZWwvYWJicmV2aWF0aW9ucy9taXNjLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tb2RlbC9hYmJyZXZpYXRpb25zL2hvbm9yaWZpY3MuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL21vZGVsL2FiYnJldmlhdGlvbnMvbW9udGhzLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tb2RlbC9hYmJyZXZpYXRpb25zL25vdW5zLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tb2RlbC9hYmJyZXZpYXRpb25zL29yZ2FuaXphdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL21vZGVsL2FiYnJldmlhdGlvbnMvcGxhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tb2RlbC9hYmJyZXZpYXRpb25zL3VuaXRzLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tb2RlbC9sZXhpY29uLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tb2RlbC9wcmVmaXhlcy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvbW9kZWwvc3VmZml4ZXMuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL21vZGVsL3VuaWNvZGUuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL21vZGVsL3B1bmN0dWF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9tb2RlbC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvY29tcHV0ZS9hbGlhcy5qcyIsICJub2RlX21vZHVsZXMvY29tcHJvbWlzZS9zcmMvMS1vbmUvdG9rZW5pemUvY29tcHV0ZS9tYWNoaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9jb21wdXRlL2ZyZXEuanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL2NvbXB1dGUvb2Zmc2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9jb21wdXRlL3JlaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3Rva2VuaXplL2NvbXB1dGUvd29yZENvdW50LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9jb21wdXRlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90b2tlbml6ZS9wbHVnaW4uanMiLCAibm9kZV9tb2R1bGVzL2NvbXByb21pc2Uvc3JjLzEtb25lL3R5cGVhaGVhZC9jb21wdXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90eXBlYWhlYWQvYXBpLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90eXBlYWhlYWQvbGliL2FsbFByZWZpeGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90eXBlYWhlYWQvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy8xLW9uZS90eXBlYWhlYWQvcGx1Z2luLmpzIiwgIm5vZGVfbW9kdWxlcy9jb21wcm9taXNlL3NyYy9vbmUuanMiLCAic3JjL3Byb21wdC9wcm9tcHQudHMiLCAic3JjL3Byb3ZpZGVycy9vbGxhbWEvcHJvdmlkZXIudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvaW50ZXJuYWwvcXMvZm9ybWF0cy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9pbnRlcm5hbC9xcy91dGlscy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9pbnRlcm5hbC9xcy9zdHJpbmdpZnkudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvdmVyc2lvbi50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9fc2hpbXMvcmVnaXN0cnkudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvX3NoaW1zL25vZGUtcnVudGltZS50cyIsICJub2RlX21vZHVsZXMvZm9ybWRhdGEtbm9kZS9saWIvZXNtL0Zvcm1EYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtZGF0YS1ub2RlL2xpYi9lc20vaXNCbG9iLmpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtZGF0YS1ub2RlL2xpYi9lc20vZGVwcmVjYXRlQ29uc3RydWN0b3JFbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtZGF0YS1ub2RlL2xpYi9lc20vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS1lbmNvZGVyL2xpYi9lc20vdXRpbC9jcmVhdGVCb3VuZGFyeS5qcyIsICJub2RlX21vZHVsZXMvZm9ybS1kYXRhLWVuY29kZXIvbGliL2VzbS91dGlsL2lzUGxhaW5PYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS1lbmNvZGVyL2xpYi9lc20vdXRpbC9ub3JtYWxpemVWYWx1ZS5qcyIsICJub2RlX21vZHVsZXMvZm9ybS1kYXRhLWVuY29kZXIvbGliL2VzbS91dGlsL2VzY2FwZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS1lbmNvZGVyL2xpYi9lc20vdXRpbC9pc0Z1bmN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9mb3JtLWRhdGEtZW5jb2Rlci9saWIvZXNtL3V0aWwvaXNGaWxlTGlrZS5qcyIsICJub2RlX21vZHVsZXMvZm9ybS1kYXRhLWVuY29kZXIvbGliL2VzbS91dGlsL2lzRm9ybURhdGEuanMiLCAibm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS1lbmNvZGVyL2xpYi9lc20vRm9ybURhdGFFbmNvZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL19zaGltcy9NdWx0aXBhcnRCb2R5LnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvX3NoaW1zL2luZGV4Lm1qcyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9lcnJvci50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9pbnRlcm5hbC9kZWNvZGVycy9saW5lLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL2ludGVybmFsL3N0cmVhbS11dGlscy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9zdHJlYW1pbmcudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvdXBsb2Fkcy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9jb3JlLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3BhZ2luYXRpb24udHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2UudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2NoYXQvY29tcGxldGlvbnMvbWVzc2FnZXMudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2NoYXQvY29tcGxldGlvbnMvY29tcGxldGlvbnMudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2NoYXQvY2hhdC50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvYXVkaW8vc3BlZWNoLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy9hdWRpby90cmFuc2NyaXB0aW9ucy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvYXVkaW8vdHJhbnNsYXRpb25zLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy9hdWRpby9hdWRpby50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvYmF0Y2hlcy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvYmV0YS9hc3Npc3RhbnRzLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL2xpYi9SdW5uYWJsZUZ1bmN0aW9uLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL2xpYi9jaGF0Q29tcGxldGlvblV0aWxzLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL2xpYi9FdmVudFN0cmVhbS50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9saWIvcGFyc2VyLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL2xpYi9BYnN0cmFjdENoYXRDb21wbGV0aW9uUnVubmVyLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL2xpYi9DaGF0Q29tcGxldGlvblJ1bm5lci50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9fdmVuZG9yL3BhcnRpYWwtanNvbi1wYXJzZXIvcGFyc2VyLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL2xpYi9DaGF0Q29tcGxldGlvblN0cmVhbS50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9saWIvQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdSdW5uZXIudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2JldGEvY2hhdC9jb21wbGV0aW9ucy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvYmV0YS9jaGF0L2NoYXQudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2JldGEvcmVhbHRpbWUvc2Vzc2lvbnMudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2JldGEvcmVhbHRpbWUvdHJhbnNjcmlwdGlvbi1zZXNzaW9ucy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvYmV0YS9yZWFsdGltZS9yZWFsdGltZS50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9saWIvQXNzaXN0YW50U3RyZWFtLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy9iZXRhL3RocmVhZHMvbWVzc2FnZXMudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2JldGEvdGhyZWFkcy9ydW5zL3N0ZXBzLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy9iZXRhL3RocmVhZHMvcnVucy9ydW5zLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy9iZXRhL3RocmVhZHMvdGhyZWFkcy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvYmV0YS9iZXRhLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy9jb21wbGV0aW9ucy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvZW1iZWRkaW5ncy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvZmlsZXMudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2ZpbmUtdHVuaW5nL2pvYnMvY2hlY2twb2ludHMudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2ZpbmUtdHVuaW5nL2pvYnMvam9icy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvZmluZS10dW5pbmcvZmluZS10dW5pbmcudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvcmVzb3VyY2VzL2ltYWdlcy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvbW9kZWxzLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy9tb2RlcmF0aW9ucy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9saWIvUmVzcG9uc2VzUGFyc2VyLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy9yZXNwb25zZXMvaW5wdXQtaXRlbXMudHMiLCAibm9kZV9tb2R1bGVzL29wZW5haS9zcmMvbGliL3Jlc3BvbnNlcy9SZXNwb25zZVN0cmVhbS50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvcmVzcG9uc2VzL3Jlc3BvbnNlcy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvdXBsb2Fkcy9wYXJ0cy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvdXBsb2Fkcy91cGxvYWRzLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL2xpYi9VdGlsLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy92ZWN0b3Itc3RvcmVzL2ZpbGVzLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL3Jlc291cmNlcy92ZWN0b3Itc3RvcmVzL2ZpbGUtYmF0Y2hlcy50cyIsICJub2RlX21vZHVsZXMvb3BlbmFpL3NyYy9yZXNvdXJjZXMvdmVjdG9yLXN0b3Jlcy92ZWN0b3Itc3RvcmVzLnRzIiwgIm5vZGVfbW9kdWxlcy9vcGVuYWkvc3JjL2luZGV4LnRzIiwgInNyYy9wcm92aWRlcnMvb3BlbmFpL3Byb3ZpZGVyLnRzIiwgInNyYy9wcm92aWRlcnMvb3BlbmFpLWNvbXBhdC9wcm92aWRlci50cyIsICJzcmMvcHJvdmlkZXJzL2ZhY3RvcnkudHMiLCAic3JjL3NldHRpbmdzL3NldHRpbmdzLnRzIiwgInNyYy9zZXR0aW5ncy90YWIudHMiLCAic3JjL3NldHRpbmdzL3Byb3ZpZGVyLnRzIiwgInNyYy9wcm9maWxlL3NlcnZpY2UudHMiLCAic3JjL2NvbXBsZXRpb25zL3NlcnZpY2UudHMiLCAic3JjL3N0YXR1c2Jhci9zdGF0dXNiYXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGZhY3RvcnkoKGdsb2JhbC5XSEFUV0dGZXRjaCA9IHt9KSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuICB2YXIgZyA9XG4gICAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAgICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKSB8fFxuICAgIHt9O1xuXG4gIHZhciBzdXBwb3J0ID0ge1xuICAgIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZyxcbiAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZyAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgICBibG9iOlxuICAgICAgJ0ZpbGVSZWFkZXInIGluIGcgJiZcbiAgICAgICdCbG9iJyBpbiBnICYmXG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV3IEJsb2IoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZyxcbiAgICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbiAgfVxuXG4gIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gICAgXTtcblxuICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgIH1cbiAgICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICAgIH1cbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbiAgZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvclxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlcmF0b3JcbiAgfVxuXG4gIGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICAgIHRoaXMubWFwID0ge307XG5cbiAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT0gMikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hlYWRlcnMgY29uc3RydWN0b3I6IGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQnICsgaGVhZGVyLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV07XG4gICAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWU7XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICBpdGVtcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGl0ZW1zLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICAgIGlmIChib2R5Ll9ub0JvZHkpIHJldHVyblxuICAgIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gICAgfVxuICAgIGJvZHkuYm9keVVzZWQgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QocmVhZGVyLmVycm9yKTtcbiAgICAgIH07XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKTtcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHZhciBtYXRjaCA9IC9jaGFyc2V0PShbQS1aYS16MC05Xy1dKykvLmV4ZWMoYmxvYi50eXBlKTtcbiAgICB2YXIgZW5jb2RpbmcgPSBtYXRjaCA/IG1hdGNoWzFdIDogJ3V0Zi04JztcbiAgICByZWFkZXIucmVhZEFzVGV4dChibG9iLCBlbmNvZGluZyk7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTtcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICAvKlxuICAgICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAgICovXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkO1xuICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5O1xuICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHRoaXMuX25vQm9keSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpO1xuICAgICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIGFzIEFycmF5QnVmZmVyJylcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxuICB2YXIgbWV0aG9kcyA9IFsnQ09OTkVDVCcsICdERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQQVRDSCcsICdQT1NUJywgJ1BVVCcsICdUUkFDRSddO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keTtcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmw7XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHM7XG4gICAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kO1xuICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZTtcbiAgICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsO1xuICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXQ7XG4gICAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJztcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKTtcbiAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGw7XG4gICAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbCB8fCAoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCdBYm9ydENvbnRyb2xsZXInIGluIGcpIHtcbiAgICAgICAgdmFyIGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIHJldHVybiBjdHJsLnNpZ25hbDtcbiAgICAgIH1cbiAgICB9KCkpO1xuICAgIHRoaXMucmVmZXJyZXIgPSBudWxsO1xuXG4gICAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICAgIH1cbiAgICB0aGlzLl9pbml0Qm9keShib2R5KTtcblxuICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovO1xuICAgICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy87XG4gICAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbiAgfTtcblxuICBmdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgYm9keVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KCcmJylcbiAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gICAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gICAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJyk7XG4gICAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gICAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgICAgLnNwbGl0KCdcXHInKVxuICAgICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICAgIH0pXG4gICAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKTtcbiAgICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUmVzcG9uc2UgJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSk7XG5cbiAgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gICAgfVxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMudHlwZSA9ICdkZWZhdWx0JztcbiAgICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1cztcbiAgICBpZiAodGhpcy5zdGF0dXMgPCAyMDAgfHwgdGhpcy5zdGF0dXMgPiA1OTkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUmVzcG9uc2UnOiBUaGUgc3RhdHVzIHByb3ZpZGVkICgwKSBpcyBvdXRzaWRlIHRoZSByYW5nZSBbMjAwLCA1OTldLlwiKVxuICAgIH1cbiAgICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwO1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dDtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJyc7XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpO1xuICB9XG5cbiAgQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSk7XG5cbiAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICB1cmw6IHRoaXMudXJsXG4gICAgfSlcbiAgfTtcblxuICBSZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAyMDAsIHN0YXR1c1RleHQ6ICcnfSk7XG4gICAgcmVzcG9uc2Uub2sgPSBmYWxzZTtcbiAgICByZXNwb25zZS5zdGF0dXMgPSAwO1xuICAgIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InO1xuICAgIHJldHVybiByZXNwb25zZVxuICB9O1xuXG4gIHZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XTtcblxuICBSZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gICAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxuICB9O1xuXG4gIGV4cG9ydHMuRE9NRXhjZXB0aW9uID0gZy5ET01FeGNlcHRpb247XG4gIHRyeSB7XG4gICAgbmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKTtcbiAgICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICB9O1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBleHBvcnRzLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBleHBvcnRzLkRPTUV4Y2VwdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdCk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH1cblxuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgICAgeGhyLmFib3J0KCk7XG4gICAgICB9XG5cbiAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhpcyBjaGVjayBpZiBzcGVjaWZpY2FsbHkgZm9yIHdoZW4gYSB1c2VyIGZldGNoZXMgYSBmaWxlIGxvY2FsbHkgZnJvbSB0aGUgZmlsZSBzeXN0ZW1cbiAgICAgICAgLy8gT25seSBpZiB0aGUgc3RhdHVzIGlzIG91dCBvZiBhIG5vcm1hbCByYW5nZVxuICAgICAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZignZmlsZTovLycpID09PSAwICYmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPiA1OTkpKSB7XG4gICAgICAgICAgb3B0aW9ucy5zdGF0dXMgPSAyMDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJyk7XG4gICAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IHRpbWVkIG91dCcpKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9O1xuXG4gICAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZy5sb2NhdGlvbi5ocmVmID8gZy5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpO1xuXG4gICAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzIHx8IChnLkhlYWRlcnMgJiYgaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgZy5IZWFkZXJzKSkpIHtcbiAgICAgICAgdmFyIG5hbWVzID0gW107XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgbmFtZXMucHVzaChub3JtYWxpemVOYW1lKG5hbWUpKTtcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgICAgaWYgKG5hbWVzLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuXG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpO1xuICAgIH0pXG4gIH1cblxuICBmZXRjaC5wb2x5ZmlsbCA9IHRydWU7XG5cbiAgaWYgKCFnLmZldGNoKSB7XG4gICAgZy5mZXRjaCA9IGZldGNoO1xuICAgIGcuSGVhZGVycyA9IEhlYWRlcnM7XG4gICAgZy5SZXF1ZXN0ID0gUmVxdWVzdDtcbiAgICBnLlJlc3BvbnNlID0gUmVzcG9uc2U7XG4gIH1cblxuICBleHBvcnRzLkhlYWRlcnMgPSBIZWFkZXJzO1xuICBleHBvcnRzLlJlcXVlc3QgPSBSZXF1ZXN0O1xuICBleHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG4gIGV4cG9ydHMuZmV0Y2ggPSBmZXRjaDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29udmVyc2lvbnMgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gY29udmVyc2lvbnM7XG5cbmZ1bmN0aW9uIHNpZ24oeCkge1xuICAgIHJldHVybiB4IDwgMCA/IC0xIDogMTtcbn1cblxuZnVuY3Rpb24gZXZlblJvdW5kKHgpIHtcbiAgICAvLyBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZSBldmVuIGludGVnZXIgaWYgaXQgbGllcyBoYWxmd2F5IGJldHdlZW4gdHdvLlxuICAgIGlmICgoeCAlIDEpID09PSAwLjUgJiYgKHggJiAxKSA9PT0gMCkgeyAvLyBbZXZlbiBudW1iZXJdLjU7IHJvdW5kIGRvd24gKGkuZS4gZmxvb3IpXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlTnVtYmVyQ29udmVyc2lvbihiaXRMZW5ndGgsIHR5cGVPcHRzKSB7XG4gICAgaWYgKCF0eXBlT3B0cy51bnNpZ25lZCkge1xuICAgICAgICAtLWJpdExlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgbG93ZXJCb3VuZCA9IHR5cGVPcHRzLnVuc2lnbmVkID8gMCA6IC1NYXRoLnBvdygyLCBiaXRMZW5ndGgpO1xuICAgIGNvbnN0IHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMTtcblxuICAgIGNvbnN0IG1vZHVsb1ZhbCA9IHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCA/IE1hdGgucG93KDIsIHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCkgOiBNYXRoLnBvdygyLCBiaXRMZW5ndGgpO1xuICAgIGNvbnN0IG1vZHVsb0JvdW5kID0gdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoID8gTWF0aC5wb3coMiwgdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoIC0gMSkgOiBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKTtcblxuICAgIHJldHVybiBmdW5jdGlvbihWLCBvcHRzKSB7XG4gICAgICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuXG4gICAgICAgIGxldCB4ID0gK1Y7XG5cbiAgICAgICAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSBmaW5pdGUgbnVtYmVyXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4ID0gc2lnbih4KSAqIE1hdGguZmxvb3IoTWF0aC5hYnMoeCkpO1xuICAgICAgICAgICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBpbiBieXRlIHJhbmdlXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oeCkgJiYgb3B0cy5jbGFtcCkge1xuICAgICAgICAgICAgeCA9IGV2ZW5Sb3VuZCh4KTtcblxuICAgICAgICAgICAgaWYgKHggPCBsb3dlckJvdW5kKSB4ID0gbG93ZXJCb3VuZDtcbiAgICAgICAgICAgIGlmICh4ID4gdXBwZXJCb3VuZCkgeCA9IHVwcGVyQm91bmQ7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpIHx8IHggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgeCA9IHNpZ24oeCkgKiBNYXRoLmZsb29yKE1hdGguYWJzKHgpKTtcbiAgICAgICAgeCA9IHggJSBtb2R1bG9WYWw7XG5cbiAgICAgICAgaWYgKCF0eXBlT3B0cy51bnNpZ25lZCAmJiB4ID49IG1vZHVsb0JvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm4geCAtIG1vZHVsb1ZhbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlT3B0cy51bnNpZ25lZCkge1xuICAgICAgICAgICAgaWYgKHggPCAwKSB7XG4gICAgICAgICAgICAgIHggKz0gbW9kdWxvVmFsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09PSAtMCkgeyAvLyBkb24ndCByZXR1cm4gbmVnYXRpdmUgemVyb1xuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbn1cblxuY29udmVyc2lvbnNbXCJ2b2lkXCJdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb252ZXJzaW9uc1tcImJvb2xlYW5cIl0gPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuICEhdmFsO1xufTtcblxuY29udmVyc2lvbnNbXCJieXRlXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbig4LCB7IHVuc2lnbmVkOiBmYWxzZSB9KTtcbmNvbnZlcnNpb25zW1wib2N0ZXRcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDgsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmNvbnZlcnNpb25zW1wic2hvcnRcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDE2LCB7IHVuc2lnbmVkOiBmYWxzZSB9KTtcbmNvbnZlcnNpb25zW1widW5zaWduZWQgc2hvcnRcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDE2LCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcImxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiBmYWxzZSB9KTtcbmNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmNvbnZlcnNpb25zW1wibG9uZyBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogZmFsc2UsIG1vZHVsb0JpdExlbmd0aDogNjQgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmcgbG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IHRydWUsIG1vZHVsb0JpdExlbmd0aDogNjQgfSk7XG5cbmNvbnZlcnNpb25zW1wiZG91YmxlXCJdID0gZnVuY3Rpb24gKFYpIHtcbiAgICBjb25zdCB4ID0gK1Y7XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgZmluaXRlIGZsb2F0aW5nLXBvaW50IHZhbHVlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZG91YmxlXCJdID0gZnVuY3Rpb24gKFYpIHtcbiAgICBjb25zdCB4ID0gK1Y7XG5cbiAgICBpZiAoaXNOYU4oeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIE5hTlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbi8vIG5vdCBxdWl0ZSB2YWxpZCwgYnV0IGdvb2QgZW5vdWdoIGZvciBKU1xuY29udmVyc2lvbnNbXCJmbG9hdFwiXSA9IGNvbnZlcnNpb25zW1wiZG91YmxlXCJdO1xuY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZmxvYXRcIl0gPSBjb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBkb3VibGVcIl07XG5cbmNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuICAgIGlmIChvcHRzLnRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgViA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKFYpO1xufTtcblxuY29udmVyc2lvbnNbXCJCeXRlU3RyaW5nXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBjb25zdCB4ID0gU3RyaW5nKFYpO1xuICAgIGxldCBjID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSAwOyAoYyA9IHguY29kZVBvaW50QXQoaSkpICE9PSB1bmRlZmluZWQ7ICsraSkge1xuICAgICAgICBpZiAoYyA+IDI1NSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIGJ5dGVzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbmNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdID0gZnVuY3Rpb24gKFYpIHtcbiAgICBjb25zdCBTID0gU3RyaW5nKFYpO1xuICAgIGNvbnN0IG4gPSBTLmxlbmd0aDtcbiAgICBjb25zdCBVID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgY29uc3QgYyA9IFMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPCAweEQ4MDAgfHwgYyA+IDB4REZGRikge1xuICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KGMpKTtcbiAgICAgICAgfSBlbHNlIGlmICgweERDMDAgPD0gYyAmJiBjIDw9IDB4REZGRikge1xuICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGkgPT09IG4gLSAxKSB7XG4gICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gUy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoMHhEQzAwIDw9IGQgJiYgZCA8PSAweERGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGMgJiAweDNGRjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYiA9IGQgJiAweDNGRjtcbiAgICAgICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KCgyIDw8IDE1KSArICgyIDw8IDkpICogYSArIGIpKTtcbiAgICAgICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gVS5qb2luKCcnKTtcbn07XG5cbmNvbnZlcnNpb25zW1wiRGF0ZVwiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgaWYgKCEoViBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSBEYXRlIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKGlzTmFOKFYpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFY7XG59O1xuXG5jb252ZXJzaW9uc1tcIlJlZ0V4cFwiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgaWYgKCEoViBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgViA9IG5ldyBSZWdFeHAoVik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFY7XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXlzW2ldLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5c1tpXSkpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyU3ltYm9sID0gU3ltYm9sKFwid3JhcHBlclwiKTtcbm1vZHVsZS5leHBvcnRzLmltcGxTeW1ib2wgPSBTeW1ib2woXCJpbXBsXCIpO1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyRm9ySW1wbCA9IGZ1bmN0aW9uIChpbXBsKSB7XG4gIHJldHVybiBpbXBsW21vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2xdO1xufTtcblxubW9kdWxlLmV4cG9ydHMuaW1wbEZvcldyYXBwZXIgPSBmdW5jdGlvbiAod3JhcHBlcikge1xuICByZXR1cm4gd3JhcHBlclttb2R1bGUuZXhwb3J0cy5pbXBsU3ltYm9sXTtcbn07XG5cbiIsICJbW1swLDQ0XSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzQ1LDQ2XSxcInZhbGlkXCJdLFtbNDcsNDddLFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCJdLFtbNDgsNTddLFwidmFsaWRcIl0sW1s1OCw2NF0sXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIl0sW1s2NSw2NV0sXCJtYXBwZWRcIixbOTddXSxbWzY2LDY2XSxcIm1hcHBlZFwiLFs5OF1dLFtbNjcsNjddLFwibWFwcGVkXCIsWzk5XV0sW1s2OCw2OF0sXCJtYXBwZWRcIixbMTAwXV0sW1s2OSw2OV0sXCJtYXBwZWRcIixbMTAxXV0sW1s3MCw3MF0sXCJtYXBwZWRcIixbMTAyXV0sW1s3MSw3MV0sXCJtYXBwZWRcIixbMTAzXV0sW1s3Miw3Ml0sXCJtYXBwZWRcIixbMTA0XV0sW1s3Myw3M10sXCJtYXBwZWRcIixbMTA1XV0sW1s3NCw3NF0sXCJtYXBwZWRcIixbMTA2XV0sW1s3NSw3NV0sXCJtYXBwZWRcIixbMTA3XV0sW1s3Niw3Nl0sXCJtYXBwZWRcIixbMTA4XV0sW1s3Nyw3N10sXCJtYXBwZWRcIixbMTA5XV0sW1s3OCw3OF0sXCJtYXBwZWRcIixbMTEwXV0sW1s3OSw3OV0sXCJtYXBwZWRcIixbMTExXV0sW1s4MCw4MF0sXCJtYXBwZWRcIixbMTEyXV0sW1s4MSw4MV0sXCJtYXBwZWRcIixbMTEzXV0sW1s4Miw4Ml0sXCJtYXBwZWRcIixbMTE0XV0sW1s4Myw4M10sXCJtYXBwZWRcIixbMTE1XV0sW1s4NCw4NF0sXCJtYXBwZWRcIixbMTE2XV0sW1s4NSw4NV0sXCJtYXBwZWRcIixbMTE3XV0sW1s4Niw4Nl0sXCJtYXBwZWRcIixbMTE4XV0sW1s4Nyw4N10sXCJtYXBwZWRcIixbMTE5XV0sW1s4OCw4OF0sXCJtYXBwZWRcIixbMTIwXV0sW1s4OSw4OV0sXCJtYXBwZWRcIixbMTIxXV0sW1s5MCw5MF0sXCJtYXBwZWRcIixbMTIyXV0sW1s5MSw5Nl0sXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIl0sW1s5NywxMjJdLFwidmFsaWRcIl0sW1sxMjMsMTI3XSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzEyOCwxNTldLFwiZGlzYWxsb3dlZFwiXSxbWzE2MCwxNjBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMl1dLFtbMTYxLDE2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTY4LDE2OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Nl1dLFtbMTY5LDE2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTcwLDE3MF0sXCJtYXBwZWRcIixbOTddXSxbWzE3MSwxNzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE3MywxNzNdLFwiaWdub3JlZFwiXSxbWzE3NCwxNzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE3NSwxNzVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzJdXSxbWzE3NiwxNzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE3OCwxNzhdLFwibWFwcGVkXCIsWzUwXV0sW1sxNzksMTc5XSxcIm1hcHBlZFwiLFs1MV1dLFtbMTgwLDE4MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc2OV1dLFtbMTgxLDE4MV0sXCJtYXBwZWRcIixbOTU2XV0sW1sxODIsMTgyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxODMsMTgzXSxcInZhbGlkXCJdLFtbMTg0LDE4NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDgwN11dLFtbMTg1LDE4NV0sXCJtYXBwZWRcIixbNDldXSxbWzE4NiwxODZdLFwibWFwcGVkXCIsWzExMV1dLFtbMTg3LDE4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTg4LDE4OF0sXCJtYXBwZWRcIixbNDksODI2MCw1Ml1dLFtbMTg5LDE4OV0sXCJtYXBwZWRcIixbNDksODI2MCw1MF1dLFtbMTkwLDE5MF0sXCJtYXBwZWRcIixbNTEsODI2MCw1Ml1dLFtbMTkxLDE5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTkyLDE5Ml0sXCJtYXBwZWRcIixbMjI0XV0sW1sxOTMsMTkzXSxcIm1hcHBlZFwiLFsyMjVdXSxbWzE5NCwxOTRdLFwibWFwcGVkXCIsWzIyNl1dLFtbMTk1LDE5NV0sXCJtYXBwZWRcIixbMjI3XV0sW1sxOTYsMTk2XSxcIm1hcHBlZFwiLFsyMjhdXSxbWzE5NywxOTddLFwibWFwcGVkXCIsWzIyOV1dLFtbMTk4LDE5OF0sXCJtYXBwZWRcIixbMjMwXV0sW1sxOTksMTk5XSxcIm1hcHBlZFwiLFsyMzFdXSxbWzIwMCwyMDBdLFwibWFwcGVkXCIsWzIzMl1dLFtbMjAxLDIwMV0sXCJtYXBwZWRcIixbMjMzXV0sW1syMDIsMjAyXSxcIm1hcHBlZFwiLFsyMzRdXSxbWzIwMywyMDNdLFwibWFwcGVkXCIsWzIzNV1dLFtbMjA0LDIwNF0sXCJtYXBwZWRcIixbMjM2XV0sW1syMDUsMjA1XSxcIm1hcHBlZFwiLFsyMzddXSxbWzIwNiwyMDZdLFwibWFwcGVkXCIsWzIzOF1dLFtbMjA3LDIwN10sXCJtYXBwZWRcIixbMjM5XV0sW1syMDgsMjA4XSxcIm1hcHBlZFwiLFsyNDBdXSxbWzIwOSwyMDldLFwibWFwcGVkXCIsWzI0MV1dLFtbMjEwLDIxMF0sXCJtYXBwZWRcIixbMjQyXV0sW1syMTEsMjExXSxcIm1hcHBlZFwiLFsyNDNdXSxbWzIxMiwyMTJdLFwibWFwcGVkXCIsWzI0NF1dLFtbMjEzLDIxM10sXCJtYXBwZWRcIixbMjQ1XV0sW1syMTQsMjE0XSxcIm1hcHBlZFwiLFsyNDZdXSxbWzIxNSwyMTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzIxNiwyMTZdLFwibWFwcGVkXCIsWzI0OF1dLFtbMjE3LDIxN10sXCJtYXBwZWRcIixbMjQ5XV0sW1syMTgsMjE4XSxcIm1hcHBlZFwiLFsyNTBdXSxbWzIxOSwyMTldLFwibWFwcGVkXCIsWzI1MV1dLFtbMjIwLDIyMF0sXCJtYXBwZWRcIixbMjUyXV0sW1syMjEsMjIxXSxcIm1hcHBlZFwiLFsyNTNdXSxbWzIyMiwyMjJdLFwibWFwcGVkXCIsWzI1NF1dLFtbMjIzLDIyM10sXCJkZXZpYXRpb25cIixbMTE1LDExNV1dLFtbMjI0LDI0Nl0sXCJ2YWxpZFwiXSxbWzI0NywyNDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI0OCwyNTVdLFwidmFsaWRcIl0sW1syNTYsMjU2XSxcIm1hcHBlZFwiLFsyNTddXSxbWzI1NywyNTddLFwidmFsaWRcIl0sW1syNTgsMjU4XSxcIm1hcHBlZFwiLFsyNTldXSxbWzI1OSwyNTldLFwidmFsaWRcIl0sW1syNjAsMjYwXSxcIm1hcHBlZFwiLFsyNjFdXSxbWzI2MSwyNjFdLFwidmFsaWRcIl0sW1syNjIsMjYyXSxcIm1hcHBlZFwiLFsyNjNdXSxbWzI2MywyNjNdLFwidmFsaWRcIl0sW1syNjQsMjY0XSxcIm1hcHBlZFwiLFsyNjVdXSxbWzI2NSwyNjVdLFwidmFsaWRcIl0sW1syNjYsMjY2XSxcIm1hcHBlZFwiLFsyNjddXSxbWzI2NywyNjddLFwidmFsaWRcIl0sW1syNjgsMjY4XSxcIm1hcHBlZFwiLFsyNjldXSxbWzI2OSwyNjldLFwidmFsaWRcIl0sW1syNzAsMjcwXSxcIm1hcHBlZFwiLFsyNzFdXSxbWzI3MSwyNzFdLFwidmFsaWRcIl0sW1syNzIsMjcyXSxcIm1hcHBlZFwiLFsyNzNdXSxbWzI3MywyNzNdLFwidmFsaWRcIl0sW1syNzQsMjc0XSxcIm1hcHBlZFwiLFsyNzVdXSxbWzI3NSwyNzVdLFwidmFsaWRcIl0sW1syNzYsMjc2XSxcIm1hcHBlZFwiLFsyNzddXSxbWzI3NywyNzddLFwidmFsaWRcIl0sW1syNzgsMjc4XSxcIm1hcHBlZFwiLFsyNzldXSxbWzI3OSwyNzldLFwidmFsaWRcIl0sW1syODAsMjgwXSxcIm1hcHBlZFwiLFsyODFdXSxbWzI4MSwyODFdLFwidmFsaWRcIl0sW1syODIsMjgyXSxcIm1hcHBlZFwiLFsyODNdXSxbWzI4MywyODNdLFwidmFsaWRcIl0sW1syODQsMjg0XSxcIm1hcHBlZFwiLFsyODVdXSxbWzI4NSwyODVdLFwidmFsaWRcIl0sW1syODYsMjg2XSxcIm1hcHBlZFwiLFsyODddXSxbWzI4NywyODddLFwidmFsaWRcIl0sW1syODgsMjg4XSxcIm1hcHBlZFwiLFsyODldXSxbWzI4OSwyODldLFwidmFsaWRcIl0sW1syOTAsMjkwXSxcIm1hcHBlZFwiLFsyOTFdXSxbWzI5MSwyOTFdLFwidmFsaWRcIl0sW1syOTIsMjkyXSxcIm1hcHBlZFwiLFsyOTNdXSxbWzI5MywyOTNdLFwidmFsaWRcIl0sW1syOTQsMjk0XSxcIm1hcHBlZFwiLFsyOTVdXSxbWzI5NSwyOTVdLFwidmFsaWRcIl0sW1syOTYsMjk2XSxcIm1hcHBlZFwiLFsyOTddXSxbWzI5NywyOTddLFwidmFsaWRcIl0sW1syOTgsMjk4XSxcIm1hcHBlZFwiLFsyOTldXSxbWzI5OSwyOTldLFwidmFsaWRcIl0sW1szMDAsMzAwXSxcIm1hcHBlZFwiLFszMDFdXSxbWzMwMSwzMDFdLFwidmFsaWRcIl0sW1szMDIsMzAyXSxcIm1hcHBlZFwiLFszMDNdXSxbWzMwMywzMDNdLFwidmFsaWRcIl0sW1szMDQsMzA0XSxcIm1hcHBlZFwiLFsxMDUsNzc1XV0sW1szMDUsMzA1XSxcInZhbGlkXCJdLFtbMzA2LDMwN10sXCJtYXBwZWRcIixbMTA1LDEwNl1dLFtbMzA4LDMwOF0sXCJtYXBwZWRcIixbMzA5XV0sW1szMDksMzA5XSxcInZhbGlkXCJdLFtbMzEwLDMxMF0sXCJtYXBwZWRcIixbMzExXV0sW1szMTEsMzEyXSxcInZhbGlkXCJdLFtbMzEzLDMxM10sXCJtYXBwZWRcIixbMzE0XV0sW1szMTQsMzE0XSxcInZhbGlkXCJdLFtbMzE1LDMxNV0sXCJtYXBwZWRcIixbMzE2XV0sW1szMTYsMzE2XSxcInZhbGlkXCJdLFtbMzE3LDMxN10sXCJtYXBwZWRcIixbMzE4XV0sW1szMTgsMzE4XSxcInZhbGlkXCJdLFtbMzE5LDMyMF0sXCJtYXBwZWRcIixbMTA4LDE4M11dLFtbMzIxLDMyMV0sXCJtYXBwZWRcIixbMzIyXV0sW1szMjIsMzIyXSxcInZhbGlkXCJdLFtbMzIzLDMyM10sXCJtYXBwZWRcIixbMzI0XV0sW1szMjQsMzI0XSxcInZhbGlkXCJdLFtbMzI1LDMyNV0sXCJtYXBwZWRcIixbMzI2XV0sW1szMjYsMzI2XSxcInZhbGlkXCJdLFtbMzI3LDMyN10sXCJtYXBwZWRcIixbMzI4XV0sW1szMjgsMzI4XSxcInZhbGlkXCJdLFtbMzI5LDMyOV0sXCJtYXBwZWRcIixbNzAwLDExMF1dLFtbMzMwLDMzMF0sXCJtYXBwZWRcIixbMzMxXV0sW1szMzEsMzMxXSxcInZhbGlkXCJdLFtbMzMyLDMzMl0sXCJtYXBwZWRcIixbMzMzXV0sW1szMzMsMzMzXSxcInZhbGlkXCJdLFtbMzM0LDMzNF0sXCJtYXBwZWRcIixbMzM1XV0sW1szMzUsMzM1XSxcInZhbGlkXCJdLFtbMzM2LDMzNl0sXCJtYXBwZWRcIixbMzM3XV0sW1szMzcsMzM3XSxcInZhbGlkXCJdLFtbMzM4LDMzOF0sXCJtYXBwZWRcIixbMzM5XV0sW1szMzksMzM5XSxcInZhbGlkXCJdLFtbMzQwLDM0MF0sXCJtYXBwZWRcIixbMzQxXV0sW1szNDEsMzQxXSxcInZhbGlkXCJdLFtbMzQyLDM0Ml0sXCJtYXBwZWRcIixbMzQzXV0sW1szNDMsMzQzXSxcInZhbGlkXCJdLFtbMzQ0LDM0NF0sXCJtYXBwZWRcIixbMzQ1XV0sW1szNDUsMzQ1XSxcInZhbGlkXCJdLFtbMzQ2LDM0Nl0sXCJtYXBwZWRcIixbMzQ3XV0sW1szNDcsMzQ3XSxcInZhbGlkXCJdLFtbMzQ4LDM0OF0sXCJtYXBwZWRcIixbMzQ5XV0sW1szNDksMzQ5XSxcInZhbGlkXCJdLFtbMzUwLDM1MF0sXCJtYXBwZWRcIixbMzUxXV0sW1szNTEsMzUxXSxcInZhbGlkXCJdLFtbMzUyLDM1Ml0sXCJtYXBwZWRcIixbMzUzXV0sW1szNTMsMzUzXSxcInZhbGlkXCJdLFtbMzU0LDM1NF0sXCJtYXBwZWRcIixbMzU1XV0sW1szNTUsMzU1XSxcInZhbGlkXCJdLFtbMzU2LDM1Nl0sXCJtYXBwZWRcIixbMzU3XV0sW1szNTcsMzU3XSxcInZhbGlkXCJdLFtbMzU4LDM1OF0sXCJtYXBwZWRcIixbMzU5XV0sW1szNTksMzU5XSxcInZhbGlkXCJdLFtbMzYwLDM2MF0sXCJtYXBwZWRcIixbMzYxXV0sW1szNjEsMzYxXSxcInZhbGlkXCJdLFtbMzYyLDM2Ml0sXCJtYXBwZWRcIixbMzYzXV0sW1szNjMsMzYzXSxcInZhbGlkXCJdLFtbMzY0LDM2NF0sXCJtYXBwZWRcIixbMzY1XV0sW1szNjUsMzY1XSxcInZhbGlkXCJdLFtbMzY2LDM2Nl0sXCJtYXBwZWRcIixbMzY3XV0sW1szNjcsMzY3XSxcInZhbGlkXCJdLFtbMzY4LDM2OF0sXCJtYXBwZWRcIixbMzY5XV0sW1szNjksMzY5XSxcInZhbGlkXCJdLFtbMzcwLDM3MF0sXCJtYXBwZWRcIixbMzcxXV0sW1szNzEsMzcxXSxcInZhbGlkXCJdLFtbMzcyLDM3Ml0sXCJtYXBwZWRcIixbMzczXV0sW1szNzMsMzczXSxcInZhbGlkXCJdLFtbMzc0LDM3NF0sXCJtYXBwZWRcIixbMzc1XV0sW1szNzUsMzc1XSxcInZhbGlkXCJdLFtbMzc2LDM3Nl0sXCJtYXBwZWRcIixbMjU1XV0sW1szNzcsMzc3XSxcIm1hcHBlZFwiLFszNzhdXSxbWzM3OCwzNzhdLFwidmFsaWRcIl0sW1szNzksMzc5XSxcIm1hcHBlZFwiLFszODBdXSxbWzM4MCwzODBdLFwidmFsaWRcIl0sW1szODEsMzgxXSxcIm1hcHBlZFwiLFszODJdXSxbWzM4MiwzODJdLFwidmFsaWRcIl0sW1szODMsMzgzXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzM4NCwzODRdLFwidmFsaWRcIl0sW1szODUsMzg1XSxcIm1hcHBlZFwiLFs1OTVdXSxbWzM4NiwzODZdLFwibWFwcGVkXCIsWzM4N11dLFtbMzg3LDM4N10sXCJ2YWxpZFwiXSxbWzM4OCwzODhdLFwibWFwcGVkXCIsWzM4OV1dLFtbMzg5LDM4OV0sXCJ2YWxpZFwiXSxbWzM5MCwzOTBdLFwibWFwcGVkXCIsWzU5Nl1dLFtbMzkxLDM5MV0sXCJtYXBwZWRcIixbMzkyXV0sW1szOTIsMzkyXSxcInZhbGlkXCJdLFtbMzkzLDM5M10sXCJtYXBwZWRcIixbNTk4XV0sW1szOTQsMzk0XSxcIm1hcHBlZFwiLFs1OTldXSxbWzM5NSwzOTVdLFwibWFwcGVkXCIsWzM5Nl1dLFtbMzk2LDM5N10sXCJ2YWxpZFwiXSxbWzM5OCwzOThdLFwibWFwcGVkXCIsWzQ3N11dLFtbMzk5LDM5OV0sXCJtYXBwZWRcIixbNjAxXV0sW1s0MDAsNDAwXSxcIm1hcHBlZFwiLFs2MDNdXSxbWzQwMSw0MDFdLFwibWFwcGVkXCIsWzQwMl1dLFtbNDAyLDQwMl0sXCJ2YWxpZFwiXSxbWzQwMyw0MDNdLFwibWFwcGVkXCIsWzYwOF1dLFtbNDA0LDQwNF0sXCJtYXBwZWRcIixbNjExXV0sW1s0MDUsNDA1XSxcInZhbGlkXCJdLFtbNDA2LDQwNl0sXCJtYXBwZWRcIixbNjE3XV0sW1s0MDcsNDA3XSxcIm1hcHBlZFwiLFs2MTZdXSxbWzQwOCw0MDhdLFwibWFwcGVkXCIsWzQwOV1dLFtbNDA5LDQxMV0sXCJ2YWxpZFwiXSxbWzQxMiw0MTJdLFwibWFwcGVkXCIsWzYyM11dLFtbNDEzLDQxM10sXCJtYXBwZWRcIixbNjI2XV0sW1s0MTQsNDE0XSxcInZhbGlkXCJdLFtbNDE1LDQxNV0sXCJtYXBwZWRcIixbNjI5XV0sW1s0MTYsNDE2XSxcIm1hcHBlZFwiLFs0MTddXSxbWzQxNyw0MTddLFwidmFsaWRcIl0sW1s0MTgsNDE4XSxcIm1hcHBlZFwiLFs0MTldXSxbWzQxOSw0MTldLFwidmFsaWRcIl0sW1s0MjAsNDIwXSxcIm1hcHBlZFwiLFs0MjFdXSxbWzQyMSw0MjFdLFwidmFsaWRcIl0sW1s0MjIsNDIyXSxcIm1hcHBlZFwiLFs2NDBdXSxbWzQyMyw0MjNdLFwibWFwcGVkXCIsWzQyNF1dLFtbNDI0LDQyNF0sXCJ2YWxpZFwiXSxbWzQyNSw0MjVdLFwibWFwcGVkXCIsWzY0M11dLFtbNDI2LDQyN10sXCJ2YWxpZFwiXSxbWzQyOCw0MjhdLFwibWFwcGVkXCIsWzQyOV1dLFtbNDI5LDQyOV0sXCJ2YWxpZFwiXSxbWzQzMCw0MzBdLFwibWFwcGVkXCIsWzY0OF1dLFtbNDMxLDQzMV0sXCJtYXBwZWRcIixbNDMyXV0sW1s0MzIsNDMyXSxcInZhbGlkXCJdLFtbNDMzLDQzM10sXCJtYXBwZWRcIixbNjUwXV0sW1s0MzQsNDM0XSxcIm1hcHBlZFwiLFs2NTFdXSxbWzQzNSw0MzVdLFwibWFwcGVkXCIsWzQzNl1dLFtbNDM2LDQzNl0sXCJ2YWxpZFwiXSxbWzQzNyw0MzddLFwibWFwcGVkXCIsWzQzOF1dLFtbNDM4LDQzOF0sXCJ2YWxpZFwiXSxbWzQzOSw0MzldLFwibWFwcGVkXCIsWzY1OF1dLFtbNDQwLDQ0MF0sXCJtYXBwZWRcIixbNDQxXV0sW1s0NDEsNDQzXSxcInZhbGlkXCJdLFtbNDQ0LDQ0NF0sXCJtYXBwZWRcIixbNDQ1XV0sW1s0NDUsNDUxXSxcInZhbGlkXCJdLFtbNDUyLDQ1NF0sXCJtYXBwZWRcIixbMTAwLDM4Ml1dLFtbNDU1LDQ1N10sXCJtYXBwZWRcIixbMTA4LDEwNl1dLFtbNDU4LDQ2MF0sXCJtYXBwZWRcIixbMTEwLDEwNl1dLFtbNDYxLDQ2MV0sXCJtYXBwZWRcIixbNDYyXV0sW1s0NjIsNDYyXSxcInZhbGlkXCJdLFtbNDYzLDQ2M10sXCJtYXBwZWRcIixbNDY0XV0sW1s0NjQsNDY0XSxcInZhbGlkXCJdLFtbNDY1LDQ2NV0sXCJtYXBwZWRcIixbNDY2XV0sW1s0NjYsNDY2XSxcInZhbGlkXCJdLFtbNDY3LDQ2N10sXCJtYXBwZWRcIixbNDY4XV0sW1s0NjgsNDY4XSxcInZhbGlkXCJdLFtbNDY5LDQ2OV0sXCJtYXBwZWRcIixbNDcwXV0sW1s0NzAsNDcwXSxcInZhbGlkXCJdLFtbNDcxLDQ3MV0sXCJtYXBwZWRcIixbNDcyXV0sW1s0NzIsNDcyXSxcInZhbGlkXCJdLFtbNDczLDQ3M10sXCJtYXBwZWRcIixbNDc0XV0sW1s0NzQsNDc0XSxcInZhbGlkXCJdLFtbNDc1LDQ3NV0sXCJtYXBwZWRcIixbNDc2XV0sW1s0NzYsNDc3XSxcInZhbGlkXCJdLFtbNDc4LDQ3OF0sXCJtYXBwZWRcIixbNDc5XV0sW1s0NzksNDc5XSxcInZhbGlkXCJdLFtbNDgwLDQ4MF0sXCJtYXBwZWRcIixbNDgxXV0sW1s0ODEsNDgxXSxcInZhbGlkXCJdLFtbNDgyLDQ4Ml0sXCJtYXBwZWRcIixbNDgzXV0sW1s0ODMsNDgzXSxcInZhbGlkXCJdLFtbNDg0LDQ4NF0sXCJtYXBwZWRcIixbNDg1XV0sW1s0ODUsNDg1XSxcInZhbGlkXCJdLFtbNDg2LDQ4Nl0sXCJtYXBwZWRcIixbNDg3XV0sW1s0ODcsNDg3XSxcInZhbGlkXCJdLFtbNDg4LDQ4OF0sXCJtYXBwZWRcIixbNDg5XV0sW1s0ODksNDg5XSxcInZhbGlkXCJdLFtbNDkwLDQ5MF0sXCJtYXBwZWRcIixbNDkxXV0sW1s0OTEsNDkxXSxcInZhbGlkXCJdLFtbNDkyLDQ5Ml0sXCJtYXBwZWRcIixbNDkzXV0sW1s0OTMsNDkzXSxcInZhbGlkXCJdLFtbNDk0LDQ5NF0sXCJtYXBwZWRcIixbNDk1XV0sW1s0OTUsNDk2XSxcInZhbGlkXCJdLFtbNDk3LDQ5OV0sXCJtYXBwZWRcIixbMTAwLDEyMl1dLFtbNTAwLDUwMF0sXCJtYXBwZWRcIixbNTAxXV0sW1s1MDEsNTAxXSxcInZhbGlkXCJdLFtbNTAyLDUwMl0sXCJtYXBwZWRcIixbNDA1XV0sW1s1MDMsNTAzXSxcIm1hcHBlZFwiLFs0NDddXSxbWzUwNCw1MDRdLFwibWFwcGVkXCIsWzUwNV1dLFtbNTA1LDUwNV0sXCJ2YWxpZFwiXSxbWzUwNiw1MDZdLFwibWFwcGVkXCIsWzUwN11dLFtbNTA3LDUwN10sXCJ2YWxpZFwiXSxbWzUwOCw1MDhdLFwibWFwcGVkXCIsWzUwOV1dLFtbNTA5LDUwOV0sXCJ2YWxpZFwiXSxbWzUxMCw1MTBdLFwibWFwcGVkXCIsWzUxMV1dLFtbNTExLDUxMV0sXCJ2YWxpZFwiXSxbWzUxMiw1MTJdLFwibWFwcGVkXCIsWzUxM11dLFtbNTEzLDUxM10sXCJ2YWxpZFwiXSxbWzUxNCw1MTRdLFwibWFwcGVkXCIsWzUxNV1dLFtbNTE1LDUxNV0sXCJ2YWxpZFwiXSxbWzUxNiw1MTZdLFwibWFwcGVkXCIsWzUxN11dLFtbNTE3LDUxN10sXCJ2YWxpZFwiXSxbWzUxOCw1MThdLFwibWFwcGVkXCIsWzUxOV1dLFtbNTE5LDUxOV0sXCJ2YWxpZFwiXSxbWzUyMCw1MjBdLFwibWFwcGVkXCIsWzUyMV1dLFtbNTIxLDUyMV0sXCJ2YWxpZFwiXSxbWzUyMiw1MjJdLFwibWFwcGVkXCIsWzUyM11dLFtbNTIzLDUyM10sXCJ2YWxpZFwiXSxbWzUyNCw1MjRdLFwibWFwcGVkXCIsWzUyNV1dLFtbNTI1LDUyNV0sXCJ2YWxpZFwiXSxbWzUyNiw1MjZdLFwibWFwcGVkXCIsWzUyN11dLFtbNTI3LDUyN10sXCJ2YWxpZFwiXSxbWzUyOCw1MjhdLFwibWFwcGVkXCIsWzUyOV1dLFtbNTI5LDUyOV0sXCJ2YWxpZFwiXSxbWzUzMCw1MzBdLFwibWFwcGVkXCIsWzUzMV1dLFtbNTMxLDUzMV0sXCJ2YWxpZFwiXSxbWzUzMiw1MzJdLFwibWFwcGVkXCIsWzUzM11dLFtbNTMzLDUzM10sXCJ2YWxpZFwiXSxbWzUzNCw1MzRdLFwibWFwcGVkXCIsWzUzNV1dLFtbNTM1LDUzNV0sXCJ2YWxpZFwiXSxbWzUzNiw1MzZdLFwibWFwcGVkXCIsWzUzN11dLFtbNTM3LDUzN10sXCJ2YWxpZFwiXSxbWzUzOCw1MzhdLFwibWFwcGVkXCIsWzUzOV1dLFtbNTM5LDUzOV0sXCJ2YWxpZFwiXSxbWzU0MCw1NDBdLFwibWFwcGVkXCIsWzU0MV1dLFtbNTQxLDU0MV0sXCJ2YWxpZFwiXSxbWzU0Miw1NDJdLFwibWFwcGVkXCIsWzU0M11dLFtbNTQzLDU0M10sXCJ2YWxpZFwiXSxbWzU0NCw1NDRdLFwibWFwcGVkXCIsWzQxNF1dLFtbNTQ1LDU0NV0sXCJ2YWxpZFwiXSxbWzU0Niw1NDZdLFwibWFwcGVkXCIsWzU0N11dLFtbNTQ3LDU0N10sXCJ2YWxpZFwiXSxbWzU0OCw1NDhdLFwibWFwcGVkXCIsWzU0OV1dLFtbNTQ5LDU0OV0sXCJ2YWxpZFwiXSxbWzU1MCw1NTBdLFwibWFwcGVkXCIsWzU1MV1dLFtbNTUxLDU1MV0sXCJ2YWxpZFwiXSxbWzU1Miw1NTJdLFwibWFwcGVkXCIsWzU1M11dLFtbNTUzLDU1M10sXCJ2YWxpZFwiXSxbWzU1NCw1NTRdLFwibWFwcGVkXCIsWzU1NV1dLFtbNTU1LDU1NV0sXCJ2YWxpZFwiXSxbWzU1Niw1NTZdLFwibWFwcGVkXCIsWzU1N11dLFtbNTU3LDU1N10sXCJ2YWxpZFwiXSxbWzU1OCw1NThdLFwibWFwcGVkXCIsWzU1OV1dLFtbNTU5LDU1OV0sXCJ2YWxpZFwiXSxbWzU2MCw1NjBdLFwibWFwcGVkXCIsWzU2MV1dLFtbNTYxLDU2MV0sXCJ2YWxpZFwiXSxbWzU2Miw1NjJdLFwibWFwcGVkXCIsWzU2M11dLFtbNTYzLDU2M10sXCJ2YWxpZFwiXSxbWzU2NCw1NjZdLFwidmFsaWRcIl0sW1s1NjcsNTY5XSxcInZhbGlkXCJdLFtbNTcwLDU3MF0sXCJtYXBwZWRcIixbMTEzNjVdXSxbWzU3MSw1NzFdLFwibWFwcGVkXCIsWzU3Ml1dLFtbNTcyLDU3Ml0sXCJ2YWxpZFwiXSxbWzU3Myw1NzNdLFwibWFwcGVkXCIsWzQxMF1dLFtbNTc0LDU3NF0sXCJtYXBwZWRcIixbMTEzNjZdXSxbWzU3NSw1NzZdLFwidmFsaWRcIl0sW1s1NzcsNTc3XSxcIm1hcHBlZFwiLFs1NzhdXSxbWzU3OCw1NzhdLFwidmFsaWRcIl0sW1s1NzksNTc5XSxcIm1hcHBlZFwiLFszODRdXSxbWzU4MCw1ODBdLFwibWFwcGVkXCIsWzY0OV1dLFtbNTgxLDU4MV0sXCJtYXBwZWRcIixbNjUyXV0sW1s1ODIsNTgyXSxcIm1hcHBlZFwiLFs1ODNdXSxbWzU4Myw1ODNdLFwidmFsaWRcIl0sW1s1ODQsNTg0XSxcIm1hcHBlZFwiLFs1ODVdXSxbWzU4NSw1ODVdLFwidmFsaWRcIl0sW1s1ODYsNTg2XSxcIm1hcHBlZFwiLFs1ODddXSxbWzU4Nyw1ODddLFwidmFsaWRcIl0sW1s1ODgsNTg4XSxcIm1hcHBlZFwiLFs1ODldXSxbWzU4OSw1ODldLFwidmFsaWRcIl0sW1s1OTAsNTkwXSxcIm1hcHBlZFwiLFs1OTFdXSxbWzU5MSw1OTFdLFwidmFsaWRcIl0sW1s1OTIsNjgwXSxcInZhbGlkXCJdLFtbNjgxLDY4NV0sXCJ2YWxpZFwiXSxbWzY4Niw2ODddLFwidmFsaWRcIl0sW1s2ODgsNjg4XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzY4OSw2ODldLFwibWFwcGVkXCIsWzYxNF1dLFtbNjkwLDY5MF0sXCJtYXBwZWRcIixbMTA2XV0sW1s2OTEsNjkxXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzY5Miw2OTJdLFwibWFwcGVkXCIsWzYzM11dLFtbNjkzLDY5M10sXCJtYXBwZWRcIixbNjM1XV0sW1s2OTQsNjk0XSxcIm1hcHBlZFwiLFs2NDFdXSxbWzY5NSw2OTVdLFwibWFwcGVkXCIsWzExOV1dLFtbNjk2LDY5Nl0sXCJtYXBwZWRcIixbMTIxXV0sW1s2OTcsNzA1XSxcInZhbGlkXCJdLFtbNzA2LDcwOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzEwLDcyMV0sXCJ2YWxpZFwiXSxbWzcyMiw3MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcyOCw3MjhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzRdXSxbWzcyOSw3MjldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzVdXSxbWzczMCw3MzBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzhdXSxbWzczMSw3MzFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw4MDhdXSxbWzczMiw3MzJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzFdXSxbWzczMyw3MzNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzldXSxbWzczNCw3MzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzczNSw3MzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzczNiw3MzZdLFwibWFwcGVkXCIsWzYxMV1dLFtbNzM3LDczN10sXCJtYXBwZWRcIixbMTA4XV0sW1s3MzgsNzM4XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzczOSw3MzldLFwibWFwcGVkXCIsWzEyMF1dLFtbNzQwLDc0MF0sXCJtYXBwZWRcIixbNjYxXV0sW1s3NDEsNzQ1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDYsNzQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDgsNzQ4XSxcInZhbGlkXCJdLFtbNzQ5LDc0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzUwLDc1MF0sXCJ2YWxpZFwiXSxbWzc1MSw3NjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzc2OCw4MzFdLFwidmFsaWRcIl0sW1s4MzIsODMyXSxcIm1hcHBlZFwiLFs3NjhdXSxbWzgzMyw4MzNdLFwibWFwcGVkXCIsWzc2OV1dLFtbODM0LDgzNF0sXCJ2YWxpZFwiXSxbWzgzNSw4MzVdLFwibWFwcGVkXCIsWzc4N11dLFtbODM2LDgzNl0sXCJtYXBwZWRcIixbNzc2LDc2OV1dLFtbODM3LDgzN10sXCJtYXBwZWRcIixbOTUzXV0sW1s4MzgsODQ2XSxcInZhbGlkXCJdLFtbODQ3LDg0N10sXCJpZ25vcmVkXCJdLFtbODQ4LDg1NV0sXCJ2YWxpZFwiXSxbWzg1Niw4NjBdLFwidmFsaWRcIl0sW1s4NjEsODYzXSxcInZhbGlkXCJdLFtbODY0LDg2NV0sXCJ2YWxpZFwiXSxbWzg2Niw4NjZdLFwidmFsaWRcIl0sW1s4NjcsODc5XSxcInZhbGlkXCJdLFtbODgwLDg4MF0sXCJtYXBwZWRcIixbODgxXV0sW1s4ODEsODgxXSxcInZhbGlkXCJdLFtbODgyLDg4Ml0sXCJtYXBwZWRcIixbODgzXV0sW1s4ODMsODgzXSxcInZhbGlkXCJdLFtbODg0LDg4NF0sXCJtYXBwZWRcIixbNjk3XV0sW1s4ODUsODg1XSxcInZhbGlkXCJdLFtbODg2LDg4Nl0sXCJtYXBwZWRcIixbODg3XV0sW1s4ODcsODg3XSxcInZhbGlkXCJdLFtbODg4LDg4OV0sXCJkaXNhbGxvd2VkXCJdLFtbODkwLDg5MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDk1M11dLFtbODkxLDg5M10sXCJ2YWxpZFwiXSxbWzg5NCw4OTRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OV1dLFtbODk1LDg5NV0sXCJtYXBwZWRcIixbMTAxMV1dLFtbODk2LDg5OV0sXCJkaXNhbGxvd2VkXCJdLFtbOTAwLDkwMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc2OV1dLFtbOTAxLDkwMV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Niw3NjldXSxbWzkwMiw5MDJdLFwibWFwcGVkXCIsWzk0MF1dLFtbOTAzLDkwM10sXCJtYXBwZWRcIixbMTgzXV0sW1s5MDQsOTA0XSxcIm1hcHBlZFwiLFs5NDFdXSxbWzkwNSw5MDVdLFwibWFwcGVkXCIsWzk0Ml1dLFtbOTA2LDkwNl0sXCJtYXBwZWRcIixbOTQzXV0sW1s5MDcsOTA3XSxcImRpc2FsbG93ZWRcIl0sW1s5MDgsOTA4XSxcIm1hcHBlZFwiLFs5NzJdXSxbWzkwOSw5MDldLFwiZGlzYWxsb3dlZFwiXSxbWzkxMCw5MTBdLFwibWFwcGVkXCIsWzk3M11dLFtbOTExLDkxMV0sXCJtYXBwZWRcIixbOTc0XV0sW1s5MTIsOTEyXSxcInZhbGlkXCJdLFtbOTEzLDkxM10sXCJtYXBwZWRcIixbOTQ1XV0sW1s5MTQsOTE0XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzkxNSw5MTVdLFwibWFwcGVkXCIsWzk0N11dLFtbOTE2LDkxNl0sXCJtYXBwZWRcIixbOTQ4XV0sW1s5MTcsOTE3XSxcIm1hcHBlZFwiLFs5NDldXSxbWzkxOCw5MThdLFwibWFwcGVkXCIsWzk1MF1dLFtbOTE5LDkxOV0sXCJtYXBwZWRcIixbOTUxXV0sW1s5MjAsOTIwXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzkyMSw5MjFdLFwibWFwcGVkXCIsWzk1M11dLFtbOTIyLDkyMl0sXCJtYXBwZWRcIixbOTU0XV0sW1s5MjMsOTIzXSxcIm1hcHBlZFwiLFs5NTVdXSxbWzkyNCw5MjRdLFwibWFwcGVkXCIsWzk1Nl1dLFtbOTI1LDkyNV0sXCJtYXBwZWRcIixbOTU3XV0sW1s5MjYsOTI2XSxcIm1hcHBlZFwiLFs5NThdXSxbWzkyNyw5MjddLFwibWFwcGVkXCIsWzk1OV1dLFtbOTI4LDkyOF0sXCJtYXBwZWRcIixbOTYwXV0sW1s5MjksOTI5XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzkzMCw5MzBdLFwiZGlzYWxsb3dlZFwiXSxbWzkzMSw5MzFdLFwibWFwcGVkXCIsWzk2M11dLFtbOTMyLDkzMl0sXCJtYXBwZWRcIixbOTY0XV0sW1s5MzMsOTMzXSxcIm1hcHBlZFwiLFs5NjVdXSxbWzkzNCw5MzRdLFwibWFwcGVkXCIsWzk2Nl1dLFtbOTM1LDkzNV0sXCJtYXBwZWRcIixbOTY3XV0sW1s5MzYsOTM2XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzkzNyw5MzddLFwibWFwcGVkXCIsWzk2OV1dLFtbOTM4LDkzOF0sXCJtYXBwZWRcIixbOTcwXV0sW1s5MzksOTM5XSxcIm1hcHBlZFwiLFs5NzFdXSxbWzk0MCw5NjFdLFwidmFsaWRcIl0sW1s5NjIsOTYyXSxcImRldmlhdGlvblwiLFs5NjNdXSxbWzk2Myw5NzRdLFwidmFsaWRcIl0sW1s5NzUsOTc1XSxcIm1hcHBlZFwiLFs5ODNdXSxbWzk3Niw5NzZdLFwibWFwcGVkXCIsWzk0Nl1dLFtbOTc3LDk3N10sXCJtYXBwZWRcIixbOTUyXV0sW1s5NzgsOTc4XSxcIm1hcHBlZFwiLFs5NjVdXSxbWzk3OSw5NzldLFwibWFwcGVkXCIsWzk3M11dLFtbOTgwLDk4MF0sXCJtYXBwZWRcIixbOTcxXV0sW1s5ODEsOTgxXSxcIm1hcHBlZFwiLFs5NjZdXSxbWzk4Miw5ODJdLFwibWFwcGVkXCIsWzk2MF1dLFtbOTgzLDk4M10sXCJ2YWxpZFwiXSxbWzk4NCw5ODRdLFwibWFwcGVkXCIsWzk4NV1dLFtbOTg1LDk4NV0sXCJ2YWxpZFwiXSxbWzk4Niw5ODZdLFwibWFwcGVkXCIsWzk4N11dLFtbOTg3LDk4N10sXCJ2YWxpZFwiXSxbWzk4OCw5ODhdLFwibWFwcGVkXCIsWzk4OV1dLFtbOTg5LDk4OV0sXCJ2YWxpZFwiXSxbWzk5MCw5OTBdLFwibWFwcGVkXCIsWzk5MV1dLFtbOTkxLDk5MV0sXCJ2YWxpZFwiXSxbWzk5Miw5OTJdLFwibWFwcGVkXCIsWzk5M11dLFtbOTkzLDk5M10sXCJ2YWxpZFwiXSxbWzk5NCw5OTRdLFwibWFwcGVkXCIsWzk5NV1dLFtbOTk1LDk5NV0sXCJ2YWxpZFwiXSxbWzk5Niw5OTZdLFwibWFwcGVkXCIsWzk5N11dLFtbOTk3LDk5N10sXCJ2YWxpZFwiXSxbWzk5OCw5OThdLFwibWFwcGVkXCIsWzk5OV1dLFtbOTk5LDk5OV0sXCJ2YWxpZFwiXSxbWzEwMDAsMTAwMF0sXCJtYXBwZWRcIixbMTAwMV1dLFtbMTAwMSwxMDAxXSxcInZhbGlkXCJdLFtbMTAwMiwxMDAyXSxcIm1hcHBlZFwiLFsxMDAzXV0sW1sxMDAzLDEwMDNdLFwidmFsaWRcIl0sW1sxMDA0LDEwMDRdLFwibWFwcGVkXCIsWzEwMDVdXSxbWzEwMDUsMTAwNV0sXCJ2YWxpZFwiXSxbWzEwMDYsMTAwNl0sXCJtYXBwZWRcIixbMTAwN11dLFtbMTAwNywxMDA3XSxcInZhbGlkXCJdLFtbMTAwOCwxMDA4XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEwMDksMTAwOV0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMDEwLDEwMTBdLFwibWFwcGVkXCIsWzk2M11dLFtbMTAxMSwxMDExXSxcInZhbGlkXCJdLFtbMTAxMiwxMDEyXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEwMTMsMTAxM10sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMDE0LDEwMTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTUsMTAxNV0sXCJtYXBwZWRcIixbMTAxNl1dLFtbMTAxNiwxMDE2XSxcInZhbGlkXCJdLFtbMTAxNywxMDE3XSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEwMTgsMTAxOF0sXCJtYXBwZWRcIixbMTAxOV1dLFtbMTAxOSwxMDE5XSxcInZhbGlkXCJdLFtbMTAyMCwxMDIwXSxcInZhbGlkXCJdLFtbMTAyMSwxMDIxXSxcIm1hcHBlZFwiLFs4OTFdXSxbWzEwMjIsMTAyMl0sXCJtYXBwZWRcIixbODkyXV0sW1sxMDIzLDEwMjNdLFwibWFwcGVkXCIsWzg5M11dLFtbMTAyNCwxMDI0XSxcIm1hcHBlZFwiLFsxMTA0XV0sW1sxMDI1LDEwMjVdLFwibWFwcGVkXCIsWzExMDVdXSxbWzEwMjYsMTAyNl0sXCJtYXBwZWRcIixbMTEwNl1dLFtbMTAyNywxMDI3XSxcIm1hcHBlZFwiLFsxMTA3XV0sW1sxMDI4LDEwMjhdLFwibWFwcGVkXCIsWzExMDhdXSxbWzEwMjksMTAyOV0sXCJtYXBwZWRcIixbMTEwOV1dLFtbMTAzMCwxMDMwXSxcIm1hcHBlZFwiLFsxMTEwXV0sW1sxMDMxLDEwMzFdLFwibWFwcGVkXCIsWzExMTFdXSxbWzEwMzIsMTAzMl0sXCJtYXBwZWRcIixbMTExMl1dLFtbMTAzMywxMDMzXSxcIm1hcHBlZFwiLFsxMTEzXV0sW1sxMDM0LDEwMzRdLFwibWFwcGVkXCIsWzExMTRdXSxbWzEwMzUsMTAzNV0sXCJtYXBwZWRcIixbMTExNV1dLFtbMTAzNiwxMDM2XSxcIm1hcHBlZFwiLFsxMTE2XV0sW1sxMDM3LDEwMzddLFwibWFwcGVkXCIsWzExMTddXSxbWzEwMzgsMTAzOF0sXCJtYXBwZWRcIixbMTExOF1dLFtbMTAzOSwxMDM5XSxcIm1hcHBlZFwiLFsxMTE5XV0sW1sxMDQwLDEwNDBdLFwibWFwcGVkXCIsWzEwNzJdXSxbWzEwNDEsMTA0MV0sXCJtYXBwZWRcIixbMTA3M11dLFtbMTA0MiwxMDQyXSxcIm1hcHBlZFwiLFsxMDc0XV0sW1sxMDQzLDEwNDNdLFwibWFwcGVkXCIsWzEwNzVdXSxbWzEwNDQsMTA0NF0sXCJtYXBwZWRcIixbMTA3Nl1dLFtbMTA0NSwxMDQ1XSxcIm1hcHBlZFwiLFsxMDc3XV0sW1sxMDQ2LDEwNDZdLFwibWFwcGVkXCIsWzEwNzhdXSxbWzEwNDcsMTA0N10sXCJtYXBwZWRcIixbMTA3OV1dLFtbMTA0OCwxMDQ4XSxcIm1hcHBlZFwiLFsxMDgwXV0sW1sxMDQ5LDEwNDldLFwibWFwcGVkXCIsWzEwODFdXSxbWzEwNTAsMTA1MF0sXCJtYXBwZWRcIixbMTA4Ml1dLFtbMTA1MSwxMDUxXSxcIm1hcHBlZFwiLFsxMDgzXV0sW1sxMDUyLDEwNTJdLFwibWFwcGVkXCIsWzEwODRdXSxbWzEwNTMsMTA1M10sXCJtYXBwZWRcIixbMTA4NV1dLFtbMTA1NCwxMDU0XSxcIm1hcHBlZFwiLFsxMDg2XV0sW1sxMDU1LDEwNTVdLFwibWFwcGVkXCIsWzEwODddXSxbWzEwNTYsMTA1Nl0sXCJtYXBwZWRcIixbMTA4OF1dLFtbMTA1NywxMDU3XSxcIm1hcHBlZFwiLFsxMDg5XV0sW1sxMDU4LDEwNThdLFwibWFwcGVkXCIsWzEwOTBdXSxbWzEwNTksMTA1OV0sXCJtYXBwZWRcIixbMTA5MV1dLFtbMTA2MCwxMDYwXSxcIm1hcHBlZFwiLFsxMDkyXV0sW1sxMDYxLDEwNjFdLFwibWFwcGVkXCIsWzEwOTNdXSxbWzEwNjIsMTA2Ml0sXCJtYXBwZWRcIixbMTA5NF1dLFtbMTA2MywxMDYzXSxcIm1hcHBlZFwiLFsxMDk1XV0sW1sxMDY0LDEwNjRdLFwibWFwcGVkXCIsWzEwOTZdXSxbWzEwNjUsMTA2NV0sXCJtYXBwZWRcIixbMTA5N11dLFtbMTA2NiwxMDY2XSxcIm1hcHBlZFwiLFsxMDk4XV0sW1sxMDY3LDEwNjddLFwibWFwcGVkXCIsWzEwOTldXSxbWzEwNjgsMTA2OF0sXCJtYXBwZWRcIixbMTEwMF1dLFtbMTA2OSwxMDY5XSxcIm1hcHBlZFwiLFsxMTAxXV0sW1sxMDcwLDEwNzBdLFwibWFwcGVkXCIsWzExMDJdXSxbWzEwNzEsMTA3MV0sXCJtYXBwZWRcIixbMTEwM11dLFtbMTA3MiwxMTAzXSxcInZhbGlkXCJdLFtbMTEwNCwxMTA0XSxcInZhbGlkXCJdLFtbMTEwNSwxMTE2XSxcInZhbGlkXCJdLFtbMTExNywxMTE3XSxcInZhbGlkXCJdLFtbMTExOCwxMTE5XSxcInZhbGlkXCJdLFtbMTEyMCwxMTIwXSxcIm1hcHBlZFwiLFsxMTIxXV0sW1sxMTIxLDExMjFdLFwidmFsaWRcIl0sW1sxMTIyLDExMjJdLFwibWFwcGVkXCIsWzExMjNdXSxbWzExMjMsMTEyM10sXCJ2YWxpZFwiXSxbWzExMjQsMTEyNF0sXCJtYXBwZWRcIixbMTEyNV1dLFtbMTEyNSwxMTI1XSxcInZhbGlkXCJdLFtbMTEyNiwxMTI2XSxcIm1hcHBlZFwiLFsxMTI3XV0sW1sxMTI3LDExMjddLFwidmFsaWRcIl0sW1sxMTI4LDExMjhdLFwibWFwcGVkXCIsWzExMjldXSxbWzExMjksMTEyOV0sXCJ2YWxpZFwiXSxbWzExMzAsMTEzMF0sXCJtYXBwZWRcIixbMTEzMV1dLFtbMTEzMSwxMTMxXSxcInZhbGlkXCJdLFtbMTEzMiwxMTMyXSxcIm1hcHBlZFwiLFsxMTMzXV0sW1sxMTMzLDExMzNdLFwidmFsaWRcIl0sW1sxMTM0LDExMzRdLFwibWFwcGVkXCIsWzExMzVdXSxbWzExMzUsMTEzNV0sXCJ2YWxpZFwiXSxbWzExMzYsMTEzNl0sXCJtYXBwZWRcIixbMTEzN11dLFtbMTEzNywxMTM3XSxcInZhbGlkXCJdLFtbMTEzOCwxMTM4XSxcIm1hcHBlZFwiLFsxMTM5XV0sW1sxMTM5LDExMzldLFwidmFsaWRcIl0sW1sxMTQwLDExNDBdLFwibWFwcGVkXCIsWzExNDFdXSxbWzExNDEsMTE0MV0sXCJ2YWxpZFwiXSxbWzExNDIsMTE0Ml0sXCJtYXBwZWRcIixbMTE0M11dLFtbMTE0MywxMTQzXSxcInZhbGlkXCJdLFtbMTE0NCwxMTQ0XSxcIm1hcHBlZFwiLFsxMTQ1XV0sW1sxMTQ1LDExNDVdLFwidmFsaWRcIl0sW1sxMTQ2LDExNDZdLFwibWFwcGVkXCIsWzExNDddXSxbWzExNDcsMTE0N10sXCJ2YWxpZFwiXSxbWzExNDgsMTE0OF0sXCJtYXBwZWRcIixbMTE0OV1dLFtbMTE0OSwxMTQ5XSxcInZhbGlkXCJdLFtbMTE1MCwxMTUwXSxcIm1hcHBlZFwiLFsxMTUxXV0sW1sxMTUxLDExNTFdLFwidmFsaWRcIl0sW1sxMTUyLDExNTJdLFwibWFwcGVkXCIsWzExNTNdXSxbWzExNTMsMTE1M10sXCJ2YWxpZFwiXSxbWzExNTQsMTE1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE1NSwxMTU4XSxcInZhbGlkXCJdLFtbMTE1OSwxMTU5XSxcInZhbGlkXCJdLFtbMTE2MCwxMTYxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTYyLDExNjJdLFwibWFwcGVkXCIsWzExNjNdXSxbWzExNjMsMTE2M10sXCJ2YWxpZFwiXSxbWzExNjQsMTE2NF0sXCJtYXBwZWRcIixbMTE2NV1dLFtbMTE2NSwxMTY1XSxcInZhbGlkXCJdLFtbMTE2NiwxMTY2XSxcIm1hcHBlZFwiLFsxMTY3XV0sW1sxMTY3LDExNjddLFwidmFsaWRcIl0sW1sxMTY4LDExNjhdLFwibWFwcGVkXCIsWzExNjldXSxbWzExNjksMTE2OV0sXCJ2YWxpZFwiXSxbWzExNzAsMTE3MF0sXCJtYXBwZWRcIixbMTE3MV1dLFtbMTE3MSwxMTcxXSxcInZhbGlkXCJdLFtbMTE3MiwxMTcyXSxcIm1hcHBlZFwiLFsxMTczXV0sW1sxMTczLDExNzNdLFwidmFsaWRcIl0sW1sxMTc0LDExNzRdLFwibWFwcGVkXCIsWzExNzVdXSxbWzExNzUsMTE3NV0sXCJ2YWxpZFwiXSxbWzExNzYsMTE3Nl0sXCJtYXBwZWRcIixbMTE3N11dLFtbMTE3NywxMTc3XSxcInZhbGlkXCJdLFtbMTE3OCwxMTc4XSxcIm1hcHBlZFwiLFsxMTc5XV0sW1sxMTc5LDExNzldLFwidmFsaWRcIl0sW1sxMTgwLDExODBdLFwibWFwcGVkXCIsWzExODFdXSxbWzExODEsMTE4MV0sXCJ2YWxpZFwiXSxbWzExODIsMTE4Ml0sXCJtYXBwZWRcIixbMTE4M11dLFtbMTE4MywxMTgzXSxcInZhbGlkXCJdLFtbMTE4NCwxMTg0XSxcIm1hcHBlZFwiLFsxMTg1XV0sW1sxMTg1LDExODVdLFwidmFsaWRcIl0sW1sxMTg2LDExODZdLFwibWFwcGVkXCIsWzExODddXSxbWzExODcsMTE4N10sXCJ2YWxpZFwiXSxbWzExODgsMTE4OF0sXCJtYXBwZWRcIixbMTE4OV1dLFtbMTE4OSwxMTg5XSxcInZhbGlkXCJdLFtbMTE5MCwxMTkwXSxcIm1hcHBlZFwiLFsxMTkxXV0sW1sxMTkxLDExOTFdLFwidmFsaWRcIl0sW1sxMTkyLDExOTJdLFwibWFwcGVkXCIsWzExOTNdXSxbWzExOTMsMTE5M10sXCJ2YWxpZFwiXSxbWzExOTQsMTE5NF0sXCJtYXBwZWRcIixbMTE5NV1dLFtbMTE5NSwxMTk1XSxcInZhbGlkXCJdLFtbMTE5NiwxMTk2XSxcIm1hcHBlZFwiLFsxMTk3XV0sW1sxMTk3LDExOTddLFwidmFsaWRcIl0sW1sxMTk4LDExOThdLFwibWFwcGVkXCIsWzExOTldXSxbWzExOTksMTE5OV0sXCJ2YWxpZFwiXSxbWzEyMDAsMTIwMF0sXCJtYXBwZWRcIixbMTIwMV1dLFtbMTIwMSwxMjAxXSxcInZhbGlkXCJdLFtbMTIwMiwxMjAyXSxcIm1hcHBlZFwiLFsxMjAzXV0sW1sxMjAzLDEyMDNdLFwidmFsaWRcIl0sW1sxMjA0LDEyMDRdLFwibWFwcGVkXCIsWzEyMDVdXSxbWzEyMDUsMTIwNV0sXCJ2YWxpZFwiXSxbWzEyMDYsMTIwNl0sXCJtYXBwZWRcIixbMTIwN11dLFtbMTIwNywxMjA3XSxcInZhbGlkXCJdLFtbMTIwOCwxMjA4XSxcIm1hcHBlZFwiLFsxMjA5XV0sW1sxMjA5LDEyMDldLFwidmFsaWRcIl0sW1sxMjEwLDEyMTBdLFwibWFwcGVkXCIsWzEyMTFdXSxbWzEyMTEsMTIxMV0sXCJ2YWxpZFwiXSxbWzEyMTIsMTIxMl0sXCJtYXBwZWRcIixbMTIxM11dLFtbMTIxMywxMjEzXSxcInZhbGlkXCJdLFtbMTIxNCwxMjE0XSxcIm1hcHBlZFwiLFsxMjE1XV0sW1sxMjE1LDEyMTVdLFwidmFsaWRcIl0sW1sxMjE2LDEyMTZdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMTcsMTIxN10sXCJtYXBwZWRcIixbMTIxOF1dLFtbMTIxOCwxMjE4XSxcInZhbGlkXCJdLFtbMTIxOSwxMjE5XSxcIm1hcHBlZFwiLFsxMjIwXV0sW1sxMjIwLDEyMjBdLFwidmFsaWRcIl0sW1sxMjIxLDEyMjFdLFwibWFwcGVkXCIsWzEyMjJdXSxbWzEyMjIsMTIyMl0sXCJ2YWxpZFwiXSxbWzEyMjMsMTIyM10sXCJtYXBwZWRcIixbMTIyNF1dLFtbMTIyNCwxMjI0XSxcInZhbGlkXCJdLFtbMTIyNSwxMjI1XSxcIm1hcHBlZFwiLFsxMjI2XV0sW1sxMjI2LDEyMjZdLFwidmFsaWRcIl0sW1sxMjI3LDEyMjddLFwibWFwcGVkXCIsWzEyMjhdXSxbWzEyMjgsMTIyOF0sXCJ2YWxpZFwiXSxbWzEyMjksMTIyOV0sXCJtYXBwZWRcIixbMTIzMF1dLFtbMTIzMCwxMjMwXSxcInZhbGlkXCJdLFtbMTIzMSwxMjMxXSxcInZhbGlkXCJdLFtbMTIzMiwxMjMyXSxcIm1hcHBlZFwiLFsxMjMzXV0sW1sxMjMzLDEyMzNdLFwidmFsaWRcIl0sW1sxMjM0LDEyMzRdLFwibWFwcGVkXCIsWzEyMzVdXSxbWzEyMzUsMTIzNV0sXCJ2YWxpZFwiXSxbWzEyMzYsMTIzNl0sXCJtYXBwZWRcIixbMTIzN11dLFtbMTIzNywxMjM3XSxcInZhbGlkXCJdLFtbMTIzOCwxMjM4XSxcIm1hcHBlZFwiLFsxMjM5XV0sW1sxMjM5LDEyMzldLFwidmFsaWRcIl0sW1sxMjQwLDEyNDBdLFwibWFwcGVkXCIsWzEyNDFdXSxbWzEyNDEsMTI0MV0sXCJ2YWxpZFwiXSxbWzEyNDIsMTI0Ml0sXCJtYXBwZWRcIixbMTI0M11dLFtbMTI0MywxMjQzXSxcInZhbGlkXCJdLFtbMTI0NCwxMjQ0XSxcIm1hcHBlZFwiLFsxMjQ1XV0sW1sxMjQ1LDEyNDVdLFwidmFsaWRcIl0sW1sxMjQ2LDEyNDZdLFwibWFwcGVkXCIsWzEyNDddXSxbWzEyNDcsMTI0N10sXCJ2YWxpZFwiXSxbWzEyNDgsMTI0OF0sXCJtYXBwZWRcIixbMTI0OV1dLFtbMTI0OSwxMjQ5XSxcInZhbGlkXCJdLFtbMTI1MCwxMjUwXSxcIm1hcHBlZFwiLFsxMjUxXV0sW1sxMjUxLDEyNTFdLFwidmFsaWRcIl0sW1sxMjUyLDEyNTJdLFwibWFwcGVkXCIsWzEyNTNdXSxbWzEyNTMsMTI1M10sXCJ2YWxpZFwiXSxbWzEyNTQsMTI1NF0sXCJtYXBwZWRcIixbMTI1NV1dLFtbMTI1NSwxMjU1XSxcInZhbGlkXCJdLFtbMTI1NiwxMjU2XSxcIm1hcHBlZFwiLFsxMjU3XV0sW1sxMjU3LDEyNTddLFwidmFsaWRcIl0sW1sxMjU4LDEyNThdLFwibWFwcGVkXCIsWzEyNTldXSxbWzEyNTksMTI1OV0sXCJ2YWxpZFwiXSxbWzEyNjAsMTI2MF0sXCJtYXBwZWRcIixbMTI2MV1dLFtbMTI2MSwxMjYxXSxcInZhbGlkXCJdLFtbMTI2MiwxMjYyXSxcIm1hcHBlZFwiLFsxMjYzXV0sW1sxMjYzLDEyNjNdLFwidmFsaWRcIl0sW1sxMjY0LDEyNjRdLFwibWFwcGVkXCIsWzEyNjVdXSxbWzEyNjUsMTI2NV0sXCJ2YWxpZFwiXSxbWzEyNjYsMTI2Nl0sXCJtYXBwZWRcIixbMTI2N11dLFtbMTI2NywxMjY3XSxcInZhbGlkXCJdLFtbMTI2OCwxMjY4XSxcIm1hcHBlZFwiLFsxMjY5XV0sW1sxMjY5LDEyNjldLFwidmFsaWRcIl0sW1sxMjcwLDEyNzBdLFwibWFwcGVkXCIsWzEyNzFdXSxbWzEyNzEsMTI3MV0sXCJ2YWxpZFwiXSxbWzEyNzIsMTI3Ml0sXCJtYXBwZWRcIixbMTI3M11dLFtbMTI3MywxMjczXSxcInZhbGlkXCJdLFtbMTI3NCwxMjc0XSxcIm1hcHBlZFwiLFsxMjc1XV0sW1sxMjc1LDEyNzVdLFwidmFsaWRcIl0sW1sxMjc2LDEyNzZdLFwibWFwcGVkXCIsWzEyNzddXSxbWzEyNzcsMTI3N10sXCJ2YWxpZFwiXSxbWzEyNzgsMTI3OF0sXCJtYXBwZWRcIixbMTI3OV1dLFtbMTI3OSwxMjc5XSxcInZhbGlkXCJdLFtbMTI4MCwxMjgwXSxcIm1hcHBlZFwiLFsxMjgxXV0sW1sxMjgxLDEyODFdLFwidmFsaWRcIl0sW1sxMjgyLDEyODJdLFwibWFwcGVkXCIsWzEyODNdXSxbWzEyODMsMTI4M10sXCJ2YWxpZFwiXSxbWzEyODQsMTI4NF0sXCJtYXBwZWRcIixbMTI4NV1dLFtbMTI4NSwxMjg1XSxcInZhbGlkXCJdLFtbMTI4NiwxMjg2XSxcIm1hcHBlZFwiLFsxMjg3XV0sW1sxMjg3LDEyODddLFwidmFsaWRcIl0sW1sxMjg4LDEyODhdLFwibWFwcGVkXCIsWzEyODldXSxbWzEyODksMTI4OV0sXCJ2YWxpZFwiXSxbWzEyOTAsMTI5MF0sXCJtYXBwZWRcIixbMTI5MV1dLFtbMTI5MSwxMjkxXSxcInZhbGlkXCJdLFtbMTI5MiwxMjkyXSxcIm1hcHBlZFwiLFsxMjkzXV0sW1sxMjkzLDEyOTNdLFwidmFsaWRcIl0sW1sxMjk0LDEyOTRdLFwibWFwcGVkXCIsWzEyOTVdXSxbWzEyOTUsMTI5NV0sXCJ2YWxpZFwiXSxbWzEyOTYsMTI5Nl0sXCJtYXBwZWRcIixbMTI5N11dLFtbMTI5NywxMjk3XSxcInZhbGlkXCJdLFtbMTI5OCwxMjk4XSxcIm1hcHBlZFwiLFsxMjk5XV0sW1sxMjk5LDEyOTldLFwidmFsaWRcIl0sW1sxMzAwLDEzMDBdLFwibWFwcGVkXCIsWzEzMDFdXSxbWzEzMDEsMTMwMV0sXCJ2YWxpZFwiXSxbWzEzMDIsMTMwMl0sXCJtYXBwZWRcIixbMTMwM11dLFtbMTMwMywxMzAzXSxcInZhbGlkXCJdLFtbMTMwNCwxMzA0XSxcIm1hcHBlZFwiLFsxMzA1XV0sW1sxMzA1LDEzMDVdLFwidmFsaWRcIl0sW1sxMzA2LDEzMDZdLFwibWFwcGVkXCIsWzEzMDddXSxbWzEzMDcsMTMwN10sXCJ2YWxpZFwiXSxbWzEzMDgsMTMwOF0sXCJtYXBwZWRcIixbMTMwOV1dLFtbMTMwOSwxMzA5XSxcInZhbGlkXCJdLFtbMTMxMCwxMzEwXSxcIm1hcHBlZFwiLFsxMzExXV0sW1sxMzExLDEzMTFdLFwidmFsaWRcIl0sW1sxMzEyLDEzMTJdLFwibWFwcGVkXCIsWzEzMTNdXSxbWzEzMTMsMTMxM10sXCJ2YWxpZFwiXSxbWzEzMTQsMTMxNF0sXCJtYXBwZWRcIixbMTMxNV1dLFtbMTMxNSwxMzE1XSxcInZhbGlkXCJdLFtbMTMxNiwxMzE2XSxcIm1hcHBlZFwiLFsxMzE3XV0sW1sxMzE3LDEzMTddLFwidmFsaWRcIl0sW1sxMzE4LDEzMThdLFwibWFwcGVkXCIsWzEzMTldXSxbWzEzMTksMTMxOV0sXCJ2YWxpZFwiXSxbWzEzMjAsMTMyMF0sXCJtYXBwZWRcIixbMTMyMV1dLFtbMTMyMSwxMzIxXSxcInZhbGlkXCJdLFtbMTMyMiwxMzIyXSxcIm1hcHBlZFwiLFsxMzIzXV0sW1sxMzIzLDEzMjNdLFwidmFsaWRcIl0sW1sxMzI0LDEzMjRdLFwibWFwcGVkXCIsWzEzMjVdXSxbWzEzMjUsMTMyNV0sXCJ2YWxpZFwiXSxbWzEzMjYsMTMyNl0sXCJtYXBwZWRcIixbMTMyN11dLFtbMTMyNywxMzI3XSxcInZhbGlkXCJdLFtbMTMyOCwxMzI4XSxcImRpc2FsbG93ZWRcIl0sW1sxMzI5LDEzMjldLFwibWFwcGVkXCIsWzEzNzddXSxbWzEzMzAsMTMzMF0sXCJtYXBwZWRcIixbMTM3OF1dLFtbMTMzMSwxMzMxXSxcIm1hcHBlZFwiLFsxMzc5XV0sW1sxMzMyLDEzMzJdLFwibWFwcGVkXCIsWzEzODBdXSxbWzEzMzMsMTMzM10sXCJtYXBwZWRcIixbMTM4MV1dLFtbMTMzNCwxMzM0XSxcIm1hcHBlZFwiLFsxMzgyXV0sW1sxMzM1LDEzMzVdLFwibWFwcGVkXCIsWzEzODNdXSxbWzEzMzYsMTMzNl0sXCJtYXBwZWRcIixbMTM4NF1dLFtbMTMzNywxMzM3XSxcIm1hcHBlZFwiLFsxMzg1XV0sW1sxMzM4LDEzMzhdLFwibWFwcGVkXCIsWzEzODZdXSxbWzEzMzksMTMzOV0sXCJtYXBwZWRcIixbMTM4N11dLFtbMTM0MCwxMzQwXSxcIm1hcHBlZFwiLFsxMzg4XV0sW1sxMzQxLDEzNDFdLFwibWFwcGVkXCIsWzEzODldXSxbWzEzNDIsMTM0Ml0sXCJtYXBwZWRcIixbMTM5MF1dLFtbMTM0MywxMzQzXSxcIm1hcHBlZFwiLFsxMzkxXV0sW1sxMzQ0LDEzNDRdLFwibWFwcGVkXCIsWzEzOTJdXSxbWzEzNDUsMTM0NV0sXCJtYXBwZWRcIixbMTM5M11dLFtbMTM0NiwxMzQ2XSxcIm1hcHBlZFwiLFsxMzk0XV0sW1sxMzQ3LDEzNDddLFwibWFwcGVkXCIsWzEzOTVdXSxbWzEzNDgsMTM0OF0sXCJtYXBwZWRcIixbMTM5Nl1dLFtbMTM0OSwxMzQ5XSxcIm1hcHBlZFwiLFsxMzk3XV0sW1sxMzUwLDEzNTBdLFwibWFwcGVkXCIsWzEzOThdXSxbWzEzNTEsMTM1MV0sXCJtYXBwZWRcIixbMTM5OV1dLFtbMTM1MiwxMzUyXSxcIm1hcHBlZFwiLFsxNDAwXV0sW1sxMzUzLDEzNTNdLFwibWFwcGVkXCIsWzE0MDFdXSxbWzEzNTQsMTM1NF0sXCJtYXBwZWRcIixbMTQwMl1dLFtbMTM1NSwxMzU1XSxcIm1hcHBlZFwiLFsxNDAzXV0sW1sxMzU2LDEzNTZdLFwibWFwcGVkXCIsWzE0MDRdXSxbWzEzNTcsMTM1N10sXCJtYXBwZWRcIixbMTQwNV1dLFtbMTM1OCwxMzU4XSxcIm1hcHBlZFwiLFsxNDA2XV0sW1sxMzU5LDEzNTldLFwibWFwcGVkXCIsWzE0MDddXSxbWzEzNjAsMTM2MF0sXCJtYXBwZWRcIixbMTQwOF1dLFtbMTM2MSwxMzYxXSxcIm1hcHBlZFwiLFsxNDA5XV0sW1sxMzYyLDEzNjJdLFwibWFwcGVkXCIsWzE0MTBdXSxbWzEzNjMsMTM2M10sXCJtYXBwZWRcIixbMTQxMV1dLFtbMTM2NCwxMzY0XSxcIm1hcHBlZFwiLFsxNDEyXV0sW1sxMzY1LDEzNjVdLFwibWFwcGVkXCIsWzE0MTNdXSxbWzEzNjYsMTM2Nl0sXCJtYXBwZWRcIixbMTQxNF1dLFtbMTM2NywxMzY4XSxcImRpc2FsbG93ZWRcIl0sW1sxMzY5LDEzNjldLFwidmFsaWRcIl0sW1sxMzcwLDEzNzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEzNzYsMTM3Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTM3NywxNDE0XSxcInZhbGlkXCJdLFtbMTQxNSwxNDE1XSxcIm1hcHBlZFwiLFsxMzgxLDE0MTBdXSxbWzE0MTYsMTQxNl0sXCJkaXNhbGxvd2VkXCJdLFtbMTQxNywxNDE3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNDE4LDE0MThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0MTksMTQyMF0sXCJkaXNhbGxvd2VkXCJdLFtbMTQyMSwxNDIyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNDIzLDE0MjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0MjQsMTQyNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTQyNSwxNDQxXSxcInZhbGlkXCJdLFtbMTQ0MiwxNDQyXSxcInZhbGlkXCJdLFtbMTQ0MywxNDU1XSxcInZhbGlkXCJdLFtbMTQ1NiwxNDY1XSxcInZhbGlkXCJdLFtbMTQ2NiwxNDY2XSxcInZhbGlkXCJdLFtbMTQ2NywxNDY5XSxcInZhbGlkXCJdLFtbMTQ3MCwxNDcwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNDcxLDE0NzFdLFwidmFsaWRcIl0sW1sxNDcyLDE0NzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0NzMsMTQ3NF0sXCJ2YWxpZFwiXSxbWzE0NzUsMTQ3NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTQ3NiwxNDc2XSxcInZhbGlkXCJdLFtbMTQ3NywxNDc3XSxcInZhbGlkXCJdLFtbMTQ3OCwxNDc4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNDc5LDE0NzldLFwidmFsaWRcIl0sW1sxNDgwLDE0ODddLFwiZGlzYWxsb3dlZFwiXSxbWzE0ODgsMTUxNF0sXCJ2YWxpZFwiXSxbWzE1MTUsMTUxOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTUyMCwxNTI0XSxcInZhbGlkXCJdLFtbMTUyNSwxNTM1XSxcImRpc2FsbG93ZWRcIl0sW1sxNTM2LDE1MzldLFwiZGlzYWxsb3dlZFwiXSxbWzE1NDAsMTU0MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTU0MSwxNTQxXSxcImRpc2FsbG93ZWRcIl0sW1sxNTQyLDE1NDZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE1NDcsMTU0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTU0OCwxNTQ4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNTQ5LDE1NTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE1NTIsMTU1N10sXCJ2YWxpZFwiXSxbWzE1NTgsMTU2Ml0sXCJ2YWxpZFwiXSxbWzE1NjMsMTU2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTU2NCwxNTY0XSxcImRpc2FsbG93ZWRcIl0sW1sxNTY1LDE1NjVdLFwiZGlzYWxsb3dlZFwiXSxbWzE1NjYsMTU2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTU2NywxNTY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNTY4LDE1NjhdLFwidmFsaWRcIl0sW1sxNTY5LDE1OTRdLFwidmFsaWRcIl0sW1sxNTk1LDE1OTldLFwidmFsaWRcIl0sW1sxNjAwLDE2MDBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE2MDEsMTYxOF0sXCJ2YWxpZFwiXSxbWzE2MTksMTYyMV0sXCJ2YWxpZFwiXSxbWzE2MjIsMTYyNF0sXCJ2YWxpZFwiXSxbWzE2MjUsMTYzMF0sXCJ2YWxpZFwiXSxbWzE2MzEsMTYzMV0sXCJ2YWxpZFwiXSxbWzE2MzIsMTY0MV0sXCJ2YWxpZFwiXSxbWzE2NDIsMTY0NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTY0NiwxNjQ3XSxcInZhbGlkXCJdLFtbMTY0OCwxNjUyXSxcInZhbGlkXCJdLFtbMTY1MywxNjUzXSxcIm1hcHBlZFwiLFsxNTc1LDE2NTJdXSxbWzE2NTQsMTY1NF0sXCJtYXBwZWRcIixbMTYwOCwxNjUyXV0sW1sxNjU1LDE2NTVdLFwibWFwcGVkXCIsWzE3MzUsMTY1Ml1dLFtbMTY1NiwxNjU2XSxcIm1hcHBlZFwiLFsxNjEwLDE2NTJdXSxbWzE2NTcsMTcxOV0sXCJ2YWxpZFwiXSxbWzE3MjAsMTcyMV0sXCJ2YWxpZFwiXSxbWzE3MjIsMTcyNl0sXCJ2YWxpZFwiXSxbWzE3MjcsMTcyN10sXCJ2YWxpZFwiXSxbWzE3MjgsMTc0Ml0sXCJ2YWxpZFwiXSxbWzE3NDMsMTc0M10sXCJ2YWxpZFwiXSxbWzE3NDQsMTc0N10sXCJ2YWxpZFwiXSxbWzE3NDgsMTc0OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTc0OSwxNzU2XSxcInZhbGlkXCJdLFtbMTc1NywxNzU3XSxcImRpc2FsbG93ZWRcIl0sW1sxNzU4LDE3NThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE3NTksMTc2OF0sXCJ2YWxpZFwiXSxbWzE3NjksMTc2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTc3MCwxNzczXSxcInZhbGlkXCJdLFtbMTc3NCwxNzc1XSxcInZhbGlkXCJdLFtbMTc3NiwxNzg1XSxcInZhbGlkXCJdLFtbMTc4NiwxNzkwXSxcInZhbGlkXCJdLFtbMTc5MSwxNzkxXSxcInZhbGlkXCJdLFtbMTc5MiwxODA1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxODA2LDE4MDZdLFwiZGlzYWxsb3dlZFwiXSxbWzE4MDcsMTgwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTgwOCwxODM2XSxcInZhbGlkXCJdLFtbMTgzNywxODM5XSxcInZhbGlkXCJdLFtbMTg0MCwxODY2XSxcInZhbGlkXCJdLFtbMTg2NywxODY4XSxcImRpc2FsbG93ZWRcIl0sW1sxODY5LDE4NzFdLFwidmFsaWRcIl0sW1sxODcyLDE5MDFdLFwidmFsaWRcIl0sW1sxOTAyLDE5MTldLFwidmFsaWRcIl0sW1sxOTIwLDE5NjhdLFwidmFsaWRcIl0sW1sxOTY5LDE5NjldLFwidmFsaWRcIl0sW1sxOTcwLDE5ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzE5ODQsMjAzN10sXCJ2YWxpZFwiXSxbWzIwMzgsMjA0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjA0MywyMDQ3XSxcImRpc2FsbG93ZWRcIl0sW1syMDQ4LDIwOTNdLFwidmFsaWRcIl0sW1syMDk0LDIwOTVdLFwiZGlzYWxsb3dlZFwiXSxbWzIwOTYsMjExMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjExMSwyMTExXSxcImRpc2FsbG93ZWRcIl0sW1syMTEyLDIxMzldLFwidmFsaWRcIl0sW1syMTQwLDIxNDFdLFwiZGlzYWxsb3dlZFwiXSxbWzIxNDIsMjE0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjE0MywyMjA3XSxcImRpc2FsbG93ZWRcIl0sW1syMjA4LDIyMDhdLFwidmFsaWRcIl0sW1syMjA5LDIyMDldLFwidmFsaWRcIl0sW1syMjEwLDIyMjBdLFwidmFsaWRcIl0sW1syMjIxLDIyMjZdLFwidmFsaWRcIl0sW1syMjI3LDIyMjhdLFwidmFsaWRcIl0sW1syMjI5LDIyNzRdLFwiZGlzYWxsb3dlZFwiXSxbWzIyNzUsMjI3NV0sXCJ2YWxpZFwiXSxbWzIyNzYsMjMwMl0sXCJ2YWxpZFwiXSxbWzIzMDMsMjMwM10sXCJ2YWxpZFwiXSxbWzIzMDQsMjMwNF0sXCJ2YWxpZFwiXSxbWzIzMDUsMjMwN10sXCJ2YWxpZFwiXSxbWzIzMDgsMjMwOF0sXCJ2YWxpZFwiXSxbWzIzMDksMjM2MV0sXCJ2YWxpZFwiXSxbWzIzNjIsMjM2M10sXCJ2YWxpZFwiXSxbWzIzNjQsMjM4MV0sXCJ2YWxpZFwiXSxbWzIzODIsMjM4Ml0sXCJ2YWxpZFwiXSxbWzIzODMsMjM4M10sXCJ2YWxpZFwiXSxbWzIzODQsMjM4OF0sXCJ2YWxpZFwiXSxbWzIzODksMjM4OV0sXCJ2YWxpZFwiXSxbWzIzOTAsMjM5MV0sXCJ2YWxpZFwiXSxbWzIzOTIsMjM5Ml0sXCJtYXBwZWRcIixbMjMyNSwyMzY0XV0sW1syMzkzLDIzOTNdLFwibWFwcGVkXCIsWzIzMjYsMjM2NF1dLFtbMjM5NCwyMzk0XSxcIm1hcHBlZFwiLFsyMzI3LDIzNjRdXSxbWzIzOTUsMjM5NV0sXCJtYXBwZWRcIixbMjMzMiwyMzY0XV0sW1syMzk2LDIzOTZdLFwibWFwcGVkXCIsWzIzMzcsMjM2NF1dLFtbMjM5NywyMzk3XSxcIm1hcHBlZFwiLFsyMzM4LDIzNjRdXSxbWzIzOTgsMjM5OF0sXCJtYXBwZWRcIixbMjM0NywyMzY0XV0sW1syMzk5LDIzOTldLFwibWFwcGVkXCIsWzIzNTEsMjM2NF1dLFtbMjQwMCwyNDAzXSxcInZhbGlkXCJdLFtbMjQwNCwyNDA1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1syNDA2LDI0MTVdLFwidmFsaWRcIl0sW1syNDE2LDI0MTZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI0MTcsMjQxOF0sXCJ2YWxpZFwiXSxbWzI0MTksMjQyM10sXCJ2YWxpZFwiXSxbWzI0MjQsMjQyNF0sXCJ2YWxpZFwiXSxbWzI0MjUsMjQyNl0sXCJ2YWxpZFwiXSxbWzI0MjcsMjQyOF0sXCJ2YWxpZFwiXSxbWzI0MjksMjQyOV0sXCJ2YWxpZFwiXSxbWzI0MzAsMjQzMV0sXCJ2YWxpZFwiXSxbWzI0MzIsMjQzMl0sXCJ2YWxpZFwiXSxbWzI0MzMsMjQzNV0sXCJ2YWxpZFwiXSxbWzI0MzYsMjQzNl0sXCJkaXNhbGxvd2VkXCJdLFtbMjQzNywyNDQ0XSxcInZhbGlkXCJdLFtbMjQ0NSwyNDQ2XSxcImRpc2FsbG93ZWRcIl0sW1syNDQ3LDI0NDhdLFwidmFsaWRcIl0sW1syNDQ5LDI0NTBdLFwiZGlzYWxsb3dlZFwiXSxbWzI0NTEsMjQ3Ml0sXCJ2YWxpZFwiXSxbWzI0NzMsMjQ3M10sXCJkaXNhbGxvd2VkXCJdLFtbMjQ3NCwyNDgwXSxcInZhbGlkXCJdLFtbMjQ4MSwyNDgxXSxcImRpc2FsbG93ZWRcIl0sW1syNDgyLDI0ODJdLFwidmFsaWRcIl0sW1syNDgzLDI0ODVdLFwiZGlzYWxsb3dlZFwiXSxbWzI0ODYsMjQ4OV0sXCJ2YWxpZFwiXSxbWzI0OTAsMjQ5MV0sXCJkaXNhbGxvd2VkXCJdLFtbMjQ5MiwyNDkyXSxcInZhbGlkXCJdLFtbMjQ5MywyNDkzXSxcInZhbGlkXCJdLFtbMjQ5NCwyNTAwXSxcInZhbGlkXCJdLFtbMjUwMSwyNTAyXSxcImRpc2FsbG93ZWRcIl0sW1syNTAzLDI1MDRdLFwidmFsaWRcIl0sW1syNTA1LDI1MDZdLFwiZGlzYWxsb3dlZFwiXSxbWzI1MDcsMjUwOV0sXCJ2YWxpZFwiXSxbWzI1MTAsMjUxMF0sXCJ2YWxpZFwiXSxbWzI1MTEsMjUxOF0sXCJkaXNhbGxvd2VkXCJdLFtbMjUxOSwyNTE5XSxcInZhbGlkXCJdLFtbMjUyMCwyNTIzXSxcImRpc2FsbG93ZWRcIl0sW1syNTI0LDI1MjRdLFwibWFwcGVkXCIsWzI0NjUsMjQ5Ml1dLFtbMjUyNSwyNTI1XSxcIm1hcHBlZFwiLFsyNDY2LDI0OTJdXSxbWzI1MjYsMjUyNl0sXCJkaXNhbGxvd2VkXCJdLFtbMjUyNywyNTI3XSxcIm1hcHBlZFwiLFsyNDc5LDI0OTJdXSxbWzI1MjgsMjUzMV0sXCJ2YWxpZFwiXSxbWzI1MzIsMjUzM10sXCJkaXNhbGxvd2VkXCJdLFtbMjUzNCwyNTQ1XSxcInZhbGlkXCJdLFtbMjU0NiwyNTU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1syNTU1LDI1NTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI1NTYsMjU2MF0sXCJkaXNhbGxvd2VkXCJdLFtbMjU2MSwyNTYxXSxcInZhbGlkXCJdLFtbMjU2MiwyNTYyXSxcInZhbGlkXCJdLFtbMjU2MywyNTYzXSxcInZhbGlkXCJdLFtbMjU2NCwyNTY0XSxcImRpc2FsbG93ZWRcIl0sW1syNTY1LDI1NzBdLFwidmFsaWRcIl0sW1syNTcxLDI1NzRdLFwiZGlzYWxsb3dlZFwiXSxbWzI1NzUsMjU3Nl0sXCJ2YWxpZFwiXSxbWzI1NzcsMjU3OF0sXCJkaXNhbGxvd2VkXCJdLFtbMjU3OSwyNjAwXSxcInZhbGlkXCJdLFtbMjYwMSwyNjAxXSxcImRpc2FsbG93ZWRcIl0sW1syNjAyLDI2MDhdLFwidmFsaWRcIl0sW1syNjA5LDI2MDldLFwiZGlzYWxsb3dlZFwiXSxbWzI2MTAsMjYxMF0sXCJ2YWxpZFwiXSxbWzI2MTEsMjYxMV0sXCJtYXBwZWRcIixbMjYxMCwyNjIwXV0sW1syNjEyLDI2MTJdLFwiZGlzYWxsb3dlZFwiXSxbWzI2MTMsMjYxM10sXCJ2YWxpZFwiXSxbWzI2MTQsMjYxNF0sXCJtYXBwZWRcIixbMjYxNiwyNjIwXV0sW1syNjE1LDI2MTVdLFwiZGlzYWxsb3dlZFwiXSxbWzI2MTYsMjYxN10sXCJ2YWxpZFwiXSxbWzI2MTgsMjYxOV0sXCJkaXNhbGxvd2VkXCJdLFtbMjYyMCwyNjIwXSxcInZhbGlkXCJdLFtbMjYyMSwyNjIxXSxcImRpc2FsbG93ZWRcIl0sW1syNjIyLDI2MjZdLFwidmFsaWRcIl0sW1syNjI3LDI2MzBdLFwiZGlzYWxsb3dlZFwiXSxbWzI2MzEsMjYzMl0sXCJ2YWxpZFwiXSxbWzI2MzMsMjYzNF0sXCJkaXNhbGxvd2VkXCJdLFtbMjYzNSwyNjM3XSxcInZhbGlkXCJdLFtbMjYzOCwyNjQwXSxcImRpc2FsbG93ZWRcIl0sW1syNjQxLDI2NDFdLFwidmFsaWRcIl0sW1syNjQyLDI2NDhdLFwiZGlzYWxsb3dlZFwiXSxbWzI2NDksMjY0OV0sXCJtYXBwZWRcIixbMjU4MiwyNjIwXV0sW1syNjUwLDI2NTBdLFwibWFwcGVkXCIsWzI1ODMsMjYyMF1dLFtbMjY1MSwyNjUxXSxcIm1hcHBlZFwiLFsyNTg4LDI2MjBdXSxbWzI2NTIsMjY1Ml0sXCJ2YWxpZFwiXSxbWzI2NTMsMjY1M10sXCJkaXNhbGxvd2VkXCJdLFtbMjY1NCwyNjU0XSxcIm1hcHBlZFwiLFsyNjAzLDI2MjBdXSxbWzI2NTUsMjY2MV0sXCJkaXNhbGxvd2VkXCJdLFtbMjY2MiwyNjc2XSxcInZhbGlkXCJdLFtbMjY3NywyNjc3XSxcInZhbGlkXCJdLFtbMjY3OCwyNjg4XSxcImRpc2FsbG93ZWRcIl0sW1syNjg5LDI2OTFdLFwidmFsaWRcIl0sW1syNjkyLDI2OTJdLFwiZGlzYWxsb3dlZFwiXSxbWzI2OTMsMjY5OV0sXCJ2YWxpZFwiXSxbWzI3MDAsMjcwMF0sXCJ2YWxpZFwiXSxbWzI3MDEsMjcwMV0sXCJ2YWxpZFwiXSxbWzI3MDIsMjcwMl0sXCJkaXNhbGxvd2VkXCJdLFtbMjcwMywyNzA1XSxcInZhbGlkXCJdLFtbMjcwNiwyNzA2XSxcImRpc2FsbG93ZWRcIl0sW1syNzA3LDI3MjhdLFwidmFsaWRcIl0sW1syNzI5LDI3MjldLFwiZGlzYWxsb3dlZFwiXSxbWzI3MzAsMjczNl0sXCJ2YWxpZFwiXSxbWzI3MzcsMjczN10sXCJkaXNhbGxvd2VkXCJdLFtbMjczOCwyNzM5XSxcInZhbGlkXCJdLFtbMjc0MCwyNzQwXSxcImRpc2FsbG93ZWRcIl0sW1syNzQxLDI3NDVdLFwidmFsaWRcIl0sW1syNzQ2LDI3NDddLFwiZGlzYWxsb3dlZFwiXSxbWzI3NDgsMjc1N10sXCJ2YWxpZFwiXSxbWzI3NTgsMjc1OF0sXCJkaXNhbGxvd2VkXCJdLFtbMjc1OSwyNzYxXSxcInZhbGlkXCJdLFtbMjc2MiwyNzYyXSxcImRpc2FsbG93ZWRcIl0sW1syNzYzLDI3NjVdLFwidmFsaWRcIl0sW1syNzY2LDI3NjddLFwiZGlzYWxsb3dlZFwiXSxbWzI3NjgsMjc2OF0sXCJ2YWxpZFwiXSxbWzI3NjksMjc4M10sXCJkaXNhbGxvd2VkXCJdLFtbMjc4NCwyNzg0XSxcInZhbGlkXCJdLFtbMjc4NSwyNzg3XSxcInZhbGlkXCJdLFtbMjc4OCwyNzg5XSxcImRpc2FsbG93ZWRcIl0sW1syNzkwLDI3OTldLFwidmFsaWRcIl0sW1syODAwLDI4MDBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI4MDEsMjgwMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjgwMiwyODA4XSxcImRpc2FsbG93ZWRcIl0sW1syODA5LDI4MDldLFwidmFsaWRcIl0sW1syODEwLDI4MTZdLFwiZGlzYWxsb3dlZFwiXSxbWzI4MTcsMjgxOV0sXCJ2YWxpZFwiXSxbWzI4MjAsMjgyMF0sXCJkaXNhbGxvd2VkXCJdLFtbMjgyMSwyODI4XSxcInZhbGlkXCJdLFtbMjgyOSwyODMwXSxcImRpc2FsbG93ZWRcIl0sW1syODMxLDI4MzJdLFwidmFsaWRcIl0sW1syODMzLDI4MzRdLFwiZGlzYWxsb3dlZFwiXSxbWzI4MzUsMjg1Nl0sXCJ2YWxpZFwiXSxbWzI4NTcsMjg1N10sXCJkaXNhbGxvd2VkXCJdLFtbMjg1OCwyODY0XSxcInZhbGlkXCJdLFtbMjg2NSwyODY1XSxcImRpc2FsbG93ZWRcIl0sW1syODY2LDI4NjddLFwidmFsaWRcIl0sW1syODY4LDI4NjhdLFwiZGlzYWxsb3dlZFwiXSxbWzI4NjksMjg2OV0sXCJ2YWxpZFwiXSxbWzI4NzAsMjg3M10sXCJ2YWxpZFwiXSxbWzI4NzQsMjg3NV0sXCJkaXNhbGxvd2VkXCJdLFtbMjg3NiwyODgzXSxcInZhbGlkXCJdLFtbMjg4NCwyODg0XSxcInZhbGlkXCJdLFtbMjg4NSwyODg2XSxcImRpc2FsbG93ZWRcIl0sW1syODg3LDI4ODhdLFwidmFsaWRcIl0sW1syODg5LDI4OTBdLFwiZGlzYWxsb3dlZFwiXSxbWzI4OTEsMjg5M10sXCJ2YWxpZFwiXSxbWzI4OTQsMjkwMV0sXCJkaXNhbGxvd2VkXCJdLFtbMjkwMiwyOTAzXSxcInZhbGlkXCJdLFtbMjkwNCwyOTA3XSxcImRpc2FsbG93ZWRcIl0sW1syOTA4LDI5MDhdLFwibWFwcGVkXCIsWzI4NDksMjg3Nl1dLFtbMjkwOSwyOTA5XSxcIm1hcHBlZFwiLFsyODUwLDI4NzZdXSxbWzI5MTAsMjkxMF0sXCJkaXNhbGxvd2VkXCJdLFtbMjkxMSwyOTEzXSxcInZhbGlkXCJdLFtbMjkxNCwyOTE1XSxcInZhbGlkXCJdLFtbMjkxNiwyOTE3XSxcImRpc2FsbG93ZWRcIl0sW1syOTE4LDI5MjddLFwidmFsaWRcIl0sW1syOTI4LDI5MjhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI5MjksMjkyOV0sXCJ2YWxpZFwiXSxbWzI5MzAsMjkzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjkzNiwyOTQ1XSxcImRpc2FsbG93ZWRcIl0sW1syOTQ2LDI5NDddLFwidmFsaWRcIl0sW1syOTQ4LDI5NDhdLFwiZGlzYWxsb3dlZFwiXSxbWzI5NDksMjk1NF0sXCJ2YWxpZFwiXSxbWzI5NTUsMjk1N10sXCJkaXNhbGxvd2VkXCJdLFtbMjk1OCwyOTYwXSxcInZhbGlkXCJdLFtbMjk2MSwyOTYxXSxcImRpc2FsbG93ZWRcIl0sW1syOTYyLDI5NjVdLFwidmFsaWRcIl0sW1syOTY2LDI5NjhdLFwiZGlzYWxsb3dlZFwiXSxbWzI5NjksMjk3MF0sXCJ2YWxpZFwiXSxbWzI5NzEsMjk3MV0sXCJkaXNhbGxvd2VkXCJdLFtbMjk3MiwyOTcyXSxcInZhbGlkXCJdLFtbMjk3MywyOTczXSxcImRpc2FsbG93ZWRcIl0sW1syOTc0LDI5NzVdLFwidmFsaWRcIl0sW1syOTc2LDI5NzhdLFwiZGlzYWxsb3dlZFwiXSxbWzI5NzksMjk4MF0sXCJ2YWxpZFwiXSxbWzI5ODEsMjk4M10sXCJkaXNhbGxvd2VkXCJdLFtbMjk4NCwyOTg2XSxcInZhbGlkXCJdLFtbMjk4NywyOTg5XSxcImRpc2FsbG93ZWRcIl0sW1syOTkwLDI5OTddLFwidmFsaWRcIl0sW1syOTk4LDI5OThdLFwidmFsaWRcIl0sW1syOTk5LDMwMDFdLFwidmFsaWRcIl0sW1szMDAyLDMwMDVdLFwiZGlzYWxsb3dlZFwiXSxbWzMwMDYsMzAxMF0sXCJ2YWxpZFwiXSxbWzMwMTEsMzAxM10sXCJkaXNhbGxvd2VkXCJdLFtbMzAxNCwzMDE2XSxcInZhbGlkXCJdLFtbMzAxNywzMDE3XSxcImRpc2FsbG93ZWRcIl0sW1szMDE4LDMwMjFdLFwidmFsaWRcIl0sW1szMDIyLDMwMjNdLFwiZGlzYWxsb3dlZFwiXSxbWzMwMjQsMzAyNF0sXCJ2YWxpZFwiXSxbWzMwMjUsMzAzMF0sXCJkaXNhbGxvd2VkXCJdLFtbMzAzMSwzMDMxXSxcInZhbGlkXCJdLFtbMzAzMiwzMDQ1XSxcImRpc2FsbG93ZWRcIl0sW1szMDQ2LDMwNDZdLFwidmFsaWRcIl0sW1szMDQ3LDMwNTVdLFwidmFsaWRcIl0sW1szMDU2LDMwNThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzMwNTksMzA2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzA2NywzMDcxXSxcImRpc2FsbG93ZWRcIl0sW1szMDcyLDMwNzJdLFwidmFsaWRcIl0sW1szMDczLDMwNzVdLFwidmFsaWRcIl0sW1szMDc2LDMwNzZdLFwiZGlzYWxsb3dlZFwiXSxbWzMwNzcsMzA4NF0sXCJ2YWxpZFwiXSxbWzMwODUsMzA4NV0sXCJkaXNhbGxvd2VkXCJdLFtbMzA4NiwzMDg4XSxcInZhbGlkXCJdLFtbMzA4OSwzMDg5XSxcImRpc2FsbG93ZWRcIl0sW1szMDkwLDMxMTJdLFwidmFsaWRcIl0sW1szMTEzLDMxMTNdLFwiZGlzYWxsb3dlZFwiXSxbWzMxMTQsMzEyM10sXCJ2YWxpZFwiXSxbWzMxMjQsMzEyNF0sXCJ2YWxpZFwiXSxbWzMxMjUsMzEyOV0sXCJ2YWxpZFwiXSxbWzMxMzAsMzEzMl0sXCJkaXNhbGxvd2VkXCJdLFtbMzEzMywzMTMzXSxcInZhbGlkXCJdLFtbMzEzNCwzMTQwXSxcInZhbGlkXCJdLFtbMzE0MSwzMTQxXSxcImRpc2FsbG93ZWRcIl0sW1szMTQyLDMxNDRdLFwidmFsaWRcIl0sW1szMTQ1LDMxNDVdLFwiZGlzYWxsb3dlZFwiXSxbWzMxNDYsMzE0OV0sXCJ2YWxpZFwiXSxbWzMxNTAsMzE1Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMzE1NywzMTU4XSxcInZhbGlkXCJdLFtbMzE1OSwzMTU5XSxcImRpc2FsbG93ZWRcIl0sW1szMTYwLDMxNjFdLFwidmFsaWRcIl0sW1szMTYyLDMxNjJdLFwidmFsaWRcIl0sW1szMTYzLDMxNjddLFwiZGlzYWxsb3dlZFwiXSxbWzMxNjgsMzE2OV0sXCJ2YWxpZFwiXSxbWzMxNzAsMzE3MV0sXCJ2YWxpZFwiXSxbWzMxNzIsMzE3M10sXCJkaXNhbGxvd2VkXCJdLFtbMzE3NCwzMTgzXSxcInZhbGlkXCJdLFtbMzE4NCwzMTkxXSxcImRpc2FsbG93ZWRcIl0sW1szMTkyLDMxOTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzMyMDAsMzIwMF0sXCJkaXNhbGxvd2VkXCJdLFtbMzIwMSwzMjAxXSxcInZhbGlkXCJdLFtbMzIwMiwzMjAzXSxcInZhbGlkXCJdLFtbMzIwNCwzMjA0XSxcImRpc2FsbG93ZWRcIl0sW1szMjA1LDMyMTJdLFwidmFsaWRcIl0sW1szMjEzLDMyMTNdLFwiZGlzYWxsb3dlZFwiXSxbWzMyMTQsMzIxNl0sXCJ2YWxpZFwiXSxbWzMyMTcsMzIxN10sXCJkaXNhbGxvd2VkXCJdLFtbMzIxOCwzMjQwXSxcInZhbGlkXCJdLFtbMzI0MSwzMjQxXSxcImRpc2FsbG93ZWRcIl0sW1szMjQyLDMyNTFdLFwidmFsaWRcIl0sW1szMjUyLDMyNTJdLFwiZGlzYWxsb3dlZFwiXSxbWzMyNTMsMzI1N10sXCJ2YWxpZFwiXSxbWzMyNTgsMzI1OV0sXCJkaXNhbGxvd2VkXCJdLFtbMzI2MCwzMjYxXSxcInZhbGlkXCJdLFtbMzI2MiwzMjY4XSxcInZhbGlkXCJdLFtbMzI2OSwzMjY5XSxcImRpc2FsbG93ZWRcIl0sW1szMjcwLDMyNzJdLFwidmFsaWRcIl0sW1szMjczLDMyNzNdLFwiZGlzYWxsb3dlZFwiXSxbWzMyNzQsMzI3N10sXCJ2YWxpZFwiXSxbWzMyNzgsMzI4NF0sXCJkaXNhbGxvd2VkXCJdLFtbMzI4NSwzMjg2XSxcInZhbGlkXCJdLFtbMzI4NywzMjkzXSxcImRpc2FsbG93ZWRcIl0sW1szMjk0LDMyOTRdLFwidmFsaWRcIl0sW1szMjk1LDMyOTVdLFwiZGlzYWxsb3dlZFwiXSxbWzMyOTYsMzI5N10sXCJ2YWxpZFwiXSxbWzMyOTgsMzI5OV0sXCJ2YWxpZFwiXSxbWzMzMDAsMzMwMV0sXCJkaXNhbGxvd2VkXCJdLFtbMzMwMiwzMzExXSxcInZhbGlkXCJdLFtbMzMxMiwzMzEyXSxcImRpc2FsbG93ZWRcIl0sW1szMzEzLDMzMTRdLFwidmFsaWRcIl0sW1szMzE1LDMzMjhdLFwiZGlzYWxsb3dlZFwiXSxbWzMzMjksMzMyOV0sXCJ2YWxpZFwiXSxbWzMzMzAsMzMzMV0sXCJ2YWxpZFwiXSxbWzMzMzIsMzMzMl0sXCJkaXNhbGxvd2VkXCJdLFtbMzMzMywzMzQwXSxcInZhbGlkXCJdLFtbMzM0MSwzMzQxXSxcImRpc2FsbG93ZWRcIl0sW1szMzQyLDMzNDRdLFwidmFsaWRcIl0sW1szMzQ1LDMzNDVdLFwiZGlzYWxsb3dlZFwiXSxbWzMzNDYsMzM2OF0sXCJ2YWxpZFwiXSxbWzMzNjksMzM2OV0sXCJ2YWxpZFwiXSxbWzMzNzAsMzM4NV0sXCJ2YWxpZFwiXSxbWzMzODYsMzM4Nl0sXCJ2YWxpZFwiXSxbWzMzODcsMzM4OF0sXCJkaXNhbGxvd2VkXCJdLFtbMzM4OSwzMzg5XSxcInZhbGlkXCJdLFtbMzM5MCwzMzk1XSxcInZhbGlkXCJdLFtbMzM5NiwzMzk2XSxcInZhbGlkXCJdLFtbMzM5NywzMzk3XSxcImRpc2FsbG93ZWRcIl0sW1szMzk4LDM0MDBdLFwidmFsaWRcIl0sW1szNDAxLDM0MDFdLFwiZGlzYWxsb3dlZFwiXSxbWzM0MDIsMzQwNV0sXCJ2YWxpZFwiXSxbWzM0MDYsMzQwNl0sXCJ2YWxpZFwiXSxbWzM0MDcsMzQxNF0sXCJkaXNhbGxvd2VkXCJdLFtbMzQxNSwzNDE1XSxcInZhbGlkXCJdLFtbMzQxNiwzNDIyXSxcImRpc2FsbG93ZWRcIl0sW1szNDIzLDM0MjNdLFwidmFsaWRcIl0sW1szNDI0LDM0MjVdLFwidmFsaWRcIl0sW1szNDI2LDM0MjddLFwidmFsaWRcIl0sW1szNDI4LDM0MjldLFwiZGlzYWxsb3dlZFwiXSxbWzM0MzAsMzQzOV0sXCJ2YWxpZFwiXSxbWzM0NDAsMzQ0NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzQ0NiwzNDQ4XSxcImRpc2FsbG93ZWRcIl0sW1szNDQ5LDM0NDldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM0NTAsMzQ1NV0sXCJ2YWxpZFwiXSxbWzM0NTYsMzQ1N10sXCJkaXNhbGxvd2VkXCJdLFtbMzQ1OCwzNDU5XSxcInZhbGlkXCJdLFtbMzQ2MCwzNDYwXSxcImRpc2FsbG93ZWRcIl0sW1szNDYxLDM0NzhdLFwidmFsaWRcIl0sW1szNDc5LDM0ODFdLFwiZGlzYWxsb3dlZFwiXSxbWzM0ODIsMzUwNV0sXCJ2YWxpZFwiXSxbWzM1MDYsMzUwNl0sXCJkaXNhbGxvd2VkXCJdLFtbMzUwNywzNTE1XSxcInZhbGlkXCJdLFtbMzUxNiwzNTE2XSxcImRpc2FsbG93ZWRcIl0sW1szNTE3LDM1MTddLFwidmFsaWRcIl0sW1szNTE4LDM1MTldLFwiZGlzYWxsb3dlZFwiXSxbWzM1MjAsMzUyNl0sXCJ2YWxpZFwiXSxbWzM1MjcsMzUyOV0sXCJkaXNhbGxvd2VkXCJdLFtbMzUzMCwzNTMwXSxcInZhbGlkXCJdLFtbMzUzMSwzNTM0XSxcImRpc2FsbG93ZWRcIl0sW1szNTM1LDM1NDBdLFwidmFsaWRcIl0sW1szNTQxLDM1NDFdLFwiZGlzYWxsb3dlZFwiXSxbWzM1NDIsMzU0Ml0sXCJ2YWxpZFwiXSxbWzM1NDMsMzU0M10sXCJkaXNhbGxvd2VkXCJdLFtbMzU0NCwzNTUxXSxcInZhbGlkXCJdLFtbMzU1MiwzNTU3XSxcImRpc2FsbG93ZWRcIl0sW1szNTU4LDM1NjddLFwidmFsaWRcIl0sW1szNTY4LDM1NjldLFwiZGlzYWxsb3dlZFwiXSxbWzM1NzAsMzU3MV0sXCJ2YWxpZFwiXSxbWzM1NzIsMzU3Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzU3MywzNTg0XSxcImRpc2FsbG93ZWRcIl0sW1szNTg1LDM2MzRdLFwidmFsaWRcIl0sW1szNjM1LDM2MzVdLFwibWFwcGVkXCIsWzM2NjEsMzYzNF1dLFtbMzYzNiwzNjQyXSxcInZhbGlkXCJdLFtbMzY0MywzNjQ2XSxcImRpc2FsbG93ZWRcIl0sW1szNjQ3LDM2NDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM2NDgsMzY2Ml0sXCJ2YWxpZFwiXSxbWzM2NjMsMzY2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzY2NCwzNjczXSxcInZhbGlkXCJdLFtbMzY3NCwzNjc1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szNjc2LDM3MTJdLFwiZGlzYWxsb3dlZFwiXSxbWzM3MTMsMzcxNF0sXCJ2YWxpZFwiXSxbWzM3MTUsMzcxNV0sXCJkaXNhbGxvd2VkXCJdLFtbMzcxNiwzNzE2XSxcInZhbGlkXCJdLFtbMzcxNywzNzE4XSxcImRpc2FsbG93ZWRcIl0sW1szNzE5LDM3MjBdLFwidmFsaWRcIl0sW1szNzIxLDM3MjFdLFwiZGlzYWxsb3dlZFwiXSxbWzM3MjIsMzcyMl0sXCJ2YWxpZFwiXSxbWzM3MjMsMzcyNF0sXCJkaXNhbGxvd2VkXCJdLFtbMzcyNSwzNzI1XSxcInZhbGlkXCJdLFtbMzcyNiwzNzMxXSxcImRpc2FsbG93ZWRcIl0sW1szNzMyLDM3MzVdLFwidmFsaWRcIl0sW1szNzM2LDM3MzZdLFwiZGlzYWxsb3dlZFwiXSxbWzM3MzcsMzc0M10sXCJ2YWxpZFwiXSxbWzM3NDQsMzc0NF0sXCJkaXNhbGxvd2VkXCJdLFtbMzc0NSwzNzQ3XSxcInZhbGlkXCJdLFtbMzc0OCwzNzQ4XSxcImRpc2FsbG93ZWRcIl0sW1szNzQ5LDM3NDldLFwidmFsaWRcIl0sW1szNzUwLDM3NTBdLFwiZGlzYWxsb3dlZFwiXSxbWzM3NTEsMzc1MV0sXCJ2YWxpZFwiXSxbWzM3NTIsMzc1M10sXCJkaXNhbGxvd2VkXCJdLFtbMzc1NCwzNzU1XSxcInZhbGlkXCJdLFtbMzc1NiwzNzU2XSxcImRpc2FsbG93ZWRcIl0sW1szNzU3LDM3NjJdLFwidmFsaWRcIl0sW1szNzYzLDM3NjNdLFwibWFwcGVkXCIsWzM3ODksMzc2Ml1dLFtbMzc2NCwzNzY5XSxcInZhbGlkXCJdLFtbMzc3MCwzNzcwXSxcImRpc2FsbG93ZWRcIl0sW1szNzcxLDM3NzNdLFwidmFsaWRcIl0sW1szNzc0LDM3NzVdLFwiZGlzYWxsb3dlZFwiXSxbWzM3NzYsMzc4MF0sXCJ2YWxpZFwiXSxbWzM3ODEsMzc4MV0sXCJkaXNhbGxvd2VkXCJdLFtbMzc4MiwzNzgyXSxcInZhbGlkXCJdLFtbMzc4MywzNzgzXSxcImRpc2FsbG93ZWRcIl0sW1szNzg0LDM3ODldLFwidmFsaWRcIl0sW1szNzkwLDM3OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzM3OTIsMzgwMV0sXCJ2YWxpZFwiXSxbWzM4MDIsMzgwM10sXCJkaXNhbGxvd2VkXCJdLFtbMzgwNCwzODA0XSxcIm1hcHBlZFwiLFszNzU1LDM3MzddXSxbWzM4MDUsMzgwNV0sXCJtYXBwZWRcIixbMzc1NSwzNzQ1XV0sW1szODA2LDM4MDddLFwidmFsaWRcIl0sW1szODA4LDM4MzldLFwiZGlzYWxsb3dlZFwiXSxbWzM4NDAsMzg0MF0sXCJ2YWxpZFwiXSxbWzM4NDEsMzg1MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzg1MSwzODUxXSxcInZhbGlkXCJdLFtbMzg1MiwzODUyXSxcIm1hcHBlZFwiLFszODUxXV0sW1szODUzLDM4NjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM4NjQsMzg2NV0sXCJ2YWxpZFwiXSxbWzM4NjYsMzg3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzg3MiwzODgxXSxcInZhbGlkXCJdLFtbMzg4MiwzODkyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szODkzLDM4OTNdLFwidmFsaWRcIl0sW1szODk0LDM4OTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM4OTUsMzg5NV0sXCJ2YWxpZFwiXSxbWzM4OTYsMzg5Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzg5NywzODk3XSxcInZhbGlkXCJdLFtbMzg5OCwzOTAxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szOTAyLDM5MDZdLFwidmFsaWRcIl0sW1szOTA3LDM5MDddLFwibWFwcGVkXCIsWzM5MDYsNDAyM11dLFtbMzkwOCwzOTExXSxcInZhbGlkXCJdLFtbMzkxMiwzOTEyXSxcImRpc2FsbG93ZWRcIl0sW1szOTEzLDM5MTZdLFwidmFsaWRcIl0sW1szOTE3LDM5MTddLFwibWFwcGVkXCIsWzM5MTYsNDAyM11dLFtbMzkxOCwzOTIxXSxcInZhbGlkXCJdLFtbMzkyMiwzOTIyXSxcIm1hcHBlZFwiLFszOTIxLDQwMjNdXSxbWzM5MjMsMzkyNl0sXCJ2YWxpZFwiXSxbWzM5MjcsMzkyN10sXCJtYXBwZWRcIixbMzkyNiw0MDIzXV0sW1szOTI4LDM5MzFdLFwidmFsaWRcIl0sW1szOTMyLDM5MzJdLFwibWFwcGVkXCIsWzM5MzEsNDAyM11dLFtbMzkzMywzOTQ0XSxcInZhbGlkXCJdLFtbMzk0NSwzOTQ1XSxcIm1hcHBlZFwiLFszOTA0LDQwMjFdXSxbWzM5NDYsMzk0Nl0sXCJ2YWxpZFwiXSxbWzM5NDcsMzk0OF0sXCJ2YWxpZFwiXSxbWzM5NDksMzk1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMzk1MywzOTU0XSxcInZhbGlkXCJdLFtbMzk1NSwzOTU1XSxcIm1hcHBlZFwiLFszOTUzLDM5NTRdXSxbWzM5NTYsMzk1Nl0sXCJ2YWxpZFwiXSxbWzM5NTcsMzk1N10sXCJtYXBwZWRcIixbMzk1MywzOTU2XV0sW1szOTU4LDM5NThdLFwibWFwcGVkXCIsWzQwMTgsMzk2OF1dLFtbMzk1OSwzOTU5XSxcIm1hcHBlZFwiLFs0MDE4LDM5NTMsMzk2OF1dLFtbMzk2MCwzOTYwXSxcIm1hcHBlZFwiLFs0MDE5LDM5NjhdXSxbWzM5NjEsMzk2MV0sXCJtYXBwZWRcIixbNDAxOSwzOTUzLDM5NjhdXSxbWzM5NjIsMzk2OF0sXCJ2YWxpZFwiXSxbWzM5NjksMzk2OV0sXCJtYXBwZWRcIixbMzk1MywzOTY4XV0sW1szOTcwLDM5NzJdLFwidmFsaWRcIl0sW1szOTczLDM5NzNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM5NzQsMzk3OV0sXCJ2YWxpZFwiXSxbWzM5ODAsMzk4M10sXCJ2YWxpZFwiXSxbWzM5ODQsMzk4Nl0sXCJ2YWxpZFwiXSxbWzM5ODcsMzk4N10sXCJtYXBwZWRcIixbMzk4Niw0MDIzXV0sW1szOTg4LDM5ODldLFwidmFsaWRcIl0sW1szOTkwLDM5OTBdLFwidmFsaWRcIl0sW1szOTkxLDM5OTFdLFwidmFsaWRcIl0sW1szOTkyLDM5OTJdLFwiZGlzYWxsb3dlZFwiXSxbWzM5OTMsMzk5Nl0sXCJ2YWxpZFwiXSxbWzM5OTcsMzk5N10sXCJtYXBwZWRcIixbMzk5Niw0MDIzXV0sW1szOTk4LDQwMDFdLFwidmFsaWRcIl0sW1s0MDAyLDQwMDJdLFwibWFwcGVkXCIsWzQwMDEsNDAyM11dLFtbNDAwMyw0MDA2XSxcInZhbGlkXCJdLFtbNDAwNyw0MDA3XSxcIm1hcHBlZFwiLFs0MDA2LDQwMjNdXSxbWzQwMDgsNDAxMV0sXCJ2YWxpZFwiXSxbWzQwMTIsNDAxMl0sXCJtYXBwZWRcIixbNDAxMSw0MDIzXV0sW1s0MDEzLDQwMTNdLFwidmFsaWRcIl0sW1s0MDE0LDQwMTZdLFwidmFsaWRcIl0sW1s0MDE3LDQwMjNdLFwidmFsaWRcIl0sW1s0MDI0LDQwMjRdLFwidmFsaWRcIl0sW1s0MDI1LDQwMjVdLFwibWFwcGVkXCIsWzM5ODQsNDAyMV1dLFtbNDAyNiw0MDI4XSxcInZhbGlkXCJdLFtbNDAyOSw0MDI5XSxcImRpc2FsbG93ZWRcIl0sW1s0MDMwLDQwMzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQwMzgsNDAzOF0sXCJ2YWxpZFwiXSxbWzQwMzksNDA0NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDA0NSw0MDQ1XSxcImRpc2FsbG93ZWRcIl0sW1s0MDQ2LDQwNDZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQwNDcsNDA0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDA0OCw0MDQ5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MDUwLDQwNTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQwNTMsNDA1Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDA1Nyw0MDU4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MDU5LDQwOTVdLFwiZGlzYWxsb3dlZFwiXSxbWzQwOTYsNDEyOV0sXCJ2YWxpZFwiXSxbWzQxMzAsNDEzMF0sXCJ2YWxpZFwiXSxbWzQxMzEsNDEzNV0sXCJ2YWxpZFwiXSxbWzQxMzYsNDEzNl0sXCJ2YWxpZFwiXSxbWzQxMzcsNDEzOF0sXCJ2YWxpZFwiXSxbWzQxMzksNDEzOV0sXCJ2YWxpZFwiXSxbWzQxNDAsNDE0Nl0sXCJ2YWxpZFwiXSxbWzQxNDcsNDE0OV0sXCJ2YWxpZFwiXSxbWzQxNTAsNDE1M10sXCJ2YWxpZFwiXSxbWzQxNTQsNDE1OV0sXCJ2YWxpZFwiXSxbWzQxNjAsNDE2OV0sXCJ2YWxpZFwiXSxbWzQxNzAsNDE3NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDE3Niw0MTg1XSxcInZhbGlkXCJdLFtbNDE4Niw0MjQ5XSxcInZhbGlkXCJdLFtbNDI1MCw0MjUzXSxcInZhbGlkXCJdLFtbNDI1NCw0MjU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjU2LDQyOTNdLFwiZGlzYWxsb3dlZFwiXSxbWzQyOTQsNDI5NF0sXCJkaXNhbGxvd2VkXCJdLFtbNDI5NSw0Mjk1XSxcIm1hcHBlZFwiLFsxMTU1OV1dLFtbNDI5Niw0MzAwXSxcImRpc2FsbG93ZWRcIl0sW1s0MzAxLDQzMDFdLFwibWFwcGVkXCIsWzExNTY1XV0sW1s0MzAyLDQzMDNdLFwiZGlzYWxsb3dlZFwiXSxbWzQzMDQsNDM0Ml0sXCJ2YWxpZFwiXSxbWzQzNDMsNDM0NF0sXCJ2YWxpZFwiXSxbWzQzNDUsNDM0Nl0sXCJ2YWxpZFwiXSxbWzQzNDcsNDM0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM0OCw0MzQ4XSxcIm1hcHBlZFwiLFs0MzE2XV0sW1s0MzQ5LDQzNTFdLFwidmFsaWRcIl0sW1s0MzUyLDQ0NDFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ0NDIsNDQ0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDQ0Nyw0NDQ4XSxcImRpc2FsbG93ZWRcIl0sW1s0NDQ5LDQ1MTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ1MTUsNDUxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDUyMCw0NjAxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0NjAyLDQ2MDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ2MDgsNDYxNF0sXCJ2YWxpZFwiXSxbWzQ2MTUsNDYxNV0sXCJ2YWxpZFwiXSxbWzQ2MTYsNDY3OF0sXCJ2YWxpZFwiXSxbWzQ2NzksNDY3OV0sXCJ2YWxpZFwiXSxbWzQ2ODAsNDY4MF0sXCJ2YWxpZFwiXSxbWzQ2ODEsNDY4MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDY4Miw0Njg1XSxcInZhbGlkXCJdLFtbNDY4Niw0Njg3XSxcImRpc2FsbG93ZWRcIl0sW1s0Njg4LDQ2OTRdLFwidmFsaWRcIl0sW1s0Njk1LDQ2OTVdLFwiZGlzYWxsb3dlZFwiXSxbWzQ2OTYsNDY5Nl0sXCJ2YWxpZFwiXSxbWzQ2OTcsNDY5N10sXCJkaXNhbGxvd2VkXCJdLFtbNDY5OCw0NzAxXSxcInZhbGlkXCJdLFtbNDcwMiw0NzAzXSxcImRpc2FsbG93ZWRcIl0sW1s0NzA0LDQ3NDJdLFwidmFsaWRcIl0sW1s0NzQzLDQ3NDNdLFwidmFsaWRcIl0sW1s0NzQ0LDQ3NDRdLFwidmFsaWRcIl0sW1s0NzQ1LDQ3NDVdLFwiZGlzYWxsb3dlZFwiXSxbWzQ3NDYsNDc0OV0sXCJ2YWxpZFwiXSxbWzQ3NTAsNDc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDc1Miw0NzgyXSxcInZhbGlkXCJdLFtbNDc4Myw0NzgzXSxcInZhbGlkXCJdLFtbNDc4NCw0Nzg0XSxcInZhbGlkXCJdLFtbNDc4NSw0Nzg1XSxcImRpc2FsbG93ZWRcIl0sW1s0Nzg2LDQ3ODldLFwidmFsaWRcIl0sW1s0NzkwLDQ3OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzQ3OTIsNDc5OF0sXCJ2YWxpZFwiXSxbWzQ3OTksNDc5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNDgwMCw0ODAwXSxcInZhbGlkXCJdLFtbNDgwMSw0ODAxXSxcImRpc2FsbG93ZWRcIl0sW1s0ODAyLDQ4MDVdLFwidmFsaWRcIl0sW1s0ODA2LDQ4MDddLFwiZGlzYWxsb3dlZFwiXSxbWzQ4MDgsNDgxNF0sXCJ2YWxpZFwiXSxbWzQ4MTUsNDgxNV0sXCJ2YWxpZFwiXSxbWzQ4MTYsNDgyMl0sXCJ2YWxpZFwiXSxbWzQ4MjMsNDgyM10sXCJkaXNhbGxvd2VkXCJdLFtbNDgyNCw0ODQ2XSxcInZhbGlkXCJdLFtbNDg0Nyw0ODQ3XSxcInZhbGlkXCJdLFtbNDg0OCw0ODc4XSxcInZhbGlkXCJdLFtbNDg3OSw0ODc5XSxcInZhbGlkXCJdLFtbNDg4MCw0ODgwXSxcInZhbGlkXCJdLFtbNDg4MSw0ODgxXSxcImRpc2FsbG93ZWRcIl0sW1s0ODgyLDQ4ODVdLFwidmFsaWRcIl0sW1s0ODg2LDQ4ODddLFwiZGlzYWxsb3dlZFwiXSxbWzQ4ODgsNDg5NF0sXCJ2YWxpZFwiXSxbWzQ4OTUsNDg5NV0sXCJ2YWxpZFwiXSxbWzQ4OTYsNDkzNF0sXCJ2YWxpZFwiXSxbWzQ5MzUsNDkzNV0sXCJ2YWxpZFwiXSxbWzQ5MzYsNDk1NF0sXCJ2YWxpZFwiXSxbWzQ5NTUsNDk1Nl0sXCJkaXNhbGxvd2VkXCJdLFtbNDk1Nyw0OTU4XSxcInZhbGlkXCJdLFtbNDk1OSw0OTU5XSxcInZhbGlkXCJdLFtbNDk2MCw0OTYwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0OTYxLDQ5ODhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ5ODksNDk5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDk5Miw1MDA3XSxcInZhbGlkXCJdLFtbNTAwOCw1MDE3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s1MDE4LDUwMjNdLFwiZGlzYWxsb3dlZFwiXSxbWzUwMjQsNTEwOF0sXCJ2YWxpZFwiXSxbWzUxMDksNTEwOV0sXCJ2YWxpZFwiXSxbWzUxMTAsNTExMV0sXCJkaXNhbGxvd2VkXCJdLFtbNTExMiw1MTEyXSxcIm1hcHBlZFwiLFs1MTA0XV0sW1s1MTEzLDUxMTNdLFwibWFwcGVkXCIsWzUxMDVdXSxbWzUxMTQsNTExNF0sXCJtYXBwZWRcIixbNTEwNl1dLFtbNTExNSw1MTE1XSxcIm1hcHBlZFwiLFs1MTA3XV0sW1s1MTE2LDUxMTZdLFwibWFwcGVkXCIsWzUxMDhdXSxbWzUxMTcsNTExN10sXCJtYXBwZWRcIixbNTEwOV1dLFtbNTExOCw1MTE5XSxcImRpc2FsbG93ZWRcIl0sW1s1MTIwLDUxMjBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzUxMjEsNTc0MF0sXCJ2YWxpZFwiXSxbWzU3NDEsNTc0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNTc0Myw1NzUwXSxcInZhbGlkXCJdLFtbNTc1MSw1NzU5XSxcInZhbGlkXCJdLFtbNTc2MCw1NzYwXSxcImRpc2FsbG93ZWRcIl0sW1s1NzYxLDU3ODZdLFwidmFsaWRcIl0sW1s1Nzg3LDU3ODhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzU3ODksNTc5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNTc5Miw1ODY2XSxcInZhbGlkXCJdLFtbNTg2Nyw1ODcyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s1ODczLDU4ODBdLFwidmFsaWRcIl0sW1s1ODgxLDU4ODddLFwiZGlzYWxsb3dlZFwiXSxbWzU4ODgsNTkwMF0sXCJ2YWxpZFwiXSxbWzU5MDEsNTkwMV0sXCJkaXNhbGxvd2VkXCJdLFtbNTkwMiw1OTA4XSxcInZhbGlkXCJdLFtbNTkwOSw1OTE5XSxcImRpc2FsbG93ZWRcIl0sW1s1OTIwLDU5NDBdLFwidmFsaWRcIl0sW1s1OTQxLDU5NDJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzU5NDMsNTk1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNTk1Miw1OTcxXSxcInZhbGlkXCJdLFtbNTk3Miw1OTgzXSxcImRpc2FsbG93ZWRcIl0sW1s1OTg0LDU5OTZdLFwidmFsaWRcIl0sW1s1OTk3LDU5OTddLFwiZGlzYWxsb3dlZFwiXSxbWzU5OTgsNjAwMF0sXCJ2YWxpZFwiXSxbWzYwMDEsNjAwMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjAwMiw2MDAzXSxcInZhbGlkXCJdLFtbNjAwNCw2MDE1XSxcImRpc2FsbG93ZWRcIl0sW1s2MDE2LDYwNjddLFwidmFsaWRcIl0sW1s2MDY4LDYwNjldLFwiZGlzYWxsb3dlZFwiXSxbWzYwNzAsNjA5OV0sXCJ2YWxpZFwiXSxbWzYxMDAsNjEwMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjEwMyw2MTAzXSxcInZhbGlkXCJdLFtbNjEwNCw2MTA3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2MTA4LDYxMDhdLFwidmFsaWRcIl0sW1s2MTA5LDYxMDldLFwidmFsaWRcIl0sW1s2MTEwLDYxMTFdLFwiZGlzYWxsb3dlZFwiXSxbWzYxMTIsNjEyMV0sXCJ2YWxpZFwiXSxbWzYxMjIsNjEyN10sXCJkaXNhbGxvd2VkXCJdLFtbNjEyOCw2MTM3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2MTM4LDYxNDNdLFwiZGlzYWxsb3dlZFwiXSxbWzYxNDQsNjE0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjE1MCw2MTUwXSxcImRpc2FsbG93ZWRcIl0sW1s2MTUxLDYxNTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzYxNTUsNjE1N10sXCJpZ25vcmVkXCJdLFtbNjE1OCw2MTU4XSxcImRpc2FsbG93ZWRcIl0sW1s2MTU5LDYxNTldLFwiZGlzYWxsb3dlZFwiXSxbWzYxNjAsNjE2OV0sXCJ2YWxpZFwiXSxbWzYxNzAsNjE3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjE3Niw2MjYzXSxcInZhbGlkXCJdLFtbNjI2NCw2MjcxXSxcImRpc2FsbG93ZWRcIl0sW1s2MjcyLDYzMTNdLFwidmFsaWRcIl0sW1s2MzE0LDYzMTRdLFwidmFsaWRcIl0sW1s2MzE1LDYzMTldLFwiZGlzYWxsb3dlZFwiXSxbWzYzMjAsNjM4OV0sXCJ2YWxpZFwiXSxbWzYzOTAsNjM5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjQwMCw2NDI4XSxcInZhbGlkXCJdLFtbNjQyOSw2NDMwXSxcInZhbGlkXCJdLFtbNjQzMSw2NDMxXSxcImRpc2FsbG93ZWRcIl0sW1s2NDMyLDY0NDNdLFwidmFsaWRcIl0sW1s2NDQ0LDY0NDddLFwiZGlzYWxsb3dlZFwiXSxbWzY0NDgsNjQ1OV0sXCJ2YWxpZFwiXSxbWzY0NjAsNjQ2M10sXCJkaXNhbGxvd2VkXCJdLFtbNjQ2NCw2NDY0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NDY1LDY0NjddLFwiZGlzYWxsb3dlZFwiXSxbWzY0NjgsNjQ2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjQ3MCw2NTA5XSxcInZhbGlkXCJdLFtbNjUxMCw2NTExXSxcImRpc2FsbG93ZWRcIl0sW1s2NTEyLDY1MTZdLFwidmFsaWRcIl0sW1s2NTE3LDY1MjddLFwiZGlzYWxsb3dlZFwiXSxbWzY1MjgsNjU2OV0sXCJ2YWxpZFwiXSxbWzY1NzAsNjU3MV0sXCJ2YWxpZFwiXSxbWzY1NzIsNjU3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU3Niw2NjAxXSxcInZhbGlkXCJdLFtbNjYwMiw2NjA3XSxcImRpc2FsbG93ZWRcIl0sW1s2NjA4LDY2MTddLFwidmFsaWRcIl0sW1s2NjE4LDY2MThdLFwidmFsaWRcIixbXSxcIlhWOFwiXSxbWzY2MTksNjYyMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjYyMiw2NjIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NjI0LDY2NTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2NTYsNjY4M10sXCJ2YWxpZFwiXSxbWzY2ODQsNjY4NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjY4Niw2Njg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Njg4LDY3NTBdLFwidmFsaWRcIl0sW1s2NzUxLDY3NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NTIsNjc4MF0sXCJ2YWxpZFwiXSxbWzY3ODEsNjc4Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNjc4Myw2NzkzXSxcInZhbGlkXCJdLFtbNjc5NCw2Nzk5XSxcImRpc2FsbG93ZWRcIl0sW1s2ODAwLDY4MDldLFwidmFsaWRcIl0sW1s2ODEwLDY4MTVdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTYsNjgyMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgyMyw2ODIzXSxcInZhbGlkXCJdLFtbNjgyNCw2ODI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODMwLDY4MzFdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MzIsNjg0NV0sXCJ2YWxpZFwiXSxbWzY4NDYsNjg0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjg0Nyw2OTExXSxcImRpc2FsbG93ZWRcIl0sW1s2OTEyLDY5ODddLFwidmFsaWRcIl0sW1s2OTg4LDY5OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY5OTIsNzAwMV0sXCJ2YWxpZFwiXSxbWzcwMDIsNzAxOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAxOSw3MDI3XSxcInZhbGlkXCJdLFtbNzAyOCw3MDM2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDM3LDcwMzldLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDAsNzA4Ml0sXCJ2YWxpZFwiXSxbWzcwODMsNzA4NV0sXCJ2YWxpZFwiXSxbWzcwODYsNzA5N10sXCJ2YWxpZFwiXSxbWzcwOTgsNzEwM10sXCJ2YWxpZFwiXSxbWzcxMDQsNzE1NV0sXCJ2YWxpZFwiXSxbWzcxNTYsNzE2M10sXCJkaXNhbGxvd2VkXCJdLFtbNzE2NCw3MTY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTY4LDcyMjNdLFwidmFsaWRcIl0sW1s3MjI0LDcyMjZdLFwiZGlzYWxsb3dlZFwiXSxbWzcyMjcsNzIzMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzIzMiw3MjQxXSxcInZhbGlkXCJdLFtbNzI0Miw3MjQ0XSxcImRpc2FsbG93ZWRcIl0sW1s3MjQ1LDcyOTNdLFwidmFsaWRcIl0sW1s3Mjk0LDcyOTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcyOTYsNzM1OV0sXCJkaXNhbGxvd2VkXCJdLFtbNzM2MCw3MzY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MzY4LDczNzVdLFwiZGlzYWxsb3dlZFwiXSxbWzczNzYsNzM3OF0sXCJ2YWxpZFwiXSxbWzczNzksNzM3OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzM4MCw3NDEwXSxcInZhbGlkXCJdLFtbNzQxMSw3NDE0XSxcInZhbGlkXCJdLFtbNzQxNSw3NDE1XSxcImRpc2FsbG93ZWRcIl0sW1s3NDE2LDc0MTddLFwidmFsaWRcIl0sW1s3NDE4LDc0MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzc0MjQsNzQ2N10sXCJ2YWxpZFwiXSxbWzc0NjgsNzQ2OF0sXCJtYXBwZWRcIixbOTddXSxbWzc0NjksNzQ2OV0sXCJtYXBwZWRcIixbMjMwXV0sW1s3NDcwLDc0NzBdLFwibWFwcGVkXCIsWzk4XV0sW1s3NDcxLDc0NzFdLFwidmFsaWRcIl0sW1s3NDcyLDc0NzJdLFwibWFwcGVkXCIsWzEwMF1dLFtbNzQ3Myw3NDczXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzc0NzQsNzQ3NF0sXCJtYXBwZWRcIixbNDc3XV0sW1s3NDc1LDc0NzVdLFwibWFwcGVkXCIsWzEwM11dLFtbNzQ3Niw3NDc2XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzc0NzcsNzQ3N10sXCJtYXBwZWRcIixbMTA1XV0sW1s3NDc4LDc0NzhdLFwibWFwcGVkXCIsWzEwNl1dLFtbNzQ3OSw3NDc5XSxcIm1hcHBlZFwiLFsxMDddXSxbWzc0ODAsNzQ4MF0sXCJtYXBwZWRcIixbMTA4XV0sW1s3NDgxLDc0ODFdLFwibWFwcGVkXCIsWzEwOV1dLFtbNzQ4Miw3NDgyXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzc0ODMsNzQ4M10sXCJ2YWxpZFwiXSxbWzc0ODQsNzQ4NF0sXCJtYXBwZWRcIixbMTExXV0sW1s3NDg1LDc0ODVdLFwibWFwcGVkXCIsWzU0N11dLFtbNzQ4Niw3NDg2XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzc0ODcsNzQ4N10sXCJtYXBwZWRcIixbMTE0XV0sW1s3NDg4LDc0ODhdLFwibWFwcGVkXCIsWzExNl1dLFtbNzQ4OSw3NDg5XSxcIm1hcHBlZFwiLFsxMTddXSxbWzc0OTAsNzQ5MF0sXCJtYXBwZWRcIixbMTE5XV0sW1s3NDkxLDc0OTFdLFwibWFwcGVkXCIsWzk3XV0sW1s3NDkyLDc0OTJdLFwibWFwcGVkXCIsWzU5Ml1dLFtbNzQ5Myw3NDkzXSxcIm1hcHBlZFwiLFs1OTNdXSxbWzc0OTQsNzQ5NF0sXCJtYXBwZWRcIixbNzQyNl1dLFtbNzQ5NSw3NDk1XSxcIm1hcHBlZFwiLFs5OF1dLFtbNzQ5Niw3NDk2XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzc0OTcsNzQ5N10sXCJtYXBwZWRcIixbMTAxXV0sW1s3NDk4LDc0OThdLFwibWFwcGVkXCIsWzYwMV1dLFtbNzQ5OSw3NDk5XSxcIm1hcHBlZFwiLFs2MDNdXSxbWzc1MDAsNzUwMF0sXCJtYXBwZWRcIixbNjA0XV0sW1s3NTAxLDc1MDFdLFwibWFwcGVkXCIsWzEwM11dLFtbNzUwMiw3NTAyXSxcInZhbGlkXCJdLFtbNzUwMyw3NTAzXSxcIm1hcHBlZFwiLFsxMDddXSxbWzc1MDQsNzUwNF0sXCJtYXBwZWRcIixbMTA5XV0sW1s3NTA1LDc1MDVdLFwibWFwcGVkXCIsWzMzMV1dLFtbNzUwNiw3NTA2XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzc1MDcsNzUwN10sXCJtYXBwZWRcIixbNTk2XV0sW1s3NTA4LDc1MDhdLFwibWFwcGVkXCIsWzc0NDZdXSxbWzc1MDksNzUwOV0sXCJtYXBwZWRcIixbNzQ0N11dLFtbNzUxMCw3NTEwXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzc1MTEsNzUxMV0sXCJtYXBwZWRcIixbMTE2XV0sW1s3NTEyLDc1MTJdLFwibWFwcGVkXCIsWzExN11dLFtbNzUxMyw3NTEzXSxcIm1hcHBlZFwiLFs3NDUzXV0sW1s3NTE0LDc1MTRdLFwibWFwcGVkXCIsWzYyM11dLFtbNzUxNSw3NTE1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzc1MTYsNzUxNl0sXCJtYXBwZWRcIixbNzQ2MV1dLFtbNzUxNyw3NTE3XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzc1MTgsNzUxOF0sXCJtYXBwZWRcIixbOTQ3XV0sW1s3NTE5LDc1MTldLFwibWFwcGVkXCIsWzk0OF1dLFtbNzUyMCw3NTIwXSxcIm1hcHBlZFwiLFs5NjZdXSxbWzc1MjEsNzUyMV0sXCJtYXBwZWRcIixbOTY3XV0sW1s3NTIyLDc1MjJdLFwibWFwcGVkXCIsWzEwNV1dLFtbNzUyMyw3NTIzXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzc1MjQsNzUyNF0sXCJtYXBwZWRcIixbMTE3XV0sW1s3NTI1LDc1MjVdLFwibWFwcGVkXCIsWzExOF1dLFtbNzUyNiw3NTI2XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzc1MjcsNzUyN10sXCJtYXBwZWRcIixbOTQ3XV0sW1s3NTI4LDc1MjhdLFwibWFwcGVkXCIsWzk2MV1dLFtbNzUyOSw3NTI5XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzc1MzAsNzUzMF0sXCJtYXBwZWRcIixbOTY3XV0sW1s3NTMxLDc1MzFdLFwidmFsaWRcIl0sW1s3NTMyLDc1NDNdLFwidmFsaWRcIl0sW1s3NTQ0LDc1NDRdLFwibWFwcGVkXCIsWzEwODVdXSxbWzc1NDUsNzU3OF0sXCJ2YWxpZFwiXSxbWzc1NzksNzU3OV0sXCJtYXBwZWRcIixbNTk0XV0sW1s3NTgwLDc1ODBdLFwibWFwcGVkXCIsWzk5XV0sW1s3NTgxLDc1ODFdLFwibWFwcGVkXCIsWzU5N11dLFtbNzU4Miw3NTgyXSxcIm1hcHBlZFwiLFsyNDBdXSxbWzc1ODMsNzU4M10sXCJtYXBwZWRcIixbNjA0XV0sW1s3NTg0LDc1ODRdLFwibWFwcGVkXCIsWzEwMl1dLFtbNzU4NSw3NTg1XSxcIm1hcHBlZFwiLFs2MDddXSxbWzc1ODYsNzU4Nl0sXCJtYXBwZWRcIixbNjA5XV0sW1s3NTg3LDc1ODddLFwibWFwcGVkXCIsWzYxM11dLFtbNzU4OCw3NTg4XSxcIm1hcHBlZFwiLFs2MTZdXSxbWzc1ODksNzU4OV0sXCJtYXBwZWRcIixbNjE3XV0sW1s3NTkwLDc1OTBdLFwibWFwcGVkXCIsWzYxOF1dLFtbNzU5MSw3NTkxXSxcIm1hcHBlZFwiLFs3NTQ3XV0sW1s3NTkyLDc1OTJdLFwibWFwcGVkXCIsWzY2OV1dLFtbNzU5Myw3NTkzXSxcIm1hcHBlZFwiLFs2MjFdXSxbWzc1OTQsNzU5NF0sXCJtYXBwZWRcIixbNzU1N11dLFtbNzU5NSw3NTk1XSxcIm1hcHBlZFwiLFs2NzFdXSxbWzc1OTYsNzU5Nl0sXCJtYXBwZWRcIixbNjI1XV0sW1s3NTk3LDc1OTddLFwibWFwcGVkXCIsWzYyNF1dLFtbNzU5OCw3NTk4XSxcIm1hcHBlZFwiLFs2MjZdXSxbWzc1OTksNzU5OV0sXCJtYXBwZWRcIixbNjI3XV0sW1s3NjAwLDc2MDBdLFwibWFwcGVkXCIsWzYyOF1dLFtbNzYwMSw3NjAxXSxcIm1hcHBlZFwiLFs2MjldXSxbWzc2MDIsNzYwMl0sXCJtYXBwZWRcIixbNjMyXV0sW1s3NjAzLDc2MDNdLFwibWFwcGVkXCIsWzY0Ml1dLFtbNzYwNCw3NjA0XSxcIm1hcHBlZFwiLFs2NDNdXSxbWzc2MDUsNzYwNV0sXCJtYXBwZWRcIixbNDI3XV0sW1s3NjA2LDc2MDZdLFwibWFwcGVkXCIsWzY0OV1dLFtbNzYwNyw3NjA3XSxcIm1hcHBlZFwiLFs2NTBdXSxbWzc2MDgsNzYwOF0sXCJtYXBwZWRcIixbNzQ1Ml1dLFtbNzYwOSw3NjA5XSxcIm1hcHBlZFwiLFs2NTFdXSxbWzc2MTAsNzYxMF0sXCJtYXBwZWRcIixbNjUyXV0sW1s3NjExLDc2MTFdLFwibWFwcGVkXCIsWzEyMl1dLFtbNzYxMiw3NjEyXSxcIm1hcHBlZFwiLFs2NTZdXSxbWzc2MTMsNzYxM10sXCJtYXBwZWRcIixbNjU3XV0sW1s3NjE0LDc2MTRdLFwibWFwcGVkXCIsWzY1OF1dLFtbNzYxNSw3NjE1XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzc2MTYsNzYxOV0sXCJ2YWxpZFwiXSxbWzc2MjAsNzYyNl0sXCJ2YWxpZFwiXSxbWzc2MjcsNzY1NF0sXCJ2YWxpZFwiXSxbWzc2NTUsNzY2OV0sXCJ2YWxpZFwiXSxbWzc2NzAsNzY3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNzY3Niw3Njc2XSxcInZhbGlkXCJdLFtbNzY3Nyw3Njc3XSxcInZhbGlkXCJdLFtbNzY3OCw3Njc5XSxcInZhbGlkXCJdLFtbNzY4MCw3NjgwXSxcIm1hcHBlZFwiLFs3NjgxXV0sW1s3NjgxLDc2ODFdLFwidmFsaWRcIl0sW1s3NjgyLDc2ODJdLFwibWFwcGVkXCIsWzc2ODNdXSxbWzc2ODMsNzY4M10sXCJ2YWxpZFwiXSxbWzc2ODQsNzY4NF0sXCJtYXBwZWRcIixbNzY4NV1dLFtbNzY4NSw3Njg1XSxcInZhbGlkXCJdLFtbNzY4Niw3Njg2XSxcIm1hcHBlZFwiLFs3Njg3XV0sW1s3Njg3LDc2ODddLFwidmFsaWRcIl0sW1s3Njg4LDc2ODhdLFwibWFwcGVkXCIsWzc2ODldXSxbWzc2ODksNzY4OV0sXCJ2YWxpZFwiXSxbWzc2OTAsNzY5MF0sXCJtYXBwZWRcIixbNzY5MV1dLFtbNzY5MSw3NjkxXSxcInZhbGlkXCJdLFtbNzY5Miw3NjkyXSxcIm1hcHBlZFwiLFs3NjkzXV0sW1s3NjkzLDc2OTNdLFwidmFsaWRcIl0sW1s3Njk0LDc2OTRdLFwibWFwcGVkXCIsWzc2OTVdXSxbWzc2OTUsNzY5NV0sXCJ2YWxpZFwiXSxbWzc2OTYsNzY5Nl0sXCJtYXBwZWRcIixbNzY5N11dLFtbNzY5Nyw3Njk3XSxcInZhbGlkXCJdLFtbNzY5OCw3Njk4XSxcIm1hcHBlZFwiLFs3Njk5XV0sW1s3Njk5LDc2OTldLFwidmFsaWRcIl0sW1s3NzAwLDc3MDBdLFwibWFwcGVkXCIsWzc3MDFdXSxbWzc3MDEsNzcwMV0sXCJ2YWxpZFwiXSxbWzc3MDIsNzcwMl0sXCJtYXBwZWRcIixbNzcwM11dLFtbNzcwMyw3NzAzXSxcInZhbGlkXCJdLFtbNzcwNCw3NzA0XSxcIm1hcHBlZFwiLFs3NzA1XV0sW1s3NzA1LDc3MDVdLFwidmFsaWRcIl0sW1s3NzA2LDc3MDZdLFwibWFwcGVkXCIsWzc3MDddXSxbWzc3MDcsNzcwN10sXCJ2YWxpZFwiXSxbWzc3MDgsNzcwOF0sXCJtYXBwZWRcIixbNzcwOV1dLFtbNzcwOSw3NzA5XSxcInZhbGlkXCJdLFtbNzcxMCw3NzEwXSxcIm1hcHBlZFwiLFs3NzExXV0sW1s3NzExLDc3MTFdLFwidmFsaWRcIl0sW1s3NzEyLDc3MTJdLFwibWFwcGVkXCIsWzc3MTNdXSxbWzc3MTMsNzcxM10sXCJ2YWxpZFwiXSxbWzc3MTQsNzcxNF0sXCJtYXBwZWRcIixbNzcxNV1dLFtbNzcxNSw3NzE1XSxcInZhbGlkXCJdLFtbNzcxNiw3NzE2XSxcIm1hcHBlZFwiLFs3NzE3XV0sW1s3NzE3LDc3MTddLFwidmFsaWRcIl0sW1s3NzE4LDc3MThdLFwibWFwcGVkXCIsWzc3MTldXSxbWzc3MTksNzcxOV0sXCJ2YWxpZFwiXSxbWzc3MjAsNzcyMF0sXCJtYXBwZWRcIixbNzcyMV1dLFtbNzcyMSw3NzIxXSxcInZhbGlkXCJdLFtbNzcyMiw3NzIyXSxcIm1hcHBlZFwiLFs3NzIzXV0sW1s3NzIzLDc3MjNdLFwidmFsaWRcIl0sW1s3NzI0LDc3MjRdLFwibWFwcGVkXCIsWzc3MjVdXSxbWzc3MjUsNzcyNV0sXCJ2YWxpZFwiXSxbWzc3MjYsNzcyNl0sXCJtYXBwZWRcIixbNzcyN11dLFtbNzcyNyw3NzI3XSxcInZhbGlkXCJdLFtbNzcyOCw3NzI4XSxcIm1hcHBlZFwiLFs3NzI5XV0sW1s3NzI5LDc3MjldLFwidmFsaWRcIl0sW1s3NzMwLDc3MzBdLFwibWFwcGVkXCIsWzc3MzFdXSxbWzc3MzEsNzczMV0sXCJ2YWxpZFwiXSxbWzc3MzIsNzczMl0sXCJtYXBwZWRcIixbNzczM11dLFtbNzczMyw3NzMzXSxcInZhbGlkXCJdLFtbNzczNCw3NzM0XSxcIm1hcHBlZFwiLFs3NzM1XV0sW1s3NzM1LDc3MzVdLFwidmFsaWRcIl0sW1s3NzM2LDc3MzZdLFwibWFwcGVkXCIsWzc3MzddXSxbWzc3MzcsNzczN10sXCJ2YWxpZFwiXSxbWzc3MzgsNzczOF0sXCJtYXBwZWRcIixbNzczOV1dLFtbNzczOSw3NzM5XSxcInZhbGlkXCJdLFtbNzc0MCw3NzQwXSxcIm1hcHBlZFwiLFs3NzQxXV0sW1s3NzQxLDc3NDFdLFwidmFsaWRcIl0sW1s3NzQyLDc3NDJdLFwibWFwcGVkXCIsWzc3NDNdXSxbWzc3NDMsNzc0M10sXCJ2YWxpZFwiXSxbWzc3NDQsNzc0NF0sXCJtYXBwZWRcIixbNzc0NV1dLFtbNzc0NSw3NzQ1XSxcInZhbGlkXCJdLFtbNzc0Niw3NzQ2XSxcIm1hcHBlZFwiLFs3NzQ3XV0sW1s3NzQ3LDc3NDddLFwidmFsaWRcIl0sW1s3NzQ4LDc3NDhdLFwibWFwcGVkXCIsWzc3NDldXSxbWzc3NDksNzc0OV0sXCJ2YWxpZFwiXSxbWzc3NTAsNzc1MF0sXCJtYXBwZWRcIixbNzc1MV1dLFtbNzc1MSw3NzUxXSxcInZhbGlkXCJdLFtbNzc1Miw3NzUyXSxcIm1hcHBlZFwiLFs3NzUzXV0sW1s3NzUzLDc3NTNdLFwidmFsaWRcIl0sW1s3NzU0LDc3NTRdLFwibWFwcGVkXCIsWzc3NTVdXSxbWzc3NTUsNzc1NV0sXCJ2YWxpZFwiXSxbWzc3NTYsNzc1Nl0sXCJtYXBwZWRcIixbNzc1N11dLFtbNzc1Nyw3NzU3XSxcInZhbGlkXCJdLFtbNzc1OCw3NzU4XSxcIm1hcHBlZFwiLFs3NzU5XV0sW1s3NzU5LDc3NTldLFwidmFsaWRcIl0sW1s3NzYwLDc3NjBdLFwibWFwcGVkXCIsWzc3NjFdXSxbWzc3NjEsNzc2MV0sXCJ2YWxpZFwiXSxbWzc3NjIsNzc2Ml0sXCJtYXBwZWRcIixbNzc2M11dLFtbNzc2Myw3NzYzXSxcInZhbGlkXCJdLFtbNzc2NCw3NzY0XSxcIm1hcHBlZFwiLFs3NzY1XV0sW1s3NzY1LDc3NjVdLFwidmFsaWRcIl0sW1s3NzY2LDc3NjZdLFwibWFwcGVkXCIsWzc3NjddXSxbWzc3NjcsNzc2N10sXCJ2YWxpZFwiXSxbWzc3NjgsNzc2OF0sXCJtYXBwZWRcIixbNzc2OV1dLFtbNzc2OSw3NzY5XSxcInZhbGlkXCJdLFtbNzc3MCw3NzcwXSxcIm1hcHBlZFwiLFs3NzcxXV0sW1s3NzcxLDc3NzFdLFwidmFsaWRcIl0sW1s3NzcyLDc3NzJdLFwibWFwcGVkXCIsWzc3NzNdXSxbWzc3NzMsNzc3M10sXCJ2YWxpZFwiXSxbWzc3NzQsNzc3NF0sXCJtYXBwZWRcIixbNzc3NV1dLFtbNzc3NSw3Nzc1XSxcInZhbGlkXCJdLFtbNzc3Niw3Nzc2XSxcIm1hcHBlZFwiLFs3Nzc3XV0sW1s3Nzc3LDc3NzddLFwidmFsaWRcIl0sW1s3Nzc4LDc3NzhdLFwibWFwcGVkXCIsWzc3NzldXSxbWzc3NzksNzc3OV0sXCJ2YWxpZFwiXSxbWzc3ODAsNzc4MF0sXCJtYXBwZWRcIixbNzc4MV1dLFtbNzc4MSw3NzgxXSxcInZhbGlkXCJdLFtbNzc4Miw3NzgyXSxcIm1hcHBlZFwiLFs3NzgzXV0sW1s3NzgzLDc3ODNdLFwidmFsaWRcIl0sW1s3Nzg0LDc3ODRdLFwibWFwcGVkXCIsWzc3ODVdXSxbWzc3ODUsNzc4NV0sXCJ2YWxpZFwiXSxbWzc3ODYsNzc4Nl0sXCJtYXBwZWRcIixbNzc4N11dLFtbNzc4Nyw3Nzg3XSxcInZhbGlkXCJdLFtbNzc4OCw3Nzg4XSxcIm1hcHBlZFwiLFs3Nzg5XV0sW1s3Nzg5LDc3ODldLFwidmFsaWRcIl0sW1s3NzkwLDc3OTBdLFwibWFwcGVkXCIsWzc3OTFdXSxbWzc3OTEsNzc5MV0sXCJ2YWxpZFwiXSxbWzc3OTIsNzc5Ml0sXCJtYXBwZWRcIixbNzc5M11dLFtbNzc5Myw3NzkzXSxcInZhbGlkXCJdLFtbNzc5NCw3Nzk0XSxcIm1hcHBlZFwiLFs3Nzk1XV0sW1s3Nzk1LDc3OTVdLFwidmFsaWRcIl0sW1s3Nzk2LDc3OTZdLFwibWFwcGVkXCIsWzc3OTddXSxbWzc3OTcsNzc5N10sXCJ2YWxpZFwiXSxbWzc3OTgsNzc5OF0sXCJtYXBwZWRcIixbNzc5OV1dLFtbNzc5OSw3Nzk5XSxcInZhbGlkXCJdLFtbNzgwMCw3ODAwXSxcIm1hcHBlZFwiLFs3ODAxXV0sW1s3ODAxLDc4MDFdLFwidmFsaWRcIl0sW1s3ODAyLDc4MDJdLFwibWFwcGVkXCIsWzc4MDNdXSxbWzc4MDMsNzgwM10sXCJ2YWxpZFwiXSxbWzc4MDQsNzgwNF0sXCJtYXBwZWRcIixbNzgwNV1dLFtbNzgwNSw3ODA1XSxcInZhbGlkXCJdLFtbNzgwNiw3ODA2XSxcIm1hcHBlZFwiLFs3ODA3XV0sW1s3ODA3LDc4MDddLFwidmFsaWRcIl0sW1s3ODA4LDc4MDhdLFwibWFwcGVkXCIsWzc4MDldXSxbWzc4MDksNzgwOV0sXCJ2YWxpZFwiXSxbWzc4MTAsNzgxMF0sXCJtYXBwZWRcIixbNzgxMV1dLFtbNzgxMSw3ODExXSxcInZhbGlkXCJdLFtbNzgxMiw3ODEyXSxcIm1hcHBlZFwiLFs3ODEzXV0sW1s3ODEzLDc4MTNdLFwidmFsaWRcIl0sW1s3ODE0LDc4MTRdLFwibWFwcGVkXCIsWzc4MTVdXSxbWzc4MTUsNzgxNV0sXCJ2YWxpZFwiXSxbWzc4MTYsNzgxNl0sXCJtYXBwZWRcIixbNzgxN11dLFtbNzgxNyw3ODE3XSxcInZhbGlkXCJdLFtbNzgxOCw3ODE4XSxcIm1hcHBlZFwiLFs3ODE5XV0sW1s3ODE5LDc4MTldLFwidmFsaWRcIl0sW1s3ODIwLDc4MjBdLFwibWFwcGVkXCIsWzc4MjFdXSxbWzc4MjEsNzgyMV0sXCJ2YWxpZFwiXSxbWzc4MjIsNzgyMl0sXCJtYXBwZWRcIixbNzgyM11dLFtbNzgyMyw3ODIzXSxcInZhbGlkXCJdLFtbNzgyNCw3ODI0XSxcIm1hcHBlZFwiLFs3ODI1XV0sW1s3ODI1LDc4MjVdLFwidmFsaWRcIl0sW1s3ODI2LDc4MjZdLFwibWFwcGVkXCIsWzc4MjddXSxbWzc4MjcsNzgyN10sXCJ2YWxpZFwiXSxbWzc4MjgsNzgyOF0sXCJtYXBwZWRcIixbNzgyOV1dLFtbNzgyOSw3ODMzXSxcInZhbGlkXCJdLFtbNzgzNCw3ODM0XSxcIm1hcHBlZFwiLFs5Nyw3MDJdXSxbWzc4MzUsNzgzNV0sXCJtYXBwZWRcIixbNzc3N11dLFtbNzgzNiw3ODM3XSxcInZhbGlkXCJdLFtbNzgzOCw3ODM4XSxcIm1hcHBlZFwiLFsxMTUsMTE1XV0sW1s3ODM5LDc4MzldLFwidmFsaWRcIl0sW1s3ODQwLDc4NDBdLFwibWFwcGVkXCIsWzc4NDFdXSxbWzc4NDEsNzg0MV0sXCJ2YWxpZFwiXSxbWzc4NDIsNzg0Ml0sXCJtYXBwZWRcIixbNzg0M11dLFtbNzg0Myw3ODQzXSxcInZhbGlkXCJdLFtbNzg0NCw3ODQ0XSxcIm1hcHBlZFwiLFs3ODQ1XV0sW1s3ODQ1LDc4NDVdLFwidmFsaWRcIl0sW1s3ODQ2LDc4NDZdLFwibWFwcGVkXCIsWzc4NDddXSxbWzc4NDcsNzg0N10sXCJ2YWxpZFwiXSxbWzc4NDgsNzg0OF0sXCJtYXBwZWRcIixbNzg0OV1dLFtbNzg0OSw3ODQ5XSxcInZhbGlkXCJdLFtbNzg1MCw3ODUwXSxcIm1hcHBlZFwiLFs3ODUxXV0sW1s3ODUxLDc4NTFdLFwidmFsaWRcIl0sW1s3ODUyLDc4NTJdLFwibWFwcGVkXCIsWzc4NTNdXSxbWzc4NTMsNzg1M10sXCJ2YWxpZFwiXSxbWzc4NTQsNzg1NF0sXCJtYXBwZWRcIixbNzg1NV1dLFtbNzg1NSw3ODU1XSxcInZhbGlkXCJdLFtbNzg1Niw3ODU2XSxcIm1hcHBlZFwiLFs3ODU3XV0sW1s3ODU3LDc4NTddLFwidmFsaWRcIl0sW1s3ODU4LDc4NThdLFwibWFwcGVkXCIsWzc4NTldXSxbWzc4NTksNzg1OV0sXCJ2YWxpZFwiXSxbWzc4NjAsNzg2MF0sXCJtYXBwZWRcIixbNzg2MV1dLFtbNzg2MSw3ODYxXSxcInZhbGlkXCJdLFtbNzg2Miw3ODYyXSxcIm1hcHBlZFwiLFs3ODYzXV0sW1s3ODYzLDc4NjNdLFwidmFsaWRcIl0sW1s3ODY0LDc4NjRdLFwibWFwcGVkXCIsWzc4NjVdXSxbWzc4NjUsNzg2NV0sXCJ2YWxpZFwiXSxbWzc4NjYsNzg2Nl0sXCJtYXBwZWRcIixbNzg2N11dLFtbNzg2Nyw3ODY3XSxcInZhbGlkXCJdLFtbNzg2OCw3ODY4XSxcIm1hcHBlZFwiLFs3ODY5XV0sW1s3ODY5LDc4NjldLFwidmFsaWRcIl0sW1s3ODcwLDc4NzBdLFwibWFwcGVkXCIsWzc4NzFdXSxbWzc4NzEsNzg3MV0sXCJ2YWxpZFwiXSxbWzc4NzIsNzg3Ml0sXCJtYXBwZWRcIixbNzg3M11dLFtbNzg3Myw3ODczXSxcInZhbGlkXCJdLFtbNzg3NCw3ODc0XSxcIm1hcHBlZFwiLFs3ODc1XV0sW1s3ODc1LDc4NzVdLFwidmFsaWRcIl0sW1s3ODc2LDc4NzZdLFwibWFwcGVkXCIsWzc4NzddXSxbWzc4NzcsNzg3N10sXCJ2YWxpZFwiXSxbWzc4NzgsNzg3OF0sXCJtYXBwZWRcIixbNzg3OV1dLFtbNzg3OSw3ODc5XSxcInZhbGlkXCJdLFtbNzg4MCw3ODgwXSxcIm1hcHBlZFwiLFs3ODgxXV0sW1s3ODgxLDc4ODFdLFwidmFsaWRcIl0sW1s3ODgyLDc4ODJdLFwibWFwcGVkXCIsWzc4ODNdXSxbWzc4ODMsNzg4M10sXCJ2YWxpZFwiXSxbWzc4ODQsNzg4NF0sXCJtYXBwZWRcIixbNzg4NV1dLFtbNzg4NSw3ODg1XSxcInZhbGlkXCJdLFtbNzg4Niw3ODg2XSxcIm1hcHBlZFwiLFs3ODg3XV0sW1s3ODg3LDc4ODddLFwidmFsaWRcIl0sW1s3ODg4LDc4ODhdLFwibWFwcGVkXCIsWzc4ODldXSxbWzc4ODksNzg4OV0sXCJ2YWxpZFwiXSxbWzc4OTAsNzg5MF0sXCJtYXBwZWRcIixbNzg5MV1dLFtbNzg5MSw3ODkxXSxcInZhbGlkXCJdLFtbNzg5Miw3ODkyXSxcIm1hcHBlZFwiLFs3ODkzXV0sW1s3ODkzLDc4OTNdLFwidmFsaWRcIl0sW1s3ODk0LDc4OTRdLFwibWFwcGVkXCIsWzc4OTVdXSxbWzc4OTUsNzg5NV0sXCJ2YWxpZFwiXSxbWzc4OTYsNzg5Nl0sXCJtYXBwZWRcIixbNzg5N11dLFtbNzg5Nyw3ODk3XSxcInZhbGlkXCJdLFtbNzg5OCw3ODk4XSxcIm1hcHBlZFwiLFs3ODk5XV0sW1s3ODk5LDc4OTldLFwidmFsaWRcIl0sW1s3OTAwLDc5MDBdLFwibWFwcGVkXCIsWzc5MDFdXSxbWzc5MDEsNzkwMV0sXCJ2YWxpZFwiXSxbWzc5MDIsNzkwMl0sXCJtYXBwZWRcIixbNzkwM11dLFtbNzkwMyw3OTAzXSxcInZhbGlkXCJdLFtbNzkwNCw3OTA0XSxcIm1hcHBlZFwiLFs3OTA1XV0sW1s3OTA1LDc5MDVdLFwidmFsaWRcIl0sW1s3OTA2LDc5MDZdLFwibWFwcGVkXCIsWzc5MDddXSxbWzc5MDcsNzkwN10sXCJ2YWxpZFwiXSxbWzc5MDgsNzkwOF0sXCJtYXBwZWRcIixbNzkwOV1dLFtbNzkwOSw3OTA5XSxcInZhbGlkXCJdLFtbNzkxMCw3OTEwXSxcIm1hcHBlZFwiLFs3OTExXV0sW1s3OTExLDc5MTFdLFwidmFsaWRcIl0sW1s3OTEyLDc5MTJdLFwibWFwcGVkXCIsWzc5MTNdXSxbWzc5MTMsNzkxM10sXCJ2YWxpZFwiXSxbWzc5MTQsNzkxNF0sXCJtYXBwZWRcIixbNzkxNV1dLFtbNzkxNSw3OTE1XSxcInZhbGlkXCJdLFtbNzkxNiw3OTE2XSxcIm1hcHBlZFwiLFs3OTE3XV0sW1s3OTE3LDc5MTddLFwidmFsaWRcIl0sW1s3OTE4LDc5MThdLFwibWFwcGVkXCIsWzc5MTldXSxbWzc5MTksNzkxOV0sXCJ2YWxpZFwiXSxbWzc5MjAsNzkyMF0sXCJtYXBwZWRcIixbNzkyMV1dLFtbNzkyMSw3OTIxXSxcInZhbGlkXCJdLFtbNzkyMiw3OTIyXSxcIm1hcHBlZFwiLFs3OTIzXV0sW1s3OTIzLDc5MjNdLFwidmFsaWRcIl0sW1s3OTI0LDc5MjRdLFwibWFwcGVkXCIsWzc5MjVdXSxbWzc5MjUsNzkyNV0sXCJ2YWxpZFwiXSxbWzc5MjYsNzkyNl0sXCJtYXBwZWRcIixbNzkyN11dLFtbNzkyNyw3OTI3XSxcInZhbGlkXCJdLFtbNzkyOCw3OTI4XSxcIm1hcHBlZFwiLFs3OTI5XV0sW1s3OTI5LDc5MjldLFwidmFsaWRcIl0sW1s3OTMwLDc5MzBdLFwibWFwcGVkXCIsWzc5MzFdXSxbWzc5MzEsNzkzMV0sXCJ2YWxpZFwiXSxbWzc5MzIsNzkzMl0sXCJtYXBwZWRcIixbNzkzM11dLFtbNzkzMyw3OTMzXSxcInZhbGlkXCJdLFtbNzkzNCw3OTM0XSxcIm1hcHBlZFwiLFs3OTM1XV0sW1s3OTM1LDc5MzVdLFwidmFsaWRcIl0sW1s3OTM2LDc5NDNdLFwidmFsaWRcIl0sW1s3OTQ0LDc5NDRdLFwibWFwcGVkXCIsWzc5MzZdXSxbWzc5NDUsNzk0NV0sXCJtYXBwZWRcIixbNzkzN11dLFtbNzk0Niw3OTQ2XSxcIm1hcHBlZFwiLFs3OTM4XV0sW1s3OTQ3LDc5NDddLFwibWFwcGVkXCIsWzc5MzldXSxbWzc5NDgsNzk0OF0sXCJtYXBwZWRcIixbNzk0MF1dLFtbNzk0OSw3OTQ5XSxcIm1hcHBlZFwiLFs3OTQxXV0sW1s3OTUwLDc5NTBdLFwibWFwcGVkXCIsWzc5NDJdXSxbWzc5NTEsNzk1MV0sXCJtYXBwZWRcIixbNzk0M11dLFtbNzk1Miw3OTU3XSxcInZhbGlkXCJdLFtbNzk1OCw3OTU5XSxcImRpc2FsbG93ZWRcIl0sW1s3OTYwLDc5NjBdLFwibWFwcGVkXCIsWzc5NTJdXSxbWzc5NjEsNzk2MV0sXCJtYXBwZWRcIixbNzk1M11dLFtbNzk2Miw3OTYyXSxcIm1hcHBlZFwiLFs3OTU0XV0sW1s3OTYzLDc5NjNdLFwibWFwcGVkXCIsWzc5NTVdXSxbWzc5NjQsNzk2NF0sXCJtYXBwZWRcIixbNzk1Nl1dLFtbNzk2NSw3OTY1XSxcIm1hcHBlZFwiLFs3OTU3XV0sW1s3OTY2LDc5NjddLFwiZGlzYWxsb3dlZFwiXSxbWzc5NjgsNzk3NV0sXCJ2YWxpZFwiXSxbWzc5NzYsNzk3Nl0sXCJtYXBwZWRcIixbNzk2OF1dLFtbNzk3Nyw3OTc3XSxcIm1hcHBlZFwiLFs3OTY5XV0sW1s3OTc4LDc5NzhdLFwibWFwcGVkXCIsWzc5NzBdXSxbWzc5NzksNzk3OV0sXCJtYXBwZWRcIixbNzk3MV1dLFtbNzk4MCw3OTgwXSxcIm1hcHBlZFwiLFs3OTcyXV0sW1s3OTgxLDc5ODFdLFwibWFwcGVkXCIsWzc5NzNdXSxbWzc5ODIsNzk4Ml0sXCJtYXBwZWRcIixbNzk3NF1dLFtbNzk4Myw3OTgzXSxcIm1hcHBlZFwiLFs3OTc1XV0sW1s3OTg0LDc5OTFdLFwidmFsaWRcIl0sW1s3OTkyLDc5OTJdLFwibWFwcGVkXCIsWzc5ODRdXSxbWzc5OTMsNzk5M10sXCJtYXBwZWRcIixbNzk4NV1dLFtbNzk5NCw3OTk0XSxcIm1hcHBlZFwiLFs3OTg2XV0sW1s3OTk1LDc5OTVdLFwibWFwcGVkXCIsWzc5ODddXSxbWzc5OTYsNzk5Nl0sXCJtYXBwZWRcIixbNzk4OF1dLFtbNzk5Nyw3OTk3XSxcIm1hcHBlZFwiLFs3OTg5XV0sW1s3OTk4LDc5OThdLFwibWFwcGVkXCIsWzc5OTBdXSxbWzc5OTksNzk5OV0sXCJtYXBwZWRcIixbNzk5MV1dLFtbODAwMCw4MDA1XSxcInZhbGlkXCJdLFtbODAwNiw4MDA3XSxcImRpc2FsbG93ZWRcIl0sW1s4MDA4LDgwMDhdLFwibWFwcGVkXCIsWzgwMDBdXSxbWzgwMDksODAwOV0sXCJtYXBwZWRcIixbODAwMV1dLFtbODAxMCw4MDEwXSxcIm1hcHBlZFwiLFs4MDAyXV0sW1s4MDExLDgwMTFdLFwibWFwcGVkXCIsWzgwMDNdXSxbWzgwMTIsODAxMl0sXCJtYXBwZWRcIixbODAwNF1dLFtbODAxMyw4MDEzXSxcIm1hcHBlZFwiLFs4MDA1XV0sW1s4MDE0LDgwMTVdLFwiZGlzYWxsb3dlZFwiXSxbWzgwMTYsODAyM10sXCJ2YWxpZFwiXSxbWzgwMjQsODAyNF0sXCJkaXNhbGxvd2VkXCJdLFtbODAyNSw4MDI1XSxcIm1hcHBlZFwiLFs4MDE3XV0sW1s4MDI2LDgwMjZdLFwiZGlzYWxsb3dlZFwiXSxbWzgwMjcsODAyN10sXCJtYXBwZWRcIixbODAxOV1dLFtbODAyOCw4MDI4XSxcImRpc2FsbG93ZWRcIl0sW1s4MDI5LDgwMjldLFwibWFwcGVkXCIsWzgwMjFdXSxbWzgwMzAsODAzMF0sXCJkaXNhbGxvd2VkXCJdLFtbODAzMSw4MDMxXSxcIm1hcHBlZFwiLFs4MDIzXV0sW1s4MDMyLDgwMzldLFwidmFsaWRcIl0sW1s4MDQwLDgwNDBdLFwibWFwcGVkXCIsWzgwMzJdXSxbWzgwNDEsODA0MV0sXCJtYXBwZWRcIixbODAzM11dLFtbODA0Miw4MDQyXSxcIm1hcHBlZFwiLFs4MDM0XV0sW1s4MDQzLDgwNDNdLFwibWFwcGVkXCIsWzgwMzVdXSxbWzgwNDQsODA0NF0sXCJtYXBwZWRcIixbODAzNl1dLFtbODA0NSw4MDQ1XSxcIm1hcHBlZFwiLFs4MDM3XV0sW1s4MDQ2LDgwNDZdLFwibWFwcGVkXCIsWzgwMzhdXSxbWzgwNDcsODA0N10sXCJtYXBwZWRcIixbODAzOV1dLFtbODA0OCw4MDQ4XSxcInZhbGlkXCJdLFtbODA0OSw4MDQ5XSxcIm1hcHBlZFwiLFs5NDBdXSxbWzgwNTAsODA1MF0sXCJ2YWxpZFwiXSxbWzgwNTEsODA1MV0sXCJtYXBwZWRcIixbOTQxXV0sW1s4MDUyLDgwNTJdLFwidmFsaWRcIl0sW1s4MDUzLDgwNTNdLFwibWFwcGVkXCIsWzk0Ml1dLFtbODA1NCw4MDU0XSxcInZhbGlkXCJdLFtbODA1NSw4MDU1XSxcIm1hcHBlZFwiLFs5NDNdXSxbWzgwNTYsODA1Nl0sXCJ2YWxpZFwiXSxbWzgwNTcsODA1N10sXCJtYXBwZWRcIixbOTcyXV0sW1s4MDU4LDgwNThdLFwidmFsaWRcIl0sW1s4MDU5LDgwNTldLFwibWFwcGVkXCIsWzk3M11dLFtbODA2MCw4MDYwXSxcInZhbGlkXCJdLFtbODA2MSw4MDYxXSxcIm1hcHBlZFwiLFs5NzRdXSxbWzgwNjIsODA2M10sXCJkaXNhbGxvd2VkXCJdLFtbODA2NCw4MDY0XSxcIm1hcHBlZFwiLFs3OTM2LDk1M11dLFtbODA2NSw4MDY1XSxcIm1hcHBlZFwiLFs3OTM3LDk1M11dLFtbODA2Niw4MDY2XSxcIm1hcHBlZFwiLFs3OTM4LDk1M11dLFtbODA2Nyw4MDY3XSxcIm1hcHBlZFwiLFs3OTM5LDk1M11dLFtbODA2OCw4MDY4XSxcIm1hcHBlZFwiLFs3OTQwLDk1M11dLFtbODA2OSw4MDY5XSxcIm1hcHBlZFwiLFs3OTQxLDk1M11dLFtbODA3MCw4MDcwXSxcIm1hcHBlZFwiLFs3OTQyLDk1M11dLFtbODA3MSw4MDcxXSxcIm1hcHBlZFwiLFs3OTQzLDk1M11dLFtbODA3Miw4MDcyXSxcIm1hcHBlZFwiLFs3OTM2LDk1M11dLFtbODA3Myw4MDczXSxcIm1hcHBlZFwiLFs3OTM3LDk1M11dLFtbODA3NCw4MDc0XSxcIm1hcHBlZFwiLFs3OTM4LDk1M11dLFtbODA3NSw4MDc1XSxcIm1hcHBlZFwiLFs3OTM5LDk1M11dLFtbODA3Niw4MDc2XSxcIm1hcHBlZFwiLFs3OTQwLDk1M11dLFtbODA3Nyw4MDc3XSxcIm1hcHBlZFwiLFs3OTQxLDk1M11dLFtbODA3OCw4MDc4XSxcIm1hcHBlZFwiLFs3OTQyLDk1M11dLFtbODA3OSw4MDc5XSxcIm1hcHBlZFwiLFs3OTQzLDk1M11dLFtbODA4MCw4MDgwXSxcIm1hcHBlZFwiLFs3OTY4LDk1M11dLFtbODA4MSw4MDgxXSxcIm1hcHBlZFwiLFs3OTY5LDk1M11dLFtbODA4Miw4MDgyXSxcIm1hcHBlZFwiLFs3OTcwLDk1M11dLFtbODA4Myw4MDgzXSxcIm1hcHBlZFwiLFs3OTcxLDk1M11dLFtbODA4NCw4MDg0XSxcIm1hcHBlZFwiLFs3OTcyLDk1M11dLFtbODA4NSw4MDg1XSxcIm1hcHBlZFwiLFs3OTczLDk1M11dLFtbODA4Niw4MDg2XSxcIm1hcHBlZFwiLFs3OTc0LDk1M11dLFtbODA4Nyw4MDg3XSxcIm1hcHBlZFwiLFs3OTc1LDk1M11dLFtbODA4OCw4MDg4XSxcIm1hcHBlZFwiLFs3OTY4LDk1M11dLFtbODA4OSw4MDg5XSxcIm1hcHBlZFwiLFs3OTY5LDk1M11dLFtbODA5MCw4MDkwXSxcIm1hcHBlZFwiLFs3OTcwLDk1M11dLFtbODA5MSw4MDkxXSxcIm1hcHBlZFwiLFs3OTcxLDk1M11dLFtbODA5Miw4MDkyXSxcIm1hcHBlZFwiLFs3OTcyLDk1M11dLFtbODA5Myw4MDkzXSxcIm1hcHBlZFwiLFs3OTczLDk1M11dLFtbODA5NCw4MDk0XSxcIm1hcHBlZFwiLFs3OTc0LDk1M11dLFtbODA5NSw4MDk1XSxcIm1hcHBlZFwiLFs3OTc1LDk1M11dLFtbODA5Niw4MDk2XSxcIm1hcHBlZFwiLFs4MDMyLDk1M11dLFtbODA5Nyw4MDk3XSxcIm1hcHBlZFwiLFs4MDMzLDk1M11dLFtbODA5OCw4MDk4XSxcIm1hcHBlZFwiLFs4MDM0LDk1M11dLFtbODA5OSw4MDk5XSxcIm1hcHBlZFwiLFs4MDM1LDk1M11dLFtbODEwMCw4MTAwXSxcIm1hcHBlZFwiLFs4MDM2LDk1M11dLFtbODEwMSw4MTAxXSxcIm1hcHBlZFwiLFs4MDM3LDk1M11dLFtbODEwMiw4MTAyXSxcIm1hcHBlZFwiLFs4MDM4LDk1M11dLFtbODEwMyw4MTAzXSxcIm1hcHBlZFwiLFs4MDM5LDk1M11dLFtbODEwNCw4MTA0XSxcIm1hcHBlZFwiLFs4MDMyLDk1M11dLFtbODEwNSw4MTA1XSxcIm1hcHBlZFwiLFs4MDMzLDk1M11dLFtbODEwNiw4MTA2XSxcIm1hcHBlZFwiLFs4MDM0LDk1M11dLFtbODEwNyw4MTA3XSxcIm1hcHBlZFwiLFs4MDM1LDk1M11dLFtbODEwOCw4MTA4XSxcIm1hcHBlZFwiLFs4MDM2LDk1M11dLFtbODEwOSw4MTA5XSxcIm1hcHBlZFwiLFs4MDM3LDk1M11dLFtbODExMCw4MTEwXSxcIm1hcHBlZFwiLFs4MDM4LDk1M11dLFtbODExMSw4MTExXSxcIm1hcHBlZFwiLFs4MDM5LDk1M11dLFtbODExMiw4MTEzXSxcInZhbGlkXCJdLFtbODExNCw4MTE0XSxcIm1hcHBlZFwiLFs4MDQ4LDk1M11dLFtbODExNSw4MTE1XSxcIm1hcHBlZFwiLFs5NDUsOTUzXV0sW1s4MTE2LDgxMTZdLFwibWFwcGVkXCIsWzk0MCw5NTNdXSxbWzgxMTcsODExN10sXCJkaXNhbGxvd2VkXCJdLFtbODExOCw4MTE4XSxcInZhbGlkXCJdLFtbODExOSw4MTE5XSxcIm1hcHBlZFwiLFs4MTE4LDk1M11dLFtbODEyMCw4MTIwXSxcIm1hcHBlZFwiLFs4MTEyXV0sW1s4MTIxLDgxMjFdLFwibWFwcGVkXCIsWzgxMTNdXSxbWzgxMjIsODEyMl0sXCJtYXBwZWRcIixbODA0OF1dLFtbODEyMyw4MTIzXSxcIm1hcHBlZFwiLFs5NDBdXSxbWzgxMjQsODEyNF0sXCJtYXBwZWRcIixbOTQ1LDk1M11dLFtbODEyNSw4MTI1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3XV0sW1s4MTI2LDgxMjZdLFwibWFwcGVkXCIsWzk1M11dLFtbODEyNyw4MTI3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3XV0sW1s4MTI4LDgxMjhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw4MzRdXSxbWzgxMjksODEyOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Niw4MzRdXSxbWzgxMzAsODEzMF0sXCJtYXBwZWRcIixbODA1Miw5NTNdXSxbWzgxMzEsODEzMV0sXCJtYXBwZWRcIixbOTUxLDk1M11dLFtbODEzMiw4MTMyXSxcIm1hcHBlZFwiLFs5NDIsOTUzXV0sW1s4MTMzLDgxMzNdLFwiZGlzYWxsb3dlZFwiXSxbWzgxMzQsODEzNF0sXCJ2YWxpZFwiXSxbWzgxMzUsODEzNV0sXCJtYXBwZWRcIixbODEzNCw5NTNdXSxbWzgxMzYsODEzNl0sXCJtYXBwZWRcIixbODA1MF1dLFtbODEzNyw4MTM3XSxcIm1hcHBlZFwiLFs5NDFdXSxbWzgxMzgsODEzOF0sXCJtYXBwZWRcIixbODA1Ml1dLFtbODEzOSw4MTM5XSxcIm1hcHBlZFwiLFs5NDJdXSxbWzgxNDAsODE0MF0sXCJtYXBwZWRcIixbOTUxLDk1M11dLFtbODE0MSw4MTQxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3LDc2OF1dLFtbODE0Miw4MTQyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3LDc2OV1dLFtbODE0Myw4MTQzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3LDgzNF1dLFtbODE0NCw4MTQ2XSxcInZhbGlkXCJdLFtbODE0Nyw4MTQ3XSxcIm1hcHBlZFwiLFs5MTJdXSxbWzgxNDgsODE0OV0sXCJkaXNhbGxvd2VkXCJdLFtbODE1MCw4MTUxXSxcInZhbGlkXCJdLFtbODE1Miw4MTUyXSxcIm1hcHBlZFwiLFs4MTQ0XV0sW1s4MTUzLDgxNTNdLFwibWFwcGVkXCIsWzgxNDVdXSxbWzgxNTQsODE1NF0sXCJtYXBwZWRcIixbODA1NF1dLFtbODE1NSw4MTU1XSxcIm1hcHBlZFwiLFs5NDNdXSxbWzgxNTYsODE1Nl0sXCJkaXNhbGxvd2VkXCJdLFtbODE1Nyw4MTU3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg4LDc2OF1dLFtbODE1OCw4MTU4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg4LDc2OV1dLFtbODE1OSw4MTU5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg4LDgzNF1dLFtbODE2MCw4MTYyXSxcInZhbGlkXCJdLFtbODE2Myw4MTYzXSxcIm1hcHBlZFwiLFs5NDRdXSxbWzgxNjQsODE2N10sXCJ2YWxpZFwiXSxbWzgxNjgsODE2OF0sXCJtYXBwZWRcIixbODE2MF1dLFtbODE2OSw4MTY5XSxcIm1hcHBlZFwiLFs4MTYxXV0sW1s4MTcwLDgxNzBdLFwibWFwcGVkXCIsWzgwNThdXSxbWzgxNzEsODE3MV0sXCJtYXBwZWRcIixbOTczXV0sW1s4MTcyLDgxNzJdLFwibWFwcGVkXCIsWzgxNjVdXSxbWzgxNzMsODE3M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Niw3NjhdXSxbWzgxNzQsODE3NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Niw3NjldXSxbWzgxNzUsODE3NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzk2XV0sW1s4MTc2LDgxNzddLFwiZGlzYWxsb3dlZFwiXSxbWzgxNzgsODE3OF0sXCJtYXBwZWRcIixbODA2MCw5NTNdXSxbWzgxNzksODE3OV0sXCJtYXBwZWRcIixbOTY5LDk1M11dLFtbODE4MCw4MTgwXSxcIm1hcHBlZFwiLFs5NzQsOTUzXV0sW1s4MTgxLDgxODFdLFwiZGlzYWxsb3dlZFwiXSxbWzgxODIsODE4Ml0sXCJ2YWxpZFwiXSxbWzgxODMsODE4M10sXCJtYXBwZWRcIixbODE4Miw5NTNdXSxbWzgxODQsODE4NF0sXCJtYXBwZWRcIixbODA1Nl1dLFtbODE4NSw4MTg1XSxcIm1hcHBlZFwiLFs5NzJdXSxbWzgxODYsODE4Nl0sXCJtYXBwZWRcIixbODA2MF1dLFtbODE4Nyw4MTg3XSxcIm1hcHBlZFwiLFs5NzRdXSxbWzgxODgsODE4OF0sXCJtYXBwZWRcIixbOTY5LDk1M11dLFtbODE4OSw4MTg5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzY5XV0sW1s4MTkwLDgxOTBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODhdXSxbWzgxOTEsODE5MV0sXCJkaXNhbGxvd2VkXCJdLFtbODE5Miw4MjAyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzJdXSxbWzgyMDMsODIwM10sXCJpZ25vcmVkXCJdLFtbODIwNCw4MjA1XSxcImRldmlhdGlvblwiLFtdXSxbWzgyMDYsODIwN10sXCJkaXNhbGxvd2VkXCJdLFtbODIwOCw4MjA4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MjA5LDgyMDldLFwibWFwcGVkXCIsWzgyMDhdXSxbWzgyMTAsODIxNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODIxNSw4MjE1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsODE5XV0sW1s4MjE2LDgyMjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyMjgsODIzMF0sXCJkaXNhbGxvd2VkXCJdLFtbODIzMSw4MjMxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MjMyLDgyMzhdLFwiZGlzYWxsb3dlZFwiXSxbWzgyMzksODIzOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyXV0sW1s4MjQwLDgyNDJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNDMsODI0M10sXCJtYXBwZWRcIixbODI0Miw4MjQyXV0sW1s4MjQ0LDgyNDRdLFwibWFwcGVkXCIsWzgyNDIsODI0Miw4MjQyXV0sW1s4MjQ1LDgyNDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNDYsODI0Nl0sXCJtYXBwZWRcIixbODI0NSw4MjQ1XV0sW1s4MjQ3LDgyNDddLFwibWFwcGVkXCIsWzgyNDUsODI0NSw4MjQ1XV0sW1s4MjQ4LDgyNTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNTIsODI1Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMzLDMzXV0sW1s4MjUzLDgyNTNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNTQsODI1NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3M11dLFtbODI1NSw4MjYyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MjYzLDgyNjNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2Myw2M11dLFtbODI2NCw4MjY0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjMsMzNdXSxbWzgyNjUsODI2NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMzLDYzXV0sW1s4MjY2LDgyNjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNzAsODI3NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODI3NSw4Mjc2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4Mjc3LDgyNzhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNzksODI3OV0sXCJtYXBwZWRcIixbODI0Miw4MjQyLDgyNDIsODI0Ml1dLFtbODI4MCw4Mjg2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4Mjg3LDgyODddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMl1dLFtbODI4OCw4Mjg4XSxcImlnbm9yZWRcIl0sW1s4Mjg5LDgyOTFdLFwiZGlzYWxsb3dlZFwiXSxbWzgyOTIsODI5Ml0sXCJpZ25vcmVkXCJdLFtbODI5Myw4MjkzXSxcImRpc2FsbG93ZWRcIl0sW1s4Mjk0LDgyOTddLFwiZGlzYWxsb3dlZFwiXSxbWzgyOTgsODMwM10sXCJkaXNhbGxvd2VkXCJdLFtbODMwNCw4MzA0XSxcIm1hcHBlZFwiLFs0OF1dLFtbODMwNSw4MzA1XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzgzMDYsODMwN10sXCJkaXNhbGxvd2VkXCJdLFtbODMwOCw4MzA4XSxcIm1hcHBlZFwiLFs1Ml1dLFtbODMwOSw4MzA5XSxcIm1hcHBlZFwiLFs1M11dLFtbODMxMCw4MzEwXSxcIm1hcHBlZFwiLFs1NF1dLFtbODMxMSw4MzExXSxcIm1hcHBlZFwiLFs1NV1dLFtbODMxMiw4MzEyXSxcIm1hcHBlZFwiLFs1Nl1dLFtbODMxMyw4MzEzXSxcIm1hcHBlZFwiLFs1N11dLFtbODMxNCw4MzE0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDNdXSxbWzgzMTUsODMxNV0sXCJtYXBwZWRcIixbODcyMl1dLFtbODMxNiw4MzE2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjFdXSxbWzgzMTcsODMxN10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwXV0sW1s4MzE4LDgzMThdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MV1dLFtbODMxOSw4MzE5XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzgzMjAsODMyMF0sXCJtYXBwZWRcIixbNDhdXSxbWzgzMjEsODMyMV0sXCJtYXBwZWRcIixbNDldXSxbWzgzMjIsODMyMl0sXCJtYXBwZWRcIixbNTBdXSxbWzgzMjMsODMyM10sXCJtYXBwZWRcIixbNTFdXSxbWzgzMjQsODMyNF0sXCJtYXBwZWRcIixbNTJdXSxbWzgzMjUsODMyNV0sXCJtYXBwZWRcIixbNTNdXSxbWzgzMjYsODMyNl0sXCJtYXBwZWRcIixbNTRdXSxbWzgzMjcsODMyN10sXCJtYXBwZWRcIixbNTVdXSxbWzgzMjgsODMyOF0sXCJtYXBwZWRcIixbNTZdXSxbWzgzMjksODMyOV0sXCJtYXBwZWRcIixbNTddXSxbWzgzMzAsODMzMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQzXV0sW1s4MzMxLDgzMzFdLFwibWFwcGVkXCIsWzg3MjJdXSxbWzgzMzIsODMzMl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzYxXV0sW1s4MzMzLDgzMzNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MF1dLFtbODMzNCw4MzM0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDFdXSxbWzgzMzUsODMzNV0sXCJkaXNhbGxvd2VkXCJdLFtbODMzNiw4MzM2XSxcIm1hcHBlZFwiLFs5N11dLFtbODMzNyw4MzM3XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzgzMzgsODMzOF0sXCJtYXBwZWRcIixbMTExXV0sW1s4MzM5LDgzMzldLFwibWFwcGVkXCIsWzEyMF1dLFtbODM0MCw4MzQwXSxcIm1hcHBlZFwiLFs2MDFdXSxbWzgzNDEsODM0MV0sXCJtYXBwZWRcIixbMTA0XV0sW1s4MzQyLDgzNDJdLFwibWFwcGVkXCIsWzEwN11dLFtbODM0Myw4MzQzXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzgzNDQsODM0NF0sXCJtYXBwZWRcIixbMTA5XV0sW1s4MzQ1LDgzNDVdLFwibWFwcGVkXCIsWzExMF1dLFtbODM0Niw4MzQ2XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzgzNDcsODM0N10sXCJtYXBwZWRcIixbMTE1XV0sW1s4MzQ4LDgzNDhdLFwibWFwcGVkXCIsWzExNl1dLFtbODM0OSw4MzUxXSxcImRpc2FsbG93ZWRcIl0sW1s4MzUyLDgzNTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNjAsODM2MF0sXCJtYXBwZWRcIixbMTE0LDExNV1dLFtbODM2MSw4MzYyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MzYzLDgzNjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNjQsODM2NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM2NSw4MzY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MzY4LDgzNjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNzAsODM3M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM3NCw4Mzc2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4Mzc3LDgzNzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNzgsODM3OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM3OSw4MzgxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MzgyLDgzODJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzODMsODM5OV0sXCJkaXNhbGxvd2VkXCJdLFtbODQwMCw4NDE3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDE4LDg0MTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0MjAsODQyNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQyNyw4NDI3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDI4LDg0MzFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0MzIsODQzMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQzMyw4NDQ3XSxcImRpc2FsbG93ZWRcIl0sW1s4NDQ4LDg0NDhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5Nyw0Nyw5OV1dLFtbODQ0OSw4NDQ5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTcsNDcsMTE1XV0sW1s4NDUwLDg0NTBdLFwibWFwcGVkXCIsWzk5XV0sW1s4NDUxLDg0NTFdLFwibWFwcGVkXCIsWzE3Niw5OV1dLFtbODQ1Miw4NDUyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDUzLDg0NTNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5OSw0NywxMTFdXSxbWzg0NTQsODQ1NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzk5LDQ3LDExN11dLFtbODQ1NSw4NDU1XSxcIm1hcHBlZFwiLFs2MDNdXSxbWzg0NTYsODQ1Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQ1Nyw4NDU3XSxcIm1hcHBlZFwiLFsxNzYsMTAyXV0sW1s4NDU4LDg0NThdLFwibWFwcGVkXCIsWzEwM11dLFtbODQ1OSw4NDYyXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzg0NjMsODQ2M10sXCJtYXBwZWRcIixbMjk1XV0sW1s4NDY0LDg0NjVdLFwibWFwcGVkXCIsWzEwNV1dLFtbODQ2Niw4NDY3XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzg0NjgsODQ2OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQ2OSw4NDY5XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzg0NzAsODQ3MF0sXCJtYXBwZWRcIixbMTEwLDExMV1dLFtbODQ3MSw4NDcyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDczLDg0NzNdLFwibWFwcGVkXCIsWzExMl1dLFtbODQ3NCw4NDc0XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzg0NzUsODQ3N10sXCJtYXBwZWRcIixbMTE0XV0sW1s4NDc4LDg0NzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0ODAsODQ4MF0sXCJtYXBwZWRcIixbMTE1LDEwOV1dLFtbODQ4MSw4NDgxXSxcIm1hcHBlZFwiLFsxMTYsMTAxLDEwOF1dLFtbODQ4Miw4NDgyXSxcIm1hcHBlZFwiLFsxMTYsMTA5XV0sW1s4NDgzLDg0ODNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0ODQsODQ4NF0sXCJtYXBwZWRcIixbMTIyXV0sW1s4NDg1LDg0ODVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0ODYsODQ4Nl0sXCJtYXBwZWRcIixbOTY5XV0sW1s4NDg3LDg0ODddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0ODgsODQ4OF0sXCJtYXBwZWRcIixbMTIyXV0sW1s4NDg5LDg0ODldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0OTAsODQ5MF0sXCJtYXBwZWRcIixbMTA3XV0sW1s4NDkxLDg0OTFdLFwibWFwcGVkXCIsWzIyOV1dLFtbODQ5Miw4NDkyXSxcIm1hcHBlZFwiLFs5OF1dLFtbODQ5Myw4NDkzXSxcIm1hcHBlZFwiLFs5OV1dLFtbODQ5NCw4NDk0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDk1LDg0OTZdLFwibWFwcGVkXCIsWzEwMV1dLFtbODQ5Nyw4NDk3XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzg0OTgsODQ5OF0sXCJkaXNhbGxvd2VkXCJdLFtbODQ5OSw4NDk5XSxcIm1hcHBlZFwiLFsxMDldXSxbWzg1MDAsODUwMF0sXCJtYXBwZWRcIixbMTExXV0sW1s4NTAxLDg1MDFdLFwibWFwcGVkXCIsWzE0ODhdXSxbWzg1MDIsODUwMl0sXCJtYXBwZWRcIixbMTQ4OV1dLFtbODUwMyw4NTAzXSxcIm1hcHBlZFwiLFsxNDkwXV0sW1s4NTA0LDg1MDRdLFwibWFwcGVkXCIsWzE0OTFdXSxbWzg1MDUsODUwNV0sXCJtYXBwZWRcIixbMTA1XV0sW1s4NTA2LDg1MDZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1MDcsODUwN10sXCJtYXBwZWRcIixbMTAyLDk3LDEyMF1dLFtbODUwOCw4NTA4XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzg1MDksODUxMF0sXCJtYXBwZWRcIixbOTQ3XV0sW1s4NTExLDg1MTFdLFwibWFwcGVkXCIsWzk2MF1dLFtbODUxMiw4NTEyXSxcIm1hcHBlZFwiLFs4NzIxXV0sW1s4NTEzLDg1MTZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1MTcsODUxOF0sXCJtYXBwZWRcIixbMTAwXV0sW1s4NTE5LDg1MTldLFwibWFwcGVkXCIsWzEwMV1dLFtbODUyMCw4NTIwXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzg1MjEsODUyMV0sXCJtYXBwZWRcIixbMTA2XV0sW1s4NTIyLDg1MjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1MjQsODUyNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODUyNSw4NTI1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NTI2LDg1MjZdLFwidmFsaWRcIl0sW1s4NTI3LDg1MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1MjgsODUyOF0sXCJtYXBwZWRcIixbNDksODI2MCw1NV1dLFtbODUyOSw4NTI5XSxcIm1hcHBlZFwiLFs0OSw4MjYwLDU3XV0sW1s4NTMwLDg1MzBdLFwibWFwcGVkXCIsWzQ5LDgyNjAsNDksNDhdXSxbWzg1MzEsODUzMV0sXCJtYXBwZWRcIixbNDksODI2MCw1MV1dLFtbODUzMiw4NTMyXSxcIm1hcHBlZFwiLFs1MCw4MjYwLDUxXV0sW1s4NTMzLDg1MzNdLFwibWFwcGVkXCIsWzQ5LDgyNjAsNTNdXSxbWzg1MzQsODUzNF0sXCJtYXBwZWRcIixbNTAsODI2MCw1M11dLFtbODUzNSw4NTM1XSxcIm1hcHBlZFwiLFs1MSw4MjYwLDUzXV0sW1s4NTM2LDg1MzZdLFwibWFwcGVkXCIsWzUyLDgyNjAsNTNdXSxbWzg1MzcsODUzN10sXCJtYXBwZWRcIixbNDksODI2MCw1NF1dLFtbODUzOCw4NTM4XSxcIm1hcHBlZFwiLFs1Myw4MjYwLDU0XV0sW1s4NTM5LDg1MzldLFwibWFwcGVkXCIsWzQ5LDgyNjAsNTZdXSxbWzg1NDAsODU0MF0sXCJtYXBwZWRcIixbNTEsODI2MCw1Nl1dLFtbODU0MSw4NTQxXSxcIm1hcHBlZFwiLFs1Myw4MjYwLDU2XV0sW1s4NTQyLDg1NDJdLFwibWFwcGVkXCIsWzU1LDgyNjAsNTZdXSxbWzg1NDMsODU0M10sXCJtYXBwZWRcIixbNDksODI2MF1dLFtbODU0NCw4NTQ0XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzg1NDUsODU0NV0sXCJtYXBwZWRcIixbMTA1LDEwNV1dLFtbODU0Niw4NTQ2XSxcIm1hcHBlZFwiLFsxMDUsMTA1LDEwNV1dLFtbODU0Nyw4NTQ3XSxcIm1hcHBlZFwiLFsxMDUsMTE4XV0sW1s4NTQ4LDg1NDhdLFwibWFwcGVkXCIsWzExOF1dLFtbODU0OSw4NTQ5XSxcIm1hcHBlZFwiLFsxMTgsMTA1XV0sW1s4NTUwLDg1NTBdLFwibWFwcGVkXCIsWzExOCwxMDUsMTA1XV0sW1s4NTUxLDg1NTFdLFwibWFwcGVkXCIsWzExOCwxMDUsMTA1LDEwNV1dLFtbODU1Miw4NTUyXSxcIm1hcHBlZFwiLFsxMDUsMTIwXV0sW1s4NTUzLDg1NTNdLFwibWFwcGVkXCIsWzEyMF1dLFtbODU1NCw4NTU0XSxcIm1hcHBlZFwiLFsxMjAsMTA1XV0sW1s4NTU1LDg1NTVdLFwibWFwcGVkXCIsWzEyMCwxMDUsMTA1XV0sW1s4NTU2LDg1NTZdLFwibWFwcGVkXCIsWzEwOF1dLFtbODU1Nyw4NTU3XSxcIm1hcHBlZFwiLFs5OV1dLFtbODU1OCw4NTU4XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzg1NTksODU1OV0sXCJtYXBwZWRcIixbMTA5XV0sW1s4NTYwLDg1NjBdLFwibWFwcGVkXCIsWzEwNV1dLFtbODU2MSw4NTYxXSxcIm1hcHBlZFwiLFsxMDUsMTA1XV0sW1s4NTYyLDg1NjJdLFwibWFwcGVkXCIsWzEwNSwxMDUsMTA1XV0sW1s4NTYzLDg1NjNdLFwibWFwcGVkXCIsWzEwNSwxMThdXSxbWzg1NjQsODU2NF0sXCJtYXBwZWRcIixbMTE4XV0sW1s4NTY1LDg1NjVdLFwibWFwcGVkXCIsWzExOCwxMDVdXSxbWzg1NjYsODU2Nl0sXCJtYXBwZWRcIixbMTE4LDEwNSwxMDVdXSxbWzg1NjcsODU2N10sXCJtYXBwZWRcIixbMTE4LDEwNSwxMDUsMTA1XV0sW1s4NTY4LDg1NjhdLFwibWFwcGVkXCIsWzEwNSwxMjBdXSxbWzg1NjksODU2OV0sXCJtYXBwZWRcIixbMTIwXV0sW1s4NTcwLDg1NzBdLFwibWFwcGVkXCIsWzEyMCwxMDVdXSxbWzg1NzEsODU3MV0sXCJtYXBwZWRcIixbMTIwLDEwNSwxMDVdXSxbWzg1NzIsODU3Ml0sXCJtYXBwZWRcIixbMTA4XV0sW1s4NTczLDg1NzNdLFwibWFwcGVkXCIsWzk5XV0sW1s4NTc0LDg1NzRdLFwibWFwcGVkXCIsWzEwMF1dLFtbODU3NSw4NTc1XSxcIm1hcHBlZFwiLFsxMDldXSxbWzg1NzYsODU3OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODU3OSw4NTc5XSxcImRpc2FsbG93ZWRcIl0sW1s4NTgwLDg1ODBdLFwidmFsaWRcIl0sW1s4NTgxLDg1ODRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1ODUsODU4NV0sXCJtYXBwZWRcIixbNDgsODI2MCw1MV1dLFtbODU4Niw4NTg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NTg4LDg1OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzg1OTIsODY4Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODY4Myw4NjkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NjkyLDg3MDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg3MDQsODc0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODc0OCw4NzQ4XSxcIm1hcHBlZFwiLFs4NzQ3LDg3NDddXSxbWzg3NDksODc0OV0sXCJtYXBwZWRcIixbODc0Nyw4NzQ3LDg3NDddXSxbWzg3NTAsODc1MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODc1MSw4NzUxXSxcIm1hcHBlZFwiLFs4NzUwLDg3NTBdXSxbWzg3NTIsODc1Ml0sXCJtYXBwZWRcIixbODc1MCw4NzUwLDg3NTBdXSxbWzg3NTMsODc5OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODgwMCw4ODAwXSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzg4MDEsODgxM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODgxNCw4ODE1XSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzg4MTYsODk0NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODk0Niw4OTU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4OTYwLDg5NjBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg5NjEsODk2MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODk2Miw5MDAwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MDAxLDkwMDFdLFwibWFwcGVkXCIsWzEyMjk2XV0sW1s5MDAyLDkwMDJdLFwibWFwcGVkXCIsWzEyMjk3XV0sW1s5MDAzLDkwODJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkwODMsOTA4M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTA4NCw5MDg0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MDg1LDkxMTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkxMTUsOTE2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTE2Nyw5MTY4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MTY5LDkxNzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkxODAsOTE5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTE5Miw5MTkyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MTkzLDkyMDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyMDQsOTIxMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTIxMSw5MjE1XSxcImRpc2FsbG93ZWRcIl0sW1s5MjE2LDkyNTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyNTMsOTI1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTI1NSw5Mjc5XSxcImRpc2FsbG93ZWRcIl0sW1s5MjgwLDkyOTBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyOTEsOTMxMV0sXCJkaXNhbGxvd2VkXCJdLFtbOTMxMiw5MzEyXSxcIm1hcHBlZFwiLFs0OV1dLFtbOTMxMyw5MzEzXSxcIm1hcHBlZFwiLFs1MF1dLFtbOTMxNCw5MzE0XSxcIm1hcHBlZFwiLFs1MV1dLFtbOTMxNSw5MzE1XSxcIm1hcHBlZFwiLFs1Ml1dLFtbOTMxNiw5MzE2XSxcIm1hcHBlZFwiLFs1M11dLFtbOTMxNyw5MzE3XSxcIm1hcHBlZFwiLFs1NF1dLFtbOTMxOCw5MzE4XSxcIm1hcHBlZFwiLFs1NV1dLFtbOTMxOSw5MzE5XSxcIm1hcHBlZFwiLFs1Nl1dLFtbOTMyMCw5MzIwXSxcIm1hcHBlZFwiLFs1N11dLFtbOTMyMSw5MzIxXSxcIm1hcHBlZFwiLFs0OSw0OF1dLFtbOTMyMiw5MzIyXSxcIm1hcHBlZFwiLFs0OSw0OV1dLFtbOTMyMyw5MzIzXSxcIm1hcHBlZFwiLFs0OSw1MF1dLFtbOTMyNCw5MzI0XSxcIm1hcHBlZFwiLFs0OSw1MV1dLFtbOTMyNSw5MzI1XSxcIm1hcHBlZFwiLFs0OSw1Ml1dLFtbOTMyNiw5MzI2XSxcIm1hcHBlZFwiLFs0OSw1M11dLFtbOTMyNyw5MzI3XSxcIm1hcHBlZFwiLFs0OSw1NF1dLFtbOTMyOCw5MzI4XSxcIm1hcHBlZFwiLFs0OSw1NV1dLFtbOTMyOSw5MzI5XSxcIm1hcHBlZFwiLFs0OSw1Nl1dLFtbOTMzMCw5MzMwXSxcIm1hcHBlZFwiLFs0OSw1N11dLFtbOTMzMSw5MzMxXSxcIm1hcHBlZFwiLFs1MCw0OF1dLFtbOTMzMiw5MzMyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNDFdXSxbWzkzMzMsOTMzM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDUwLDQxXV0sW1s5MzM0LDkzMzRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1MSw0MV1dLFtbOTMzNSw5MzM1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTIsNDFdXSxbWzkzMzYsOTMzNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDUzLDQxXV0sW1s5MzM3LDkzMzddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1NCw0MV1dLFtbOTMzOCw5MzM4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTUsNDFdXSxbWzkzMzksOTMzOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDU2LDQxXV0sW1s5MzQwLDkzNDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1Nyw0MV1dLFtbOTM0MSw5MzQxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNDgsNDFdXSxbWzkzNDIsOTM0Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQ5LDQ5LDQxXV0sW1s5MzQzLDkzNDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw1MCw0MV1dLFtbOTM0NCw5MzQ0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNTEsNDFdXSxbWzkzNDUsOTM0NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQ5LDUyLDQxXV0sW1s5MzQ2LDkzNDZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw1Myw0MV1dLFtbOTM0Nyw5MzQ3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNTQsNDFdXSxbWzkzNDgsOTM0OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQ5LDU1LDQxXV0sW1s5MzQ5LDkzNDldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw1Niw0MV1dLFtbOTM1MCw5MzUwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNTcsNDFdXSxbWzkzNTEsOTM1MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDUwLDQ4LDQxXV0sW1s5MzUyLDkzNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzkzNzIsOTM3Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDk3LDQxXV0sW1s5MzczLDkzNzNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw5OCw0MV1dLFtbOTM3NCw5Mzc0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsOTksNDFdXSxbWzkzNzUsOTM3NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwMCw0MV1dLFtbOTM3Niw5Mzc2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAxLDQxXV0sW1s5Mzc3LDkzNzddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDIsNDFdXSxbWzkzNzgsOTM3OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwMyw0MV1dLFtbOTM3OSw5Mzc5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA0LDQxXV0sW1s5MzgwLDkzODBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDUsNDFdXSxbWzkzODEsOTM4MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwNiw0MV1dLFtbOTM4Miw5MzgyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA3LDQxXV0sW1s5MzgzLDkzODNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDgsNDFdXSxbWzkzODQsOTM4NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwOSw0MV1dLFtbOTM4NSw5Mzg1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEwLDQxXV0sW1s5Mzg2LDkzODZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTEsNDFdXSxbWzkzODcsOTM4N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDExMiw0MV1dLFtbOTM4OCw5Mzg4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEzLDQxXV0sW1s5Mzg5LDkzODldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTQsNDFdXSxbWzkzOTAsOTM5MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDExNSw0MV1dLFtbOTM5MSw5MzkxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE2LDQxXV0sW1s5MzkyLDkzOTJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTcsNDFdXSxbWzkzOTMsOTM5M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDExOCw0MV1dLFtbOTM5NCw5Mzk0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE5LDQxXV0sW1s5Mzk1LDkzOTVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMjAsNDFdXSxbWzkzOTYsOTM5Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEyMSw0MV1dLFtbOTM5Nyw5Mzk3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTIyLDQxXV0sW1s5Mzk4LDkzOThdLFwibWFwcGVkXCIsWzk3XV0sW1s5Mzk5LDkzOTldLFwibWFwcGVkXCIsWzk4XV0sW1s5NDAwLDk0MDBdLFwibWFwcGVkXCIsWzk5XV0sW1s5NDAxLDk0MDFdLFwibWFwcGVkXCIsWzEwMF1dLFtbOTQwMiw5NDAyXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzk0MDMsOTQwM10sXCJtYXBwZWRcIixbMTAyXV0sW1s5NDA0LDk0MDRdLFwibWFwcGVkXCIsWzEwM11dLFtbOTQwNSw5NDA1XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzk0MDYsOTQwNl0sXCJtYXBwZWRcIixbMTA1XV0sW1s5NDA3LDk0MDddLFwibWFwcGVkXCIsWzEwNl1dLFtbOTQwOCw5NDA4XSxcIm1hcHBlZFwiLFsxMDddXSxbWzk0MDksOTQwOV0sXCJtYXBwZWRcIixbMTA4XV0sW1s5NDEwLDk0MTBdLFwibWFwcGVkXCIsWzEwOV1dLFtbOTQxMSw5NDExXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzk0MTIsOTQxMl0sXCJtYXBwZWRcIixbMTExXV0sW1s5NDEzLDk0MTNdLFwibWFwcGVkXCIsWzExMl1dLFtbOTQxNCw5NDE0XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzk0MTUsOTQxNV0sXCJtYXBwZWRcIixbMTE0XV0sW1s5NDE2LDk0MTZdLFwibWFwcGVkXCIsWzExNV1dLFtbOTQxNyw5NDE3XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzk0MTgsOTQxOF0sXCJtYXBwZWRcIixbMTE3XV0sW1s5NDE5LDk0MTldLFwibWFwcGVkXCIsWzExOF1dLFtbOTQyMCw5NDIwXSxcIm1hcHBlZFwiLFsxMTldXSxbWzk0MjEsOTQyMV0sXCJtYXBwZWRcIixbMTIwXV0sW1s5NDIyLDk0MjJdLFwibWFwcGVkXCIsWzEyMV1dLFtbOTQyMyw5NDIzXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzk0MjQsOTQyNF0sXCJtYXBwZWRcIixbOTddXSxbWzk0MjUsOTQyNV0sXCJtYXBwZWRcIixbOThdXSxbWzk0MjYsOTQyNl0sXCJtYXBwZWRcIixbOTldXSxbWzk0MjcsOTQyN10sXCJtYXBwZWRcIixbMTAwXV0sW1s5NDI4LDk0MjhdLFwibWFwcGVkXCIsWzEwMV1dLFtbOTQyOSw5NDI5XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzk0MzAsOTQzMF0sXCJtYXBwZWRcIixbMTAzXV0sW1s5NDMxLDk0MzFdLFwibWFwcGVkXCIsWzEwNF1dLFtbOTQzMiw5NDMyXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzk0MzMsOTQzM10sXCJtYXBwZWRcIixbMTA2XV0sW1s5NDM0LDk0MzRdLFwibWFwcGVkXCIsWzEwN11dLFtbOTQzNSw5NDM1XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzk0MzYsOTQzNl0sXCJtYXBwZWRcIixbMTA5XV0sW1s5NDM3LDk0MzddLFwibWFwcGVkXCIsWzExMF1dLFtbOTQzOCw5NDM4XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzk0MzksOTQzOV0sXCJtYXBwZWRcIixbMTEyXV0sW1s5NDQwLDk0NDBdLFwibWFwcGVkXCIsWzExM11dLFtbOTQ0MSw5NDQxXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzk0NDIsOTQ0Ml0sXCJtYXBwZWRcIixbMTE1XV0sW1s5NDQzLDk0NDNdLFwibWFwcGVkXCIsWzExNl1dLFtbOTQ0NCw5NDQ0XSxcIm1hcHBlZFwiLFsxMTddXSxbWzk0NDUsOTQ0NV0sXCJtYXBwZWRcIixbMTE4XV0sW1s5NDQ2LDk0NDZdLFwibWFwcGVkXCIsWzExOV1dLFtbOTQ0Nyw5NDQ3XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzk0NDgsOTQ0OF0sXCJtYXBwZWRcIixbMTIxXV0sW1s5NDQ5LDk0NDldLFwibWFwcGVkXCIsWzEyMl1dLFtbOTQ1MCw5NDUwXSxcIm1hcHBlZFwiLFs0OF1dLFtbOTQ1MSw5NDcwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NDcxLDk0NzFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk0NzIsOTYyMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTYyMiw5NjMxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NjMyLDk3MTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk3MTIsOTcxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTcyMCw5NzI3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NzI4LDk3NDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk3NDgsOTc0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTc1MCw5NzUxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NzUyLDk3NTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk3NTMsOTc1M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTc1NCw5ODM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODQwLDk4NDFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4NDIsOTg1M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTg1NCw5ODU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODU2LDk4NjVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4NjYsOTg3M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTg3NCw5ODg0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODg1LDk4ODVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4ODYsOTg4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTg4OCw5ODg5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODkwLDk5MDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5MDYsOTkwNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTkwNyw5OTE2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTE3LDk5MTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5MjAsOTkyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTkyNCw5OTMzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTM0LDk5MzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5MzUsOTk1M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk1NCw5OTU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTU1LDk5NTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5NTYsOTk1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk2MCw5OTgzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTg0LDk5ODRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5ODUsOTk4OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk4OSw5OTg5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTkwLDk5OTNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5OTQsOTk5NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk5NiwxMDAyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwMjQsMTAwMjRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDI1LDEwMDU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA2MCwxMDA2MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwNjEsMTAwNjFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDYyLDEwMDYyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA2MywxMDA2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwNjcsMTAwNjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDcwLDEwMDcwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA3MSwxMDA3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwNzIsMTAwNzhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDc5LDEwMDgwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA4MSwxMDA4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwODgsMTAxMDFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTAyLDEwMTMyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDEzMywxMDEzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxMzYsMTAxNTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTYwLDEwMTYwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDE2MSwxMDE3NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxNzUsMTAxNzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTc2LDEwMTgyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDE4MywxMDE4Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxODcsMTAxODddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTg4LDEwMTg4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDE4OSwxMDE4OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxOTAsMTAxOTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTkyLDEwMjE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDIyMCwxMDIyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAyMjQsMTAyMzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMjQwLDEwNDk1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDQ5NiwxMDc2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTA3NjQsMTA3NjRdLFwibWFwcGVkXCIsWzg3NDcsODc0Nyw4NzQ3LDg3NDddXSxbWzEwNzY1LDEwODY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDg2OCwxMDg2OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU4LDU4LDYxXV0sW1sxMDg2OSwxMDg2OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzYxLDYxXV0sW1sxMDg3MCwxMDg3MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzYxLDYxLDYxXV0sW1sxMDg3MSwxMDk3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTA5NzIsMTA5NzJdLFwibWFwcGVkXCIsWzEwOTczLDgyNF1dLFtbMTA5NzMsMTEwMDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDA4LDExMDIxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTAyMiwxMTAyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwMjgsMTEwMzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDM1LDExMDM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTA0MCwxMTA0M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwNDQsMTEwODRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDg1LDExMDg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTA4OCwxMTA5Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwOTMsMTEwOTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDk4LDExMTIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTEyNCwxMTEyNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTExMjYsMTExNTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMTU4LDExMTU5XSxcImRpc2FsbG93ZWRcIl0sW1sxMTE2MCwxMTE5M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTExOTQsMTExOTZdLFwiZGlzYWxsb3dlZFwiXSxbWzExMTk3LDExMjA4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTIwOSwxMTIwOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTEyMTAsMTEyMTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMjE4LDExMjQzXSxcImRpc2FsbG93ZWRcIl0sW1sxMTI0NCwxMTI0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEyNDgsMTEyNjNdLFwiZGlzYWxsb3dlZFwiXSxbWzExMjY0LDExMjY0XSxcIm1hcHBlZFwiLFsxMTMxMl1dLFtbMTEyNjUsMTEyNjVdLFwibWFwcGVkXCIsWzExMzEzXV0sW1sxMTI2NiwxMTI2Nl0sXCJtYXBwZWRcIixbMTEzMTRdXSxbWzExMjY3LDExMjY3XSxcIm1hcHBlZFwiLFsxMTMxNV1dLFtbMTEyNjgsMTEyNjhdLFwibWFwcGVkXCIsWzExMzE2XV0sW1sxMTI2OSwxMTI2OV0sXCJtYXBwZWRcIixbMTEzMTddXSxbWzExMjcwLDExMjcwXSxcIm1hcHBlZFwiLFsxMTMxOF1dLFtbMTEyNzEsMTEyNzFdLFwibWFwcGVkXCIsWzExMzE5XV0sW1sxMTI3MiwxMTI3Ml0sXCJtYXBwZWRcIixbMTEzMjBdXSxbWzExMjczLDExMjczXSxcIm1hcHBlZFwiLFsxMTMyMV1dLFtbMTEyNzQsMTEyNzRdLFwibWFwcGVkXCIsWzExMzIyXV0sW1sxMTI3NSwxMTI3NV0sXCJtYXBwZWRcIixbMTEzMjNdXSxbWzExMjc2LDExMjc2XSxcIm1hcHBlZFwiLFsxMTMyNF1dLFtbMTEyNzcsMTEyNzddLFwibWFwcGVkXCIsWzExMzI1XV0sW1sxMTI3OCwxMTI3OF0sXCJtYXBwZWRcIixbMTEzMjZdXSxbWzExMjc5LDExMjc5XSxcIm1hcHBlZFwiLFsxMTMyN11dLFtbMTEyODAsMTEyODBdLFwibWFwcGVkXCIsWzExMzI4XV0sW1sxMTI4MSwxMTI4MV0sXCJtYXBwZWRcIixbMTEzMjldXSxbWzExMjgyLDExMjgyXSxcIm1hcHBlZFwiLFsxMTMzMF1dLFtbMTEyODMsMTEyODNdLFwibWFwcGVkXCIsWzExMzMxXV0sW1sxMTI4NCwxMTI4NF0sXCJtYXBwZWRcIixbMTEzMzJdXSxbWzExMjg1LDExMjg1XSxcIm1hcHBlZFwiLFsxMTMzM11dLFtbMTEyODYsMTEyODZdLFwibWFwcGVkXCIsWzExMzM0XV0sW1sxMTI4NywxMTI4N10sXCJtYXBwZWRcIixbMTEzMzVdXSxbWzExMjg4LDExMjg4XSxcIm1hcHBlZFwiLFsxMTMzNl1dLFtbMTEyODksMTEyODldLFwibWFwcGVkXCIsWzExMzM3XV0sW1sxMTI5MCwxMTI5MF0sXCJtYXBwZWRcIixbMTEzMzhdXSxbWzExMjkxLDExMjkxXSxcIm1hcHBlZFwiLFsxMTMzOV1dLFtbMTEyOTIsMTEyOTJdLFwibWFwcGVkXCIsWzExMzQwXV0sW1sxMTI5MywxMTI5M10sXCJtYXBwZWRcIixbMTEzNDFdXSxbWzExMjk0LDExMjk0XSxcIm1hcHBlZFwiLFsxMTM0Ml1dLFtbMTEyOTUsMTEyOTVdLFwibWFwcGVkXCIsWzExMzQzXV0sW1sxMTI5NiwxMTI5Nl0sXCJtYXBwZWRcIixbMTEzNDRdXSxbWzExMjk3LDExMjk3XSxcIm1hcHBlZFwiLFsxMTM0NV1dLFtbMTEyOTgsMTEyOThdLFwibWFwcGVkXCIsWzExMzQ2XV0sW1sxMTI5OSwxMTI5OV0sXCJtYXBwZWRcIixbMTEzNDddXSxbWzExMzAwLDExMzAwXSxcIm1hcHBlZFwiLFsxMTM0OF1dLFtbMTEzMDEsMTEzMDFdLFwibWFwcGVkXCIsWzExMzQ5XV0sW1sxMTMwMiwxMTMwMl0sXCJtYXBwZWRcIixbMTEzNTBdXSxbWzExMzAzLDExMzAzXSxcIm1hcHBlZFwiLFsxMTM1MV1dLFtbMTEzMDQsMTEzMDRdLFwibWFwcGVkXCIsWzExMzUyXV0sW1sxMTMwNSwxMTMwNV0sXCJtYXBwZWRcIixbMTEzNTNdXSxbWzExMzA2LDExMzA2XSxcIm1hcHBlZFwiLFsxMTM1NF1dLFtbMTEzMDcsMTEzMDddLFwibWFwcGVkXCIsWzExMzU1XV0sW1sxMTMwOCwxMTMwOF0sXCJtYXBwZWRcIixbMTEzNTZdXSxbWzExMzA5LDExMzA5XSxcIm1hcHBlZFwiLFsxMTM1N11dLFtbMTEzMTAsMTEzMTBdLFwibWFwcGVkXCIsWzExMzU4XV0sW1sxMTMxMSwxMTMxMV0sXCJkaXNhbGxvd2VkXCJdLFtbMTEzMTIsMTEzNThdLFwidmFsaWRcIl0sW1sxMTM1OSwxMTM1OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTEzNjAsMTEzNjBdLFwibWFwcGVkXCIsWzExMzYxXV0sW1sxMTM2MSwxMTM2MV0sXCJ2YWxpZFwiXSxbWzExMzYyLDExMzYyXSxcIm1hcHBlZFwiLFs2MTldXSxbWzExMzYzLDExMzYzXSxcIm1hcHBlZFwiLFs3NTQ5XV0sW1sxMTM2NCwxMTM2NF0sXCJtYXBwZWRcIixbNjM3XV0sW1sxMTM2NSwxMTM2Nl0sXCJ2YWxpZFwiXSxbWzExMzY3LDExMzY3XSxcIm1hcHBlZFwiLFsxMTM2OF1dLFtbMTEzNjgsMTEzNjhdLFwidmFsaWRcIl0sW1sxMTM2OSwxMTM2OV0sXCJtYXBwZWRcIixbMTEzNzBdXSxbWzExMzcwLDExMzcwXSxcInZhbGlkXCJdLFtbMTEzNzEsMTEzNzFdLFwibWFwcGVkXCIsWzExMzcyXV0sW1sxMTM3MiwxMTM3Ml0sXCJ2YWxpZFwiXSxbWzExMzczLDExMzczXSxcIm1hcHBlZFwiLFs1OTNdXSxbWzExMzc0LDExMzc0XSxcIm1hcHBlZFwiLFs2MjVdXSxbWzExMzc1LDExMzc1XSxcIm1hcHBlZFwiLFs1OTJdXSxbWzExMzc2LDExMzc2XSxcIm1hcHBlZFwiLFs1OTRdXSxbWzExMzc3LDExMzc3XSxcInZhbGlkXCJdLFtbMTEzNzgsMTEzNzhdLFwibWFwcGVkXCIsWzExMzc5XV0sW1sxMTM3OSwxMTM3OV0sXCJ2YWxpZFwiXSxbWzExMzgwLDExMzgwXSxcInZhbGlkXCJdLFtbMTEzODEsMTEzODFdLFwibWFwcGVkXCIsWzExMzgyXV0sW1sxMTM4MiwxMTM4M10sXCJ2YWxpZFwiXSxbWzExMzg0LDExMzg3XSxcInZhbGlkXCJdLFtbMTEzODgsMTEzODhdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTEzODksMTEzODldLFwibWFwcGVkXCIsWzExOF1dLFtbMTEzOTAsMTEzOTBdLFwibWFwcGVkXCIsWzU3NV1dLFtbMTEzOTEsMTEzOTFdLFwibWFwcGVkXCIsWzU3Nl1dLFtbMTEzOTIsMTEzOTJdLFwibWFwcGVkXCIsWzExMzkzXV0sW1sxMTM5MywxMTM5M10sXCJ2YWxpZFwiXSxbWzExMzk0LDExMzk0XSxcIm1hcHBlZFwiLFsxMTM5NV1dLFtbMTEzOTUsMTEzOTVdLFwidmFsaWRcIl0sW1sxMTM5NiwxMTM5Nl0sXCJtYXBwZWRcIixbMTEzOTddXSxbWzExMzk3LDExMzk3XSxcInZhbGlkXCJdLFtbMTEzOTgsMTEzOThdLFwibWFwcGVkXCIsWzExMzk5XV0sW1sxMTM5OSwxMTM5OV0sXCJ2YWxpZFwiXSxbWzExNDAwLDExNDAwXSxcIm1hcHBlZFwiLFsxMTQwMV1dLFtbMTE0MDEsMTE0MDFdLFwidmFsaWRcIl0sW1sxMTQwMiwxMTQwMl0sXCJtYXBwZWRcIixbMTE0MDNdXSxbWzExNDAzLDExNDAzXSxcInZhbGlkXCJdLFtbMTE0MDQsMTE0MDRdLFwibWFwcGVkXCIsWzExNDA1XV0sW1sxMTQwNSwxMTQwNV0sXCJ2YWxpZFwiXSxbWzExNDA2LDExNDA2XSxcIm1hcHBlZFwiLFsxMTQwN11dLFtbMTE0MDcsMTE0MDddLFwidmFsaWRcIl0sW1sxMTQwOCwxMTQwOF0sXCJtYXBwZWRcIixbMTE0MDldXSxbWzExNDA5LDExNDA5XSxcInZhbGlkXCJdLFtbMTE0MTAsMTE0MTBdLFwibWFwcGVkXCIsWzExNDExXV0sW1sxMTQxMSwxMTQxMV0sXCJ2YWxpZFwiXSxbWzExNDEyLDExNDEyXSxcIm1hcHBlZFwiLFsxMTQxM11dLFtbMTE0MTMsMTE0MTNdLFwidmFsaWRcIl0sW1sxMTQxNCwxMTQxNF0sXCJtYXBwZWRcIixbMTE0MTVdXSxbWzExNDE1LDExNDE1XSxcInZhbGlkXCJdLFtbMTE0MTYsMTE0MTZdLFwibWFwcGVkXCIsWzExNDE3XV0sW1sxMTQxNywxMTQxN10sXCJ2YWxpZFwiXSxbWzExNDE4LDExNDE4XSxcIm1hcHBlZFwiLFsxMTQxOV1dLFtbMTE0MTksMTE0MTldLFwidmFsaWRcIl0sW1sxMTQyMCwxMTQyMF0sXCJtYXBwZWRcIixbMTE0MjFdXSxbWzExNDIxLDExNDIxXSxcInZhbGlkXCJdLFtbMTE0MjIsMTE0MjJdLFwibWFwcGVkXCIsWzExNDIzXV0sW1sxMTQyMywxMTQyM10sXCJ2YWxpZFwiXSxbWzExNDI0LDExNDI0XSxcIm1hcHBlZFwiLFsxMTQyNV1dLFtbMTE0MjUsMTE0MjVdLFwidmFsaWRcIl0sW1sxMTQyNiwxMTQyNl0sXCJtYXBwZWRcIixbMTE0MjddXSxbWzExNDI3LDExNDI3XSxcInZhbGlkXCJdLFtbMTE0MjgsMTE0MjhdLFwibWFwcGVkXCIsWzExNDI5XV0sW1sxMTQyOSwxMTQyOV0sXCJ2YWxpZFwiXSxbWzExNDMwLDExNDMwXSxcIm1hcHBlZFwiLFsxMTQzMV1dLFtbMTE0MzEsMTE0MzFdLFwidmFsaWRcIl0sW1sxMTQzMiwxMTQzMl0sXCJtYXBwZWRcIixbMTE0MzNdXSxbWzExNDMzLDExNDMzXSxcInZhbGlkXCJdLFtbMTE0MzQsMTE0MzRdLFwibWFwcGVkXCIsWzExNDM1XV0sW1sxMTQzNSwxMTQzNV0sXCJ2YWxpZFwiXSxbWzExNDM2LDExNDM2XSxcIm1hcHBlZFwiLFsxMTQzN11dLFtbMTE0MzcsMTE0MzddLFwidmFsaWRcIl0sW1sxMTQzOCwxMTQzOF0sXCJtYXBwZWRcIixbMTE0MzldXSxbWzExNDM5LDExNDM5XSxcInZhbGlkXCJdLFtbMTE0NDAsMTE0NDBdLFwibWFwcGVkXCIsWzExNDQxXV0sW1sxMTQ0MSwxMTQ0MV0sXCJ2YWxpZFwiXSxbWzExNDQyLDExNDQyXSxcIm1hcHBlZFwiLFsxMTQ0M11dLFtbMTE0NDMsMTE0NDNdLFwidmFsaWRcIl0sW1sxMTQ0NCwxMTQ0NF0sXCJtYXBwZWRcIixbMTE0NDVdXSxbWzExNDQ1LDExNDQ1XSxcInZhbGlkXCJdLFtbMTE0NDYsMTE0NDZdLFwibWFwcGVkXCIsWzExNDQ3XV0sW1sxMTQ0NywxMTQ0N10sXCJ2YWxpZFwiXSxbWzExNDQ4LDExNDQ4XSxcIm1hcHBlZFwiLFsxMTQ0OV1dLFtbMTE0NDksMTE0NDldLFwidmFsaWRcIl0sW1sxMTQ1MCwxMTQ1MF0sXCJtYXBwZWRcIixbMTE0NTFdXSxbWzExNDUxLDExNDUxXSxcInZhbGlkXCJdLFtbMTE0NTIsMTE0NTJdLFwibWFwcGVkXCIsWzExNDUzXV0sW1sxMTQ1MywxMTQ1M10sXCJ2YWxpZFwiXSxbWzExNDU0LDExNDU0XSxcIm1hcHBlZFwiLFsxMTQ1NV1dLFtbMTE0NTUsMTE0NTVdLFwidmFsaWRcIl0sW1sxMTQ1NiwxMTQ1Nl0sXCJtYXBwZWRcIixbMTE0NTddXSxbWzExNDU3LDExNDU3XSxcInZhbGlkXCJdLFtbMTE0NTgsMTE0NThdLFwibWFwcGVkXCIsWzExNDU5XV0sW1sxMTQ1OSwxMTQ1OV0sXCJ2YWxpZFwiXSxbWzExNDYwLDExNDYwXSxcIm1hcHBlZFwiLFsxMTQ2MV1dLFtbMTE0NjEsMTE0NjFdLFwidmFsaWRcIl0sW1sxMTQ2MiwxMTQ2Ml0sXCJtYXBwZWRcIixbMTE0NjNdXSxbWzExNDYzLDExNDYzXSxcInZhbGlkXCJdLFtbMTE0NjQsMTE0NjRdLFwibWFwcGVkXCIsWzExNDY1XV0sW1sxMTQ2NSwxMTQ2NV0sXCJ2YWxpZFwiXSxbWzExNDY2LDExNDY2XSxcIm1hcHBlZFwiLFsxMTQ2N11dLFtbMTE0NjcsMTE0NjddLFwidmFsaWRcIl0sW1sxMTQ2OCwxMTQ2OF0sXCJtYXBwZWRcIixbMTE0NjldXSxbWzExNDY5LDExNDY5XSxcInZhbGlkXCJdLFtbMTE0NzAsMTE0NzBdLFwibWFwcGVkXCIsWzExNDcxXV0sW1sxMTQ3MSwxMTQ3MV0sXCJ2YWxpZFwiXSxbWzExNDcyLDExNDcyXSxcIm1hcHBlZFwiLFsxMTQ3M11dLFtbMTE0NzMsMTE0NzNdLFwidmFsaWRcIl0sW1sxMTQ3NCwxMTQ3NF0sXCJtYXBwZWRcIixbMTE0NzVdXSxbWzExNDc1LDExNDc1XSxcInZhbGlkXCJdLFtbMTE0NzYsMTE0NzZdLFwibWFwcGVkXCIsWzExNDc3XV0sW1sxMTQ3NywxMTQ3N10sXCJ2YWxpZFwiXSxbWzExNDc4LDExNDc4XSxcIm1hcHBlZFwiLFsxMTQ3OV1dLFtbMTE0NzksMTE0NzldLFwidmFsaWRcIl0sW1sxMTQ4MCwxMTQ4MF0sXCJtYXBwZWRcIixbMTE0ODFdXSxbWzExNDgxLDExNDgxXSxcInZhbGlkXCJdLFtbMTE0ODIsMTE0ODJdLFwibWFwcGVkXCIsWzExNDgzXV0sW1sxMTQ4MywxMTQ4M10sXCJ2YWxpZFwiXSxbWzExNDg0LDExNDg0XSxcIm1hcHBlZFwiLFsxMTQ4NV1dLFtbMTE0ODUsMTE0ODVdLFwidmFsaWRcIl0sW1sxMTQ4NiwxMTQ4Nl0sXCJtYXBwZWRcIixbMTE0ODddXSxbWzExNDg3LDExNDg3XSxcInZhbGlkXCJdLFtbMTE0ODgsMTE0ODhdLFwibWFwcGVkXCIsWzExNDg5XV0sW1sxMTQ4OSwxMTQ4OV0sXCJ2YWxpZFwiXSxbWzExNDkwLDExNDkwXSxcIm1hcHBlZFwiLFsxMTQ5MV1dLFtbMTE0OTEsMTE0OTJdLFwidmFsaWRcIl0sW1sxMTQ5MywxMTQ5OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE0OTksMTE0OTldLFwibWFwcGVkXCIsWzExNTAwXV0sW1sxMTUwMCwxMTUwMF0sXCJ2YWxpZFwiXSxbWzExNTAxLDExNTAxXSxcIm1hcHBlZFwiLFsxMTUwMl1dLFtbMTE1MDIsMTE1MDVdLFwidmFsaWRcIl0sW1sxMTUwNiwxMTUwNl0sXCJtYXBwZWRcIixbMTE1MDddXSxbWzExNTA3LDExNTA3XSxcInZhbGlkXCJdLFtbMTE1MDgsMTE1MTJdLFwiZGlzYWxsb3dlZFwiXSxbWzExNTEzLDExNTE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTUyMCwxMTU1N10sXCJ2YWxpZFwiXSxbWzExNTU4LDExNTU4XSxcImRpc2FsbG93ZWRcIl0sW1sxMTU1OSwxMTU1OV0sXCJ2YWxpZFwiXSxbWzExNTYwLDExNTY0XSxcImRpc2FsbG93ZWRcIl0sW1sxMTU2NSwxMTU2NV0sXCJ2YWxpZFwiXSxbWzExNTY2LDExNTY3XSxcImRpc2FsbG93ZWRcIl0sW1sxMTU2OCwxMTYyMV0sXCJ2YWxpZFwiXSxbWzExNjIyLDExNjIzXSxcInZhbGlkXCJdLFtbMTE2MjQsMTE2MzBdLFwiZGlzYWxsb3dlZFwiXSxbWzExNjMxLDExNjMxXSxcIm1hcHBlZFwiLFsxMTYxN11dLFtbMTE2MzIsMTE2MzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExNjMzLDExNjQ2XSxcImRpc2FsbG93ZWRcIl0sW1sxMTY0NywxMTY0N10sXCJ2YWxpZFwiXSxbWzExNjQ4LDExNjcwXSxcInZhbGlkXCJdLFtbMTE2NzEsMTE2NzldLFwiZGlzYWxsb3dlZFwiXSxbWzExNjgwLDExNjg2XSxcInZhbGlkXCJdLFtbMTE2ODcsMTE2ODddLFwiZGlzYWxsb3dlZFwiXSxbWzExNjg4LDExNjk0XSxcInZhbGlkXCJdLFtbMTE2OTUsMTE2OTVdLFwiZGlzYWxsb3dlZFwiXSxbWzExNjk2LDExNzAyXSxcInZhbGlkXCJdLFtbMTE3MDMsMTE3MDNdLFwiZGlzYWxsb3dlZFwiXSxbWzExNzA0LDExNzEwXSxcInZhbGlkXCJdLFtbMTE3MTEsMTE3MTFdLFwiZGlzYWxsb3dlZFwiXSxbWzExNzEyLDExNzE4XSxcInZhbGlkXCJdLFtbMTE3MTksMTE3MTldLFwiZGlzYWxsb3dlZFwiXSxbWzExNzIwLDExNzI2XSxcInZhbGlkXCJdLFtbMTE3MjcsMTE3MjddLFwiZGlzYWxsb3dlZFwiXSxbWzExNzI4LDExNzM0XSxcInZhbGlkXCJdLFtbMTE3MzUsMTE3MzVdLFwiZGlzYWxsb3dlZFwiXSxbWzExNzM2LDExNzQyXSxcInZhbGlkXCJdLFtbMTE3NDMsMTE3NDNdLFwiZGlzYWxsb3dlZFwiXSxbWzExNzQ0LDExNzc1XSxcInZhbGlkXCJdLFtbMTE3NzYsMTE3OTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODAwLDExODAzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTgwNCwxMTgwNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE4MDYsMTE4MjJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODIzLDExODIzXSxcInZhbGlkXCJdLFtbMTE4MjQsMTE4MjRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODI1LDExODI1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTgyNiwxMTgzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE4MzYsMTE4NDJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODQzLDExOTAzXSxcImRpc2FsbG93ZWRcIl0sW1sxMTkwNCwxMTkyOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE5MzAsMTE5MzBdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTMxLDExOTM0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkzNSwxMTkzNV0sXCJtYXBwZWRcIixbMjc1OTddXSxbWzExOTM2LDEyMDE4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjAxOSwxMjAxOV0sXCJtYXBwZWRcIixbNDA4NjNdXSxbWzEyMDIwLDEyMDMxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjAzMiwxMjAzMl0sXCJtYXBwZWRcIixbMTk5NjhdXSxbWzEyMDMzLDEyMDMzXSxcIm1hcHBlZFwiLFsyMDAwOF1dLFtbMTIwMzQsMTIwMzRdLFwibWFwcGVkXCIsWzIwMDIyXV0sW1sxMjAzNSwxMjAzNV0sXCJtYXBwZWRcIixbMjAwMzFdXSxbWzEyMDM2LDEyMDM2XSxcIm1hcHBlZFwiLFsyMDA1N11dLFtbMTIwMzcsMTIwMzddLFwibWFwcGVkXCIsWzIwMTAxXV0sW1sxMjAzOCwxMjAzOF0sXCJtYXBwZWRcIixbMjAxMDhdXSxbWzEyMDM5LDEyMDM5XSxcIm1hcHBlZFwiLFsyMDEyOF1dLFtbMTIwNDAsMTIwNDBdLFwibWFwcGVkXCIsWzIwMTU0XV0sW1sxMjA0MSwxMjA0MV0sXCJtYXBwZWRcIixbMjA3OTldXSxbWzEyMDQyLDEyMDQyXSxcIm1hcHBlZFwiLFsyMDgzN11dLFtbMTIwNDMsMTIwNDNdLFwibWFwcGVkXCIsWzIwODQzXV0sW1sxMjA0NCwxMjA0NF0sXCJtYXBwZWRcIixbMjA4NjZdXSxbWzEyMDQ1LDEyMDQ1XSxcIm1hcHBlZFwiLFsyMDg4Nl1dLFtbMTIwNDYsMTIwNDZdLFwibWFwcGVkXCIsWzIwOTA3XV0sW1sxMjA0NywxMjA0N10sXCJtYXBwZWRcIixbMjA5NjBdXSxbWzEyMDQ4LDEyMDQ4XSxcIm1hcHBlZFwiLFsyMDk4MV1dLFtbMTIwNDksMTIwNDldLFwibWFwcGVkXCIsWzIwOTkyXV0sW1sxMjA1MCwxMjA1MF0sXCJtYXBwZWRcIixbMjExNDddXSxbWzEyMDUxLDEyMDUxXSxcIm1hcHBlZFwiLFsyMTI0MV1dLFtbMTIwNTIsMTIwNTJdLFwibWFwcGVkXCIsWzIxMjY5XV0sW1sxMjA1MywxMjA1M10sXCJtYXBwZWRcIixbMjEyNzRdXSxbWzEyMDU0LDEyMDU0XSxcIm1hcHBlZFwiLFsyMTMwNF1dLFtbMTIwNTUsMTIwNTVdLFwibWFwcGVkXCIsWzIxMzEzXV0sW1sxMjA1NiwxMjA1Nl0sXCJtYXBwZWRcIixbMjEzNDBdXSxbWzEyMDU3LDEyMDU3XSxcIm1hcHBlZFwiLFsyMTM1M11dLFtbMTIwNTgsMTIwNThdLFwibWFwcGVkXCIsWzIxMzc4XV0sW1sxMjA1OSwxMjA1OV0sXCJtYXBwZWRcIixbMjE0MzBdXSxbWzEyMDYwLDEyMDYwXSxcIm1hcHBlZFwiLFsyMTQ0OF1dLFtbMTIwNjEsMTIwNjFdLFwibWFwcGVkXCIsWzIxNDc1XV0sW1sxMjA2MiwxMjA2Ml0sXCJtYXBwZWRcIixbMjIyMzFdXSxbWzEyMDYzLDEyMDYzXSxcIm1hcHBlZFwiLFsyMjMwM11dLFtbMTIwNjQsMTIwNjRdLFwibWFwcGVkXCIsWzIyNzYzXV0sW1sxMjA2NSwxMjA2NV0sXCJtYXBwZWRcIixbMjI3ODZdXSxbWzEyMDY2LDEyMDY2XSxcIm1hcHBlZFwiLFsyMjc5NF1dLFtbMTIwNjcsMTIwNjddLFwibWFwcGVkXCIsWzIyODA1XV0sW1sxMjA2OCwxMjA2OF0sXCJtYXBwZWRcIixbMjI4MjNdXSxbWzEyMDY5LDEyMDY5XSxcIm1hcHBlZFwiLFsyMjg5OV1dLFtbMTIwNzAsMTIwNzBdLFwibWFwcGVkXCIsWzIzMzc2XV0sW1sxMjA3MSwxMjA3MV0sXCJtYXBwZWRcIixbMjM0MjRdXSxbWzEyMDcyLDEyMDcyXSxcIm1hcHBlZFwiLFsyMzU0NF1dLFtbMTIwNzMsMTIwNzNdLFwibWFwcGVkXCIsWzIzNTY3XV0sW1sxMjA3NCwxMjA3NF0sXCJtYXBwZWRcIixbMjM1ODZdXSxbWzEyMDc1LDEyMDc1XSxcIm1hcHBlZFwiLFsyMzYwOF1dLFtbMTIwNzYsMTIwNzZdLFwibWFwcGVkXCIsWzIzNjYyXV0sW1sxMjA3NywxMjA3N10sXCJtYXBwZWRcIixbMjM2NjVdXSxbWzEyMDc4LDEyMDc4XSxcIm1hcHBlZFwiLFsyNDAyN11dLFtbMTIwNzksMTIwNzldLFwibWFwcGVkXCIsWzI0MDM3XV0sW1sxMjA4MCwxMjA4MF0sXCJtYXBwZWRcIixbMjQwNDldXSxbWzEyMDgxLDEyMDgxXSxcIm1hcHBlZFwiLFsyNDA2Ml1dLFtbMTIwODIsMTIwODJdLFwibWFwcGVkXCIsWzI0MTc4XV0sW1sxMjA4MywxMjA4M10sXCJtYXBwZWRcIixbMjQxODZdXSxbWzEyMDg0LDEyMDg0XSxcIm1hcHBlZFwiLFsyNDE5MV1dLFtbMTIwODUsMTIwODVdLFwibWFwcGVkXCIsWzI0MzA4XV0sW1sxMjA4NiwxMjA4Nl0sXCJtYXBwZWRcIixbMjQzMThdXSxbWzEyMDg3LDEyMDg3XSxcIm1hcHBlZFwiLFsyNDMzMV1dLFtbMTIwODgsMTIwODhdLFwibWFwcGVkXCIsWzI0MzM5XV0sW1sxMjA4OSwxMjA4OV0sXCJtYXBwZWRcIixbMjQ0MDBdXSxbWzEyMDkwLDEyMDkwXSxcIm1hcHBlZFwiLFsyNDQxN11dLFtbMTIwOTEsMTIwOTFdLFwibWFwcGVkXCIsWzI0NDM1XV0sW1sxMjA5MiwxMjA5Ml0sXCJtYXBwZWRcIixbMjQ1MTVdXSxbWzEyMDkzLDEyMDkzXSxcIm1hcHBlZFwiLFsyNTA5Nl1dLFtbMTIwOTQsMTIwOTRdLFwibWFwcGVkXCIsWzI1MTQyXV0sW1sxMjA5NSwxMjA5NV0sXCJtYXBwZWRcIixbMjUxNjNdXSxbWzEyMDk2LDEyMDk2XSxcIm1hcHBlZFwiLFsyNTkwM11dLFtbMTIwOTcsMTIwOTddLFwibWFwcGVkXCIsWzI1OTA4XV0sW1sxMjA5OCwxMjA5OF0sXCJtYXBwZWRcIixbMjU5OTFdXSxbWzEyMDk5LDEyMDk5XSxcIm1hcHBlZFwiLFsyNjAwN11dLFtbMTIxMDAsMTIxMDBdLFwibWFwcGVkXCIsWzI2MDIwXV0sW1sxMjEwMSwxMjEwMV0sXCJtYXBwZWRcIixbMjYwNDFdXSxbWzEyMTAyLDEyMTAyXSxcIm1hcHBlZFwiLFsyNjA4MF1dLFtbMTIxMDMsMTIxMDNdLFwibWFwcGVkXCIsWzI2MDg1XV0sW1sxMjEwNCwxMjEwNF0sXCJtYXBwZWRcIixbMjYzNTJdXSxbWzEyMTA1LDEyMTA1XSxcIm1hcHBlZFwiLFsyNjM3Nl1dLFtbMTIxMDYsMTIxMDZdLFwibWFwcGVkXCIsWzI2NDA4XV0sW1sxMjEwNywxMjEwN10sXCJtYXBwZWRcIixbMjc0MjRdXSxbWzEyMTA4LDEyMTA4XSxcIm1hcHBlZFwiLFsyNzQ5MF1dLFtbMTIxMDksMTIxMDldLFwibWFwcGVkXCIsWzI3NTEzXV0sW1sxMjExMCwxMjExMF0sXCJtYXBwZWRcIixbMjc1NzFdXSxbWzEyMTExLDEyMTExXSxcIm1hcHBlZFwiLFsyNzU5NV1dLFtbMTIxMTIsMTIxMTJdLFwibWFwcGVkXCIsWzI3NjA0XV0sW1sxMjExMywxMjExM10sXCJtYXBwZWRcIixbMjc2MTFdXSxbWzEyMTE0LDEyMTE0XSxcIm1hcHBlZFwiLFsyNzY2M11dLFtbMTIxMTUsMTIxMTVdLFwibWFwcGVkXCIsWzI3NjY4XV0sW1sxMjExNiwxMjExNl0sXCJtYXBwZWRcIixbMjc3MDBdXSxbWzEyMTE3LDEyMTE3XSxcIm1hcHBlZFwiLFsyODc3OV1dLFtbMTIxMTgsMTIxMThdLFwibWFwcGVkXCIsWzI5MjI2XV0sW1sxMjExOSwxMjExOV0sXCJtYXBwZWRcIixbMjkyMzhdXSxbWzEyMTIwLDEyMTIwXSxcIm1hcHBlZFwiLFsyOTI0M11dLFtbMTIxMjEsMTIxMjFdLFwibWFwcGVkXCIsWzI5MjQ3XV0sW1sxMjEyMiwxMjEyMl0sXCJtYXBwZWRcIixbMjkyNTVdXSxbWzEyMTIzLDEyMTIzXSxcIm1hcHBlZFwiLFsyOTI3M11dLFtbMTIxMjQsMTIxMjRdLFwibWFwcGVkXCIsWzI5Mjc1XV0sW1sxMjEyNSwxMjEyNV0sXCJtYXBwZWRcIixbMjkzNTZdXSxbWzEyMTI2LDEyMTI2XSxcIm1hcHBlZFwiLFsyOTU3Ml1dLFtbMTIxMjcsMTIxMjddLFwibWFwcGVkXCIsWzI5NTc3XV0sW1sxMjEyOCwxMjEyOF0sXCJtYXBwZWRcIixbMjk5MTZdXSxbWzEyMTI5LDEyMTI5XSxcIm1hcHBlZFwiLFsyOTkyNl1dLFtbMTIxMzAsMTIxMzBdLFwibWFwcGVkXCIsWzI5OTc2XV0sW1sxMjEzMSwxMjEzMV0sXCJtYXBwZWRcIixbMjk5ODNdXSxbWzEyMTMyLDEyMTMyXSxcIm1hcHBlZFwiLFsyOTk5Ml1dLFtbMTIxMzMsMTIxMzNdLFwibWFwcGVkXCIsWzMwMDAwXV0sW1sxMjEzNCwxMjEzNF0sXCJtYXBwZWRcIixbMzAwOTFdXSxbWzEyMTM1LDEyMTM1XSxcIm1hcHBlZFwiLFszMDA5OF1dLFtbMTIxMzYsMTIxMzZdLFwibWFwcGVkXCIsWzMwMzI2XV0sW1sxMjEzNywxMjEzN10sXCJtYXBwZWRcIixbMzAzMzNdXSxbWzEyMTM4LDEyMTM4XSxcIm1hcHBlZFwiLFszMDM4Ml1dLFtbMTIxMzksMTIxMzldLFwibWFwcGVkXCIsWzMwMzk5XV0sW1sxMjE0MCwxMjE0MF0sXCJtYXBwZWRcIixbMzA0NDZdXSxbWzEyMTQxLDEyMTQxXSxcIm1hcHBlZFwiLFszMDY4M11dLFtbMTIxNDIsMTIxNDJdLFwibWFwcGVkXCIsWzMwNjkwXV0sW1sxMjE0MywxMjE0M10sXCJtYXBwZWRcIixbMzA3MDddXSxbWzEyMTQ0LDEyMTQ0XSxcIm1hcHBlZFwiLFszMTAzNF1dLFtbMTIxNDUsMTIxNDVdLFwibWFwcGVkXCIsWzMxMTYwXV0sW1sxMjE0NiwxMjE0Nl0sXCJtYXBwZWRcIixbMzExNjZdXSxbWzEyMTQ3LDEyMTQ3XSxcIm1hcHBlZFwiLFszMTM0OF1dLFtbMTIxNDgsMTIxNDhdLFwibWFwcGVkXCIsWzMxNDM1XV0sW1sxMjE0OSwxMjE0OV0sXCJtYXBwZWRcIixbMzE0ODFdXSxbWzEyMTUwLDEyMTUwXSxcIm1hcHBlZFwiLFszMTg1OV1dLFtbMTIxNTEsMTIxNTFdLFwibWFwcGVkXCIsWzMxOTkyXV0sW1sxMjE1MiwxMjE1Ml0sXCJtYXBwZWRcIixbMzI1NjZdXSxbWzEyMTUzLDEyMTUzXSxcIm1hcHBlZFwiLFszMjU5M11dLFtbMTIxNTQsMTIxNTRdLFwibWFwcGVkXCIsWzMyNjUwXV0sW1sxMjE1NSwxMjE1NV0sXCJtYXBwZWRcIixbMzI3MDFdXSxbWzEyMTU2LDEyMTU2XSxcIm1hcHBlZFwiLFszMjc2OV1dLFtbMTIxNTcsMTIxNTddLFwibWFwcGVkXCIsWzMyNzgwXV0sW1sxMjE1OCwxMjE1OF0sXCJtYXBwZWRcIixbMzI3ODZdXSxbWzEyMTU5LDEyMTU5XSxcIm1hcHBlZFwiLFszMjgxOV1dLFtbMTIxNjAsMTIxNjBdLFwibWFwcGVkXCIsWzMyODk1XV0sW1sxMjE2MSwxMjE2MV0sXCJtYXBwZWRcIixbMzI5MDVdXSxbWzEyMTYyLDEyMTYyXSxcIm1hcHBlZFwiLFszMzI1MV1dLFtbMTIxNjMsMTIxNjNdLFwibWFwcGVkXCIsWzMzMjU4XV0sW1sxMjE2NCwxMjE2NF0sXCJtYXBwZWRcIixbMzMyNjddXSxbWzEyMTY1LDEyMTY1XSxcIm1hcHBlZFwiLFszMzI3Nl1dLFtbMTIxNjYsMTIxNjZdLFwibWFwcGVkXCIsWzMzMjkyXV0sW1sxMjE2NywxMjE2N10sXCJtYXBwZWRcIixbMzMzMDddXSxbWzEyMTY4LDEyMTY4XSxcIm1hcHBlZFwiLFszMzMxMV1dLFtbMTIxNjksMTIxNjldLFwibWFwcGVkXCIsWzMzMzkwXV0sW1sxMjE3MCwxMjE3MF0sXCJtYXBwZWRcIixbMzMzOTRdXSxbWzEyMTcxLDEyMTcxXSxcIm1hcHBlZFwiLFszMzQwMF1dLFtbMTIxNzIsMTIxNzJdLFwibWFwcGVkXCIsWzM0MzgxXV0sW1sxMjE3MywxMjE3M10sXCJtYXBwZWRcIixbMzQ0MTFdXSxbWzEyMTc0LDEyMTc0XSxcIm1hcHBlZFwiLFszNDg4MF1dLFtbMTIxNzUsMTIxNzVdLFwibWFwcGVkXCIsWzM0ODkyXV0sW1sxMjE3NiwxMjE3Nl0sXCJtYXBwZWRcIixbMzQ5MTVdXSxbWzEyMTc3LDEyMTc3XSxcIm1hcHBlZFwiLFszNTE5OF1dLFtbMTIxNzgsMTIxNzhdLFwibWFwcGVkXCIsWzM1MjExXV0sW1sxMjE3OSwxMjE3OV0sXCJtYXBwZWRcIixbMzUyODJdXSxbWzEyMTgwLDEyMTgwXSxcIm1hcHBlZFwiLFszNTMyOF1dLFtbMTIxODEsMTIxODFdLFwibWFwcGVkXCIsWzM1ODk1XV0sW1sxMjE4MiwxMjE4Ml0sXCJtYXBwZWRcIixbMzU5MTBdXSxbWzEyMTgzLDEyMTgzXSxcIm1hcHBlZFwiLFszNTkyNV1dLFtbMTIxODQsMTIxODRdLFwibWFwcGVkXCIsWzM1OTYwXV0sW1sxMjE4NSwxMjE4NV0sXCJtYXBwZWRcIixbMzU5OTddXSxbWzEyMTg2LDEyMTg2XSxcIm1hcHBlZFwiLFszNjE5Nl1dLFtbMTIxODcsMTIxODddLFwibWFwcGVkXCIsWzM2MjA4XV0sW1sxMjE4OCwxMjE4OF0sXCJtYXBwZWRcIixbMzYyNzVdXSxbWzEyMTg5LDEyMTg5XSxcIm1hcHBlZFwiLFszNjUyM11dLFtbMTIxOTAsMTIxOTBdLFwibWFwcGVkXCIsWzM2NTU0XV0sW1sxMjE5MSwxMjE5MV0sXCJtYXBwZWRcIixbMzY3NjNdXSxbWzEyMTkyLDEyMTkyXSxcIm1hcHBlZFwiLFszNjc4NF1dLFtbMTIxOTMsMTIxOTNdLFwibWFwcGVkXCIsWzM2Nzg5XV0sW1sxMjE5NCwxMjE5NF0sXCJtYXBwZWRcIixbMzcwMDldXSxbWzEyMTk1LDEyMTk1XSxcIm1hcHBlZFwiLFszNzE5M11dLFtbMTIxOTYsMTIxOTZdLFwibWFwcGVkXCIsWzM3MzE4XV0sW1sxMjE5NywxMjE5N10sXCJtYXBwZWRcIixbMzczMjRdXSxbWzEyMTk4LDEyMTk4XSxcIm1hcHBlZFwiLFszNzMyOV1dLFtbMTIxOTksMTIxOTldLFwibWFwcGVkXCIsWzM4MjYzXV0sW1sxMjIwMCwxMjIwMF0sXCJtYXBwZWRcIixbMzgyNzJdXSxbWzEyMjAxLDEyMjAxXSxcIm1hcHBlZFwiLFszODQyOF1dLFtbMTIyMDIsMTIyMDJdLFwibWFwcGVkXCIsWzM4NTgyXV0sW1sxMjIwMywxMjIwM10sXCJtYXBwZWRcIixbMzg1ODVdXSxbWzEyMjA0LDEyMjA0XSxcIm1hcHBlZFwiLFszODYzMl1dLFtbMTIyMDUsMTIyMDVdLFwibWFwcGVkXCIsWzM4NzM3XV0sW1sxMjIwNiwxMjIwNl0sXCJtYXBwZWRcIixbMzg3NTBdXSxbWzEyMjA3LDEyMjA3XSxcIm1hcHBlZFwiLFszODc1NF1dLFtbMTIyMDgsMTIyMDhdLFwibWFwcGVkXCIsWzM4NzYxXV0sW1sxMjIwOSwxMjIwOV0sXCJtYXBwZWRcIixbMzg4NTldXSxbWzEyMjEwLDEyMjEwXSxcIm1hcHBlZFwiLFszODg5M11dLFtbMTIyMTEsMTIyMTFdLFwibWFwcGVkXCIsWzM4ODk5XV0sW1sxMjIxMiwxMjIxMl0sXCJtYXBwZWRcIixbMzg5MTNdXSxbWzEyMjEzLDEyMjEzXSxcIm1hcHBlZFwiLFszOTA4MF1dLFtbMTIyMTQsMTIyMTRdLFwibWFwcGVkXCIsWzM5MTMxXV0sW1sxMjIxNSwxMjIxNV0sXCJtYXBwZWRcIixbMzkxMzVdXSxbWzEyMjE2LDEyMjE2XSxcIm1hcHBlZFwiLFszOTMxOF1dLFtbMTIyMTcsMTIyMTddLFwibWFwcGVkXCIsWzM5MzIxXV0sW1sxMjIxOCwxMjIxOF0sXCJtYXBwZWRcIixbMzkzNDBdXSxbWzEyMjE5LDEyMjE5XSxcIm1hcHBlZFwiLFszOTU5Ml1dLFtbMTIyMjAsMTIyMjBdLFwibWFwcGVkXCIsWzM5NjQwXV0sW1sxMjIyMSwxMjIyMV0sXCJtYXBwZWRcIixbMzk2NDddXSxbWzEyMjIyLDEyMjIyXSxcIm1hcHBlZFwiLFszOTcxN11dLFtbMTIyMjMsMTIyMjNdLFwibWFwcGVkXCIsWzM5NzI3XV0sW1sxMjIyNCwxMjIyNF0sXCJtYXBwZWRcIixbMzk3MzBdXSxbWzEyMjI1LDEyMjI1XSxcIm1hcHBlZFwiLFszOTc0MF1dLFtbMTIyMjYsMTIyMjZdLFwibWFwcGVkXCIsWzM5NzcwXV0sW1sxMjIyNywxMjIyN10sXCJtYXBwZWRcIixbNDAxNjVdXSxbWzEyMjI4LDEyMjI4XSxcIm1hcHBlZFwiLFs0MDU2NV1dLFtbMTIyMjksMTIyMjldLFwibWFwcGVkXCIsWzQwNTc1XV0sW1sxMjIzMCwxMjIzMF0sXCJtYXBwZWRcIixbNDA2MTNdXSxbWzEyMjMxLDEyMjMxXSxcIm1hcHBlZFwiLFs0MDYzNV1dLFtbMTIyMzIsMTIyMzJdLFwibWFwcGVkXCIsWzQwNjQzXV0sW1sxMjIzMywxMjIzM10sXCJtYXBwZWRcIixbNDA2NTNdXSxbWzEyMjM0LDEyMjM0XSxcIm1hcHBlZFwiLFs0MDY1N11dLFtbMTIyMzUsMTIyMzVdLFwibWFwcGVkXCIsWzQwNjk3XV0sW1sxMjIzNiwxMjIzNl0sXCJtYXBwZWRcIixbNDA3MDFdXSxbWzEyMjM3LDEyMjM3XSxcIm1hcHBlZFwiLFs0MDcxOF1dLFtbMTIyMzgsMTIyMzhdLFwibWFwcGVkXCIsWzQwNzIzXV0sW1sxMjIzOSwxMjIzOV0sXCJtYXBwZWRcIixbNDA3MzZdXSxbWzEyMjQwLDEyMjQwXSxcIm1hcHBlZFwiLFs0MDc2M11dLFtbMTIyNDEsMTIyNDFdLFwibWFwcGVkXCIsWzQwNzc4XV0sW1sxMjI0MiwxMjI0Ml0sXCJtYXBwZWRcIixbNDA3ODZdXSxbWzEyMjQzLDEyMjQzXSxcIm1hcHBlZFwiLFs0MDg0NV1dLFtbMTIyNDQsMTIyNDRdLFwibWFwcGVkXCIsWzQwODYwXV0sW1sxMjI0NSwxMjI0NV0sXCJtYXBwZWRcIixbNDA4NjRdXSxbWzEyMjQ2LDEyMjcxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjI3MiwxMjI4M10sXCJkaXNhbGxvd2VkXCJdLFtbMTIyODQsMTIyODddLFwiZGlzYWxsb3dlZFwiXSxbWzEyMjg4LDEyMjg4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzJdXSxbWzEyMjg5LDEyMjg5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjI5MCwxMjI5MF0sXCJtYXBwZWRcIixbNDZdXSxbWzEyMjkxLDEyMjkyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjI5MywxMjI5NV0sXCJ2YWxpZFwiXSxbWzEyMjk2LDEyMzI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjMzMCwxMjMzM10sXCJ2YWxpZFwiXSxbWzEyMzM0LDEyMzQxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjM0MiwxMjM0Ml0sXCJtYXBwZWRcIixbMTIzMDZdXSxbWzEyMzQzLDEyMzQzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjM0NCwxMjM0NF0sXCJtYXBwZWRcIixbMjEzMTNdXSxbWzEyMzQ1LDEyMzQ1XSxcIm1hcHBlZFwiLFsyMTMxNl1dLFtbMTIzNDYsMTIzNDZdLFwibWFwcGVkXCIsWzIxMzE3XV0sW1sxMjM0NywxMjM0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTIzNDgsMTIzNDhdLFwidmFsaWRcIl0sW1sxMjM0OSwxMjM0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTIzNTAsMTIzNTBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMzUxLDEyMzUxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjM1MiwxMjM1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTIzNTMsMTI0MzZdLFwidmFsaWRcIl0sW1sxMjQzNywxMjQzOF0sXCJ2YWxpZFwiXSxbWzEyNDM5LDEyNDQwXSxcImRpc2FsbG93ZWRcIl0sW1sxMjQ0MSwxMjQ0Ml0sXCJ2YWxpZFwiXSxbWzEyNDQzLDEyNDQzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTI0NDFdXSxbWzEyNDQ0LDEyNDQ0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTI0NDJdXSxbWzEyNDQ1LDEyNDQ2XSxcInZhbGlkXCJdLFtbMTI0NDcsMTI0NDddLFwibWFwcGVkXCIsWzEyNDI0LDEyNDI2XV0sW1sxMjQ0OCwxMjQ0OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI0NDksMTI1NDJdLFwidmFsaWRcIl0sW1sxMjU0MywxMjU0M10sXCJtYXBwZWRcIixbMTI0NjcsMTI0ODhdXSxbWzEyNTQ0LDEyNTQ4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjU0OSwxMjU4OF0sXCJ2YWxpZFwiXSxbWzEyNTg5LDEyNTg5XSxcInZhbGlkXCJdLFtbMTI1OTAsMTI1OTJdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNTkzLDEyNTkzXSxcIm1hcHBlZFwiLFs0MzUyXV0sW1sxMjU5NCwxMjU5NF0sXCJtYXBwZWRcIixbNDM1M11dLFtbMTI1OTUsMTI1OTVdLFwibWFwcGVkXCIsWzQ1MjJdXSxbWzEyNTk2LDEyNTk2XSxcIm1hcHBlZFwiLFs0MzU0XV0sW1sxMjU5NywxMjU5N10sXCJtYXBwZWRcIixbNDUyNF1dLFtbMTI1OTgsMTI1OThdLFwibWFwcGVkXCIsWzQ1MjVdXSxbWzEyNTk5LDEyNTk5XSxcIm1hcHBlZFwiLFs0MzU1XV0sW1sxMjYwMCwxMjYwMF0sXCJtYXBwZWRcIixbNDM1Nl1dLFtbMTI2MDEsMTI2MDFdLFwibWFwcGVkXCIsWzQzNTddXSxbWzEyNjAyLDEyNjAyXSxcIm1hcHBlZFwiLFs0NTI4XV0sW1sxMjYwMywxMjYwM10sXCJtYXBwZWRcIixbNDUyOV1dLFtbMTI2MDQsMTI2MDRdLFwibWFwcGVkXCIsWzQ1MzBdXSxbWzEyNjA1LDEyNjA1XSxcIm1hcHBlZFwiLFs0NTMxXV0sW1sxMjYwNiwxMjYwNl0sXCJtYXBwZWRcIixbNDUzMl1dLFtbMTI2MDcsMTI2MDddLFwibWFwcGVkXCIsWzQ1MzNdXSxbWzEyNjA4LDEyNjA4XSxcIm1hcHBlZFwiLFs0Mzc4XV0sW1sxMjYwOSwxMjYwOV0sXCJtYXBwZWRcIixbNDM1OF1dLFtbMTI2MTAsMTI2MTBdLFwibWFwcGVkXCIsWzQzNTldXSxbWzEyNjExLDEyNjExXSxcIm1hcHBlZFwiLFs0MzYwXV0sW1sxMjYxMiwxMjYxMl0sXCJtYXBwZWRcIixbNDM4NV1dLFtbMTI2MTMsMTI2MTNdLFwibWFwcGVkXCIsWzQzNjFdXSxbWzEyNjE0LDEyNjE0XSxcIm1hcHBlZFwiLFs0MzYyXV0sW1sxMjYxNSwxMjYxNV0sXCJtYXBwZWRcIixbNDM2M11dLFtbMTI2MTYsMTI2MTZdLFwibWFwcGVkXCIsWzQzNjRdXSxbWzEyNjE3LDEyNjE3XSxcIm1hcHBlZFwiLFs0MzY1XV0sW1sxMjYxOCwxMjYxOF0sXCJtYXBwZWRcIixbNDM2Nl1dLFtbMTI2MTksMTI2MTldLFwibWFwcGVkXCIsWzQzNjddXSxbWzEyNjIwLDEyNjIwXSxcIm1hcHBlZFwiLFs0MzY4XV0sW1sxMjYyMSwxMjYyMV0sXCJtYXBwZWRcIixbNDM2OV1dLFtbMTI2MjIsMTI2MjJdLFwibWFwcGVkXCIsWzQzNzBdXSxbWzEyNjIzLDEyNjIzXSxcIm1hcHBlZFwiLFs0NDQ5XV0sW1sxMjYyNCwxMjYyNF0sXCJtYXBwZWRcIixbNDQ1MF1dLFtbMTI2MjUsMTI2MjVdLFwibWFwcGVkXCIsWzQ0NTFdXSxbWzEyNjI2LDEyNjI2XSxcIm1hcHBlZFwiLFs0NDUyXV0sW1sxMjYyNywxMjYyN10sXCJtYXBwZWRcIixbNDQ1M11dLFtbMTI2MjgsMTI2MjhdLFwibWFwcGVkXCIsWzQ0NTRdXSxbWzEyNjI5LDEyNjI5XSxcIm1hcHBlZFwiLFs0NDU1XV0sW1sxMjYzMCwxMjYzMF0sXCJtYXBwZWRcIixbNDQ1Nl1dLFtbMTI2MzEsMTI2MzFdLFwibWFwcGVkXCIsWzQ0NTddXSxbWzEyNjMyLDEyNjMyXSxcIm1hcHBlZFwiLFs0NDU4XV0sW1sxMjYzMywxMjYzM10sXCJtYXBwZWRcIixbNDQ1OV1dLFtbMTI2MzQsMTI2MzRdLFwibWFwcGVkXCIsWzQ0NjBdXSxbWzEyNjM1LDEyNjM1XSxcIm1hcHBlZFwiLFs0NDYxXV0sW1sxMjYzNiwxMjYzNl0sXCJtYXBwZWRcIixbNDQ2Ml1dLFtbMTI2MzcsMTI2MzddLFwibWFwcGVkXCIsWzQ0NjNdXSxbWzEyNjM4LDEyNjM4XSxcIm1hcHBlZFwiLFs0NDY0XV0sW1sxMjYzOSwxMjYzOV0sXCJtYXBwZWRcIixbNDQ2NV1dLFtbMTI2NDAsMTI2NDBdLFwibWFwcGVkXCIsWzQ0NjZdXSxbWzEyNjQxLDEyNjQxXSxcIm1hcHBlZFwiLFs0NDY3XV0sW1sxMjY0MiwxMjY0Ml0sXCJtYXBwZWRcIixbNDQ2OF1dLFtbMTI2NDMsMTI2NDNdLFwibWFwcGVkXCIsWzQ0NjldXSxbWzEyNjQ0LDEyNjQ0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY0NSwxMjY0NV0sXCJtYXBwZWRcIixbNDM3Ml1dLFtbMTI2NDYsMTI2NDZdLFwibWFwcGVkXCIsWzQzNzNdXSxbWzEyNjQ3LDEyNjQ3XSxcIm1hcHBlZFwiLFs0NTUxXV0sW1sxMjY0OCwxMjY0OF0sXCJtYXBwZWRcIixbNDU1Ml1dLFtbMTI2NDksMTI2NDldLFwibWFwcGVkXCIsWzQ1NTZdXSxbWzEyNjUwLDEyNjUwXSxcIm1hcHBlZFwiLFs0NTU4XV0sW1sxMjY1MSwxMjY1MV0sXCJtYXBwZWRcIixbNDU2M11dLFtbMTI2NTIsMTI2NTJdLFwibWFwcGVkXCIsWzQ1NjddXSxbWzEyNjUzLDEyNjUzXSxcIm1hcHBlZFwiLFs0NTY5XV0sW1sxMjY1NCwxMjY1NF0sXCJtYXBwZWRcIixbNDM4MF1dLFtbMTI2NTUsMTI2NTVdLFwibWFwcGVkXCIsWzQ1NzNdXSxbWzEyNjU2LDEyNjU2XSxcIm1hcHBlZFwiLFs0NTc1XV0sW1sxMjY1NywxMjY1N10sXCJtYXBwZWRcIixbNDM4MV1dLFtbMTI2NTgsMTI2NThdLFwibWFwcGVkXCIsWzQzODJdXSxbWzEyNjU5LDEyNjU5XSxcIm1hcHBlZFwiLFs0Mzg0XV0sW1sxMjY2MCwxMjY2MF0sXCJtYXBwZWRcIixbNDM4Nl1dLFtbMTI2NjEsMTI2NjFdLFwibWFwcGVkXCIsWzQzODddXSxbWzEyNjYyLDEyNjYyXSxcIm1hcHBlZFwiLFs0MzkxXV0sW1sxMjY2MywxMjY2M10sXCJtYXBwZWRcIixbNDM5M11dLFtbMTI2NjQsMTI2NjRdLFwibWFwcGVkXCIsWzQzOTVdXSxbWzEyNjY1LDEyNjY1XSxcIm1hcHBlZFwiLFs0Mzk2XV0sW1sxMjY2NiwxMjY2Nl0sXCJtYXBwZWRcIixbNDM5N11dLFtbMTI2NjcsMTI2NjddLFwibWFwcGVkXCIsWzQzOThdXSxbWzEyNjY4LDEyNjY4XSxcIm1hcHBlZFwiLFs0Mzk5XV0sW1sxMjY2OSwxMjY2OV0sXCJtYXBwZWRcIixbNDQwMl1dLFtbMTI2NzAsMTI2NzBdLFwibWFwcGVkXCIsWzQ0MDZdXSxbWzEyNjcxLDEyNjcxXSxcIm1hcHBlZFwiLFs0NDE2XV0sW1sxMjY3MiwxMjY3Ml0sXCJtYXBwZWRcIixbNDQyM11dLFtbMTI2NzMsMTI2NzNdLFwibWFwcGVkXCIsWzQ0MjhdXSxbWzEyNjc0LDEyNjc0XSxcIm1hcHBlZFwiLFs0NTkzXV0sW1sxMjY3NSwxMjY3NV0sXCJtYXBwZWRcIixbNDU5NF1dLFtbMTI2NzYsMTI2NzZdLFwibWFwcGVkXCIsWzQ0MzldXSxbWzEyNjc3LDEyNjc3XSxcIm1hcHBlZFwiLFs0NDQwXV0sW1sxMjY3OCwxMjY3OF0sXCJtYXBwZWRcIixbNDQ0MV1dLFtbMTI2NzksMTI2NzldLFwibWFwcGVkXCIsWzQ0ODRdXSxbWzEyNjgwLDEyNjgwXSxcIm1hcHBlZFwiLFs0NDg1XV0sW1sxMjY4MSwxMjY4MV0sXCJtYXBwZWRcIixbNDQ4OF1dLFtbMTI2ODIsMTI2ODJdLFwibWFwcGVkXCIsWzQ0OTddXSxbWzEyNjgzLDEyNjgzXSxcIm1hcHBlZFwiLFs0NDk4XV0sW1sxMjY4NCwxMjY4NF0sXCJtYXBwZWRcIixbNDUwMF1dLFtbMTI2ODUsMTI2ODVdLFwibWFwcGVkXCIsWzQ1MTBdXSxbWzEyNjg2LDEyNjg2XSxcIm1hcHBlZFwiLFs0NTEzXV0sW1sxMjY4NywxMjY4N10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2ODgsMTI2ODldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNjkwLDEyNjkwXSxcIm1hcHBlZFwiLFsxOTk2OF1dLFtbMTI2OTEsMTI2OTFdLFwibWFwcGVkXCIsWzIwMTA4XV0sW1sxMjY5MiwxMjY5Ml0sXCJtYXBwZWRcIixbMTk5NzddXSxbWzEyNjkzLDEyNjkzXSxcIm1hcHBlZFwiLFsyMjIzNV1dLFtbMTI2OTQsMTI2OTRdLFwibWFwcGVkXCIsWzE5OTc4XV0sW1sxMjY5NSwxMjY5NV0sXCJtYXBwZWRcIixbMjAwMTNdXSxbWzEyNjk2LDEyNjk2XSxcIm1hcHBlZFwiLFsxOTk3OV1dLFtbMTI2OTcsMTI2OTddLFwibWFwcGVkXCIsWzMwMDAyXV0sW1sxMjY5OCwxMjY5OF0sXCJtYXBwZWRcIixbMjAwNTddXSxbWzEyNjk5LDEyNjk5XSxcIm1hcHBlZFwiLFsxOTk5M11dLFtbMTI3MDAsMTI3MDBdLFwibWFwcGVkXCIsWzE5OTY5XV0sW1sxMjcwMSwxMjcwMV0sXCJtYXBwZWRcIixbMjI4MjVdXSxbWzEyNzAyLDEyNzAyXSxcIm1hcHBlZFwiLFsyMjMyMF1dLFtbMTI3MDMsMTI3MDNdLFwibWFwcGVkXCIsWzIwMTU0XV0sW1sxMjcwNCwxMjcyN10sXCJ2YWxpZFwiXSxbWzEyNzI4LDEyNzMwXSxcInZhbGlkXCJdLFtbMTI3MzEsMTI3MzVdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNzM2LDEyNzUxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc1MiwxMjc3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3NzIsMTI3ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNzg0LDEyNzk5XSxcInZhbGlkXCJdLFtbMTI4MDAsMTI4MDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzUyLDQxXV0sW1sxMjgwMSwxMjgwMV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNTQsNDFdXSxbWzEyODAyLDEyODAyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM1NSw0MV1dLFtbMTI4MDMsMTI4MDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzU3LDQxXV0sW1sxMjgwNCwxMjgwNF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNTgsNDFdXSxbWzEyODA1LDEyODA1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM1OSw0MV1dLFtbMTI4MDYsMTI4MDZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzYxLDQxXV0sW1sxMjgwNywxMjgwN10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNjMsNDFdXSxbWzEyODA4LDEyODA4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM2NCw0MV1dLFtbMTI4MDksMTI4MDldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzY2LDQxXV0sW1sxMjgxMCwxMjgxMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNjcsNDFdXSxbWzEyODExLDEyODExXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM2OCw0MV1dLFtbMTI4MTIsMTI4MTJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzY5LDQxXV0sW1sxMjgxMywxMjgxM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNzAsNDFdXSxbWzEyODE0LDEyODE0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDQwMzIsNDFdXSxbWzEyODE1LDEyODE1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDUyMDgsNDFdXSxbWzEyODE2LDEyODE2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDU3OTYsNDFdXSxbWzEyODE3LDEyODE3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDY5NzIsNDFdXSxbWzEyODE4LDEyODE4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDc1NjAsNDFdXSxbWzEyODE5LDEyODE5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDgxNDgsNDFdXSxbWzEyODIwLDEyODIwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDkzMjQsNDFdXSxbWzEyODIxLDEyODIxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTA1MDAsNDFdXSxbWzEyODIyLDEyODIyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTEwODgsNDFdXSxbWzEyODIzLDEyODIzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTIyNjQsNDFdXSxbWzEyODI0LDEyODI0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTI4NTIsNDFdXSxbWzEyODI1LDEyODI1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTM0NDAsNDFdXSxbWzEyODI2LDEyODI2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTQwMjgsNDFdXSxbWzEyODI3LDEyODI3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTQ2MTYsNDFdXSxbWzEyODI4LDEyODI4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTE0NTIsNDFdXSxbWzEyODI5LDEyODI5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTA3MjQsNTEyMDQsNDFdXSxbWzEyODMwLDEyODMwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTA3MjQsNTQ5ODAsNDFdXSxbWzEyODMxLDEyODMxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjgzMiwxMjgzMl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDE5OTY4LDQxXV0sW1sxMjgzMywxMjgzM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMTA4LDQxXV0sW1sxMjgzNCwxMjgzNF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDE5OTc3LDQxXV0sW1sxMjgzNSwxMjgzNV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIyMjM1LDQxXV0sW1sxMjgzNiwxMjgzNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMTE2LDQxXV0sW1sxMjgzNywxMjgzN10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwODQ1LDQxXV0sW1sxMjgzOCwxMjgzOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDE5OTcxLDQxXV0sW1sxMjgzOSwxMjgzOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwODQzLDQxXV0sW1sxMjg0MCwxMjg0MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMDYxLDQxXV0sW1sxMjg0MSwxMjg0MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxMzEzLDQxXV0sW1sxMjg0MiwxMjg0Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2Mzc2LDQxXV0sW1sxMjg0MywxMjg0M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI4Nzc5LDQxXV0sW1sxMjg0NCwxMjg0NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI3NzAwLDQxXV0sW1sxMjg0NSwxMjg0NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2NDA4LDQxXV0sW1sxMjg0NiwxMjg0Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDM3MzI5LDQxXV0sW1sxMjg0NywxMjg0N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIyMzAzLDQxXV0sW1sxMjg0OCwxMjg0OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2MDg1LDQxXV0sW1sxMjg0OSwxMjg0OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2NjY2LDQxXV0sW1sxMjg1MCwxMjg1MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2Mzc3LDQxXV0sW1sxMjg1MSwxMjg1MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMxMDM4LDQxXV0sW1sxMjg1MiwxMjg1Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxNTE3LDQxXV0sW1sxMjg1MywxMjg1M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI5MzA1LDQxXV0sW1sxMjg1NCwxMjg1NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDM2MDAxLDQxXV0sW1sxMjg1NSwxMjg1NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMxMDY5LDQxXV0sW1sxMjg1NiwxMjg1Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxMTcyLDQxXV0sW1sxMjg1NywxMjg1N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMTk1LDQxXV0sW1sxMjg1OCwxMjg1OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxNjI4LDQxXV0sW1sxMjg1OSwxMjg1OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIzMzk4LDQxXV0sW1sxMjg2MCwxMjg2MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMwNDM1LDQxXV0sW1sxMjg2MSwxMjg2MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMjI1LDQxXV0sW1sxMjg2MiwxMjg2Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDM2MDM5LDQxXV0sW1sxMjg2MywxMjg2M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxMzMyLDQxXV0sW1sxMjg2NCwxMjg2NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMxMDg1LDQxXV0sW1sxMjg2NSwxMjg2NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMjQxLDQxXV0sW1sxMjg2NiwxMjg2Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMzMjU4LDQxXV0sW1sxMjg2NywxMjg2N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMzMjY3LDQxXV0sW1sxMjg2OCwxMjg2OF0sXCJtYXBwZWRcIixbMjE4MzldXSxbWzEyODY5LDEyODY5XSxcIm1hcHBlZFwiLFsyNDE4OF1dLFtbMTI4NzAsMTI4NzBdLFwibWFwcGVkXCIsWzI1OTkxXV0sW1sxMjg3MSwxMjg3MV0sXCJtYXBwZWRcIixbMzE2MzFdXSxbWzEyODcyLDEyODc5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg4MCwxMjg4MF0sXCJtYXBwZWRcIixbMTEyLDExNiwxMDFdXSxbWzEyODgxLDEyODgxXSxcIm1hcHBlZFwiLFs1MCw0OV1dLFtbMTI4ODIsMTI4ODJdLFwibWFwcGVkXCIsWzUwLDUwXV0sW1sxMjg4MywxMjg4M10sXCJtYXBwZWRcIixbNTAsNTFdXSxbWzEyODg0LDEyODg0XSxcIm1hcHBlZFwiLFs1MCw1Ml1dLFtbMTI4ODUsMTI4ODVdLFwibWFwcGVkXCIsWzUwLDUzXV0sW1sxMjg4NiwxMjg4Nl0sXCJtYXBwZWRcIixbNTAsNTRdXSxbWzEyODg3LDEyODg3XSxcIm1hcHBlZFwiLFs1MCw1NV1dLFtbMTI4ODgsMTI4ODhdLFwibWFwcGVkXCIsWzUwLDU2XV0sW1sxMjg4OSwxMjg4OV0sXCJtYXBwZWRcIixbNTAsNTddXSxbWzEyODkwLDEyODkwXSxcIm1hcHBlZFwiLFs1MSw0OF1dLFtbMTI4OTEsMTI4OTFdLFwibWFwcGVkXCIsWzUxLDQ5XV0sW1sxMjg5MiwxMjg5Ml0sXCJtYXBwZWRcIixbNTEsNTBdXSxbWzEyODkzLDEyODkzXSxcIm1hcHBlZFwiLFs1MSw1MV1dLFtbMTI4OTQsMTI4OTRdLFwibWFwcGVkXCIsWzUxLDUyXV0sW1sxMjg5NSwxMjg5NV0sXCJtYXBwZWRcIixbNTEsNTNdXSxbWzEyODk2LDEyODk2XSxcIm1hcHBlZFwiLFs0MzUyXV0sW1sxMjg5NywxMjg5N10sXCJtYXBwZWRcIixbNDM1NF1dLFtbMTI4OTgsMTI4OThdLFwibWFwcGVkXCIsWzQzNTVdXSxbWzEyODk5LDEyODk5XSxcIm1hcHBlZFwiLFs0MzU3XV0sW1sxMjkwMCwxMjkwMF0sXCJtYXBwZWRcIixbNDM1OF1dLFtbMTI5MDEsMTI5MDFdLFwibWFwcGVkXCIsWzQzNTldXSxbWzEyOTAyLDEyOTAyXSxcIm1hcHBlZFwiLFs0MzYxXV0sW1sxMjkwMywxMjkwM10sXCJtYXBwZWRcIixbNDM2M11dLFtbMTI5MDQsMTI5MDRdLFwibWFwcGVkXCIsWzQzNjRdXSxbWzEyOTA1LDEyOTA1XSxcIm1hcHBlZFwiLFs0MzY2XV0sW1sxMjkwNiwxMjkwNl0sXCJtYXBwZWRcIixbNDM2N11dLFtbMTI5MDcsMTI5MDddLFwibWFwcGVkXCIsWzQzNjhdXSxbWzEyOTA4LDEyOTA4XSxcIm1hcHBlZFwiLFs0MzY5XV0sW1sxMjkwOSwxMjkwOV0sXCJtYXBwZWRcIixbNDM3MF1dLFtbMTI5MTAsMTI5MTBdLFwibWFwcGVkXCIsWzQ0MDMyXV0sW1sxMjkxMSwxMjkxMV0sXCJtYXBwZWRcIixbNDUyMDhdXSxbWzEyOTEyLDEyOTEyXSxcIm1hcHBlZFwiLFs0NTc5Nl1dLFtbMTI5MTMsMTI5MTNdLFwibWFwcGVkXCIsWzQ2OTcyXV0sW1sxMjkxNCwxMjkxNF0sXCJtYXBwZWRcIixbNDc1NjBdXSxbWzEyOTE1LDEyOTE1XSxcIm1hcHBlZFwiLFs0ODE0OF1dLFtbMTI5MTYsMTI5MTZdLFwibWFwcGVkXCIsWzQ5MzI0XV0sW1sxMjkxNywxMjkxN10sXCJtYXBwZWRcIixbNTA1MDBdXSxbWzEyOTE4LDEyOTE4XSxcIm1hcHBlZFwiLFs1MTA4OF1dLFtbMTI5MTksMTI5MTldLFwibWFwcGVkXCIsWzUyMjY0XV0sW1sxMjkyMCwxMjkyMF0sXCJtYXBwZWRcIixbNTI4NTJdXSxbWzEyOTIxLDEyOTIxXSxcIm1hcHBlZFwiLFs1MzQ0MF1dLFtbMTI5MjIsMTI5MjJdLFwibWFwcGVkXCIsWzU0MDI4XV0sW1sxMjkyMywxMjkyM10sXCJtYXBwZWRcIixbNTQ2MTZdXSxbWzEyOTI0LDEyOTI0XSxcIm1hcHBlZFwiLFs1MjI4MCw0NDI1Nl1dLFtbMTI5MjUsMTI5MjVdLFwibWFwcGVkXCIsWzUxNDUyLDUxMDMyXV0sW1sxMjkyNiwxMjkyNl0sXCJtYXBwZWRcIixbNTA4NjRdXSxbWzEyOTI3LDEyOTI3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjkyOCwxMjkyOF0sXCJtYXBwZWRcIixbMTk5NjhdXSxbWzEyOTI5LDEyOTI5XSxcIm1hcHBlZFwiLFsyMDEwOF1dLFtbMTI5MzAsMTI5MzBdLFwibWFwcGVkXCIsWzE5OTc3XV0sW1sxMjkzMSwxMjkzMV0sXCJtYXBwZWRcIixbMjIyMzVdXSxbWzEyOTMyLDEyOTMyXSxcIm1hcHBlZFwiLFsyMDExNl1dLFtbMTI5MzMsMTI5MzNdLFwibWFwcGVkXCIsWzIwODQ1XV0sW1sxMjkzNCwxMjkzNF0sXCJtYXBwZWRcIixbMTk5NzFdXSxbWzEyOTM1LDEyOTM1XSxcIm1hcHBlZFwiLFsyMDg0M11dLFtbMTI5MzYsMTI5MzZdLFwibWFwcGVkXCIsWzIwMDYxXV0sW1sxMjkzNywxMjkzN10sXCJtYXBwZWRcIixbMjEzMTNdXSxbWzEyOTM4LDEyOTM4XSxcIm1hcHBlZFwiLFsyNjM3Nl1dLFtbMTI5MzksMTI5MzldLFwibWFwcGVkXCIsWzI4Nzc5XV0sW1sxMjk0MCwxMjk0MF0sXCJtYXBwZWRcIixbMjc3MDBdXSxbWzEyOTQxLDEyOTQxXSxcIm1hcHBlZFwiLFsyNjQwOF1dLFtbMTI5NDIsMTI5NDJdLFwibWFwcGVkXCIsWzM3MzI5XV0sW1sxMjk0MywxMjk0M10sXCJtYXBwZWRcIixbMjIzMDNdXSxbWzEyOTQ0LDEyOTQ0XSxcIm1hcHBlZFwiLFsyNjA4NV1dLFtbMTI5NDUsMTI5NDVdLFwibWFwcGVkXCIsWzI2NjY2XV0sW1sxMjk0NiwxMjk0Nl0sXCJtYXBwZWRcIixbMjYzNzddXSxbWzEyOTQ3LDEyOTQ3XSxcIm1hcHBlZFwiLFszMTAzOF1dLFtbMTI5NDgsMTI5NDhdLFwibWFwcGVkXCIsWzIxNTE3XV0sW1sxMjk0OSwxMjk0OV0sXCJtYXBwZWRcIixbMjkzMDVdXSxbWzEyOTUwLDEyOTUwXSxcIm1hcHBlZFwiLFszNjAwMV1dLFtbMTI5NTEsMTI5NTFdLFwibWFwcGVkXCIsWzMxMDY5XV0sW1sxMjk1MiwxMjk1Ml0sXCJtYXBwZWRcIixbMjExNzJdXSxbWzEyOTUzLDEyOTUzXSxcIm1hcHBlZFwiLFszMTE5Ml1dLFtbMTI5NTQsMTI5NTRdLFwibWFwcGVkXCIsWzMwMDA3XV0sW1sxMjk1NSwxMjk1NV0sXCJtYXBwZWRcIixbMjI4OTldXSxbWzEyOTU2LDEyOTU2XSxcIm1hcHBlZFwiLFszNjk2OV1dLFtbMTI5NTcsMTI5NTddLFwibWFwcGVkXCIsWzIwNzc4XV0sW1sxMjk1OCwxMjk1OF0sXCJtYXBwZWRcIixbMjEzNjBdXSxbWzEyOTU5LDEyOTU5XSxcIm1hcHBlZFwiLFsyNzg4MF1dLFtbMTI5NjAsMTI5NjBdLFwibWFwcGVkXCIsWzM4OTE3XV0sW1sxMjk2MSwxMjk2MV0sXCJtYXBwZWRcIixbMjAyNDFdXSxbWzEyOTYyLDEyOTYyXSxcIm1hcHBlZFwiLFsyMDg4OV1dLFtbMTI5NjMsMTI5NjNdLFwibWFwcGVkXCIsWzI3NDkxXV0sW1sxMjk2NCwxMjk2NF0sXCJtYXBwZWRcIixbMTk5NzhdXSxbWzEyOTY1LDEyOTY1XSxcIm1hcHBlZFwiLFsyMDAxM11dLFtbMTI5NjYsMTI5NjZdLFwibWFwcGVkXCIsWzE5OTc5XV0sW1sxMjk2NywxMjk2N10sXCJtYXBwZWRcIixbMjQwMzhdXSxbWzEyOTY4LDEyOTY4XSxcIm1hcHBlZFwiLFsyMTQ5MV1dLFtbMTI5NjksMTI5NjldLFwibWFwcGVkXCIsWzIxMzA3XV0sW1sxMjk3MCwxMjk3MF0sXCJtYXBwZWRcIixbMjM0NDddXSxbWzEyOTcxLDEyOTcxXSxcIm1hcHBlZFwiLFsyMzM5OF1dLFtbMTI5NzIsMTI5NzJdLFwibWFwcGVkXCIsWzMwNDM1XV0sW1sxMjk3MywxMjk3M10sXCJtYXBwZWRcIixbMjAyMjVdXSxbWzEyOTc0LDEyOTc0XSxcIm1hcHBlZFwiLFszNjAzOV1dLFtbMTI5NzUsMTI5NzVdLFwibWFwcGVkXCIsWzIxMzMyXV0sW1sxMjk3NiwxMjk3Nl0sXCJtYXBwZWRcIixbMjI4MTJdXSxbWzEyOTc3LDEyOTc3XSxcIm1hcHBlZFwiLFs1MSw1NF1dLFtbMTI5NzgsMTI5NzhdLFwibWFwcGVkXCIsWzUxLDU1XV0sW1sxMjk3OSwxMjk3OV0sXCJtYXBwZWRcIixbNTEsNTZdXSxbWzEyOTgwLDEyOTgwXSxcIm1hcHBlZFwiLFs1MSw1N11dLFtbMTI5ODEsMTI5ODFdLFwibWFwcGVkXCIsWzUyLDQ4XV0sW1sxMjk4MiwxMjk4Ml0sXCJtYXBwZWRcIixbNTIsNDldXSxbWzEyOTgzLDEyOTgzXSxcIm1hcHBlZFwiLFs1Miw1MF1dLFtbMTI5ODQsMTI5ODRdLFwibWFwcGVkXCIsWzUyLDUxXV0sW1sxMjk4NSwxMjk4NV0sXCJtYXBwZWRcIixbNTIsNTJdXSxbWzEyOTg2LDEyOTg2XSxcIm1hcHBlZFwiLFs1Miw1M11dLFtbMTI5ODcsMTI5ODddLFwibWFwcGVkXCIsWzUyLDU0XV0sW1sxMjk4OCwxMjk4OF0sXCJtYXBwZWRcIixbNTIsNTVdXSxbWzEyOTg5LDEyOTg5XSxcIm1hcHBlZFwiLFs1Miw1Nl1dLFtbMTI5OTAsMTI5OTBdLFwibWFwcGVkXCIsWzUyLDU3XV0sW1sxMjk5MSwxMjk5MV0sXCJtYXBwZWRcIixbNTMsNDhdXSxbWzEyOTkyLDEyOTkyXSxcIm1hcHBlZFwiLFs0OSwyNjM3Nl1dLFtbMTI5OTMsMTI5OTNdLFwibWFwcGVkXCIsWzUwLDI2Mzc2XV0sW1sxMjk5NCwxMjk5NF0sXCJtYXBwZWRcIixbNTEsMjYzNzZdXSxbWzEyOTk1LDEyOTk1XSxcIm1hcHBlZFwiLFs1MiwyNjM3Nl1dLFtbMTI5OTYsMTI5OTZdLFwibWFwcGVkXCIsWzUzLDI2Mzc2XV0sW1sxMjk5NywxMjk5N10sXCJtYXBwZWRcIixbNTQsMjYzNzZdXSxbWzEyOTk4LDEyOTk4XSxcIm1hcHBlZFwiLFs1NSwyNjM3Nl1dLFtbMTI5OTksMTI5OTldLFwibWFwcGVkXCIsWzU2LDI2Mzc2XV0sW1sxMzAwMCwxMzAwMF0sXCJtYXBwZWRcIixbNTcsMjYzNzZdXSxbWzEzMDAxLDEzMDAxXSxcIm1hcHBlZFwiLFs0OSw0OCwyNjM3Nl1dLFtbMTMwMDIsMTMwMDJdLFwibWFwcGVkXCIsWzQ5LDQ5LDI2Mzc2XV0sW1sxMzAwMywxMzAwM10sXCJtYXBwZWRcIixbNDksNTAsMjYzNzZdXSxbWzEzMDA0LDEzMDA0XSxcIm1hcHBlZFwiLFsxMDQsMTAzXV0sW1sxMzAwNSwxMzAwNV0sXCJtYXBwZWRcIixbMTAxLDExNCwxMDNdXSxbWzEzMDA2LDEzMDA2XSxcIm1hcHBlZFwiLFsxMDEsMTE4XV0sW1sxMzAwNywxMzAwN10sXCJtYXBwZWRcIixbMTA4LDExNiwxMDBdXSxbWzEzMDA4LDEzMDA4XSxcIm1hcHBlZFwiLFsxMjQ1MF1dLFtbMTMwMDksMTMwMDldLFwibWFwcGVkXCIsWzEyNDUyXV0sW1sxMzAxMCwxMzAxMF0sXCJtYXBwZWRcIixbMTI0NTRdXSxbWzEzMDExLDEzMDExXSxcIm1hcHBlZFwiLFsxMjQ1Nl1dLFtbMTMwMTIsMTMwMTJdLFwibWFwcGVkXCIsWzEyNDU4XV0sW1sxMzAxMywxMzAxM10sXCJtYXBwZWRcIixbMTI0NTldXSxbWzEzMDE0LDEzMDE0XSxcIm1hcHBlZFwiLFsxMjQ2MV1dLFtbMTMwMTUsMTMwMTVdLFwibWFwcGVkXCIsWzEyNDYzXV0sW1sxMzAxNiwxMzAxNl0sXCJtYXBwZWRcIixbMTI0NjVdXSxbWzEzMDE3LDEzMDE3XSxcIm1hcHBlZFwiLFsxMjQ2N11dLFtbMTMwMTgsMTMwMThdLFwibWFwcGVkXCIsWzEyNDY5XV0sW1sxMzAxOSwxMzAxOV0sXCJtYXBwZWRcIixbMTI0NzFdXSxbWzEzMDIwLDEzMDIwXSxcIm1hcHBlZFwiLFsxMjQ3M11dLFtbMTMwMjEsMTMwMjFdLFwibWFwcGVkXCIsWzEyNDc1XV0sW1sxMzAyMiwxMzAyMl0sXCJtYXBwZWRcIixbMTI0NzddXSxbWzEzMDIzLDEzMDIzXSxcIm1hcHBlZFwiLFsxMjQ3OV1dLFtbMTMwMjQsMTMwMjRdLFwibWFwcGVkXCIsWzEyNDgxXV0sW1sxMzAyNSwxMzAyNV0sXCJtYXBwZWRcIixbMTI0ODRdXSxbWzEzMDI2LDEzMDI2XSxcIm1hcHBlZFwiLFsxMjQ4Nl1dLFtbMTMwMjcsMTMwMjddLFwibWFwcGVkXCIsWzEyNDg4XV0sW1sxMzAyOCwxMzAyOF0sXCJtYXBwZWRcIixbMTI0OTBdXSxbWzEzMDI5LDEzMDI5XSxcIm1hcHBlZFwiLFsxMjQ5MV1dLFtbMTMwMzAsMTMwMzBdLFwibWFwcGVkXCIsWzEyNDkyXV0sW1sxMzAzMSwxMzAzMV0sXCJtYXBwZWRcIixbMTI0OTNdXSxbWzEzMDMyLDEzMDMyXSxcIm1hcHBlZFwiLFsxMjQ5NF1dLFtbMTMwMzMsMTMwMzNdLFwibWFwcGVkXCIsWzEyNDk1XV0sW1sxMzAzNCwxMzAzNF0sXCJtYXBwZWRcIixbMTI0OThdXSxbWzEzMDM1LDEzMDM1XSxcIm1hcHBlZFwiLFsxMjUwMV1dLFtbMTMwMzYsMTMwMzZdLFwibWFwcGVkXCIsWzEyNTA0XV0sW1sxMzAzNywxMzAzN10sXCJtYXBwZWRcIixbMTI1MDddXSxbWzEzMDM4LDEzMDM4XSxcIm1hcHBlZFwiLFsxMjUxMF1dLFtbMTMwMzksMTMwMzldLFwibWFwcGVkXCIsWzEyNTExXV0sW1sxMzA0MCwxMzA0MF0sXCJtYXBwZWRcIixbMTI1MTJdXSxbWzEzMDQxLDEzMDQxXSxcIm1hcHBlZFwiLFsxMjUxM11dLFtbMTMwNDIsMTMwNDJdLFwibWFwcGVkXCIsWzEyNTE0XV0sW1sxMzA0MywxMzA0M10sXCJtYXBwZWRcIixbMTI1MTZdXSxbWzEzMDQ0LDEzMDQ0XSxcIm1hcHBlZFwiLFsxMjUxOF1dLFtbMTMwNDUsMTMwNDVdLFwibWFwcGVkXCIsWzEyNTIwXV0sW1sxMzA0NiwxMzA0Nl0sXCJtYXBwZWRcIixbMTI1MjFdXSxbWzEzMDQ3LDEzMDQ3XSxcIm1hcHBlZFwiLFsxMjUyMl1dLFtbMTMwNDgsMTMwNDhdLFwibWFwcGVkXCIsWzEyNTIzXV0sW1sxMzA0OSwxMzA0OV0sXCJtYXBwZWRcIixbMTI1MjRdXSxbWzEzMDUwLDEzMDUwXSxcIm1hcHBlZFwiLFsxMjUyNV1dLFtbMTMwNTEsMTMwNTFdLFwibWFwcGVkXCIsWzEyNTI3XV0sW1sxMzA1MiwxMzA1Ml0sXCJtYXBwZWRcIixbMTI1MjhdXSxbWzEzMDUzLDEzMDUzXSxcIm1hcHBlZFwiLFsxMjUyOV1dLFtbMTMwNTQsMTMwNTRdLFwibWFwcGVkXCIsWzEyNTMwXV0sW1sxMzA1NSwxMzA1NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTMwNTYsMTMwNTZdLFwibWFwcGVkXCIsWzEyNDUwLDEyNDk3LDEyNTQwLDEyNDg4XV0sW1sxMzA1NywxMzA1N10sXCJtYXBwZWRcIixbMTI0NTAsMTI1MjMsMTI1MDEsMTI0NDldXSxbWzEzMDU4LDEzMDU4XSxcIm1hcHBlZFwiLFsxMjQ1MCwxMjUzMSwxMjUwNiwxMjQ1MF1dLFtbMTMwNTksMTMwNTldLFwibWFwcGVkXCIsWzEyNDUwLDEyNTQwLDEyNTIzXV0sW1sxMzA2MCwxMzA2MF0sXCJtYXBwZWRcIixbMTI0NTIsMTI0OTEsMTI1MzEsMTI0NjRdXSxbWzEzMDYxLDEzMDYxXSxcIm1hcHBlZFwiLFsxMjQ1MiwxMjUzMSwxMjQ4MV1dLFtbMTMwNjIsMTMwNjJdLFwibWFwcGVkXCIsWzEyNDU0LDEyNDU3LDEyNTMxXV0sW1sxMzA2MywxMzA2M10sXCJtYXBwZWRcIixbMTI0NTYsMTI0NzMsMTI0NjMsMTI1NDAsMTI0ODldXSxbWzEzMDY0LDEzMDY0XSxcIm1hcHBlZFwiLFsxMjQ1NiwxMjU0MCwxMjQ1OSwxMjU0MF1dLFtbMTMwNjUsMTMwNjVdLFwibWFwcGVkXCIsWzEyNDU4LDEyNTMxLDEyNDczXV0sW1sxMzA2NiwxMzA2Nl0sXCJtYXBwZWRcIixbMTI0NTgsMTI1NDAsMTI1MTJdXSxbWzEzMDY3LDEzMDY3XSxcIm1hcHBlZFwiLFsxMjQ1OSwxMjQ1MiwxMjUyMl1dLFtbMTMwNjgsMTMwNjhdLFwibWFwcGVkXCIsWzEyNDU5LDEyNTIxLDEyNDgzLDEyNDg4XV0sW1sxMzA2OSwxMzA2OV0sXCJtYXBwZWRcIixbMTI0NTksMTI1MjUsMTI1MjIsMTI1NDBdXSxbWzEzMDcwLDEzMDcwXSxcIm1hcHBlZFwiLFsxMjQ2MCwxMjUyNSwxMjUzMV1dLFtbMTMwNzEsMTMwNzFdLFwibWFwcGVkXCIsWzEyNDYwLDEyNTMxLDEyNTEwXV0sW1sxMzA3MiwxMzA3Ml0sXCJtYXBwZWRcIixbMTI0NjIsMTI0NjBdXSxbWzEzMDczLDEzMDczXSxcIm1hcHBlZFwiLFsxMjQ2MiwxMjQ5MSwxMjU0MF1dLFtbMTMwNzQsMTMwNzRdLFwibWFwcGVkXCIsWzEyNDYxLDEyNTE3LDEyNTIyLDEyNTQwXV0sW1sxMzA3NSwxMzA3NV0sXCJtYXBwZWRcIixbMTI0NjIsMTI1MjMsMTI0ODAsMTI1NDBdXSxbWzEzMDc2LDEzMDc2XSxcIm1hcHBlZFwiLFsxMjQ2MSwxMjUyNV1dLFtbMTMwNzcsMTMwNzddLFwibWFwcGVkXCIsWzEyNDYxLDEyNTI1LDEyNDY0LDEyNTIxLDEyNTEyXV0sW1sxMzA3OCwxMzA3OF0sXCJtYXBwZWRcIixbMTI0NjEsMTI1MjUsMTI1MTMsMTI1NDAsMTI0ODgsMTI1MjNdXSxbWzEzMDc5LDEzMDc5XSxcIm1hcHBlZFwiLFsxMjQ2MSwxMjUyNSwxMjUyNywxMjQ4MywxMjQ4OF1dLFtbMTMwODAsMTMwODBdLFwibWFwcGVkXCIsWzEyNDY0LDEyNTIxLDEyNTEyXV0sW1sxMzA4MSwxMzA4MV0sXCJtYXBwZWRcIixbMTI0NjQsMTI1MjEsMTI1MTIsMTI0ODgsMTI1MzFdXSxbWzEzMDgyLDEzMDgyXSxcIm1hcHBlZFwiLFsxMjQ2MywxMjUyMywxMjQ3NiwxMjQ1MiwxMjUyNV1dLFtbMTMwODMsMTMwODNdLFwibWFwcGVkXCIsWzEyNDYzLDEyNTI1LDEyNTQwLDEyNDkzXV0sW1sxMzA4NCwxMzA4NF0sXCJtYXBwZWRcIixbMTI0NjUsMTI1NDAsMTI0NzNdXSxbWzEzMDg1LDEzMDg1XSxcIm1hcHBlZFwiLFsxMjQ2NywxMjUyMywxMjQ5MF1dLFtbMTMwODYsMTMwODZdLFwibWFwcGVkXCIsWzEyNDY3LDEyNTQwLDEyNTA5XV0sW1sxMzA4NywxMzA4N10sXCJtYXBwZWRcIixbMTI0NjksMTI0NTIsMTI0NjMsMTI1MjNdXSxbWzEzMDg4LDEzMDg4XSxcIm1hcHBlZFwiLFsxMjQ2OSwxMjUzMSwxMjQ4MSwxMjU0MCwxMjUxMl1dLFtbMTMwODksMTMwODldLFwibWFwcGVkXCIsWzEyNDcxLDEyNTIyLDEyNTMxLDEyNDY0XV0sW1sxMzA5MCwxMzA5MF0sXCJtYXBwZWRcIixbMTI0NzUsMTI1MzEsMTI0ODFdXSxbWzEzMDkxLDEzMDkxXSxcIm1hcHBlZFwiLFsxMjQ3NSwxMjUzMSwxMjQ4OF1dLFtbMTMwOTIsMTMwOTJdLFwibWFwcGVkXCIsWzEyNDgwLDEyNTQwLDEyNDczXV0sW1sxMzA5MywxMzA5M10sXCJtYXBwZWRcIixbMTI0ODcsMTI0NzFdXSxbWzEzMDk0LDEzMDk0XSxcIm1hcHBlZFwiLFsxMjQ4OSwxMjUyM11dLFtbMTMwOTUsMTMwOTVdLFwibWFwcGVkXCIsWzEyNDg4LDEyNTMxXV0sW1sxMzA5NiwxMzA5Nl0sXCJtYXBwZWRcIixbMTI0OTAsMTI0OTRdXSxbWzEzMDk3LDEzMDk3XSxcIm1hcHBlZFwiLFsxMjQ5NCwxMjQ4MywxMjQ4OF1dLFtbMTMwOTgsMTMwOThdLFwibWFwcGVkXCIsWzEyNDk1LDEyNDUyLDEyNDg0XV0sW1sxMzA5OSwxMzA5OV0sXCJtYXBwZWRcIixbMTI0OTcsMTI1NDAsMTI0NzUsMTI1MzEsMTI0ODhdXSxbWzEzMTAwLDEzMTAwXSxcIm1hcHBlZFwiLFsxMjQ5NywxMjU0MCwxMjQ4NF1dLFtbMTMxMDEsMTMxMDFdLFwibWFwcGVkXCIsWzEyNDk2LDEyNTQwLDEyNTI0LDEyNTIzXV0sW1sxMzEwMiwxMzEwMl0sXCJtYXBwZWRcIixbMTI1MDAsMTI0NTAsMTI0NzMsMTI0ODgsMTI1MjNdXSxbWzEzMTAzLDEzMTAzXSxcIm1hcHBlZFwiLFsxMjUwMCwxMjQ2MywxMjUyM11dLFtbMTMxMDQsMTMxMDRdLFwibWFwcGVkXCIsWzEyNTAwLDEyNDY3XV0sW1sxMzEwNSwxMzEwNV0sXCJtYXBwZWRcIixbMTI0OTksMTI1MjNdXSxbWzEzMTA2LDEzMTA2XSxcIm1hcHBlZFwiLFsxMjUwMSwxMjQ0OSwxMjUyMSwxMjQ4MywxMjQ4OV1dLFtbMTMxMDcsMTMxMDddLFwibWFwcGVkXCIsWzEyNTAxLDEyNDUxLDEyNTQwLDEyNDg4XV0sW1sxMzEwOCwxMzEwOF0sXCJtYXBwZWRcIixbMTI1MDIsMTI0ODMsMTI0NzEsMTI0NTUsMTI1MjNdXSxbWzEzMTA5LDEzMTA5XSxcIm1hcHBlZFwiLFsxMjUwMSwxMjUyMSwxMjUzMV1dLFtbMTMxMTAsMTMxMTBdLFwibWFwcGVkXCIsWzEyNTA0LDEyNDYzLDEyNDc5LDEyNTQwLDEyNTIzXV0sW1sxMzExMSwxMzExMV0sXCJtYXBwZWRcIixbMTI1MDYsMTI0NzddXSxbWzEzMTEyLDEzMTEyXSxcIm1hcHBlZFwiLFsxMjUwNiwxMjQ5MSwxMjQ5OF1dLFtbMTMxMTMsMTMxMTNdLFwibWFwcGVkXCIsWzEyNTA0LDEyNTIzLDEyNDg0XV0sW1sxMzExNCwxMzExNF0sXCJtYXBwZWRcIixbMTI1MDYsMTI1MzEsMTI0NzNdXSxbWzEzMTE1LDEzMTE1XSxcIm1hcHBlZFwiLFsxMjUwNiwxMjU0MCwxMjQ3Ml1dLFtbMTMxMTYsMTMxMTZdLFwibWFwcGVkXCIsWzEyNTA1LDEyNTQwLDEyNDc5XV0sW1sxMzExNywxMzExN10sXCJtYXBwZWRcIixbMTI1MDksMTI0NTIsMTI1MzEsMTI0ODhdXSxbWzEzMTE4LDEzMTE4XSxcIm1hcHBlZFwiLFsxMjUwOCwxMjUyMywxMjQ4OF1dLFtbMTMxMTksMTMxMTldLFwibWFwcGVkXCIsWzEyNTA3LDEyNTMxXV0sW1sxMzEyMCwxMzEyMF0sXCJtYXBwZWRcIixbMTI1MDksMTI1MzEsMTI0ODldXSxbWzEzMTIxLDEzMTIxXSxcIm1hcHBlZFwiLFsxMjUwNywxMjU0MCwxMjUyM11dLFtbMTMxMjIsMTMxMjJdLFwibWFwcGVkXCIsWzEyNTA3LDEyNTQwLDEyNTMxXV0sW1sxMzEyMywxMzEyM10sXCJtYXBwZWRcIixbMTI1MTAsMTI0NTIsMTI0NjMsMTI1MjVdXSxbWzEzMTI0LDEzMTI0XSxcIm1hcHBlZFwiLFsxMjUxMCwxMjQ1MiwxMjUyM11dLFtbMTMxMjUsMTMxMjVdLFwibWFwcGVkXCIsWzEyNTEwLDEyNDgzLDEyNDk1XV0sW1sxMzEyNiwxMzEyNl0sXCJtYXBwZWRcIixbMTI1MTAsMTI1MjMsMTI0NjNdXSxbWzEzMTI3LDEzMTI3XSxcIm1hcHBlZFwiLFsxMjUxMCwxMjUzMSwxMjQ3MSwxMjUxOSwxMjUzMV1dLFtbMTMxMjgsMTMxMjhdLFwibWFwcGVkXCIsWzEyNTExLDEyNDYzLDEyNTI1LDEyNTMxXV0sW1sxMzEyOSwxMzEyOV0sXCJtYXBwZWRcIixbMTI1MTEsMTI1MjJdXSxbWzEzMTMwLDEzMTMwXSxcIm1hcHBlZFwiLFsxMjUxMSwxMjUyMiwxMjQ5NiwxMjU0MCwxMjUyM11dLFtbMTMxMzEsMTMxMzFdLFwibWFwcGVkXCIsWzEyNTEzLDEyNDYwXV0sW1sxMzEzMiwxMzEzMl0sXCJtYXBwZWRcIixbMTI1MTMsMTI0NjAsMTI0ODgsMTI1MzFdXSxbWzEzMTMzLDEzMTMzXSxcIm1hcHBlZFwiLFsxMjUxMywxMjU0MCwxMjQ4OCwxMjUyM11dLFtbMTMxMzQsMTMxMzRdLFwibWFwcGVkXCIsWzEyNTE2LDEyNTQwLDEyNDg5XV0sW1sxMzEzNSwxMzEzNV0sXCJtYXBwZWRcIixbMTI1MTYsMTI1NDAsMTI1MjNdXSxbWzEzMTM2LDEzMTM2XSxcIm1hcHBlZFwiLFsxMjUxOCwxMjQ1MCwxMjUzMV1dLFtbMTMxMzcsMTMxMzddLFwibWFwcGVkXCIsWzEyNTIyLDEyNDgzLDEyNDg4LDEyNTIzXV0sW1sxMzEzOCwxMzEzOF0sXCJtYXBwZWRcIixbMTI1MjIsMTI1MjFdXSxbWzEzMTM5LDEzMTM5XSxcIm1hcHBlZFwiLFsxMjUyMywxMjUwMCwxMjU0MF1dLFtbMTMxNDAsMTMxNDBdLFwibWFwcGVkXCIsWzEyNTIzLDEyNTQwLDEyNTAyLDEyNTIzXV0sW1sxMzE0MSwxMzE0MV0sXCJtYXBwZWRcIixbMTI1MjQsMTI1MTJdXSxbWzEzMTQyLDEzMTQyXSxcIm1hcHBlZFwiLFsxMjUyNCwxMjUzMSwxMjQ4OCwxMjQ2NiwxMjUzMV1dLFtbMTMxNDMsMTMxNDNdLFwibWFwcGVkXCIsWzEyNTI3LDEyNDgzLDEyNDg4XV0sW1sxMzE0NCwxMzE0NF0sXCJtYXBwZWRcIixbNDgsMjg4NTddXSxbWzEzMTQ1LDEzMTQ1XSxcIm1hcHBlZFwiLFs0OSwyODg1N11dLFtbMTMxNDYsMTMxNDZdLFwibWFwcGVkXCIsWzUwLDI4ODU3XV0sW1sxMzE0NywxMzE0N10sXCJtYXBwZWRcIixbNTEsMjg4NTddXSxbWzEzMTQ4LDEzMTQ4XSxcIm1hcHBlZFwiLFs1MiwyODg1N11dLFtbMTMxNDksMTMxNDldLFwibWFwcGVkXCIsWzUzLDI4ODU3XV0sW1sxMzE1MCwxMzE1MF0sXCJtYXBwZWRcIixbNTQsMjg4NTddXSxbWzEzMTUxLDEzMTUxXSxcIm1hcHBlZFwiLFs1NSwyODg1N11dLFtbMTMxNTIsMTMxNTJdLFwibWFwcGVkXCIsWzU2LDI4ODU3XV0sW1sxMzE1MywxMzE1M10sXCJtYXBwZWRcIixbNTcsMjg4NTddXSxbWzEzMTU0LDEzMTU0XSxcIm1hcHBlZFwiLFs0OSw0OCwyODg1N11dLFtbMTMxNTUsMTMxNTVdLFwibWFwcGVkXCIsWzQ5LDQ5LDI4ODU3XV0sW1sxMzE1NiwxMzE1Nl0sXCJtYXBwZWRcIixbNDksNTAsMjg4NTddXSxbWzEzMTU3LDEzMTU3XSxcIm1hcHBlZFwiLFs0OSw1MSwyODg1N11dLFtbMTMxNTgsMTMxNThdLFwibWFwcGVkXCIsWzQ5LDUyLDI4ODU3XV0sW1sxMzE1OSwxMzE1OV0sXCJtYXBwZWRcIixbNDksNTMsMjg4NTddXSxbWzEzMTYwLDEzMTYwXSxcIm1hcHBlZFwiLFs0OSw1NCwyODg1N11dLFtbMTMxNjEsMTMxNjFdLFwibWFwcGVkXCIsWzQ5LDU1LDI4ODU3XV0sW1sxMzE2MiwxMzE2Ml0sXCJtYXBwZWRcIixbNDksNTYsMjg4NTddXSxbWzEzMTYzLDEzMTYzXSxcIm1hcHBlZFwiLFs0OSw1NywyODg1N11dLFtbMTMxNjQsMTMxNjRdLFwibWFwcGVkXCIsWzUwLDQ4LDI4ODU3XV0sW1sxMzE2NSwxMzE2NV0sXCJtYXBwZWRcIixbNTAsNDksMjg4NTddXSxbWzEzMTY2LDEzMTY2XSxcIm1hcHBlZFwiLFs1MCw1MCwyODg1N11dLFtbMTMxNjcsMTMxNjddLFwibWFwcGVkXCIsWzUwLDUxLDI4ODU3XV0sW1sxMzE2OCwxMzE2OF0sXCJtYXBwZWRcIixbNTAsNTIsMjg4NTddXSxbWzEzMTY5LDEzMTY5XSxcIm1hcHBlZFwiLFsxMDQsMTEyLDk3XV0sW1sxMzE3MCwxMzE3MF0sXCJtYXBwZWRcIixbMTAwLDk3XV0sW1sxMzE3MSwxMzE3MV0sXCJtYXBwZWRcIixbOTcsMTE3XV0sW1sxMzE3MiwxMzE3Ml0sXCJtYXBwZWRcIixbOTgsOTcsMTE0XV0sW1sxMzE3MywxMzE3M10sXCJtYXBwZWRcIixbMTExLDExOF1dLFtbMTMxNzQsMTMxNzRdLFwibWFwcGVkXCIsWzExMiw5OV1dLFtbMTMxNzUsMTMxNzVdLFwibWFwcGVkXCIsWzEwMCwxMDldXSxbWzEzMTc2LDEzMTc2XSxcIm1hcHBlZFwiLFsxMDAsMTA5LDUwXV0sW1sxMzE3NywxMzE3N10sXCJtYXBwZWRcIixbMTAwLDEwOSw1MV1dLFtbMTMxNzgsMTMxNzhdLFwibWFwcGVkXCIsWzEwNSwxMTddXSxbWzEzMTc5LDEzMTc5XSxcIm1hcHBlZFwiLFsyNDE3OSwyNTEwNF1dLFtbMTMxODAsMTMxODBdLFwibWFwcGVkXCIsWzI2MTU3LDIxNjQ0XV0sW1sxMzE4MSwxMzE4MV0sXCJtYXBwZWRcIixbMjI4MjMsMjc0OTFdXSxbWzEzMTgyLDEzMTgyXSxcIm1hcHBlZFwiLFsyNjEyNiwyNzgzNV1dLFtbMTMxODMsMTMxODNdLFwibWFwcGVkXCIsWzI2NjY2LDI0MzM1LDIwMjUwLDMxMDM4XV0sW1sxMzE4NCwxMzE4NF0sXCJtYXBwZWRcIixbMTEyLDk3XV0sW1sxMzE4NSwxMzE4NV0sXCJtYXBwZWRcIixbMTEwLDk3XV0sW1sxMzE4NiwxMzE4Nl0sXCJtYXBwZWRcIixbOTU2LDk3XV0sW1sxMzE4NywxMzE4N10sXCJtYXBwZWRcIixbMTA5LDk3XV0sW1sxMzE4OCwxMzE4OF0sXCJtYXBwZWRcIixbMTA3LDk3XV0sW1sxMzE4OSwxMzE4OV0sXCJtYXBwZWRcIixbMTA3LDk4XV0sW1sxMzE5MCwxMzE5MF0sXCJtYXBwZWRcIixbMTA5LDk4XV0sW1sxMzE5MSwxMzE5MV0sXCJtYXBwZWRcIixbMTAzLDk4XV0sW1sxMzE5MiwxMzE5Ml0sXCJtYXBwZWRcIixbOTksOTcsMTA4XV0sW1sxMzE5MywxMzE5M10sXCJtYXBwZWRcIixbMTA3LDk5LDk3LDEwOF1dLFtbMTMxOTQsMTMxOTRdLFwibWFwcGVkXCIsWzExMiwxMDJdXSxbWzEzMTk1LDEzMTk1XSxcIm1hcHBlZFwiLFsxMTAsMTAyXV0sW1sxMzE5NiwxMzE5Nl0sXCJtYXBwZWRcIixbOTU2LDEwMl1dLFtbMTMxOTcsMTMxOTddLFwibWFwcGVkXCIsWzk1NiwxMDNdXSxbWzEzMTk4LDEzMTk4XSxcIm1hcHBlZFwiLFsxMDksMTAzXV0sW1sxMzE5OSwxMzE5OV0sXCJtYXBwZWRcIixbMTA3LDEwM11dLFtbMTMyMDAsMTMyMDBdLFwibWFwcGVkXCIsWzEwNCwxMjJdXSxbWzEzMjAxLDEzMjAxXSxcIm1hcHBlZFwiLFsxMDcsMTA0LDEyMl1dLFtbMTMyMDIsMTMyMDJdLFwibWFwcGVkXCIsWzEwOSwxMDQsMTIyXV0sW1sxMzIwMywxMzIwM10sXCJtYXBwZWRcIixbMTAzLDEwNCwxMjJdXSxbWzEzMjA0LDEzMjA0XSxcIm1hcHBlZFwiLFsxMTYsMTA0LDEyMl1dLFtbMTMyMDUsMTMyMDVdLFwibWFwcGVkXCIsWzk1NiwxMDhdXSxbWzEzMjA2LDEzMjA2XSxcIm1hcHBlZFwiLFsxMDksMTA4XV0sW1sxMzIwNywxMzIwN10sXCJtYXBwZWRcIixbMTAwLDEwOF1dLFtbMTMyMDgsMTMyMDhdLFwibWFwcGVkXCIsWzEwNywxMDhdXSxbWzEzMjA5LDEzMjA5XSxcIm1hcHBlZFwiLFsxMDIsMTA5XV0sW1sxMzIxMCwxMzIxMF0sXCJtYXBwZWRcIixbMTEwLDEwOV1dLFtbMTMyMTEsMTMyMTFdLFwibWFwcGVkXCIsWzk1NiwxMDldXSxbWzEzMjEyLDEzMjEyXSxcIm1hcHBlZFwiLFsxMDksMTA5XV0sW1sxMzIxMywxMzIxM10sXCJtYXBwZWRcIixbOTksMTA5XV0sW1sxMzIxNCwxMzIxNF0sXCJtYXBwZWRcIixbMTA3LDEwOV1dLFtbMTMyMTUsMTMyMTVdLFwibWFwcGVkXCIsWzEwOSwxMDksNTBdXSxbWzEzMjE2LDEzMjE2XSxcIm1hcHBlZFwiLFs5OSwxMDksNTBdXSxbWzEzMjE3LDEzMjE3XSxcIm1hcHBlZFwiLFsxMDksNTBdXSxbWzEzMjE4LDEzMjE4XSxcIm1hcHBlZFwiLFsxMDcsMTA5LDUwXV0sW1sxMzIxOSwxMzIxOV0sXCJtYXBwZWRcIixbMTA5LDEwOSw1MV1dLFtbMTMyMjAsMTMyMjBdLFwibWFwcGVkXCIsWzk5LDEwOSw1MV1dLFtbMTMyMjEsMTMyMjFdLFwibWFwcGVkXCIsWzEwOSw1MV1dLFtbMTMyMjIsMTMyMjJdLFwibWFwcGVkXCIsWzEwNywxMDksNTFdXSxbWzEzMjIzLDEzMjIzXSxcIm1hcHBlZFwiLFsxMDksODcyNSwxMTVdXSxbWzEzMjI0LDEzMjI0XSxcIm1hcHBlZFwiLFsxMDksODcyNSwxMTUsNTBdXSxbWzEzMjI1LDEzMjI1XSxcIm1hcHBlZFwiLFsxMTIsOTddXSxbWzEzMjI2LDEzMjI2XSxcIm1hcHBlZFwiLFsxMDcsMTEyLDk3XV0sW1sxMzIyNywxMzIyN10sXCJtYXBwZWRcIixbMTA5LDExMiw5N11dLFtbMTMyMjgsMTMyMjhdLFwibWFwcGVkXCIsWzEwMywxMTIsOTddXSxbWzEzMjI5LDEzMjI5XSxcIm1hcHBlZFwiLFsxMTQsOTcsMTAwXV0sW1sxMzIzMCwxMzIzMF0sXCJtYXBwZWRcIixbMTE0LDk3LDEwMCw4NzI1LDExNV1dLFtbMTMyMzEsMTMyMzFdLFwibWFwcGVkXCIsWzExNCw5NywxMDAsODcyNSwxMTUsNTBdXSxbWzEzMjMyLDEzMjMyXSxcIm1hcHBlZFwiLFsxMTIsMTE1XV0sW1sxMzIzMywxMzIzM10sXCJtYXBwZWRcIixbMTEwLDExNV1dLFtbMTMyMzQsMTMyMzRdLFwibWFwcGVkXCIsWzk1NiwxMTVdXSxbWzEzMjM1LDEzMjM1XSxcIm1hcHBlZFwiLFsxMDksMTE1XV0sW1sxMzIzNiwxMzIzNl0sXCJtYXBwZWRcIixbMTEyLDExOF1dLFtbMTMyMzcsMTMyMzddLFwibWFwcGVkXCIsWzExMCwxMThdXSxbWzEzMjM4LDEzMjM4XSxcIm1hcHBlZFwiLFs5NTYsMTE4XV0sW1sxMzIzOSwxMzIzOV0sXCJtYXBwZWRcIixbMTA5LDExOF1dLFtbMTMyNDAsMTMyNDBdLFwibWFwcGVkXCIsWzEwNywxMThdXSxbWzEzMjQxLDEzMjQxXSxcIm1hcHBlZFwiLFsxMDksMTE4XV0sW1sxMzI0MiwxMzI0Ml0sXCJtYXBwZWRcIixbMTEyLDExOV1dLFtbMTMyNDMsMTMyNDNdLFwibWFwcGVkXCIsWzExMCwxMTldXSxbWzEzMjQ0LDEzMjQ0XSxcIm1hcHBlZFwiLFs5NTYsMTE5XV0sW1sxMzI0NSwxMzI0NV0sXCJtYXBwZWRcIixbMTA5LDExOV1dLFtbMTMyNDYsMTMyNDZdLFwibWFwcGVkXCIsWzEwNywxMTldXSxbWzEzMjQ3LDEzMjQ3XSxcIm1hcHBlZFwiLFsxMDksMTE5XV0sW1sxMzI0OCwxMzI0OF0sXCJtYXBwZWRcIixbMTA3LDk2OV1dLFtbMTMyNDksMTMyNDldLFwibWFwcGVkXCIsWzEwOSw5NjldXSxbWzEzMjUwLDEzMjUwXSxcImRpc2FsbG93ZWRcIl0sW1sxMzI1MSwxMzI1MV0sXCJtYXBwZWRcIixbOTgsMTEzXV0sW1sxMzI1MiwxMzI1Ml0sXCJtYXBwZWRcIixbOTksOTldXSxbWzEzMjUzLDEzMjUzXSxcIm1hcHBlZFwiLFs5OSwxMDBdXSxbWzEzMjU0LDEzMjU0XSxcIm1hcHBlZFwiLFs5OSw4NzI1LDEwNywxMDNdXSxbWzEzMjU1LDEzMjU1XSxcImRpc2FsbG93ZWRcIl0sW1sxMzI1NiwxMzI1Nl0sXCJtYXBwZWRcIixbMTAwLDk4XV0sW1sxMzI1NywxMzI1N10sXCJtYXBwZWRcIixbMTAzLDEyMV1dLFtbMTMyNTgsMTMyNThdLFwibWFwcGVkXCIsWzEwNCw5N11dLFtbMTMyNTksMTMyNTldLFwibWFwcGVkXCIsWzEwNCwxMTJdXSxbWzEzMjYwLDEzMjYwXSxcIm1hcHBlZFwiLFsxMDUsMTEwXV0sW1sxMzI2MSwxMzI2MV0sXCJtYXBwZWRcIixbMTA3LDEwN11dLFtbMTMyNjIsMTMyNjJdLFwibWFwcGVkXCIsWzEwNywxMDldXSxbWzEzMjYzLDEzMjYzXSxcIm1hcHBlZFwiLFsxMDcsMTE2XV0sW1sxMzI2NCwxMzI2NF0sXCJtYXBwZWRcIixbMTA4LDEwOV1dLFtbMTMyNjUsMTMyNjVdLFwibWFwcGVkXCIsWzEwOCwxMTBdXSxbWzEzMjY2LDEzMjY2XSxcIm1hcHBlZFwiLFsxMDgsMTExLDEwM11dLFtbMTMyNjcsMTMyNjddLFwibWFwcGVkXCIsWzEwOCwxMjBdXSxbWzEzMjY4LDEzMjY4XSxcIm1hcHBlZFwiLFsxMDksOThdXSxbWzEzMjY5LDEzMjY5XSxcIm1hcHBlZFwiLFsxMDksMTA1LDEwOF1dLFtbMTMyNzAsMTMyNzBdLFwibWFwcGVkXCIsWzEwOSwxMTEsMTA4XV0sW1sxMzI3MSwxMzI3MV0sXCJtYXBwZWRcIixbMTEyLDEwNF1dLFtbMTMyNzIsMTMyNzJdLFwiZGlzYWxsb3dlZFwiXSxbWzEzMjczLDEzMjczXSxcIm1hcHBlZFwiLFsxMTIsMTEyLDEwOV1dLFtbMTMyNzQsMTMyNzRdLFwibWFwcGVkXCIsWzExMiwxMTRdXSxbWzEzMjc1LDEzMjc1XSxcIm1hcHBlZFwiLFsxMTUsMTE0XV0sW1sxMzI3NiwxMzI3Nl0sXCJtYXBwZWRcIixbMTE1LDExOF1dLFtbMTMyNzcsMTMyNzddLFwibWFwcGVkXCIsWzExOSw5OF1dLFtbMTMyNzgsMTMyNzhdLFwibWFwcGVkXCIsWzExOCw4NzI1LDEwOV1dLFtbMTMyNzksMTMyNzldLFwibWFwcGVkXCIsWzk3LDg3MjUsMTA5XV0sW1sxMzI4MCwxMzI4MF0sXCJtYXBwZWRcIixbNDksMjYwODVdXSxbWzEzMjgxLDEzMjgxXSxcIm1hcHBlZFwiLFs1MCwyNjA4NV1dLFtbMTMyODIsMTMyODJdLFwibWFwcGVkXCIsWzUxLDI2MDg1XV0sW1sxMzI4MywxMzI4M10sXCJtYXBwZWRcIixbNTIsMjYwODVdXSxbWzEzMjg0LDEzMjg0XSxcIm1hcHBlZFwiLFs1MywyNjA4NV1dLFtbMTMyODUsMTMyODVdLFwibWFwcGVkXCIsWzU0LDI2MDg1XV0sW1sxMzI4NiwxMzI4Nl0sXCJtYXBwZWRcIixbNTUsMjYwODVdXSxbWzEzMjg3LDEzMjg3XSxcIm1hcHBlZFwiLFs1NiwyNjA4NV1dLFtbMTMyODgsMTMyODhdLFwibWFwcGVkXCIsWzU3LDI2MDg1XV0sW1sxMzI4OSwxMzI4OV0sXCJtYXBwZWRcIixbNDksNDgsMjYwODVdXSxbWzEzMjkwLDEzMjkwXSxcIm1hcHBlZFwiLFs0OSw0OSwyNjA4NV1dLFtbMTMyOTEsMTMyOTFdLFwibWFwcGVkXCIsWzQ5LDUwLDI2MDg1XV0sW1sxMzI5MiwxMzI5Ml0sXCJtYXBwZWRcIixbNDksNTEsMjYwODVdXSxbWzEzMjkzLDEzMjkzXSxcIm1hcHBlZFwiLFs0OSw1MiwyNjA4NV1dLFtbMTMyOTQsMTMyOTRdLFwibWFwcGVkXCIsWzQ5LDUzLDI2MDg1XV0sW1sxMzI5NSwxMzI5NV0sXCJtYXBwZWRcIixbNDksNTQsMjYwODVdXSxbWzEzMjk2LDEzMjk2XSxcIm1hcHBlZFwiLFs0OSw1NSwyNjA4NV1dLFtbMTMyOTcsMTMyOTddLFwibWFwcGVkXCIsWzQ5LDU2LDI2MDg1XV0sW1sxMzI5OCwxMzI5OF0sXCJtYXBwZWRcIixbNDksNTcsMjYwODVdXSxbWzEzMjk5LDEzMjk5XSxcIm1hcHBlZFwiLFs1MCw0OCwyNjA4NV1dLFtbMTMzMDAsMTMzMDBdLFwibWFwcGVkXCIsWzUwLDQ5LDI2MDg1XV0sW1sxMzMwMSwxMzMwMV0sXCJtYXBwZWRcIixbNTAsNTAsMjYwODVdXSxbWzEzMzAyLDEzMzAyXSxcIm1hcHBlZFwiLFs1MCw1MSwyNjA4NV1dLFtbMTMzMDMsMTMzMDNdLFwibWFwcGVkXCIsWzUwLDUyLDI2MDg1XV0sW1sxMzMwNCwxMzMwNF0sXCJtYXBwZWRcIixbNTAsNTMsMjYwODVdXSxbWzEzMzA1LDEzMzA1XSxcIm1hcHBlZFwiLFs1MCw1NCwyNjA4NV1dLFtbMTMzMDYsMTMzMDZdLFwibWFwcGVkXCIsWzUwLDU1LDI2MDg1XV0sW1sxMzMwNywxMzMwN10sXCJtYXBwZWRcIixbNTAsNTYsMjYwODVdXSxbWzEzMzA4LDEzMzA4XSxcIm1hcHBlZFwiLFs1MCw1NywyNjA4NV1dLFtbMTMzMDksMTMzMDldLFwibWFwcGVkXCIsWzUxLDQ4LDI2MDg1XV0sW1sxMzMxMCwxMzMxMF0sXCJtYXBwZWRcIixbNTEsNDksMjYwODVdXSxbWzEzMzExLDEzMzExXSxcIm1hcHBlZFwiLFsxMDMsOTcsMTA4XV0sW1sxMzMxMiwxOTg5M10sXCJ2YWxpZFwiXSxbWzE5ODk0LDE5OTAzXSxcImRpc2FsbG93ZWRcIl0sW1sxOTkwNCwxOTk2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTk5NjgsNDA4NjldLFwidmFsaWRcIl0sW1s0MDg3MCw0MDg5MV0sXCJ2YWxpZFwiXSxbWzQwODkyLDQwODk5XSxcInZhbGlkXCJdLFtbNDA5MDAsNDA5MDddLFwidmFsaWRcIl0sW1s0MDkwOCw0MDkwOF0sXCJ2YWxpZFwiXSxbWzQwOTA5LDQwOTE3XSxcInZhbGlkXCJdLFtbNDA5MTgsNDA5NTldLFwiZGlzYWxsb3dlZFwiXSxbWzQwOTYwLDQyMTI0XSxcInZhbGlkXCJdLFtbNDIxMjUsNDIxMjddLFwiZGlzYWxsb3dlZFwiXSxbWzQyMTI4LDQyMTQ1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjE0Niw0MjE0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDIxNDgsNDIxNjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMTY0LDQyMTY0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjE2NSw0MjE3Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDIxNzcsNDIxNzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMTc4LDQyMTgwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjE4MSw0MjE4MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDIxODIsNDIxODJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMTgzLDQyMTkxXSxcImRpc2FsbG93ZWRcIl0sW1s0MjE5Miw0MjIzN10sXCJ2YWxpZFwiXSxbWzQyMjM4LDQyMjM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjI0MCw0MjUwOF0sXCJ2YWxpZFwiXSxbWzQyNTA5LDQyNTExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjUxMiw0MjUzOV0sXCJ2YWxpZFwiXSxbWzQyNTQwLDQyNTU5XSxcImRpc2FsbG93ZWRcIl0sW1s0MjU2MCw0MjU2MF0sXCJtYXBwZWRcIixbNDI1NjFdXSxbWzQyNTYxLDQyNTYxXSxcInZhbGlkXCJdLFtbNDI1NjIsNDI1NjJdLFwibWFwcGVkXCIsWzQyNTYzXV0sW1s0MjU2Myw0MjU2M10sXCJ2YWxpZFwiXSxbWzQyNTY0LDQyNTY0XSxcIm1hcHBlZFwiLFs0MjU2NV1dLFtbNDI1NjUsNDI1NjVdLFwidmFsaWRcIl0sW1s0MjU2Niw0MjU2Nl0sXCJtYXBwZWRcIixbNDI1NjddXSxbWzQyNTY3LDQyNTY3XSxcInZhbGlkXCJdLFtbNDI1NjgsNDI1NjhdLFwibWFwcGVkXCIsWzQyNTY5XV0sW1s0MjU2OSw0MjU2OV0sXCJ2YWxpZFwiXSxbWzQyNTcwLDQyNTcwXSxcIm1hcHBlZFwiLFs0MjU3MV1dLFtbNDI1NzEsNDI1NzFdLFwidmFsaWRcIl0sW1s0MjU3Miw0MjU3Ml0sXCJtYXBwZWRcIixbNDI1NzNdXSxbWzQyNTczLDQyNTczXSxcInZhbGlkXCJdLFtbNDI1NzQsNDI1NzRdLFwibWFwcGVkXCIsWzQyNTc1XV0sW1s0MjU3NSw0MjU3NV0sXCJ2YWxpZFwiXSxbWzQyNTc2LDQyNTc2XSxcIm1hcHBlZFwiLFs0MjU3N11dLFtbNDI1NzcsNDI1NzddLFwidmFsaWRcIl0sW1s0MjU3OCw0MjU3OF0sXCJtYXBwZWRcIixbNDI1NzldXSxbWzQyNTc5LDQyNTc5XSxcInZhbGlkXCJdLFtbNDI1ODAsNDI1ODBdLFwibWFwcGVkXCIsWzQyNTgxXV0sW1s0MjU4MSw0MjU4MV0sXCJ2YWxpZFwiXSxbWzQyNTgyLDQyNTgyXSxcIm1hcHBlZFwiLFs0MjU4M11dLFtbNDI1ODMsNDI1ODNdLFwidmFsaWRcIl0sW1s0MjU4NCw0MjU4NF0sXCJtYXBwZWRcIixbNDI1ODVdXSxbWzQyNTg1LDQyNTg1XSxcInZhbGlkXCJdLFtbNDI1ODYsNDI1ODZdLFwibWFwcGVkXCIsWzQyNTg3XV0sW1s0MjU4Nyw0MjU4N10sXCJ2YWxpZFwiXSxbWzQyNTg4LDQyNTg4XSxcIm1hcHBlZFwiLFs0MjU4OV1dLFtbNDI1ODksNDI1ODldLFwidmFsaWRcIl0sW1s0MjU5MCw0MjU5MF0sXCJtYXBwZWRcIixbNDI1OTFdXSxbWzQyNTkxLDQyNTkxXSxcInZhbGlkXCJdLFtbNDI1OTIsNDI1OTJdLFwibWFwcGVkXCIsWzQyNTkzXV0sW1s0MjU5Myw0MjU5M10sXCJ2YWxpZFwiXSxbWzQyNTk0LDQyNTk0XSxcIm1hcHBlZFwiLFs0MjU5NV1dLFtbNDI1OTUsNDI1OTVdLFwidmFsaWRcIl0sW1s0MjU5Niw0MjU5Nl0sXCJtYXBwZWRcIixbNDI1OTddXSxbWzQyNTk3LDQyNTk3XSxcInZhbGlkXCJdLFtbNDI1OTgsNDI1OThdLFwibWFwcGVkXCIsWzQyNTk5XV0sW1s0MjU5OSw0MjU5OV0sXCJ2YWxpZFwiXSxbWzQyNjAwLDQyNjAwXSxcIm1hcHBlZFwiLFs0MjYwMV1dLFtbNDI2MDEsNDI2MDFdLFwidmFsaWRcIl0sW1s0MjYwMiw0MjYwMl0sXCJtYXBwZWRcIixbNDI2MDNdXSxbWzQyNjAzLDQyNjAzXSxcInZhbGlkXCJdLFtbNDI2MDQsNDI2MDRdLFwibWFwcGVkXCIsWzQyNjA1XV0sW1s0MjYwNSw0MjYwN10sXCJ2YWxpZFwiXSxbWzQyNjA4LDQyNjExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjYxMiw0MjYxOV0sXCJ2YWxpZFwiXSxbWzQyNjIwLDQyNjIxXSxcInZhbGlkXCJdLFtbNDI2MjIsNDI2MjJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyNjIzLDQyNjIzXSxcInZhbGlkXCJdLFtbNDI2MjQsNDI2MjRdLFwibWFwcGVkXCIsWzQyNjI1XV0sW1s0MjYyNSw0MjYyNV0sXCJ2YWxpZFwiXSxbWzQyNjI2LDQyNjI2XSxcIm1hcHBlZFwiLFs0MjYyN11dLFtbNDI2MjcsNDI2MjddLFwidmFsaWRcIl0sW1s0MjYyOCw0MjYyOF0sXCJtYXBwZWRcIixbNDI2MjldXSxbWzQyNjI5LDQyNjI5XSxcInZhbGlkXCJdLFtbNDI2MzAsNDI2MzBdLFwibWFwcGVkXCIsWzQyNjMxXV0sW1s0MjYzMSw0MjYzMV0sXCJ2YWxpZFwiXSxbWzQyNjMyLDQyNjMyXSxcIm1hcHBlZFwiLFs0MjYzM11dLFtbNDI2MzMsNDI2MzNdLFwidmFsaWRcIl0sW1s0MjYzNCw0MjYzNF0sXCJtYXBwZWRcIixbNDI2MzVdXSxbWzQyNjM1LDQyNjM1XSxcInZhbGlkXCJdLFtbNDI2MzYsNDI2MzZdLFwibWFwcGVkXCIsWzQyNjM3XV0sW1s0MjYzNyw0MjYzN10sXCJ2YWxpZFwiXSxbWzQyNjM4LDQyNjM4XSxcIm1hcHBlZFwiLFs0MjYzOV1dLFtbNDI2MzksNDI2MzldLFwidmFsaWRcIl0sW1s0MjY0MCw0MjY0MF0sXCJtYXBwZWRcIixbNDI2NDFdXSxbWzQyNjQxLDQyNjQxXSxcInZhbGlkXCJdLFtbNDI2NDIsNDI2NDJdLFwibWFwcGVkXCIsWzQyNjQzXV0sW1s0MjY0Myw0MjY0M10sXCJ2YWxpZFwiXSxbWzQyNjQ0LDQyNjQ0XSxcIm1hcHBlZFwiLFs0MjY0NV1dLFtbNDI2NDUsNDI2NDVdLFwidmFsaWRcIl0sW1s0MjY0Niw0MjY0Nl0sXCJtYXBwZWRcIixbNDI2NDddXSxbWzQyNjQ3LDQyNjQ3XSxcInZhbGlkXCJdLFtbNDI2NDgsNDI2NDhdLFwibWFwcGVkXCIsWzQyNjQ5XV0sW1s0MjY0OSw0MjY0OV0sXCJ2YWxpZFwiXSxbWzQyNjUwLDQyNjUwXSxcIm1hcHBlZFwiLFs0MjY1MV1dLFtbNDI2NTEsNDI2NTFdLFwidmFsaWRcIl0sW1s0MjY1Miw0MjY1Ml0sXCJtYXBwZWRcIixbMTA5OF1dLFtbNDI2NTMsNDI2NTNdLFwibWFwcGVkXCIsWzExMDBdXSxbWzQyNjU0LDQyNjU0XSxcInZhbGlkXCJdLFtbNDI2NTUsNDI2NTVdLFwidmFsaWRcIl0sW1s0MjY1Niw0MjcyNV0sXCJ2YWxpZFwiXSxbWzQyNzI2LDQyNzM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjczNiw0MjczN10sXCJ2YWxpZFwiXSxbWzQyNzM4LDQyNzQzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0Mjc0NCw0Mjc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDI3NTIsNDI3NzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyNzc1LDQyNzc4XSxcInZhbGlkXCJdLFtbNDI3NzksNDI3ODNdLFwidmFsaWRcIl0sW1s0Mjc4NCw0Mjc4NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDI3ODYsNDI3ODZdLFwibWFwcGVkXCIsWzQyNzg3XV0sW1s0Mjc4Nyw0Mjc4N10sXCJ2YWxpZFwiXSxbWzQyNzg4LDQyNzg4XSxcIm1hcHBlZFwiLFs0Mjc4OV1dLFtbNDI3ODksNDI3ODldLFwidmFsaWRcIl0sW1s0Mjc5MCw0Mjc5MF0sXCJtYXBwZWRcIixbNDI3OTFdXSxbWzQyNzkxLDQyNzkxXSxcInZhbGlkXCJdLFtbNDI3OTIsNDI3OTJdLFwibWFwcGVkXCIsWzQyNzkzXV0sW1s0Mjc5Myw0Mjc5M10sXCJ2YWxpZFwiXSxbWzQyNzk0LDQyNzk0XSxcIm1hcHBlZFwiLFs0Mjc5NV1dLFtbNDI3OTUsNDI3OTVdLFwidmFsaWRcIl0sW1s0Mjc5Niw0Mjc5Nl0sXCJtYXBwZWRcIixbNDI3OTddXSxbWzQyNzk3LDQyNzk3XSxcInZhbGlkXCJdLFtbNDI3OTgsNDI3OThdLFwibWFwcGVkXCIsWzQyNzk5XV0sW1s0Mjc5OSw0MjgwMV0sXCJ2YWxpZFwiXSxbWzQyODAyLDQyODAyXSxcIm1hcHBlZFwiLFs0MjgwM11dLFtbNDI4MDMsNDI4MDNdLFwidmFsaWRcIl0sW1s0MjgwNCw0MjgwNF0sXCJtYXBwZWRcIixbNDI4MDVdXSxbWzQyODA1LDQyODA1XSxcInZhbGlkXCJdLFtbNDI4MDYsNDI4MDZdLFwibWFwcGVkXCIsWzQyODA3XV0sW1s0MjgwNyw0MjgwN10sXCJ2YWxpZFwiXSxbWzQyODA4LDQyODA4XSxcIm1hcHBlZFwiLFs0MjgwOV1dLFtbNDI4MDksNDI4MDldLFwidmFsaWRcIl0sW1s0MjgxMCw0MjgxMF0sXCJtYXBwZWRcIixbNDI4MTFdXSxbWzQyODExLDQyODExXSxcInZhbGlkXCJdLFtbNDI4MTIsNDI4MTJdLFwibWFwcGVkXCIsWzQyODEzXV0sW1s0MjgxMyw0MjgxM10sXCJ2YWxpZFwiXSxbWzQyODE0LDQyODE0XSxcIm1hcHBlZFwiLFs0MjgxNV1dLFtbNDI4MTUsNDI4MTVdLFwidmFsaWRcIl0sW1s0MjgxNiw0MjgxNl0sXCJtYXBwZWRcIixbNDI4MTddXSxbWzQyODE3LDQyODE3XSxcInZhbGlkXCJdLFtbNDI4MTgsNDI4MThdLFwibWFwcGVkXCIsWzQyODE5XV0sW1s0MjgxOSw0MjgxOV0sXCJ2YWxpZFwiXSxbWzQyODIwLDQyODIwXSxcIm1hcHBlZFwiLFs0MjgyMV1dLFtbNDI4MjEsNDI4MjFdLFwidmFsaWRcIl0sW1s0MjgyMiw0MjgyMl0sXCJtYXBwZWRcIixbNDI4MjNdXSxbWzQyODIzLDQyODIzXSxcInZhbGlkXCJdLFtbNDI4MjQsNDI4MjRdLFwibWFwcGVkXCIsWzQyODI1XV0sW1s0MjgyNSw0MjgyNV0sXCJ2YWxpZFwiXSxbWzQyODI2LDQyODI2XSxcIm1hcHBlZFwiLFs0MjgyN11dLFtbNDI4MjcsNDI4MjddLFwidmFsaWRcIl0sW1s0MjgyOCw0MjgyOF0sXCJtYXBwZWRcIixbNDI4MjldXSxbWzQyODI5LDQyODI5XSxcInZhbGlkXCJdLFtbNDI4MzAsNDI4MzBdLFwibWFwcGVkXCIsWzQyODMxXV0sW1s0MjgzMSw0MjgzMV0sXCJ2YWxpZFwiXSxbWzQyODMyLDQyODMyXSxcIm1hcHBlZFwiLFs0MjgzM11dLFtbNDI4MzMsNDI4MzNdLFwidmFsaWRcIl0sW1s0MjgzNCw0MjgzNF0sXCJtYXBwZWRcIixbNDI4MzVdXSxbWzQyODM1LDQyODM1XSxcInZhbGlkXCJdLFtbNDI4MzYsNDI4MzZdLFwibWFwcGVkXCIsWzQyODM3XV0sW1s0MjgzNyw0MjgzN10sXCJ2YWxpZFwiXSxbWzQyODM4LDQyODM4XSxcIm1hcHBlZFwiLFs0MjgzOV1dLFtbNDI4MzksNDI4MzldLFwidmFsaWRcIl0sW1s0Mjg0MCw0Mjg0MF0sXCJtYXBwZWRcIixbNDI4NDFdXSxbWzQyODQxLDQyODQxXSxcInZhbGlkXCJdLFtbNDI4NDIsNDI4NDJdLFwibWFwcGVkXCIsWzQyODQzXV0sW1s0Mjg0Myw0Mjg0M10sXCJ2YWxpZFwiXSxbWzQyODQ0LDQyODQ0XSxcIm1hcHBlZFwiLFs0Mjg0NV1dLFtbNDI4NDUsNDI4NDVdLFwidmFsaWRcIl0sW1s0Mjg0Niw0Mjg0Nl0sXCJtYXBwZWRcIixbNDI4NDddXSxbWzQyODQ3LDQyODQ3XSxcInZhbGlkXCJdLFtbNDI4NDgsNDI4NDhdLFwibWFwcGVkXCIsWzQyODQ5XV0sW1s0Mjg0OSw0Mjg0OV0sXCJ2YWxpZFwiXSxbWzQyODUwLDQyODUwXSxcIm1hcHBlZFwiLFs0Mjg1MV1dLFtbNDI4NTEsNDI4NTFdLFwidmFsaWRcIl0sW1s0Mjg1Miw0Mjg1Ml0sXCJtYXBwZWRcIixbNDI4NTNdXSxbWzQyODUzLDQyODUzXSxcInZhbGlkXCJdLFtbNDI4NTQsNDI4NTRdLFwibWFwcGVkXCIsWzQyODU1XV0sW1s0Mjg1NSw0Mjg1NV0sXCJ2YWxpZFwiXSxbWzQyODU2LDQyODU2XSxcIm1hcHBlZFwiLFs0Mjg1N11dLFtbNDI4NTcsNDI4NTddLFwidmFsaWRcIl0sW1s0Mjg1OCw0Mjg1OF0sXCJtYXBwZWRcIixbNDI4NTldXSxbWzQyODU5LDQyODU5XSxcInZhbGlkXCJdLFtbNDI4NjAsNDI4NjBdLFwibWFwcGVkXCIsWzQyODYxXV0sW1s0Mjg2MSw0Mjg2MV0sXCJ2YWxpZFwiXSxbWzQyODYyLDQyODYyXSxcIm1hcHBlZFwiLFs0Mjg2M11dLFtbNDI4NjMsNDI4NjNdLFwidmFsaWRcIl0sW1s0Mjg2NCw0Mjg2NF0sXCJtYXBwZWRcIixbNDI4NjNdXSxbWzQyODY1LDQyODcyXSxcInZhbGlkXCJdLFtbNDI4NzMsNDI4NzNdLFwibWFwcGVkXCIsWzQyODc0XV0sW1s0Mjg3NCw0Mjg3NF0sXCJ2YWxpZFwiXSxbWzQyODc1LDQyODc1XSxcIm1hcHBlZFwiLFs0Mjg3Nl1dLFtbNDI4NzYsNDI4NzZdLFwidmFsaWRcIl0sW1s0Mjg3Nyw0Mjg3N10sXCJtYXBwZWRcIixbNzU0NV1dLFtbNDI4NzgsNDI4NzhdLFwibWFwcGVkXCIsWzQyODc5XV0sW1s0Mjg3OSw0Mjg3OV0sXCJ2YWxpZFwiXSxbWzQyODgwLDQyODgwXSxcIm1hcHBlZFwiLFs0Mjg4MV1dLFtbNDI4ODEsNDI4ODFdLFwidmFsaWRcIl0sW1s0Mjg4Miw0Mjg4Ml0sXCJtYXBwZWRcIixbNDI4ODNdXSxbWzQyODgzLDQyODgzXSxcInZhbGlkXCJdLFtbNDI4ODQsNDI4ODRdLFwibWFwcGVkXCIsWzQyODg1XV0sW1s0Mjg4NSw0Mjg4NV0sXCJ2YWxpZFwiXSxbWzQyODg2LDQyODg2XSxcIm1hcHBlZFwiLFs0Mjg4N11dLFtbNDI4ODcsNDI4ODhdLFwidmFsaWRcIl0sW1s0Mjg4OSw0Mjg5MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDI4OTEsNDI4OTFdLFwibWFwcGVkXCIsWzQyODkyXV0sW1s0Mjg5Miw0Mjg5Ml0sXCJ2YWxpZFwiXSxbWzQyODkzLDQyODkzXSxcIm1hcHBlZFwiLFs2MTNdXSxbWzQyODk0LDQyODk0XSxcInZhbGlkXCJdLFtbNDI4OTUsNDI4OTVdLFwidmFsaWRcIl0sW1s0Mjg5Niw0Mjg5Nl0sXCJtYXBwZWRcIixbNDI4OTddXSxbWzQyODk3LDQyODk3XSxcInZhbGlkXCJdLFtbNDI4OTgsNDI4OThdLFwibWFwcGVkXCIsWzQyODk5XV0sW1s0Mjg5OSw0Mjg5OV0sXCJ2YWxpZFwiXSxbWzQyOTAwLDQyOTAxXSxcInZhbGlkXCJdLFtbNDI5MDIsNDI5MDJdLFwibWFwcGVkXCIsWzQyOTAzXV0sW1s0MjkwMyw0MjkwM10sXCJ2YWxpZFwiXSxbWzQyOTA0LDQyOTA0XSxcIm1hcHBlZFwiLFs0MjkwNV1dLFtbNDI5MDUsNDI5MDVdLFwidmFsaWRcIl0sW1s0MjkwNiw0MjkwNl0sXCJtYXBwZWRcIixbNDI5MDddXSxbWzQyOTA3LDQyOTA3XSxcInZhbGlkXCJdLFtbNDI5MDgsNDI5MDhdLFwibWFwcGVkXCIsWzQyOTA5XV0sW1s0MjkwOSw0MjkwOV0sXCJ2YWxpZFwiXSxbWzQyOTEwLDQyOTEwXSxcIm1hcHBlZFwiLFs0MjkxMV1dLFtbNDI5MTEsNDI5MTFdLFwidmFsaWRcIl0sW1s0MjkxMiw0MjkxMl0sXCJtYXBwZWRcIixbNDI5MTNdXSxbWzQyOTEzLDQyOTEzXSxcInZhbGlkXCJdLFtbNDI5MTQsNDI5MTRdLFwibWFwcGVkXCIsWzQyOTE1XV0sW1s0MjkxNSw0MjkxNV0sXCJ2YWxpZFwiXSxbWzQyOTE2LDQyOTE2XSxcIm1hcHBlZFwiLFs0MjkxN11dLFtbNDI5MTcsNDI5MTddLFwidmFsaWRcIl0sW1s0MjkxOCw0MjkxOF0sXCJtYXBwZWRcIixbNDI5MTldXSxbWzQyOTE5LDQyOTE5XSxcInZhbGlkXCJdLFtbNDI5MjAsNDI5MjBdLFwibWFwcGVkXCIsWzQyOTIxXV0sW1s0MjkyMSw0MjkyMV0sXCJ2YWxpZFwiXSxbWzQyOTIyLDQyOTIyXSxcIm1hcHBlZFwiLFs2MTRdXSxbWzQyOTIzLDQyOTIzXSxcIm1hcHBlZFwiLFs2MDRdXSxbWzQyOTI0LDQyOTI0XSxcIm1hcHBlZFwiLFs2MDldXSxbWzQyOTI1LDQyOTI1XSxcIm1hcHBlZFwiLFs2MjBdXSxbWzQyOTI2LDQyOTI3XSxcImRpc2FsbG93ZWRcIl0sW1s0MjkyOCw0MjkyOF0sXCJtYXBwZWRcIixbNjcwXV0sW1s0MjkyOSw0MjkyOV0sXCJtYXBwZWRcIixbNjQ3XV0sW1s0MjkzMCw0MjkzMF0sXCJtYXBwZWRcIixbNjY5XV0sW1s0MjkzMSw0MjkzMV0sXCJtYXBwZWRcIixbNDM4NTldXSxbWzQyOTMyLDQyOTMyXSxcIm1hcHBlZFwiLFs0MjkzM11dLFtbNDI5MzMsNDI5MzNdLFwidmFsaWRcIl0sW1s0MjkzNCw0MjkzNF0sXCJtYXBwZWRcIixbNDI5MzVdXSxbWzQyOTM1LDQyOTM1XSxcInZhbGlkXCJdLFtbNDI5MzYsNDI5OThdLFwiZGlzYWxsb3dlZFwiXSxbWzQyOTk5LDQyOTk5XSxcInZhbGlkXCJdLFtbNDMwMDAsNDMwMDBdLFwibWFwcGVkXCIsWzI5NV1dLFtbNDMwMDEsNDMwMDFdLFwibWFwcGVkXCIsWzMzOV1dLFtbNDMwMDIsNDMwMDJdLFwidmFsaWRcIl0sW1s0MzAwMyw0MzAwN10sXCJ2YWxpZFwiXSxbWzQzMDA4LDQzMDQ3XSxcInZhbGlkXCJdLFtbNDMwNDgsNDMwNTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzMDUyLDQzMDU1XSxcImRpc2FsbG93ZWRcIl0sW1s0MzA1Niw0MzA2NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMwNjYsNDMwNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzQzMDcyLDQzMTIzXSxcInZhbGlkXCJdLFtbNDMxMjQsNDMxMjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzMTI4LDQzMTM1XSxcImRpc2FsbG93ZWRcIl0sW1s0MzEzNiw0MzIwNF0sXCJ2YWxpZFwiXSxbWzQzMjA1LDQzMjEzXSxcImRpc2FsbG93ZWRcIl0sW1s0MzIxNCw0MzIxNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMyMTYsNDMyMjVdLFwidmFsaWRcIl0sW1s0MzIyNiw0MzIzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNDMyMzIsNDMyNTVdLFwidmFsaWRcIl0sW1s0MzI1Niw0MzI1OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMyNTksNDMyNTldLFwidmFsaWRcIl0sW1s0MzI2MCw0MzI2MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMyNjEsNDMyNjFdLFwidmFsaWRcIl0sW1s0MzI2Miw0MzI2M10sXCJkaXNhbGxvd2VkXCJdLFtbNDMyNjQsNDMzMDldLFwidmFsaWRcIl0sW1s0MzMxMCw0MzMxMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMzMTIsNDMzNDddLFwidmFsaWRcIl0sW1s0MzM0OCw0MzM1OF0sXCJkaXNhbGxvd2VkXCJdLFtbNDMzNTksNDMzNTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzMzYwLDQzMzg4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzM4OSw0MzM5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDMzOTIsNDM0NTZdLFwidmFsaWRcIl0sW1s0MzQ1Nyw0MzQ2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM0NzAsNDM0NzBdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNDcxLDQzNDgxXSxcInZhbGlkXCJdLFtbNDM0ODIsNDM0ODVdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNDg2LDQzNDg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzQ4OCw0MzUxOF0sXCJ2YWxpZFwiXSxbWzQzNTE5LDQzNTE5XSxcImRpc2FsbG93ZWRcIl0sW1s0MzUyMCw0MzU3NF0sXCJ2YWxpZFwiXSxbWzQzNTc1LDQzNTgzXSxcImRpc2FsbG93ZWRcIl0sW1s0MzU4NCw0MzU5N10sXCJ2YWxpZFwiXSxbWzQzNTk4LDQzNTk5XSxcImRpc2FsbG93ZWRcIl0sW1s0MzYwMCw0MzYwOV0sXCJ2YWxpZFwiXSxbWzQzNjEwLDQzNjExXSxcImRpc2FsbG93ZWRcIl0sW1s0MzYxMiw0MzYxNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM2MTYsNDM2MzhdLFwidmFsaWRcIl0sW1s0MzYzOSw0MzY0MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM2NDIsNDM2NDNdLFwidmFsaWRcIl0sW1s0MzY0NCw0MzY0N10sXCJ2YWxpZFwiXSxbWzQzNjQ4LDQzNzE0XSxcInZhbGlkXCJdLFtbNDM3MTUsNDM3MzhdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNzM5LDQzNzQxXSxcInZhbGlkXCJdLFtbNDM3NDIsNDM3NDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzNzQ0LDQzNzU5XSxcInZhbGlkXCJdLFtbNDM3NjAsNDM3NjFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzNzYyLDQzNzY2XSxcInZhbGlkXCJdLFtbNDM3NjcsNDM3NzZdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNzc3LDQzNzgyXSxcInZhbGlkXCJdLFtbNDM3ODMsNDM3ODRdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNzg1LDQzNzkwXSxcInZhbGlkXCJdLFtbNDM3OTEsNDM3OTJdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNzkzLDQzNzk4XSxcInZhbGlkXCJdLFtbNDM3OTksNDM4MDddLFwiZGlzYWxsb3dlZFwiXSxbWzQzODA4LDQzODE0XSxcInZhbGlkXCJdLFtbNDM4MTUsNDM4MTVdLFwiZGlzYWxsb3dlZFwiXSxbWzQzODE2LDQzODIyXSxcInZhbGlkXCJdLFtbNDM4MjMsNDM4MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzQzODI0LDQzODY2XSxcInZhbGlkXCJdLFtbNDM4NjcsNDM4NjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzODY4LDQzODY4XSxcIm1hcHBlZFwiLFs0Mjc5MV1dLFtbNDM4NjksNDM4NjldLFwibWFwcGVkXCIsWzQzODMxXV0sW1s0Mzg3MCw0Mzg3MF0sXCJtYXBwZWRcIixbNjE5XV0sW1s0Mzg3MSw0Mzg3MV0sXCJtYXBwZWRcIixbNDM4NThdXSxbWzQzODcyLDQzODc1XSxcInZhbGlkXCJdLFtbNDM4NzYsNDM4NzddLFwidmFsaWRcIl0sW1s0Mzg3OCw0Mzg4N10sXCJkaXNhbGxvd2VkXCJdLFtbNDM4ODgsNDM4ODhdLFwibWFwcGVkXCIsWzUwMjRdXSxbWzQzODg5LDQzODg5XSxcIm1hcHBlZFwiLFs1MDI1XV0sW1s0Mzg5MCw0Mzg5MF0sXCJtYXBwZWRcIixbNTAyNl1dLFtbNDM4OTEsNDM4OTFdLFwibWFwcGVkXCIsWzUwMjddXSxbWzQzODkyLDQzODkyXSxcIm1hcHBlZFwiLFs1MDI4XV0sW1s0Mzg5Myw0Mzg5M10sXCJtYXBwZWRcIixbNTAyOV1dLFtbNDM4OTQsNDM4OTRdLFwibWFwcGVkXCIsWzUwMzBdXSxbWzQzODk1LDQzODk1XSxcIm1hcHBlZFwiLFs1MDMxXV0sW1s0Mzg5Niw0Mzg5Nl0sXCJtYXBwZWRcIixbNTAzMl1dLFtbNDM4OTcsNDM4OTddLFwibWFwcGVkXCIsWzUwMzNdXSxbWzQzODk4LDQzODk4XSxcIm1hcHBlZFwiLFs1MDM0XV0sW1s0Mzg5OSw0Mzg5OV0sXCJtYXBwZWRcIixbNTAzNV1dLFtbNDM5MDAsNDM5MDBdLFwibWFwcGVkXCIsWzUwMzZdXSxbWzQzOTAxLDQzOTAxXSxcIm1hcHBlZFwiLFs1MDM3XV0sW1s0MzkwMiw0MzkwMl0sXCJtYXBwZWRcIixbNTAzOF1dLFtbNDM5MDMsNDM5MDNdLFwibWFwcGVkXCIsWzUwMzldXSxbWzQzOTA0LDQzOTA0XSxcIm1hcHBlZFwiLFs1MDQwXV0sW1s0MzkwNSw0MzkwNV0sXCJtYXBwZWRcIixbNTA0MV1dLFtbNDM5MDYsNDM5MDZdLFwibWFwcGVkXCIsWzUwNDJdXSxbWzQzOTA3LDQzOTA3XSxcIm1hcHBlZFwiLFs1MDQzXV0sW1s0MzkwOCw0MzkwOF0sXCJtYXBwZWRcIixbNTA0NF1dLFtbNDM5MDksNDM5MDldLFwibWFwcGVkXCIsWzUwNDVdXSxbWzQzOTEwLDQzOTEwXSxcIm1hcHBlZFwiLFs1MDQ2XV0sW1s0MzkxMSw0MzkxMV0sXCJtYXBwZWRcIixbNTA0N11dLFtbNDM5MTIsNDM5MTJdLFwibWFwcGVkXCIsWzUwNDhdXSxbWzQzOTEzLDQzOTEzXSxcIm1hcHBlZFwiLFs1MDQ5XV0sW1s0MzkxNCw0MzkxNF0sXCJtYXBwZWRcIixbNTA1MF1dLFtbNDM5MTUsNDM5MTVdLFwibWFwcGVkXCIsWzUwNTFdXSxbWzQzOTE2LDQzOTE2XSxcIm1hcHBlZFwiLFs1MDUyXV0sW1s0MzkxNyw0MzkxN10sXCJtYXBwZWRcIixbNTA1M11dLFtbNDM5MTgsNDM5MThdLFwibWFwcGVkXCIsWzUwNTRdXSxbWzQzOTE5LDQzOTE5XSxcIm1hcHBlZFwiLFs1MDU1XV0sW1s0MzkyMCw0MzkyMF0sXCJtYXBwZWRcIixbNTA1Nl1dLFtbNDM5MjEsNDM5MjFdLFwibWFwcGVkXCIsWzUwNTddXSxbWzQzOTIyLDQzOTIyXSxcIm1hcHBlZFwiLFs1MDU4XV0sW1s0MzkyMyw0MzkyM10sXCJtYXBwZWRcIixbNTA1OV1dLFtbNDM5MjQsNDM5MjRdLFwibWFwcGVkXCIsWzUwNjBdXSxbWzQzOTI1LDQzOTI1XSxcIm1hcHBlZFwiLFs1MDYxXV0sW1s0MzkyNiw0MzkyNl0sXCJtYXBwZWRcIixbNTA2Ml1dLFtbNDM5MjcsNDM5MjddLFwibWFwcGVkXCIsWzUwNjNdXSxbWzQzOTI4LDQzOTI4XSxcIm1hcHBlZFwiLFs1MDY0XV0sW1s0MzkyOSw0MzkyOV0sXCJtYXBwZWRcIixbNTA2NV1dLFtbNDM5MzAsNDM5MzBdLFwibWFwcGVkXCIsWzUwNjZdXSxbWzQzOTMxLDQzOTMxXSxcIm1hcHBlZFwiLFs1MDY3XV0sW1s0MzkzMiw0MzkzMl0sXCJtYXBwZWRcIixbNTA2OF1dLFtbNDM5MzMsNDM5MzNdLFwibWFwcGVkXCIsWzUwNjldXSxbWzQzOTM0LDQzOTM0XSxcIm1hcHBlZFwiLFs1MDcwXV0sW1s0MzkzNSw0MzkzNV0sXCJtYXBwZWRcIixbNTA3MV1dLFtbNDM5MzYsNDM5MzZdLFwibWFwcGVkXCIsWzUwNzJdXSxbWzQzOTM3LDQzOTM3XSxcIm1hcHBlZFwiLFs1MDczXV0sW1s0MzkzOCw0MzkzOF0sXCJtYXBwZWRcIixbNTA3NF1dLFtbNDM5MzksNDM5MzldLFwibWFwcGVkXCIsWzUwNzVdXSxbWzQzOTQwLDQzOTQwXSxcIm1hcHBlZFwiLFs1MDc2XV0sW1s0Mzk0MSw0Mzk0MV0sXCJtYXBwZWRcIixbNTA3N11dLFtbNDM5NDIsNDM5NDJdLFwibWFwcGVkXCIsWzUwNzhdXSxbWzQzOTQzLDQzOTQzXSxcIm1hcHBlZFwiLFs1MDc5XV0sW1s0Mzk0NCw0Mzk0NF0sXCJtYXBwZWRcIixbNTA4MF1dLFtbNDM5NDUsNDM5NDVdLFwibWFwcGVkXCIsWzUwODFdXSxbWzQzOTQ2LDQzOTQ2XSxcIm1hcHBlZFwiLFs1MDgyXV0sW1s0Mzk0Nyw0Mzk0N10sXCJtYXBwZWRcIixbNTA4M11dLFtbNDM5NDgsNDM5NDhdLFwibWFwcGVkXCIsWzUwODRdXSxbWzQzOTQ5LDQzOTQ5XSxcIm1hcHBlZFwiLFs1MDg1XV0sW1s0Mzk1MCw0Mzk1MF0sXCJtYXBwZWRcIixbNTA4Nl1dLFtbNDM5NTEsNDM5NTFdLFwibWFwcGVkXCIsWzUwODddXSxbWzQzOTUyLDQzOTUyXSxcIm1hcHBlZFwiLFs1MDg4XV0sW1s0Mzk1Myw0Mzk1M10sXCJtYXBwZWRcIixbNTA4OV1dLFtbNDM5NTQsNDM5NTRdLFwibWFwcGVkXCIsWzUwOTBdXSxbWzQzOTU1LDQzOTU1XSxcIm1hcHBlZFwiLFs1MDkxXV0sW1s0Mzk1Niw0Mzk1Nl0sXCJtYXBwZWRcIixbNTA5Ml1dLFtbNDM5NTcsNDM5NTddLFwibWFwcGVkXCIsWzUwOTNdXSxbWzQzOTU4LDQzOTU4XSxcIm1hcHBlZFwiLFs1MDk0XV0sW1s0Mzk1OSw0Mzk1OV0sXCJtYXBwZWRcIixbNTA5NV1dLFtbNDM5NjAsNDM5NjBdLFwibWFwcGVkXCIsWzUwOTZdXSxbWzQzOTYxLDQzOTYxXSxcIm1hcHBlZFwiLFs1MDk3XV0sW1s0Mzk2Miw0Mzk2Ml0sXCJtYXBwZWRcIixbNTA5OF1dLFtbNDM5NjMsNDM5NjNdLFwibWFwcGVkXCIsWzUwOTldXSxbWzQzOTY0LDQzOTY0XSxcIm1hcHBlZFwiLFs1MTAwXV0sW1s0Mzk2NSw0Mzk2NV0sXCJtYXBwZWRcIixbNTEwMV1dLFtbNDM5NjYsNDM5NjZdLFwibWFwcGVkXCIsWzUxMDJdXSxbWzQzOTY3LDQzOTY3XSxcIm1hcHBlZFwiLFs1MTAzXV0sW1s0Mzk2OCw0NDAxMF0sXCJ2YWxpZFwiXSxbWzQ0MDExLDQ0MDExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0NDAxMiw0NDAxM10sXCJ2YWxpZFwiXSxbWzQ0MDE0LDQ0MDE1XSxcImRpc2FsbG93ZWRcIl0sW1s0NDAxNiw0NDAyNV0sXCJ2YWxpZFwiXSxbWzQ0MDI2LDQ0MDMxXSxcImRpc2FsbG93ZWRcIl0sW1s0NDAzMiw1NTIwM10sXCJ2YWxpZFwiXSxbWzU1MjA0LDU1MjE1XSxcImRpc2FsbG93ZWRcIl0sW1s1NTIxNiw1NTIzOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNTUyMzksNTUyNDJdLFwiZGlzYWxsb3dlZFwiXSxbWzU1MjQzLDU1MjkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s1NTI5Miw1NTI5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNTUyOTYsNTczNDNdLFwiZGlzYWxsb3dlZFwiXSxbWzU3MzQ0LDYzNzQzXSxcImRpc2FsbG93ZWRcIl0sW1s2Mzc0NCw2Mzc0NF0sXCJtYXBwZWRcIixbMzU5MTJdXSxbWzYzNzQ1LDYzNzQ1XSxcIm1hcHBlZFwiLFsyNjM1Nl1dLFtbNjM3NDYsNjM3NDZdLFwibWFwcGVkXCIsWzM2NTU0XV0sW1s2Mzc0Nyw2Mzc0N10sXCJtYXBwZWRcIixbMzYwNDBdXSxbWzYzNzQ4LDYzNzQ4XSxcIm1hcHBlZFwiLFsyODM2OV1dLFtbNjM3NDksNjM3NDldLFwibWFwcGVkXCIsWzIwMDE4XV0sW1s2Mzc1MCw2Mzc1MF0sXCJtYXBwZWRcIixbMjE0NzddXSxbWzYzNzUxLDYzNzUyXSxcIm1hcHBlZFwiLFs0MDg2MF1dLFtbNjM3NTMsNjM3NTNdLFwibWFwcGVkXCIsWzIyODY1XV0sW1s2Mzc1NCw2Mzc1NF0sXCJtYXBwZWRcIixbMzczMjldXSxbWzYzNzU1LDYzNzU1XSxcIm1hcHBlZFwiLFsyMTg5NV1dLFtbNjM3NTYsNjM3NTZdLFwibWFwcGVkXCIsWzIyODU2XV0sW1s2Mzc1Nyw2Mzc1N10sXCJtYXBwZWRcIixbMjUwNzhdXSxbWzYzNzU4LDYzNzU4XSxcIm1hcHBlZFwiLFszMDMxM11dLFtbNjM3NTksNjM3NTldLFwibWFwcGVkXCIsWzMyNjQ1XV0sW1s2Mzc2MCw2Mzc2MF0sXCJtYXBwZWRcIixbMzQzNjddXSxbWzYzNzYxLDYzNzYxXSxcIm1hcHBlZFwiLFszNDc0Nl1dLFtbNjM3NjIsNjM3NjJdLFwibWFwcGVkXCIsWzM1MDY0XV0sW1s2Mzc2Myw2Mzc2M10sXCJtYXBwZWRcIixbMzcwMDddXSxbWzYzNzY0LDYzNzY0XSxcIm1hcHBlZFwiLFsyNzEzOF1dLFtbNjM3NjUsNjM3NjVdLFwibWFwcGVkXCIsWzI3OTMxXV0sW1s2Mzc2Niw2Mzc2Nl0sXCJtYXBwZWRcIixbMjg4ODldXSxbWzYzNzY3LDYzNzY3XSxcIm1hcHBlZFwiLFsyOTY2Ml1dLFtbNjM3NjgsNjM3NjhdLFwibWFwcGVkXCIsWzMzODUzXV0sW1s2Mzc2OSw2Mzc2OV0sXCJtYXBwZWRcIixbMzcyMjZdXSxbWzYzNzcwLDYzNzcwXSxcIm1hcHBlZFwiLFszOTQwOV1dLFtbNjM3NzEsNjM3NzFdLFwibWFwcGVkXCIsWzIwMDk4XV0sW1s2Mzc3Miw2Mzc3Ml0sXCJtYXBwZWRcIixbMjEzNjVdXSxbWzYzNzczLDYzNzczXSxcIm1hcHBlZFwiLFsyNzM5Nl1dLFtbNjM3NzQsNjM3NzRdLFwibWFwcGVkXCIsWzI5MjExXV0sW1s2Mzc3NSw2Mzc3NV0sXCJtYXBwZWRcIixbMzQzNDldXSxbWzYzNzc2LDYzNzc2XSxcIm1hcHBlZFwiLFs0MDQ3OF1dLFtbNjM3NzcsNjM3NzddLFwibWFwcGVkXCIsWzIzODg4XV0sW1s2Mzc3OCw2Mzc3OF0sXCJtYXBwZWRcIixbMjg2NTFdXSxbWzYzNzc5LDYzNzc5XSxcIm1hcHBlZFwiLFszNDI1M11dLFtbNjM3ODAsNjM3ODBdLFwibWFwcGVkXCIsWzM1MTcyXV0sW1s2Mzc4MSw2Mzc4MV0sXCJtYXBwZWRcIixbMjUyODldXSxbWzYzNzgyLDYzNzgyXSxcIm1hcHBlZFwiLFszMzI0MF1dLFtbNjM3ODMsNjM3ODNdLFwibWFwcGVkXCIsWzM0ODQ3XV0sW1s2Mzc4NCw2Mzc4NF0sXCJtYXBwZWRcIixbMjQyNjZdXSxbWzYzNzg1LDYzNzg1XSxcIm1hcHBlZFwiLFsyNjM5MV1dLFtbNjM3ODYsNjM3ODZdLFwibWFwcGVkXCIsWzI4MDEwXV0sW1s2Mzc4Nyw2Mzc4N10sXCJtYXBwZWRcIixbMjk0MzZdXSxbWzYzNzg4LDYzNzg4XSxcIm1hcHBlZFwiLFszNzA3MF1dLFtbNjM3ODksNjM3ODldLFwibWFwcGVkXCIsWzIwMzU4XV0sW1s2Mzc5MCw2Mzc5MF0sXCJtYXBwZWRcIixbMjA5MTldXSxbWzYzNzkxLDYzNzkxXSxcIm1hcHBlZFwiLFsyMTIxNF1dLFtbNjM3OTIsNjM3OTJdLFwibWFwcGVkXCIsWzI1Nzk2XV0sW1s2Mzc5Myw2Mzc5M10sXCJtYXBwZWRcIixbMjczNDddXSxbWzYzNzk0LDYzNzk0XSxcIm1hcHBlZFwiLFsyOTIwMF1dLFtbNjM3OTUsNjM3OTVdLFwibWFwcGVkXCIsWzMwNDM5XV0sW1s2Mzc5Niw2Mzc5Nl0sXCJtYXBwZWRcIixbMzI3NjldXSxbWzYzNzk3LDYzNzk3XSxcIm1hcHBlZFwiLFszNDMxMF1dLFtbNjM3OTgsNjM3OThdLFwibWFwcGVkXCIsWzM0Mzk2XV0sW1s2Mzc5OSw2Mzc5OV0sXCJtYXBwZWRcIixbMzYzMzVdXSxbWzYzODAwLDYzODAwXSxcIm1hcHBlZFwiLFszODcwNl1dLFtbNjM4MDEsNjM4MDFdLFwibWFwcGVkXCIsWzM5NzkxXV0sW1s2MzgwMiw2MzgwMl0sXCJtYXBwZWRcIixbNDA0NDJdXSxbWzYzODAzLDYzODAzXSxcIm1hcHBlZFwiLFszMDg2MF1dLFtbNjM4MDQsNjM4MDRdLFwibWFwcGVkXCIsWzMxMTAzXV0sW1s2MzgwNSw2MzgwNV0sXCJtYXBwZWRcIixbMzIxNjBdXSxbWzYzODA2LDYzODA2XSxcIm1hcHBlZFwiLFszMzczN11dLFtbNjM4MDcsNjM4MDddLFwibWFwcGVkXCIsWzM3NjM2XV0sW1s2MzgwOCw2MzgwOF0sXCJtYXBwZWRcIixbNDA1NzVdXSxbWzYzODA5LDYzODA5XSxcIm1hcHBlZFwiLFszNTU0Ml1dLFtbNjM4MTAsNjM4MTBdLFwibWFwcGVkXCIsWzIyNzUxXV0sW1s2MzgxMSw2MzgxMV0sXCJtYXBwZWRcIixbMjQzMjRdXSxbWzYzODEyLDYzODEyXSxcIm1hcHBlZFwiLFszMTg0MF1dLFtbNjM4MTMsNjM4MTNdLFwibWFwcGVkXCIsWzMyODk0XV0sW1s2MzgxNCw2MzgxNF0sXCJtYXBwZWRcIixbMjkyODJdXSxbWzYzODE1LDYzODE1XSxcIm1hcHBlZFwiLFszMDkyMl1dLFtbNjM4MTYsNjM4MTZdLFwibWFwcGVkXCIsWzM2MDM0XV0sW1s2MzgxNyw2MzgxN10sXCJtYXBwZWRcIixbMzg2NDddXSxbWzYzODE4LDYzODE4XSxcIm1hcHBlZFwiLFsyMjc0NF1dLFtbNjM4MTksNjM4MTldLFwibWFwcGVkXCIsWzIzNjUwXV0sW1s2MzgyMCw2MzgyMF0sXCJtYXBwZWRcIixbMjcxNTVdXSxbWzYzODIxLDYzODIxXSxcIm1hcHBlZFwiLFsyODEyMl1dLFtbNjM4MjIsNjM4MjJdLFwibWFwcGVkXCIsWzI4NDMxXV0sW1s2MzgyMyw2MzgyM10sXCJtYXBwZWRcIixbMzIwNDddXSxbWzYzODI0LDYzODI0XSxcIm1hcHBlZFwiLFszMjMxMV1dLFtbNjM4MjUsNjM4MjVdLFwibWFwcGVkXCIsWzM4NDc1XV0sW1s2MzgyNiw2MzgyNl0sXCJtYXBwZWRcIixbMjEyMDJdXSxbWzYzODI3LDYzODI3XSxcIm1hcHBlZFwiLFszMjkwN11dLFtbNjM4MjgsNjM4MjhdLFwibWFwcGVkXCIsWzIwOTU2XV0sW1s2MzgyOSw2MzgyOV0sXCJtYXBwZWRcIixbMjA5NDBdXSxbWzYzODMwLDYzODMwXSxcIm1hcHBlZFwiLFszMTI2MF1dLFtbNjM4MzEsNjM4MzFdLFwibWFwcGVkXCIsWzMyMTkwXV0sW1s2MzgzMiw2MzgzMl0sXCJtYXBwZWRcIixbMzM3NzddXSxbWzYzODMzLDYzODMzXSxcIm1hcHBlZFwiLFszODUxN11dLFtbNjM4MzQsNjM4MzRdLFwibWFwcGVkXCIsWzM1NzEyXV0sW1s2MzgzNSw2MzgzNV0sXCJtYXBwZWRcIixbMjUyOTVdXSxbWzYzODM2LDYzODM2XSxcIm1hcHBlZFwiLFsyNzEzOF1dLFtbNjM4MzcsNjM4MzddLFwibWFwcGVkXCIsWzM1NTgyXV0sW1s2MzgzOCw2MzgzOF0sXCJtYXBwZWRcIixbMjAwMjVdXSxbWzYzODM5LDYzODM5XSxcIm1hcHBlZFwiLFsyMzUyN11dLFtbNjM4NDAsNjM4NDBdLFwibWFwcGVkXCIsWzI0NTk0XV0sW1s2Mzg0MSw2Mzg0MV0sXCJtYXBwZWRcIixbMjk1NzVdXSxbWzYzODQyLDYzODQyXSxcIm1hcHBlZFwiLFszMDA2NF1dLFtbNjM4NDMsNjM4NDNdLFwibWFwcGVkXCIsWzIxMjcxXV0sW1s2Mzg0NCw2Mzg0NF0sXCJtYXBwZWRcIixbMzA5NzFdXSxbWzYzODQ1LDYzODQ1XSxcIm1hcHBlZFwiLFsyMDQxNV1dLFtbNjM4NDYsNjM4NDZdLFwibWFwcGVkXCIsWzI0NDg5XV0sW1s2Mzg0Nyw2Mzg0N10sXCJtYXBwZWRcIixbMTk5ODFdXSxbWzYzODQ4LDYzODQ4XSxcIm1hcHBlZFwiLFsyNzg1Ml1dLFtbNjM4NDksNjM4NDldLFwibWFwcGVkXCIsWzI1OTc2XV0sW1s2Mzg1MCw2Mzg1MF0sXCJtYXBwZWRcIixbMzIwMzRdXSxbWzYzODUxLDYzODUxXSxcIm1hcHBlZFwiLFsyMTQ0M11dLFtbNjM4NTIsNjM4NTJdLFwibWFwcGVkXCIsWzIyNjIyXV0sW1s2Mzg1Myw2Mzg1M10sXCJtYXBwZWRcIixbMzA0NjVdXSxbWzYzODU0LDYzODU0XSxcIm1hcHBlZFwiLFszMzg2NV1dLFtbNjM4NTUsNjM4NTVdLFwibWFwcGVkXCIsWzM1NDk4XV0sW1s2Mzg1Niw2Mzg1Nl0sXCJtYXBwZWRcIixbMjc1NzhdXSxbWzYzODU3LDYzODU3XSxcIm1hcHBlZFwiLFszNjc4NF1dLFtbNjM4NTgsNjM4NThdLFwibWFwcGVkXCIsWzI3Nzg0XV0sW1s2Mzg1OSw2Mzg1OV0sXCJtYXBwZWRcIixbMjUzNDJdXSxbWzYzODYwLDYzODYwXSxcIm1hcHBlZFwiLFszMzUwOV1dLFtbNjM4NjEsNjM4NjFdLFwibWFwcGVkXCIsWzI1NTA0XV0sW1s2Mzg2Miw2Mzg2Ml0sXCJtYXBwZWRcIixbMzAwNTNdXSxbWzYzODYzLDYzODYzXSxcIm1hcHBlZFwiLFsyMDE0Ml1dLFtbNjM4NjQsNjM4NjRdLFwibWFwcGVkXCIsWzIwODQxXV0sW1s2Mzg2NSw2Mzg2NV0sXCJtYXBwZWRcIixbMjA5MzddXSxbWzYzODY2LDYzODY2XSxcIm1hcHBlZFwiLFsyNjc1M11dLFtbNjM4NjcsNjM4NjddLFwibWFwcGVkXCIsWzMxOTc1XV0sW1s2Mzg2OCw2Mzg2OF0sXCJtYXBwZWRcIixbMzMzOTFdXSxbWzYzODY5LDYzODY5XSxcIm1hcHBlZFwiLFszNTUzOF1dLFtbNjM4NzAsNjM4NzBdLFwibWFwcGVkXCIsWzM3MzI3XV0sW1s2Mzg3MSw2Mzg3MV0sXCJtYXBwZWRcIixbMjEyMzddXSxbWzYzODcyLDYzODcyXSxcIm1hcHBlZFwiLFsyMTU3MF1dLFtbNjM4NzMsNjM4NzNdLFwibWFwcGVkXCIsWzIyODk5XV0sW1s2Mzg3NCw2Mzg3NF0sXCJtYXBwZWRcIixbMjQzMDBdXSxbWzYzODc1LDYzODc1XSxcIm1hcHBlZFwiLFsyNjA1M11dLFtbNjM4NzYsNjM4NzZdLFwibWFwcGVkXCIsWzI4NjcwXV0sW1s2Mzg3Nyw2Mzg3N10sXCJtYXBwZWRcIixbMzEwMThdXSxbWzYzODc4LDYzODc4XSxcIm1hcHBlZFwiLFszODMxN11dLFtbNjM4NzksNjM4NzldLFwibWFwcGVkXCIsWzM5NTMwXV0sW1s2Mzg4MCw2Mzg4MF0sXCJtYXBwZWRcIixbNDA1OTldXSxbWzYzODgxLDYzODgxXSxcIm1hcHBlZFwiLFs0MDY1NF1dLFtbNjM4ODIsNjM4ODJdLFwibWFwcGVkXCIsWzIxMTQ3XV0sW1s2Mzg4Myw2Mzg4M10sXCJtYXBwZWRcIixbMjYzMTBdXSxbWzYzODg0LDYzODg0XSxcIm1hcHBlZFwiLFsyNzUxMV1dLFtbNjM4ODUsNjM4ODVdLFwibWFwcGVkXCIsWzM2NzA2XV0sW1s2Mzg4Niw2Mzg4Nl0sXCJtYXBwZWRcIixbMjQxODBdXSxbWzYzODg3LDYzODg3XSxcIm1hcHBlZFwiLFsyNDk3Nl1dLFtbNjM4ODgsNjM4ODhdLFwibWFwcGVkXCIsWzI1MDg4XV0sW1s2Mzg4OSw2Mzg4OV0sXCJtYXBwZWRcIixbMjU3NTRdXSxbWzYzODkwLDYzODkwXSxcIm1hcHBlZFwiLFsyODQ1MV1dLFtbNjM4OTEsNjM4OTFdLFwibWFwcGVkXCIsWzI5MDAxXV0sW1s2Mzg5Miw2Mzg5Ml0sXCJtYXBwZWRcIixbMjk4MzNdXSxbWzYzODkzLDYzODkzXSxcIm1hcHBlZFwiLFszMTE3OF1dLFtbNjM4OTQsNjM4OTRdLFwibWFwcGVkXCIsWzMyMjQ0XV0sW1s2Mzg5NSw2Mzg5NV0sXCJtYXBwZWRcIixbMzI4NzldXSxbWzYzODk2LDYzODk2XSxcIm1hcHBlZFwiLFszNjY0Nl1dLFtbNjM4OTcsNjM4OTddLFwibWFwcGVkXCIsWzM0MDMwXV0sW1s2Mzg5OCw2Mzg5OF0sXCJtYXBwZWRcIixbMzY4OTldXSxbWzYzODk5LDYzODk5XSxcIm1hcHBlZFwiLFszNzcwNl1dLFtbNjM5MDAsNjM5MDBdLFwibWFwcGVkXCIsWzIxMDE1XV0sW1s2MzkwMSw2MzkwMV0sXCJtYXBwZWRcIixbMjExNTVdXSxbWzYzOTAyLDYzOTAyXSxcIm1hcHBlZFwiLFsyMTY5M11dLFtbNjM5MDMsNjM5MDNdLFwibWFwcGVkXCIsWzI4ODcyXV0sW1s2MzkwNCw2MzkwNF0sXCJtYXBwZWRcIixbMzUwMTBdXSxbWzYzOTA1LDYzOTA1XSxcIm1hcHBlZFwiLFszNTQ5OF1dLFtbNjM5MDYsNjM5MDZdLFwibWFwcGVkXCIsWzI0MjY1XV0sW1s2MzkwNyw2MzkwN10sXCJtYXBwZWRcIixbMjQ1NjVdXSxbWzYzOTA4LDYzOTA4XSxcIm1hcHBlZFwiLFsyNTQ2N11dLFtbNjM5MDksNjM5MDldLFwibWFwcGVkXCIsWzI3NTY2XV0sW1s2MzkxMCw2MzkxMF0sXCJtYXBwZWRcIixbMzE4MDZdXSxbWzYzOTExLDYzOTExXSxcIm1hcHBlZFwiLFsyOTU1N11dLFtbNjM5MTIsNjM5MTJdLFwibWFwcGVkXCIsWzIwMTk2XV0sW1s2MzkxMyw2MzkxM10sXCJtYXBwZWRcIixbMjIyNjVdXSxbWzYzOTE0LDYzOTE0XSxcIm1hcHBlZFwiLFsyMzUyN11dLFtbNjM5MTUsNjM5MTVdLFwibWFwcGVkXCIsWzIzOTk0XV0sW1s2MzkxNiw2MzkxNl0sXCJtYXBwZWRcIixbMjQ2MDRdXSxbWzYzOTE3LDYzOTE3XSxcIm1hcHBlZFwiLFsyOTYxOF1dLFtbNjM5MTgsNjM5MThdLFwibWFwcGVkXCIsWzI5ODAxXV0sW1s2MzkxOSw2MzkxOV0sXCJtYXBwZWRcIixbMzI2NjZdXSxbWzYzOTIwLDYzOTIwXSxcIm1hcHBlZFwiLFszMjgzOF1dLFtbNjM5MjEsNjM5MjFdLFwibWFwcGVkXCIsWzM3NDI4XV0sW1s2MzkyMiw2MzkyMl0sXCJtYXBwZWRcIixbMzg2NDZdXSxbWzYzOTIzLDYzOTIzXSxcIm1hcHBlZFwiLFszODcyOF1dLFtbNjM5MjQsNjM5MjRdLFwibWFwcGVkXCIsWzM4OTM2XV0sW1s2MzkyNSw2MzkyNV0sXCJtYXBwZWRcIixbMjAzNjNdXSxbWzYzOTI2LDYzOTI2XSxcIm1hcHBlZFwiLFszMTE1MF1dLFtbNjM5MjcsNjM5MjddLFwibWFwcGVkXCIsWzM3MzAwXV0sW1s2MzkyOCw2MzkyOF0sXCJtYXBwZWRcIixbMzg1ODRdXSxbWzYzOTI5LDYzOTI5XSxcIm1hcHBlZFwiLFsyNDgwMV1dLFtbNjM5MzAsNjM5MzBdLFwibWFwcGVkXCIsWzIwMTAyXV0sW1s2MzkzMSw2MzkzMV0sXCJtYXBwZWRcIixbMjA2OThdXSxbWzYzOTMyLDYzOTMyXSxcIm1hcHBlZFwiLFsyMzUzNF1dLFtbNjM5MzMsNjM5MzNdLFwibWFwcGVkXCIsWzIzNjE1XV0sW1s2MzkzNCw2MzkzNF0sXCJtYXBwZWRcIixbMjYwMDldXSxbWzYzOTM1LDYzOTM1XSxcIm1hcHBlZFwiLFsyNzEzOF1dLFtbNjM5MzYsNjM5MzZdLFwibWFwcGVkXCIsWzI5MTM0XV0sW1s2MzkzNyw2MzkzN10sXCJtYXBwZWRcIixbMzAyNzRdXSxbWzYzOTM4LDYzOTM4XSxcIm1hcHBlZFwiLFszNDA0NF1dLFtbNjM5MzksNjM5MzldLFwibWFwcGVkXCIsWzM2OTg4XV0sW1s2Mzk0MCw2Mzk0MF0sXCJtYXBwZWRcIixbNDA4NDVdXSxbWzYzOTQxLDYzOTQxXSxcIm1hcHBlZFwiLFsyNjI0OF1dLFtbNjM5NDIsNjM5NDJdLFwibWFwcGVkXCIsWzM4NDQ2XV0sW1s2Mzk0Myw2Mzk0M10sXCJtYXBwZWRcIixbMjExMjldXSxbWzYzOTQ0LDYzOTQ0XSxcIm1hcHBlZFwiLFsyNjQ5MV1dLFtbNjM5NDUsNjM5NDVdLFwibWFwcGVkXCIsWzI2NjExXV0sW1s2Mzk0Niw2Mzk0Nl0sXCJtYXBwZWRcIixbMjc5NjldXSxbWzYzOTQ3LDYzOTQ3XSxcIm1hcHBlZFwiLFsyODMxNl1dLFtbNjM5NDgsNjM5NDhdLFwibWFwcGVkXCIsWzI5NzA1XV0sW1s2Mzk0OSw2Mzk0OV0sXCJtYXBwZWRcIixbMzAwNDFdXSxbWzYzOTUwLDYzOTUwXSxcIm1hcHBlZFwiLFszMDgyN11dLFtbNjM5NTEsNjM5NTFdLFwibWFwcGVkXCIsWzMyMDE2XV0sW1s2Mzk1Miw2Mzk1Ml0sXCJtYXBwZWRcIixbMzkwMDZdXSxbWzYzOTUzLDYzOTUzXSxcIm1hcHBlZFwiLFsyMDg0NV1dLFtbNjM5NTQsNjM5NTRdLFwibWFwcGVkXCIsWzI1MTM0XV0sW1s2Mzk1NSw2Mzk1NV0sXCJtYXBwZWRcIixbMzg1MjBdXSxbWzYzOTU2LDYzOTU2XSxcIm1hcHBlZFwiLFsyMDUyM11dLFtbNjM5NTcsNjM5NTddLFwibWFwcGVkXCIsWzIzODMzXV0sW1s2Mzk1OCw2Mzk1OF0sXCJtYXBwZWRcIixbMjgxMzhdXSxbWzYzOTU5LDYzOTU5XSxcIm1hcHBlZFwiLFszNjY1MF1dLFtbNjM5NjAsNjM5NjBdLFwibWFwcGVkXCIsWzI0NDU5XV0sW1s2Mzk2MSw2Mzk2MV0sXCJtYXBwZWRcIixbMjQ5MDBdXSxbWzYzOTYyLDYzOTYyXSxcIm1hcHBlZFwiLFsyNjY0N11dLFtbNjM5NjMsNjM5NjNdLFwibWFwcGVkXCIsWzI5NTc1XV0sW1s2Mzk2NCw2Mzk2NF0sXCJtYXBwZWRcIixbMzg1MzRdXSxbWzYzOTY1LDYzOTY1XSxcIm1hcHBlZFwiLFsyMTAzM11dLFtbNjM5NjYsNjM5NjZdLFwibWFwcGVkXCIsWzIxNTE5XV0sW1s2Mzk2Nyw2Mzk2N10sXCJtYXBwZWRcIixbMjM2NTNdXSxbWzYzOTY4LDYzOTY4XSxcIm1hcHBlZFwiLFsyNjEzMV1dLFtbNjM5NjksNjM5NjldLFwibWFwcGVkXCIsWzI2NDQ2XV0sW1s2Mzk3MCw2Mzk3MF0sXCJtYXBwZWRcIixbMjY3OTJdXSxbWzYzOTcxLDYzOTcxXSxcIm1hcHBlZFwiLFsyNzg3N11dLFtbNjM5NzIsNjM5NzJdLFwibWFwcGVkXCIsWzI5NzAyXV0sW1s2Mzk3Myw2Mzk3M10sXCJtYXBwZWRcIixbMzAxNzhdXSxbWzYzOTc0LDYzOTc0XSxcIm1hcHBlZFwiLFszMjYzM11dLFtbNjM5NzUsNjM5NzVdLFwibWFwcGVkXCIsWzM1MDIzXV0sW1s2Mzk3Niw2Mzk3Nl0sXCJtYXBwZWRcIixbMzUwNDFdXSxbWzYzOTc3LDYzOTc3XSxcIm1hcHBlZFwiLFszNzMyNF1dLFtbNjM5NzgsNjM5NzhdLFwibWFwcGVkXCIsWzM4NjI2XV0sW1s2Mzk3OSw2Mzk3OV0sXCJtYXBwZWRcIixbMjEzMTFdXSxbWzYzOTgwLDYzOTgwXSxcIm1hcHBlZFwiLFsyODM0Nl1dLFtbNjM5ODEsNjM5ODFdLFwibWFwcGVkXCIsWzIxNTMzXV0sW1s2Mzk4Miw2Mzk4Ml0sXCJtYXBwZWRcIixbMjkxMzZdXSxbWzYzOTgzLDYzOTgzXSxcIm1hcHBlZFwiLFsyOTg0OF1dLFtbNjM5ODQsNjM5ODRdLFwibWFwcGVkXCIsWzM0Mjk4XV0sW1s2Mzk4NSw2Mzk4NV0sXCJtYXBwZWRcIixbMzg1NjNdXSxbWzYzOTg2LDYzOTg2XSxcIm1hcHBlZFwiLFs0MDAyM11dLFtbNjM5ODcsNjM5ODddLFwibWFwcGVkXCIsWzQwNjA3XV0sW1s2Mzk4OCw2Mzk4OF0sXCJtYXBwZWRcIixbMjY1MTldXSxbWzYzOTg5LDYzOTg5XSxcIm1hcHBlZFwiLFsyODEwN11dLFtbNjM5OTAsNjM5OTBdLFwibWFwcGVkXCIsWzMzMjU2XV0sW1s2Mzk5MSw2Mzk5MV0sXCJtYXBwZWRcIixbMzE0MzVdXSxbWzYzOTkyLDYzOTkyXSxcIm1hcHBlZFwiLFszMTUyMF1dLFtbNjM5OTMsNjM5OTNdLFwibWFwcGVkXCIsWzMxODkwXV0sW1s2Mzk5NCw2Mzk5NF0sXCJtYXBwZWRcIixbMjkzNzZdXSxbWzYzOTk1LDYzOTk1XSxcIm1hcHBlZFwiLFsyODgyNV1dLFtbNjM5OTYsNjM5OTZdLFwibWFwcGVkXCIsWzM1NjcyXV0sW1s2Mzk5Nyw2Mzk5N10sXCJtYXBwZWRcIixbMjAxNjBdXSxbWzYzOTk4LDYzOTk4XSxcIm1hcHBlZFwiLFszMzU5MF1dLFtbNjM5OTksNjM5OTldLFwibWFwcGVkXCIsWzIxMDUwXV0sW1s2NDAwMCw2NDAwMF0sXCJtYXBwZWRcIixbMjA5OTldXSxbWzY0MDAxLDY0MDAxXSxcIm1hcHBlZFwiLFsyNDIzMF1dLFtbNjQwMDIsNjQwMDJdLFwibWFwcGVkXCIsWzI1Mjk5XV0sW1s2NDAwMyw2NDAwM10sXCJtYXBwZWRcIixbMzE5NThdXSxbWzY0MDA0LDY0MDA0XSxcIm1hcHBlZFwiLFsyMzQyOV1dLFtbNjQwMDUsNjQwMDVdLFwibWFwcGVkXCIsWzI3OTM0XV0sW1s2NDAwNiw2NDAwNl0sXCJtYXBwZWRcIixbMjYyOTJdXSxbWzY0MDA3LDY0MDA3XSxcIm1hcHBlZFwiLFszNjY2N11dLFtbNjQwMDgsNjQwMDhdLFwibWFwcGVkXCIsWzM0ODkyXV0sW1s2NDAwOSw2NDAwOV0sXCJtYXBwZWRcIixbMzg0NzddXSxbWzY0MDEwLDY0MDEwXSxcIm1hcHBlZFwiLFszNTIxMV1dLFtbNjQwMTEsNjQwMTFdLFwibWFwcGVkXCIsWzI0Mjc1XV0sW1s2NDAxMiw2NDAxMl0sXCJtYXBwZWRcIixbMjA4MDBdXSxbWzY0MDEzLDY0MDEzXSxcIm1hcHBlZFwiLFsyMTk1Ml1dLFtbNjQwMTQsNjQwMTVdLFwidmFsaWRcIl0sW1s2NDAxNiw2NDAxNl0sXCJtYXBwZWRcIixbMjI2MThdXSxbWzY0MDE3LDY0MDE3XSxcInZhbGlkXCJdLFtbNjQwMTgsNjQwMThdLFwibWFwcGVkXCIsWzI2MjI4XV0sW1s2NDAxOSw2NDAyMF0sXCJ2YWxpZFwiXSxbWzY0MDIxLDY0MDIxXSxcIm1hcHBlZFwiLFsyMDk1OF1dLFtbNjQwMjIsNjQwMjJdLFwibWFwcGVkXCIsWzI5NDgyXV0sW1s2NDAyMyw2NDAyM10sXCJtYXBwZWRcIixbMzA0MTBdXSxbWzY0MDI0LDY0MDI0XSxcIm1hcHBlZFwiLFszMTAzNl1dLFtbNjQwMjUsNjQwMjVdLFwibWFwcGVkXCIsWzMxMDcwXV0sW1s2NDAyNiw2NDAyNl0sXCJtYXBwZWRcIixbMzEwNzddXSxbWzY0MDI3LDY0MDI3XSxcIm1hcHBlZFwiLFszMTExOV1dLFtbNjQwMjgsNjQwMjhdLFwibWFwcGVkXCIsWzM4NzQyXV0sW1s2NDAyOSw2NDAyOV0sXCJtYXBwZWRcIixbMzE5MzRdXSxbWzY0MDMwLDY0MDMwXSxcIm1hcHBlZFwiLFszMjcwMV1dLFtbNjQwMzEsNjQwMzFdLFwidmFsaWRcIl0sW1s2NDAzMiw2NDAzMl0sXCJtYXBwZWRcIixbMzQzMjJdXSxbWzY0MDMzLDY0MDMzXSxcInZhbGlkXCJdLFtbNjQwMzQsNjQwMzRdLFwibWFwcGVkXCIsWzM1NTc2XV0sW1s2NDAzNSw2NDAzNl0sXCJ2YWxpZFwiXSxbWzY0MDM3LDY0MDM3XSxcIm1hcHBlZFwiLFszNjkyMF1dLFtbNjQwMzgsNjQwMzhdLFwibWFwcGVkXCIsWzM3MTE3XV0sW1s2NDAzOSw2NDA0MV0sXCJ2YWxpZFwiXSxbWzY0MDQyLDY0MDQyXSxcIm1hcHBlZFwiLFszOTE1MV1dLFtbNjQwNDMsNjQwNDNdLFwibWFwcGVkXCIsWzM5MTY0XV0sW1s2NDA0NCw2NDA0NF0sXCJtYXBwZWRcIixbMzkyMDhdXSxbWzY0MDQ1LDY0MDQ1XSxcIm1hcHBlZFwiLFs0MDM3Ml1dLFtbNjQwNDYsNjQwNDZdLFwibWFwcGVkXCIsWzM3MDg2XV0sW1s2NDA0Nyw2NDA0N10sXCJtYXBwZWRcIixbMzg1ODNdXSxbWzY0MDQ4LDY0MDQ4XSxcIm1hcHBlZFwiLFsyMDM5OF1dLFtbNjQwNDksNjQwNDldLFwibWFwcGVkXCIsWzIwNzExXV0sW1s2NDA1MCw2NDA1MF0sXCJtYXBwZWRcIixbMjA4MTNdXSxbWzY0MDUxLDY0MDUxXSxcIm1hcHBlZFwiLFsyMTE5M11dLFtbNjQwNTIsNjQwNTJdLFwibWFwcGVkXCIsWzIxMjIwXV0sW1s2NDA1Myw2NDA1M10sXCJtYXBwZWRcIixbMjEzMjldXSxbWzY0MDU0LDY0MDU0XSxcIm1hcHBlZFwiLFsyMTkxN11dLFtbNjQwNTUsNjQwNTVdLFwibWFwcGVkXCIsWzIyMDIyXV0sW1s2NDA1Niw2NDA1Nl0sXCJtYXBwZWRcIixbMjIxMjBdXSxbWzY0MDU3LDY0MDU3XSxcIm1hcHBlZFwiLFsyMjU5Ml1dLFtbNjQwNTgsNjQwNThdLFwibWFwcGVkXCIsWzIyNjk2XV0sW1s2NDA1OSw2NDA1OV0sXCJtYXBwZWRcIixbMjM2NTJdXSxbWzY0MDYwLDY0MDYwXSxcIm1hcHBlZFwiLFsyMzY2Ml1dLFtbNjQwNjEsNjQwNjFdLFwibWFwcGVkXCIsWzI0NzI0XV0sW1s2NDA2Miw2NDA2Ml0sXCJtYXBwZWRcIixbMjQ5MzZdXSxbWzY0MDYzLDY0MDYzXSxcIm1hcHBlZFwiLFsyNDk3NF1dLFtbNjQwNjQsNjQwNjRdLFwibWFwcGVkXCIsWzI1MDc0XV0sW1s2NDA2NSw2NDA2NV0sXCJtYXBwZWRcIixbMjU5MzVdXSxbWzY0MDY2LDY0MDY2XSxcIm1hcHBlZFwiLFsyNjA4Ml1dLFtbNjQwNjcsNjQwNjddLFwibWFwcGVkXCIsWzI2MjU3XV0sW1s2NDA2OCw2NDA2OF0sXCJtYXBwZWRcIixbMjY3NTddXSxbWzY0MDY5LDY0MDY5XSxcIm1hcHBlZFwiLFsyODAyM11dLFtbNjQwNzAsNjQwNzBdLFwibWFwcGVkXCIsWzI4MTg2XV0sW1s2NDA3MSw2NDA3MV0sXCJtYXBwZWRcIixbMjg0NTBdXSxbWzY0MDcyLDY0MDcyXSxcIm1hcHBlZFwiLFsyOTAzOF1dLFtbNjQwNzMsNjQwNzNdLFwibWFwcGVkXCIsWzI5MjI3XV0sW1s2NDA3NCw2NDA3NF0sXCJtYXBwZWRcIixbMjk3MzBdXSxbWzY0MDc1LDY0MDc1XSxcIm1hcHBlZFwiLFszMDg2NV1dLFtbNjQwNzYsNjQwNzZdLFwibWFwcGVkXCIsWzMxMDM4XV0sW1s2NDA3Nyw2NDA3N10sXCJtYXBwZWRcIixbMzEwNDldXSxbWzY0MDc4LDY0MDc4XSxcIm1hcHBlZFwiLFszMTA0OF1dLFtbNjQwNzksNjQwNzldLFwibWFwcGVkXCIsWzMxMDU2XV0sW1s2NDA4MCw2NDA4MF0sXCJtYXBwZWRcIixbMzEwNjJdXSxbWzY0MDgxLDY0MDgxXSxcIm1hcHBlZFwiLFszMTA2OV1dLFtbNjQwODIsNjQwODJdLFwibWFwcGVkXCIsWzMxMTE3XV0sW1s2NDA4Myw2NDA4M10sXCJtYXBwZWRcIixbMzExMThdXSxbWzY0MDg0LDY0MDg0XSxcIm1hcHBlZFwiLFszMTI5Nl1dLFtbNjQwODUsNjQwODVdLFwibWFwcGVkXCIsWzMxMzYxXV0sW1s2NDA4Niw2NDA4Nl0sXCJtYXBwZWRcIixbMzE2ODBdXSxbWzY0MDg3LDY0MDg3XSxcIm1hcHBlZFwiLFszMjI0NF1dLFtbNjQwODgsNjQwODhdLFwibWFwcGVkXCIsWzMyMjY1XV0sW1s2NDA4OSw2NDA4OV0sXCJtYXBwZWRcIixbMzIzMjFdXSxbWzY0MDkwLDY0MDkwXSxcIm1hcHBlZFwiLFszMjYyNl1dLFtbNjQwOTEsNjQwOTFdLFwibWFwcGVkXCIsWzMyNzczXV0sW1s2NDA5Miw2NDA5Ml0sXCJtYXBwZWRcIixbMzMyNjFdXSxbWzY0MDkzLDY0MDk0XSxcIm1hcHBlZFwiLFszMzQwMV1dLFtbNjQwOTUsNjQwOTVdLFwibWFwcGVkXCIsWzMzODc5XV0sW1s2NDA5Niw2NDA5Nl0sXCJtYXBwZWRcIixbMzUwODhdXSxbWzY0MDk3LDY0MDk3XSxcIm1hcHBlZFwiLFszNTIyMl1dLFtbNjQwOTgsNjQwOThdLFwibWFwcGVkXCIsWzM1NTg1XV0sW1s2NDA5OSw2NDA5OV0sXCJtYXBwZWRcIixbMzU2NDFdXSxbWzY0MTAwLDY0MTAwXSxcIm1hcHBlZFwiLFszNjA1MV1dLFtbNjQxMDEsNjQxMDFdLFwibWFwcGVkXCIsWzM2MTA0XV0sW1s2NDEwMiw2NDEwMl0sXCJtYXBwZWRcIixbMzY3OTBdXSxbWzY0MTAzLDY0MTAzXSxcIm1hcHBlZFwiLFszNjkyMF1dLFtbNjQxMDQsNjQxMDRdLFwibWFwcGVkXCIsWzM4NjI3XV0sW1s2NDEwNSw2NDEwNV0sXCJtYXBwZWRcIixbMzg5MTFdXSxbWzY0MTA2LDY0MTA2XSxcIm1hcHBlZFwiLFszODk3MV1dLFtbNjQxMDcsNjQxMDddLFwibWFwcGVkXCIsWzI0NjkzXV0sW1s2NDEwOCw2NDEwOF0sXCJtYXBwZWRcIixbMTQ4MjA2XV0sW1s2NDEwOSw2NDEwOV0sXCJtYXBwZWRcIixbMzMzMDRdXSxbWzY0MTEwLDY0MTExXSxcImRpc2FsbG93ZWRcIl0sW1s2NDExMiw2NDExMl0sXCJtYXBwZWRcIixbMjAwMDZdXSxbWzY0MTEzLDY0MTEzXSxcIm1hcHBlZFwiLFsyMDkxN11dLFtbNjQxMTQsNjQxMTRdLFwibWFwcGVkXCIsWzIwODQwXV0sW1s2NDExNSw2NDExNV0sXCJtYXBwZWRcIixbMjAzNTJdXSxbWzY0MTE2LDY0MTE2XSxcIm1hcHBlZFwiLFsyMDgwNV1dLFtbNjQxMTcsNjQxMTddLFwibWFwcGVkXCIsWzIwODY0XV0sW1s2NDExOCw2NDExOF0sXCJtYXBwZWRcIixbMjExOTFdXSxbWzY0MTE5LDY0MTE5XSxcIm1hcHBlZFwiLFsyMTI0Ml1dLFtbNjQxMjAsNjQxMjBdLFwibWFwcGVkXCIsWzIxOTE3XV0sW1s2NDEyMSw2NDEyMV0sXCJtYXBwZWRcIixbMjE4NDVdXSxbWzY0MTIyLDY0MTIyXSxcIm1hcHBlZFwiLFsyMTkxM11dLFtbNjQxMjMsNjQxMjNdLFwibWFwcGVkXCIsWzIxOTg2XV0sW1s2NDEyNCw2NDEyNF0sXCJtYXBwZWRcIixbMjI2MThdXSxbWzY0MTI1LDY0MTI1XSxcIm1hcHBlZFwiLFsyMjcwN11dLFtbNjQxMjYsNjQxMjZdLFwibWFwcGVkXCIsWzIyODUyXV0sW1s2NDEyNyw2NDEyN10sXCJtYXBwZWRcIixbMjI4NjhdXSxbWzY0MTI4LDY0MTI4XSxcIm1hcHBlZFwiLFsyMzEzOF1dLFtbNjQxMjksNjQxMjldLFwibWFwcGVkXCIsWzIzMzM2XV0sW1s2NDEzMCw2NDEzMF0sXCJtYXBwZWRcIixbMjQyNzRdXSxbWzY0MTMxLDY0MTMxXSxcIm1hcHBlZFwiLFsyNDI4MV1dLFtbNjQxMzIsNjQxMzJdLFwibWFwcGVkXCIsWzI0NDI1XV0sW1s2NDEzMyw2NDEzM10sXCJtYXBwZWRcIixbMjQ0OTNdXSxbWzY0MTM0LDY0MTM0XSxcIm1hcHBlZFwiLFsyNDc5Ml1dLFtbNjQxMzUsNjQxMzVdLFwibWFwcGVkXCIsWzI0OTEwXV0sW1s2NDEzNiw2NDEzNl0sXCJtYXBwZWRcIixbMjQ4NDBdXSxbWzY0MTM3LDY0MTM3XSxcIm1hcHBlZFwiLFsyNDk3NF1dLFtbNjQxMzgsNjQxMzhdLFwibWFwcGVkXCIsWzI0OTI4XV0sW1s2NDEzOSw2NDEzOV0sXCJtYXBwZWRcIixbMjUwNzRdXSxbWzY0MTQwLDY0MTQwXSxcIm1hcHBlZFwiLFsyNTE0MF1dLFtbNjQxNDEsNjQxNDFdLFwibWFwcGVkXCIsWzI1NTQwXV0sW1s2NDE0Miw2NDE0Ml0sXCJtYXBwZWRcIixbMjU2MjhdXSxbWzY0MTQzLDY0MTQzXSxcIm1hcHBlZFwiLFsyNTY4Ml1dLFtbNjQxNDQsNjQxNDRdLFwibWFwcGVkXCIsWzI1OTQyXV0sW1s2NDE0NSw2NDE0NV0sXCJtYXBwZWRcIixbMjYyMjhdXSxbWzY0MTQ2LDY0MTQ2XSxcIm1hcHBlZFwiLFsyNjM5MV1dLFtbNjQxNDcsNjQxNDddLFwibWFwcGVkXCIsWzI2Mzk1XV0sW1s2NDE0OCw2NDE0OF0sXCJtYXBwZWRcIixbMjY0NTRdXSxbWzY0MTQ5LDY0MTQ5XSxcIm1hcHBlZFwiLFsyNzUxM11dLFtbNjQxNTAsNjQxNTBdLFwibWFwcGVkXCIsWzI3NTc4XV0sW1s2NDE1MSw2NDE1MV0sXCJtYXBwZWRcIixbMjc5NjldXSxbWzY0MTUyLDY0MTUyXSxcIm1hcHBlZFwiLFsyODM3OV1dLFtbNjQxNTMsNjQxNTNdLFwibWFwcGVkXCIsWzI4MzYzXV0sW1s2NDE1NCw2NDE1NF0sXCJtYXBwZWRcIixbMjg0NTBdXSxbWzY0MTU1LDY0MTU1XSxcIm1hcHBlZFwiLFsyODcwMl1dLFtbNjQxNTYsNjQxNTZdLFwibWFwcGVkXCIsWzI5MDM4XV0sW1s2NDE1Nyw2NDE1N10sXCJtYXBwZWRcIixbMzA2MzFdXSxbWzY0MTU4LDY0MTU4XSxcIm1hcHBlZFwiLFsyOTIzN11dLFtbNjQxNTksNjQxNTldLFwibWFwcGVkXCIsWzI5MzU5XV0sW1s2NDE2MCw2NDE2MF0sXCJtYXBwZWRcIixbMjk0ODJdXSxbWzY0MTYxLDY0MTYxXSxcIm1hcHBlZFwiLFsyOTgwOV1dLFtbNjQxNjIsNjQxNjJdLFwibWFwcGVkXCIsWzI5OTU4XV0sW1s2NDE2Myw2NDE2M10sXCJtYXBwZWRcIixbMzAwMTFdXSxbWzY0MTY0LDY0MTY0XSxcIm1hcHBlZFwiLFszMDIzN11dLFtbNjQxNjUsNjQxNjVdLFwibWFwcGVkXCIsWzMwMjM5XV0sW1s2NDE2Niw2NDE2Nl0sXCJtYXBwZWRcIixbMzA0MTBdXSxbWzY0MTY3LDY0MTY3XSxcIm1hcHBlZFwiLFszMDQyN11dLFtbNjQxNjgsNjQxNjhdLFwibWFwcGVkXCIsWzMwNDUyXV0sW1s2NDE2OSw2NDE2OV0sXCJtYXBwZWRcIixbMzA1MzhdXSxbWzY0MTcwLDY0MTcwXSxcIm1hcHBlZFwiLFszMDUyOF1dLFtbNjQxNzEsNjQxNzFdLFwibWFwcGVkXCIsWzMwOTI0XV0sW1s2NDE3Miw2NDE3Ml0sXCJtYXBwZWRcIixbMzE0MDldXSxbWzY0MTczLDY0MTczXSxcIm1hcHBlZFwiLFszMTY4MF1dLFtbNjQxNzQsNjQxNzRdLFwibWFwcGVkXCIsWzMxODY3XV0sW1s2NDE3NSw2NDE3NV0sXCJtYXBwZWRcIixbMzIwOTFdXSxbWzY0MTc2LDY0MTc2XSxcIm1hcHBlZFwiLFszMjI0NF1dLFtbNjQxNzcsNjQxNzddLFwibWFwcGVkXCIsWzMyNTc0XV0sW1s2NDE3OCw2NDE3OF0sXCJtYXBwZWRcIixbMzI3NzNdXSxbWzY0MTc5LDY0MTc5XSxcIm1hcHBlZFwiLFszMzYxOF1dLFtbNjQxODAsNjQxODBdLFwibWFwcGVkXCIsWzMzNzc1XV0sW1s2NDE4MSw2NDE4MV0sXCJtYXBwZWRcIixbMzQ2ODFdXSxbWzY0MTgyLDY0MTgyXSxcIm1hcHBlZFwiLFszNTEzN11dLFtbNjQxODMsNjQxODNdLFwibWFwcGVkXCIsWzM1MjA2XV0sW1s2NDE4NCw2NDE4NF0sXCJtYXBwZWRcIixbMzUyMjJdXSxbWzY0MTg1LDY0MTg1XSxcIm1hcHBlZFwiLFszNTUxOV1dLFtbNjQxODYsNjQxODZdLFwibWFwcGVkXCIsWzM1NTc2XV0sW1s2NDE4Nyw2NDE4N10sXCJtYXBwZWRcIixbMzU1MzFdXSxbWzY0MTg4LDY0MTg4XSxcIm1hcHBlZFwiLFszNTU4NV1dLFtbNjQxODksNjQxODldLFwibWFwcGVkXCIsWzM1NTgyXV0sW1s2NDE5MCw2NDE5MF0sXCJtYXBwZWRcIixbMzU1NjVdXSxbWzY0MTkxLDY0MTkxXSxcIm1hcHBlZFwiLFszNTY0MV1dLFtbNjQxOTIsNjQxOTJdLFwibWFwcGVkXCIsWzM1NzIyXV0sW1s2NDE5Myw2NDE5M10sXCJtYXBwZWRcIixbMzYxMDRdXSxbWzY0MTk0LDY0MTk0XSxcIm1hcHBlZFwiLFszNjY2NF1dLFtbNjQxOTUsNjQxOTVdLFwibWFwcGVkXCIsWzM2OTc4XV0sW1s2NDE5Niw2NDE5Nl0sXCJtYXBwZWRcIixbMzcyNzNdXSxbWzY0MTk3LDY0MTk3XSxcIm1hcHBlZFwiLFszNzQ5NF1dLFtbNjQxOTgsNjQxOThdLFwibWFwcGVkXCIsWzM4NTI0XV0sW1s2NDE5OSw2NDE5OV0sXCJtYXBwZWRcIixbMzg2MjddXSxbWzY0MjAwLDY0MjAwXSxcIm1hcHBlZFwiLFszODc0Ml1dLFtbNjQyMDEsNjQyMDFdLFwibWFwcGVkXCIsWzM4ODc1XV0sW1s2NDIwMiw2NDIwMl0sXCJtYXBwZWRcIixbMzg5MTFdXSxbWzY0MjAzLDY0MjAzXSxcIm1hcHBlZFwiLFszODkyM11dLFtbNjQyMDQsNjQyMDRdLFwibWFwcGVkXCIsWzM4OTcxXV0sW1s2NDIwNSw2NDIwNV0sXCJtYXBwZWRcIixbMzk2OThdXSxbWzY0MjA2LDY0MjA2XSxcIm1hcHBlZFwiLFs0MDg2MF1dLFtbNjQyMDcsNjQyMDddLFwibWFwcGVkXCIsWzE0MTM4Nl1dLFtbNjQyMDgsNjQyMDhdLFwibWFwcGVkXCIsWzE0MTM4MF1dLFtbNjQyMDksNjQyMDldLFwibWFwcGVkXCIsWzE0NDM0MV1dLFtbNjQyMTAsNjQyMTBdLFwibWFwcGVkXCIsWzE1MjYxXV0sW1s2NDIxMSw2NDIxMV0sXCJtYXBwZWRcIixbMTY0MDhdXSxbWzY0MjEyLDY0MjEyXSxcIm1hcHBlZFwiLFsxNjQ0MV1dLFtbNjQyMTMsNjQyMTNdLFwibWFwcGVkXCIsWzE1MjEzN11dLFtbNjQyMTQsNjQyMTRdLFwibWFwcGVkXCIsWzE1NDgzMl1dLFtbNjQyMTUsNjQyMTVdLFwibWFwcGVkXCIsWzE2MzUzOV1dLFtbNjQyMTYsNjQyMTZdLFwibWFwcGVkXCIsWzQwNzcxXV0sW1s2NDIxNyw2NDIxN10sXCJtYXBwZWRcIixbNDA4NDZdXSxbWzY0MjE4LDY0MjU1XSxcImRpc2FsbG93ZWRcIl0sW1s2NDI1Niw2NDI1Nl0sXCJtYXBwZWRcIixbMTAyLDEwMl1dLFtbNjQyNTcsNjQyNTddLFwibWFwcGVkXCIsWzEwMiwxMDVdXSxbWzY0MjU4LDY0MjU4XSxcIm1hcHBlZFwiLFsxMDIsMTA4XV0sW1s2NDI1OSw2NDI1OV0sXCJtYXBwZWRcIixbMTAyLDEwMiwxMDVdXSxbWzY0MjYwLDY0MjYwXSxcIm1hcHBlZFwiLFsxMDIsMTAyLDEwOF1dLFtbNjQyNjEsNjQyNjJdLFwibWFwcGVkXCIsWzExNSwxMTZdXSxbWzY0MjYzLDY0Mjc0XSxcImRpc2FsbG93ZWRcIl0sW1s2NDI3NSw2NDI3NV0sXCJtYXBwZWRcIixbMTM5NiwxMzk4XV0sW1s2NDI3Niw2NDI3Nl0sXCJtYXBwZWRcIixbMTM5NiwxMzgxXV0sW1s2NDI3Nyw2NDI3N10sXCJtYXBwZWRcIixbMTM5NiwxMzg3XV0sW1s2NDI3OCw2NDI3OF0sXCJtYXBwZWRcIixbMTQwNiwxMzk4XV0sW1s2NDI3OSw2NDI3OV0sXCJtYXBwZWRcIixbMTM5NiwxMzg5XV0sW1s2NDI4MCw2NDI4NF0sXCJkaXNhbGxvd2VkXCJdLFtbNjQyODUsNjQyODVdLFwibWFwcGVkXCIsWzE0OTcsMTQ2MF1dLFtbNjQyODYsNjQyODZdLFwidmFsaWRcIl0sW1s2NDI4Nyw2NDI4N10sXCJtYXBwZWRcIixbMTUyMiwxNDYzXV0sW1s2NDI4OCw2NDI4OF0sXCJtYXBwZWRcIixbMTUwNl1dLFtbNjQyODksNjQyODldLFwibWFwcGVkXCIsWzE0ODhdXSxbWzY0MjkwLDY0MjkwXSxcIm1hcHBlZFwiLFsxNDkxXV0sW1s2NDI5MSw2NDI5MV0sXCJtYXBwZWRcIixbMTQ5Ml1dLFtbNjQyOTIsNjQyOTJdLFwibWFwcGVkXCIsWzE0OTldXSxbWzY0MjkzLDY0MjkzXSxcIm1hcHBlZFwiLFsxNTAwXV0sW1s2NDI5NCw2NDI5NF0sXCJtYXBwZWRcIixbMTUwMV1dLFtbNjQyOTUsNjQyOTVdLFwibWFwcGVkXCIsWzE1MTJdXSxbWzY0Mjk2LDY0Mjk2XSxcIm1hcHBlZFwiLFsxNTE0XV0sW1s2NDI5Nyw2NDI5N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQzXV0sW1s2NDI5OCw2NDI5OF0sXCJtYXBwZWRcIixbMTUxMywxNDczXV0sW1s2NDI5OSw2NDI5OV0sXCJtYXBwZWRcIixbMTUxMywxNDc0XV0sW1s2NDMwMCw2NDMwMF0sXCJtYXBwZWRcIixbMTUxMywxNDY4LDE0NzNdXSxbWzY0MzAxLDY0MzAxXSxcIm1hcHBlZFwiLFsxNTEzLDE0NjgsMTQ3NF1dLFtbNjQzMDIsNjQzMDJdLFwibWFwcGVkXCIsWzE0ODgsMTQ2M11dLFtbNjQzMDMsNjQzMDNdLFwibWFwcGVkXCIsWzE0ODgsMTQ2NF1dLFtbNjQzMDQsNjQzMDRdLFwibWFwcGVkXCIsWzE0ODgsMTQ2OF1dLFtbNjQzMDUsNjQzMDVdLFwibWFwcGVkXCIsWzE0ODksMTQ2OF1dLFtbNjQzMDYsNjQzMDZdLFwibWFwcGVkXCIsWzE0OTAsMTQ2OF1dLFtbNjQzMDcsNjQzMDddLFwibWFwcGVkXCIsWzE0OTEsMTQ2OF1dLFtbNjQzMDgsNjQzMDhdLFwibWFwcGVkXCIsWzE0OTIsMTQ2OF1dLFtbNjQzMDksNjQzMDldLFwibWFwcGVkXCIsWzE0OTMsMTQ2OF1dLFtbNjQzMTAsNjQzMTBdLFwibWFwcGVkXCIsWzE0OTQsMTQ2OF1dLFtbNjQzMTEsNjQzMTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY0MzEyLDY0MzEyXSxcIm1hcHBlZFwiLFsxNDk2LDE0NjhdXSxbWzY0MzEzLDY0MzEzXSxcIm1hcHBlZFwiLFsxNDk3LDE0NjhdXSxbWzY0MzE0LDY0MzE0XSxcIm1hcHBlZFwiLFsxNDk4LDE0NjhdXSxbWzY0MzE1LDY0MzE1XSxcIm1hcHBlZFwiLFsxNDk5LDE0NjhdXSxbWzY0MzE2LDY0MzE2XSxcIm1hcHBlZFwiLFsxNTAwLDE0NjhdXSxbWzY0MzE3LDY0MzE3XSxcImRpc2FsbG93ZWRcIl0sW1s2NDMxOCw2NDMxOF0sXCJtYXBwZWRcIixbMTUwMiwxNDY4XV0sW1s2NDMxOSw2NDMxOV0sXCJkaXNhbGxvd2VkXCJdLFtbNjQzMjAsNjQzMjBdLFwibWFwcGVkXCIsWzE1MDQsMTQ2OF1dLFtbNjQzMjEsNjQzMjFdLFwibWFwcGVkXCIsWzE1MDUsMTQ2OF1dLFtbNjQzMjIsNjQzMjJdLFwiZGlzYWxsb3dlZFwiXSxbWzY0MzIzLDY0MzIzXSxcIm1hcHBlZFwiLFsxNTA3LDE0NjhdXSxbWzY0MzI0LDY0MzI0XSxcIm1hcHBlZFwiLFsxNTA4LDE0NjhdXSxbWzY0MzI1LDY0MzI1XSxcImRpc2FsbG93ZWRcIl0sW1s2NDMyNiw2NDMyNl0sXCJtYXBwZWRcIixbMTUxMCwxNDY4XV0sW1s2NDMyNyw2NDMyN10sXCJtYXBwZWRcIixbMTUxMSwxNDY4XV0sW1s2NDMyOCw2NDMyOF0sXCJtYXBwZWRcIixbMTUxMiwxNDY4XV0sW1s2NDMyOSw2NDMyOV0sXCJtYXBwZWRcIixbMTUxMywxNDY4XV0sW1s2NDMzMCw2NDMzMF0sXCJtYXBwZWRcIixbMTUxNCwxNDY4XV0sW1s2NDMzMSw2NDMzMV0sXCJtYXBwZWRcIixbMTQ5MywxNDY1XV0sW1s2NDMzMiw2NDMzMl0sXCJtYXBwZWRcIixbMTQ4OSwxNDcxXV0sW1s2NDMzMyw2NDMzM10sXCJtYXBwZWRcIixbMTQ5OSwxNDcxXV0sW1s2NDMzNCw2NDMzNF0sXCJtYXBwZWRcIixbMTUwOCwxNDcxXV0sW1s2NDMzNSw2NDMzNV0sXCJtYXBwZWRcIixbMTQ4OCwxNTAwXV0sW1s2NDMzNiw2NDMzN10sXCJtYXBwZWRcIixbMTY0OV1dLFtbNjQzMzgsNjQzNDFdLFwibWFwcGVkXCIsWzE2NTldXSxbWzY0MzQyLDY0MzQ1XSxcIm1hcHBlZFwiLFsxNjYyXV0sW1s2NDM0Niw2NDM0OV0sXCJtYXBwZWRcIixbMTY2NF1dLFtbNjQzNTAsNjQzNTNdLFwibWFwcGVkXCIsWzE2NThdXSxbWzY0MzU0LDY0MzU3XSxcIm1hcHBlZFwiLFsxNjYzXV0sW1s2NDM1OCw2NDM2MV0sXCJtYXBwZWRcIixbMTY1N11dLFtbNjQzNjIsNjQzNjVdLFwibWFwcGVkXCIsWzE3MDBdXSxbWzY0MzY2LDY0MzY5XSxcIm1hcHBlZFwiLFsxNzAyXV0sW1s2NDM3MCw2NDM3M10sXCJtYXBwZWRcIixbMTY2OF1dLFtbNjQzNzQsNjQzNzddLFwibWFwcGVkXCIsWzE2NjddXSxbWzY0Mzc4LDY0MzgxXSxcIm1hcHBlZFwiLFsxNjcwXV0sW1s2NDM4Miw2NDM4NV0sXCJtYXBwZWRcIixbMTY3MV1dLFtbNjQzODYsNjQzODddLFwibWFwcGVkXCIsWzE2NzddXSxbWzY0Mzg4LDY0Mzg5XSxcIm1hcHBlZFwiLFsxNjc2XV0sW1s2NDM5MCw2NDM5MV0sXCJtYXBwZWRcIixbMTY3OF1dLFtbNjQzOTIsNjQzOTNdLFwibWFwcGVkXCIsWzE2NzJdXSxbWzY0Mzk0LDY0Mzk1XSxcIm1hcHBlZFwiLFsxNjg4XV0sW1s2NDM5Niw2NDM5N10sXCJtYXBwZWRcIixbMTY4MV1dLFtbNjQzOTgsNjQ0MDFdLFwibWFwcGVkXCIsWzE3MDVdXSxbWzY0NDAyLDY0NDA1XSxcIm1hcHBlZFwiLFsxNzExXV0sW1s2NDQwNiw2NDQwOV0sXCJtYXBwZWRcIixbMTcxNV1dLFtbNjQ0MTAsNjQ0MTNdLFwibWFwcGVkXCIsWzE3MTNdXSxbWzY0NDE0LDY0NDE1XSxcIm1hcHBlZFwiLFsxNzIyXV0sW1s2NDQxNiw2NDQxOV0sXCJtYXBwZWRcIixbMTcyM11dLFtbNjQ0MjAsNjQ0MjFdLFwibWFwcGVkXCIsWzE3MjhdXSxbWzY0NDIyLDY0NDI1XSxcIm1hcHBlZFwiLFsxNzI5XV0sW1s2NDQyNiw2NDQyOV0sXCJtYXBwZWRcIixbMTcyNl1dLFtbNjQ0MzAsNjQ0MzFdLFwibWFwcGVkXCIsWzE3NDZdXSxbWzY0NDMyLDY0NDMzXSxcIm1hcHBlZFwiLFsxNzQ3XV0sW1s2NDQzNCw2NDQ0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjQ0NTAsNjQ0NjZdLFwiZGlzYWxsb3dlZFwiXSxbWzY0NDY3LDY0NDcwXSxcIm1hcHBlZFwiLFsxNzA5XV0sW1s2NDQ3MSw2NDQ3Ml0sXCJtYXBwZWRcIixbMTczNV1dLFtbNjQ0NzMsNjQ0NzRdLFwibWFwcGVkXCIsWzE3MzRdXSxbWzY0NDc1LDY0NDc2XSxcIm1hcHBlZFwiLFsxNzM2XV0sW1s2NDQ3Nyw2NDQ3N10sXCJtYXBwZWRcIixbMTczNSwxNjUyXV0sW1s2NDQ3OCw2NDQ3OV0sXCJtYXBwZWRcIixbMTczOV1dLFtbNjQ0ODAsNjQ0ODFdLFwibWFwcGVkXCIsWzE3MzNdXSxbWzY0NDgyLDY0NDgzXSxcIm1hcHBlZFwiLFsxNzM3XV0sW1s2NDQ4NCw2NDQ4N10sXCJtYXBwZWRcIixbMTc0NF1dLFtbNjQ0ODgsNjQ0ODldLFwibWFwcGVkXCIsWzE2MDldXSxbWzY0NDkwLDY0NDkxXSxcIm1hcHBlZFwiLFsxNTc0LDE1NzVdXSxbWzY0NDkyLDY0NDkzXSxcIm1hcHBlZFwiLFsxNTc0LDE3NDldXSxbWzY0NDk0LDY0NDk1XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDhdXSxbWzY0NDk2LDY0NDk3XSxcIm1hcHBlZFwiLFsxNTc0LDE3MzVdXSxbWzY0NDk4LDY0NDk5XSxcIm1hcHBlZFwiLFsxNTc0LDE3MzRdXSxbWzY0NTAwLDY0NTAxXSxcIm1hcHBlZFwiLFsxNTc0LDE3MzZdXSxbWzY0NTAyLDY0NTA0XSxcIm1hcHBlZFwiLFsxNTc0LDE3NDRdXSxbWzY0NTA1LDY0NTA3XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDldXSxbWzY0NTA4LDY0NTExXSxcIm1hcHBlZFwiLFsxNzQwXV0sW1s2NDUxMiw2NDUxMl0sXCJtYXBwZWRcIixbMTU3NCwxNTgwXV0sW1s2NDUxMyw2NDUxM10sXCJtYXBwZWRcIixbMTU3NCwxNTgxXV0sW1s2NDUxNCw2NDUxNF0sXCJtYXBwZWRcIixbMTU3NCwxNjA1XV0sW1s2NDUxNSw2NDUxNV0sXCJtYXBwZWRcIixbMTU3NCwxNjA5XV0sW1s2NDUxNiw2NDUxNl0sXCJtYXBwZWRcIixbMTU3NCwxNjEwXV0sW1s2NDUxNyw2NDUxN10sXCJtYXBwZWRcIixbMTU3NiwxNTgwXV0sW1s2NDUxOCw2NDUxOF0sXCJtYXBwZWRcIixbMTU3NiwxNTgxXV0sW1s2NDUxOSw2NDUxOV0sXCJtYXBwZWRcIixbMTU3NiwxNTgyXV0sW1s2NDUyMCw2NDUyMF0sXCJtYXBwZWRcIixbMTU3NiwxNjA1XV0sW1s2NDUyMSw2NDUyMV0sXCJtYXBwZWRcIixbMTU3NiwxNjA5XV0sW1s2NDUyMiw2NDUyMl0sXCJtYXBwZWRcIixbMTU3NiwxNjEwXV0sW1s2NDUyMyw2NDUyM10sXCJtYXBwZWRcIixbMTU3OCwxNTgwXV0sW1s2NDUyNCw2NDUyNF0sXCJtYXBwZWRcIixbMTU3OCwxNTgxXV0sW1s2NDUyNSw2NDUyNV0sXCJtYXBwZWRcIixbMTU3OCwxNTgyXV0sW1s2NDUyNiw2NDUyNl0sXCJtYXBwZWRcIixbMTU3OCwxNjA1XV0sW1s2NDUyNyw2NDUyN10sXCJtYXBwZWRcIixbMTU3OCwxNjA5XV0sW1s2NDUyOCw2NDUyOF0sXCJtYXBwZWRcIixbMTU3OCwxNjEwXV0sW1s2NDUyOSw2NDUyOV0sXCJtYXBwZWRcIixbMTU3OSwxNTgwXV0sW1s2NDUzMCw2NDUzMF0sXCJtYXBwZWRcIixbMTU3OSwxNjA1XV0sW1s2NDUzMSw2NDUzMV0sXCJtYXBwZWRcIixbMTU3OSwxNjA5XV0sW1s2NDUzMiw2NDUzMl0sXCJtYXBwZWRcIixbMTU3OSwxNjEwXV0sW1s2NDUzMyw2NDUzM10sXCJtYXBwZWRcIixbMTU4MCwxNTgxXV0sW1s2NDUzNCw2NDUzNF0sXCJtYXBwZWRcIixbMTU4MCwxNjA1XV0sW1s2NDUzNSw2NDUzNV0sXCJtYXBwZWRcIixbMTU4MSwxNTgwXV0sW1s2NDUzNiw2NDUzNl0sXCJtYXBwZWRcIixbMTU4MSwxNjA1XV0sW1s2NDUzNyw2NDUzN10sXCJtYXBwZWRcIixbMTU4MiwxNTgwXV0sW1s2NDUzOCw2NDUzOF0sXCJtYXBwZWRcIixbMTU4MiwxNTgxXV0sW1s2NDUzOSw2NDUzOV0sXCJtYXBwZWRcIixbMTU4MiwxNjA1XV0sW1s2NDU0MCw2NDU0MF0sXCJtYXBwZWRcIixbMTU4NywxNTgwXV0sW1s2NDU0MSw2NDU0MV0sXCJtYXBwZWRcIixbMTU4NywxNTgxXV0sW1s2NDU0Miw2NDU0Ml0sXCJtYXBwZWRcIixbMTU4NywxNTgyXV0sW1s2NDU0Myw2NDU0M10sXCJtYXBwZWRcIixbMTU4NywxNjA1XV0sW1s2NDU0NCw2NDU0NF0sXCJtYXBwZWRcIixbMTU4OSwxNTgxXV0sW1s2NDU0NSw2NDU0NV0sXCJtYXBwZWRcIixbMTU4OSwxNjA1XV0sW1s2NDU0Niw2NDU0Nl0sXCJtYXBwZWRcIixbMTU5MCwxNTgwXV0sW1s2NDU0Nyw2NDU0N10sXCJtYXBwZWRcIixbMTU5MCwxNTgxXV0sW1s2NDU0OCw2NDU0OF0sXCJtYXBwZWRcIixbMTU5MCwxNTgyXV0sW1s2NDU0OSw2NDU0OV0sXCJtYXBwZWRcIixbMTU5MCwxNjA1XV0sW1s2NDU1MCw2NDU1MF0sXCJtYXBwZWRcIixbMTU5MSwxNTgxXV0sW1s2NDU1MSw2NDU1MV0sXCJtYXBwZWRcIixbMTU5MSwxNjA1XV0sW1s2NDU1Miw2NDU1Ml0sXCJtYXBwZWRcIixbMTU5MiwxNjA1XV0sW1s2NDU1Myw2NDU1M10sXCJtYXBwZWRcIixbMTU5MywxNTgwXV0sW1s2NDU1NCw2NDU1NF0sXCJtYXBwZWRcIixbMTU5MywxNjA1XV0sW1s2NDU1NSw2NDU1NV0sXCJtYXBwZWRcIixbMTU5NCwxNTgwXV0sW1s2NDU1Niw2NDU1Nl0sXCJtYXBwZWRcIixbMTU5NCwxNjA1XV0sW1s2NDU1Nyw2NDU1N10sXCJtYXBwZWRcIixbMTYwMSwxNTgwXV0sW1s2NDU1OCw2NDU1OF0sXCJtYXBwZWRcIixbMTYwMSwxNTgxXV0sW1s2NDU1OSw2NDU1OV0sXCJtYXBwZWRcIixbMTYwMSwxNTgyXV0sW1s2NDU2MCw2NDU2MF0sXCJtYXBwZWRcIixbMTYwMSwxNjA1XV0sW1s2NDU2MSw2NDU2MV0sXCJtYXBwZWRcIixbMTYwMSwxNjA5XV0sW1s2NDU2Miw2NDU2Ml0sXCJtYXBwZWRcIixbMTYwMSwxNjEwXV0sW1s2NDU2Myw2NDU2M10sXCJtYXBwZWRcIixbMTYwMiwxNTgxXV0sW1s2NDU2NCw2NDU2NF0sXCJtYXBwZWRcIixbMTYwMiwxNjA1XV0sW1s2NDU2NSw2NDU2NV0sXCJtYXBwZWRcIixbMTYwMiwxNjA5XV0sW1s2NDU2Niw2NDU2Nl0sXCJtYXBwZWRcIixbMTYwMiwxNjEwXV0sW1s2NDU2Nyw2NDU2N10sXCJtYXBwZWRcIixbMTYwMywxNTc1XV0sW1s2NDU2OCw2NDU2OF0sXCJtYXBwZWRcIixbMTYwMywxNTgwXV0sW1s2NDU2OSw2NDU2OV0sXCJtYXBwZWRcIixbMTYwMywxNTgxXV0sW1s2NDU3MCw2NDU3MF0sXCJtYXBwZWRcIixbMTYwMywxNTgyXV0sW1s2NDU3MSw2NDU3MV0sXCJtYXBwZWRcIixbMTYwMywxNjA0XV0sW1s2NDU3Miw2NDU3Ml0sXCJtYXBwZWRcIixbMTYwMywxNjA1XV0sW1s2NDU3Myw2NDU3M10sXCJtYXBwZWRcIixbMTYwMywxNjA5XV0sW1s2NDU3NCw2NDU3NF0sXCJtYXBwZWRcIixbMTYwMywxNjEwXV0sW1s2NDU3NSw2NDU3NV0sXCJtYXBwZWRcIixbMTYwNCwxNTgwXV0sW1s2NDU3Niw2NDU3Nl0sXCJtYXBwZWRcIixbMTYwNCwxNTgxXV0sW1s2NDU3Nyw2NDU3N10sXCJtYXBwZWRcIixbMTYwNCwxNTgyXV0sW1s2NDU3OCw2NDU3OF0sXCJtYXBwZWRcIixbMTYwNCwxNjA1XV0sW1s2NDU3OSw2NDU3OV0sXCJtYXBwZWRcIixbMTYwNCwxNjA5XV0sW1s2NDU4MCw2NDU4MF0sXCJtYXBwZWRcIixbMTYwNCwxNjEwXV0sW1s2NDU4MSw2NDU4MV0sXCJtYXBwZWRcIixbMTYwNSwxNTgwXV0sW1s2NDU4Miw2NDU4Ml0sXCJtYXBwZWRcIixbMTYwNSwxNTgxXV0sW1s2NDU4Myw2NDU4M10sXCJtYXBwZWRcIixbMTYwNSwxNTgyXV0sW1s2NDU4NCw2NDU4NF0sXCJtYXBwZWRcIixbMTYwNSwxNjA1XV0sW1s2NDU4NSw2NDU4NV0sXCJtYXBwZWRcIixbMTYwNSwxNjA5XV0sW1s2NDU4Niw2NDU4Nl0sXCJtYXBwZWRcIixbMTYwNSwxNjEwXV0sW1s2NDU4Nyw2NDU4N10sXCJtYXBwZWRcIixbMTYwNiwxNTgwXV0sW1s2NDU4OCw2NDU4OF0sXCJtYXBwZWRcIixbMTYwNiwxNTgxXV0sW1s2NDU4OSw2NDU4OV0sXCJtYXBwZWRcIixbMTYwNiwxNTgyXV0sW1s2NDU5MCw2NDU5MF0sXCJtYXBwZWRcIixbMTYwNiwxNjA1XV0sW1s2NDU5MSw2NDU5MV0sXCJtYXBwZWRcIixbMTYwNiwxNjA5XV0sW1s2NDU5Miw2NDU5Ml0sXCJtYXBwZWRcIixbMTYwNiwxNjEwXV0sW1s2NDU5Myw2NDU5M10sXCJtYXBwZWRcIixbMTYwNywxNTgwXV0sW1s2NDU5NCw2NDU5NF0sXCJtYXBwZWRcIixbMTYwNywxNjA1XV0sW1s2NDU5NSw2NDU5NV0sXCJtYXBwZWRcIixbMTYwNywxNjA5XV0sW1s2NDU5Niw2NDU5Nl0sXCJtYXBwZWRcIixbMTYwNywxNjEwXV0sW1s2NDU5Nyw2NDU5N10sXCJtYXBwZWRcIixbMTYxMCwxNTgwXV0sW1s2NDU5OCw2NDU5OF0sXCJtYXBwZWRcIixbMTYxMCwxNTgxXV0sW1s2NDU5OSw2NDU5OV0sXCJtYXBwZWRcIixbMTYxMCwxNTgyXV0sW1s2NDYwMCw2NDYwMF0sXCJtYXBwZWRcIixbMTYxMCwxNjA1XV0sW1s2NDYwMSw2NDYwMV0sXCJtYXBwZWRcIixbMTYxMCwxNjA5XV0sW1s2NDYwMiw2NDYwMl0sXCJtYXBwZWRcIixbMTYxMCwxNjEwXV0sW1s2NDYwMyw2NDYwM10sXCJtYXBwZWRcIixbMTU4NCwxNjQ4XV0sW1s2NDYwNCw2NDYwNF0sXCJtYXBwZWRcIixbMTU4NSwxNjQ4XV0sW1s2NDYwNSw2NDYwNV0sXCJtYXBwZWRcIixbMTYwOSwxNjQ4XV0sW1s2NDYwNiw2NDYwNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTIsMTYxN11dLFtbNjQ2MDcsNjQ2MDddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjEzLDE2MTddXSxbWzY0NjA4LDY0NjA4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxNCwxNjE3XV0sW1s2NDYwOSw2NDYwOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTUsMTYxN11dLFtbNjQ2MTAsNjQ2MTBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjE2LDE2MTddXSxbWzY0NjExLDY0NjExXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxNywxNjQ4XV0sW1s2NDYxMiw2NDYxMl0sXCJtYXBwZWRcIixbMTU3NCwxNTg1XV0sW1s2NDYxMyw2NDYxM10sXCJtYXBwZWRcIixbMTU3NCwxNTg2XV0sW1s2NDYxNCw2NDYxNF0sXCJtYXBwZWRcIixbMTU3NCwxNjA1XV0sW1s2NDYxNSw2NDYxNV0sXCJtYXBwZWRcIixbMTU3NCwxNjA2XV0sW1s2NDYxNiw2NDYxNl0sXCJtYXBwZWRcIixbMTU3NCwxNjA5XV0sW1s2NDYxNyw2NDYxN10sXCJtYXBwZWRcIixbMTU3NCwxNjEwXV0sW1s2NDYxOCw2NDYxOF0sXCJtYXBwZWRcIixbMTU3NiwxNTg1XV0sW1s2NDYxOSw2NDYxOV0sXCJtYXBwZWRcIixbMTU3NiwxNTg2XV0sW1s2NDYyMCw2NDYyMF0sXCJtYXBwZWRcIixbMTU3NiwxNjA1XV0sW1s2NDYyMSw2NDYyMV0sXCJtYXBwZWRcIixbMTU3NiwxNjA2XV0sW1s2NDYyMiw2NDYyMl0sXCJtYXBwZWRcIixbMTU3NiwxNjA5XV0sW1s2NDYyMyw2NDYyM10sXCJtYXBwZWRcIixbMTU3NiwxNjEwXV0sW1s2NDYyNCw2NDYyNF0sXCJtYXBwZWRcIixbMTU3OCwxNTg1XV0sW1s2NDYyNSw2NDYyNV0sXCJtYXBwZWRcIixbMTU3OCwxNTg2XV0sW1s2NDYyNiw2NDYyNl0sXCJtYXBwZWRcIixbMTU3OCwxNjA1XV0sW1s2NDYyNyw2NDYyN10sXCJtYXBwZWRcIixbMTU3OCwxNjA2XV0sW1s2NDYyOCw2NDYyOF0sXCJtYXBwZWRcIixbMTU3OCwxNjA5XV0sW1s2NDYyOSw2NDYyOV0sXCJtYXBwZWRcIixbMTU3OCwxNjEwXV0sW1s2NDYzMCw2NDYzMF0sXCJtYXBwZWRcIixbMTU3OSwxNTg1XV0sW1s2NDYzMSw2NDYzMV0sXCJtYXBwZWRcIixbMTU3OSwxNTg2XV0sW1s2NDYzMiw2NDYzMl0sXCJtYXBwZWRcIixbMTU3OSwxNjA1XV0sW1s2NDYzMyw2NDYzM10sXCJtYXBwZWRcIixbMTU3OSwxNjA2XV0sW1s2NDYzNCw2NDYzNF0sXCJtYXBwZWRcIixbMTU3OSwxNjA5XV0sW1s2NDYzNSw2NDYzNV0sXCJtYXBwZWRcIixbMTU3OSwxNjEwXV0sW1s2NDYzNiw2NDYzNl0sXCJtYXBwZWRcIixbMTYwMSwxNjA5XV0sW1s2NDYzNyw2NDYzN10sXCJtYXBwZWRcIixbMTYwMSwxNjEwXV0sW1s2NDYzOCw2NDYzOF0sXCJtYXBwZWRcIixbMTYwMiwxNjA5XV0sW1s2NDYzOSw2NDYzOV0sXCJtYXBwZWRcIixbMTYwMiwxNjEwXV0sW1s2NDY0MCw2NDY0MF0sXCJtYXBwZWRcIixbMTYwMywxNTc1XV0sW1s2NDY0MSw2NDY0MV0sXCJtYXBwZWRcIixbMTYwMywxNjA0XV0sW1s2NDY0Miw2NDY0Ml0sXCJtYXBwZWRcIixbMTYwMywxNjA1XV0sW1s2NDY0Myw2NDY0M10sXCJtYXBwZWRcIixbMTYwMywxNjA5XV0sW1s2NDY0NCw2NDY0NF0sXCJtYXBwZWRcIixbMTYwMywxNjEwXV0sW1s2NDY0NSw2NDY0NV0sXCJtYXBwZWRcIixbMTYwNCwxNjA1XV0sW1s2NDY0Niw2NDY0Nl0sXCJtYXBwZWRcIixbMTYwNCwxNjA5XV0sW1s2NDY0Nyw2NDY0N10sXCJtYXBwZWRcIixbMTYwNCwxNjEwXV0sW1s2NDY0OCw2NDY0OF0sXCJtYXBwZWRcIixbMTYwNSwxNTc1XV0sW1s2NDY0OSw2NDY0OV0sXCJtYXBwZWRcIixbMTYwNSwxNjA1XV0sW1s2NDY1MCw2NDY1MF0sXCJtYXBwZWRcIixbMTYwNiwxNTg1XV0sW1s2NDY1MSw2NDY1MV0sXCJtYXBwZWRcIixbMTYwNiwxNTg2XV0sW1s2NDY1Miw2NDY1Ml0sXCJtYXBwZWRcIixbMTYwNiwxNjA1XV0sW1s2NDY1Myw2NDY1M10sXCJtYXBwZWRcIixbMTYwNiwxNjA2XV0sW1s2NDY1NCw2NDY1NF0sXCJtYXBwZWRcIixbMTYwNiwxNjA5XV0sW1s2NDY1NSw2NDY1NV0sXCJtYXBwZWRcIixbMTYwNiwxNjEwXV0sW1s2NDY1Niw2NDY1Nl0sXCJtYXBwZWRcIixbMTYwOSwxNjQ4XV0sW1s2NDY1Nyw2NDY1N10sXCJtYXBwZWRcIixbMTYxMCwxNTg1XV0sW1s2NDY1OCw2NDY1OF0sXCJtYXBwZWRcIixbMTYxMCwxNTg2XV0sW1s2NDY1OSw2NDY1OV0sXCJtYXBwZWRcIixbMTYxMCwxNjA1XV0sW1s2NDY2MCw2NDY2MF0sXCJtYXBwZWRcIixbMTYxMCwxNjA2XV0sW1s2NDY2MSw2NDY2MV0sXCJtYXBwZWRcIixbMTYxMCwxNjA5XV0sW1s2NDY2Miw2NDY2Ml0sXCJtYXBwZWRcIixbMTYxMCwxNjEwXV0sW1s2NDY2Myw2NDY2M10sXCJtYXBwZWRcIixbMTU3NCwxNTgwXV0sW1s2NDY2NCw2NDY2NF0sXCJtYXBwZWRcIixbMTU3NCwxNTgxXV0sW1s2NDY2NSw2NDY2NV0sXCJtYXBwZWRcIixbMTU3NCwxNTgyXV0sW1s2NDY2Niw2NDY2Nl0sXCJtYXBwZWRcIixbMTU3NCwxNjA1XV0sW1s2NDY2Nyw2NDY2N10sXCJtYXBwZWRcIixbMTU3NCwxNjA3XV0sW1s2NDY2OCw2NDY2OF0sXCJtYXBwZWRcIixbMTU3NiwxNTgwXV0sW1s2NDY2OSw2NDY2OV0sXCJtYXBwZWRcIixbMTU3NiwxNTgxXV0sW1s2NDY3MCw2NDY3MF0sXCJtYXBwZWRcIixbMTU3NiwxNTgyXV0sW1s2NDY3MSw2NDY3MV0sXCJtYXBwZWRcIixbMTU3NiwxNjA1XV0sW1s2NDY3Miw2NDY3Ml0sXCJtYXBwZWRcIixbMTU3NiwxNjA3XV0sW1s2NDY3Myw2NDY3M10sXCJtYXBwZWRcIixbMTU3OCwxNTgwXV0sW1s2NDY3NCw2NDY3NF0sXCJtYXBwZWRcIixbMTU3OCwxNTgxXV0sW1s2NDY3NSw2NDY3NV0sXCJtYXBwZWRcIixbMTU3OCwxNTgyXV0sW1s2NDY3Niw2NDY3Nl0sXCJtYXBwZWRcIixbMTU3OCwxNjA1XV0sW1s2NDY3Nyw2NDY3N10sXCJtYXBwZWRcIixbMTU3OCwxNjA3XV0sW1s2NDY3OCw2NDY3OF0sXCJtYXBwZWRcIixbMTU3OSwxNjA1XV0sW1s2NDY3OSw2NDY3OV0sXCJtYXBwZWRcIixbMTU4MCwxNTgxXV0sW1s2NDY4MCw2NDY4MF0sXCJtYXBwZWRcIixbMTU4MCwxNjA1XV0sW1s2NDY4MSw2NDY4MV0sXCJtYXBwZWRcIixbMTU4MSwxNTgwXV0sW1s2NDY4Miw2NDY4Ml0sXCJtYXBwZWRcIixbMTU4MSwxNjA1XV0sW1s2NDY4Myw2NDY4M10sXCJtYXBwZWRcIixbMTU4MiwxNTgwXV0sW1s2NDY4NCw2NDY4NF0sXCJtYXBwZWRcIixbMTU4MiwxNjA1XV0sW1s2NDY4NSw2NDY4NV0sXCJtYXBwZWRcIixbMTU4NywxNTgwXV0sW1s2NDY4Niw2NDY4Nl0sXCJtYXBwZWRcIixbMTU4NywxNTgxXV0sW1s2NDY4Nyw2NDY4N10sXCJtYXBwZWRcIixbMTU4NywxNTgyXV0sW1s2NDY4OCw2NDY4OF0sXCJtYXBwZWRcIixbMTU4NywxNjA1XV0sW1s2NDY4OSw2NDY4OV0sXCJtYXBwZWRcIixbMTU4OSwxNTgxXV0sW1s2NDY5MCw2NDY5MF0sXCJtYXBwZWRcIixbMTU4OSwxNTgyXV0sW1s2NDY5MSw2NDY5MV0sXCJtYXBwZWRcIixbMTU4OSwxNjA1XV0sW1s2NDY5Miw2NDY5Ml0sXCJtYXBwZWRcIixbMTU5MCwxNTgwXV0sW1s2NDY5Myw2NDY5M10sXCJtYXBwZWRcIixbMTU5MCwxNTgxXV0sW1s2NDY5NCw2NDY5NF0sXCJtYXBwZWRcIixbMTU5MCwxNTgyXV0sW1s2NDY5NSw2NDY5NV0sXCJtYXBwZWRcIixbMTU5MCwxNjA1XV0sW1s2NDY5Niw2NDY5Nl0sXCJtYXBwZWRcIixbMTU5MSwxNTgxXV0sW1s2NDY5Nyw2NDY5N10sXCJtYXBwZWRcIixbMTU5MiwxNjA1XV0sW1s2NDY5OCw2NDY5OF0sXCJtYXBwZWRcIixbMTU5MywxNTgwXV0sW1s2NDY5OSw2NDY5OV0sXCJtYXBwZWRcIixbMTU5MywxNjA1XV0sW1s2NDcwMCw2NDcwMF0sXCJtYXBwZWRcIixbMTU5NCwxNTgwXV0sW1s2NDcwMSw2NDcwMV0sXCJtYXBwZWRcIixbMTU5NCwxNjA1XV0sW1s2NDcwMiw2NDcwMl0sXCJtYXBwZWRcIixbMTYwMSwxNTgwXV0sW1s2NDcwMyw2NDcwM10sXCJtYXBwZWRcIixbMTYwMSwxNTgxXV0sW1s2NDcwNCw2NDcwNF0sXCJtYXBwZWRcIixbMTYwMSwxNTgyXV0sW1s2NDcwNSw2NDcwNV0sXCJtYXBwZWRcIixbMTYwMSwxNjA1XV0sW1s2NDcwNiw2NDcwNl0sXCJtYXBwZWRcIixbMTYwMiwxNTgxXV0sW1s2NDcwNyw2NDcwN10sXCJtYXBwZWRcIixbMTYwMiwxNjA1XV0sW1s2NDcwOCw2NDcwOF0sXCJtYXBwZWRcIixbMTYwMywxNTgwXV0sW1s2NDcwOSw2NDcwOV0sXCJtYXBwZWRcIixbMTYwMywxNTgxXV0sW1s2NDcxMCw2NDcxMF0sXCJtYXBwZWRcIixbMTYwMywxNTgyXV0sW1s2NDcxMSw2NDcxMV0sXCJtYXBwZWRcIixbMTYwMywxNjA0XV0sW1s2NDcxMiw2NDcxMl0sXCJtYXBwZWRcIixbMTYwMywxNjA1XV0sW1s2NDcxMyw2NDcxM10sXCJtYXBwZWRcIixbMTYwNCwxNTgwXV0sW1s2NDcxNCw2NDcxNF0sXCJtYXBwZWRcIixbMTYwNCwxNTgxXV0sW1s2NDcxNSw2NDcxNV0sXCJtYXBwZWRcIixbMTYwNCwxNTgyXV0sW1s2NDcxNiw2NDcxNl0sXCJtYXBwZWRcIixbMTYwNCwxNjA1XV0sW1s2NDcxNyw2NDcxN10sXCJtYXBwZWRcIixbMTYwNCwxNjA3XV0sW1s2NDcxOCw2NDcxOF0sXCJtYXBwZWRcIixbMTYwNSwxNTgwXV0sW1s2NDcxOSw2NDcxOV0sXCJtYXBwZWRcIixbMTYwNSwxNTgxXV0sW1s2NDcyMCw2NDcyMF0sXCJtYXBwZWRcIixbMTYwNSwxNTgyXV0sW1s2NDcyMSw2NDcyMV0sXCJtYXBwZWRcIixbMTYwNSwxNjA1XV0sW1s2NDcyMiw2NDcyMl0sXCJtYXBwZWRcIixbMTYwNiwxNTgwXV0sW1s2NDcyMyw2NDcyM10sXCJtYXBwZWRcIixbMTYwNiwxNTgxXV0sW1s2NDcyNCw2NDcyNF0sXCJtYXBwZWRcIixbMTYwNiwxNTgyXV0sW1s2NDcyNSw2NDcyNV0sXCJtYXBwZWRcIixbMTYwNiwxNjA1XV0sW1s2NDcyNiw2NDcyNl0sXCJtYXBwZWRcIixbMTYwNiwxNjA3XV0sW1s2NDcyNyw2NDcyN10sXCJtYXBwZWRcIixbMTYwNywxNTgwXV0sW1s2NDcyOCw2NDcyOF0sXCJtYXBwZWRcIixbMTYwNywxNjA1XV0sW1s2NDcyOSw2NDcyOV0sXCJtYXBwZWRcIixbMTYwNywxNjQ4XV0sW1s2NDczMCw2NDczMF0sXCJtYXBwZWRcIixbMTYxMCwxNTgwXV0sW1s2NDczMSw2NDczMV0sXCJtYXBwZWRcIixbMTYxMCwxNTgxXV0sW1s2NDczMiw2NDczMl0sXCJtYXBwZWRcIixbMTYxMCwxNTgyXV0sW1s2NDczMyw2NDczM10sXCJtYXBwZWRcIixbMTYxMCwxNjA1XV0sW1s2NDczNCw2NDczNF0sXCJtYXBwZWRcIixbMTYxMCwxNjA3XV0sW1s2NDczNSw2NDczNV0sXCJtYXBwZWRcIixbMTU3NCwxNjA1XV0sW1s2NDczNiw2NDczNl0sXCJtYXBwZWRcIixbMTU3NCwxNjA3XV0sW1s2NDczNyw2NDczN10sXCJtYXBwZWRcIixbMTU3NiwxNjA1XV0sW1s2NDczOCw2NDczOF0sXCJtYXBwZWRcIixbMTU3NiwxNjA3XV0sW1s2NDczOSw2NDczOV0sXCJtYXBwZWRcIixbMTU3OCwxNjA1XV0sW1s2NDc0MCw2NDc0MF0sXCJtYXBwZWRcIixbMTU3OCwxNjA3XV0sW1s2NDc0MSw2NDc0MV0sXCJtYXBwZWRcIixbMTU3OSwxNjA1XV0sW1s2NDc0Miw2NDc0Ml0sXCJtYXBwZWRcIixbMTU3OSwxNjA3XV0sW1s2NDc0Myw2NDc0M10sXCJtYXBwZWRcIixbMTU4NywxNjA1XV0sW1s2NDc0NCw2NDc0NF0sXCJtYXBwZWRcIixbMTU4NywxNjA3XV0sW1s2NDc0NSw2NDc0NV0sXCJtYXBwZWRcIixbMTU4OCwxNjA1XV0sW1s2NDc0Niw2NDc0Nl0sXCJtYXBwZWRcIixbMTU4OCwxNjA3XV0sW1s2NDc0Nyw2NDc0N10sXCJtYXBwZWRcIixbMTYwMywxNjA0XV0sW1s2NDc0OCw2NDc0OF0sXCJtYXBwZWRcIixbMTYwMywxNjA1XV0sW1s2NDc0OSw2NDc0OV0sXCJtYXBwZWRcIixbMTYwNCwxNjA1XV0sW1s2NDc1MCw2NDc1MF0sXCJtYXBwZWRcIixbMTYwNiwxNjA1XV0sW1s2NDc1MSw2NDc1MV0sXCJtYXBwZWRcIixbMTYwNiwxNjA3XV0sW1s2NDc1Miw2NDc1Ml0sXCJtYXBwZWRcIixbMTYxMCwxNjA1XV0sW1s2NDc1Myw2NDc1M10sXCJtYXBwZWRcIixbMTYxMCwxNjA3XV0sW1s2NDc1NCw2NDc1NF0sXCJtYXBwZWRcIixbMTYwMCwxNjE0LDE2MTddXSxbWzY0NzU1LDY0NzU1XSxcIm1hcHBlZFwiLFsxNjAwLDE2MTUsMTYxN11dLFtbNjQ3NTYsNjQ3NTZdLFwibWFwcGVkXCIsWzE2MDAsMTYxNiwxNjE3XV0sW1s2NDc1Nyw2NDc1N10sXCJtYXBwZWRcIixbMTU5MSwxNjA5XV0sW1s2NDc1OCw2NDc1OF0sXCJtYXBwZWRcIixbMTU5MSwxNjEwXV0sW1s2NDc1OSw2NDc1OV0sXCJtYXBwZWRcIixbMTU5MywxNjA5XV0sW1s2NDc2MCw2NDc2MF0sXCJtYXBwZWRcIixbMTU5MywxNjEwXV0sW1s2NDc2MSw2NDc2MV0sXCJtYXBwZWRcIixbMTU5NCwxNjA5XV0sW1s2NDc2Miw2NDc2Ml0sXCJtYXBwZWRcIixbMTU5NCwxNjEwXV0sW1s2NDc2Myw2NDc2M10sXCJtYXBwZWRcIixbMTU4NywxNjA5XV0sW1s2NDc2NCw2NDc2NF0sXCJtYXBwZWRcIixbMTU4NywxNjEwXV0sW1s2NDc2NSw2NDc2NV0sXCJtYXBwZWRcIixbMTU4OCwxNjA5XV0sW1s2NDc2Niw2NDc2Nl0sXCJtYXBwZWRcIixbMTU4OCwxNjEwXV0sW1s2NDc2Nyw2NDc2N10sXCJtYXBwZWRcIixbMTU4MSwxNjA5XV0sW1s2NDc2OCw2NDc2OF0sXCJtYXBwZWRcIixbMTU4MSwxNjEwXV0sW1s2NDc2OSw2NDc2OV0sXCJtYXBwZWRcIixbMTU4MCwxNjA5XV0sW1s2NDc3MCw2NDc3MF0sXCJtYXBwZWRcIixbMTU4MCwxNjEwXV0sW1s2NDc3MSw2NDc3MV0sXCJtYXBwZWRcIixbMTU4MiwxNjA5XV0sW1s2NDc3Miw2NDc3Ml0sXCJtYXBwZWRcIixbMTU4MiwxNjEwXV0sW1s2NDc3Myw2NDc3M10sXCJtYXBwZWRcIixbMTU4OSwxNjA5XV0sW1s2NDc3NCw2NDc3NF0sXCJtYXBwZWRcIixbMTU4OSwxNjEwXV0sW1s2NDc3NSw2NDc3NV0sXCJtYXBwZWRcIixbMTU5MCwxNjA5XV0sW1s2NDc3Niw2NDc3Nl0sXCJtYXBwZWRcIixbMTU5MCwxNjEwXV0sW1s2NDc3Nyw2NDc3N10sXCJtYXBwZWRcIixbMTU4OCwxNTgwXV0sW1s2NDc3OCw2NDc3OF0sXCJtYXBwZWRcIixbMTU4OCwxNTgxXV0sW1s2NDc3OSw2NDc3OV0sXCJtYXBwZWRcIixbMTU4OCwxNTgyXV0sW1s2NDc4MCw2NDc4MF0sXCJtYXBwZWRcIixbMTU4OCwxNjA1XV0sW1s2NDc4MSw2NDc4MV0sXCJtYXBwZWRcIixbMTU4OCwxNTg1XV0sW1s2NDc4Miw2NDc4Ml0sXCJtYXBwZWRcIixbMTU4NywxNTg1XV0sW1s2NDc4Myw2NDc4M10sXCJtYXBwZWRcIixbMTU4OSwxNTg1XV0sW1s2NDc4NCw2NDc4NF0sXCJtYXBwZWRcIixbMTU5MCwxNTg1XV0sW1s2NDc4NSw2NDc4NV0sXCJtYXBwZWRcIixbMTU5MSwxNjA5XV0sW1s2NDc4Niw2NDc4Nl0sXCJtYXBwZWRcIixbMTU5MSwxNjEwXV0sW1s2NDc4Nyw2NDc4N10sXCJtYXBwZWRcIixbMTU5MywxNjA5XV0sW1s2NDc4OCw2NDc4OF0sXCJtYXBwZWRcIixbMTU5MywxNjEwXV0sW1s2NDc4OSw2NDc4OV0sXCJtYXBwZWRcIixbMTU5NCwxNjA5XV0sW1s2NDc5MCw2NDc5MF0sXCJtYXBwZWRcIixbMTU5NCwxNjEwXV0sW1s2NDc5MSw2NDc5MV0sXCJtYXBwZWRcIixbMTU4NywxNjA5XV0sW1s2NDc5Miw2NDc5Ml0sXCJtYXBwZWRcIixbMTU4NywxNjEwXV0sW1s2NDc5Myw2NDc5M10sXCJtYXBwZWRcIixbMTU4OCwxNjA5XV0sW1s2NDc5NCw2NDc5NF0sXCJtYXBwZWRcIixbMTU4OCwxNjEwXV0sW1s2NDc5NSw2NDc5NV0sXCJtYXBwZWRcIixbMTU4MSwxNjA5XV0sW1s2NDc5Niw2NDc5Nl0sXCJtYXBwZWRcIixbMTU4MSwxNjEwXV0sW1s2NDc5Nyw2NDc5N10sXCJtYXBwZWRcIixbMTU4MCwxNjA5XV0sW1s2NDc5OCw2NDc5OF0sXCJtYXBwZWRcIixbMTU4MCwxNjEwXV0sW1s2NDc5OSw2NDc5OV0sXCJtYXBwZWRcIixbMTU4MiwxNjA5XV0sW1s2NDgwMCw2NDgwMF0sXCJtYXBwZWRcIixbMTU4MiwxNjEwXV0sW1s2NDgwMSw2NDgwMV0sXCJtYXBwZWRcIixbMTU4OSwxNjA5XV0sW1s2NDgwMiw2NDgwMl0sXCJtYXBwZWRcIixbMTU4OSwxNjEwXV0sW1s2NDgwMyw2NDgwM10sXCJtYXBwZWRcIixbMTU5MCwxNjA5XV0sW1s2NDgwNCw2NDgwNF0sXCJtYXBwZWRcIixbMTU5MCwxNjEwXV0sW1s2NDgwNSw2NDgwNV0sXCJtYXBwZWRcIixbMTU4OCwxNTgwXV0sW1s2NDgwNiw2NDgwNl0sXCJtYXBwZWRcIixbMTU4OCwxNTgxXV0sW1s2NDgwNyw2NDgwN10sXCJtYXBwZWRcIixbMTU4OCwxNTgyXV0sW1s2NDgwOCw2NDgwOF0sXCJtYXBwZWRcIixbMTU4OCwxNjA1XV0sW1s2NDgwOSw2NDgwOV0sXCJtYXBwZWRcIixbMTU4OCwxNTg1XV0sW1s2NDgxMCw2NDgxMF0sXCJtYXBwZWRcIixbMTU4NywxNTg1XV0sW1s2NDgxMSw2NDgxMV0sXCJtYXBwZWRcIixbMTU4OSwxNTg1XV0sW1s2NDgxMiw2NDgxMl0sXCJtYXBwZWRcIixbMTU5MCwxNTg1XV0sW1s2NDgxMyw2NDgxM10sXCJtYXBwZWRcIixbMTU4OCwxNTgwXV0sW1s2NDgxNCw2NDgxNF0sXCJtYXBwZWRcIixbMTU4OCwxNTgxXV0sW1s2NDgxNSw2NDgxNV0sXCJtYXBwZWRcIixbMTU4OCwxNTgyXV0sW1s2NDgxNiw2NDgxNl0sXCJtYXBwZWRcIixbMTU4OCwxNjA1XV0sW1s2NDgxNyw2NDgxN10sXCJtYXBwZWRcIixbMTU4NywxNjA3XV0sW1s2NDgxOCw2NDgxOF0sXCJtYXBwZWRcIixbMTU4OCwxNjA3XV0sW1s2NDgxOSw2NDgxOV0sXCJtYXBwZWRcIixbMTU5MSwxNjA1XV0sW1s2NDgyMCw2NDgyMF0sXCJtYXBwZWRcIixbMTU4NywxNTgwXV0sW1s2NDgyMSw2NDgyMV0sXCJtYXBwZWRcIixbMTU4NywxNTgxXV0sW1s2NDgyMiw2NDgyMl0sXCJtYXBwZWRcIixbMTU4NywxNTgyXV0sW1s2NDgyMyw2NDgyM10sXCJtYXBwZWRcIixbMTU4OCwxNTgwXV0sW1s2NDgyNCw2NDgyNF0sXCJtYXBwZWRcIixbMTU4OCwxNTgxXV0sW1s2NDgyNSw2NDgyNV0sXCJtYXBwZWRcIixbMTU4OCwxNTgyXV0sW1s2NDgyNiw2NDgyNl0sXCJtYXBwZWRcIixbMTU5MSwxNjA1XV0sW1s2NDgyNyw2NDgyN10sXCJtYXBwZWRcIixbMTU5MiwxNjA1XV0sW1s2NDgyOCw2NDgyOV0sXCJtYXBwZWRcIixbMTU3NSwxNjExXV0sW1s2NDgzMCw2NDgzMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjQ4MzIsNjQ4NDddLFwiZGlzYWxsb3dlZFwiXSxbWzY0ODQ4LDY0ODQ4XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODAsMTYwNV1dLFtbNjQ4NDksNjQ4NTBdLFwibWFwcGVkXCIsWzE1NzgsMTU4MSwxNTgwXV0sW1s2NDg1MSw2NDg1MV0sXCJtYXBwZWRcIixbMTU3OCwxNTgxLDE2MDVdXSxbWzY0ODUyLDY0ODUyXSxcIm1hcHBlZFwiLFsxNTc4LDE1ODIsMTYwNV1dLFtbNjQ4NTMsNjQ4NTNdLFwibWFwcGVkXCIsWzE1NzgsMTYwNSwxNTgwXV0sW1s2NDg1NCw2NDg1NF0sXCJtYXBwZWRcIixbMTU3OCwxNjA1LDE1ODFdXSxbWzY0ODU1LDY0ODU1XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDUsMTU4Ml1dLFtbNjQ4NTYsNjQ4NTddLFwibWFwcGVkXCIsWzE1ODAsMTYwNSwxNTgxXV0sW1s2NDg1OCw2NDg1OF0sXCJtYXBwZWRcIixbMTU4MSwxNjA1LDE2MTBdXSxbWzY0ODU5LDY0ODU5XSxcIm1hcHBlZFwiLFsxNTgxLDE2MDUsMTYwOV1dLFtbNjQ4NjAsNjQ4NjBdLFwibWFwcGVkXCIsWzE1ODcsMTU4MSwxNTgwXV0sW1s2NDg2MSw2NDg2MV0sXCJtYXBwZWRcIixbMTU4NywxNTgwLDE1ODFdXSxbWzY0ODYyLDY0ODYyXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODAsMTYwOV1dLFtbNjQ4NjMsNjQ4NjRdLFwibWFwcGVkXCIsWzE1ODcsMTYwNSwxNTgxXV0sW1s2NDg2NSw2NDg2NV0sXCJtYXBwZWRcIixbMTU4NywxNjA1LDE1ODBdXSxbWzY0ODY2LDY0ODY3XSxcIm1hcHBlZFwiLFsxNTg3LDE2MDUsMTYwNV1dLFtbNjQ4NjgsNjQ4NjldLFwibWFwcGVkXCIsWzE1ODksMTU4MSwxNTgxXV0sW1s2NDg3MCw2NDg3MF0sXCJtYXBwZWRcIixbMTU4OSwxNjA1LDE2MDVdXSxbWzY0ODcxLDY0ODcyXSxcIm1hcHBlZFwiLFsxNTg4LDE1ODEsMTYwNV1dLFtbNjQ4NzMsNjQ4NzNdLFwibWFwcGVkXCIsWzE1ODgsMTU4MCwxNjEwXV0sW1s2NDg3NCw2NDg3NV0sXCJtYXBwZWRcIixbMTU4OCwxNjA1LDE1ODJdXSxbWzY0ODc2LDY0ODc3XSxcIm1hcHBlZFwiLFsxNTg4LDE2MDUsMTYwNV1dLFtbNjQ4NzgsNjQ4NzhdLFwibWFwcGVkXCIsWzE1OTAsMTU4MSwxNjA5XV0sW1s2NDg3OSw2NDg4MF0sXCJtYXBwZWRcIixbMTU5MCwxNTgyLDE2MDVdXSxbWzY0ODgxLDY0ODgyXSxcIm1hcHBlZFwiLFsxNTkxLDE2MDUsMTU4MV1dLFtbNjQ4ODMsNjQ4ODNdLFwibWFwcGVkXCIsWzE1OTEsMTYwNSwxNjA1XV0sW1s2NDg4NCw2NDg4NF0sXCJtYXBwZWRcIixbMTU5MSwxNjA1LDE2MTBdXSxbWzY0ODg1LDY0ODg1XSxcIm1hcHBlZFwiLFsxNTkzLDE1ODAsMTYwNV1dLFtbNjQ4ODYsNjQ4ODddLFwibWFwcGVkXCIsWzE1OTMsMTYwNSwxNjA1XV0sW1s2NDg4OCw2NDg4OF0sXCJtYXBwZWRcIixbMTU5MywxNjA1LDE2MDldXSxbWzY0ODg5LDY0ODg5XSxcIm1hcHBlZFwiLFsxNTk0LDE2MDUsMTYwNV1dLFtbNjQ4OTAsNjQ4OTBdLFwibWFwcGVkXCIsWzE1OTQsMTYwNSwxNjEwXV0sW1s2NDg5MSw2NDg5MV0sXCJtYXBwZWRcIixbMTU5NCwxNjA1LDE2MDldXSxbWzY0ODkyLDY0ODkzXSxcIm1hcHBlZFwiLFsxNjAxLDE1ODIsMTYwNV1dLFtbNjQ4OTQsNjQ4OTRdLFwibWFwcGVkXCIsWzE2MDIsMTYwNSwxNTgxXV0sW1s2NDg5NSw2NDg5NV0sXCJtYXBwZWRcIixbMTYwMiwxNjA1LDE2MDVdXSxbWzY0ODk2LDY0ODk2XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODEsMTYwNV1dLFtbNjQ4OTcsNjQ4OTddLFwibWFwcGVkXCIsWzE2MDQsMTU4MSwxNjEwXV0sW1s2NDg5OCw2NDg5OF0sXCJtYXBwZWRcIixbMTYwNCwxNTgxLDE2MDldXSxbWzY0ODk5LDY0OTAwXSxcIm1hcHBlZFwiLFsxNjA0LDE1ODAsMTU4MF1dLFtbNjQ5MDEsNjQ5MDJdLFwibWFwcGVkXCIsWzE2MDQsMTU4MiwxNjA1XV0sW1s2NDkwMyw2NDkwNF0sXCJtYXBwZWRcIixbMTYwNCwxNjA1LDE1ODFdXSxbWzY0OTA1LDY0OTA1XSxcIm1hcHBlZFwiLFsxNjA1LDE1ODEsMTU4MF1dLFtbNjQ5MDYsNjQ5MDZdLFwibWFwcGVkXCIsWzE2MDUsMTU4MSwxNjA1XV0sW1s2NDkwNyw2NDkwN10sXCJtYXBwZWRcIixbMTYwNSwxNTgxLDE2MTBdXSxbWzY0OTA4LDY0OTA4XSxcIm1hcHBlZFwiLFsxNjA1LDE1ODAsMTU4MV1dLFtbNjQ5MDksNjQ5MDldLFwibWFwcGVkXCIsWzE2MDUsMTU4MCwxNjA1XV0sW1s2NDkxMCw2NDkxMF0sXCJtYXBwZWRcIixbMTYwNSwxNTgyLDE1ODBdXSxbWzY0OTExLDY0OTExXSxcIm1hcHBlZFwiLFsxNjA1LDE1ODIsMTYwNV1dLFtbNjQ5MTIsNjQ5MTNdLFwiZGlzYWxsb3dlZFwiXSxbWzY0OTE0LDY0OTE0XSxcIm1hcHBlZFwiLFsxNjA1LDE1ODAsMTU4Ml1dLFtbNjQ5MTUsNjQ5MTVdLFwibWFwcGVkXCIsWzE2MDcsMTYwNSwxNTgwXV0sW1s2NDkxNiw2NDkxNl0sXCJtYXBwZWRcIixbMTYwNywxNjA1LDE2MDVdXSxbWzY0OTE3LDY0OTE3XSxcIm1hcHBlZFwiLFsxNjA2LDE1ODEsMTYwNV1dLFtbNjQ5MTgsNjQ5MThdLFwibWFwcGVkXCIsWzE2MDYsMTU4MSwxNjA5XV0sW1s2NDkxOSw2NDkyMF0sXCJtYXBwZWRcIixbMTYwNiwxNTgwLDE2MDVdXSxbWzY0OTIxLDY0OTIxXSxcIm1hcHBlZFwiLFsxNjA2LDE1ODAsMTYwOV1dLFtbNjQ5MjIsNjQ5MjJdLFwibWFwcGVkXCIsWzE2MDYsMTYwNSwxNjEwXV0sW1s2NDkyMyw2NDkyM10sXCJtYXBwZWRcIixbMTYwNiwxNjA1LDE2MDldXSxbWzY0OTI0LDY0OTI1XSxcIm1hcHBlZFwiLFsxNjEwLDE2MDUsMTYwNV1dLFtbNjQ5MjYsNjQ5MjZdLFwibWFwcGVkXCIsWzE1NzYsMTU4MiwxNjEwXV0sW1s2NDkyNyw2NDkyN10sXCJtYXBwZWRcIixbMTU3OCwxNTgwLDE2MTBdXSxbWzY0OTI4LDY0OTI4XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODAsMTYwOV1dLFtbNjQ5MjksNjQ5MjldLFwibWFwcGVkXCIsWzE1NzgsMTU4MiwxNjEwXV0sW1s2NDkzMCw2NDkzMF0sXCJtYXBwZWRcIixbMTU3OCwxNTgyLDE2MDldXSxbWzY0OTMxLDY0OTMxXSxcIm1hcHBlZFwiLFsxNTc4LDE2MDUsMTYxMF1dLFtbNjQ5MzIsNjQ5MzJdLFwibWFwcGVkXCIsWzE1NzgsMTYwNSwxNjA5XV0sW1s2NDkzMyw2NDkzM10sXCJtYXBwZWRcIixbMTU4MCwxNjA1LDE2MTBdXSxbWzY0OTM0LDY0OTM0XSxcIm1hcHBlZFwiLFsxNTgwLDE1ODEsMTYwOV1dLFtbNjQ5MzUsNjQ5MzVdLFwibWFwcGVkXCIsWzE1ODAsMTYwNSwxNjA5XV0sW1s2NDkzNiw2NDkzNl0sXCJtYXBwZWRcIixbMTU4NywxNTgyLDE2MDldXSxbWzY0OTM3LDY0OTM3XSxcIm1hcHBlZFwiLFsxNTg5LDE1ODEsMTYxMF1dLFtbNjQ5MzgsNjQ5MzhdLFwibWFwcGVkXCIsWzE1ODgsMTU4MSwxNjEwXV0sW1s2NDkzOSw2NDkzOV0sXCJtYXBwZWRcIixbMTU5MCwxNTgxLDE2MTBdXSxbWzY0OTQwLDY0OTQwXSxcIm1hcHBlZFwiLFsxNjA0LDE1ODAsMTYxMF1dLFtbNjQ5NDEsNjQ5NDFdLFwibWFwcGVkXCIsWzE2MDQsMTYwNSwxNjEwXV0sW1s2NDk0Miw2NDk0Ml0sXCJtYXBwZWRcIixbMTYxMCwxNTgxLDE2MTBdXSxbWzY0OTQzLDY0OTQzXSxcIm1hcHBlZFwiLFsxNjEwLDE1ODAsMTYxMF1dLFtbNjQ5NDQsNjQ5NDRdLFwibWFwcGVkXCIsWzE2MTAsMTYwNSwxNjEwXV0sW1s2NDk0NSw2NDk0NV0sXCJtYXBwZWRcIixbMTYwNSwxNjA1LDE2MTBdXSxbWzY0OTQ2LDY0OTQ2XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDUsMTYxMF1dLFtbNjQ5NDcsNjQ5NDddLFwibWFwcGVkXCIsWzE2MDYsMTU4MSwxNjEwXV0sW1s2NDk0OCw2NDk0OF0sXCJtYXBwZWRcIixbMTYwMiwxNjA1LDE1ODFdXSxbWzY0OTQ5LDY0OTQ5XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODEsMTYwNV1dLFtbNjQ5NTAsNjQ5NTBdLFwibWFwcGVkXCIsWzE1OTMsMTYwNSwxNjEwXV0sW1s2NDk1MSw2NDk1MV0sXCJtYXBwZWRcIixbMTYwMywxNjA1LDE2MTBdXSxbWzY0OTUyLDY0OTUyXSxcIm1hcHBlZFwiLFsxNjA2LDE1ODAsMTU4MV1dLFtbNjQ5NTMsNjQ5NTNdLFwibWFwcGVkXCIsWzE2MDUsMTU4MiwxNjEwXV0sW1s2NDk1NCw2NDk1NF0sXCJtYXBwZWRcIixbMTYwNCwxNTgwLDE2MDVdXSxbWzY0OTU1LDY0OTU1XSxcIm1hcHBlZFwiLFsxNjAzLDE2MDUsMTYwNV1dLFtbNjQ5NTYsNjQ5NTZdLFwibWFwcGVkXCIsWzE2MDQsMTU4MCwxNjA1XV0sW1s2NDk1Nyw2NDk1N10sXCJtYXBwZWRcIixbMTYwNiwxNTgwLDE1ODFdXSxbWzY0OTU4LDY0OTU4XSxcIm1hcHBlZFwiLFsxNTgwLDE1ODEsMTYxMF1dLFtbNjQ5NTksNjQ5NTldLFwibWFwcGVkXCIsWzE1ODEsMTU4MCwxNjEwXV0sW1s2NDk2MCw2NDk2MF0sXCJtYXBwZWRcIixbMTYwNSwxNTgwLDE2MTBdXSxbWzY0OTYxLDY0OTYxXSxcIm1hcHBlZFwiLFsxNjAxLDE2MDUsMTYxMF1dLFtbNjQ5NjIsNjQ5NjJdLFwibWFwcGVkXCIsWzE1NzYsMTU4MSwxNjEwXV0sW1s2NDk2Myw2NDk2M10sXCJtYXBwZWRcIixbMTYwMywxNjA1LDE2MDVdXSxbWzY0OTY0LDY0OTY0XSxcIm1hcHBlZFwiLFsxNTkzLDE1ODAsMTYwNV1dLFtbNjQ5NjUsNjQ5NjVdLFwibWFwcGVkXCIsWzE1ODksMTYwNSwxNjA1XV0sW1s2NDk2Niw2NDk2Nl0sXCJtYXBwZWRcIixbMTU4NywxNTgyLDE2MTBdXSxbWzY0OTY3LDY0OTY3XSxcIm1hcHBlZFwiLFsxNjA2LDE1ODAsMTYxMF1dLFtbNjQ5NjgsNjQ5NzVdLFwiZGlzYWxsb3dlZFwiXSxbWzY0OTc2LDY1MDA3XSxcImRpc2FsbG93ZWRcIl0sW1s2NTAwOCw2NTAwOF0sXCJtYXBwZWRcIixbMTU4OSwxNjA0LDE3NDZdXSxbWzY1MDA5LDY1MDA5XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDQsMTc0Nl1dLFtbNjUwMTAsNjUwMTBdLFwibWFwcGVkXCIsWzE1NzUsMTYwNCwxNjA0LDE2MDddXSxbWzY1MDExLDY1MDExXSxcIm1hcHBlZFwiLFsxNTc1LDE2MDMsMTU3NiwxNTg1XV0sW1s2NTAxMiw2NTAxMl0sXCJtYXBwZWRcIixbMTYwNSwxNTgxLDE2MDUsMTU4M11dLFtbNjUwMTMsNjUwMTNdLFwibWFwcGVkXCIsWzE1ODksMTYwNCwxNTkzLDE2MDVdXSxbWzY1MDE0LDY1MDE0XSxcIm1hcHBlZFwiLFsxNTg1LDE1ODcsMTYwOCwxNjA0XV0sW1s2NTAxNSw2NTAxNV0sXCJtYXBwZWRcIixbMTU5MywxNjA0LDE2MTAsMTYwN11dLFtbNjUwMTYsNjUwMTZdLFwibWFwcGVkXCIsWzE2MDgsMTU4NywxNjA0LDE2MDVdXSxbWzY1MDE3LDY1MDE3XSxcIm1hcHBlZFwiLFsxNTg5LDE2MDQsMTYwOV1dLFtbNjUwMTgsNjUwMThdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxNTg5LDE2MDQsMTYwOSwzMiwxNTc1LDE2MDQsMTYwNCwxNjA3LDMyLDE1OTMsMTYwNCwxNjEwLDE2MDcsMzIsMTYwOCwxNTg3LDE2MDQsMTYwNV1dLFtbNjUwMTksNjUwMTldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxNTgwLDE2MDQsMzIsMTU4MCwxNjA0LDE1NzUsMTYwNCwxNjA3XV0sW1s2NTAyMCw2NTAyMF0sXCJtYXBwZWRcIixbMTU4NSwxNzQwLDE1NzUsMTYwNF1dLFtbNjUwMjEsNjUwMjFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY1MDIyLDY1MDIzXSxcImRpc2FsbG93ZWRcIl0sW1s2NTAyNCw2NTAzOV0sXCJpZ25vcmVkXCJdLFtbNjUwNDAsNjUwNDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0NF1dLFtbNjUwNDEsNjUwNDFdLFwibWFwcGVkXCIsWzEyMjg5XV0sW1s2NTA0Miw2NTA0Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNjUwNDMsNjUwNDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OF1dLFtbNjUwNDQsNjUwNDRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OV1dLFtbNjUwNDUsNjUwNDVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszM11dLFtbNjUwNDYsNjUwNDZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2M11dLFtbNjUwNDcsNjUwNDddLFwibWFwcGVkXCIsWzEyMzEwXV0sW1s2NTA0OCw2NTA0OF0sXCJtYXBwZWRcIixbMTIzMTFdXSxbWzY1MDQ5LDY1MDQ5XSxcImRpc2FsbG93ZWRcIl0sW1s2NTA1MCw2NTA1NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjUwNTYsNjUwNTldLFwidmFsaWRcIl0sW1s2NTA2MCw2NTA2Ml0sXCJ2YWxpZFwiXSxbWzY1MDYzLDY1MDY5XSxcInZhbGlkXCJdLFtbNjUwNzAsNjUwNzFdLFwidmFsaWRcIl0sW1s2NTA3Miw2NTA3Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNjUwNzMsNjUwNzNdLFwibWFwcGVkXCIsWzgyMTJdXSxbWzY1MDc0LDY1MDc0XSxcIm1hcHBlZFwiLFs4MjExXV0sW1s2NTA3NSw2NTA3Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzk1XV0sW1s2NTA3Nyw2NTA3N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwXV0sW1s2NTA3OCw2NTA3OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQxXV0sW1s2NTA3OSw2NTA3OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzEyM11dLFtbNjUwODAsNjUwODBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxMjVdXSxbWzY1MDgxLDY1MDgxXSxcIm1hcHBlZFwiLFsxMjMwOF1dLFtbNjUwODIsNjUwODJdLFwibWFwcGVkXCIsWzEyMzA5XV0sW1s2NTA4Myw2NTA4M10sXCJtYXBwZWRcIixbMTIzMDRdXSxbWzY1MDg0LDY1MDg0XSxcIm1hcHBlZFwiLFsxMjMwNV1dLFtbNjUwODUsNjUwODVdLFwibWFwcGVkXCIsWzEyMjk4XV0sW1s2NTA4Niw2NTA4Nl0sXCJtYXBwZWRcIixbMTIyOTldXSxbWzY1MDg3LDY1MDg3XSxcIm1hcHBlZFwiLFsxMjI5Nl1dLFtbNjUwODgsNjUwODhdLFwibWFwcGVkXCIsWzEyMjk3XV0sW1s2NTA4OSw2NTA4OV0sXCJtYXBwZWRcIixbMTIzMDBdXSxbWzY1MDkwLDY1MDkwXSxcIm1hcHBlZFwiLFsxMjMwMV1dLFtbNjUwOTEsNjUwOTFdLFwibWFwcGVkXCIsWzEyMzAyXV0sW1s2NTA5Miw2NTA5Ml0sXCJtYXBwZWRcIixbMTIzMDNdXSxbWzY1MDkzLDY1MDk0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NTA5NSw2NTA5NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzkxXV0sW1s2NTA5Niw2NTA5Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzkzXV0sW1s2NTA5Nyw2NTEwMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3M11dLFtbNjUxMDEsNjUxMDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5NV1dLFtbNjUxMDQsNjUxMDRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0NF1dLFtbNjUxMDUsNjUxMDVdLFwibWFwcGVkXCIsWzEyMjg5XV0sW1s2NTEwNiw2NTEwNl0sXCJkaXNhbGxvd2VkXCJdLFtbNjUxMDcsNjUxMDddLFwiZGlzYWxsb3dlZFwiXSxbWzY1MTA4LDY1MTA4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTldXSxbWzY1MTA5LDY1MTA5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNThdXSxbWzY1MTEwLDY1MTEwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjNdXSxbWzY1MTExLDY1MTExXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzNdXSxbWzY1MTEyLDY1MTEyXSxcIm1hcHBlZFwiLFs4MjEyXV0sW1s2NTExMyw2NTExM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwXV0sW1s2NTExNCw2NTExNF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQxXV0sW1s2NTExNSw2NTExNV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzEyM11dLFtbNjUxMTYsNjUxMTZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxMjVdXSxbWzY1MTE3LDY1MTE3XSxcIm1hcHBlZFwiLFsxMjMwOF1dLFtbNjUxMTgsNjUxMThdLFwibWFwcGVkXCIsWzEyMzA5XV0sW1s2NTExOSw2NTExOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzM1XV0sW1s2NTEyMCw2NTEyMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzM4XV0sW1s2NTEyMSw2NTEyMV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQyXV0sW1s2NTEyMiw2NTEyMl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQzXV0sW1s2NTEyMyw2NTEyM10sXCJtYXBwZWRcIixbNDVdXSxbWzY1MTI0LDY1MTI0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjBdXSxbWzY1MTI1LDY1MTI1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjJdXSxbWzY1MTI2LDY1MTI2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjFdXSxbWzY1MTI3LDY1MTI3XSxcImRpc2FsbG93ZWRcIl0sW1s2NTEyOCw2NTEyOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzkyXV0sW1s2NTEyOSw2NTEyOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzM2XV0sW1s2NTEzMCw2NTEzMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzM3XV0sW1s2NTEzMSw2NTEzMV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzY0XV0sW1s2NTEzMiw2NTEzNV0sXCJkaXNhbGxvd2VkXCJdLFtbNjUxMzYsNjUxMzZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjExXV0sW1s2NTEzNyw2NTEzN10sXCJtYXBwZWRcIixbMTYwMCwxNjExXV0sW1s2NTEzOCw2NTEzOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTJdXSxbWzY1MTM5LDY1MTM5XSxcInZhbGlkXCJdLFtbNjUxNDAsNjUxNDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjEzXV0sW1s2NTE0MSw2NTE0MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjUxNDIsNjUxNDJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjE0XV0sW1s2NTE0Myw2NTE0M10sXCJtYXBwZWRcIixbMTYwMCwxNjE0XV0sW1s2NTE0NCw2NTE0NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTVdXSxbWzY1MTQ1LDY1MTQ1XSxcIm1hcHBlZFwiLFsxNjAwLDE2MTVdXSxbWzY1MTQ2LDY1MTQ2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxNl1dLFtbNjUxNDcsNjUxNDddLFwibWFwcGVkXCIsWzE2MDAsMTYxNl1dLFtbNjUxNDgsNjUxNDhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjE3XV0sW1s2NTE0OSw2NTE0OV0sXCJtYXBwZWRcIixbMTYwMCwxNjE3XV0sW1s2NTE1MCw2NTE1MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MThdXSxbWzY1MTUxLDY1MTUxXSxcIm1hcHBlZFwiLFsxNjAwLDE2MThdXSxbWzY1MTUyLDY1MTUyXSxcIm1hcHBlZFwiLFsxNTY5XV0sW1s2NTE1Myw2NTE1NF0sXCJtYXBwZWRcIixbMTU3MF1dLFtbNjUxNTUsNjUxNTZdLFwibWFwcGVkXCIsWzE1NzFdXSxbWzY1MTU3LDY1MTU4XSxcIm1hcHBlZFwiLFsxNTcyXV0sW1s2NTE1OSw2NTE2MF0sXCJtYXBwZWRcIixbMTU3M11dLFtbNjUxNjEsNjUxNjRdLFwibWFwcGVkXCIsWzE1NzRdXSxbWzY1MTY1LDY1MTY2XSxcIm1hcHBlZFwiLFsxNTc1XV0sW1s2NTE2Nyw2NTE3MF0sXCJtYXBwZWRcIixbMTU3Nl1dLFtbNjUxNzEsNjUxNzJdLFwibWFwcGVkXCIsWzE1NzddXSxbWzY1MTczLDY1MTc2XSxcIm1hcHBlZFwiLFsxNTc4XV0sW1s2NTE3Nyw2NTE4MF0sXCJtYXBwZWRcIixbMTU3OV1dLFtbNjUxODEsNjUxODRdLFwibWFwcGVkXCIsWzE1ODBdXSxbWzY1MTg1LDY1MTg4XSxcIm1hcHBlZFwiLFsxNTgxXV0sW1s2NTE4OSw2NTE5Ml0sXCJtYXBwZWRcIixbMTU4Ml1dLFtbNjUxOTMsNjUxOTRdLFwibWFwcGVkXCIsWzE1ODNdXSxbWzY1MTk1LDY1MTk2XSxcIm1hcHBlZFwiLFsxNTg0XV0sW1s2NTE5Nyw2NTE5OF0sXCJtYXBwZWRcIixbMTU4NV1dLFtbNjUxOTksNjUyMDBdLFwibWFwcGVkXCIsWzE1ODZdXSxbWzY1MjAxLDY1MjA0XSxcIm1hcHBlZFwiLFsxNTg3XV0sW1s2NTIwNSw2NTIwOF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbNjUyMDksNjUyMTJdLFwibWFwcGVkXCIsWzE1ODldXSxbWzY1MjEzLDY1MjE2XSxcIm1hcHBlZFwiLFsxNTkwXV0sW1s2NTIxNyw2NTIyMF0sXCJtYXBwZWRcIixbMTU5MV1dLFtbNjUyMjEsNjUyMjRdLFwibWFwcGVkXCIsWzE1OTJdXSxbWzY1MjI1LDY1MjI4XSxcIm1hcHBlZFwiLFsxNTkzXV0sW1s2NTIyOSw2NTIzMl0sXCJtYXBwZWRcIixbMTU5NF1dLFtbNjUyMzMsNjUyMzZdLFwibWFwcGVkXCIsWzE2MDFdXSxbWzY1MjM3LDY1MjQwXSxcIm1hcHBlZFwiLFsxNjAyXV0sW1s2NTI0MSw2NTI0NF0sXCJtYXBwZWRcIixbMTYwM11dLFtbNjUyNDUsNjUyNDhdLFwibWFwcGVkXCIsWzE2MDRdXSxbWzY1MjQ5LDY1MjUyXSxcIm1hcHBlZFwiLFsxNjA1XV0sW1s2NTI1Myw2NTI1Nl0sXCJtYXBwZWRcIixbMTYwNl1dLFtbNjUyNTcsNjUyNjBdLFwibWFwcGVkXCIsWzE2MDddXSxbWzY1MjYxLDY1MjYyXSxcIm1hcHBlZFwiLFsxNjA4XV0sW1s2NTI2Myw2NTI2NF0sXCJtYXBwZWRcIixbMTYwOV1dLFtbNjUyNjUsNjUyNjhdLFwibWFwcGVkXCIsWzE2MTBdXSxbWzY1MjY5LDY1MjcwXSxcIm1hcHBlZFwiLFsxNjA0LDE1NzBdXSxbWzY1MjcxLDY1MjcyXSxcIm1hcHBlZFwiLFsxNjA0LDE1NzFdXSxbWzY1MjczLDY1Mjc0XSxcIm1hcHBlZFwiLFsxNjA0LDE1NzNdXSxbWzY1Mjc1LDY1Mjc2XSxcIm1hcHBlZFwiLFsxNjA0LDE1NzVdXSxbWzY1Mjc3LDY1Mjc4XSxcImRpc2FsbG93ZWRcIl0sW1s2NTI3OSw2NTI3OV0sXCJpZ25vcmVkXCJdLFtbNjUyODAsNjUyODBdLFwiZGlzYWxsb3dlZFwiXSxbWzY1MjgxLDY1MjgxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzNdXSxbWzY1MjgyLDY1MjgyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzRdXSxbWzY1MjgzLDY1MjgzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzVdXSxbWzY1Mjg0LDY1Mjg0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzZdXSxbWzY1Mjg1LDY1Mjg1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzddXSxbWzY1Mjg2LDY1Mjg2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzhdXSxbWzY1Mjg3LDY1Mjg3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzldXSxbWzY1Mjg4LDY1Mjg4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDBdXSxbWzY1Mjg5LDY1Mjg5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDFdXSxbWzY1MjkwLDY1MjkwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDJdXSxbWzY1MjkxLDY1MjkxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDNdXSxbWzY1MjkyLDY1MjkyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDRdXSxbWzY1MjkzLDY1MjkzXSxcIm1hcHBlZFwiLFs0NV1dLFtbNjUyOTQsNjUyOTRdLFwibWFwcGVkXCIsWzQ2XV0sW1s2NTI5NSw2NTI5NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQ3XV0sW1s2NTI5Niw2NTI5Nl0sXCJtYXBwZWRcIixbNDhdXSxbWzY1Mjk3LDY1Mjk3XSxcIm1hcHBlZFwiLFs0OV1dLFtbNjUyOTgsNjUyOThdLFwibWFwcGVkXCIsWzUwXV0sW1s2NTI5OSw2NTI5OV0sXCJtYXBwZWRcIixbNTFdXSxbWzY1MzAwLDY1MzAwXSxcIm1hcHBlZFwiLFs1Ml1dLFtbNjUzMDEsNjUzMDFdLFwibWFwcGVkXCIsWzUzXV0sW1s2NTMwMiw2NTMwMl0sXCJtYXBwZWRcIixbNTRdXSxbWzY1MzAzLDY1MzAzXSxcIm1hcHBlZFwiLFs1NV1dLFtbNjUzMDQsNjUzMDRdLFwibWFwcGVkXCIsWzU2XV0sW1s2NTMwNSw2NTMwNV0sXCJtYXBwZWRcIixbNTddXSxbWzY1MzA2LDY1MzA2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNThdXSxbWzY1MzA3LDY1MzA3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTldXSxbWzY1MzA4LDY1MzA4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjBdXSxbWzY1MzA5LDY1MzA5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjFdXSxbWzY1MzEwLDY1MzEwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjJdXSxbWzY1MzExLDY1MzExXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjNdXSxbWzY1MzEyLDY1MzEyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjRdXSxbWzY1MzEzLDY1MzEzXSxcIm1hcHBlZFwiLFs5N11dLFtbNjUzMTQsNjUzMTRdLFwibWFwcGVkXCIsWzk4XV0sW1s2NTMxNSw2NTMxNV0sXCJtYXBwZWRcIixbOTldXSxbWzY1MzE2LDY1MzE2XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzY1MzE3LDY1MzE3XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzY1MzE4LDY1MzE4XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzY1MzE5LDY1MzE5XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzY1MzIwLDY1MzIwXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzY1MzIxLDY1MzIxXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzY1MzIyLDY1MzIyXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzY1MzIzLDY1MzIzXSxcIm1hcHBlZFwiLFsxMDddXSxbWzY1MzI0LDY1MzI0XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzY1MzI1LDY1MzI1XSxcIm1hcHBlZFwiLFsxMDldXSxbWzY1MzI2LDY1MzI2XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzY1MzI3LDY1MzI3XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzY1MzI4LDY1MzI4XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzY1MzI5LDY1MzI5XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzY1MzMwLDY1MzMwXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzY1MzMxLDY1MzMxXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzY1MzMyLDY1MzMyXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzY1MzMzLDY1MzMzXSxcIm1hcHBlZFwiLFsxMTddXSxbWzY1MzM0LDY1MzM0XSxcIm1hcHBlZFwiLFsxMThdXSxbWzY1MzM1LDY1MzM1XSxcIm1hcHBlZFwiLFsxMTldXSxbWzY1MzM2LDY1MzM2XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzY1MzM3LDY1MzM3XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzY1MzM4LDY1MzM4XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzY1MzM5LDY1MzM5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTFdXSxbWzY1MzQwLDY1MzQwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTJdXSxbWzY1MzQxLDY1MzQxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTNdXSxbWzY1MzQyLDY1MzQyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTRdXSxbWzY1MzQzLDY1MzQzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTVdXSxbWzY1MzQ0LDY1MzQ0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTZdXSxbWzY1MzQ1LDY1MzQ1XSxcIm1hcHBlZFwiLFs5N11dLFtbNjUzNDYsNjUzNDZdLFwibWFwcGVkXCIsWzk4XV0sW1s2NTM0Nyw2NTM0N10sXCJtYXBwZWRcIixbOTldXSxbWzY1MzQ4LDY1MzQ4XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzY1MzQ5LDY1MzQ5XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzY1MzUwLDY1MzUwXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzY1MzUxLDY1MzUxXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzY1MzUyLDY1MzUyXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzY1MzUzLDY1MzUzXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzY1MzU0LDY1MzU0XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzY1MzU1LDY1MzU1XSxcIm1hcHBlZFwiLFsxMDddXSxbWzY1MzU2LDY1MzU2XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzY1MzU3LDY1MzU3XSxcIm1hcHBlZFwiLFsxMDldXSxbWzY1MzU4LDY1MzU4XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzY1MzU5LDY1MzU5XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzY1MzYwLDY1MzYwXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzY1MzYxLDY1MzYxXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzY1MzYyLDY1MzYyXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzY1MzYzLDY1MzYzXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzY1MzY0LDY1MzY0XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzY1MzY1LDY1MzY1XSxcIm1hcHBlZFwiLFsxMTddXSxbWzY1MzY2LDY1MzY2XSxcIm1hcHBlZFwiLFsxMThdXSxbWzY1MzY3LDY1MzY3XSxcIm1hcHBlZFwiLFsxMTldXSxbWzY1MzY4LDY1MzY4XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzY1MzY5LDY1MzY5XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzY1MzcwLDY1MzcwXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzY1MzcxLDY1MzcxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMTIzXV0sW1s2NTM3Miw2NTM3Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzEyNF1dLFtbNjUzNzMsNjUzNzNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxMjVdXSxbWzY1Mzc0LDY1Mzc0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMTI2XV0sW1s2NTM3NSw2NTM3NV0sXCJtYXBwZWRcIixbMTA2MjldXSxbWzY1Mzc2LDY1Mzc2XSxcIm1hcHBlZFwiLFsxMDYzMF1dLFtbNjUzNzcsNjUzNzddLFwibWFwcGVkXCIsWzQ2XV0sW1s2NTM3OCw2NTM3OF0sXCJtYXBwZWRcIixbMTIzMDBdXSxbWzY1Mzc5LDY1Mzc5XSxcIm1hcHBlZFwiLFsxMjMwMV1dLFtbNjUzODAsNjUzODBdLFwibWFwcGVkXCIsWzEyMjg5XV0sW1s2NTM4MSw2NTM4MV0sXCJtYXBwZWRcIixbMTI1MzldXSxbWzY1MzgyLDY1MzgyXSxcIm1hcHBlZFwiLFsxMjUzMF1dLFtbNjUzODMsNjUzODNdLFwibWFwcGVkXCIsWzEyNDQ5XV0sW1s2NTM4NCw2NTM4NF0sXCJtYXBwZWRcIixbMTI0NTFdXSxbWzY1Mzg1LDY1Mzg1XSxcIm1hcHBlZFwiLFsxMjQ1M11dLFtbNjUzODYsNjUzODZdLFwibWFwcGVkXCIsWzEyNDU1XV0sW1s2NTM4Nyw2NTM4N10sXCJtYXBwZWRcIixbMTI0NTddXSxbWzY1Mzg4LDY1Mzg4XSxcIm1hcHBlZFwiLFsxMjUxNV1dLFtbNjUzODksNjUzODldLFwibWFwcGVkXCIsWzEyNTE3XV0sW1s2NTM5MCw2NTM5MF0sXCJtYXBwZWRcIixbMTI1MTldXSxbWzY1MzkxLDY1MzkxXSxcIm1hcHBlZFwiLFsxMjQ4M11dLFtbNjUzOTIsNjUzOTJdLFwibWFwcGVkXCIsWzEyNTQwXV0sW1s2NTM5Myw2NTM5M10sXCJtYXBwZWRcIixbMTI0NTBdXSxbWzY1Mzk0LDY1Mzk0XSxcIm1hcHBlZFwiLFsxMjQ1Ml1dLFtbNjUzOTUsNjUzOTVdLFwibWFwcGVkXCIsWzEyNDU0XV0sW1s2NTM5Niw2NTM5Nl0sXCJtYXBwZWRcIixbMTI0NTZdXSxbWzY1Mzk3LDY1Mzk3XSxcIm1hcHBlZFwiLFsxMjQ1OF1dLFtbNjUzOTgsNjUzOThdLFwibWFwcGVkXCIsWzEyNDU5XV0sW1s2NTM5OSw2NTM5OV0sXCJtYXBwZWRcIixbMTI0NjFdXSxbWzY1NDAwLDY1NDAwXSxcIm1hcHBlZFwiLFsxMjQ2M11dLFtbNjU0MDEsNjU0MDFdLFwibWFwcGVkXCIsWzEyNDY1XV0sW1s2NTQwMiw2NTQwMl0sXCJtYXBwZWRcIixbMTI0NjddXSxbWzY1NDAzLDY1NDAzXSxcIm1hcHBlZFwiLFsxMjQ2OV1dLFtbNjU0MDQsNjU0MDRdLFwibWFwcGVkXCIsWzEyNDcxXV0sW1s2NTQwNSw2NTQwNV0sXCJtYXBwZWRcIixbMTI0NzNdXSxbWzY1NDA2LDY1NDA2XSxcIm1hcHBlZFwiLFsxMjQ3NV1dLFtbNjU0MDcsNjU0MDddLFwibWFwcGVkXCIsWzEyNDc3XV0sW1s2NTQwOCw2NTQwOF0sXCJtYXBwZWRcIixbMTI0NzldXSxbWzY1NDA5LDY1NDA5XSxcIm1hcHBlZFwiLFsxMjQ4MV1dLFtbNjU0MTAsNjU0MTBdLFwibWFwcGVkXCIsWzEyNDg0XV0sW1s2NTQxMSw2NTQxMV0sXCJtYXBwZWRcIixbMTI0ODZdXSxbWzY1NDEyLDY1NDEyXSxcIm1hcHBlZFwiLFsxMjQ4OF1dLFtbNjU0MTMsNjU0MTNdLFwibWFwcGVkXCIsWzEyNDkwXV0sW1s2NTQxNCw2NTQxNF0sXCJtYXBwZWRcIixbMTI0OTFdXSxbWzY1NDE1LDY1NDE1XSxcIm1hcHBlZFwiLFsxMjQ5Ml1dLFtbNjU0MTYsNjU0MTZdLFwibWFwcGVkXCIsWzEyNDkzXV0sW1s2NTQxNyw2NTQxN10sXCJtYXBwZWRcIixbMTI0OTRdXSxbWzY1NDE4LDY1NDE4XSxcIm1hcHBlZFwiLFsxMjQ5NV1dLFtbNjU0MTksNjU0MTldLFwibWFwcGVkXCIsWzEyNDk4XV0sW1s2NTQyMCw2NTQyMF0sXCJtYXBwZWRcIixbMTI1MDFdXSxbWzY1NDIxLDY1NDIxXSxcIm1hcHBlZFwiLFsxMjUwNF1dLFtbNjU0MjIsNjU0MjJdLFwibWFwcGVkXCIsWzEyNTA3XV0sW1s2NTQyMyw2NTQyM10sXCJtYXBwZWRcIixbMTI1MTBdXSxbWzY1NDI0LDY1NDI0XSxcIm1hcHBlZFwiLFsxMjUxMV1dLFtbNjU0MjUsNjU0MjVdLFwibWFwcGVkXCIsWzEyNTEyXV0sW1s2NTQyNiw2NTQyNl0sXCJtYXBwZWRcIixbMTI1MTNdXSxbWzY1NDI3LDY1NDI3XSxcIm1hcHBlZFwiLFsxMjUxNF1dLFtbNjU0MjgsNjU0MjhdLFwibWFwcGVkXCIsWzEyNTE2XV0sW1s2NTQyOSw2NTQyOV0sXCJtYXBwZWRcIixbMTI1MThdXSxbWzY1NDMwLDY1NDMwXSxcIm1hcHBlZFwiLFsxMjUyMF1dLFtbNjU0MzEsNjU0MzFdLFwibWFwcGVkXCIsWzEyNTIxXV0sW1s2NTQzMiw2NTQzMl0sXCJtYXBwZWRcIixbMTI1MjJdXSxbWzY1NDMzLDY1NDMzXSxcIm1hcHBlZFwiLFsxMjUyM11dLFtbNjU0MzQsNjU0MzRdLFwibWFwcGVkXCIsWzEyNTI0XV0sW1s2NTQzNSw2NTQzNV0sXCJtYXBwZWRcIixbMTI1MjVdXSxbWzY1NDM2LDY1NDM2XSxcIm1hcHBlZFwiLFsxMjUyN11dLFtbNjU0MzcsNjU0MzddLFwibWFwcGVkXCIsWzEyNTMxXV0sW1s2NTQzOCw2NTQzOF0sXCJtYXBwZWRcIixbMTI0NDFdXSxbWzY1NDM5LDY1NDM5XSxcIm1hcHBlZFwiLFsxMjQ0Ml1dLFtbNjU0NDAsNjU0NDBdLFwiZGlzYWxsb3dlZFwiXSxbWzY1NDQxLDY1NDQxXSxcIm1hcHBlZFwiLFs0MzUyXV0sW1s2NTQ0Miw2NTQ0Ml0sXCJtYXBwZWRcIixbNDM1M11dLFtbNjU0NDMsNjU0NDNdLFwibWFwcGVkXCIsWzQ1MjJdXSxbWzY1NDQ0LDY1NDQ0XSxcIm1hcHBlZFwiLFs0MzU0XV0sW1s2NTQ0NSw2NTQ0NV0sXCJtYXBwZWRcIixbNDUyNF1dLFtbNjU0NDYsNjU0NDZdLFwibWFwcGVkXCIsWzQ1MjVdXSxbWzY1NDQ3LDY1NDQ3XSxcIm1hcHBlZFwiLFs0MzU1XV0sW1s2NTQ0OCw2NTQ0OF0sXCJtYXBwZWRcIixbNDM1Nl1dLFtbNjU0NDksNjU0NDldLFwibWFwcGVkXCIsWzQzNTddXSxbWzY1NDUwLDY1NDUwXSxcIm1hcHBlZFwiLFs0NTI4XV0sW1s2NTQ1MSw2NTQ1MV0sXCJtYXBwZWRcIixbNDUyOV1dLFtbNjU0NTIsNjU0NTJdLFwibWFwcGVkXCIsWzQ1MzBdXSxbWzY1NDUzLDY1NDUzXSxcIm1hcHBlZFwiLFs0NTMxXV0sW1s2NTQ1NCw2NTQ1NF0sXCJtYXBwZWRcIixbNDUzMl1dLFtbNjU0NTUsNjU0NTVdLFwibWFwcGVkXCIsWzQ1MzNdXSxbWzY1NDU2LDY1NDU2XSxcIm1hcHBlZFwiLFs0Mzc4XV0sW1s2NTQ1Nyw2NTQ1N10sXCJtYXBwZWRcIixbNDM1OF1dLFtbNjU0NTgsNjU0NThdLFwibWFwcGVkXCIsWzQzNTldXSxbWzY1NDU5LDY1NDU5XSxcIm1hcHBlZFwiLFs0MzYwXV0sW1s2NTQ2MCw2NTQ2MF0sXCJtYXBwZWRcIixbNDM4NV1dLFtbNjU0NjEsNjU0NjFdLFwibWFwcGVkXCIsWzQzNjFdXSxbWzY1NDYyLDY1NDYyXSxcIm1hcHBlZFwiLFs0MzYyXV0sW1s2NTQ2Myw2NTQ2M10sXCJtYXBwZWRcIixbNDM2M11dLFtbNjU0NjQsNjU0NjRdLFwibWFwcGVkXCIsWzQzNjRdXSxbWzY1NDY1LDY1NDY1XSxcIm1hcHBlZFwiLFs0MzY1XV0sW1s2NTQ2Niw2NTQ2Nl0sXCJtYXBwZWRcIixbNDM2Nl1dLFtbNjU0NjcsNjU0NjddLFwibWFwcGVkXCIsWzQzNjddXSxbWzY1NDY4LDY1NDY4XSxcIm1hcHBlZFwiLFs0MzY4XV0sW1s2NTQ2OSw2NTQ2OV0sXCJtYXBwZWRcIixbNDM2OV1dLFtbNjU0NzAsNjU0NzBdLFwibWFwcGVkXCIsWzQzNzBdXSxbWzY1NDcxLDY1NDczXSxcImRpc2FsbG93ZWRcIl0sW1s2NTQ3NCw2NTQ3NF0sXCJtYXBwZWRcIixbNDQ0OV1dLFtbNjU0NzUsNjU0NzVdLFwibWFwcGVkXCIsWzQ0NTBdXSxbWzY1NDc2LDY1NDc2XSxcIm1hcHBlZFwiLFs0NDUxXV0sW1s2NTQ3Nyw2NTQ3N10sXCJtYXBwZWRcIixbNDQ1Ml1dLFtbNjU0NzgsNjU0NzhdLFwibWFwcGVkXCIsWzQ0NTNdXSxbWzY1NDc5LDY1NDc5XSxcIm1hcHBlZFwiLFs0NDU0XV0sW1s2NTQ4MCw2NTQ4MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU0ODIsNjU0ODJdLFwibWFwcGVkXCIsWzQ0NTVdXSxbWzY1NDgzLDY1NDgzXSxcIm1hcHBlZFwiLFs0NDU2XV0sW1s2NTQ4NCw2NTQ4NF0sXCJtYXBwZWRcIixbNDQ1N11dLFtbNjU0ODUsNjU0ODVdLFwibWFwcGVkXCIsWzQ0NThdXSxbWzY1NDg2LDY1NDg2XSxcIm1hcHBlZFwiLFs0NDU5XV0sW1s2NTQ4Nyw2NTQ4N10sXCJtYXBwZWRcIixbNDQ2MF1dLFtbNjU0ODgsNjU0ODldLFwiZGlzYWxsb3dlZFwiXSxbWzY1NDkwLDY1NDkwXSxcIm1hcHBlZFwiLFs0NDYxXV0sW1s2NTQ5MSw2NTQ5MV0sXCJtYXBwZWRcIixbNDQ2Ml1dLFtbNjU0OTIsNjU0OTJdLFwibWFwcGVkXCIsWzQ0NjNdXSxbWzY1NDkzLDY1NDkzXSxcIm1hcHBlZFwiLFs0NDY0XV0sW1s2NTQ5NCw2NTQ5NF0sXCJtYXBwZWRcIixbNDQ2NV1dLFtbNjU0OTUsNjU0OTVdLFwibWFwcGVkXCIsWzQ0NjZdXSxbWzY1NDk2LDY1NDk3XSxcImRpc2FsbG93ZWRcIl0sW1s2NTQ5OCw2NTQ5OF0sXCJtYXBwZWRcIixbNDQ2N11dLFtbNjU0OTksNjU0OTldLFwibWFwcGVkXCIsWzQ0NjhdXSxbWzY1NTAwLDY1NTAwXSxcIm1hcHBlZFwiLFs0NDY5XV0sW1s2NTUwMSw2NTUwM10sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MDQsNjU1MDRdLFwibWFwcGVkXCIsWzE2Ml1dLFtbNjU1MDUsNjU1MDVdLFwibWFwcGVkXCIsWzE2M11dLFtbNjU1MDYsNjU1MDZdLFwibWFwcGVkXCIsWzE3Ml1dLFtbNjU1MDcsNjU1MDddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzJdXSxbWzY1NTA4LDY1NTA4XSxcIm1hcHBlZFwiLFsxNjZdXSxbWzY1NTA5LDY1NTA5XSxcIm1hcHBlZFwiLFsxNjVdXSxbWzY1NTEwLDY1NTEwXSxcIm1hcHBlZFwiLFs4MzYxXV0sW1s2NTUxMSw2NTUxMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MTIsNjU1MTJdLFwibWFwcGVkXCIsWzk0NzRdXSxbWzY1NTEzLDY1NTEzXSxcIm1hcHBlZFwiLFs4NTkyXV0sW1s2NTUxNCw2NTUxNF0sXCJtYXBwZWRcIixbODU5M11dLFtbNjU1MTUsNjU1MTVdLFwibWFwcGVkXCIsWzg1OTRdXSxbWzY1NTE2LDY1NTE2XSxcIm1hcHBlZFwiLFs4NTk1XV0sW1s2NTUxNyw2NTUxN10sXCJtYXBwZWRcIixbOTYzMl1dLFtbNjU1MTgsNjU1MThdLFwibWFwcGVkXCIsWzk2NzVdXSxbWzY1NTE5LDY1NTI4XSxcImRpc2FsbG93ZWRcIl0sW1s2NTUyOSw2NTUzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MzIsNjU1MzJdLFwiZGlzYWxsb3dlZFwiXSxbWzY1NTMzLDY1NTMzXSxcImRpc2FsbG93ZWRcIl0sW1s2NTUzNCw2NTUzNV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MzYsNjU1NDddLFwidmFsaWRcIl0sW1s2NTU0OCw2NTU0OF0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1NDksNjU1NzRdLFwidmFsaWRcIl0sW1s2NTU3NSw2NTU3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1NzYsNjU1OTRdLFwidmFsaWRcIl0sW1s2NTU5NSw2NTU5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1OTYsNjU1OTddLFwidmFsaWRcIl0sW1s2NTU5OCw2NTU5OF0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1OTksNjU2MTNdLFwidmFsaWRcIl0sW1s2NTYxNCw2NTYxNV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU2MTYsNjU2MjldLFwidmFsaWRcIl0sW1s2NTYzMCw2NTY2M10sXCJkaXNhbGxvd2VkXCJdLFtbNjU2NjQsNjU3ODZdLFwidmFsaWRcIl0sW1s2NTc4Nyw2NTc5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU3OTIsNjU3OTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY1Nzk1LDY1Nzk4XSxcImRpc2FsbG93ZWRcIl0sW1s2NTc5OSw2NTg0M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjU4NDQsNjU4NDZdLFwiZGlzYWxsb3dlZFwiXSxbWzY1ODQ3LDY1ODU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NTg1Niw2NTkzMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjU5MzEsNjU5MzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY1OTMzLDY1OTM1XSxcImRpc2FsbG93ZWRcIl0sW1s2NTkzNiw2NTk0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjU5NDgsNjU5NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY1OTUyLDY1OTUyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NTk1Myw2NTk5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjYwMDAsNjYwNDRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2MDQ1LDY2MDQ1XSxcInZhbGlkXCJdLFtbNjYwNDYsNjYxNzVdLFwiZGlzYWxsb3dlZFwiXSxbWzY2MTc2LDY2MjA0XSxcInZhbGlkXCJdLFtbNjYyMDUsNjYyMDddLFwiZGlzYWxsb3dlZFwiXSxbWzY2MjA4LDY2MjU2XSxcInZhbGlkXCJdLFtbNjYyNTcsNjYyNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzY2MjcyLDY2MjcyXSxcInZhbGlkXCJdLFtbNjYyNzMsNjYyOTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2MzAwLDY2MzAzXSxcImRpc2FsbG93ZWRcIl0sW1s2NjMwNCw2NjMzNF0sXCJ2YWxpZFwiXSxbWzY2MzM1LDY2MzM1XSxcInZhbGlkXCJdLFtbNjYzMzYsNjYzMzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2MzQwLDY2MzUxXSxcImRpc2FsbG93ZWRcIl0sW1s2NjM1Miw2NjM2OF0sXCJ2YWxpZFwiXSxbWzY2MzY5LDY2MzY5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NjM3MCw2NjM3N10sXCJ2YWxpZFwiXSxbWzY2Mzc4LDY2Mzc4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NjM3OSw2NjM4M10sXCJkaXNhbGxvd2VkXCJdLFtbNjYzODQsNjY0MjZdLFwidmFsaWRcIl0sW1s2NjQyNyw2NjQzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjY0MzIsNjY0NjFdLFwidmFsaWRcIl0sW1s2NjQ2Miw2NjQ2Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNjY0NjMsNjY0NjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2NDY0LDY2NDk5XSxcInZhbGlkXCJdLFtbNjY1MDAsNjY1MDNdLFwiZGlzYWxsb3dlZFwiXSxbWzY2NTA0LDY2NTExXSxcInZhbGlkXCJdLFtbNjY1MTIsNjY1MTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2NTE4LDY2NTU5XSxcImRpc2FsbG93ZWRcIl0sW1s2NjU2MCw2NjU2MF0sXCJtYXBwZWRcIixbNjY2MDBdXSxbWzY2NTYxLDY2NTYxXSxcIm1hcHBlZFwiLFs2NjYwMV1dLFtbNjY1NjIsNjY1NjJdLFwibWFwcGVkXCIsWzY2NjAyXV0sW1s2NjU2Myw2NjU2M10sXCJtYXBwZWRcIixbNjY2MDNdXSxbWzY2NTY0LDY2NTY0XSxcIm1hcHBlZFwiLFs2NjYwNF1dLFtbNjY1NjUsNjY1NjVdLFwibWFwcGVkXCIsWzY2NjA1XV0sW1s2NjU2Niw2NjU2Nl0sXCJtYXBwZWRcIixbNjY2MDZdXSxbWzY2NTY3LDY2NTY3XSxcIm1hcHBlZFwiLFs2NjYwN11dLFtbNjY1NjgsNjY1NjhdLFwibWFwcGVkXCIsWzY2NjA4XV0sW1s2NjU2OSw2NjU2OV0sXCJtYXBwZWRcIixbNjY2MDldXSxbWzY2NTcwLDY2NTcwXSxcIm1hcHBlZFwiLFs2NjYxMF1dLFtbNjY1NzEsNjY1NzFdLFwibWFwcGVkXCIsWzY2NjExXV0sW1s2NjU3Miw2NjU3Ml0sXCJtYXBwZWRcIixbNjY2MTJdXSxbWzY2NTczLDY2NTczXSxcIm1hcHBlZFwiLFs2NjYxM11dLFtbNjY1NzQsNjY1NzRdLFwibWFwcGVkXCIsWzY2NjE0XV0sW1s2NjU3NSw2NjU3NV0sXCJtYXBwZWRcIixbNjY2MTVdXSxbWzY2NTc2LDY2NTc2XSxcIm1hcHBlZFwiLFs2NjYxNl1dLFtbNjY1NzcsNjY1NzddLFwibWFwcGVkXCIsWzY2NjE3XV0sW1s2NjU3OCw2NjU3OF0sXCJtYXBwZWRcIixbNjY2MThdXSxbWzY2NTc5LDY2NTc5XSxcIm1hcHBlZFwiLFs2NjYxOV1dLFtbNjY1ODAsNjY1ODBdLFwibWFwcGVkXCIsWzY2NjIwXV0sW1s2NjU4MSw2NjU4MV0sXCJtYXBwZWRcIixbNjY2MjFdXSxbWzY2NTgyLDY2NTgyXSxcIm1hcHBlZFwiLFs2NjYyMl1dLFtbNjY1ODMsNjY1ODNdLFwibWFwcGVkXCIsWzY2NjIzXV0sW1s2NjU4NCw2NjU4NF0sXCJtYXBwZWRcIixbNjY2MjRdXSxbWzY2NTg1LDY2NTg1XSxcIm1hcHBlZFwiLFs2NjYyNV1dLFtbNjY1ODYsNjY1ODZdLFwibWFwcGVkXCIsWzY2NjI2XV0sW1s2NjU4Nyw2NjU4N10sXCJtYXBwZWRcIixbNjY2MjddXSxbWzY2NTg4LDY2NTg4XSxcIm1hcHBlZFwiLFs2NjYyOF1dLFtbNjY1ODksNjY1ODldLFwibWFwcGVkXCIsWzY2NjI5XV0sW1s2NjU5MCw2NjU5MF0sXCJtYXBwZWRcIixbNjY2MzBdXSxbWzY2NTkxLDY2NTkxXSxcIm1hcHBlZFwiLFs2NjYzMV1dLFtbNjY1OTIsNjY1OTJdLFwibWFwcGVkXCIsWzY2NjMyXV0sW1s2NjU5Myw2NjU5M10sXCJtYXBwZWRcIixbNjY2MzNdXSxbWzY2NTk0LDY2NTk0XSxcIm1hcHBlZFwiLFs2NjYzNF1dLFtbNjY1OTUsNjY1OTVdLFwibWFwcGVkXCIsWzY2NjM1XV0sW1s2NjU5Niw2NjU5Nl0sXCJtYXBwZWRcIixbNjY2MzZdXSxbWzY2NTk3LDY2NTk3XSxcIm1hcHBlZFwiLFs2NjYzN11dLFtbNjY1OTgsNjY1OThdLFwibWFwcGVkXCIsWzY2NjM4XV0sW1s2NjU5OSw2NjU5OV0sXCJtYXBwZWRcIixbNjY2MzldXSxbWzY2NjAwLDY2NjM3XSxcInZhbGlkXCJdLFtbNjY2MzgsNjY3MTddLFwidmFsaWRcIl0sW1s2NjcxOCw2NjcxOV0sXCJkaXNhbGxvd2VkXCJdLFtbNjY3MjAsNjY3MjldLFwidmFsaWRcIl0sW1s2NjczMCw2NjgxNV0sXCJkaXNhbGxvd2VkXCJdLFtbNjY4MTYsNjY4NTVdLFwidmFsaWRcIl0sW1s2Njg1Niw2Njg2M10sXCJkaXNhbGxvd2VkXCJdLFtbNjY4NjQsNjY5MTVdLFwidmFsaWRcIl0sW1s2NjkxNiw2NjkyNl0sXCJkaXNhbGxvd2VkXCJdLFtbNjY5MjcsNjY5MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2OTI4LDY3MDcxXSxcImRpc2FsbG93ZWRcIl0sW1s2NzA3Miw2NzM4Ml0sXCJ2YWxpZFwiXSxbWzY3MzgzLDY3MzkxXSxcImRpc2FsbG93ZWRcIl0sW1s2NzM5Miw2NzQxM10sXCJ2YWxpZFwiXSxbWzY3NDE0LDY3NDIzXSxcImRpc2FsbG93ZWRcIl0sW1s2NzQyNCw2NzQzMV0sXCJ2YWxpZFwiXSxbWzY3NDMyLDY3NTgzXSxcImRpc2FsbG93ZWRcIl0sW1s2NzU4NCw2NzU4OV0sXCJ2YWxpZFwiXSxbWzY3NTkwLDY3NTkxXSxcImRpc2FsbG93ZWRcIl0sW1s2NzU5Miw2NzU5Ml0sXCJ2YWxpZFwiXSxbWzY3NTkzLDY3NTkzXSxcImRpc2FsbG93ZWRcIl0sW1s2NzU5NCw2NzYzN10sXCJ2YWxpZFwiXSxbWzY3NjM4LDY3NjM4XSxcImRpc2FsbG93ZWRcIl0sW1s2NzYzOSw2NzY0MF0sXCJ2YWxpZFwiXSxbWzY3NjQxLDY3NjQzXSxcImRpc2FsbG93ZWRcIl0sW1s2NzY0NCw2NzY0NF0sXCJ2YWxpZFwiXSxbWzY3NjQ1LDY3NjQ2XSxcImRpc2FsbG93ZWRcIl0sW1s2NzY0Nyw2NzY0N10sXCJ2YWxpZFwiXSxbWzY3NjQ4LDY3NjY5XSxcInZhbGlkXCJdLFtbNjc2NzAsNjc2NzBdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NjcxLDY3Njc5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NzY4MCw2NzcwMl0sXCJ2YWxpZFwiXSxbWzY3NzAzLDY3NzExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NzcxMiw2Nzc0Ml0sXCJ2YWxpZFwiXSxbWzY3NzQzLDY3NzUwXSxcImRpc2FsbG93ZWRcIl0sW1s2Nzc1MSw2Nzc1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjc3NjAsNjc4MDddLFwiZGlzYWxsb3dlZFwiXSxbWzY3ODA4LDY3ODI2XSxcInZhbGlkXCJdLFtbNjc4MjcsNjc4MjddLFwiZGlzYWxsb3dlZFwiXSxbWzY3ODI4LDY3ODI5XSxcInZhbGlkXCJdLFtbNjc4MzAsNjc4MzRdLFwiZGlzYWxsb3dlZFwiXSxbWzY3ODM1LDY3ODM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Nzg0MCw2Nzg2MV0sXCJ2YWxpZFwiXSxbWzY3ODYyLDY3ODY1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Nzg2Niw2Nzg2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjc4NjgsNjc4NzBdLFwiZGlzYWxsb3dlZFwiXSxbWzY3ODcxLDY3ODcxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Nzg3Miw2Nzg5N10sXCJ2YWxpZFwiXSxbWzY3ODk4LDY3OTAyXSxcImRpc2FsbG93ZWRcIl0sW1s2NzkwMyw2NzkwM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjc5MDQsNjc5NjddLFwiZGlzYWxsb3dlZFwiXSxbWzY3OTY4LDY4MDIzXSxcInZhbGlkXCJdLFtbNjgwMjQsNjgwMjddLFwiZGlzYWxsb3dlZFwiXSxbWzY4MDI4LDY4MDI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODAzMCw2ODAzMV0sXCJ2YWxpZFwiXSxbWzY4MDMyLDY4MDQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODA0OCw2ODA0OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjgwNTAsNjgwOTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MDk2LDY4MDk5XSxcInZhbGlkXCJdLFtbNjgxMDAsNjgxMDBdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTAxLDY4MTAyXSxcInZhbGlkXCJdLFtbNjgxMDMsNjgxMDddLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTA4LDY4MTE1XSxcInZhbGlkXCJdLFtbNjgxMTYsNjgxMTZdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTE3LDY4MTE5XSxcInZhbGlkXCJdLFtbNjgxMjAsNjgxMjBdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTIxLDY4MTQ3XSxcInZhbGlkXCJdLFtbNjgxNDgsNjgxNTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTUyLDY4MTU0XSxcInZhbGlkXCJdLFtbNjgxNTUsNjgxNThdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTU5LDY4MTU5XSxcInZhbGlkXCJdLFtbNjgxNjAsNjgxNjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MTY4LDY4MTc1XSxcImRpc2FsbG93ZWRcIl0sW1s2ODE3Niw2ODE4NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgxODUsNjgxOTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTkyLDY4MjIwXSxcInZhbGlkXCJdLFtbNjgyMjEsNjgyMjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MjI0LDY4MjUyXSxcInZhbGlkXCJdLFtbNjgyNTMsNjgyNTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MjU2LDY4Mjg3XSxcImRpc2FsbG93ZWRcIl0sW1s2ODI4OCw2ODI5NV0sXCJ2YWxpZFwiXSxbWzY4Mjk2LDY4Mjk2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODI5Nyw2ODMyNl0sXCJ2YWxpZFwiXSxbWzY4MzI3LDY4MzMwXSxcImRpc2FsbG93ZWRcIl0sW1s2ODMzMSw2ODM0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgzNDMsNjgzNTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MzUyLDY4NDA1XSxcInZhbGlkXCJdLFtbNjg0MDYsNjg0MDhdLFwiZGlzYWxsb3dlZFwiXSxbWzY4NDA5LDY4NDE1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODQxNiw2ODQzN10sXCJ2YWxpZFwiXSxbWzY4NDM4LDY4NDM5XSxcImRpc2FsbG93ZWRcIl0sW1s2ODQ0MCw2ODQ0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjg0NDgsNjg0NjZdLFwidmFsaWRcIl0sW1s2ODQ2Nyw2ODQ3MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjg0NzIsNjg0NzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4NDgwLDY4NDk3XSxcInZhbGlkXCJdLFtbNjg0OTgsNjg1MDRdLFwiZGlzYWxsb3dlZFwiXSxbWzY4NTA1LDY4NTA4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODUwOSw2ODUyMF0sXCJkaXNhbGxvd2VkXCJdLFtbNjg1MjEsNjg1MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4NTI4LDY4NjA3XSxcImRpc2FsbG93ZWRcIl0sW1s2ODYwOCw2ODY4MF0sXCJ2YWxpZFwiXSxbWzY4NjgxLDY4NzM1XSxcImRpc2FsbG93ZWRcIl0sW1s2ODczNiw2ODczNl0sXCJtYXBwZWRcIixbNjg4MDBdXSxbWzY4NzM3LDY4NzM3XSxcIm1hcHBlZFwiLFs2ODgwMV1dLFtbNjg3MzgsNjg3MzhdLFwibWFwcGVkXCIsWzY4ODAyXV0sW1s2ODczOSw2ODczOV0sXCJtYXBwZWRcIixbNjg4MDNdXSxbWzY4NzQwLDY4NzQwXSxcIm1hcHBlZFwiLFs2ODgwNF1dLFtbNjg3NDEsNjg3NDFdLFwibWFwcGVkXCIsWzY4ODA1XV0sW1s2ODc0Miw2ODc0Ml0sXCJtYXBwZWRcIixbNjg4MDZdXSxbWzY4NzQzLDY4NzQzXSxcIm1hcHBlZFwiLFs2ODgwN11dLFtbNjg3NDQsNjg3NDRdLFwibWFwcGVkXCIsWzY4ODA4XV0sW1s2ODc0NSw2ODc0NV0sXCJtYXBwZWRcIixbNjg4MDldXSxbWzY4NzQ2LDY4NzQ2XSxcIm1hcHBlZFwiLFs2ODgxMF1dLFtbNjg3NDcsNjg3NDddLFwibWFwcGVkXCIsWzY4ODExXV0sW1s2ODc0OCw2ODc0OF0sXCJtYXBwZWRcIixbNjg4MTJdXSxbWzY4NzQ5LDY4NzQ5XSxcIm1hcHBlZFwiLFs2ODgxM11dLFtbNjg3NTAsNjg3NTBdLFwibWFwcGVkXCIsWzY4ODE0XV0sW1s2ODc1MSw2ODc1MV0sXCJtYXBwZWRcIixbNjg4MTVdXSxbWzY4NzUyLDY4NzUyXSxcIm1hcHBlZFwiLFs2ODgxNl1dLFtbNjg3NTMsNjg3NTNdLFwibWFwcGVkXCIsWzY4ODE3XV0sW1s2ODc1NCw2ODc1NF0sXCJtYXBwZWRcIixbNjg4MThdXSxbWzY4NzU1LDY4NzU1XSxcIm1hcHBlZFwiLFs2ODgxOV1dLFtbNjg3NTYsNjg3NTZdLFwibWFwcGVkXCIsWzY4ODIwXV0sW1s2ODc1Nyw2ODc1N10sXCJtYXBwZWRcIixbNjg4MjFdXSxbWzY4NzU4LDY4NzU4XSxcIm1hcHBlZFwiLFs2ODgyMl1dLFtbNjg3NTksNjg3NTldLFwibWFwcGVkXCIsWzY4ODIzXV0sW1s2ODc2MCw2ODc2MF0sXCJtYXBwZWRcIixbNjg4MjRdXSxbWzY4NzYxLDY4NzYxXSxcIm1hcHBlZFwiLFs2ODgyNV1dLFtbNjg3NjIsNjg3NjJdLFwibWFwcGVkXCIsWzY4ODI2XV0sW1s2ODc2Myw2ODc2M10sXCJtYXBwZWRcIixbNjg4MjddXSxbWzY4NzY0LDY4NzY0XSxcIm1hcHBlZFwiLFs2ODgyOF1dLFtbNjg3NjUsNjg3NjVdLFwibWFwcGVkXCIsWzY4ODI5XV0sW1s2ODc2Niw2ODc2Nl0sXCJtYXBwZWRcIixbNjg4MzBdXSxbWzY4NzY3LDY4NzY3XSxcIm1hcHBlZFwiLFs2ODgzMV1dLFtbNjg3NjgsNjg3NjhdLFwibWFwcGVkXCIsWzY4ODMyXV0sW1s2ODc2OSw2ODc2OV0sXCJtYXBwZWRcIixbNjg4MzNdXSxbWzY4NzcwLDY4NzcwXSxcIm1hcHBlZFwiLFs2ODgzNF1dLFtbNjg3NzEsNjg3NzFdLFwibWFwcGVkXCIsWzY4ODM1XV0sW1s2ODc3Miw2ODc3Ml0sXCJtYXBwZWRcIixbNjg4MzZdXSxbWzY4NzczLDY4NzczXSxcIm1hcHBlZFwiLFs2ODgzN11dLFtbNjg3NzQsNjg3NzRdLFwibWFwcGVkXCIsWzY4ODM4XV0sW1s2ODc3NSw2ODc3NV0sXCJtYXBwZWRcIixbNjg4MzldXSxbWzY4Nzc2LDY4Nzc2XSxcIm1hcHBlZFwiLFs2ODg0MF1dLFtbNjg3NzcsNjg3NzddLFwibWFwcGVkXCIsWzY4ODQxXV0sW1s2ODc3OCw2ODc3OF0sXCJtYXBwZWRcIixbNjg4NDJdXSxbWzY4Nzc5LDY4Nzc5XSxcIm1hcHBlZFwiLFs2ODg0M11dLFtbNjg3ODAsNjg3ODBdLFwibWFwcGVkXCIsWzY4ODQ0XV0sW1s2ODc4MSw2ODc4MV0sXCJtYXBwZWRcIixbNjg4NDVdXSxbWzY4NzgyLDY4NzgyXSxcIm1hcHBlZFwiLFs2ODg0Nl1dLFtbNjg3ODMsNjg3ODNdLFwibWFwcGVkXCIsWzY4ODQ3XV0sW1s2ODc4NCw2ODc4NF0sXCJtYXBwZWRcIixbNjg4NDhdXSxbWzY4Nzg1LDY4Nzg1XSxcIm1hcHBlZFwiLFs2ODg0OV1dLFtbNjg3ODYsNjg3ODZdLFwibWFwcGVkXCIsWzY4ODUwXV0sW1s2ODc4Nyw2ODc5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjg4MDAsNjg4NTBdLFwidmFsaWRcIl0sW1s2ODg1MSw2ODg1N10sXCJkaXNhbGxvd2VkXCJdLFtbNjg4NTgsNjg4NjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4ODY0LDY5MjE1XSxcImRpc2FsbG93ZWRcIl0sW1s2OTIxNiw2OTI0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjkyNDcsNjk2MzFdLFwiZGlzYWxsb3dlZFwiXSxbWzY5NjMyLDY5NzAyXSxcInZhbGlkXCJdLFtbNjk3MDMsNjk3MDldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY5NzEwLDY5NzEzXSxcImRpc2FsbG93ZWRcIl0sW1s2OTcxNCw2OTczM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjk3MzQsNjk3NDNdLFwidmFsaWRcIl0sW1s2OTc0NCw2OTc1OF0sXCJkaXNhbGxvd2VkXCJdLFtbNjk3NTksNjk3NTldLFwidmFsaWRcIl0sW1s2OTc2MCw2OTgxOF0sXCJ2YWxpZFwiXSxbWzY5ODE5LDY5ODIwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2OTgyMSw2OTgyMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjk4MjIsNjk4MjVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY5ODI2LDY5ODM5XSxcImRpc2FsbG93ZWRcIl0sW1s2OTg0MCw2OTg2NF0sXCJ2YWxpZFwiXSxbWzY5ODY1LDY5ODcxXSxcImRpc2FsbG93ZWRcIl0sW1s2OTg3Miw2OTg4MV0sXCJ2YWxpZFwiXSxbWzY5ODgyLDY5ODg3XSxcImRpc2FsbG93ZWRcIl0sW1s2OTg4OCw2OTk0MF0sXCJ2YWxpZFwiXSxbWzY5OTQxLDY5OTQxXSxcImRpc2FsbG93ZWRcIl0sW1s2OTk0Miw2OTk1MV0sXCJ2YWxpZFwiXSxbWzY5OTUyLDY5OTU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2OTk1Niw2OTk2N10sXCJkaXNhbGxvd2VkXCJdLFtbNjk5NjgsNzAwMDNdLFwidmFsaWRcIl0sW1s3MDAwNCw3MDAwNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAwMDYsNzAwMDZdLFwidmFsaWRcIl0sW1s3MDAwNyw3MDAxNV0sXCJkaXNhbGxvd2VkXCJdLFtbNzAwMTYsNzAwODRdLFwidmFsaWRcIl0sW1s3MDA4NSw3MDA4OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAwODksNzAwODldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMDkwLDcwMDkyXSxcInZhbGlkXCJdLFtbNzAwOTMsNzAwOTNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMDk0LDcwMDk1XSxcImRpc2FsbG93ZWRcIl0sW1s3MDA5Niw3MDEwNV0sXCJ2YWxpZFwiXSxbWzcwMTA2LDcwMTA2XSxcInZhbGlkXCJdLFtbNzAxMDcsNzAxMDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMTA4LDcwMTA4XSxcInZhbGlkXCJdLFtbNzAxMDksNzAxMTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMTEyLDcwMTEyXSxcImRpc2FsbG93ZWRcIl0sW1s3MDExMyw3MDEzMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAxMzMsNzAxNDNdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMTQ0LDcwMTYxXSxcInZhbGlkXCJdLFtbNzAxNjIsNzAxNjJdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMTYzLDcwMTk5XSxcInZhbGlkXCJdLFtbNzAyMDAsNzAyMDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMjA2LDcwMjcxXSxcImRpc2FsbG93ZWRcIl0sW1s3MDI3Miw3MDI3OF0sXCJ2YWxpZFwiXSxbWzcwMjc5LDcwMjc5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDI4MCw3MDI4MF0sXCJ2YWxpZFwiXSxbWzcwMjgxLDcwMjgxXSxcImRpc2FsbG93ZWRcIl0sW1s3MDI4Miw3MDI4NV0sXCJ2YWxpZFwiXSxbWzcwMjg2LDcwMjg2XSxcImRpc2FsbG93ZWRcIl0sW1s3MDI4Nyw3MDMwMV0sXCJ2YWxpZFwiXSxbWzcwMzAyLDcwMzAyXSxcImRpc2FsbG93ZWRcIl0sW1s3MDMwMyw3MDMxMl0sXCJ2YWxpZFwiXSxbWzcwMzEzLDcwMzEzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDMxNCw3MDMxOV0sXCJkaXNhbGxvd2VkXCJdLFtbNzAzMjAsNzAzNzhdLFwidmFsaWRcIl0sW1s3MDM3OSw3MDM4M10sXCJkaXNhbGxvd2VkXCJdLFtbNzAzODQsNzAzOTNdLFwidmFsaWRcIl0sW1s3MDM5NCw3MDM5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNzA0MDAsNzA0MDBdLFwidmFsaWRcIl0sW1s3MDQwMSw3MDQwM10sXCJ2YWxpZFwiXSxbWzcwNDA0LDcwNDA0XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQwNSw3MDQxMl0sXCJ2YWxpZFwiXSxbWzcwNDEzLDcwNDE0XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQxNSw3MDQxNl0sXCJ2YWxpZFwiXSxbWzcwNDE3LDcwNDE4XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQxOSw3MDQ0MF0sXCJ2YWxpZFwiXSxbWzcwNDQxLDcwNDQxXSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ0Miw3MDQ0OF0sXCJ2YWxpZFwiXSxbWzcwNDQ5LDcwNDQ5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ1MCw3MDQ1MV0sXCJ2YWxpZFwiXSxbWzcwNDUyLDcwNDUyXSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ1Myw3MDQ1N10sXCJ2YWxpZFwiXSxbWzcwNDU4LDcwNDU5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ2MCw3MDQ2OF0sXCJ2YWxpZFwiXSxbWzcwNDY5LDcwNDcwXSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ3MSw3MDQ3Ml0sXCJ2YWxpZFwiXSxbWzcwNDczLDcwNDc0XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ3NSw3MDQ3N10sXCJ2YWxpZFwiXSxbWzcwNDc4LDcwNDc5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ4MCw3MDQ4MF0sXCJ2YWxpZFwiXSxbWzcwNDgxLDcwNDg2XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ4Nyw3MDQ4N10sXCJ2YWxpZFwiXSxbWzcwNDg4LDcwNDkyXSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ5Myw3MDQ5OV0sXCJ2YWxpZFwiXSxbWzcwNTAwLDcwNTAxXSxcImRpc2FsbG93ZWRcIl0sW1s3MDUwMiw3MDUwOF0sXCJ2YWxpZFwiXSxbWzcwNTA5LDcwNTExXSxcImRpc2FsbG93ZWRcIl0sW1s3MDUxMiw3MDUxNl0sXCJ2YWxpZFwiXSxbWzcwNTE3LDcwNzgzXSxcImRpc2FsbG93ZWRcIl0sW1s3MDc4NCw3MDg1M10sXCJ2YWxpZFwiXSxbWzcwODU0LDcwODU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDg1NSw3MDg1NV0sXCJ2YWxpZFwiXSxbWzcwODU2LDcwODYzXSxcImRpc2FsbG93ZWRcIl0sW1s3MDg2NCw3MDg3M10sXCJ2YWxpZFwiXSxbWzcwODc0LDcxMDM5XSxcImRpc2FsbG93ZWRcIl0sW1s3MTA0MCw3MTA5M10sXCJ2YWxpZFwiXSxbWzcxMDk0LDcxMDk1XSxcImRpc2FsbG93ZWRcIl0sW1s3MTA5Niw3MTEwNF0sXCJ2YWxpZFwiXSxbWzcxMTA1LDcxMTEzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTExNCw3MTEyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzExMjgsNzExMzNdLFwidmFsaWRcIl0sW1s3MTEzNCw3MTE2N10sXCJkaXNhbGxvd2VkXCJdLFtbNzExNjgsNzEyMzJdLFwidmFsaWRcIl0sW1s3MTIzMyw3MTIzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzEyMzYsNzEyMzZdLFwidmFsaWRcIl0sW1s3MTIzNyw3MTI0N10sXCJkaXNhbGxvd2VkXCJdLFtbNzEyNDgsNzEyNTddLFwidmFsaWRcIl0sW1s3MTI1OCw3MTI5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNzEyOTYsNzEzNTFdLFwidmFsaWRcIl0sW1s3MTM1Miw3MTM1OV0sXCJkaXNhbGxvd2VkXCJdLFtbNzEzNjAsNzEzNjldLFwidmFsaWRcIl0sW1s3MTM3MCw3MTQyM10sXCJkaXNhbGxvd2VkXCJdLFtbNzE0MjQsNzE0NDldLFwidmFsaWRcIl0sW1s3MTQ1MCw3MTQ1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNzE0NTMsNzE0NjddLFwidmFsaWRcIl0sW1s3MTQ2OCw3MTQ3MV0sXCJkaXNhbGxvd2VkXCJdLFtbNzE0NzIsNzE0ODFdLFwidmFsaWRcIl0sW1s3MTQ4Miw3MTQ4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzE0ODgsNzE4MzldLFwiZGlzYWxsb3dlZFwiXSxbWzcxODQwLDcxODQwXSxcIm1hcHBlZFwiLFs3MTg3Ml1dLFtbNzE4NDEsNzE4NDFdLFwibWFwcGVkXCIsWzcxODczXV0sW1s3MTg0Miw3MTg0Ml0sXCJtYXBwZWRcIixbNzE4NzRdXSxbWzcxODQzLDcxODQzXSxcIm1hcHBlZFwiLFs3MTg3NV1dLFtbNzE4NDQsNzE4NDRdLFwibWFwcGVkXCIsWzcxODc2XV0sW1s3MTg0NSw3MTg0NV0sXCJtYXBwZWRcIixbNzE4NzddXSxbWzcxODQ2LDcxODQ2XSxcIm1hcHBlZFwiLFs3MTg3OF1dLFtbNzE4NDcsNzE4NDddLFwibWFwcGVkXCIsWzcxODc5XV0sW1s3MTg0OCw3MTg0OF0sXCJtYXBwZWRcIixbNzE4ODBdXSxbWzcxODQ5LDcxODQ5XSxcIm1hcHBlZFwiLFs3MTg4MV1dLFtbNzE4NTAsNzE4NTBdLFwibWFwcGVkXCIsWzcxODgyXV0sW1s3MTg1MSw3MTg1MV0sXCJtYXBwZWRcIixbNzE4ODNdXSxbWzcxODUyLDcxODUyXSxcIm1hcHBlZFwiLFs3MTg4NF1dLFtbNzE4NTMsNzE4NTNdLFwibWFwcGVkXCIsWzcxODg1XV0sW1s3MTg1NCw3MTg1NF0sXCJtYXBwZWRcIixbNzE4ODZdXSxbWzcxODU1LDcxODU1XSxcIm1hcHBlZFwiLFs3MTg4N11dLFtbNzE4NTYsNzE4NTZdLFwibWFwcGVkXCIsWzcxODg4XV0sW1s3MTg1Nyw3MTg1N10sXCJtYXBwZWRcIixbNzE4ODldXSxbWzcxODU4LDcxODU4XSxcIm1hcHBlZFwiLFs3MTg5MF1dLFtbNzE4NTksNzE4NTldLFwibWFwcGVkXCIsWzcxODkxXV0sW1s3MTg2MCw3MTg2MF0sXCJtYXBwZWRcIixbNzE4OTJdXSxbWzcxODYxLDcxODYxXSxcIm1hcHBlZFwiLFs3MTg5M11dLFtbNzE4NjIsNzE4NjJdLFwibWFwcGVkXCIsWzcxODk0XV0sW1s3MTg2Myw3MTg2M10sXCJtYXBwZWRcIixbNzE4OTVdXSxbWzcxODY0LDcxODY0XSxcIm1hcHBlZFwiLFs3MTg5Nl1dLFtbNzE4NjUsNzE4NjVdLFwibWFwcGVkXCIsWzcxODk3XV0sW1s3MTg2Niw3MTg2Nl0sXCJtYXBwZWRcIixbNzE4OThdXSxbWzcxODY3LDcxODY3XSxcIm1hcHBlZFwiLFs3MTg5OV1dLFtbNzE4NjgsNzE4NjhdLFwibWFwcGVkXCIsWzcxOTAwXV0sW1s3MTg2OSw3MTg2OV0sXCJtYXBwZWRcIixbNzE5MDFdXSxbWzcxODcwLDcxODcwXSxcIm1hcHBlZFwiLFs3MTkwMl1dLFtbNzE4NzEsNzE4NzFdLFwibWFwcGVkXCIsWzcxOTAzXV0sW1s3MTg3Miw3MTkxM10sXCJ2YWxpZFwiXSxbWzcxOTE0LDcxOTIyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTkyMyw3MTkzNF0sXCJkaXNhbGxvd2VkXCJdLFtbNzE5MzUsNzE5MzVdLFwidmFsaWRcIl0sW1s3MTkzNiw3MjM4M10sXCJkaXNhbGxvd2VkXCJdLFtbNzIzODQsNzI0NDBdLFwidmFsaWRcIl0sW1s3MjQ0MSw3MzcyN10sXCJkaXNhbGxvd2VkXCJdLFtbNzM3MjgsNzQ2MDZdLFwidmFsaWRcIl0sW1s3NDYwNyw3NDY0OF0sXCJ2YWxpZFwiXSxbWzc0NjQ5LDc0NjQ5XSxcInZhbGlkXCJdLFtbNzQ2NTAsNzQ3NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzc0NzUyLDc0ODUwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDg1MSw3NDg2Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzQ4NjMsNzQ4NjNdLFwiZGlzYWxsb3dlZFwiXSxbWzc0ODY0LDc0ODY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDg2OCw3NDg2OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzQ4NjksNzQ4NzldLFwiZGlzYWxsb3dlZFwiXSxbWzc0ODgwLDc1MDc1XSxcInZhbGlkXCJdLFtbNzUwNzYsNzc4MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzc3ODI0LDc4ODk0XSxcInZhbGlkXCJdLFtbNzg4OTUsODI5NDNdLFwiZGlzYWxsb3dlZFwiXSxbWzgyOTQ0LDgzNTI2XSxcInZhbGlkXCJdLFtbODM1MjcsOTIxNTldLFwiZGlzYWxsb3dlZFwiXSxbWzkyMTYwLDkyNzI4XSxcInZhbGlkXCJdLFtbOTI3MjksOTI3MzVdLFwiZGlzYWxsb3dlZFwiXSxbWzkyNzM2LDkyNzY2XSxcInZhbGlkXCJdLFtbOTI3NjcsOTI3NjddLFwiZGlzYWxsb3dlZFwiXSxbWzkyNzY4LDkyNzc3XSxcInZhbGlkXCJdLFtbOTI3NzgsOTI3ODFdLFwiZGlzYWxsb3dlZFwiXSxbWzkyNzgyLDkyNzgzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5Mjc4NCw5Mjg3OV0sXCJkaXNhbGxvd2VkXCJdLFtbOTI4ODAsOTI5MDldLFwidmFsaWRcIl0sW1s5MjkxMCw5MjkxMV0sXCJkaXNhbGxvd2VkXCJdLFtbOTI5MTIsOTI5MTZdLFwidmFsaWRcIl0sW1s5MjkxNyw5MjkxN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTI5MTgsOTI5MjddLFwiZGlzYWxsb3dlZFwiXSxbWzkyOTI4LDkyOTgyXSxcInZhbGlkXCJdLFtbOTI5ODMsOTI5OTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyOTkyLDkyOTk1XSxcInZhbGlkXCJdLFtbOTI5OTYsOTI5OTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyOTk4LDkzMDA3XSxcImRpc2FsbG93ZWRcIl0sW1s5MzAwOCw5MzAxN10sXCJ2YWxpZFwiXSxbWzkzMDE4LDkzMDE4XSxcImRpc2FsbG93ZWRcIl0sW1s5MzAxOSw5MzAyNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTMwMjYsOTMwMjZdLFwiZGlzYWxsb3dlZFwiXSxbWzkzMDI3LDkzMDQ3XSxcInZhbGlkXCJdLFtbOTMwNDgsOTMwNTJdLFwiZGlzYWxsb3dlZFwiXSxbWzkzMDUzLDkzMDcxXSxcInZhbGlkXCJdLFtbOTMwNzIsOTM5NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzkzOTUyLDk0MDIwXSxcInZhbGlkXCJdLFtbOTQwMjEsOTQwMzFdLFwiZGlzYWxsb3dlZFwiXSxbWzk0MDMyLDk0MDc4XSxcInZhbGlkXCJdLFtbOTQwNzksOTQwOTRdLFwiZGlzYWxsb3dlZFwiXSxbWzk0MDk1LDk0MTExXSxcInZhbGlkXCJdLFtbOTQxMTIsMTEwNTkxXSxcImRpc2FsbG93ZWRcIl0sW1sxMTA1OTIsMTEwNTkzXSxcInZhbGlkXCJdLFtbMTEwNTk0LDExMzY2M10sXCJkaXNhbGxvd2VkXCJdLFtbMTEzNjY0LDExMzc3MF0sXCJ2YWxpZFwiXSxbWzExMzc3MSwxMTM3NzVdLFwiZGlzYWxsb3dlZFwiXSxbWzExMzc3NiwxMTM3ODhdLFwidmFsaWRcIl0sW1sxMTM3ODksMTEzNzkxXSxcImRpc2FsbG93ZWRcIl0sW1sxMTM3OTIsMTEzODAwXSxcInZhbGlkXCJdLFtbMTEzODAxLDExMzgwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTEzODA4LDExMzgxN10sXCJ2YWxpZFwiXSxbWzExMzgxOCwxMTM4MTldLFwiZGlzYWxsb3dlZFwiXSxbWzExMzgyMCwxMTM4MjBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMzgyMSwxMTM4MjJdLFwidmFsaWRcIl0sW1sxMTM4MjMsMTEzODIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTM4MjQsMTEzODI3XSxcImlnbm9yZWRcIl0sW1sxMTM4MjgsMTE4NzgzXSxcImRpc2FsbG93ZWRcIl0sW1sxMTg3ODQsMTE5MDI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkwMzAsMTE5MDM5XSxcImRpc2FsbG93ZWRcIl0sW1sxMTkwNDAsMTE5MDc4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkwNzksMTE5MDgwXSxcImRpc2FsbG93ZWRcIl0sW1sxMTkwODEsMTE5MDgxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkwODIsMTE5MTMzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkxMzQsMTE5MTM0XSxcIm1hcHBlZFwiLFsxMTkxMjcsMTE5MTQxXV0sW1sxMTkxMzUsMTE5MTM1XSxcIm1hcHBlZFwiLFsxMTkxMjgsMTE5MTQxXV0sW1sxMTkxMzYsMTE5MTM2XSxcIm1hcHBlZFwiLFsxMTkxMjgsMTE5MTQxLDExOTE1MF1dLFtbMTE5MTM3LDExOTEzN10sXCJtYXBwZWRcIixbMTE5MTI4LDExOTE0MSwxMTkxNTFdXSxbWzExOTEzOCwxMTkxMzhdLFwibWFwcGVkXCIsWzExOTEyOCwxMTkxNDEsMTE5MTUyXV0sW1sxMTkxMzksMTE5MTM5XSxcIm1hcHBlZFwiLFsxMTkxMjgsMTE5MTQxLDExOTE1M11dLFtbMTE5MTQwLDExOTE0MF0sXCJtYXBwZWRcIixbMTE5MTI4LDExOTE0MSwxMTkxNTRdXSxbWzExOTE0MSwxMTkxNTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTE1NSwxMTkxNjJdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTE2MywxMTkyMjZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTIyNywxMTkyMjddLFwibWFwcGVkXCIsWzExOTIyNSwxMTkxNDFdXSxbWzExOTIyOCwxMTkyMjhdLFwibWFwcGVkXCIsWzExOTIyNiwxMTkxNDFdXSxbWzExOTIyOSwxMTkyMjldLFwibWFwcGVkXCIsWzExOTIyNSwxMTkxNDEsMTE5MTUwXV0sW1sxMTkyMzAsMTE5MjMwXSxcIm1hcHBlZFwiLFsxMTkyMjYsMTE5MTQxLDExOTE1MF1dLFtbMTE5MjMxLDExOTIzMV0sXCJtYXBwZWRcIixbMTE5MjI1LDExOTE0MSwxMTkxNTFdXSxbWzExOTIzMiwxMTkyMzJdLFwibWFwcGVkXCIsWzExOTIyNiwxMTkxNDEsMTE5MTUxXV0sW1sxMTkyMzMsMTE5MjYxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkyNjIsMTE5MjcyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkyNzMsMTE5Mjk1XSxcImRpc2FsbG93ZWRcIl0sW1sxMTkyOTYsMTE5MzY1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkzNjYsMTE5NTUxXSxcImRpc2FsbG93ZWRcIl0sW1sxMTk1NTIsMTE5NjM4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTk2MzksMTE5NjQ3XSxcImRpc2FsbG93ZWRcIl0sW1sxMTk2NDgsMTE5NjY1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTk2NjYsMTE5ODA3XSxcImRpc2FsbG93ZWRcIl0sW1sxMTk4MDgsMTE5ODA4XSxcIm1hcHBlZFwiLFs5N11dLFtbMTE5ODA5LDExOTgwOV0sXCJtYXBwZWRcIixbOThdXSxbWzExOTgxMCwxMTk4MTBdLFwibWFwcGVkXCIsWzk5XV0sW1sxMTk4MTEsMTE5ODExXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzExOTgxMiwxMTk4MTJdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTE5ODEzLDExOTgxM10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMTk4MTQsMTE5ODE0XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzExOTgxNSwxMTk4MTVdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTE5ODE2LDExOTgxNl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMTk4MTcsMTE5ODE3XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzExOTgxOCwxMTk4MThdLFwibWFwcGVkXCIsWzEwN11dLFtbMTE5ODE5LDExOTgxOV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMTk4MjAsMTE5ODIwXSxcIm1hcHBlZFwiLFsxMDldXSxbWzExOTgyMSwxMTk4MjFdLFwibWFwcGVkXCIsWzExMF1dLFtbMTE5ODIyLDExOTgyMl0sXCJtYXBwZWRcIixbMTExXV0sW1sxMTk4MjMsMTE5ODIzXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzExOTgyNCwxMTk4MjRdLFwibWFwcGVkXCIsWzExM11dLFtbMTE5ODI1LDExOTgyNV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMTk4MjYsMTE5ODI2XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzExOTgyNywxMTk4MjddLFwibWFwcGVkXCIsWzExNl1dLFtbMTE5ODI4LDExOTgyOF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMTk4MjksMTE5ODI5XSxcIm1hcHBlZFwiLFsxMThdXSxbWzExOTgzMCwxMTk4MzBdLFwibWFwcGVkXCIsWzExOV1dLFtbMTE5ODMxLDExOTgzMV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMTk4MzIsMTE5ODMyXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzExOTgzMywxMTk4MzNdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTE5ODM0LDExOTgzNF0sXCJtYXBwZWRcIixbOTddXSxbWzExOTgzNSwxMTk4MzVdLFwibWFwcGVkXCIsWzk4XV0sW1sxMTk4MzYsMTE5ODM2XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTE5ODM3LDExOTgzN10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMTk4MzgsMTE5ODM4XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzExOTgzOSwxMTk4MzldLFwibWFwcGVkXCIsWzEwMl1dLFtbMTE5ODQwLDExOTg0MF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMTk4NDEsMTE5ODQxXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzExOTg0MiwxMTk4NDJdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTE5ODQzLDExOTg0M10sXCJtYXBwZWRcIixbMTA2XV0sW1sxMTk4NDQsMTE5ODQ0XSxcIm1hcHBlZFwiLFsxMDddXSxbWzExOTg0NSwxMTk4NDVdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTE5ODQ2LDExOTg0Nl0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMTk4NDcsMTE5ODQ3XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzExOTg0OCwxMTk4NDhdLFwibWFwcGVkXCIsWzExMV1dLFtbMTE5ODQ5LDExOTg0OV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMTk4NTAsMTE5ODUwXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzExOTg1MSwxMTk4NTFdLFwibWFwcGVkXCIsWzExNF1dLFtbMTE5ODUyLDExOTg1Ml0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMTk4NTMsMTE5ODUzXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzExOTg1NCwxMTk4NTRdLFwibWFwcGVkXCIsWzExN11dLFtbMTE5ODU1LDExOTg1NV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMTk4NTYsMTE5ODU2XSxcIm1hcHBlZFwiLFsxMTldXSxbWzExOTg1NywxMTk4NTddLFwibWFwcGVkXCIsWzEyMF1dLFtbMTE5ODU4LDExOTg1OF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMTk4NTksMTE5ODU5XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzExOTg2MCwxMTk4NjBdLFwibWFwcGVkXCIsWzk3XV0sW1sxMTk4NjEsMTE5ODYxXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTE5ODYyLDExOTg2Ml0sXCJtYXBwZWRcIixbOTldXSxbWzExOTg2MywxMTk4NjNdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5ODY0LDExOTg2NF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMTk4NjUsMTE5ODY1XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzExOTg2NiwxMTk4NjZdLFwibWFwcGVkXCIsWzEwM11dLFtbMTE5ODY3LDExOTg2N10sXCJtYXBwZWRcIixbMTA0XV0sW1sxMTk4NjgsMTE5ODY4XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzExOTg2OSwxMTk4NjldLFwibWFwcGVkXCIsWzEwNl1dLFtbMTE5ODcwLDExOTg3MF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMTk4NzEsMTE5ODcxXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzExOTg3MiwxMTk4NzJdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTE5ODczLDExOTg3M10sXCJtYXBwZWRcIixbMTEwXV0sW1sxMTk4NzQsMTE5ODc0XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzExOTg3NSwxMTk4NzVdLFwibWFwcGVkXCIsWzExMl1dLFtbMTE5ODc2LDExOTg3Nl0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMTk4NzcsMTE5ODc3XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzExOTg3OCwxMTk4NzhdLFwibWFwcGVkXCIsWzExNV1dLFtbMTE5ODc5LDExOTg3OV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMTk4ODAsMTE5ODgwXSxcIm1hcHBlZFwiLFsxMTddXSxbWzExOTg4MSwxMTk4ODFdLFwibWFwcGVkXCIsWzExOF1dLFtbMTE5ODgyLDExOTg4Ml0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMTk4ODMsMTE5ODgzXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzExOTg4NCwxMTk4ODRdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTE5ODg1LDExOTg4NV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMTk4ODYsMTE5ODg2XSxcIm1hcHBlZFwiLFs5N11dLFtbMTE5ODg3LDExOTg4N10sXCJtYXBwZWRcIixbOThdXSxbWzExOTg4OCwxMTk4ODhdLFwibWFwcGVkXCIsWzk5XV0sW1sxMTk4ODksMTE5ODg5XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzExOTg5MCwxMTk4OTBdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTE5ODkxLDExOTg5MV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMTk4OTIsMTE5ODkyXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzExOTg5MywxMTk4OTNdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTg5NCwxMTk4OTRdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTE5ODk1LDExOTg5NV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMTk4OTYsMTE5ODk2XSxcIm1hcHBlZFwiLFsxMDddXSxbWzExOTg5NywxMTk4OTddLFwibWFwcGVkXCIsWzEwOF1dLFtbMTE5ODk4LDExOTg5OF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMTk4OTksMTE5ODk5XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzExOTkwMCwxMTk5MDBdLFwibWFwcGVkXCIsWzExMV1dLFtbMTE5OTAxLDExOTkwMV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMTk5MDIsMTE5OTAyXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzExOTkwMywxMTk5MDNdLFwibWFwcGVkXCIsWzExNF1dLFtbMTE5OTA0LDExOTkwNF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMTk5MDUsMTE5OTA1XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzExOTkwNiwxMTk5MDZdLFwibWFwcGVkXCIsWzExN11dLFtbMTE5OTA3LDExOTkwN10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMTk5MDgsMTE5OTA4XSxcIm1hcHBlZFwiLFsxMTldXSxbWzExOTkwOSwxMTk5MDldLFwibWFwcGVkXCIsWzEyMF1dLFtbMTE5OTEwLDExOTkxMF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMTk5MTEsMTE5OTExXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzExOTkxMiwxMTk5MTJdLFwibWFwcGVkXCIsWzk3XV0sW1sxMTk5MTMsMTE5OTEzXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTE5OTE0LDExOTkxNF0sXCJtYXBwZWRcIixbOTldXSxbWzExOTkxNSwxMTk5MTVdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5OTE2LDExOTkxNl0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMTk5MTcsMTE5OTE3XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzExOTkxOCwxMTk5MThdLFwibWFwcGVkXCIsWzEwM11dLFtbMTE5OTE5LDExOTkxOV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMTk5MjAsMTE5OTIwXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzExOTkyMSwxMTk5MjFdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTE5OTIyLDExOTkyMl0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMTk5MjMsMTE5OTIzXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzExOTkyNCwxMTk5MjRdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTE5OTI1LDExOTkyNV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMTk5MjYsMTE5OTI2XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzExOTkyNywxMTk5MjddLFwibWFwcGVkXCIsWzExMl1dLFtbMTE5OTI4LDExOTkyOF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMTk5MjksMTE5OTI5XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzExOTkzMCwxMTk5MzBdLFwibWFwcGVkXCIsWzExNV1dLFtbMTE5OTMxLDExOTkzMV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMTk5MzIsMTE5OTMyXSxcIm1hcHBlZFwiLFsxMTddXSxbWzExOTkzMywxMTk5MzNdLFwibWFwcGVkXCIsWzExOF1dLFtbMTE5OTM0LDExOTkzNF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMTk5MzUsMTE5OTM1XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzExOTkzNiwxMTk5MzZdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTE5OTM3LDExOTkzN10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMTk5MzgsMTE5OTM4XSxcIm1hcHBlZFwiLFs5N11dLFtbMTE5OTM5LDExOTkzOV0sXCJtYXBwZWRcIixbOThdXSxbWzExOTk0MCwxMTk5NDBdLFwibWFwcGVkXCIsWzk5XV0sW1sxMTk5NDEsMTE5OTQxXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzExOTk0MiwxMTk5NDJdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTE5OTQzLDExOTk0M10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMTk5NDQsMTE5OTQ0XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzExOTk0NSwxMTk5NDVdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTE5OTQ2LDExOTk0Nl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMTk5NDcsMTE5OTQ3XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzExOTk0OCwxMTk5NDhdLFwibWFwcGVkXCIsWzEwN11dLFtbMTE5OTQ5LDExOTk0OV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMTk5NTAsMTE5OTUwXSxcIm1hcHBlZFwiLFsxMDldXSxbWzExOTk1MSwxMTk5NTFdLFwibWFwcGVkXCIsWzExMF1dLFtbMTE5OTUyLDExOTk1Ml0sXCJtYXBwZWRcIixbMTExXV0sW1sxMTk5NTMsMTE5OTUzXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzExOTk1NCwxMTk5NTRdLFwibWFwcGVkXCIsWzExM11dLFtbMTE5OTU1LDExOTk1NV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMTk5NTYsMTE5OTU2XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzExOTk1NywxMTk5NTddLFwibWFwcGVkXCIsWzExNl1dLFtbMTE5OTU4LDExOTk1OF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMTk5NTksMTE5OTU5XSxcIm1hcHBlZFwiLFsxMThdXSxbWzExOTk2MCwxMTk5NjBdLFwibWFwcGVkXCIsWzExOV1dLFtbMTE5OTYxLDExOTk2MV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMTk5NjIsMTE5OTYyXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzExOTk2MywxMTk5NjNdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTE5OTY0LDExOTk2NF0sXCJtYXBwZWRcIixbOTddXSxbWzExOTk2NSwxMTk5NjVdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTk2NiwxMTk5NjZdLFwibWFwcGVkXCIsWzk5XV0sW1sxMTk5NjcsMTE5OTY3XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzExOTk2OCwxMTk5NjldLFwiZGlzYWxsb3dlZFwiXSxbWzExOTk3MCwxMTk5NzBdLFwibWFwcGVkXCIsWzEwM11dLFtbMTE5OTcxLDExOTk3Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5OTczLDExOTk3M10sXCJtYXBwZWRcIixbMTA2XV0sW1sxMTk5NzQsMTE5OTc0XSxcIm1hcHBlZFwiLFsxMDddXSxbWzExOTk3NSwxMTk5NzZdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTk3NywxMTk5NzddLFwibWFwcGVkXCIsWzExMF1dLFtbMTE5OTc4LDExOTk3OF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMTk5NzksMTE5OTc5XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzExOTk4MCwxMTk5ODBdLFwibWFwcGVkXCIsWzExM11dLFtbMTE5OTgxLDExOTk4MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5OTgyLDExOTk4Ml0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMTk5ODMsMTE5OTgzXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzExOTk4NCwxMTk5ODRdLFwibWFwcGVkXCIsWzExN11dLFtbMTE5OTg1LDExOTk4NV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMTk5ODYsMTE5OTg2XSxcIm1hcHBlZFwiLFsxMTldXSxbWzExOTk4NywxMTk5ODddLFwibWFwcGVkXCIsWzEyMF1dLFtbMTE5OTg4LDExOTk4OF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMTk5ODksMTE5OTg5XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzExOTk5MCwxMTk5OTBdLFwibWFwcGVkXCIsWzk3XV0sW1sxMTk5OTEsMTE5OTkxXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTE5OTkyLDExOTk5Ml0sXCJtYXBwZWRcIixbOTldXSxbWzExOTk5MywxMTk5OTNdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5OTk0LDExOTk5NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5OTk1LDExOTk5NV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMTk5OTYsMTE5OTk2XSxcImRpc2FsbG93ZWRcIl0sW1sxMTk5OTcsMTE5OTk3XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzExOTk5OCwxMTk5OThdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTE5OTk5LDExOTk5OV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAwMDAsMTIwMDAwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDAwMSwxMjAwMDFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMDAyLDEyMDAwMl0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAwMDMsMTIwMDAzXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDAwNCwxMjAwMDRdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDAwNSwxMjAwMDVdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMDA2LDEyMDAwNl0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAwMDcsMTIwMDA3XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDAwOCwxMjAwMDhdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMDA5LDEyMDAwOV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAwMTAsMTIwMDEwXSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDAxMSwxMjAwMTFdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMDEyLDEyMDAxMl0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAwMTMsMTIwMDEzXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDAxNCwxMjAwMTRdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMDE1LDEyMDAxNV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAwMTYsMTIwMDE2XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMDE3LDEyMDAxN10sXCJtYXBwZWRcIixbOThdXSxbWzEyMDAxOCwxMjAwMThdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAwMTksMTIwMDE5XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDAyMCwxMjAwMjBdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMDIxLDEyMDAyMV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAwMjIsMTIwMDIyXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDAyMywxMjAwMjNdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMDI0LDEyMDAyNF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAwMjUsMTIwMDI1XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDAyNiwxMjAwMjZdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMDI3LDEyMDAyN10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAwMjgsMTIwMDI4XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDAyOSwxMjAwMjldLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMDMwLDEyMDAzMF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAwMzEsMTIwMDMxXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDAzMiwxMjAwMzJdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMDMzLDEyMDAzM10sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAwMzQsMTIwMDM0XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDAzNSwxMjAwMzVdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMDM2LDEyMDAzNl0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAwMzcsMTIwMDM3XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDAzOCwxMjAwMzhdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMDM5LDEyMDAzOV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAwNDAsMTIwMDQwXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDA0MSwxMjAwNDFdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMDQyLDEyMDA0Ml0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDA0MywxMjAwNDNdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAwNDQsMTIwMDQ0XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMDQ1LDEyMDA0NV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAwNDYsMTIwMDQ2XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDA0NywxMjAwNDddLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMDQ4LDEyMDA0OF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAwNDksMTIwMDQ5XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDA1MCwxMjAwNTBdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMDUxLDEyMDA1MV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAwNTIsMTIwMDUyXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDA1MywxMjAwNTNdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMDU0LDEyMDA1NF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAwNTUsMTIwMDU1XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDA1NiwxMjAwNTZdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMDU3LDEyMDA1N10sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAwNTgsMTIwMDU4XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDA1OSwxMjAwNTldLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMDYwLDEyMDA2MF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAwNjEsMTIwMDYxXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDA2MiwxMjAwNjJdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMDYzLDEyMDA2M10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAwNjQsMTIwMDY0XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDA2NSwxMjAwNjVdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMDY2LDEyMDA2Nl0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAwNjcsMTIwMDY3XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDA2OCwxMjAwNjhdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAwNjksMTIwMDY5XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMDcwLDEyMDA3MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTIwMDcxLDEyMDA3MV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAwNzIsMTIwMDcyXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDA3MywxMjAwNzNdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMDc0LDEyMDA3NF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAwNzUsMTIwMDc2XSxcImRpc2FsbG93ZWRcIl0sW1sxMjAwNzcsMTIwMDc3XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDA3OCwxMjAwNzhdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMDc5LDEyMDA3OV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAwODAsMTIwMDgwXSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDA4MSwxMjAwODFdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMDgyLDEyMDA4Ml0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAwODMsMTIwMDgzXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDA4NCwxMjAwODRdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMDg1LDEyMDA4NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTIwMDg2LDEyMDA4Nl0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAwODcsMTIwMDg3XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDA4OCwxMjAwODhdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMDg5LDEyMDA4OV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAwOTAsMTIwMDkwXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDA5MSwxMjAwOTFdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMDkyLDEyMDA5Ml0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAwOTMsMTIwMDkzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjAwOTQsMTIwMDk0XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMDk1LDEyMDA5NV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDA5NiwxMjAwOTZdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAwOTcsMTIwMDk3XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDA5OCwxMjAwOThdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMDk5LDEyMDA5OV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAxMDAsMTIwMTAwXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDEwMSwxMjAxMDFdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMTAyLDEyMDEwMl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAxMDMsMTIwMTAzXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDEwNCwxMjAxMDRdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMTA1LDEyMDEwNV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAxMDYsMTIwMTA2XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDEwNywxMjAxMDddLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMTA4LDEyMDEwOF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAxMDksMTIwMTA5XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDExMCwxMjAxMTBdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMTExLDEyMDExMV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAxMTIsMTIwMTEyXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDExMywxMjAxMTNdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMTE0LDEyMDExNF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAxMTUsMTIwMTE1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDExNiwxMjAxMTZdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMTE3LDEyMDExN10sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAxMTgsMTIwMTE4XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDExOSwxMjAxMTldLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMTIwLDEyMDEyMF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDEyMSwxMjAxMjFdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAxMjIsMTIwMTIyXSxcImRpc2FsbG93ZWRcIl0sW1sxMjAxMjMsMTIwMTIzXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDEyNCwxMjAxMjRdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMTI1LDEyMDEyNV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAxMjYsMTIwMTI2XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDEyNywxMjAxMjddLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDEyOCwxMjAxMjhdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMTI5LDEyMDEyOV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAxMzAsMTIwMTMwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDEzMSwxMjAxMzFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMTMyLDEyMDEzMl0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAxMzMsMTIwMTMzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjAxMzQsMTIwMTM0XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDEzNSwxMjAxMzddLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDEzOCwxMjAxMzhdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMTM5LDEyMDEzOV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAxNDAsMTIwMTQwXSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDE0MSwxMjAxNDFdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMTQyLDEyMDE0Ml0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAxNDMsMTIwMTQzXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDE0NCwxMjAxNDRdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMTQ1LDEyMDE0NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTIwMTQ2LDEyMDE0Nl0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDE0NywxMjAxNDddLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAxNDgsMTIwMTQ4XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMTQ5LDEyMDE0OV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAxNTAsMTIwMTUwXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDE1MSwxMjAxNTFdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMTUyLDEyMDE1Ml0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAxNTMsMTIwMTUzXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDE1NCwxMjAxNTRdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMTU1LDEyMDE1NV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAxNTYsMTIwMTU2XSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDE1NywxMjAxNTddLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMTU4LDEyMDE1OF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAxNTksMTIwMTU5XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDE2MCwxMjAxNjBdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMTYxLDEyMDE2MV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAxNjIsMTIwMTYyXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDE2MywxMjAxNjNdLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMTY0LDEyMDE2NF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAxNjUsMTIwMTY1XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDE2NiwxMjAxNjZdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMTY3LDEyMDE2N10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAxNjgsMTIwMTY4XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDE2OSwxMjAxNjldLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMTcwLDEyMDE3MF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAxNzEsMTIwMTcxXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDE3MiwxMjAxNzJdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAxNzMsMTIwMTczXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMTc0LDEyMDE3NF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDE3NSwxMjAxNzVdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMTc2LDEyMDE3Nl0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAxNzcsMTIwMTc3XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDE3OCwxMjAxNzhdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMTc5LDEyMDE3OV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAxODAsMTIwMTgwXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDE4MSwxMjAxODFdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMTgyLDEyMDE4Ml0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAxODMsMTIwMTgzXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDE4NCwxMjAxODRdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMTg1LDEyMDE4NV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAxODYsMTIwMTg2XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDE4NywxMjAxODddLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMTg4LDEyMDE4OF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAxODksMTIwMTg5XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDE5MCwxMjAxOTBdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMTkxLDEyMDE5MV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAxOTIsMTIwMTkyXSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDE5MywxMjAxOTNdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMTk0LDEyMDE5NF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAxOTUsMTIwMTk1XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDE5NiwxMjAxOTZdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMTk3LDEyMDE5N10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAxOTgsMTIwMTk4XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMTk5LDEyMDE5OV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDIwMCwxMjAyMDBdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAyMDEsMTIwMjAxXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDIwMiwxMjAyMDJdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMjAzLDEyMDIwM10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAyMDQsMTIwMjA0XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDIwNSwxMjAyMDVdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMjA2LDEyMDIwNl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAyMDcsMTIwMjA3XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDIwOCwxMjAyMDhdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMjA5LDEyMDIwOV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAyMTAsMTIwMjEwXSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDIxMSwxMjAyMTFdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMjEyLDEyMDIxMl0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAyMTMsMTIwMjEzXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDIxNCwxMjAyMTRdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMjE1LDEyMDIxNV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAyMTYsMTIwMjE2XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDIxNywxMjAyMTddLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMjE4LDEyMDIxOF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAyMTksMTIwMjE5XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDIyMCwxMjAyMjBdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMjIxLDEyMDIyMV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAyMjIsMTIwMjIyXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDIyMywxMjAyMjNdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMjI0LDEyMDIyNF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDIyNSwxMjAyMjVdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAyMjYsMTIwMjI2XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMjI3LDEyMDIyN10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAyMjgsMTIwMjI4XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDIyOSwxMjAyMjldLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMjMwLDEyMDIzMF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAyMzEsMTIwMjMxXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDIzMiwxMjAyMzJdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMjMzLDEyMDIzM10sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAyMzQsMTIwMjM0XSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDIzNSwxMjAyMzVdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMjM2LDEyMDIzNl0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAyMzcsMTIwMjM3XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDIzOCwxMjAyMzhdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMjM5LDEyMDIzOV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAyNDAsMTIwMjQwXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDI0MSwxMjAyNDFdLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMjQyLDEyMDI0Ml0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAyNDMsMTIwMjQzXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDI0NCwxMjAyNDRdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMjQ1LDEyMDI0NV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAyNDYsMTIwMjQ2XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDI0NywxMjAyNDddLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMjQ4LDEyMDI0OF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAyNDksMTIwMjQ5XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDI1MCwxMjAyNTBdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAyNTEsMTIwMjUxXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMjUyLDEyMDI1Ml0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDI1MywxMjAyNTNdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMjU0LDEyMDI1NF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAyNTUsMTIwMjU1XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDI1NiwxMjAyNTZdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMjU3LDEyMDI1N10sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAyNTgsMTIwMjU4XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDI1OSwxMjAyNTldLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMjYwLDEyMDI2MF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAyNjEsMTIwMjYxXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDI2MiwxMjAyNjJdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMjYzLDEyMDI2M10sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAyNjQsMTIwMjY0XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDI2NSwxMjAyNjVdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMjY2LDEyMDI2Nl0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAyNjcsMTIwMjY3XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDI2OCwxMjAyNjhdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMjY5LDEyMDI2OV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAyNzAsMTIwMjcwXSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDI3MSwxMjAyNzFdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMjcyLDEyMDI3Ml0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAyNzMsMTIwMjczXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDI3NCwxMjAyNzRdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMjc1LDEyMDI3NV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAyNzYsMTIwMjc2XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMjc3LDEyMDI3N10sXCJtYXBwZWRcIixbOThdXSxbWzEyMDI3OCwxMjAyNzhdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAyNzksMTIwMjc5XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDI4MCwxMjAyODBdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMjgxLDEyMDI4MV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAyODIsMTIwMjgyXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDI4MywxMjAyODNdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMjg0LDEyMDI4NF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAyODUsMTIwMjg1XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDI4NiwxMjAyODZdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMjg3LDEyMDI4N10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAyODgsMTIwMjg4XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDI4OSwxMjAyODldLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMjkwLDEyMDI5MF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAyOTEsMTIwMjkxXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDI5MiwxMjAyOTJdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMjkzLDEyMDI5M10sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAyOTQsMTIwMjk0XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDI5NSwxMjAyOTVdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMjk2LDEyMDI5Nl0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAyOTcsMTIwMjk3XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDI5OCwxMjAyOThdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMjk5LDEyMDI5OV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAzMDAsMTIwMzAwXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDMwMSwxMjAzMDFdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMzAyLDEyMDMwMl0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDMwMywxMjAzMDNdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAzMDQsMTIwMzA0XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMzA1LDEyMDMwNV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAzMDYsMTIwMzA2XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDMwNywxMjAzMDddLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMzA4LDEyMDMwOF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAzMDksMTIwMzA5XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDMxMCwxMjAzMTBdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMzExLDEyMDMxMV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAzMTIsMTIwMzEyXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDMxMywxMjAzMTNdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMzE0LDEyMDMxNF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAzMTUsMTIwMzE1XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDMxNiwxMjAzMTZdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMzE3LDEyMDMxN10sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAzMTgsMTIwMzE4XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDMxOSwxMjAzMTldLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMzIwLDEyMDMyMF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAzMjEsMTIwMzIxXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDMyMiwxMjAzMjJdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMzIzLDEyMDMyM10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAzMjQsMTIwMzI0XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDMyNSwxMjAzMjVdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMzI2LDEyMDMyNl0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAzMjcsMTIwMzI3XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDMyOCwxMjAzMjhdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAzMjksMTIwMzI5XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMzMwLDEyMDMzMF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDMzMSwxMjAzMzFdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMzMyLDEyMDMzMl0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAzMzMsMTIwMzMzXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDMzNCwxMjAzMzRdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMzM1LDEyMDMzNV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAzMzYsMTIwMzM2XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDMzNywxMjAzMzddLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMzM4LDEyMDMzOF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAzMzksMTIwMzM5XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDM0MCwxMjAzNDBdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMzQxLDEyMDM0MV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAzNDIsMTIwMzQyXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDM0MywxMjAzNDNdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMzQ0LDEyMDM0NF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAzNDUsMTIwMzQ1XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDM0NiwxMjAzNDZdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMzQ3LDEyMDM0N10sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAzNDgsMTIwMzQ4XSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDM0OSwxMjAzNDldLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMzUwLDEyMDM1MF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAzNTEsMTIwMzUxXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDM1MiwxMjAzNTJdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMzUzLDEyMDM1M10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAzNTQsMTIwMzU0XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMzU1LDEyMDM1NV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDM1NiwxMjAzNTZdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAzNTcsMTIwMzU3XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDM1OCwxMjAzNThdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMzU5LDEyMDM1OV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAzNjAsMTIwMzYwXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDM2MSwxMjAzNjFdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMzYyLDEyMDM2Ml0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAzNjMsMTIwMzYzXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDM2NCwxMjAzNjRdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMzY1LDEyMDM2NV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAzNjYsMTIwMzY2XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDM2NywxMjAzNjddLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMzY4LDEyMDM2OF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAzNjksMTIwMzY5XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDM3MCwxMjAzNzBdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMzcxLDEyMDM3MV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAzNzIsMTIwMzcyXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDM3MywxMjAzNzNdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMzc0LDEyMDM3NF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAzNzUsMTIwMzc1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDM3NiwxMjAzNzZdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMzc3LDEyMDM3N10sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAzNzgsMTIwMzc4XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDM3OSwxMjAzNzldLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMzgwLDEyMDM4MF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDM4MSwxMjAzODFdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAzODIsMTIwMzgyXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMzgzLDEyMDM4M10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAzODQsMTIwMzg0XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDM4NSwxMjAzODVdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMzg2LDEyMDM4Nl0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAzODcsMTIwMzg3XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDM4OCwxMjAzODhdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMzg5LDEyMDM4OV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAzOTAsMTIwMzkwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDM5MSwxMjAzOTFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMzkyLDEyMDM5Ml0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAzOTMsMTIwMzkzXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDM5NCwxMjAzOTRdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMzk1LDEyMDM5NV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAzOTYsMTIwMzk2XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDM5NywxMjAzOTddLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMzk4LDEyMDM5OF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAzOTksMTIwMzk5XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDQwMCwxMjA0MDBdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwNDAxLDEyMDQwMV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjA0MDIsMTIwNDAyXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDQwMywxMjA0MDNdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwNDA0LDEyMDQwNF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjA0MDUsMTIwNDA1XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDQwNiwxMjA0MDZdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjA0MDcsMTIwNDA3XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwNDA4LDEyMDQwOF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDQwOSwxMjA0MDldLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwNDEwLDEyMDQxMF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjA0MTEsMTIwNDExXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDQxMiwxMjA0MTJdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwNDEzLDEyMDQxM10sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjA0MTQsMTIwNDE0XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDQxNSwxMjA0MTVdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwNDE2LDEyMDQxNl0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjA0MTcsMTIwNDE3XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDQxOCwxMjA0MThdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwNDE5LDEyMDQxOV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjA0MjAsMTIwNDIwXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDQyMSwxMjA0MjFdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwNDIyLDEyMDQyMl0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjA0MjMsMTIwNDIzXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDQyNCwxMjA0MjRdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwNDI1LDEyMDQyNV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjA0MjYsMTIwNDI2XSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDQyNywxMjA0MjddLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwNDI4LDEyMDQyOF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjA0MjksMTIwNDI5XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDQzMCwxMjA0MzBdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwNDMxLDEyMDQzMV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjA0MzIsMTIwNDMyXSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwNDMzLDEyMDQzM10sXCJtYXBwZWRcIixbOThdXSxbWzEyMDQzNCwxMjA0MzRdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjA0MzUsMTIwNDM1XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDQzNiwxMjA0MzZdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwNDM3LDEyMDQzN10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjA0MzgsMTIwNDM4XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDQzOSwxMjA0MzldLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwNDQwLDEyMDQ0MF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjA0NDEsMTIwNDQxXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDQ0MiwxMjA0NDJdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwNDQzLDEyMDQ0M10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjA0NDQsMTIwNDQ0XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDQ0NSwxMjA0NDVdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwNDQ2LDEyMDQ0Nl0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjA0NDcsMTIwNDQ3XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDQ0OCwxMjA0NDhdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwNDQ5LDEyMDQ0OV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjA0NTAsMTIwNDUwXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDQ1MSwxMjA0NTFdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwNDUyLDEyMDQ1Ml0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjA0NTMsMTIwNDUzXSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDQ1NCwxMjA0NTRdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwNDU1LDEyMDQ1NV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjA0NTYsMTIwNDU2XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDQ1NywxMjA0NTddLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwNDU4LDEyMDQ1OF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDQ1OSwxMjA0NTldLFwibWFwcGVkXCIsWzk4XV0sW1sxMjA0NjAsMTIwNDYwXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwNDYxLDEyMDQ2MV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjA0NjIsMTIwNDYyXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDQ2MywxMjA0NjNdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwNDY0LDEyMDQ2NF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjA0NjUsMTIwNDY1XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDQ2NiwxMjA0NjZdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwNDY3LDEyMDQ2N10sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjA0NjgsMTIwNDY4XSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDQ2OSwxMjA0NjldLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwNDcwLDEyMDQ3MF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjA0NzEsMTIwNDcxXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDQ3MiwxMjA0NzJdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwNDczLDEyMDQ3M10sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjA0NzQsMTIwNDc0XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDQ3NSwxMjA0NzVdLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwNDc2LDEyMDQ3Nl0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjA0NzcsMTIwNDc3XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDQ3OCwxMjA0NzhdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwNDc5LDEyMDQ3OV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjA0ODAsMTIwNDgwXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDQ4MSwxMjA0ODFdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwNDgyLDEyMDQ4Ml0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjA0ODMsMTIwNDgzXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDQ4NCwxMjA0ODRdLFwibWFwcGVkXCIsWzMwNV1dLFtbMTIwNDg1LDEyMDQ4NV0sXCJtYXBwZWRcIixbNTY3XV0sW1sxMjA0ODYsMTIwNDg3XSxcImRpc2FsbG93ZWRcIl0sW1sxMjA0ODgsMTIwNDg4XSxcIm1hcHBlZFwiLFs5NDVdXSxbWzEyMDQ4OSwxMjA0ODldLFwibWFwcGVkXCIsWzk0Nl1dLFtbMTIwNDkwLDEyMDQ5MF0sXCJtYXBwZWRcIixbOTQ3XV0sW1sxMjA0OTEsMTIwNDkxXSxcIm1hcHBlZFwiLFs5NDhdXSxbWzEyMDQ5MiwxMjA0OTJdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNDkzLDEyMDQ5M10sXCJtYXBwZWRcIixbOTUwXV0sW1sxMjA0OTQsMTIwNDk0XSxcIm1hcHBlZFwiLFs5NTFdXSxbWzEyMDQ5NSwxMjA0OTVdLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNDk2LDEyMDQ5Nl0sXCJtYXBwZWRcIixbOTUzXV0sW1sxMjA0OTcsMTIwNDk3XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDQ5OCwxMjA0OThdLFwibWFwcGVkXCIsWzk1NV1dLFtbMTIwNDk5LDEyMDQ5OV0sXCJtYXBwZWRcIixbOTU2XV0sW1sxMjA1MDAsMTIwNTAwXSxcIm1hcHBlZFwiLFs5NTddXSxbWzEyMDUwMSwxMjA1MDFdLFwibWFwcGVkXCIsWzk1OF1dLFtbMTIwNTAyLDEyMDUwMl0sXCJtYXBwZWRcIixbOTU5XV0sW1sxMjA1MDMsMTIwNTAzXSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDUwNCwxMjA1MDRdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNTA1LDEyMDUwNV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA1MDYsMTIwNTA2XSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDUwNywxMjA1MDddLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNTA4LDEyMDUwOF0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA1MDksMTIwNTA5XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDUxMCwxMjA1MTBdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNTExLDEyMDUxMV0sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA1MTIsMTIwNTEyXSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDUxMywxMjA1MTNdLFwibWFwcGVkXCIsWzg3MTFdXSxbWzEyMDUxNCwxMjA1MTRdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNTE1LDEyMDUxNV0sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA1MTYsMTIwNTE2XSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDUxNywxMjA1MTddLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNTE4LDEyMDUxOF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA1MTksMTIwNTE5XSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDUyMCwxMjA1MjBdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNTIxLDEyMDUyMV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA1MjIsMTIwNTIyXSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDUyMywxMjA1MjNdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNTI0LDEyMDUyNF0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA1MjUsMTIwNTI1XSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDUyNiwxMjA1MjZdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNTI3LDEyMDUyN10sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA1MjgsMTIwNTI4XSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDUyOSwxMjA1MjldLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNTMwLDEyMDUzMF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA1MzEsMTIwNTMyXSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDUzMywxMjA1MzNdLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNTM0LDEyMDUzNF0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA1MzUsMTIwNTM1XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDUzNiwxMjA1MzZdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNTM3LDEyMDUzN10sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA1MzgsMTIwNTM4XSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDUzOSwxMjA1MzldLFwibWFwcGVkXCIsWzg3MDZdXSxbWzEyMDU0MCwxMjA1NDBdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNTQxLDEyMDU0MV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA1NDIsMTIwNTQyXSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDU0MywxMjA1NDNdLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNTQ0LDEyMDU0NF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA1NDUsMTIwNTQ1XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDU0NiwxMjA1NDZdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNTQ3LDEyMDU0N10sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA1NDgsMTIwNTQ4XSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDU0OSwxMjA1NDldLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNTUwLDEyMDU1MF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA1NTEsMTIwNTUxXSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDU1MiwxMjA1NTJdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNTUzLDEyMDU1M10sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA1NTQsMTIwNTU0XSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDU1NSwxMjA1NTVdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNTU2LDEyMDU1Nl0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA1NTcsMTIwNTU3XSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDU1OCwxMjA1NThdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNTU5LDEyMDU1OV0sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA1NjAsMTIwNTYwXSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDU2MSwxMjA1NjFdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNTYyLDEyMDU2Ml0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA1NjMsMTIwNTYzXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDU2NCwxMjA1NjRdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNTY1LDEyMDU2NV0sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA1NjYsMTIwNTY2XSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDU2NywxMjA1NjddLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNTY4LDEyMDU2OF0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA1NjksMTIwNTY5XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDU3MCwxMjA1NzBdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNTcxLDEyMDU3MV0sXCJtYXBwZWRcIixbODcxMV1dLFtbMTIwNTcyLDEyMDU3Ml0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA1NzMsMTIwNTczXSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDU3NCwxMjA1NzRdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNTc1LDEyMDU3NV0sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA1NzYsMTIwNTc2XSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDU3NywxMjA1NzddLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNTc4LDEyMDU3OF0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA1NzksMTIwNTc5XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDU4MCwxMjA1ODBdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNTgxLDEyMDU4MV0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA1ODIsMTIwNTgyXSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDU4MywxMjA1ODNdLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNTg0LDEyMDU4NF0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA1ODUsMTIwNTg1XSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDU4NiwxMjA1ODZdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNTg3LDEyMDU4N10sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA1ODgsMTIwNTg4XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDU4OSwxMjA1OTBdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNTkxLDEyMDU5MV0sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA1OTIsMTIwNTkyXSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDU5MywxMjA1OTNdLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNTk0LDEyMDU5NF0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA1OTUsMTIwNTk1XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDU5NiwxMjA1OTZdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNTk3LDEyMDU5N10sXCJtYXBwZWRcIixbODcwNl1dLFtbMTIwNTk4LDEyMDU5OF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA1OTksMTIwNTk5XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDYwMCwxMjA2MDBdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNjAxLDEyMDYwMV0sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA2MDIsMTIwNjAyXSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDYwMywxMjA2MDNdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNjA0LDEyMDYwNF0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA2MDUsMTIwNjA1XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDYwNiwxMjA2MDZdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNjA3LDEyMDYwN10sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA2MDgsMTIwNjA4XSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDYwOSwxMjA2MDldLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNjEwLDEyMDYxMF0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA2MTEsMTIwNjExXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDYxMiwxMjA2MTJdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNjEzLDEyMDYxM10sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA2MTQsMTIwNjE0XSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDYxNSwxMjA2MTVdLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNjE2LDEyMDYxNl0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA2MTcsMTIwNjE3XSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDYxOCwxMjA2MThdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNjE5LDEyMDYxOV0sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA2MjAsMTIwNjIwXSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDYyMSwxMjA2MjFdLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjIyLDEyMDYyMl0sXCJtYXBwZWRcIixbOTYzXV0sW1sxMjA2MjMsMTIwNjIzXSxcIm1hcHBlZFwiLFs5NjRdXSxbWzEyMDYyNCwxMjA2MjRdLFwibWFwcGVkXCIsWzk2NV1dLFtbMTIwNjI1LDEyMDYyNV0sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA2MjYsMTIwNjI2XSxcIm1hcHBlZFwiLFs5NjddXSxbWzEyMDYyNywxMjA2MjddLFwibWFwcGVkXCIsWzk2OF1dLFtbMTIwNjI4LDEyMDYyOF0sXCJtYXBwZWRcIixbOTY5XV0sW1sxMjA2MjksMTIwNjI5XSxcIm1hcHBlZFwiLFs4NzExXV0sW1sxMjA2MzAsMTIwNjMwXSxcIm1hcHBlZFwiLFs5NDVdXSxbWzEyMDYzMSwxMjA2MzFdLFwibWFwcGVkXCIsWzk0Nl1dLFtbMTIwNjMyLDEyMDYzMl0sXCJtYXBwZWRcIixbOTQ3XV0sW1sxMjA2MzMsMTIwNjMzXSxcIm1hcHBlZFwiLFs5NDhdXSxbWzEyMDYzNCwxMjA2MzRdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNjM1LDEyMDYzNV0sXCJtYXBwZWRcIixbOTUwXV0sW1sxMjA2MzYsMTIwNjM2XSxcIm1hcHBlZFwiLFs5NTFdXSxbWzEyMDYzNywxMjA2MzddLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjM4LDEyMDYzOF0sXCJtYXBwZWRcIixbOTUzXV0sW1sxMjA2MzksMTIwNjM5XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDY0MCwxMjA2NDBdLFwibWFwcGVkXCIsWzk1NV1dLFtbMTIwNjQxLDEyMDY0MV0sXCJtYXBwZWRcIixbOTU2XV0sW1sxMjA2NDIsMTIwNjQyXSxcIm1hcHBlZFwiLFs5NTddXSxbWzEyMDY0MywxMjA2NDNdLFwibWFwcGVkXCIsWzk1OF1dLFtbMTIwNjQ0LDEyMDY0NF0sXCJtYXBwZWRcIixbOTU5XV0sW1sxMjA2NDUsMTIwNjQ1XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDY0NiwxMjA2NDZdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNjQ3LDEyMDY0OF0sXCJtYXBwZWRcIixbOTYzXV0sW1sxMjA2NDksMTIwNjQ5XSxcIm1hcHBlZFwiLFs5NjRdXSxbWzEyMDY1MCwxMjA2NTBdLFwibWFwcGVkXCIsWzk2NV1dLFtbMTIwNjUxLDEyMDY1MV0sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA2NTIsMTIwNjUyXSxcIm1hcHBlZFwiLFs5NjddXSxbWzEyMDY1MywxMjA2NTNdLFwibWFwcGVkXCIsWzk2OF1dLFtbMTIwNjU0LDEyMDY1NF0sXCJtYXBwZWRcIixbOTY5XV0sW1sxMjA2NTUsMTIwNjU1XSxcIm1hcHBlZFwiLFs4NzA2XV0sW1sxMjA2NTYsMTIwNjU2XSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDY1NywxMjA2NTddLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjU4LDEyMDY1OF0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA2NTksMTIwNjU5XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDY2MCwxMjA2NjBdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNjYxLDEyMDY2MV0sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA2NjIsMTIwNjYyXSxcIm1hcHBlZFwiLFs5NDVdXSxbWzEyMDY2MywxMjA2NjNdLFwibWFwcGVkXCIsWzk0Nl1dLFtbMTIwNjY0LDEyMDY2NF0sXCJtYXBwZWRcIixbOTQ3XV0sW1sxMjA2NjUsMTIwNjY1XSxcIm1hcHBlZFwiLFs5NDhdXSxbWzEyMDY2NiwxMjA2NjZdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNjY3LDEyMDY2N10sXCJtYXBwZWRcIixbOTUwXV0sW1sxMjA2NjgsMTIwNjY4XSxcIm1hcHBlZFwiLFs5NTFdXSxbWzEyMDY2OSwxMjA2NjldLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjcwLDEyMDY3MF0sXCJtYXBwZWRcIixbOTUzXV0sW1sxMjA2NzEsMTIwNjcxXSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDY3MiwxMjA2NzJdLFwibWFwcGVkXCIsWzk1NV1dLFtbMTIwNjczLDEyMDY3M10sXCJtYXBwZWRcIixbOTU2XV0sW1sxMjA2NzQsMTIwNjc0XSxcIm1hcHBlZFwiLFs5NTddXSxbWzEyMDY3NSwxMjA2NzVdLFwibWFwcGVkXCIsWzk1OF1dLFtbMTIwNjc2LDEyMDY3Nl0sXCJtYXBwZWRcIixbOTU5XV0sW1sxMjA2NzcsMTIwNjc3XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDY3OCwxMjA2NzhdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNjc5LDEyMDY3OV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA2ODAsMTIwNjgwXSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDY4MSwxMjA2ODFdLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNjgyLDEyMDY4Ml0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA2ODMsMTIwNjgzXSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDY4NCwxMjA2ODRdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNjg1LDEyMDY4NV0sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA2ODYsMTIwNjg2XSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDY4NywxMjA2ODddLFwibWFwcGVkXCIsWzg3MTFdXSxbWzEyMDY4OCwxMjA2ODhdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNjg5LDEyMDY4OV0sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA2OTAsMTIwNjkwXSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDY5MSwxMjA2OTFdLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNjkyLDEyMDY5Ml0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA2OTMsMTIwNjkzXSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDY5NCwxMjA2OTRdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNjk1LDEyMDY5NV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA2OTYsMTIwNjk2XSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDY5NywxMjA2OTddLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNjk4LDEyMDY5OF0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA2OTksMTIwNjk5XSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDcwMCwxMjA3MDBdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNzAxLDEyMDcwMV0sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA3MDIsMTIwNzAyXSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDcwMywxMjA3MDNdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNzA0LDEyMDcwNF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA3MDUsMTIwNzA2XSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDcwNywxMjA3MDddLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNzA4LDEyMDcwOF0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA3MDksMTIwNzA5XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDcxMCwxMjA3MTBdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNzExLDEyMDcxMV0sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA3MTIsMTIwNzEyXSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDcxMywxMjA3MTNdLFwibWFwcGVkXCIsWzg3MDZdXSxbWzEyMDcxNCwxMjA3MTRdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNzE1LDEyMDcxNV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA3MTYsMTIwNzE2XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDcxNywxMjA3MTddLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNzE4LDEyMDcxOF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA3MTksMTIwNzE5XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDcyMCwxMjA3MjBdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNzIxLDEyMDcyMV0sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA3MjIsMTIwNzIyXSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDcyMywxMjA3MjNdLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNzI0LDEyMDcyNF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA3MjUsMTIwNzI1XSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDcyNiwxMjA3MjZdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNzI3LDEyMDcyN10sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA3MjgsMTIwNzI4XSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDcyOSwxMjA3MjldLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNzMwLDEyMDczMF0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA3MzEsMTIwNzMxXSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDczMiwxMjA3MzJdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNzMzLDEyMDczM10sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA3MzQsMTIwNzM0XSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDczNSwxMjA3MzVdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNzM2LDEyMDczNl0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA3MzcsMTIwNzM3XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDczOCwxMjA3MzhdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNzM5LDEyMDczOV0sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA3NDAsMTIwNzQwXSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDc0MSwxMjA3NDFdLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNzQyLDEyMDc0Ml0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA3NDMsMTIwNzQzXSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDc0NCwxMjA3NDRdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNzQ1LDEyMDc0NV0sXCJtYXBwZWRcIixbODcxMV1dLFtbMTIwNzQ2LDEyMDc0Nl0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA3NDcsMTIwNzQ3XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDc0OCwxMjA3NDhdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNzQ5LDEyMDc0OV0sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA3NTAsMTIwNzUwXSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDc1MSwxMjA3NTFdLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNzUyLDEyMDc1Ml0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA3NTMsMTIwNzUzXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDc1NCwxMjA3NTRdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNzU1LDEyMDc1NV0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA3NTYsMTIwNzU2XSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDc1NywxMjA3NTddLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNzU4LDEyMDc1OF0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA3NTksMTIwNzU5XSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDc2MCwxMjA3NjBdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNzYxLDEyMDc2MV0sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA3NjIsMTIwNzYyXSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDc2MywxMjA3NjRdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNzY1LDEyMDc2NV0sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA3NjYsMTIwNzY2XSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDc2NywxMjA3NjddLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNzY4LDEyMDc2OF0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA3NjksMTIwNzY5XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDc3MCwxMjA3NzBdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNzcxLDEyMDc3MV0sXCJtYXBwZWRcIixbODcwNl1dLFtbMTIwNzcyLDEyMDc3Ml0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA3NzMsMTIwNzczXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDc3NCwxMjA3NzRdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNzc1LDEyMDc3NV0sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA3NzYsMTIwNzc2XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDc3NywxMjA3NzddLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNzc4LDEyMDc3OV0sXCJtYXBwZWRcIixbOTg5XV0sW1sxMjA3ODAsMTIwNzgxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjA3ODIsMTIwNzgyXSxcIm1hcHBlZFwiLFs0OF1dLFtbMTIwNzgzLDEyMDc4M10sXCJtYXBwZWRcIixbNDldXSxbWzEyMDc4NCwxMjA3ODRdLFwibWFwcGVkXCIsWzUwXV0sW1sxMjA3ODUsMTIwNzg1XSxcIm1hcHBlZFwiLFs1MV1dLFtbMTIwNzg2LDEyMDc4Nl0sXCJtYXBwZWRcIixbNTJdXSxbWzEyMDc4NywxMjA3ODddLFwibWFwcGVkXCIsWzUzXV0sW1sxMjA3ODgsMTIwNzg4XSxcIm1hcHBlZFwiLFs1NF1dLFtbMTIwNzg5LDEyMDc4OV0sXCJtYXBwZWRcIixbNTVdXSxbWzEyMDc5MCwxMjA3OTBdLFwibWFwcGVkXCIsWzU2XV0sW1sxMjA3OTEsMTIwNzkxXSxcIm1hcHBlZFwiLFs1N11dLFtbMTIwNzkyLDEyMDc5Ml0sXCJtYXBwZWRcIixbNDhdXSxbWzEyMDc5MywxMjA3OTNdLFwibWFwcGVkXCIsWzQ5XV0sW1sxMjA3OTQsMTIwNzk0XSxcIm1hcHBlZFwiLFs1MF1dLFtbMTIwNzk1LDEyMDc5NV0sXCJtYXBwZWRcIixbNTFdXSxbWzEyMDc5NiwxMjA3OTZdLFwibWFwcGVkXCIsWzUyXV0sW1sxMjA3OTcsMTIwNzk3XSxcIm1hcHBlZFwiLFs1M11dLFtbMTIwNzk4LDEyMDc5OF0sXCJtYXBwZWRcIixbNTRdXSxbWzEyMDc5OSwxMjA3OTldLFwibWFwcGVkXCIsWzU1XV0sW1sxMjA4MDAsMTIwODAwXSxcIm1hcHBlZFwiLFs1Nl1dLFtbMTIwODAxLDEyMDgwMV0sXCJtYXBwZWRcIixbNTddXSxbWzEyMDgwMiwxMjA4MDJdLFwibWFwcGVkXCIsWzQ4XV0sW1sxMjA4MDMsMTIwODAzXSxcIm1hcHBlZFwiLFs0OV1dLFtbMTIwODA0LDEyMDgwNF0sXCJtYXBwZWRcIixbNTBdXSxbWzEyMDgwNSwxMjA4MDVdLFwibWFwcGVkXCIsWzUxXV0sW1sxMjA4MDYsMTIwODA2XSxcIm1hcHBlZFwiLFs1Ml1dLFtbMTIwODA3LDEyMDgwN10sXCJtYXBwZWRcIixbNTNdXSxbWzEyMDgwOCwxMjA4MDhdLFwibWFwcGVkXCIsWzU0XV0sW1sxMjA4MDksMTIwODA5XSxcIm1hcHBlZFwiLFs1NV1dLFtbMTIwODEwLDEyMDgxMF0sXCJtYXBwZWRcIixbNTZdXSxbWzEyMDgxMSwxMjA4MTFdLFwibWFwcGVkXCIsWzU3XV0sW1sxMjA4MTIsMTIwODEyXSxcIm1hcHBlZFwiLFs0OF1dLFtbMTIwODEzLDEyMDgxM10sXCJtYXBwZWRcIixbNDldXSxbWzEyMDgxNCwxMjA4MTRdLFwibWFwcGVkXCIsWzUwXV0sW1sxMjA4MTUsMTIwODE1XSxcIm1hcHBlZFwiLFs1MV1dLFtbMTIwODE2LDEyMDgxNl0sXCJtYXBwZWRcIixbNTJdXSxbWzEyMDgxNywxMjA4MTddLFwibWFwcGVkXCIsWzUzXV0sW1sxMjA4MTgsMTIwODE4XSxcIm1hcHBlZFwiLFs1NF1dLFtbMTIwODE5LDEyMDgxOV0sXCJtYXBwZWRcIixbNTVdXSxbWzEyMDgyMCwxMjA4MjBdLFwibWFwcGVkXCIsWzU2XV0sW1sxMjA4MjEsMTIwODIxXSxcIm1hcHBlZFwiLFs1N11dLFtbMTIwODIyLDEyMDgyMl0sXCJtYXBwZWRcIixbNDhdXSxbWzEyMDgyMywxMjA4MjNdLFwibWFwcGVkXCIsWzQ5XV0sW1sxMjA4MjQsMTIwODI0XSxcIm1hcHBlZFwiLFs1MF1dLFtbMTIwODI1LDEyMDgyNV0sXCJtYXBwZWRcIixbNTFdXSxbWzEyMDgyNiwxMjA4MjZdLFwibWFwcGVkXCIsWzUyXV0sW1sxMjA4MjcsMTIwODI3XSxcIm1hcHBlZFwiLFs1M11dLFtbMTIwODI4LDEyMDgyOF0sXCJtYXBwZWRcIixbNTRdXSxbWzEyMDgyOSwxMjA4MjldLFwibWFwcGVkXCIsWzU1XV0sW1sxMjA4MzAsMTIwODMwXSxcIm1hcHBlZFwiLFs1Nl1dLFtbMTIwODMxLDEyMDgzMV0sXCJtYXBwZWRcIixbNTddXSxbWzEyMDgzMiwxMjEzNDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMTM0NCwxMjEzOThdLFwidmFsaWRcIl0sW1sxMjEzOTksMTIxNDAyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjE0MDMsMTIxNDUyXSxcInZhbGlkXCJdLFtbMTIxNDUzLDEyMTQ2MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTIxNDYxLDEyMTQ2MV0sXCJ2YWxpZFwiXSxbWzEyMTQ2MiwxMjE0NzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMTQ3NiwxMjE0NzZdLFwidmFsaWRcIl0sW1sxMjE0NzcsMTIxNDgzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjE0ODQsMTIxNDk4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjE0OTksMTIxNTAzXSxcInZhbGlkXCJdLFtbMTIxNTA0LDEyMTUwNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTIxNTA1LDEyMTUxOV0sXCJ2YWxpZFwiXSxbWzEyMTUyMCwxMjQ5MjddLFwiZGlzYWxsb3dlZFwiXSxbWzEyNDkyOCwxMjUxMjRdLFwidmFsaWRcIl0sW1sxMjUxMjUsMTI1MTI2XSxcImRpc2FsbG93ZWRcIl0sW1sxMjUxMjcsMTI1MTM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjUxMzYsMTI1MTQyXSxcInZhbGlkXCJdLFtbMTI1MTQzLDEyNjQ2M10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NDY0LDEyNjQ2NF0sXCJtYXBwZWRcIixbMTU3NV1dLFtbMTI2NDY1LDEyNjQ2NV0sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NDY2LDEyNjQ2Nl0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NDY3LDEyNjQ2N10sXCJtYXBwZWRcIixbMTU4M11dLFtbMTI2NDY4LDEyNjQ2OF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NDY5LDEyNjQ2OV0sXCJtYXBwZWRcIixbMTYwOF1dLFtbMTI2NDcwLDEyNjQ3MF0sXCJtYXBwZWRcIixbMTU4Nl1dLFtbMTI2NDcxLDEyNjQ3MV0sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NDcyLDEyNjQ3Ml0sXCJtYXBwZWRcIixbMTU5MV1dLFtbMTI2NDczLDEyNjQ3M10sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NDc0LDEyNjQ3NF0sXCJtYXBwZWRcIixbMTYwM11dLFtbMTI2NDc1LDEyNjQ3NV0sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NDc2LDEyNjQ3Nl0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NDc3LDEyNjQ3N10sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NDc4LDEyNjQ3OF0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NDc5LDEyNjQ3OV0sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NDgwLDEyNjQ4MF0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NDgxLDEyNjQ4MV0sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NDgyLDEyNjQ4Ml0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NDgzLDEyNjQ4M10sXCJtYXBwZWRcIixbMTU4NV1dLFtbMTI2NDg0LDEyNjQ4NF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NDg1LDEyNjQ4NV0sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NDg2LDEyNjQ4Nl0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NDg3LDEyNjQ4N10sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NDg4LDEyNjQ4OF0sXCJtYXBwZWRcIixbMTU4NF1dLFtbMTI2NDg5LDEyNjQ4OV0sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NDkwLDEyNjQ5MF0sXCJtYXBwZWRcIixbMTU5Ml1dLFtbMTI2NDkxLDEyNjQ5MV0sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NDkyLDEyNjQ5Ml0sXCJtYXBwZWRcIixbMTY0Nl1dLFtbMTI2NDkzLDEyNjQ5M10sXCJtYXBwZWRcIixbMTcyMl1dLFtbMTI2NDk0LDEyNjQ5NF0sXCJtYXBwZWRcIixbMTY5N11dLFtbMTI2NDk1LDEyNjQ5NV0sXCJtYXBwZWRcIixbMTY0N11dLFtbMTI2NDk2LDEyNjQ5Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NDk3LDEyNjQ5N10sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NDk4LDEyNjQ5OF0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NDk5LDEyNjQ5OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTAwLDEyNjUwMF0sXCJtYXBwZWRcIixbMTYwN11dLFtbMTI2NTAxLDEyNjUwMl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTAzLDEyNjUwM10sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NTA0LDEyNjUwNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTA1LDEyNjUwNV0sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NTA2LDEyNjUwNl0sXCJtYXBwZWRcIixbMTYwM11dLFtbMTI2NTA3LDEyNjUwN10sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NTA4LDEyNjUwOF0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NTA5LDEyNjUwOV0sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NTEwLDEyNjUxMF0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NTExLDEyNjUxMV0sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NTEyLDEyNjUxMl0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NTEzLDEyNjUxM10sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NTE0LDEyNjUxNF0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NTE1LDEyNjUxNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTE2LDEyNjUxNl0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NTE3LDEyNjUxN10sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NTE4LDEyNjUxOF0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NTE5LDEyNjUxOV0sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NTIwLDEyNjUyMF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTIxLDEyNjUyMV0sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NTIyLDEyNjUyMl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTIzLDEyNjUyM10sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NTI0LDEyNjUyOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTMwLDEyNjUzMF0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NTMxLDEyNjUzNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTM1LDEyNjUzNV0sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NTM2LDEyNjUzNl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTM3LDEyNjUzN10sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NTM4LDEyNjUzOF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTM5LDEyNjUzOV0sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NTQwLDEyNjU0MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTQxLDEyNjU0MV0sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NTQyLDEyNjU0Ml0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NTQzLDEyNjU0M10sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NTQ0LDEyNjU0NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTQ1LDEyNjU0NV0sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NTQ2LDEyNjU0Nl0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NTQ3LDEyNjU0N10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTQ4LDEyNjU0OF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NTQ5LDEyNjU1MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTUxLDEyNjU1MV0sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NTUyLDEyNjU1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTUzLDEyNjU1M10sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NTU0LDEyNjU1NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTU1LDEyNjU1NV0sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NTU2LDEyNjU1Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTU3LDEyNjU1N10sXCJtYXBwZWRcIixbMTcyMl1dLFtbMTI2NTU4LDEyNjU1OF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTU5LDEyNjU1OV0sXCJtYXBwZWRcIixbMTY0N11dLFtbMTI2NTYwLDEyNjU2MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTYxLDEyNjU2MV0sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NTYyLDEyNjU2Ml0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NTYzLDEyNjU2M10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTY0LDEyNjU2NF0sXCJtYXBwZWRcIixbMTYwN11dLFtbMTI2NTY1LDEyNjU2Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTY3LDEyNjU2N10sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NTY4LDEyNjU2OF0sXCJtYXBwZWRcIixbMTU5MV1dLFtbMTI2NTY5LDEyNjU2OV0sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NTcwLDEyNjU3MF0sXCJtYXBwZWRcIixbMTYwM11dLFtbMTI2NTcxLDEyNjU3MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTcyLDEyNjU3Ml0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NTczLDEyNjU3M10sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NTc0LDEyNjU3NF0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NTc1LDEyNjU3NV0sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NTc2LDEyNjU3Nl0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NTc3LDEyNjU3N10sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NTc4LDEyNjU3OF0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NTc5LDEyNjU3OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTgwLDEyNjU4MF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NTgxLDEyNjU4MV0sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NTgyLDEyNjU4Ml0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NTgzLDEyNjU4M10sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NTg0LDEyNjU4NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTg1LDEyNjU4NV0sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NTg2LDEyNjU4Nl0sXCJtYXBwZWRcIixbMTU5Ml1dLFtbMTI2NTg3LDEyNjU4N10sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NTg4LDEyNjU4OF0sXCJtYXBwZWRcIixbMTY0Nl1dLFtbMTI2NTg5LDEyNjU4OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTkwLDEyNjU5MF0sXCJtYXBwZWRcIixbMTY5N11dLFtbMTI2NTkxLDEyNjU5MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTkyLDEyNjU5Ml0sXCJtYXBwZWRcIixbMTU3NV1dLFtbMTI2NTkzLDEyNjU5M10sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NTk0LDEyNjU5NF0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NTk1LDEyNjU5NV0sXCJtYXBwZWRcIixbMTU4M11dLFtbMTI2NTk2LDEyNjU5Nl0sXCJtYXBwZWRcIixbMTYwN11dLFtbMTI2NTk3LDEyNjU5N10sXCJtYXBwZWRcIixbMTYwOF1dLFtbMTI2NTk4LDEyNjU5OF0sXCJtYXBwZWRcIixbMTU4Nl1dLFtbMTI2NTk5LDEyNjU5OV0sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NjAwLDEyNjYwMF0sXCJtYXBwZWRcIixbMTU5MV1dLFtbMTI2NjAxLDEyNjYwMV0sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NjAyLDEyNjYwMl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NjAzLDEyNjYwM10sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NjA0LDEyNjYwNF0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NjA1LDEyNjYwNV0sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NjA2LDEyNjYwNl0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NjA3LDEyNjYwN10sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NjA4LDEyNjYwOF0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NjA5LDEyNjYwOV0sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NjEwLDEyNjYxMF0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NjExLDEyNjYxMV0sXCJtYXBwZWRcIixbMTU4NV1dLFtbMTI2NjEyLDEyNjYxMl0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NjEzLDEyNjYxM10sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NjE0LDEyNjYxNF0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NjE1LDEyNjYxNV0sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NjE2LDEyNjYxNl0sXCJtYXBwZWRcIixbMTU4NF1dLFtbMTI2NjE3LDEyNjYxN10sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NjE4LDEyNjYxOF0sXCJtYXBwZWRcIixbMTU5Ml1dLFtbMTI2NjE5LDEyNjYxOV0sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NjIwLDEyNjYyNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NjI1LDEyNjYyNV0sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NjI2LDEyNjYyNl0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NjI3LDEyNjYyN10sXCJtYXBwZWRcIixbMTU4M11dLFtbMTI2NjI4LDEyNjYyOF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NjI5LDEyNjYyOV0sXCJtYXBwZWRcIixbMTYwOF1dLFtbMTI2NjMwLDEyNjYzMF0sXCJtYXBwZWRcIixbMTU4Nl1dLFtbMTI2NjMxLDEyNjYzMV0sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NjMyLDEyNjYzMl0sXCJtYXBwZWRcIixbMTU5MV1dLFtbMTI2NjMzLDEyNjYzM10sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NjM0LDEyNjYzNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NjM1LDEyNjYzNV0sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NjM2LDEyNjYzNl0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NjM3LDEyNjYzN10sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NjM4LDEyNjYzOF0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NjM5LDEyNjYzOV0sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NjQwLDEyNjY0MF0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NjQxLDEyNjY0MV0sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NjQyLDEyNjY0Ml0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NjQzLDEyNjY0M10sXCJtYXBwZWRcIixbMTU4NV1dLFtbMTI2NjQ0LDEyNjY0NF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NjQ1LDEyNjY0NV0sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NjQ2LDEyNjY0Nl0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NjQ3LDEyNjY0N10sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NjQ4LDEyNjY0OF0sXCJtYXBwZWRcIixbMTU4NF1dLFtbMTI2NjQ5LDEyNjY0OV0sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NjUwLDEyNjY1MF0sXCJtYXBwZWRcIixbMTU5Ml1dLFtbMTI2NjUxLDEyNjY1MV0sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NjUyLDEyNjcwM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NzA0LDEyNjcwNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI2NzA2LDEyNjk3NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2OTc2LDEyNzAxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MDIwLDEyNzAyM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MDI0LDEyNzEyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTI0LDEyNzEzNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MTM2LDEyNzE1MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTUxLDEyNzE1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MTUzLDEyNzE2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTY3LDEyNzE2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTY4LDEyNzE2OF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MTY5LDEyNzE4M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTg0LDEyNzE4NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MTg1LDEyNzE5OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MjAwLDEyNzIyMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MjIyLDEyNzIzMV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MjMyLDEyNzIzMl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MjMzLDEyNzIzM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQ4LDQ0XV0sW1sxMjcyMzQsMTI3MjM0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDksNDRdXSxbWzEyNzIzNSwxMjcyMzVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1MCw0NF1dLFtbMTI3MjM2LDEyNzIzNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzUxLDQ0XV0sW1sxMjcyMzcsMTI3MjM3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTIsNDRdXSxbWzEyNzIzOCwxMjcyMzhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1Myw0NF1dLFtbMTI3MjM5LDEyNzIzOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU0LDQ0XV0sW1sxMjcyNDAsMTI3MjQwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTUsNDRdXSxbWzEyNzI0MSwxMjcyNDFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1Niw0NF1dLFtbMTI3MjQyLDEyNzI0Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU3LDQ0XV0sW1sxMjcyNDMsMTI3MjQ0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcyNDUsMTI3MjQ3XSxcImRpc2FsbG93ZWRcIl0sW1sxMjcyNDgsMTI3MjQ4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsOTcsNDFdXSxbWzEyNzI0OSwxMjcyNDldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw5OCw0MV1dLFtbMTI3MjUwLDEyNzI1MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDk5LDQxXV0sW1sxMjcyNTEsMTI3MjUxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAwLDQxXV0sW1sxMjcyNTIsMTI3MjUyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAxLDQxXV0sW1sxMjcyNTMsMTI3MjUzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAyLDQxXV0sW1sxMjcyNTQsMTI3MjU0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAzLDQxXV0sW1sxMjcyNTUsMTI3MjU1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA0LDQxXV0sW1sxMjcyNTYsMTI3MjU2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA1LDQxXV0sW1sxMjcyNTcsMTI3MjU3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA2LDQxXV0sW1sxMjcyNTgsMTI3MjU4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA3LDQxXV0sW1sxMjcyNTksMTI3MjU5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA4LDQxXV0sW1sxMjcyNjAsMTI3MjYwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA5LDQxXV0sW1sxMjcyNjEsMTI3MjYxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEwLDQxXV0sW1sxMjcyNjIsMTI3MjYyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTExLDQxXV0sW1sxMjcyNjMsMTI3MjYzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEyLDQxXV0sW1sxMjcyNjQsMTI3MjY0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEzLDQxXV0sW1sxMjcyNjUsMTI3MjY1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE0LDQxXV0sW1sxMjcyNjYsMTI3MjY2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE1LDQxXV0sW1sxMjcyNjcsMTI3MjY3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE2LDQxXV0sW1sxMjcyNjgsMTI3MjY4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE3LDQxXV0sW1sxMjcyNjksMTI3MjY5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE4LDQxXV0sW1sxMjcyNzAsMTI3MjcwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE5LDQxXV0sW1sxMjcyNzEsMTI3MjcxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTIwLDQxXV0sW1sxMjcyNzIsMTI3MjcyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTIxLDQxXV0sW1sxMjcyNzMsMTI3MjczXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTIyLDQxXV0sW1sxMjcyNzQsMTI3Mjc0XSxcIm1hcHBlZFwiLFsxMjMwOCwxMTUsMTIzMDldXSxbWzEyNzI3NSwxMjcyNzVdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjcyNzYsMTI3Mjc2XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyNzI3NywxMjcyNzddLFwibWFwcGVkXCIsWzk5LDEwMF1dLFtbMTI3Mjc4LDEyNzI3OF0sXCJtYXBwZWRcIixbMTE5LDEyMl1dLFtbMTI3Mjc5LDEyNzI3OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MjgwLDEyNzI4MF0sXCJtYXBwZWRcIixbOTddXSxbWzEyNzI4MSwxMjcyODFdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjcyODIsMTI3MjgyXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTI3MjgzLDEyNzI4M10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjcyODQsMTI3Mjg0XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyNzI4NSwxMjcyODVdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTI3Mjg2LDEyNzI4Nl0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjcyODcsMTI3Mjg3XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyNzI4OCwxMjcyODhdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTI3Mjg5LDEyNzI4OV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjcyOTAsMTI3MjkwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyNzI5MSwxMjcyOTFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTI3MjkyLDEyNzI5Ml0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjcyOTMsMTI3MjkzXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyNzI5NCwxMjcyOTRdLFwibWFwcGVkXCIsWzExMV1dLFtbMTI3Mjk1LDEyNzI5NV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjcyOTYsMTI3Mjk2XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyNzI5NywxMjcyOTddLFwibWFwcGVkXCIsWzExNF1dLFtbMTI3Mjk4LDEyNzI5OF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjcyOTksMTI3Mjk5XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyNzMwMCwxMjczMDBdLFwibWFwcGVkXCIsWzExN11dLFtbMTI3MzAxLDEyNzMwMV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjczMDIsMTI3MzAyXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyNzMwMywxMjczMDNdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTI3MzA0LDEyNzMwNF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjczMDUsMTI3MzA1XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyNzMwNiwxMjczMDZdLFwibWFwcGVkXCIsWzEwNCwxMThdXSxbWzEyNzMwNywxMjczMDddLFwibWFwcGVkXCIsWzEwOSwxMThdXSxbWzEyNzMwOCwxMjczMDhdLFwibWFwcGVkXCIsWzExNSwxMDBdXSxbWzEyNzMwOSwxMjczMDldLFwibWFwcGVkXCIsWzExNSwxMTVdXSxbWzEyNzMxMCwxMjczMTBdLFwibWFwcGVkXCIsWzExMiwxMTIsMTE4XV0sW1sxMjczMTEsMTI3MzExXSxcIm1hcHBlZFwiLFsxMTksOTldXSxbWzEyNzMxMiwxMjczMThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMxOSwxMjczMTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMyMCwxMjczMjZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMyNywxMjczMjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMyOCwxMjczMzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMzOCwxMjczMzhdLFwibWFwcGVkXCIsWzEwOSw5OV1dLFtbMTI3MzM5LDEyNzMzOV0sXCJtYXBwZWRcIixbMTA5LDEwMF1dLFtbMTI3MzQwLDEyNzM0M10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MzQ0LDEyNzM1Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzUzLDEyNzM1M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzU0LDEyNzM1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzU1LDEyNzM1Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzU3LDEyNzM1OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzU5LDEyNzM1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzYwLDEyNzM2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzcwLDEyNzM3M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Mzc0LDEyNzM3NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Mzc2LDEyNzM3Nl0sXCJtYXBwZWRcIixbMTAwLDEwNl1dLFtbMTI3Mzc3LDEyNzM4Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Mzg3LDEyNzQ2MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3NDYyLDEyNzQ4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3NDg4LDEyNzQ4OF0sXCJtYXBwZWRcIixbMTI0MTEsMTIzNjNdXSxbWzEyNzQ4OSwxMjc0ODldLFwibWFwcGVkXCIsWzEyNDY3LDEyNDY3XV0sW1sxMjc0OTAsMTI3NDkwXSxcIm1hcHBlZFwiLFsxMjQ2OV1dLFtbMTI3NDkxLDEyNzUwM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3NTA0LDEyNzUwNF0sXCJtYXBwZWRcIixbMjUxNjNdXSxbWzEyNzUwNSwxMjc1MDVdLFwibWFwcGVkXCIsWzIzMzgzXV0sW1sxMjc1MDYsMTI3NTA2XSxcIm1hcHBlZFwiLFsyMTQ1Ml1dLFtbMTI3NTA3LDEyNzUwN10sXCJtYXBwZWRcIixbMTI0ODddXSxbWzEyNzUwOCwxMjc1MDhdLFwibWFwcGVkXCIsWzIwMTA4XV0sW1sxMjc1MDksMTI3NTA5XSxcIm1hcHBlZFwiLFsyMjgxMF1dLFtbMTI3NTEwLDEyNzUxMF0sXCJtYXBwZWRcIixbMzUyOTldXSxbWzEyNzUxMSwxMjc1MTFdLFwibWFwcGVkXCIsWzIyODI1XV0sW1sxMjc1MTIsMTI3NTEyXSxcIm1hcHBlZFwiLFsyMDEzMl1dLFtbMTI3NTEzLDEyNzUxM10sXCJtYXBwZWRcIixbMjYxNDRdXSxbWzEyNzUxNCwxMjc1MTRdLFwibWFwcGVkXCIsWzI4OTYxXV0sW1sxMjc1MTUsMTI3NTE1XSxcIm1hcHBlZFwiLFsyNjAwOV1dLFtbMTI3NTE2LDEyNzUxNl0sXCJtYXBwZWRcIixbMjEwNjldXSxbWzEyNzUxNywxMjc1MTddLFwibWFwcGVkXCIsWzI0NDYwXV0sW1sxMjc1MTgsMTI3NTE4XSxcIm1hcHBlZFwiLFsyMDg3N11dLFtbMTI3NTE5LDEyNzUxOV0sXCJtYXBwZWRcIixbMjYwMzJdXSxbWzEyNzUyMCwxMjc1MjBdLFwibWFwcGVkXCIsWzIxMDIxXV0sW1sxMjc1MjEsMTI3NTIxXSxcIm1hcHBlZFwiLFszMjA2Nl1dLFtbMTI3NTIyLDEyNzUyMl0sXCJtYXBwZWRcIixbMjk5ODNdXSxbWzEyNzUyMywxMjc1MjNdLFwibWFwcGVkXCIsWzM2MDA5XV0sW1sxMjc1MjQsMTI3NTI0XSxcIm1hcHBlZFwiLFsyMjc2OF1dLFtbMTI3NTI1LDEyNzUyNV0sXCJtYXBwZWRcIixbMjE1NjFdXSxbWzEyNzUyNiwxMjc1MjZdLFwibWFwcGVkXCIsWzI4NDM2XV0sW1sxMjc1MjcsMTI3NTI3XSxcIm1hcHBlZFwiLFsyNTIzN11dLFtbMTI3NTI4LDEyNzUyOF0sXCJtYXBwZWRcIixbMjU0MjldXSxbWzEyNzUyOSwxMjc1MjldLFwibWFwcGVkXCIsWzE5OTY4XV0sW1sxMjc1MzAsMTI3NTMwXSxcIm1hcHBlZFwiLFsxOTk3N11dLFtbMTI3NTMxLDEyNzUzMV0sXCJtYXBwZWRcIixbMzY5MzhdXSxbWzEyNzUzMiwxMjc1MzJdLFwibWFwcGVkXCIsWzI0MDM4XV0sW1sxMjc1MzMsMTI3NTMzXSxcIm1hcHBlZFwiLFsyMDAxM11dLFtbMTI3NTM0LDEyNzUzNF0sXCJtYXBwZWRcIixbMjE0OTFdXSxbWzEyNzUzNSwxMjc1MzVdLFwibWFwcGVkXCIsWzI1MzUxXV0sW1sxMjc1MzYsMTI3NTM2XSxcIm1hcHBlZFwiLFszNjIwOF1dLFtbMTI3NTM3LDEyNzUzN10sXCJtYXBwZWRcIixbMjUxNzFdXSxbWzEyNzUzOCwxMjc1MzhdLFwibWFwcGVkXCIsWzMxMTA1XV0sW1sxMjc1MzksMTI3NTM5XSxcIm1hcHBlZFwiLFszMTM1NF1dLFtbMTI3NTQwLDEyNzU0MF0sXCJtYXBwZWRcIixbMjE1MTJdXSxbWzEyNzU0MSwxMjc1NDFdLFwibWFwcGVkXCIsWzI4Mjg4XV0sW1sxMjc1NDIsMTI3NTQyXSxcIm1hcHBlZFwiLFsyNjM3N11dLFtbMTI3NTQzLDEyNzU0M10sXCJtYXBwZWRcIixbMjYzNzZdXSxbWzEyNzU0NCwxMjc1NDRdLFwibWFwcGVkXCIsWzMwMDAzXV0sW1sxMjc1NDUsMTI3NTQ1XSxcIm1hcHBlZFwiLFsyMTEwNl1dLFtbMTI3NTQ2LDEyNzU0Nl0sXCJtYXBwZWRcIixbMjE5NDJdXSxbWzEyNzU0NywxMjc1NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNzU1MiwxMjc1NTJdLFwibWFwcGVkXCIsWzEyMzA4LDI2NDEyLDEyMzA5XV0sW1sxMjc1NTMsMTI3NTUzXSxcIm1hcHBlZFwiLFsxMjMwOCwxOTk3NywxMjMwOV1dLFtbMTI3NTU0LDEyNzU1NF0sXCJtYXBwZWRcIixbMTIzMDgsMjAxMDgsMTIzMDldXSxbWzEyNzU1NSwxMjc1NTVdLFwibWFwcGVkXCIsWzEyMzA4LDIzNDMzLDEyMzA5XV0sW1sxMjc1NTYsMTI3NTU2XSxcIm1hcHBlZFwiLFsxMjMwOCwyODg1NywxMjMwOV1dLFtbMTI3NTU3LDEyNzU1N10sXCJtYXBwZWRcIixbMTIzMDgsMjUxNzEsMTIzMDldXSxbWzEyNzU1OCwxMjc1NThdLFwibWFwcGVkXCIsWzEyMzA4LDMwNDIzLDEyMzA5XV0sW1sxMjc1NTksMTI3NTU5XSxcIm1hcHBlZFwiLFsxMjMwOCwyMTIxMywxMjMwOV1dLFtbMTI3NTYwLDEyNzU2MF0sXCJtYXBwZWRcIixbMTIzMDgsMjU5NDMsMTIzMDldXSxbWzEyNzU2MSwxMjc1NjddLFwiZGlzYWxsb3dlZFwiXSxbWzEyNzU2OCwxMjc1NjhdLFwibWFwcGVkXCIsWzI0NDcxXV0sW1sxMjc1NjksMTI3NTY5XSxcIm1hcHBlZFwiLFsyMTQ4N11dLFtbMTI3NTcwLDEyNzc0M10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3NzQ0LDEyNzc3Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Nzc3LDEyNzc4OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Nzg5LDEyNzc5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3NzkyLDEyNzc5N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Nzk4LDEyNzc5OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Nzk5LDEyNzg2OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3ODY5LDEyNzg2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3ODcwLDEyNzg3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3ODcyLDEyNzg5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3ODkyLDEyNzkwM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTA0LDEyNzk0MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTQxLDEyNzk0MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTQyLDEyNzk0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTQ3LDEyNzk1MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTUxLDEyNzk1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTU2LDEyNzk2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTY4LDEyNzk4NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTg1LDEyNzk5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTkyLDEyNzk5OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDAwLDEyODA2Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDYzLDEyODA2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDY0LDEyODA2NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDY1LDEyODA2NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDY2LDEyODI0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjQ4LDEyODI0OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjQ5LDEyODI1Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjUzLDEyODI1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjU1LDEyODI1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjU2LDEyODMxN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzE4LDEyODMxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzIwLDEyODMyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzI0LDEyODMzMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzMxLDEyODMzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzM2LDEyODM1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzYwLDEyODM3N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4Mzc4LDEyODM3OF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4Mzc5LDEyODQxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NDIwLDEyODQyMF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4NDIxLDEyODUwNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTA3LDEyODUxMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTEyLDEyODUxMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTEzLDEyODUyOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTI5LDEyODUyOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTMwLDEyODUzMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTMzLDEyODUzM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM0LDEyODUzNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM1LDEyODUzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM2LDEyODUzNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM3LDEyODUzN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM4LDEyODUzOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM5LDEyODUzOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTQwLDEyODU0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTQzLDEyODU0M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTQ0LDEyODU0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTUwLDEyODU1MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTUyLDEyODU1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTU2LDEyODU1Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTU3LDEyODU1N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTU4LDEyODU1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTYwLDEyODU2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTY0LDEyODU2NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTY1LDEyODU3Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTc3LDEyODU3OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTc5LDEyODU4MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTgxLDEyODU5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTkyLDEyODYzOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NjQwLDEyODcwOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzEwLDEyODcxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzIwLDEyODcyMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzIxLDEyODczNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4NzM2LDEyODc0OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzQ5LDEyODc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4NzUyLDEyODc1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzU2LDEyODc2N10sXCJkaXNhbGxvd2VkXCJdLFtbMTI4NzY4LDEyODg4M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4ODg0LDEyODg5NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4ODk2LDEyODk4MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4OTgxLDEyOTAyM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MDI0LDEyOTAzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MDM2LDEyOTAzOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MDQwLDEyOTA5NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MDk2LDEyOTEwM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MTA0LDEyOTExM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MTE0LDEyOTExOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MTIwLDEyOTE1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MTYwLDEyOTE2N10sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MTY4LDEyOTE5N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MTk4LDEyOTI5NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI5Mjk2LDEyOTMwNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MzA1LDEyOTQwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTI5NDA4LDEyOTQxMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5NDEzLDEyOTQ3MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI5NDcyLDEyOTQ3Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5NDczLDEzMTA2OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTMxMDcwLDEzMTA3MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTMxMDcyLDE3Mzc4Ml0sXCJ2YWxpZFwiXSxbWzE3Mzc4MywxNzM4MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzE3MzgyNCwxNzc5NzJdLFwidmFsaWRcIl0sW1sxNzc5NzMsMTc3OTgzXSxcImRpc2FsbG93ZWRcIl0sW1sxNzc5ODQsMTc4MjA1XSxcInZhbGlkXCJdLFtbMTc4MjA2LDE3ODIwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTc4MjA4LDE4Mzk2OV0sXCJ2YWxpZFwiXSxbWzE4Mzk3MCwxOTQ1NTldLFwiZGlzYWxsb3dlZFwiXSxbWzE5NDU2MCwxOTQ1NjBdLFwibWFwcGVkXCIsWzIwMDI5XV0sW1sxOTQ1NjEsMTk0NTYxXSxcIm1hcHBlZFwiLFsyMDAyNF1dLFtbMTk0NTYyLDE5NDU2Ml0sXCJtYXBwZWRcIixbMjAwMzNdXSxbWzE5NDU2MywxOTQ1NjNdLFwibWFwcGVkXCIsWzEzMTM2Ml1dLFtbMTk0NTY0LDE5NDU2NF0sXCJtYXBwZWRcIixbMjAzMjBdXSxbWzE5NDU2NSwxOTQ1NjVdLFwibWFwcGVkXCIsWzIwMzk4XV0sW1sxOTQ1NjYsMTk0NTY2XSxcIm1hcHBlZFwiLFsyMDQxMV1dLFtbMTk0NTY3LDE5NDU2N10sXCJtYXBwZWRcIixbMjA0ODJdXSxbWzE5NDU2OCwxOTQ1NjhdLFwibWFwcGVkXCIsWzIwNjAyXV0sW1sxOTQ1NjksMTk0NTY5XSxcIm1hcHBlZFwiLFsyMDYzM11dLFtbMTk0NTcwLDE5NDU3MF0sXCJtYXBwZWRcIixbMjA3MTFdXSxbWzE5NDU3MSwxOTQ1NzFdLFwibWFwcGVkXCIsWzIwNjg3XV0sW1sxOTQ1NzIsMTk0NTcyXSxcIm1hcHBlZFwiLFsxMzQ3MF1dLFtbMTk0NTczLDE5NDU3M10sXCJtYXBwZWRcIixbMTMyNjY2XV0sW1sxOTQ1NzQsMTk0NTc0XSxcIm1hcHBlZFwiLFsyMDgxM11dLFtbMTk0NTc1LDE5NDU3NV0sXCJtYXBwZWRcIixbMjA4MjBdXSxbWzE5NDU3NiwxOTQ1NzZdLFwibWFwcGVkXCIsWzIwODM2XV0sW1sxOTQ1NzcsMTk0NTc3XSxcIm1hcHBlZFwiLFsyMDg1NV1dLFtbMTk0NTc4LDE5NDU3OF0sXCJtYXBwZWRcIixbMTMyMzgwXV0sW1sxOTQ1NzksMTk0NTc5XSxcIm1hcHBlZFwiLFsxMzQ5N11dLFtbMTk0NTgwLDE5NDU4MF0sXCJtYXBwZWRcIixbMjA4MzldXSxbWzE5NDU4MSwxOTQ1ODFdLFwibWFwcGVkXCIsWzIwODc3XV0sW1sxOTQ1ODIsMTk0NTgyXSxcIm1hcHBlZFwiLFsxMzI0MjddXSxbWzE5NDU4MywxOTQ1ODNdLFwibWFwcGVkXCIsWzIwODg3XV0sW1sxOTQ1ODQsMTk0NTg0XSxcIm1hcHBlZFwiLFsyMDkwMF1dLFtbMTk0NTg1LDE5NDU4NV0sXCJtYXBwZWRcIixbMjAxNzJdXSxbWzE5NDU4NiwxOTQ1ODZdLFwibWFwcGVkXCIsWzIwOTA4XV0sW1sxOTQ1ODcsMTk0NTg3XSxcIm1hcHBlZFwiLFsyMDkxN11dLFtbMTk0NTg4LDE5NDU4OF0sXCJtYXBwZWRcIixbMTY4NDE1XV0sW1sxOTQ1ODksMTk0NTg5XSxcIm1hcHBlZFwiLFsyMDk4MV1dLFtbMTk0NTkwLDE5NDU5MF0sXCJtYXBwZWRcIixbMjA5OTVdXSxbWzE5NDU5MSwxOTQ1OTFdLFwibWFwcGVkXCIsWzEzNTM1XV0sW1sxOTQ1OTIsMTk0NTkyXSxcIm1hcHBlZFwiLFsyMTA1MV1dLFtbMTk0NTkzLDE5NDU5M10sXCJtYXBwZWRcIixbMjEwNjJdXSxbWzE5NDU5NCwxOTQ1OTRdLFwibWFwcGVkXCIsWzIxMTA2XV0sW1sxOTQ1OTUsMTk0NTk1XSxcIm1hcHBlZFwiLFsyMTExMV1dLFtbMTk0NTk2LDE5NDU5Nl0sXCJtYXBwZWRcIixbMTM1ODldXSxbWzE5NDU5NywxOTQ1OTddLFwibWFwcGVkXCIsWzIxMTkxXV0sW1sxOTQ1OTgsMTk0NTk4XSxcIm1hcHBlZFwiLFsyMTE5M11dLFtbMTk0NTk5LDE5NDU5OV0sXCJtYXBwZWRcIixbMjEyMjBdXSxbWzE5NDYwMCwxOTQ2MDBdLFwibWFwcGVkXCIsWzIxMjQyXV0sW1sxOTQ2MDEsMTk0NjAxXSxcIm1hcHBlZFwiLFsyMTI1M11dLFtbMTk0NjAyLDE5NDYwMl0sXCJtYXBwZWRcIixbMjEyNTRdXSxbWzE5NDYwMywxOTQ2MDNdLFwibWFwcGVkXCIsWzIxMjcxXV0sW1sxOTQ2MDQsMTk0NjA0XSxcIm1hcHBlZFwiLFsyMTMyMV1dLFtbMTk0NjA1LDE5NDYwNV0sXCJtYXBwZWRcIixbMjEzMjldXSxbWzE5NDYwNiwxOTQ2MDZdLFwibWFwcGVkXCIsWzIxMzM4XV0sW1sxOTQ2MDcsMTk0NjA3XSxcIm1hcHBlZFwiLFsyMTM2M11dLFtbMTk0NjA4LDE5NDYwOF0sXCJtYXBwZWRcIixbMjEzNzNdXSxbWzE5NDYwOSwxOTQ2MTFdLFwibWFwcGVkXCIsWzIxMzc1XV0sW1sxOTQ2MTIsMTk0NjEyXSxcIm1hcHBlZFwiLFsxMzM2NzZdXSxbWzE5NDYxMywxOTQ2MTNdLFwibWFwcGVkXCIsWzI4Nzg0XV0sW1sxOTQ2MTQsMTk0NjE0XSxcIm1hcHBlZFwiLFsyMTQ1MF1dLFtbMTk0NjE1LDE5NDYxNV0sXCJtYXBwZWRcIixbMjE0NzFdXSxbWzE5NDYxNiwxOTQ2MTZdLFwibWFwcGVkXCIsWzEzMzk4N11dLFtbMTk0NjE3LDE5NDYxN10sXCJtYXBwZWRcIixbMjE0ODNdXSxbWzE5NDYxOCwxOTQ2MThdLFwibWFwcGVkXCIsWzIxNDg5XV0sW1sxOTQ2MTksMTk0NjE5XSxcIm1hcHBlZFwiLFsyMTUxMF1dLFtbMTk0NjIwLDE5NDYyMF0sXCJtYXBwZWRcIixbMjE2NjJdXSxbWzE5NDYyMSwxOTQ2MjFdLFwibWFwcGVkXCIsWzIxNTYwXV0sW1sxOTQ2MjIsMTk0NjIyXSxcIm1hcHBlZFwiLFsyMTU3Nl1dLFtbMTk0NjIzLDE5NDYyM10sXCJtYXBwZWRcIixbMjE2MDhdXSxbWzE5NDYyNCwxOTQ2MjRdLFwibWFwcGVkXCIsWzIxNjY2XV0sW1sxOTQ2MjUsMTk0NjI1XSxcIm1hcHBlZFwiLFsyMTc1MF1dLFtbMTk0NjI2LDE5NDYyNl0sXCJtYXBwZWRcIixbMjE3NzZdXSxbWzE5NDYyNywxOTQ2MjddLFwibWFwcGVkXCIsWzIxODQzXV0sW1sxOTQ2MjgsMTk0NjI4XSxcIm1hcHBlZFwiLFsyMTg1OV1dLFtbMTk0NjI5LDE5NDYzMF0sXCJtYXBwZWRcIixbMjE4OTJdXSxbWzE5NDYzMSwxOTQ2MzFdLFwibWFwcGVkXCIsWzIxOTEzXV0sW1sxOTQ2MzIsMTk0NjMyXSxcIm1hcHBlZFwiLFsyMTkzMV1dLFtbMTk0NjMzLDE5NDYzM10sXCJtYXBwZWRcIixbMjE5MzldXSxbWzE5NDYzNCwxOTQ2MzRdLFwibWFwcGVkXCIsWzIxOTU0XV0sW1sxOTQ2MzUsMTk0NjM1XSxcIm1hcHBlZFwiLFsyMjI5NF1dLFtbMTk0NjM2LDE5NDYzNl0sXCJtYXBwZWRcIixbMjIwMjJdXSxbWzE5NDYzNywxOTQ2MzddLFwibWFwcGVkXCIsWzIyMjk1XV0sW1sxOTQ2MzgsMTk0NjM4XSxcIm1hcHBlZFwiLFsyMjA5N11dLFtbMTk0NjM5LDE5NDYzOV0sXCJtYXBwZWRcIixbMjIxMzJdXSxbWzE5NDY0MCwxOTQ2NDBdLFwibWFwcGVkXCIsWzIwOTk5XV0sW1sxOTQ2NDEsMTk0NjQxXSxcIm1hcHBlZFwiLFsyMjc2Nl1dLFtbMTk0NjQyLDE5NDY0Ml0sXCJtYXBwZWRcIixbMjI0NzhdXSxbWzE5NDY0MywxOTQ2NDNdLFwibWFwcGVkXCIsWzIyNTE2XV0sW1sxOTQ2NDQsMTk0NjQ0XSxcIm1hcHBlZFwiLFsyMjU0MV1dLFtbMTk0NjQ1LDE5NDY0NV0sXCJtYXBwZWRcIixbMjI0MTFdXSxbWzE5NDY0NiwxOTQ2NDZdLFwibWFwcGVkXCIsWzIyNTc4XV0sW1sxOTQ2NDcsMTk0NjQ3XSxcIm1hcHBlZFwiLFsyMjU3N11dLFtbMTk0NjQ4LDE5NDY0OF0sXCJtYXBwZWRcIixbMjI3MDBdXSxbWzE5NDY0OSwxOTQ2NDldLFwibWFwcGVkXCIsWzEzNjQyMF1dLFtbMTk0NjUwLDE5NDY1MF0sXCJtYXBwZWRcIixbMjI3NzBdXSxbWzE5NDY1MSwxOTQ2NTFdLFwibWFwcGVkXCIsWzIyNzc1XV0sW1sxOTQ2NTIsMTk0NjUyXSxcIm1hcHBlZFwiLFsyMjc5MF1dLFtbMTk0NjUzLDE5NDY1M10sXCJtYXBwZWRcIixbMjI4MTBdXSxbWzE5NDY1NCwxOTQ2NTRdLFwibWFwcGVkXCIsWzIyODE4XV0sW1sxOTQ2NTUsMTk0NjU1XSxcIm1hcHBlZFwiLFsyMjg4Ml1dLFtbMTk0NjU2LDE5NDY1Nl0sXCJtYXBwZWRcIixbMTM2ODcyXV0sW1sxOTQ2NTcsMTk0NjU3XSxcIm1hcHBlZFwiLFsxMzY5MzhdXSxbWzE5NDY1OCwxOTQ2NThdLFwibWFwcGVkXCIsWzIzMDIwXV0sW1sxOTQ2NTksMTk0NjU5XSxcIm1hcHBlZFwiLFsyMzA2N11dLFtbMTk0NjYwLDE5NDY2MF0sXCJtYXBwZWRcIixbMjMwNzldXSxbWzE5NDY2MSwxOTQ2NjFdLFwibWFwcGVkXCIsWzIzMDAwXV0sW1sxOTQ2NjIsMTk0NjYyXSxcIm1hcHBlZFwiLFsyMzE0Ml1dLFtbMTk0NjYzLDE5NDY2M10sXCJtYXBwZWRcIixbMTQwNjJdXSxbWzE5NDY2NCwxOTQ2NjRdLFwiZGlzYWxsb3dlZFwiXSxbWzE5NDY2NSwxOTQ2NjVdLFwibWFwcGVkXCIsWzIzMzA0XV0sW1sxOTQ2NjYsMTk0NjY3XSxcIm1hcHBlZFwiLFsyMzM1OF1dLFtbMTk0NjY4LDE5NDY2OF0sXCJtYXBwZWRcIixbMTM3NjcyXV0sW1sxOTQ2NjksMTk0NjY5XSxcIm1hcHBlZFwiLFsyMzQ5MV1dLFtbMTk0NjcwLDE5NDY3MF0sXCJtYXBwZWRcIixbMjM1MTJdXSxbWzE5NDY3MSwxOTQ2NzFdLFwibWFwcGVkXCIsWzIzNTI3XV0sW1sxOTQ2NzIsMTk0NjcyXSxcIm1hcHBlZFwiLFsyMzUzOV1dLFtbMTk0NjczLDE5NDY3M10sXCJtYXBwZWRcIixbMTM4MDA4XV0sW1sxOTQ2NzQsMTk0Njc0XSxcIm1hcHBlZFwiLFsyMzU1MV1dLFtbMTk0Njc1LDE5NDY3NV0sXCJtYXBwZWRcIixbMjM1NThdXSxbWzE5NDY3NiwxOTQ2NzZdLFwiZGlzYWxsb3dlZFwiXSxbWzE5NDY3NywxOTQ2NzddLFwibWFwcGVkXCIsWzIzNTg2XV0sW1sxOTQ2NzgsMTk0Njc4XSxcIm1hcHBlZFwiLFsxNDIwOV1dLFtbMTk0Njc5LDE5NDY3OV0sXCJtYXBwZWRcIixbMjM2NDhdXSxbWzE5NDY4MCwxOTQ2ODBdLFwibWFwcGVkXCIsWzIzNjYyXV0sW1sxOTQ2ODEsMTk0NjgxXSxcIm1hcHBlZFwiLFsyMzc0NF1dLFtbMTk0NjgyLDE5NDY4Ml0sXCJtYXBwZWRcIixbMjM2OTNdXSxbWzE5NDY4MywxOTQ2ODNdLFwibWFwcGVkXCIsWzEzODcyNF1dLFtbMTk0Njg0LDE5NDY4NF0sXCJtYXBwZWRcIixbMjM4NzVdXSxbWzE5NDY4NSwxOTQ2ODVdLFwibWFwcGVkXCIsWzEzODcyNl1dLFtbMTk0Njg2LDE5NDY4Nl0sXCJtYXBwZWRcIixbMjM5MThdXSxbWzE5NDY4NywxOTQ2ODddLFwibWFwcGVkXCIsWzIzOTE1XV0sW1sxOTQ2ODgsMTk0Njg4XSxcIm1hcHBlZFwiLFsyMzkzMl1dLFtbMTk0Njg5LDE5NDY4OV0sXCJtYXBwZWRcIixbMjQwMzNdXSxbWzE5NDY5MCwxOTQ2OTBdLFwibWFwcGVkXCIsWzI0MDM0XV0sW1sxOTQ2OTEsMTk0NjkxXSxcIm1hcHBlZFwiLFsxNDM4M11dLFtbMTk0NjkyLDE5NDY5Ml0sXCJtYXBwZWRcIixbMjQwNjFdXSxbWzE5NDY5MywxOTQ2OTNdLFwibWFwcGVkXCIsWzI0MTA0XV0sW1sxOTQ2OTQsMTk0Njk0XSxcIm1hcHBlZFwiLFsyNDEyNV1dLFtbMTk0Njk1LDE5NDY5NV0sXCJtYXBwZWRcIixbMjQxNjldXSxbWzE5NDY5NiwxOTQ2OTZdLFwibWFwcGVkXCIsWzE0NDM0XV0sW1sxOTQ2OTcsMTk0Njk3XSxcIm1hcHBlZFwiLFsxMzk2NTFdXSxbWzE5NDY5OCwxOTQ2OThdLFwibWFwcGVkXCIsWzE0NDYwXV0sW1sxOTQ2OTksMTk0Njk5XSxcIm1hcHBlZFwiLFsyNDI0MF1dLFtbMTk0NzAwLDE5NDcwMF0sXCJtYXBwZWRcIixbMjQyNDNdXSxbWzE5NDcwMSwxOTQ3MDFdLFwibWFwcGVkXCIsWzI0MjQ2XV0sW1sxOTQ3MDIsMTk0NzAyXSxcIm1hcHBlZFwiLFsyNDI2Nl1dLFtbMTk0NzAzLDE5NDcwM10sXCJtYXBwZWRcIixbMTcyOTQ2XV0sW1sxOTQ3MDQsMTk0NzA0XSxcIm1hcHBlZFwiLFsyNDMxOF1dLFtbMTk0NzA1LDE5NDcwNl0sXCJtYXBwZWRcIixbMTQwMDgxXV0sW1sxOTQ3MDcsMTk0NzA3XSxcIm1hcHBlZFwiLFszMzI4MV1dLFtbMTk0NzA4LDE5NDcwOV0sXCJtYXBwZWRcIixbMjQzNTRdXSxbWzE5NDcxMCwxOTQ3MTBdLFwibWFwcGVkXCIsWzE0NTM1XV0sW1sxOTQ3MTEsMTk0NzExXSxcIm1hcHBlZFwiLFsxNDQwNTZdXSxbWzE5NDcxMiwxOTQ3MTJdLFwibWFwcGVkXCIsWzE1NjEyMl1dLFtbMTk0NzEzLDE5NDcxM10sXCJtYXBwZWRcIixbMjQ0MThdXSxbWzE5NDcxNCwxOTQ3MTRdLFwibWFwcGVkXCIsWzI0NDI3XV0sW1sxOTQ3MTUsMTk0NzE1XSxcIm1hcHBlZFwiLFsxNDU2M11dLFtbMTk0NzE2LDE5NDcxNl0sXCJtYXBwZWRcIixbMjQ0NzRdXSxbWzE5NDcxNywxOTQ3MTddLFwibWFwcGVkXCIsWzI0NTI1XV0sW1sxOTQ3MTgsMTk0NzE4XSxcIm1hcHBlZFwiLFsyNDUzNV1dLFtbMTk0NzE5LDE5NDcxOV0sXCJtYXBwZWRcIixbMjQ1NjldXSxbWzE5NDcyMCwxOTQ3MjBdLFwibWFwcGVkXCIsWzI0NzA1XV0sW1sxOTQ3MjEsMTk0NzIxXSxcIm1hcHBlZFwiLFsxNDY1MF1dLFtbMTk0NzIyLDE5NDcyMl0sXCJtYXBwZWRcIixbMTQ2MjBdXSxbWzE5NDcyMywxOTQ3MjNdLFwibWFwcGVkXCIsWzI0NzI0XV0sW1sxOTQ3MjQsMTk0NzI0XSxcIm1hcHBlZFwiLFsxNDEwMTJdXSxbWzE5NDcyNSwxOTQ3MjVdLFwibWFwcGVkXCIsWzI0Nzc1XV0sW1sxOTQ3MjYsMTk0NzI2XSxcIm1hcHBlZFwiLFsyNDkwNF1dLFtbMTk0NzI3LDE5NDcyN10sXCJtYXBwZWRcIixbMjQ5MDhdXSxbWzE5NDcyOCwxOTQ3MjhdLFwibWFwcGVkXCIsWzI0OTEwXV0sW1sxOTQ3MjksMTk0NzI5XSxcIm1hcHBlZFwiLFsyNDkwOF1dLFtbMTk0NzMwLDE5NDczMF0sXCJtYXBwZWRcIixbMjQ5NTRdXSxbWzE5NDczMSwxOTQ3MzFdLFwibWFwcGVkXCIsWzI0OTc0XV0sW1sxOTQ3MzIsMTk0NzMyXSxcIm1hcHBlZFwiLFsyNTAxMF1dLFtbMTk0NzMzLDE5NDczM10sXCJtYXBwZWRcIixbMjQ5OTZdXSxbWzE5NDczNCwxOTQ3MzRdLFwibWFwcGVkXCIsWzI1MDA3XV0sW1sxOTQ3MzUsMTk0NzM1XSxcIm1hcHBlZFwiLFsyNTA1NF1dLFtbMTk0NzM2LDE5NDczNl0sXCJtYXBwZWRcIixbMjUwNzRdXSxbWzE5NDczNywxOTQ3MzddLFwibWFwcGVkXCIsWzI1MDc4XV0sW1sxOTQ3MzgsMTk0NzM4XSxcIm1hcHBlZFwiLFsyNTEwNF1dLFtbMTk0NzM5LDE5NDczOV0sXCJtYXBwZWRcIixbMjUxMTVdXSxbWzE5NDc0MCwxOTQ3NDBdLFwibWFwcGVkXCIsWzI1MTgxXV0sW1sxOTQ3NDEsMTk0NzQxXSxcIm1hcHBlZFwiLFsyNTI2NV1dLFtbMTk0NzQyLDE5NDc0Ml0sXCJtYXBwZWRcIixbMjUzMDBdXSxbWzE5NDc0MywxOTQ3NDNdLFwibWFwcGVkXCIsWzI1NDI0XV0sW1sxOTQ3NDQsMTk0NzQ0XSxcIm1hcHBlZFwiLFsxNDIwOTJdXSxbWzE5NDc0NSwxOTQ3NDVdLFwibWFwcGVkXCIsWzI1NDA1XV0sW1sxOTQ3NDYsMTk0NzQ2XSxcIm1hcHBlZFwiLFsyNTM0MF1dLFtbMTk0NzQ3LDE5NDc0N10sXCJtYXBwZWRcIixbMjU0NDhdXSxbWzE5NDc0OCwxOTQ3NDhdLFwibWFwcGVkXCIsWzI1NDc1XV0sW1sxOTQ3NDksMTk0NzQ5XSxcIm1hcHBlZFwiLFsyNTU3Ml1dLFtbMTk0NzUwLDE5NDc1MF0sXCJtYXBwZWRcIixbMTQyMzIxXV0sW1sxOTQ3NTEsMTk0NzUxXSxcIm1hcHBlZFwiLFsyNTYzNF1dLFtbMTk0NzUyLDE5NDc1Ml0sXCJtYXBwZWRcIixbMjU1NDFdXSxbWzE5NDc1MywxOTQ3NTNdLFwibWFwcGVkXCIsWzI1NTEzXV0sW1sxOTQ3NTQsMTk0NzU0XSxcIm1hcHBlZFwiLFsxNDg5NF1dLFtbMTk0NzU1LDE5NDc1NV0sXCJtYXBwZWRcIixbMjU3MDVdXSxbWzE5NDc1NiwxOTQ3NTZdLFwibWFwcGVkXCIsWzI1NzI2XV0sW1sxOTQ3NTcsMTk0NzU3XSxcIm1hcHBlZFwiLFsyNTc1N11dLFtbMTk0NzU4LDE5NDc1OF0sXCJtYXBwZWRcIixbMjU3MTldXSxbWzE5NDc1OSwxOTQ3NTldLFwibWFwcGVkXCIsWzE0OTU2XV0sW1sxOTQ3NjAsMTk0NzYwXSxcIm1hcHBlZFwiLFsyNTkzNV1dLFtbMTk0NzYxLDE5NDc2MV0sXCJtYXBwZWRcIixbMjU5NjRdXSxbWzE5NDc2MiwxOTQ3NjJdLFwibWFwcGVkXCIsWzE0MzM3MF1dLFtbMTk0NzYzLDE5NDc2M10sXCJtYXBwZWRcIixbMjYwODNdXSxbWzE5NDc2NCwxOTQ3NjRdLFwibWFwcGVkXCIsWzI2MzYwXV0sW1sxOTQ3NjUsMTk0NzY1XSxcIm1hcHBlZFwiLFsyNjE4NV1dLFtbMTk0NzY2LDE5NDc2Nl0sXCJtYXBwZWRcIixbMTUxMjldXSxbWzE5NDc2NywxOTQ3NjddLFwibWFwcGVkXCIsWzI2MjU3XV0sW1sxOTQ3NjgsMTk0NzY4XSxcIm1hcHBlZFwiLFsxNTExMl1dLFtbMTk0NzY5LDE5NDc2OV0sXCJtYXBwZWRcIixbMTUwNzZdXSxbWzE5NDc3MCwxOTQ3NzBdLFwibWFwcGVkXCIsWzIwODgyXV0sW1sxOTQ3NzEsMTk0NzcxXSxcIm1hcHBlZFwiLFsyMDg4NV1dLFtbMTk0NzcyLDE5NDc3Ml0sXCJtYXBwZWRcIixbMjYzNjhdXSxbWzE5NDc3MywxOTQ3NzNdLFwibWFwcGVkXCIsWzI2MjY4XV0sW1sxOTQ3NzQsMTk0Nzc0XSxcIm1hcHBlZFwiLFszMjk0MV1dLFtbMTk0Nzc1LDE5NDc3NV0sXCJtYXBwZWRcIixbMTczNjldXSxbWzE5NDc3NiwxOTQ3NzZdLFwibWFwcGVkXCIsWzI2MzkxXV0sW1sxOTQ3NzcsMTk0Nzc3XSxcIm1hcHBlZFwiLFsyNjM5NV1dLFtbMTk0Nzc4LDE5NDc3OF0sXCJtYXBwZWRcIixbMjY0MDFdXSxbWzE5NDc3OSwxOTQ3NzldLFwibWFwcGVkXCIsWzI2NDYyXV0sW1sxOTQ3ODAsMTk0NzgwXSxcIm1hcHBlZFwiLFsyNjQ1MV1dLFtbMTk0NzgxLDE5NDc4MV0sXCJtYXBwZWRcIixbMTQ0MzIzXV0sW1sxOTQ3ODIsMTk0NzgyXSxcIm1hcHBlZFwiLFsxNTE3N11dLFtbMTk0NzgzLDE5NDc4M10sXCJtYXBwZWRcIixbMjY2MThdXSxbWzE5NDc4NCwxOTQ3ODRdLFwibWFwcGVkXCIsWzI2NTAxXV0sW1sxOTQ3ODUsMTk0Nzg1XSxcIm1hcHBlZFwiLFsyNjcwNl1dLFtbMTk0Nzg2LDE5NDc4Nl0sXCJtYXBwZWRcIixbMjY3NTddXSxbWzE5NDc4NywxOTQ3ODddLFwibWFwcGVkXCIsWzE0NDQ5M11dLFtbMTk0Nzg4LDE5NDc4OF0sXCJtYXBwZWRcIixbMjY3NjZdXSxbWzE5NDc4OSwxOTQ3ODldLFwibWFwcGVkXCIsWzI2NjU1XV0sW1sxOTQ3OTAsMTk0NzkwXSxcIm1hcHBlZFwiLFsyNjkwMF1dLFtbMTk0NzkxLDE5NDc5MV0sXCJtYXBwZWRcIixbMTUyNjFdXSxbWzE5NDc5MiwxOTQ3OTJdLFwibWFwcGVkXCIsWzI2OTQ2XV0sW1sxOTQ3OTMsMTk0NzkzXSxcIm1hcHBlZFwiLFsyNzA0M11dLFtbMTk0Nzk0LDE5NDc5NF0sXCJtYXBwZWRcIixbMjcxMTRdXSxbWzE5NDc5NSwxOTQ3OTVdLFwibWFwcGVkXCIsWzI3MzA0XV0sW1sxOTQ3OTYsMTk0Nzk2XSxcIm1hcHBlZFwiLFsxNDUwNTldXSxbWzE5NDc5NywxOTQ3OTddLFwibWFwcGVkXCIsWzI3MzU1XV0sW1sxOTQ3OTgsMTk0Nzk4XSxcIm1hcHBlZFwiLFsxNTM4NF1dLFtbMTk0Nzk5LDE5NDc5OV0sXCJtYXBwZWRcIixbMjc0MjVdXSxbWzE5NDgwMCwxOTQ4MDBdLFwibWFwcGVkXCIsWzE0NTU3NV1dLFtbMTk0ODAxLDE5NDgwMV0sXCJtYXBwZWRcIixbMjc0NzZdXSxbWzE5NDgwMiwxOTQ4MDJdLFwibWFwcGVkXCIsWzE1NDM4XV0sW1sxOTQ4MDMsMTk0ODAzXSxcIm1hcHBlZFwiLFsyNzUwNl1dLFtbMTk0ODA0LDE5NDgwNF0sXCJtYXBwZWRcIixbMjc1NTFdXSxbWzE5NDgwNSwxOTQ4MDVdLFwibWFwcGVkXCIsWzI3NTc4XV0sW1sxOTQ4MDYsMTk0ODA2XSxcIm1hcHBlZFwiLFsyNzU3OV1dLFtbMTk0ODA3LDE5NDgwN10sXCJtYXBwZWRcIixbMTQ2MDYxXV0sW1sxOTQ4MDgsMTk0ODA4XSxcIm1hcHBlZFwiLFsxMzg1MDddXSxbWzE5NDgwOSwxOTQ4MDldLFwibWFwcGVkXCIsWzE0NjE3MF1dLFtbMTk0ODEwLDE5NDgxMF0sXCJtYXBwZWRcIixbMjc3MjZdXSxbWzE5NDgxMSwxOTQ4MTFdLFwibWFwcGVkXCIsWzE0NjYyMF1dLFtbMTk0ODEyLDE5NDgxMl0sXCJtYXBwZWRcIixbMjc4MzldXSxbWzE5NDgxMywxOTQ4MTNdLFwibWFwcGVkXCIsWzI3ODUzXV0sW1sxOTQ4MTQsMTk0ODE0XSxcIm1hcHBlZFwiLFsyNzc1MV1dLFtbMTk0ODE1LDE5NDgxNV0sXCJtYXBwZWRcIixbMjc5MjZdXSxbWzE5NDgxNiwxOTQ4MTZdLFwibWFwcGVkXCIsWzI3OTY2XV0sW1sxOTQ4MTcsMTk0ODE3XSxcIm1hcHBlZFwiLFsyODAyM11dLFtbMTk0ODE4LDE5NDgxOF0sXCJtYXBwZWRcIixbMjc5NjldXSxbWzE5NDgxOSwxOTQ4MTldLFwibWFwcGVkXCIsWzI4MDA5XV0sW1sxOTQ4MjAsMTk0ODIwXSxcIm1hcHBlZFwiLFsyODAyNF1dLFtbMTk0ODIxLDE5NDgyMV0sXCJtYXBwZWRcIixbMjgwMzddXSxbWzE5NDgyMiwxOTQ4MjJdLFwibWFwcGVkXCIsWzE0NjcxOF1dLFtbMTk0ODIzLDE5NDgyM10sXCJtYXBwZWRcIixbMjc5NTZdXSxbWzE5NDgyNCwxOTQ4MjRdLFwibWFwcGVkXCIsWzI4MjA3XV0sW1sxOTQ4MjUsMTk0ODI1XSxcIm1hcHBlZFwiLFsyODI3MF1dLFtbMTk0ODI2LDE5NDgyNl0sXCJtYXBwZWRcIixbMTU2NjddXSxbWzE5NDgyNywxOTQ4MjddLFwibWFwcGVkXCIsWzI4MzYzXV0sW1sxOTQ4MjgsMTk0ODI4XSxcIm1hcHBlZFwiLFsyODM1OV1dLFtbMTk0ODI5LDE5NDgyOV0sXCJtYXBwZWRcIixbMTQ3MTUzXV0sW1sxOTQ4MzAsMTk0ODMwXSxcIm1hcHBlZFwiLFsyODE1M11dLFtbMTk0ODMxLDE5NDgzMV0sXCJtYXBwZWRcIixbMjg1MjZdXSxbWzE5NDgzMiwxOTQ4MzJdLFwibWFwcGVkXCIsWzE0NzI5NF1dLFtbMTk0ODMzLDE5NDgzM10sXCJtYXBwZWRcIixbMTQ3MzQyXV0sW1sxOTQ4MzQsMTk0ODM0XSxcIm1hcHBlZFwiLFsyODYxNF1dLFtbMTk0ODM1LDE5NDgzNV0sXCJtYXBwZWRcIixbMjg3MjldXSxbWzE5NDgzNiwxOTQ4MzZdLFwibWFwcGVkXCIsWzI4NzAyXV0sW1sxOTQ4MzcsMTk0ODM3XSxcIm1hcHBlZFwiLFsyODY5OV1dLFtbMTk0ODM4LDE5NDgzOF0sXCJtYXBwZWRcIixbMTU3NjZdXSxbWzE5NDgzOSwxOTQ4MzldLFwibWFwcGVkXCIsWzI4NzQ2XV0sW1sxOTQ4NDAsMTk0ODQwXSxcIm1hcHBlZFwiLFsyODc5N11dLFtbMTk0ODQxLDE5NDg0MV0sXCJtYXBwZWRcIixbMjg3OTFdXSxbWzE5NDg0MiwxOTQ4NDJdLFwibWFwcGVkXCIsWzI4ODQ1XV0sW1sxOTQ4NDMsMTk0ODQzXSxcIm1hcHBlZFwiLFsxMzIzODldXSxbWzE5NDg0NCwxOTQ4NDRdLFwibWFwcGVkXCIsWzI4OTk3XV0sW1sxOTQ4NDUsMTk0ODQ1XSxcIm1hcHBlZFwiLFsxNDgwNjddXSxbWzE5NDg0NiwxOTQ4NDZdLFwibWFwcGVkXCIsWzI5MDg0XV0sW1sxOTQ4NDcsMTk0ODQ3XSxcImRpc2FsbG93ZWRcIl0sW1sxOTQ4NDgsMTk0ODQ4XSxcIm1hcHBlZFwiLFsyOTIyNF1dLFtbMTk0ODQ5LDE5NDg0OV0sXCJtYXBwZWRcIixbMjkyMzddXSxbWzE5NDg1MCwxOTQ4NTBdLFwibWFwcGVkXCIsWzI5MjY0XV0sW1sxOTQ4NTEsMTk0ODUxXSxcIm1hcHBlZFwiLFsxNDkwMDBdXSxbWzE5NDg1MiwxOTQ4NTJdLFwibWFwcGVkXCIsWzI5MzEyXV0sW1sxOTQ4NTMsMTk0ODUzXSxcIm1hcHBlZFwiLFsyOTMzM11dLFtbMTk0ODU0LDE5NDg1NF0sXCJtYXBwZWRcIixbMTQ5MzAxXV0sW1sxOTQ4NTUsMTk0ODU1XSxcIm1hcHBlZFwiLFsxNDk1MjRdXSxbWzE5NDg1NiwxOTQ4NTZdLFwibWFwcGVkXCIsWzI5NTYyXV0sW1sxOTQ4NTcsMTk0ODU3XSxcIm1hcHBlZFwiLFsyOTU3OV1dLFtbMTk0ODU4LDE5NDg1OF0sXCJtYXBwZWRcIixbMTYwNDRdXSxbWzE5NDg1OSwxOTQ4NTldLFwibWFwcGVkXCIsWzI5NjA1XV0sW1sxOTQ4NjAsMTk0ODYxXSxcIm1hcHBlZFwiLFsxNjA1Nl1dLFtbMTk0ODYyLDE5NDg2Ml0sXCJtYXBwZWRcIixbMjk3NjddXSxbWzE5NDg2MywxOTQ4NjNdLFwibWFwcGVkXCIsWzI5Nzg4XV0sW1sxOTQ4NjQsMTk0ODY0XSxcIm1hcHBlZFwiLFsyOTgwOV1dLFtbMTk0ODY1LDE5NDg2NV0sXCJtYXBwZWRcIixbMjk4MjldXSxbWzE5NDg2NiwxOTQ4NjZdLFwibWFwcGVkXCIsWzI5ODk4XV0sW1sxOTQ4NjcsMTk0ODY3XSxcIm1hcHBlZFwiLFsxNjE1NV1dLFtbMTk0ODY4LDE5NDg2OF0sXCJtYXBwZWRcIixbMjk5ODhdXSxbWzE5NDg2OSwxOTQ4NjldLFwibWFwcGVkXCIsWzE1MDU4Ml1dLFtbMTk0ODcwLDE5NDg3MF0sXCJtYXBwZWRcIixbMzAwMTRdXSxbWzE5NDg3MSwxOTQ4NzFdLFwibWFwcGVkXCIsWzE1MDY3NF1dLFtbMTk0ODcyLDE5NDg3Ml0sXCJtYXBwZWRcIixbMzAwNjRdXSxbWzE5NDg3MywxOTQ4NzNdLFwibWFwcGVkXCIsWzEzOTY3OV1dLFtbMTk0ODc0LDE5NDg3NF0sXCJtYXBwZWRcIixbMzAyMjRdXSxbWzE5NDg3NSwxOTQ4NzVdLFwibWFwcGVkXCIsWzE1MTQ1N11dLFtbMTk0ODc2LDE5NDg3Nl0sXCJtYXBwZWRcIixbMTUxNDgwXV0sW1sxOTQ4NzcsMTk0ODc3XSxcIm1hcHBlZFwiLFsxNTE2MjBdXSxbWzE5NDg3OCwxOTQ4NzhdLFwibWFwcGVkXCIsWzE2MzgwXV0sW1sxOTQ4NzksMTk0ODc5XSxcIm1hcHBlZFwiLFsxNjM5Ml1dLFtbMTk0ODgwLDE5NDg4MF0sXCJtYXBwZWRcIixbMzA0NTJdXSxbWzE5NDg4MSwxOTQ4ODFdLFwibWFwcGVkXCIsWzE1MTc5NV1dLFtbMTk0ODgyLDE5NDg4Ml0sXCJtYXBwZWRcIixbMTUxNzk0XV0sW1sxOTQ4ODMsMTk0ODgzXSxcIm1hcHBlZFwiLFsxNTE4MzNdXSxbWzE5NDg4NCwxOTQ4ODRdLFwibWFwcGVkXCIsWzE1MTg1OV1dLFtbMTk0ODg1LDE5NDg4NV0sXCJtYXBwZWRcIixbMzA0OTRdXSxbWzE5NDg4NiwxOTQ4ODddLFwibWFwcGVkXCIsWzMwNDk1XV0sW1sxOTQ4ODgsMTk0ODg4XSxcIm1hcHBlZFwiLFszMDUzOF1dLFtbMTk0ODg5LDE5NDg4OV0sXCJtYXBwZWRcIixbMTY0NDFdXSxbWzE5NDg5MCwxOTQ4OTBdLFwibWFwcGVkXCIsWzMwNjAzXV0sW1sxOTQ4OTEsMTk0ODkxXSxcIm1hcHBlZFwiLFsxNjQ1NF1dLFtbMTk0ODkyLDE5NDg5Ml0sXCJtYXBwZWRcIixbMTY1MzRdXSxbWzE5NDg5MywxOTQ4OTNdLFwibWFwcGVkXCIsWzE1MjYwNV1dLFtbMTk0ODk0LDE5NDg5NF0sXCJtYXBwZWRcIixbMzA3OThdXSxbWzE5NDg5NSwxOTQ4OTVdLFwibWFwcGVkXCIsWzMwODYwXV0sW1sxOTQ4OTYsMTk0ODk2XSxcIm1hcHBlZFwiLFszMDkyNF1dLFtbMTk0ODk3LDE5NDg5N10sXCJtYXBwZWRcIixbMTY2MTFdXSxbWzE5NDg5OCwxOTQ4OThdLFwibWFwcGVkXCIsWzE1MzEyNl1dLFtbMTk0ODk5LDE5NDg5OV0sXCJtYXBwZWRcIixbMzEwNjJdXSxbWzE5NDkwMCwxOTQ5MDBdLFwibWFwcGVkXCIsWzE1MzI0Ml1dLFtbMTk0OTAxLDE5NDkwMV0sXCJtYXBwZWRcIixbMTUzMjg1XV0sW1sxOTQ5MDIsMTk0OTAyXSxcIm1hcHBlZFwiLFszMTExOV1dLFtbMTk0OTAzLDE5NDkwM10sXCJtYXBwZWRcIixbMzEyMTFdXSxbWzE5NDkwNCwxOTQ5MDRdLFwibWFwcGVkXCIsWzE2Njg3XV0sW1sxOTQ5MDUsMTk0OTA1XSxcIm1hcHBlZFwiLFszMTI5Nl1dLFtbMTk0OTA2LDE5NDkwNl0sXCJtYXBwZWRcIixbMzEzMDZdXSxbWzE5NDkwNywxOTQ5MDddLFwibWFwcGVkXCIsWzMxMzExXV0sW1sxOTQ5MDgsMTk0OTA4XSxcIm1hcHBlZFwiLFsxNTM5ODBdXSxbWzE5NDkwOSwxOTQ5MTBdLFwibWFwcGVkXCIsWzE1NDI3OV1dLFtbMTk0OTExLDE5NDkxMV0sXCJkaXNhbGxvd2VkXCJdLFtbMTk0OTEyLDE5NDkxMl0sXCJtYXBwZWRcIixbMTY4OThdXSxbWzE5NDkxMywxOTQ5MTNdLFwibWFwcGVkXCIsWzE1NDUzOV1dLFtbMTk0OTE0LDE5NDkxNF0sXCJtYXBwZWRcIixbMzE2ODZdXSxbWzE5NDkxNSwxOTQ5MTVdLFwibWFwcGVkXCIsWzMxNjg5XV0sW1sxOTQ5MTYsMTk0OTE2XSxcIm1hcHBlZFwiLFsxNjkzNV1dLFtbMTk0OTE3LDE5NDkxN10sXCJtYXBwZWRcIixbMTU0NzUyXV0sW1sxOTQ5MTgsMTk0OTE4XSxcIm1hcHBlZFwiLFszMTk1NF1dLFtbMTk0OTE5LDE5NDkxOV0sXCJtYXBwZWRcIixbMTcwNTZdXSxbWzE5NDkyMCwxOTQ5MjBdLFwibWFwcGVkXCIsWzMxOTc2XV0sW1sxOTQ5MjEsMTk0OTIxXSxcIm1hcHBlZFwiLFszMTk3MV1dLFtbMTk0OTIyLDE5NDkyMl0sXCJtYXBwZWRcIixbMzIwMDBdXSxbWzE5NDkyMywxOTQ5MjNdLFwibWFwcGVkXCIsWzE1NTUyNl1dLFtbMTk0OTI0LDE5NDkyNF0sXCJtYXBwZWRcIixbMzIwOTldXSxbWzE5NDkyNSwxOTQ5MjVdLFwibWFwcGVkXCIsWzE3MTUzXV0sW1sxOTQ5MjYsMTk0OTI2XSxcIm1hcHBlZFwiLFszMjE5OV1dLFtbMTk0OTI3LDE5NDkyN10sXCJtYXBwZWRcIixbMzIyNThdXSxbWzE5NDkyOCwxOTQ5MjhdLFwibWFwcGVkXCIsWzMyMzI1XV0sW1sxOTQ5MjksMTk0OTI5XSxcIm1hcHBlZFwiLFsxNzIwNF1dLFtbMTk0OTMwLDE5NDkzMF0sXCJtYXBwZWRcIixbMTU2MjAwXV0sW1sxOTQ5MzEsMTk0OTMxXSxcIm1hcHBlZFwiLFsxNTYyMzFdXSxbWzE5NDkzMiwxOTQ5MzJdLFwibWFwcGVkXCIsWzE3MjQxXV0sW1sxOTQ5MzMsMTk0OTMzXSxcIm1hcHBlZFwiLFsxNTYzNzddXSxbWzE5NDkzNCwxOTQ5MzRdLFwibWFwcGVkXCIsWzMyNjM0XV0sW1sxOTQ5MzUsMTk0OTM1XSxcIm1hcHBlZFwiLFsxNTY0NzhdXSxbWzE5NDkzNiwxOTQ5MzZdLFwibWFwcGVkXCIsWzMyNjYxXV0sW1sxOTQ5MzcsMTk0OTM3XSxcIm1hcHBlZFwiLFszMjc2Ml1dLFtbMTk0OTM4LDE5NDkzOF0sXCJtYXBwZWRcIixbMzI3NzNdXSxbWzE5NDkzOSwxOTQ5MzldLFwibWFwcGVkXCIsWzE1Njg5MF1dLFtbMTk0OTQwLDE5NDk0MF0sXCJtYXBwZWRcIixbMTU2OTYzXV0sW1sxOTQ5NDEsMTk0OTQxXSxcIm1hcHBlZFwiLFszMjg2NF1dLFtbMTk0OTQyLDE5NDk0Ml0sXCJtYXBwZWRcIixbMTU3MDk2XV0sW1sxOTQ5NDMsMTk0OTQzXSxcIm1hcHBlZFwiLFszMjg4MF1dLFtbMTk0OTQ0LDE5NDk0NF0sXCJtYXBwZWRcIixbMTQ0MjIzXV0sW1sxOTQ5NDUsMTk0OTQ1XSxcIm1hcHBlZFwiLFsxNzM2NV1dLFtbMTk0OTQ2LDE5NDk0Nl0sXCJtYXBwZWRcIixbMzI5NDZdXSxbWzE5NDk0NywxOTQ5NDddLFwibWFwcGVkXCIsWzMzMDI3XV0sW1sxOTQ5NDgsMTk0OTQ4XSxcIm1hcHBlZFwiLFsxNzQxOV1dLFtbMTk0OTQ5LDE5NDk0OV0sXCJtYXBwZWRcIixbMzMwODZdXSxbWzE5NDk1MCwxOTQ5NTBdLFwibWFwcGVkXCIsWzIzMjIxXV0sW1sxOTQ5NTEsMTk0OTUxXSxcIm1hcHBlZFwiLFsxNTc2MDddXSxbWzE5NDk1MiwxOTQ5NTJdLFwibWFwcGVkXCIsWzE1NzYyMV1dLFtbMTk0OTUzLDE5NDk1M10sXCJtYXBwZWRcIixbMTQ0Mjc1XV0sW1sxOTQ5NTQsMTk0OTU0XSxcIm1hcHBlZFwiLFsxNDQyODRdXSxbWzE5NDk1NSwxOTQ5NTVdLFwibWFwcGVkXCIsWzMzMjgxXV0sW1sxOTQ5NTYsMTk0OTU2XSxcIm1hcHBlZFwiLFszMzI4NF1dLFtbMTk0OTU3LDE5NDk1N10sXCJtYXBwZWRcIixbMzY3NjZdXSxbWzE5NDk1OCwxOTQ5NThdLFwibWFwcGVkXCIsWzE3NTE1XV0sW1sxOTQ5NTksMTk0OTU5XSxcIm1hcHBlZFwiLFszMzQyNV1dLFtbMTk0OTYwLDE5NDk2MF0sXCJtYXBwZWRcIixbMzM0MTldXSxbWzE5NDk2MSwxOTQ5NjFdLFwibWFwcGVkXCIsWzMzNDM3XV0sW1sxOTQ5NjIsMTk0OTYyXSxcIm1hcHBlZFwiLFsyMTE3MV1dLFtbMTk0OTYzLDE5NDk2M10sXCJtYXBwZWRcIixbMzM0NTddXSxbWzE5NDk2NCwxOTQ5NjRdLFwibWFwcGVkXCIsWzMzNDU5XV0sW1sxOTQ5NjUsMTk0OTY1XSxcIm1hcHBlZFwiLFszMzQ2OV1dLFtbMTk0OTY2LDE5NDk2Nl0sXCJtYXBwZWRcIixbMzM1MTBdXSxbWzE5NDk2NywxOTQ5NjddLFwibWFwcGVkXCIsWzE1ODUyNF1dLFtbMTk0OTY4LDE5NDk2OF0sXCJtYXBwZWRcIixbMzM1MDldXSxbWzE5NDk2OSwxOTQ5NjldLFwibWFwcGVkXCIsWzMzNTY1XV0sW1sxOTQ5NzAsMTk0OTcwXSxcIm1hcHBlZFwiLFszMzYzNV1dLFtbMTk0OTcxLDE5NDk3MV0sXCJtYXBwZWRcIixbMzM3MDldXSxbWzE5NDk3MiwxOTQ5NzJdLFwibWFwcGVkXCIsWzMzNTcxXV0sW1sxOTQ5NzMsMTk0OTczXSxcIm1hcHBlZFwiLFszMzcyNV1dLFtbMTk0OTc0LDE5NDk3NF0sXCJtYXBwZWRcIixbMzM3NjddXSxbWzE5NDk3NSwxOTQ5NzVdLFwibWFwcGVkXCIsWzMzODc5XV0sW1sxOTQ5NzYsMTk0OTc2XSxcIm1hcHBlZFwiLFszMzYxOV1dLFtbMTk0OTc3LDE5NDk3N10sXCJtYXBwZWRcIixbMzM3MzhdXSxbWzE5NDk3OCwxOTQ5NzhdLFwibWFwcGVkXCIsWzMzNzQwXV0sW1sxOTQ5NzksMTk0OTc5XSxcIm1hcHBlZFwiLFszMzc1Nl1dLFtbMTk0OTgwLDE5NDk4MF0sXCJtYXBwZWRcIixbMTU4Nzc0XV0sW1sxOTQ5ODEsMTk0OTgxXSxcIm1hcHBlZFwiLFsxNTkwODNdXSxbWzE5NDk4MiwxOTQ5ODJdLFwibWFwcGVkXCIsWzE1ODkzM11dLFtbMTk0OTgzLDE5NDk4M10sXCJtYXBwZWRcIixbMTc3MDddXSxbWzE5NDk4NCwxOTQ5ODRdLFwibWFwcGVkXCIsWzM0MDMzXV0sW1sxOTQ5ODUsMTk0OTg1XSxcIm1hcHBlZFwiLFszNDAzNV1dLFtbMTk0OTg2LDE5NDk4Nl0sXCJtYXBwZWRcIixbMzQwNzBdXSxbWzE5NDk4NywxOTQ5ODddLFwibWFwcGVkXCIsWzE2MDcxNF1dLFtbMTk0OTg4LDE5NDk4OF0sXCJtYXBwZWRcIixbMzQxNDhdXSxbWzE5NDk4OSwxOTQ5ODldLFwibWFwcGVkXCIsWzE1OTUzMl1dLFtbMTk0OTkwLDE5NDk5MF0sXCJtYXBwZWRcIixbMTc3NTddXSxbWzE5NDk5MSwxOTQ5OTFdLFwibWFwcGVkXCIsWzE3NzYxXV0sW1sxOTQ5OTIsMTk0OTkyXSxcIm1hcHBlZFwiLFsxNTk2NjVdXSxbWzE5NDk5MywxOTQ5OTNdLFwibWFwcGVkXCIsWzE1OTk1NF1dLFtbMTk0OTk0LDE5NDk5NF0sXCJtYXBwZWRcIixbMTc3NzFdXSxbWzE5NDk5NSwxOTQ5OTVdLFwibWFwcGVkXCIsWzM0Mzg0XV0sW1sxOTQ5OTYsMTk0OTk2XSxcIm1hcHBlZFwiLFszNDM5Nl1dLFtbMTk0OTk3LDE5NDk5N10sXCJtYXBwZWRcIixbMzQ0MDddXSxbWzE5NDk5OCwxOTQ5OThdLFwibWFwcGVkXCIsWzM0NDA5XV0sW1sxOTQ5OTksMTk0OTk5XSxcIm1hcHBlZFwiLFszNDQ3M11dLFtbMTk1MDAwLDE5NTAwMF0sXCJtYXBwZWRcIixbMzQ0NDBdXSxbWzE5NTAwMSwxOTUwMDFdLFwibWFwcGVkXCIsWzM0NTc0XV0sW1sxOTUwMDIsMTk1MDAyXSxcIm1hcHBlZFwiLFszNDUzMF1dLFtbMTk1MDAzLDE5NTAwM10sXCJtYXBwZWRcIixbMzQ2ODFdXSxbWzE5NTAwNCwxOTUwMDRdLFwibWFwcGVkXCIsWzM0NjAwXV0sW1sxOTUwMDUsMTk1MDA1XSxcIm1hcHBlZFwiLFszNDY2N11dLFtbMTk1MDA2LDE5NTAwNl0sXCJtYXBwZWRcIixbMzQ2OTRdXSxbWzE5NTAwNywxOTUwMDddLFwiZGlzYWxsb3dlZFwiXSxbWzE5NTAwOCwxOTUwMDhdLFwibWFwcGVkXCIsWzM0Nzg1XV0sW1sxOTUwMDksMTk1MDA5XSxcIm1hcHBlZFwiLFszNDgxN11dLFtbMTk1MDEwLDE5NTAxMF0sXCJtYXBwZWRcIixbMTc5MTNdXSxbWzE5NTAxMSwxOTUwMTFdLFwibWFwcGVkXCIsWzM0OTEyXV0sW1sxOTUwMTIsMTk1MDEyXSxcIm1hcHBlZFwiLFszNDkxNV1dLFtbMTk1MDEzLDE5NTAxM10sXCJtYXBwZWRcIixbMTYxMzgzXV0sW1sxOTUwMTQsMTk1MDE0XSxcIm1hcHBlZFwiLFszNTAzMV1dLFtbMTk1MDE1LDE5NTAxNV0sXCJtYXBwZWRcIixbMzUwMzhdXSxbWzE5NTAxNiwxOTUwMTZdLFwibWFwcGVkXCIsWzE3OTczXV0sW1sxOTUwMTcsMTk1MDE3XSxcIm1hcHBlZFwiLFszNTA2Nl1dLFtbMTk1MDE4LDE5NTAxOF0sXCJtYXBwZWRcIixbMTM0OTldXSxbWzE5NTAxOSwxOTUwMTldLFwibWFwcGVkXCIsWzE2MTk2Nl1dLFtbMTk1MDIwLDE5NTAyMF0sXCJtYXBwZWRcIixbMTYyMTUwXV0sW1sxOTUwMjEsMTk1MDIxXSxcIm1hcHBlZFwiLFsxODExMF1dLFtbMTk1MDIyLDE5NTAyMl0sXCJtYXBwZWRcIixbMTgxMTldXSxbWzE5NTAyMywxOTUwMjNdLFwibWFwcGVkXCIsWzM1NDg4XV0sW1sxOTUwMjQsMTk1MDI0XSxcIm1hcHBlZFwiLFszNTU2NV1dLFtbMTk1MDI1LDE5NTAyNV0sXCJtYXBwZWRcIixbMzU3MjJdXSxbWzE5NTAyNiwxOTUwMjZdLFwibWFwcGVkXCIsWzM1OTI1XV0sW1sxOTUwMjcsMTk1MDI3XSxcIm1hcHBlZFwiLFsxNjI5ODRdXSxbWzE5NTAyOCwxOTUwMjhdLFwibWFwcGVkXCIsWzM2MDExXV0sW1sxOTUwMjksMTk1MDI5XSxcIm1hcHBlZFwiLFszNjAzM11dLFtbMTk1MDMwLDE5NTAzMF0sXCJtYXBwZWRcIixbMzYxMjNdXSxbWzE5NTAzMSwxOTUwMzFdLFwibWFwcGVkXCIsWzM2MjE1XV0sW1sxOTUwMzIsMTk1MDMyXSxcIm1hcHBlZFwiLFsxNjM2MzFdXSxbWzE5NTAzMywxOTUwMzNdLFwibWFwcGVkXCIsWzEzMzEyNF1dLFtbMTk1MDM0LDE5NTAzNF0sXCJtYXBwZWRcIixbMzYyOTldXSxbWzE5NTAzNSwxOTUwMzVdLFwibWFwcGVkXCIsWzM2Mjg0XV0sW1sxOTUwMzYsMTk1MDM2XSxcIm1hcHBlZFwiLFszNjMzNl1dLFtbMTk1MDM3LDE5NTAzN10sXCJtYXBwZWRcIixbMTMzMzQyXV0sW1sxOTUwMzgsMTk1MDM4XSxcIm1hcHBlZFwiLFszNjU2NF1dLFtbMTk1MDM5LDE5NTAzOV0sXCJtYXBwZWRcIixbMzY2NjRdXSxbWzE5NTA0MCwxOTUwNDBdLFwibWFwcGVkXCIsWzE2NTMzMF1dLFtbMTk1MDQxLDE5NTA0MV0sXCJtYXBwZWRcIixbMTY1MzU3XV0sW1sxOTUwNDIsMTk1MDQyXSxcIm1hcHBlZFwiLFszNzAxMl1dLFtbMTk1MDQzLDE5NTA0M10sXCJtYXBwZWRcIixbMzcxMDVdXSxbWzE5NTA0NCwxOTUwNDRdLFwibWFwcGVkXCIsWzM3MTM3XV0sW1sxOTUwNDUsMTk1MDQ1XSxcIm1hcHBlZFwiLFsxNjU2NzhdXSxbWzE5NTA0NiwxOTUwNDZdLFwibWFwcGVkXCIsWzM3MTQ3XV0sW1sxOTUwNDcsMTk1MDQ3XSxcIm1hcHBlZFwiLFszNzQzMl1dLFtbMTk1MDQ4LDE5NTA0OF0sXCJtYXBwZWRcIixbMzc1OTFdXSxbWzE5NTA0OSwxOTUwNDldLFwibWFwcGVkXCIsWzM3NTkyXV0sW1sxOTUwNTAsMTk1MDUwXSxcIm1hcHBlZFwiLFszNzUwMF1dLFtbMTk1MDUxLDE5NTA1MV0sXCJtYXBwZWRcIixbMzc4ODFdXSxbWzE5NTA1MiwxOTUwNTJdLFwibWFwcGVkXCIsWzM3OTA5XV0sW1sxOTUwNTMsMTk1MDUzXSxcIm1hcHBlZFwiLFsxNjY5MDZdXSxbWzE5NTA1NCwxOTUwNTRdLFwibWFwcGVkXCIsWzM4MjgzXV0sW1sxOTUwNTUsMTk1MDU1XSxcIm1hcHBlZFwiLFsxODgzN11dLFtbMTk1MDU2LDE5NTA1Nl0sXCJtYXBwZWRcIixbMzgzMjddXSxbWzE5NTA1NywxOTUwNTddLFwibWFwcGVkXCIsWzE2NzI4N11dLFtbMTk1MDU4LDE5NTA1OF0sXCJtYXBwZWRcIixbMTg5MThdXSxbWzE5NTA1OSwxOTUwNTldLFwibWFwcGVkXCIsWzM4NTk1XV0sW1sxOTUwNjAsMTk1MDYwXSxcIm1hcHBlZFwiLFsyMzk4Nl1dLFtbMTk1MDYxLDE5NTA2MV0sXCJtYXBwZWRcIixbMzg2OTFdXSxbWzE5NTA2MiwxOTUwNjJdLFwibWFwcGVkXCIsWzE2ODI2MV1dLFtbMTk1MDYzLDE5NTA2M10sXCJtYXBwZWRcIixbMTY4NDc0XV0sW1sxOTUwNjQsMTk1MDY0XSxcIm1hcHBlZFwiLFsxOTA1NF1dLFtbMTk1MDY1LDE5NTA2NV0sXCJtYXBwZWRcIixbMTkwNjJdXSxbWzE5NTA2NiwxOTUwNjZdLFwibWFwcGVkXCIsWzM4ODgwXV0sW1sxOTUwNjcsMTk1MDY3XSxcIm1hcHBlZFwiLFsxNjg5NzBdXSxbWzE5NTA2OCwxOTUwNjhdLFwibWFwcGVkXCIsWzE5MTIyXV0sW1sxOTUwNjksMTk1MDY5XSxcIm1hcHBlZFwiLFsxNjkxMTBdXSxbWzE5NTA3MCwxOTUwNzFdLFwibWFwcGVkXCIsWzM4OTIzXV0sW1sxOTUwNzIsMTk1MDcyXSxcIm1hcHBlZFwiLFszODk1M11dLFtbMTk1MDczLDE5NTA3M10sXCJtYXBwZWRcIixbMTY5Mzk4XV0sW1sxOTUwNzQsMTk1MDc0XSxcIm1hcHBlZFwiLFszOTEzOF1dLFtbMTk1MDc1LDE5NTA3NV0sXCJtYXBwZWRcIixbMTkyNTFdXSxbWzE5NTA3NiwxOTUwNzZdLFwibWFwcGVkXCIsWzM5MjA5XV0sW1sxOTUwNzcsMTk1MDc3XSxcIm1hcHBlZFwiLFszOTMzNV1dLFtbMTk1MDc4LDE5NTA3OF0sXCJtYXBwZWRcIixbMzkzNjJdXSxbWzE5NTA3OSwxOTUwNzldLFwibWFwcGVkXCIsWzM5NDIyXV0sW1sxOTUwODAsMTk1MDgwXSxcIm1hcHBlZFwiLFsxOTQwNl1dLFtbMTk1MDgxLDE5NTA4MV0sXCJtYXBwZWRcIixbMTcwODAwXV0sW1sxOTUwODIsMTk1MDgyXSxcIm1hcHBlZFwiLFszOTY5OF1dLFtbMTk1MDgzLDE5NTA4M10sXCJtYXBwZWRcIixbNDAwMDBdXSxbWzE5NTA4NCwxOTUwODRdLFwibWFwcGVkXCIsWzQwMTg5XV0sW1sxOTUwODUsMTk1MDg1XSxcIm1hcHBlZFwiLFsxOTY2Ml1dLFtbMTk1MDg2LDE5NTA4Nl0sXCJtYXBwZWRcIixbMTk2OTNdXSxbWzE5NTA4NywxOTUwODddLFwibWFwcGVkXCIsWzQwMjk1XV0sW1sxOTUwODgsMTk1MDg4XSxcIm1hcHBlZFwiLFsxNzIyMzhdXSxbWzE5NTA4OSwxOTUwODldLFwibWFwcGVkXCIsWzE5NzA0XV0sW1sxOTUwOTAsMTk1MDkwXSxcIm1hcHBlZFwiLFsxNzIyOTNdXSxbWzE5NTA5MSwxOTUwOTFdLFwibWFwcGVkXCIsWzE3MjU1OF1dLFtbMTk1MDkyLDE5NTA5Ml0sXCJtYXBwZWRcIixbMTcyNjg5XV0sW1sxOTUwOTMsMTk1MDkzXSxcIm1hcHBlZFwiLFs0MDYzNV1dLFtbMTk1MDk0LDE5NTA5NF0sXCJtYXBwZWRcIixbMTk3OThdXSxbWzE5NTA5NSwxOTUwOTVdLFwibWFwcGVkXCIsWzQwNjk3XV0sW1sxOTUwOTYsMTk1MDk2XSxcIm1hcHBlZFwiLFs0MDcwMl1dLFtbMTk1MDk3LDE5NTA5N10sXCJtYXBwZWRcIixbNDA3MDldXSxbWzE5NTA5OCwxOTUwOThdLFwibWFwcGVkXCIsWzQwNzE5XV0sW1sxOTUwOTksMTk1MDk5XSxcIm1hcHBlZFwiLFs0MDcyNl1dLFtbMTk1MTAwLDE5NTEwMF0sXCJtYXBwZWRcIixbNDA3NjNdXSxbWzE5NTEwMSwxOTUxMDFdLFwibWFwcGVkXCIsWzE3MzU2OF1dLFtbMTk1MTAyLDE5NjYwNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTk2NjA2LDE5NjYwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTk2NjA4LDI2MjE0MV0sXCJkaXNhbGxvd2VkXCJdLFtbMjYyMTQyLDI2MjE0M10sXCJkaXNhbGxvd2VkXCJdLFtbMjYyMTQ0LDMyNzY3N10sXCJkaXNhbGxvd2VkXCJdLFtbMzI3Njc4LDMyNzY3OV0sXCJkaXNhbGxvd2VkXCJdLFtbMzI3NjgwLDM5MzIxM10sXCJkaXNhbGxvd2VkXCJdLFtbMzkzMjE0LDM5MzIxNV0sXCJkaXNhbGxvd2VkXCJdLFtbMzkzMjE2LDQ1ODc0OV0sXCJkaXNhbGxvd2VkXCJdLFtbNDU4NzUwLDQ1ODc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDU4NzUyLDUyNDI4NV0sXCJkaXNhbGxvd2VkXCJdLFtbNTI0Mjg2LDUyNDI4N10sXCJkaXNhbGxvd2VkXCJdLFtbNTI0Mjg4LDU4OTgyMV0sXCJkaXNhbGxvd2VkXCJdLFtbNTg5ODIyLDU4OTgyM10sXCJkaXNhbGxvd2VkXCJdLFtbNTg5ODI0LDY1NTM1N10sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MzU4LDY1NTM1OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MzYwLDcyMDg5M10sXCJkaXNhbGxvd2VkXCJdLFtbNzIwODk0LDcyMDg5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNzIwODk2LDc4NjQyOV0sXCJkaXNhbGxvd2VkXCJdLFtbNzg2NDMwLDc4NjQzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNzg2NDMyLDg1MTk2NV0sXCJkaXNhbGxvd2VkXCJdLFtbODUxOTY2LDg1MTk2N10sXCJkaXNhbGxvd2VkXCJdLFtbODUxOTY4LDkxNzUwMV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTAyLDkxNzUwM10sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTA0LDkxNzUwNF0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTA1LDkxNzUwNV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTA2LDkxNzUzNV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTM2LDkxNzYzMV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NjMyLDkxNzc1OV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NzYwLDkxNzk5OV0sXCJpZ25vcmVkXCJdLFtbOTE4MDAwLDk4MzAzN10sXCJkaXNhbGxvd2VkXCJdLFtbOTgzMDM4LDk4MzAzOV0sXCJkaXNhbGxvd2VkXCJdLFtbOTgzMDQwLDEwNDg1NzNdLFwiZGlzYWxsb3dlZFwiXSxbWzEwNDg1NzQsMTA0ODU3NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTA0ODU3NiwxMTE0MTA5XSxcImRpc2FsbG93ZWRcIl0sW1sxMTE0MTEwLDExMTQxMTFdLFwiZGlzYWxsb3dlZFwiXV0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoXCJwdW55Y29kZVwiKTtcbnZhciBtYXBwaW5nVGFibGUgPSByZXF1aXJlKFwiLi9saWIvbWFwcGluZ1RhYmxlLmpzb25cIik7XG5cbnZhciBQUk9DRVNTSU5HX09QVElPTlMgPSB7XG4gIFRSQU5TSVRJT05BTDogMCxcbiAgTk9OVFJBTlNJVElPTkFMOiAxXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemUoc3RyKSB7IC8vIGZpeCBidWcgaW4gdjhcbiAgcmV0dXJuIHN0ci5zcGxpdCgnXFx1MDAwMCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy5ub3JtYWxpemUoJ05GQycpOyB9KS5qb2luKCdcXHUwMDAwJyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRTdGF0dXModmFsKSB7XG4gIHZhciBzdGFydCA9IDA7XG4gIHZhciBlbmQgPSBtYXBwaW5nVGFibGUubGVuZ3RoIC0gMTtcblxuICB3aGlsZSAoc3RhcnQgPD0gZW5kKSB7XG4gICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKHN0YXJ0ICsgZW5kKSAvIDIpO1xuXG4gICAgdmFyIHRhcmdldCA9IG1hcHBpbmdUYWJsZVttaWRdO1xuICAgIGlmICh0YXJnZXRbMF1bMF0gPD0gdmFsICYmIHRhcmdldFswXVsxXSA+PSB2YWwpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSBlbHNlIGlmICh0YXJnZXRbMF1bMF0gPiB2YWwpIHtcbiAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gbWlkICsgMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHJlZ2V4QXN0cmFsU3ltYm9scyA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG5cbmZ1bmN0aW9uIGNvdW50U3ltYm9scyhzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1xuICAgIC8vIHJlcGxhY2UgZXZlcnkgc3Vycm9nYXRlIHBhaXIgd2l0aCBhIEJNUCBzeW1ib2xcbiAgICAucmVwbGFjZShyZWdleEFzdHJhbFN5bWJvbHMsICdfJylcbiAgICAvLyB0aGVuIGdldCB0aGUgbGVuZ3RoXG4gICAgLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIHZhciBoYXNFcnJvciA9IGZhbHNlO1xuICB2YXIgcHJvY2Vzc2VkID0gXCJcIjtcblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGRvbWFpbl9uYW1lKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBjb2RlUG9pbnQgPSBkb21haW5fbmFtZS5jb2RlUG9pbnRBdChpKTtcbiAgICB2YXIgc3RhdHVzID0gZmluZFN0YXR1cyhjb2RlUG9pbnQpO1xuXG4gICAgc3dpdGNoIChzdGF0dXNbMV0pIHtcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkXCI6XG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlnbm9yZWRcIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWFwcGVkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRldmlhdGlvblwiOlxuICAgICAgICBpZiAocHJvY2Vzc2luZ19vcHRpb24gPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBzdGF0dXNbMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInZhbGlkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyaW5nOiBwcm9jZXNzZWQsXG4gICAgZXJyb3I6IGhhc0Vycm9yXG4gIH07XG59XG5cbnZhciBjb21iaW5pbmdNYXJrc1JlZ2V4ID0gL1tcXHUwMzAwLVxcdTAzNkZcXHUwNDgzLVxcdTA0ODlcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNjEwLVxcdTA2MUFcXHUwNjRCLVxcdTA2NUZcXHUwNjcwXFx1MDZENi1cXHUwNkRDXFx1MDZERi1cXHUwNkU0XFx1MDZFN1xcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExXFx1MDczMC1cXHUwNzRBXFx1MDdBNi1cXHUwN0IwXFx1MDdFQi1cXHUwN0YzXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhFNC1cXHUwOTAzXFx1MDkzQS1cXHUwOTNDXFx1MDkzRS1cXHUwOTRGXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxLVxcdTA5ODNcXHUwOUJDXFx1MDlCRS1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0RcXHUwOUQ3XFx1MDlFMlxcdTA5RTNcXHUwQTAxLVxcdTBBMDNcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE3MFxcdTBBNzFcXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEFCQ1xcdTBBQkUtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRTJcXHUwQUUzXFx1MEIwMS1cXHUwQjAzXFx1MEIzQ1xcdTBCM0UtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjYyXFx1MEI2M1xcdTBCODJcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQ3XFx1MEMwMC1cXHUwQzAzXFx1MEMzRS1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDODEtXFx1MEM4M1xcdTBDQkNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDRTJcXHUwQ0UzXFx1MEQwMS1cXHUwRDAzXFx1MEQzRS1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDREXFx1MEQ1N1xcdTBENjJcXHUwRDYzXFx1MEQ4MlxcdTBEODNcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQjlcXHUwRUJCXFx1MEVCQ1xcdTBFQzgtXFx1MEVDRFxcdTBGMThcXHUwRjE5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRVxcdTBGM0ZcXHUwRjcxLVxcdTBGODRcXHUwRjg2XFx1MEY4N1xcdTBGOEQtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDJCLVxcdTEwM0VcXHUxMDU2LVxcdTEwNTlcXHUxMDVFLVxcdTEwNjBcXHUxMDYyLVxcdTEwNjRcXHUxMDY3LVxcdTEwNkRcXHUxMDcxLVxcdTEwNzRcXHUxMDgyLVxcdTEwOERcXHUxMDhGXFx1MTA5QS1cXHUxMDlEXFx1MTM1RC1cXHUxMzVGXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3QjQtXFx1MTdEM1xcdTE3RERcXHUxODBCLVxcdTE4MERcXHUxOEE5XFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MTlCMC1cXHUxOUMwXFx1MTlDOFxcdTE5QzlcXHUxQTE3LVxcdTFBMUJcXHUxQTU1LVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGXFx1MUFCMC1cXHUxQUJFXFx1MUIwMC1cXHUxQjA0XFx1MUIzNC1cXHUxQjQ0XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQjgyXFx1MUJBMS1cXHUxQkFEXFx1MUJFNi1cXHUxQkYzXFx1MUMyNC1cXHUxQzM3XFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0U4XFx1MUNFRFxcdTFDRjItXFx1MUNGNFxcdTFDRjhcXHUxQ0Y5XFx1MURDMC1cXHUxREY1XFx1MURGQy1cXHUxREZGXFx1MjBEMC1cXHUyMEYwXFx1MkNFRi1cXHUyQ0YxXFx1MkQ3RlxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2Ri1cXHVBNjcyXFx1QTY3NC1cXHVBNjdEXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyMy1cXHVBODI3XFx1QTg4MFxcdUE4ODFcXHVBOEI0LVxcdUE4QzRcXHVBOEUwLVxcdUE4RjFcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTNcXHVBOTgwLVxcdUE5ODNcXHVBOUIzLVxcdUE5QzBcXHVBOUU1XFx1QUEyOS1cXHVBQTM2XFx1QUE0M1xcdUFBNENcXHVBQTREXFx1QUE3Qi1cXHVBQTdEXFx1QUFCMFxcdUFBQjItXFx1QUFCNFxcdUFBQjdcXHVBQUI4XFx1QUFCRVxcdUFBQkZcXHVBQUMxXFx1QUFFQi1cXHVBQUVGXFx1QUFGNVxcdUFBRjZcXHVBQkUzLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkRdfFxcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzAyXFx1REMzOC1cXHVEQzQ2XFx1REM3Ri1cXHVEQzgyXFx1RENCMC1cXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDM0XFx1REQ3M1xcdUREODAtXFx1REQ4MlxcdUREQjMtXFx1RERDMFxcdURFMkMtXFx1REUzN1xcdURFREYtXFx1REVFQVxcdURGMDEtXFx1REYwM1xcdURGM0NcXHVERjNFLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQ0IwLVxcdURDQzNcXHVEREFGLVxcdUREQjVcXHVEREI4LVxcdUREQzBcXHVERTMwLVxcdURFNDBcXHVERUFCLVxcdURFQjddfFxcdUQ4MUFbXFx1REVGMC1cXHVERUY0XFx1REYzMC1cXHVERjM2XXxcXHVEODFCW1xcdURGNTEtXFx1REY3RVxcdURGOEYtXFx1REY5Ml18XFx1RDgyRltcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1LVxcdURENjlcXHVERDZELVxcdURENzJcXHVERDdCLVxcdUREODJcXHVERDg1LVxcdUREOEJcXHVEREFBLVxcdUREQURcXHVERTQyLVxcdURFNDRdfFxcdUQ4M0FbXFx1RENEMC1cXHVEQ0Q2XXxcXHVEQjQwW1xcdUREMDAtXFx1RERFRl0vO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUxhYmVsKGxhYmVsLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICBpZiAobGFiZWwuc3Vic3RyKDAsIDQpID09PSBcInhuLS1cIikge1xuICAgIGxhYmVsID0gcHVueWNvZGUudG9Vbmljb2RlKGxhYmVsKTtcbiAgICBwcm9jZXNzaW5nX29wdGlvbiA9IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUw7XG4gIH1cblxuICB2YXIgZXJyb3IgPSBmYWxzZTtcblxuICBpZiAobm9ybWFsaXplKGxhYmVsKSAhPT0gbGFiZWwgfHxcbiAgICAgIChsYWJlbFszXSA9PT0gXCItXCIgJiYgbGFiZWxbNF0gPT09IFwiLVwiKSB8fFxuICAgICAgbGFiZWxbMF0gPT09IFwiLVwiIHx8IGxhYmVsW2xhYmVsLmxlbmd0aCAtIDFdID09PSBcIi1cIiB8fFxuICAgICAgbGFiZWwuaW5kZXhPZihcIi5cIikgIT09IC0xIHx8XG4gICAgICBsYWJlbC5zZWFyY2goY29tYmluaW5nTWFya3NSZWdleCkgPT09IDApIHtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGxhYmVsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGxhYmVsLmNvZGVQb2ludEF0KGkpKTtcbiAgICBpZiAoKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwgJiYgc3RhdHVzWzFdICE9PSBcInZhbGlkXCIpIHx8XG4gICAgICAgIChwcm9jZXNzaW5nID09PSBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMICYmXG4gICAgICAgICBzdGF0dXNbMV0gIT09IFwidmFsaWRcIiAmJiBzdGF0dXNbMV0gIT09IFwiZGV2aWF0aW9uXCIpKSB7XG4gICAgICBlcnJvciA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxhYmVsOiBsYWJlbCxcbiAgICBlcnJvcjogZXJyb3JcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIHJlc3VsdCA9IG1hcENoYXJzKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHJlc3VsdC5zdHJpbmcgPSBub3JtYWxpemUocmVzdWx0LnN0cmluZyk7XG5cbiAgdmFyIGxhYmVscyA9IHJlc3VsdC5zdHJpbmcuc3BsaXQoXCIuXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHZhbGlkYXRlTGFiZWwobGFiZWxzW2ldKTtcbiAgICAgIGxhYmVsc1tpXSA9IHZhbGlkYXRpb24ubGFiZWw7XG4gICAgICByZXN1bHQuZXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgdmFsaWRhdGlvbi5lcnJvcjtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IGxhYmVscy5qb2luKFwiLlwiKSxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzLnRvQVNDSUkgPSBmdW5jdGlvbihkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24sIHZlcmlmeURuc0xlbmd0aCkge1xuICB2YXIgcmVzdWx0ID0gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pO1xuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGxhYmVscyA9IGxhYmVscy5tYXAoZnVuY3Rpb24obCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcHVueWNvZGUudG9BU0NJSShsKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICByZXR1cm4gbDtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh2ZXJpZnlEbnNMZW5ndGgpIHtcbiAgICB2YXIgdG90YWwgPSBsYWJlbHMuc2xpY2UoMCwgbGFiZWxzLmxlbmd0aCAtIDEpLmpvaW4oXCIuXCIpLmxlbmd0aDtcbiAgICBpZiAodG90YWwubGVuZ3RoID4gMjUzIHx8IHRvdGFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBsYWJlbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChsYWJlbHMubGVuZ3RoID4gNjMgfHwgbGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmVzdWx0LmVycm9yKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGxhYmVscy5qb2luKFwiLlwiKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnRvVW5pY29kZSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMKTtcblxuICByZXR1cm4ge1xuICAgIGRvbWFpbjogcmVzdWx0LnN0cmluZyxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5QUk9DRVNTSU5HX09QVElPTlMgPSBQUk9DRVNTSU5HX09QVElPTlM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcbmNvbnN0IHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xyXG5jb25zdCB0cjQ2ID0gcmVxdWlyZShcInRyNDZcIik7XHJcblxyXG5jb25zdCBzcGVjaWFsU2NoZW1lcyA9IHtcclxuICBmdHA6IDIxLFxyXG4gIGZpbGU6IG51bGwsXHJcbiAgZ29waGVyOiA3MCxcclxuICBodHRwOiA4MCxcclxuICBodHRwczogNDQzLFxyXG4gIHdzOiA4MCxcclxuICB3c3M6IDQ0M1xyXG59O1xyXG5cclxuY29uc3QgZmFpbHVyZSA9IFN5bWJvbChcImZhaWx1cmVcIik7XHJcblxyXG5mdW5jdGlvbiBjb3VudFN5bWJvbHMoc3RyKSB7XHJcbiAgcmV0dXJuIHB1bnljb2RlLnVjczIuZGVjb2RlKHN0cikubGVuZ3RoO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhdChpbnB1dCwgaWR4KSB7XHJcbiAgY29uc3QgYyA9IGlucHV0W2lkeF07XHJcbiAgcmV0dXJuIGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlEaWdpdChjKSB7XHJcbiAgcmV0dXJuIGMgPj0gMHgzMCAmJiBjIDw9IDB4Mzk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYShjKSB7XHJcbiAgcmV0dXJuIChjID49IDB4NDEgJiYgYyA8PSAweDVBKSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYW51bWVyaWMoYykge1xyXG4gIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgaXNBU0NJSURpZ2l0KGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJSGV4KGMpIHtcclxuICByZXR1cm4gaXNBU0NJSURpZ2l0KGMpIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDQ2KSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg2Nik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2luZ2xlRG90KGJ1ZmZlcikge1xyXG4gIHJldHVybiBidWZmZXIgPT09IFwiLlwiIHx8IGJ1ZmZlci50b0xvd2VyQ2FzZSgpID09PSBcIiUyZVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RvdWJsZURvdChidWZmZXIpIHtcclxuICBidWZmZXIgPSBidWZmZXIudG9Mb3dlckNhc2UoKTtcclxuICByZXR1cm4gYnVmZmVyID09PSBcIi4uXCIgfHwgYnVmZmVyID09PSBcIiUyZS5cIiB8fCBidWZmZXIgPT09IFwiLiUyZVwiIHx8IGJ1ZmZlciA9PT0gXCIlMmUlMmVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGNwMSwgY3AyKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlBbHBoYShjcDEpICYmIChjcDIgPT09IDU4IHx8IGNwMiA9PT0gMTI0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgaXNBU0NJSUFscGhhKHN0cmluZy5jb2RlUG9pbnRBdCgwKSkgJiYgKHN0cmluZ1sxXSA9PT0gXCI6XCIgfHwgc3RyaW5nWzFdID09PSBcInxcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyhzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PT0gMiAmJiBpc0FTQ0lJQWxwaGEoc3RyaW5nLmNvZGVQb2ludEF0KDApKSAmJiBzdHJpbmdbMV0gPT09IFwiOlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnQoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5zZWFyY2goL1xcdTAwMDB8XFx1MDAwOXxcXHUwMDBBfFxcdTAwMER8XFx1MDAyMHwjfCV8XFwvfDp8XFw/fEB8XFxbfFxcXFx8XFxdLykgIT09IC0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnRFeGNsdWRpbmdQZXJjZW50KHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuc2VhcmNoKC9cXHUwMDAwfFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBEfFxcdTAwMjB8I3xcXC98OnxcXD98QHxcXFt8XFxcXHxcXF0vKSAhPT0gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3BlY2lhbFNjaGVtZShzY2hlbWUpIHtcclxuICByZXR1cm4gc3BlY2lhbFNjaGVtZXNbc2NoZW1lXSAhPT0gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NwZWNpYWwodXJsKSB7XHJcbiAgcmV0dXJuIGlzU3BlY2lhbFNjaGVtZSh1cmwuc2NoZW1lKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVmYXVsdFBvcnQoc2NoZW1lKSB7XHJcbiAgcmV0dXJuIHNwZWNpYWxTY2hlbWVzW3NjaGVtZV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGxldCBoZXggPSBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gIGlmIChoZXgubGVuZ3RoID09PSAxKSB7XHJcbiAgICBoZXggPSBcIjBcIiArIGhleDtcclxuICB9XHJcblxyXG4gIHJldHVybiBcIiVcIiArIGhleDtcclxufVxyXG5cclxuZnVuY3Rpb24gdXRmOFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGNvbnN0IGJ1ZiA9IG5ldyBCdWZmZXIoYyk7XHJcblxyXG4gIGxldCBzdHIgPSBcIlwiO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7ICsraSkge1xyXG4gICAgc3RyICs9IHBlcmNlbnRFbmNvZGUoYnVmW2ldKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHV0ZjhQZXJjZW50RGVjb2RlKHN0cikge1xyXG4gIGNvbnN0IGlucHV0ID0gbmV3IEJ1ZmZlcihzdHIpO1xyXG4gIGNvbnN0IG91dHB1dCA9IFtdO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChpbnB1dFtpXSAhPT0gMzcpIHtcclxuICAgICAgb3V0cHV0LnB1c2goaW5wdXRbaV0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtpXSA9PT0gMzcgJiYgaXNBU0NJSUhleChpbnB1dFtpICsgMV0pICYmIGlzQVNDSUlIZXgoaW5wdXRbaSArIDJdKSkge1xyXG4gICAgICBvdXRwdXQucHVzaChwYXJzZUludChpbnB1dC5zbGljZShpICsgMSwgaSArIDMpLnRvU3RyaW5nKCksIDE2KSk7XHJcbiAgICAgIGkgKz0gMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0W2ldKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG5ldyBCdWZmZXIob3V0cHV0KS50b1N0cmluZygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBjIDw9IDB4MUYgfHwgYyA+IDB4N0U7XHJcbn1cclxuXHJcbmNvbnN0IGV4dHJhUGF0aFBlcmNlbnRFbmNvZGVTZXQgPSBuZXcgU2V0KFszMiwgMzQsIDM1LCA2MCwgNjIsIDYzLCA5NiwgMTIzLCAxMjVdKTtcclxuZnVuY3Rpb24gaXNQYXRoUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzQzBDb250cm9sUGVyY2VudEVuY29kZShjKSB8fCBleHRyYVBhdGhQZXJjZW50RW5jb2RlU2V0LmhhcyhjKTtcclxufVxyXG5cclxuY29uc3QgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQgPVxyXG4gIG5ldyBTZXQoWzQ3LCA1OCwgNTksIDYxLCA2NCwgOTEsIDkyLCA5MywgOTQsIDEyNF0pO1xyXG5mdW5jdGlvbiBpc1VzZXJpbmZvUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzUGF0aFBlcmNlbnRFbmNvZGUoYykgfHwgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQuaGFzKGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50RW5jb2RlQ2hhcihjLCBlbmNvZGVTZXRQcmVkaWNhdGUpIHtcclxuICBjb25zdCBjU3RyID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gIGlmIChlbmNvZGVTZXRQcmVkaWNhdGUoYykpIHtcclxuICAgIHJldHVybiB1dGY4UGVyY2VudEVuY29kZShjU3RyKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjU3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjROdW1iZXIoaW5wdXQpIHtcclxuICBsZXQgUiA9IDEwO1xyXG5cclxuICBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIiAmJiBpbnB1dC5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ4XCIpIHtcclxuICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDIpO1xyXG4gICAgUiA9IDE2O1xyXG4gIH0gZWxzZSBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIikge1xyXG4gICAgaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMSk7XHJcbiAgICBSID0gODtcclxuICB9XHJcblxyXG4gIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZWdleCA9IFIgPT09IDEwID8gL1teMC05XS8gOiAoUiA9PT0gMTYgPyAvW14wLTlBLUZhLWZdLyA6IC9bXjAtN10vKTtcclxuICBpZiAocmVnZXgudGVzdChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCBSKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY0KGlucHV0KSB7XHJcbiAgY29uc3QgcGFydHMgPSBpbnB1dC5zcGxpdChcIi5cIik7XHJcbiAgaWYgKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICBwYXJ0cy5wb3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChwYXJ0cy5sZW5ndGggPiA0KSB7XHJcbiAgICByZXR1cm4gaW5wdXQ7XHJcbiAgfVxyXG5cclxuICBjb25zdCBudW1iZXJzID0gW107XHJcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICBpZiAocGFydCA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuID0gcGFyc2VJUHY0TnVtYmVyKHBhcnQpO1xyXG4gICAgaWYgKG4gPT09IGZhaWx1cmUpIHtcclxuICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIG51bWJlcnMucHVzaChuKTtcclxuICB9XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVycy5sZW5ndGggLSAxOyArK2kpIHtcclxuICAgIGlmIChudW1iZXJzW2ldID4gMjU1KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAobnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdID49IE1hdGgucG93KDI1NiwgNSAtIG51bWJlcnMubGVuZ3RoKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBsZXQgaXB2NCA9IG51bWJlcnMucG9wKCk7XHJcbiAgbGV0IGNvdW50ZXIgPSAwO1xyXG5cclxuICBmb3IgKGNvbnN0IG4gb2YgbnVtYmVycykge1xyXG4gICAgaXB2NCArPSBuICogTWF0aC5wb3coMjU2LCAzIC0gY291bnRlcik7XHJcbiAgICArK2NvdW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXB2NDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NChhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgbGV0IG4gPSBhZGRyZXNzO1xyXG5cclxuICBmb3IgKGxldCBpID0gMTsgaSA8PSA0OyArK2kpIHtcclxuICAgIG91dHB1dCA9IFN0cmluZyhuICUgMjU2KSArIG91dHB1dDtcclxuICAgIGlmIChpICE9PSA0KSB7XHJcbiAgICAgIG91dHB1dCA9IFwiLlwiICsgb3V0cHV0O1xyXG4gICAgfVxyXG4gICAgbiA9IE1hdGguZmxvb3IobiAvIDI1Nik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjYoaW5wdXQpIHtcclxuICBjb25zdCBhZGRyZXNzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xyXG4gIGxldCBwaWVjZUluZGV4ID0gMDtcclxuICBsZXQgY29tcHJlc3MgPSBudWxsO1xyXG4gIGxldCBwb2ludGVyID0gMDtcclxuXHJcbiAgaW5wdXQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcblxyXG4gIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgIGlmIChpbnB1dFtwb2ludGVyICsgMV0gIT09IDU4KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHBvaW50ZXIgKz0gMjtcclxuICAgICsrcGllY2VJbmRleDtcclxuICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcclxuICB9XHJcblxyXG4gIHdoaWxlIChwb2ludGVyIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICBpZiAocGllY2VJbmRleCA9PT0gOCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICAgIGlmIChjb21wcmVzcyAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgICsrcG9pbnRlcjtcclxuICAgICAgKytwaWVjZUluZGV4O1xyXG4gICAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB2YWx1ZSA9IDA7XHJcbiAgICBsZXQgbGVuZ3RoID0gMDtcclxuXHJcbiAgICB3aGlsZSAobGVuZ3RoIDwgNCAmJiBpc0FTQ0lJSGV4KGlucHV0W3BvaW50ZXJdKSkge1xyXG4gICAgICB2YWx1ZSA9IHZhbHVlICogMHgxMCArIHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSwgMTYpO1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgICsrbGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNDYpIHtcclxuICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcclxuXHJcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbnVtYmVyc1NlZW4gPSAwO1xyXG5cclxuICAgICAgd2hpbGUgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBsZXQgaXB2NFBpZWNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID4gMCkge1xyXG4gICAgICAgICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA0NiAmJiBudW1iZXJzU2VlbiA8IDQpIHtcclxuICAgICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSk7XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlwdjRQaWVjZSA9IG51bWJlcjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXB2NFBpZWNlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID4gMjU1KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IGFkZHJlc3NbcGllY2VJbmRleF0gKiAweDEwMCArIGlwdjRQaWVjZTtcclxuXHJcbiAgICAgICAgKytudW1iZXJzU2VlbjtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09PSAyIHx8IG51bWJlcnNTZWVuID09PSA0KSB7XHJcbiAgICAgICAgICArK3BpZWNlSW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobnVtYmVyc1NlZW4gIT09IDQpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYnJlYWs7XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W3BvaW50ZXJdID09PSA1OCkge1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbcG9pbnRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdmFsdWU7XHJcbiAgICArK3BpZWNlSW5kZXg7XHJcbiAgfVxyXG5cclxuICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcclxuICAgIGxldCBzd2FwcyA9IHBpZWNlSW5kZXggLSBjb21wcmVzcztcclxuICAgIHBpZWNlSW5kZXggPSA3O1xyXG4gICAgd2hpbGUgKHBpZWNlSW5kZXggIT09IDAgJiYgc3dhcHMgPiAwKSB7XHJcbiAgICAgIGNvbnN0IHRlbXAgPSBhZGRyZXNzW2NvbXByZXNzICsgc3dhcHMgLSAxXTtcclxuICAgICAgYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdO1xyXG4gICAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdGVtcDtcclxuICAgICAgLS1waWVjZUluZGV4O1xyXG4gICAgICAtLXN3YXBzO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoY29tcHJlc3MgPT09IG51bGwgJiYgcGllY2VJbmRleCAhPT0gOCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYWRkcmVzcztcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NihhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3Qgc2VxUmVzdWx0ID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYWRkcmVzcyk7XHJcbiAgY29uc3QgY29tcHJlc3MgPSBzZXFSZXN1bHQuaWR4O1xyXG4gIGxldCBpZ25vcmUwID0gZmFsc2U7XHJcblxyXG4gIGZvciAobGV0IHBpZWNlSW5kZXggPSAwOyBwaWVjZUluZGV4IDw9IDc7ICsrcGllY2VJbmRleCkge1xyXG4gICAgaWYgKGlnbm9yZTAgJiYgYWRkcmVzc1twaWVjZUluZGV4XSA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH0gZWxzZSBpZiAoaWdub3JlMCkge1xyXG4gICAgICBpZ25vcmUwID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXByZXNzID09PSBwaWVjZUluZGV4KSB7XHJcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHBpZWNlSW5kZXggPT09IDAgPyBcIjo6XCIgOiBcIjpcIjtcclxuICAgICAgb3V0cHV0ICs9IHNlcGFyYXRvcjtcclxuICAgICAgaWdub3JlMCA9IHRydWU7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBhZGRyZXNzW3BpZWNlSW5kZXhdLnRvU3RyaW5nKDE2KTtcclxuXHJcbiAgICBpZiAocGllY2VJbmRleCAhPT0gNykge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUhvc3QoaW5wdXQsIGlzU3BlY2lhbEFyZykge1xyXG4gIGlmIChpbnB1dFswXSA9PT0gXCJbXCIpIHtcclxuICAgIGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSAhPT0gXCJdXCIpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlSVB2NihpbnB1dC5zdWJzdHJpbmcoMSwgaW5wdXQubGVuZ3RoIC0gMSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFpc1NwZWNpYWxBcmcpIHtcclxuICAgIHJldHVybiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZG9tYWluID0gdXRmOFBlcmNlbnREZWNvZGUoaW5wdXQpO1xyXG4gIGNvbnN0IGFzY2lpRG9tYWluID0gdHI0Ni50b0FTQ0lJKGRvbWFpbiwgZmFsc2UsIHRyNDYuUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTCwgZmFsc2UpO1xyXG4gIGlmIChhc2NpaURvbWFpbiA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KGFzY2lpRG9tYWluKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpcHY0SG9zdCA9IHBhcnNlSVB2NChhc2NpaURvbWFpbik7XHJcbiAgaWYgKHR5cGVvZiBpcHY0SG9zdCA9PT0gXCJudW1iZXJcIiB8fCBpcHY0SG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIGlwdjRIb3N0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFzY2lpRG9tYWluO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpIHtcclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKGlucHV0KTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIG91dHB1dCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShhcnIpIHtcclxuICBsZXQgbWF4SWR4ID0gbnVsbDtcclxuICBsZXQgbWF4TGVuID0gMTsgLy8gb25seSBmaW5kIGVsZW1lbnRzID4gMVxyXG4gIGxldCBjdXJyU3RhcnQgPSBudWxsO1xyXG4gIGxldCBjdXJyTGVuID0gMDtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChhcnJbaV0gIT09IDApIHtcclxuICAgICAgaWYgKGN1cnJMZW4gPiBtYXhMZW4pIHtcclxuICAgICAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICAgICAgbWF4TGVuID0gY3VyckxlbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcclxuICAgICAgY3VyckxlbiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSB7XHJcbiAgICAgICAgY3VyclN0YXJ0ID0gaTtcclxuICAgICAgfVxyXG4gICAgICArK2N1cnJMZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB0cmFpbGluZyB6ZXJvc1xyXG4gIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICBtYXhMZW4gPSBjdXJyTGVuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGlkeDogbWF4SWR4LFxyXG4gICAgbGVuOiBtYXhMZW5cclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXJpYWxpemVIb3N0KGhvc3QpIHtcclxuICBpZiAodHlwZW9mIGhvc3QgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHJldHVybiBzZXJpYWxpemVJUHY0KGhvc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gSVB2NiBzZXJpYWxpemVyXHJcbiAgaWYgKGhvc3QgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgcmV0dXJuIFwiW1wiICsgc2VyaWFsaXplSVB2Nihob3N0KSArIFwiXVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGhvc3Q7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1Db250cm9sQ2hhcnModXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9eW1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdK3xbXFx1MDAwMC1cXHUwMDFGXFx1MDAyMF0rJC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJpbVRhYkFuZE5ld2xpbmUodXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXHUwMDA5fFxcdTAwMEF8XFx1MDAwRC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvcnRlblBhdGgodXJsKSB7XHJcbiAgY29uc3QgcGF0aCA9IHVybC5wYXRoO1xyXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBpZiAodXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgcGF0aC5sZW5ndGggPT09IDEgJiYgaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHBhdGhbMF0pKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwYXRoLnBvcCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbmNsdWRlc0NyZWRlbnRpYWxzKHVybCkge1xyXG4gIHJldHVybiB1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHVybCkge1xyXG4gIHJldHVybiB1cmwuaG9zdCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gXCJcIiB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCB8fCB1cmwuc2NoZW1lID09PSBcImZpbGVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZykge1xyXG4gIHJldHVybiAvXltBLVphLXpdOiQvLnRlc3Qoc3RyaW5nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gVVJMU3RhdGVNYWNoaW5lKGlucHV0LCBiYXNlLCBlbmNvZGluZ092ZXJyaWRlLCB1cmwsIHN0YXRlT3ZlcnJpZGUpIHtcclxuICB0aGlzLnBvaW50ZXIgPSAwO1xyXG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcclxuICB0aGlzLmJhc2UgPSBiYXNlIHx8IG51bGw7XHJcbiAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gZW5jb2RpbmdPdmVycmlkZSB8fCBcInV0Zi04XCI7XHJcbiAgdGhpcy5zdGF0ZU92ZXJyaWRlID0gc3RhdGVPdmVycmlkZTtcclxuICB0aGlzLnVybCA9IHVybDtcclxuICB0aGlzLmZhaWx1cmUgPSBmYWxzZTtcclxuICB0aGlzLnBhcnNlRXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgaWYgKCF0aGlzLnVybCkge1xyXG4gICAgdGhpcy51cmwgPSB7XHJcbiAgICAgIHNjaGVtZTogXCJcIixcclxuICAgICAgdXNlcm5hbWU6IFwiXCIsXHJcbiAgICAgIHBhc3N3b3JkOiBcIlwiLFxyXG4gICAgICBob3N0OiBudWxsLFxyXG4gICAgICBwb3J0OiBudWxsLFxyXG4gICAgICBwYXRoOiBbXSxcclxuICAgICAgcXVlcnk6IG51bGwsXHJcbiAgICAgIGZyYWdtZW50OiBudWxsLFxyXG5cclxuICAgICAgY2Fubm90QmVBQmFzZVVSTDogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzID0gdHJpbUNvbnRyb2xDaGFycyh0aGlzLmlucHV0KTtcclxuICAgIGlmIChyZXMgIT09IHRoaXMuaW5wdXQpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXQgPSByZXM7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZXMgPSB0cmltVGFiQW5kTmV3bGluZSh0aGlzLmlucHV0KTtcclxuICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuICB0aGlzLmlucHV0ID0gcmVzO1xyXG5cclxuICB0aGlzLnN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBcInNjaGVtZSBzdGFydFwiO1xyXG5cclxuICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgdGhpcy5hdEZsYWcgPSBmYWxzZTtcclxuICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IGZhbHNlO1xyXG5cclxuICB0aGlzLmlucHV0ID0gcHVueWNvZGUudWNzMi5kZWNvZGUodGhpcy5pbnB1dCk7XHJcblxyXG4gIGZvciAoOyB0aGlzLnBvaW50ZXIgPD0gdGhpcy5pbnB1dC5sZW5ndGg7ICsrdGhpcy5wb2ludGVyKSB7XHJcbiAgICBjb25zdCBjID0gdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXJdO1xyXG4gICAgY29uc3QgY1N0ciA9IGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gICAgLy8gZXhlYyBzdGF0ZSBtYWNoaW5lXHJcbiAgICBjb25zdCByZXQgPSB0aGlzW1wicGFyc2UgXCIgKyB0aGlzLnN0YXRlXShjLCBjU3RyKTtcclxuICAgIGlmICghcmV0KSB7XHJcbiAgICAgIGJyZWFrOyAvLyB0ZXJtaW5hdGUgYWxnb3JpdGhtXHJcbiAgICB9IGVsc2UgaWYgKHJldCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICB0aGlzLmZhaWx1cmUgPSB0cnVlO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWUgc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZVN0YXJ0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhKGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzY2hlbWVcIjtcclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlU2NoZW1lKGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09PSA0MyB8fCBjID09PSA0NSB8fCBjID09PSA0Nikge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTgpIHtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgIWlzU3BlY2lhbFNjaGVtZSh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpICYmIHRoaXMuYnVmZmVyID09PSBcImZpbGVcIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgKHRoaXMudXJsLmhvc3QgPT09IFwiXCIgfHwgdGhpcy51cmwuaG9zdCA9PT0gbnVsbCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYnVmZmVyO1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSAhPT0gNDcgfHwgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSAhPT0gNDcpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gdGhpcy51cmwuc2NoZW1lKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgc2xhc2hlc1wiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgICArK3RoaXMucG9pbnRlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImNhbm5vdC1iZS1hLWJhc2UtVVJMIHBhdGhcIjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgdGhpcy5wb2ludGVyID0gLTE7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIG5vIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlTm9TY2hlbWUoYykge1xyXG4gIGlmICh0aGlzLmJhc2UgPT09IG51bGwgfHwgKHRoaXMuYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGMgIT09IDM1KSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsUmVsYXRpdmVPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aE9yQXV0aG9yaXR5KGMpIHtcclxuICBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICBpZiAoaXNOYU4oYykpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmUgc2xhc2hcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgwLCB0aGlzLmJhc2UucGF0aC5sZW5ndGggLSAxKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlIHNsYXNoXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZVNsYXNoKGMpIHtcclxuICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIl0gPSBmdW5jdGlvbiBwYXJzZVNwZWNpYWxBdXRob3JpdHlTbGFzaGVzKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgJiYgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICArK3RoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgIT09IDQ3ICYmIGMgIT09IDkyKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VBdXRob3JpdHkoYywgY1N0cikge1xyXG4gIGlmIChjID09PSA2NCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmF0RmxhZykge1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiJTQwXCIgKyB0aGlzLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRoaXMuYXRGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjYXJlZnVsLCB0aGlzIGlzIGJhc2VkIG9uIGJ1ZmZlciBhbmQgaGFzIGl0cyBvd24gcG9pbnRlciAodGhpcy5wb2ludGVyICE9IHBvaW50ZXIpIGFuZCBpbm5lciBjaGFyc1xyXG4gICAgY29uc3QgbGVuID0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKTtcclxuICAgIGZvciAobGV0IHBvaW50ZXIgPSAwOyBwb2ludGVyIDwgbGVuOyArK3BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgY29kZVBvaW50ID0gdGhpcy5idWZmZXIuY29kZVBvaW50QXQocG9pbnRlcik7XHJcblxyXG4gICAgICBpZiAoY29kZVBvaW50ID09PSA1OCAmJiAhdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcpIHtcclxuICAgICAgICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZW5jb2RlZENvZGVQb2ludHMgPSBwZXJjZW50RW5jb2RlQ2hhcihjb2RlUG9pbnQsIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICAgICAgaWYgKHRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cmwudXNlcm5hbWUgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgIGlmICh0aGlzLmF0RmxhZyAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICAgIHRoaXMucG9pbnRlciAtPSBjb3VudFN5bWJvbHModGhpcy5idWZmZXIpICsgMTtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImhvc3RcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RuYW1lXCJdID1cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUhvc3ROYW1lKGMsIGNTdHIpIHtcclxuICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA1OCAmJiAhdGhpcy5hcnJGbGFnKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBvcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgPT09IFwiaG9zdG5hbWVcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIgJiZcclxuICAgICAgICAgICAgICAgKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgIGlmIChob3N0ID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChjID09PSA5MSkge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA5Mykge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwb3J0XCJdID0gZnVuY3Rpb24gcGFyc2VQb3J0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSURpZ2l0KGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAgICAgICAgdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IFwiXCIpIHtcclxuICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHRoaXMuYnVmZmVyKTtcclxuICAgICAgaWYgKHBvcnQgPiBNYXRoLnBvdygyLCAxNikgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVybC5wb3J0ID0gcG9ydCA9PT0gZGVmYXVsdFBvcnQodGhpcy51cmwuc2NoZW1lKSA/IG51bGwgOiBwb3J0O1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmNvbnN0IGZpbGVPdGhlcndpc2VDb2RlUG9pbnRzID0gbmV3IFNldChbNDcsIDkyLCA2MywgMzVdKTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlXCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlKGMpIHtcclxuICB0aGlzLnVybC5zY2hlbWUgPSBcImZpbGVcIjtcclxuXHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgc2xhc2hcIjtcclxuICB9IGVsc2UgaWYgKHRoaXMuYmFzZSAhPT0gbnVsbCAmJiB0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID09PSAwIHx8IC8vIHJlbWFpbmluZyBjb25zaXN0cyBvZiAwIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAhaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGMsIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID49IDIgJiYgLy8gcmVtYWluaW5nIGhhcyBhdCBsZWFzdCAyIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAgIWZpbGVPdGhlcndpc2VDb2RlUG9pbnRzLmhhcyh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZVNsYXNoKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyh0aGlzLmJhc2UucGF0aFswXSkpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2godGhpcy5iYXNlLnBhdGhbMF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVIb3N0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gOTIgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IFwiXCI7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChob3N0ID09PSBcImxvY2FsaG9zdFwiKSB7XHJcbiAgICAgICAgaG9zdCA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcblxyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHBhdGggc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhTdGFydChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG5cclxuICAgIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoYyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICBpZiAoYyAhPT0gNDcpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoKGMpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHx8XHJcbiAgICAgICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIChjID09PSA2MyB8fCBjID09PSAzNSkpKSB7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RvdWJsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICBpZiAoYyAhPT0gNDcgJiYgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGgucHVzaChcIlwiKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikgJiYgYyAhPT0gNDcgJiZcclxuICAgICAgICAgICAgICAgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICB9IGVsc2UgaWYgKCFpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgdGhpcy51cmwucGF0aC5sZW5ndGggPT09IDAgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsLmhvc3QgIT09IFwiXCIgJiYgdGhpcy51cmwuaG9zdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyWzBdICsgXCI6XCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIChjID09PSB1bmRlZmluZWQgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLnVybC5wYXRoLmxlbmd0aCA+IDEgJiYgdGhpcy51cmwucGF0aFswXSA9PT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5zaGlmdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNQYXRoUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VDYW5ub3RCZUFCYXNlVVJMUGF0aChjKSB7XHJcbiAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IEFkZDogbm90IGEgVVJMIGNvZGUgcG9pbnRcclxuICAgIGlmICghaXNOYU4oYykgJiYgYyAhPT0gMzcpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoWzBdID0gdGhpcy51cmwucGF0aFswXSArIHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBxdWVyeVwiXSA9IGZ1bmN0aW9uIHBhcnNlUXVlcnkoYywgY1N0cikge1xyXG4gIGlmIChpc05hTihjKSB8fCAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkpIHtcclxuICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NcIiB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NzXCIpIHtcclxuICAgICAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gXCJ1dGYtOFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBCdWZmZXIodGhpcy5idWZmZXIpOyAvLyBUT0RPOiBVc2UgZW5jb2Rpbmcgb3ZlcnJpZGUgaW5zdGVhZFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKGJ1ZmZlcltpXSA8IDB4MjEgfHwgYnVmZmVyW2ldID4gMHg3RSB8fCBidWZmZXJbaV0gPT09IDB4MjIgfHwgYnVmZmVyW2ldID09PSAweDIzIHx8XHJcbiAgICAgICAgICBidWZmZXJbaV0gPT09IDB4M0MgfHwgYnVmZmVyW2ldID09PSAweDNFKSB7XHJcbiAgICAgICAgdGhpcy51cmwucXVlcnkgKz0gcGVyY2VudEVuY29kZShidWZmZXJbaV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGJ1ZmZlcltpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAoYyA9PT0gMzUpIHtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmcmFnbWVudFwiXSA9IGZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQoYykge1xyXG4gIGlmIChpc05hTihjKSkgeyAvLyBkbyBub3RoaW5nXHJcbiAgfSBlbHNlIGlmIChjID09PSAweDApIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplVVJMKHVybCwgZXhjbHVkZUZyYWdtZW50KSB7XHJcbiAgbGV0IG91dHB1dCA9IHVybC5zY2hlbWUgKyBcIjpcIjtcclxuICBpZiAodXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIi8vXCI7XHJcblxyXG4gICAgaWYgKHVybC51c2VybmFtZSAhPT0gXCJcIiB8fCB1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgb3V0cHV0ICs9IHVybC51c2VybmFtZTtcclxuICAgICAgaWYgKHVybC5wYXNzd29yZCAhPT0gXCJcIikge1xyXG4gICAgICAgIG91dHB1dCArPSBcIjpcIiArIHVybC5wYXNzd29yZDtcclxuICAgICAgfVxyXG4gICAgICBvdXRwdXQgKz0gXCJAXCI7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xyXG5cclxuICAgIGlmICh1cmwucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucG9ydDtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHVybC5ob3N0ID09PSBudWxsICYmIHVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XHJcbiAgICBvdXRwdXQgKz0gdXJsLnBhdGhbMF07XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvciAoY29uc3Qgc3RyaW5nIG9mIHVybC5wYXRoKSB7XHJcbiAgICAgIG91dHB1dCArPSBcIi9cIiArIHN0cmluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh1cmwucXVlcnkgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIj9cIiArIHVybC5xdWVyeTtcclxuICB9XHJcblxyXG4gIGlmICghZXhjbHVkZUZyYWdtZW50ICYmIHVybC5mcmFnbWVudCAhPT0gbnVsbCkge1xyXG4gICAgb3V0cHV0ICs9IFwiI1wiICsgdXJsLmZyYWdtZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplT3JpZ2luKHR1cGxlKSB7XHJcbiAgbGV0IHJlc3VsdCA9IHR1cGxlLnNjaGVtZSArIFwiOi8vXCI7XHJcbiAgcmVzdWx0ICs9IHNlcmlhbGl6ZUhvc3QodHVwbGUuaG9zdCk7XHJcblxyXG4gIGlmICh0dXBsZS5wb3J0ICE9PSBudWxsKSB7XHJcbiAgICByZXN1bHQgKz0gXCI6XCIgKyB0dXBsZS5wb3J0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMID0gc2VyaWFsaXplVVJMO1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMT3JpZ2luID0gZnVuY3Rpb24gKHVybCkge1xyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtb3JpZ2luXHJcbiAgc3dpdGNoICh1cmwuc2NoZW1lKSB7XHJcbiAgICBjYXNlIFwiYmxvYlwiOlxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVVUkxPcmlnaW4obW9kdWxlLmV4cG9ydHMucGFyc2VVUkwodXJsLnBhdGhbMF0pKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBvcmlnaW4gcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgfVxyXG4gICAgY2FzZSBcImZ0cFwiOlxyXG4gICAgY2FzZSBcImdvcGhlclwiOlxyXG4gICAgY2FzZSBcImh0dHBcIjpcclxuICAgIGNhc2UgXCJodHRwc1wiOlxyXG4gICAgY2FzZSBcIndzXCI6XHJcbiAgICBjYXNlIFwid3NzXCI6XHJcbiAgICAgIHJldHVybiBzZXJpYWxpemVPcmlnaW4oe1xyXG4gICAgICAgIHNjaGVtZTogdXJsLnNjaGVtZSxcclxuICAgICAgICBob3N0OiB1cmwuaG9zdCxcclxuICAgICAgICBwb3J0OiB1cmwucG9ydFxyXG4gICAgICB9KTtcclxuICAgIGNhc2UgXCJmaWxlXCI6XHJcbiAgICAgIC8vIHNwZWMgc2F5cyBcImV4ZXJjaXNlIHRvIHRoZSByZWFkZXJcIiwgY2hyb21lIHNheXMgXCJmaWxlOi8vXCJcclxuICAgICAgcmV0dXJuIFwiZmlsZTovL1wiO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgLy8gc2VyaWFsaXppbmcgYW4gb3BhcXVlIG9yaWdpbiByZXR1cm5zIFwibnVsbFwiXHJcbiAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdXNtID0gbmV3IFVSTFN0YXRlTWFjaGluZShpbnB1dCwgb3B0aW9ucy5iYXNlVVJMLCBvcHRpb25zLmVuY29kaW5nT3ZlcnJpZGUsIG9wdGlvbnMudXJsLCBvcHRpb25zLnN0YXRlT3ZlcnJpZGUpO1xyXG4gIGlmICh1c20uZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIFwiZmFpbHVyZVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHVzbS51cmw7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVVc2VybmFtZSA9IGZ1bmN0aW9uICh1cmwsIHVzZXJuYW1lKSB7XHJcbiAgdXJsLnVzZXJuYW1lID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUodXNlcm5hbWUpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnVzZXJuYW1lICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVQYXNzd29yZCA9IGZ1bmN0aW9uICh1cmwsIHBhc3N3b3JkKSB7XHJcbiAgdXJsLnBhc3N3b3JkID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUocGFzc3dvcmQpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnBhc3N3b3JkICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVIb3N0ID0gc2VyaWFsaXplSG9zdDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQgPSBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplSW50ZWdlciA9IGZ1bmN0aW9uIChpbnRlZ2VyKSB7XHJcbiAgcmV0dXJuIFN0cmluZyhpbnRlZ2VyKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnBhcnNlVVJMID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgLy8gV2UgZG9uJ3QgaGFuZGxlIGJsb2JzLCBzbyB0aGlzIGp1c3QgZGVsZWdhdGVzOlxyXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IGJhc2VVUkw6IG9wdGlvbnMuYmFzZVVSTCwgZW5jb2RpbmdPdmVycmlkZTogb3B0aW9ucy5lbmNvZGluZ092ZXJyaWRlIH0pO1xyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCB1c20gPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKTtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIFVSTEltcGwge1xuICBjb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvckFyZ3MpIHtcbiAgICBjb25zdCB1cmwgPSBjb25zdHJ1Y3RvckFyZ3NbMF07XG4gICAgY29uc3QgYmFzZSA9IGNvbnN0cnVjdG9yQXJnc1sxXTtcblxuICAgIGxldCBwYXJzZWRCYXNlID0gbnVsbDtcbiAgICBpZiAoYmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJzZWRCYXNlID0gdXNtLmJhc2ljVVJMUGFyc2UoYmFzZSk7XG4gICAgICBpZiAocGFyc2VkQmFzZSA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYmFzZSBVUkxcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVVJMID0gdXNtLmJhc2ljVVJMUGFyc2UodXJsLCB7IGJhc2VVUkw6IHBhcnNlZEJhc2UgfSk7XG4gICAgaWYgKHBhcnNlZFVSTCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIFVSTFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cmwgPSBwYXJzZWRVUkw7XG5cbiAgICAvLyBUT0RPOiBxdWVyeSBzdHVmZlxuICB9XG5cbiAgZ2V0IGhyZWYoKSB7XG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVVUkwodGhpcy5fdXJsKTtcbiAgfVxuXG4gIHNldCBocmVmKHYpIHtcbiAgICBjb25zdCBwYXJzZWRVUkwgPSB1c20uYmFzaWNVUkxQYXJzZSh2KTtcbiAgICBpZiAocGFyc2VkVVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgVVJMXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3VybCA9IHBhcnNlZFVSTDtcbiAgfVxuXG4gIGdldCBvcmlnaW4oKSB7XG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVVUkxPcmlnaW4odGhpcy5fdXJsKTtcbiAgfVxuXG4gIGdldCBwcm90b2NvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsLnNjaGVtZSArIFwiOlwiO1xuICB9XG5cbiAgc2V0IHByb3RvY29sKHYpIHtcbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2ICsgXCI6XCIsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwic2NoZW1lIHN0YXJ0XCIgfSk7XG4gIH1cblxuICBnZXQgdXNlcm5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC51c2VybmFtZTtcbiAgfVxuXG4gIHNldCB1c2VybmFtZSh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uc2V0VGhlVXNlcm5hbWUodGhpcy5fdXJsLCB2KTtcbiAgfVxuXG4gIGdldCBwYXNzd29yZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsLnBhc3N3b3JkO1xuICB9XG5cbiAgc2V0IHBhc3N3b3JkKHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5zZXRUaGVQYXNzd29yZCh0aGlzLl91cmwsIHYpO1xuICB9XG5cbiAgZ2V0IGhvc3QoKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5fdXJsO1xuXG4gICAgaWYgKHVybC5ob3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBpZiAodXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh1cmwuaG9zdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVIb3N0KHVybC5ob3N0KSArIFwiOlwiICsgdXNtLnNlcmlhbGl6ZUludGVnZXIodXJsLnBvcnQpO1xuICB9XG5cbiAgc2V0IGhvc3Qodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiaG9zdFwiIH0pO1xuICB9XG5cbiAgZ2V0IGhvc3RuYW1lKCkge1xuICAgIGlmICh0aGlzLl91cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVIb3N0KHRoaXMuX3VybC5ob3N0KTtcbiAgfVxuXG4gIHNldCBob3N0bmFtZSh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJob3N0bmFtZVwiIH0pO1xuICB9XG5cbiAgZ2V0IHBvcnQoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5wb3J0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUludGVnZXIodGhpcy5fdXJsLnBvcnQpO1xuICB9XG5cbiAgc2V0IHBvcnQodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMuX3VybC5wb3J0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJwb3J0XCIgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhdGhuYW1lKCkge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3VybC5wYXRoWzBdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl91cmwucGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIi9cIiArIHRoaXMuX3VybC5wYXRoLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgc2V0IHBhdGhuYW1lKHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl91cmwucGF0aCA9IFtdO1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwicGF0aCBzdGFydFwiIH0pO1xuICB9XG5cbiAgZ2V0IHNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLnF1ZXJ5ID09PSBudWxsIHx8IHRoaXMuX3VybC5xdWVyeSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiP1wiICsgdGhpcy5fdXJsLnF1ZXJ5O1xuICB9XG5cbiAgc2V0IHNlYXJjaCh2KSB7XG4gICAgLy8gVE9ETzogcXVlcnkgc3R1ZmZcblxuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcblxuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB1cmwucXVlcnkgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCI/XCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgdXJsLnF1ZXJ5ID0gXCJcIjtcbiAgICB1c20uYmFzaWNVUkxQYXJzZShpbnB1dCwgeyB1cmwsIHN0YXRlT3ZlcnJpZGU6IFwicXVlcnlcIiB9KTtcbiAgfVxuXG4gIGdldCBoYXNoKCkge1xuICAgIGlmICh0aGlzLl91cmwuZnJhZ21lbnQgPT09IG51bGwgfHwgdGhpcy5fdXJsLmZyYWdtZW50ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCIjXCIgKyB0aGlzLl91cmwuZnJhZ21lbnQ7XG4gIH1cblxuICBzZXQgaGFzaCh2KSB7XG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMuX3VybC5mcmFnbWVudCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSB2WzBdID09PSBcIiNcIiA/IHYuc3Vic3RyaW5nKDEpIDogdjtcbiAgICB0aGlzLl91cmwuZnJhZ21lbnQgPSBcIlwiO1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImZyYWdtZW50XCIgfSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMuaHJlZjtcbiAgfVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi8vVVJMLWltcGwuanNcIik7XG5cbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBVUkwodXJsKSB7XG4gIGlmICghdGhpcyB8fCB0aGlzW2ltcGxdIHx8ICEodGhpcyBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnVVJMJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVUkwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0dXAodGhpcywgYXJncyk7XG59XG5cblVSTC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS50b0pTT04uYXBwbHkodGhpc1tpbXBsXSwgYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaHJlZlwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ocmVmO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhyZWYgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5VUkwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpcy5ocmVmO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwib3JpZ2luXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9yaWdpbjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicHJvdG9jb2xcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucHJvdG9jb2w7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucHJvdG9jb2wgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJ1c2VybmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS51c2VybmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS51c2VybmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInBhc3N3b3JkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBhc3N3b3JkO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBhc3N3b3JkID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaG9zdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3QgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJob3N0bmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0bmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ob3N0bmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInBvcnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucG9ydDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wb3J0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicGF0aG5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGF0aG5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGF0aG5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJzZWFyY2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VhcmNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNlYXJjaCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhhc2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaGFzaDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5oYXNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXMob2JqKSB7XG4gICAgcmV0dXJuICEhb2JqICYmIG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb247XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVVJMLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBVUkwsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBVUkw6IFVSTCB9LFxuICAgIFdvcmtlcjogeyBVUkw6IFVSTCB9XG4gIH1cbn07XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5VUkwgPSByZXF1aXJlKFwiLi9VUkxcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5zZXJpYWxpemVVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkw7XG5leHBvcnRzLnNlcmlhbGl6ZVVSTE9yaWdpbiA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZVVSTE9yaWdpbjtcbmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLmJhc2ljVVJMUGFyc2U7XG5leHBvcnRzLnNldFRoZVVzZXJuYW1lID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlVXNlcm5hbWU7XG5leHBvcnRzLnNldFRoZVBhc3N3b3JkID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlUGFzc3dvcmQ7XG5leHBvcnRzLnNlcmlhbGl6ZUhvc3QgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVIb3N0O1xuZXhwb3J0cy5zZXJpYWxpemVJbnRlZ2VyID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSW50ZWdlcjtcbmV4cG9ydHMucGFyc2VVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5wYXJzZVVSTDtcbiIsICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgU3RyZWFtID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3N0cmVhbScpKTtcbnZhciBodHRwID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ2h0dHAnKSk7XG52YXIgVXJsID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3VybCcpKTtcbnZhciB3aGF0d2dVcmwgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnd2hhdHdnLXVybCcpKTtcbnZhciBodHRwcyA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdodHRwcycpKTtcbnZhciB6bGliID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3psaWInKSk7XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS90bXB2YXIvanNkb20vYmxvYi9hYTg1YjJhYmYwNzc2NmZmN2JmNWMxZjZkYWFmYjM3MjZmMmYyZGI1L2xpYi9qc2RvbS9saXZpbmcvYmxvYi5qc1xuXG4vLyBmaXggZm9yIFwiUmVhZGFibGVcIiBpc24ndCBhIG5hbWVkIGV4cG9ydCBpc3N1ZVxuY29uc3QgUmVhZGFibGUgPSBTdHJlYW0uUmVhZGFibGU7XG5cbmNvbnN0IEJVRkZFUiA9IFN5bWJvbCgnYnVmZmVyJyk7XG5jb25zdCBUWVBFID0gU3ltYm9sKCd0eXBlJyk7XG5cbmNsYXNzIEJsb2Ige1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzW1RZUEVdID0gJyc7XG5cblx0XHRjb25zdCBibG9iUGFydHMgPSBhcmd1bWVudHNbMF07XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGFyZ3VtZW50c1sxXTtcblxuXHRcdGNvbnN0IGJ1ZmZlcnMgPSBbXTtcblx0XHRsZXQgc2l6ZSA9IDA7XG5cblx0XHRpZiAoYmxvYlBhcnRzKSB7XG5cdFx0XHRjb25zdCBhID0gYmxvYlBhcnRzO1xuXHRcdFx0Y29uc3QgbGVuZ3RoID0gTnVtYmVyKGEubGVuZ3RoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGFbaV07XG5cdFx0XHRcdGxldCBidWZmZXI7XG5cdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgQnVmZmVyKSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gZWxlbWVudDtcblx0XHRcdFx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZWxlbWVudCkpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGVsZW1lbnQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCbG9iKSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gZWxlbWVudFtCVUZGRVJdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGVsZW1lbnQgOiBTdHJpbmcoZWxlbWVudCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNpemUgKz0gYnVmZmVyLmxlbmd0aDtcblx0XHRcdFx0YnVmZmVycy5wdXNoKGJ1ZmZlcik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1tCVUZGRVJdID0gQnVmZmVyLmNvbmNhdChidWZmZXJzKTtcblxuXHRcdGxldCB0eXBlID0gb3B0aW9ucyAmJiBvcHRpb25zLnR5cGUgIT09IHVuZGVmaW5lZCAmJiBTdHJpbmcob3B0aW9ucy50eXBlKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmICh0eXBlICYmICEvW15cXHUwMDIwLVxcdTAwN0VdLy50ZXN0KHR5cGUpKSB7XG5cdFx0XHR0aGlzW1RZUEVdID0gdHlwZTtcblx0XHR9XG5cdH1cblx0Z2V0IHNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbQlVGRkVSXS5sZW5ndGg7XG5cdH1cblx0Z2V0IHR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbVFlQRV07XG5cdH1cblx0dGV4dCgpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXNbQlVGRkVSXS50b1N0cmluZygpKTtcblx0fVxuXHRhcnJheUJ1ZmZlcigpIHtcblx0XHRjb25zdCBidWYgPSB0aGlzW0JVRkZFUl07XG5cdFx0Y29uc3QgYWIgPSBidWYuYnVmZmVyLnNsaWNlKGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZU9mZnNldCArIGJ1Zi5ieXRlTGVuZ3RoKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFiKTtcblx0fVxuXHRzdHJlYW0oKSB7XG5cdFx0Y29uc3QgcmVhZGFibGUgPSBuZXcgUmVhZGFibGUoKTtcblx0XHRyZWFkYWJsZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHt9O1xuXHRcdHJlYWRhYmxlLnB1c2godGhpc1tCVUZGRVJdKTtcblx0XHRyZWFkYWJsZS5wdXNoKG51bGwpO1xuXHRcdHJldHVybiByZWFkYWJsZTtcblx0fVxuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gJ1tvYmplY3QgQmxvYl0nO1xuXHR9XG5cdHNsaWNlKCkge1xuXHRcdGNvbnN0IHNpemUgPSB0aGlzLnNpemU7XG5cblx0XHRjb25zdCBzdGFydCA9IGFyZ3VtZW50c1swXTtcblx0XHRjb25zdCBlbmQgPSBhcmd1bWVudHNbMV07XG5cdFx0bGV0IHJlbGF0aXZlU3RhcnQsIHJlbGF0aXZlRW5kO1xuXHRcdGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gMDtcblx0XHR9IGVsc2UgaWYgKHN0YXJ0IDwgMCkge1xuXHRcdFx0cmVsYXRpdmVTdGFydCA9IE1hdGgubWF4KHNpemUgKyBzdGFydCwgMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbGF0aXZlU3RhcnQgPSBNYXRoLm1pbihzdGFydCwgc2l6ZSk7XG5cdFx0fVxuXHRcdGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVsYXRpdmVFbmQgPSBzaXplO1xuXHRcdH0gZWxzZSBpZiAoZW5kIDwgMCkge1xuXHRcdFx0cmVsYXRpdmVFbmQgPSBNYXRoLm1heChzaXplICsgZW5kLCAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVsYXRpdmVFbmQgPSBNYXRoLm1pbihlbmQsIHNpemUpO1xuXHRcdH1cblx0XHRjb25zdCBzcGFuID0gTWF0aC5tYXgocmVsYXRpdmVFbmQgLSByZWxhdGl2ZVN0YXJ0LCAwKTtcblxuXHRcdGNvbnN0IGJ1ZmZlciA9IHRoaXNbQlVGRkVSXTtcblx0XHRjb25zdCBzbGljZWRCdWZmZXIgPSBidWZmZXIuc2xpY2UocmVsYXRpdmVTdGFydCwgcmVsYXRpdmVTdGFydCArIHNwYW4pO1xuXHRcdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbXSwgeyB0eXBlOiBhcmd1bWVudHNbMl0gfSk7XG5cdFx0YmxvYltCVUZGRVJdID0gc2xpY2VkQnVmZmVyO1xuXHRcdHJldHVybiBibG9iO1xuXHR9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsb2IucHJvdG90eXBlLCB7XG5cdHNpemU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHR0eXBlOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c2xpY2U6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJsb2IucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdCbG9iJyxcblx0d3JpdGFibGU6IGZhbHNlLFxuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuLyoqXG4gKiBmZXRjaC1lcnJvci5qc1xuICpcbiAqIEZldGNoRXJyb3IgaW50ZXJmYWNlIGZvciBvcGVyYXRpb25hbCBlcnJvcnNcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBGZXRjaEVycm9yIGluc3RhbmNlXG4gKlxuICogQHBhcmFtICAgU3RyaW5nICAgICAgbWVzc2FnZSAgICAgIEVycm9yIG1lc3NhZ2UgZm9yIGh1bWFuXG4gKiBAcGFyYW0gICBTdHJpbmcgICAgICB0eXBlICAgICAgICAgRXJyb3IgdHlwZSBmb3IgbWFjaGluZVxuICogQHBhcmFtICAgU3RyaW5nICAgICAgc3lzdGVtRXJyb3IgIEZvciBOb2RlLmpzIHN5c3RlbSBlcnJvclxuICogQHJldHVybiAgRmV0Y2hFcnJvclxuICovXG5mdW5jdGlvbiBGZXRjaEVycm9yKG1lc3NhZ2UsIHR5cGUsIHN5c3RlbUVycm9yKSB7XG4gIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy50eXBlID0gdHlwZTtcblxuICAvLyB3aGVuIGVyci50eXBlIGlzIGBzeXN0ZW1gLCBlcnIuY29kZSBjb250YWlucyBzeXN0ZW0gZXJyb3IgY29kZVxuICBpZiAoc3lzdGVtRXJyb3IpIHtcbiAgICB0aGlzLmNvZGUgPSB0aGlzLmVycm5vID0gc3lzdGVtRXJyb3IuY29kZTtcbiAgfVxuXG4gIC8vIGhpZGUgY3VzdG9tIGVycm9yIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZnJvbSBlbmQtdXNlcnNcbiAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG59XG5cbkZldGNoRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuRmV0Y2hFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGZXRjaEVycm9yO1xuRmV0Y2hFcnJvci5wcm90b3R5cGUubmFtZSA9ICdGZXRjaEVycm9yJztcblxubGV0IGNvbnZlcnQ7XG50cnkge1xuXHRjb252ZXJ0ID0gcmVxdWlyZSgnZW5jb2RpbmcnKS5jb252ZXJ0O1xufSBjYXRjaCAoZSkge31cblxuY29uc3QgSU5URVJOQUxTID0gU3ltYm9sKCdCb2R5IGludGVybmFscycpO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJQYXNzVGhyb3VnaFwiIGlzbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxuY29uc3QgUGFzc1Rocm91Z2ggPSBTdHJlYW0uUGFzc1Rocm91Z2g7XG5cbi8qKlxuICogQm9keSBtaXhpblxuICpcbiAqIFJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlcbiAqXG4gKiBAcGFyYW0gICBTdHJlYW0gIGJvZHkgIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtICAgT2JqZWN0ICBvcHRzICBSZXNwb25zZSBvcHRpb25zXG4gKiBAcmV0dXJuICBWb2lkXG4gKi9cbmZ1bmN0aW9uIEJvZHkoYm9keSkge1xuXHR2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcblx0ICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZTtcblxuXHRsZXQgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdW5kZWZpbmVkID8gMCA6IF9yZWYkc2l6ZTtcblx0dmFyIF9yZWYkdGltZW91dCA9IF9yZWYudGltZW91dDtcblx0bGV0IHRpbWVvdXQgPSBfcmVmJHRpbWVvdXQgPT09IHVuZGVmaW5lZCA/IDAgOiBfcmVmJHRpbWVvdXQ7XG5cblx0aWYgKGJvZHkgPT0gbnVsbCkge1xuXHRcdC8vIGJvZHkgaXMgdW5kZWZpbmVkIG9yIG51bGxcblx0XHRib2R5ID0gbnVsbDtcblx0fSBlbHNlIGlmIChpc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYSBVUkxTZWFyY2hQYXJhbXNcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oYm9keS50b1N0cmluZygpKTtcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIDsgZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSA7IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oYm9keSk7XG5cdH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBBcnJheUJ1ZmZlclZpZXdcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKTtcblx0fSBlbHNlIGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtKSA7IGVsc2Uge1xuXHRcdC8vIG5vbmUgb2YgdGhlIGFib3ZlXG5cdFx0Ly8gY29lcmNlIHRvIHN0cmluZyB0aGVuIGJ1ZmZlclxuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShTdHJpbmcoYm9keSkpO1xuXHR9XG5cdHRoaXNbSU5URVJOQUxTXSA9IHtcblx0XHRib2R5LFxuXHRcdGRpc3R1cmJlZDogZmFsc2UsXG5cdFx0ZXJyb3I6IG51bGxcblx0fTtcblx0dGhpcy5zaXplID0gc2l6ZTtcblx0dGhpcy50aW1lb3V0ID0gdGltZW91dDtcblxuXHRpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkge1xuXHRcdGJvZHkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0Y29uc3QgZXJyb3IgPSBlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InID8gZXJyIDogbmV3IEZldGNoRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgYm9keSB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtfdGhpcy51cmx9OiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpO1xuXHRcdFx0X3RoaXNbSU5URVJOQUxTXS5lcnJvciA9IGVycm9yO1xuXHRcdH0pO1xuXHR9XG59XG5cbkJvZHkucHJvdG90eXBlID0ge1xuXHRnZXQgYm9keSgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFNdLmJvZHk7XG5cdH0sXG5cblx0Z2V0IGJvZHlVc2VkKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMU10uZGlzdHVyYmVkO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyBBcnJheUJ1ZmZlclxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHRhcnJheUJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWYpIHtcblx0XHRcdHJldHVybiBidWYuYnVmZmVyLnNsaWNlKGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZU9mZnNldCArIGJ1Zi5ieXRlTGVuZ3RoKTtcblx0XHR9KTtcblx0fSxcblxuXHQvKipcbiAgKiBSZXR1cm4gcmF3IHJlc3BvbnNlIGFzIEJsb2JcbiAgKlxuICAqIEByZXR1cm4gUHJvbWlzZVxuICAqL1xuXHRibG9iKCkge1xuXHRcdGxldCBjdCA9IHRoaXMuaGVhZGVycyAmJiB0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSB8fCAnJztcblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWYpIHtcblx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0Ly8gUHJldmVudCBjb3B5aW5nXG5cdFx0XHRuZXcgQmxvYihbXSwge1xuXHRcdFx0XHR0eXBlOiBjdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KSwge1xuXHRcdFx0XHRbQlVGRkVSXTogYnVmXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMganNvblxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHRqc29uKCkge1xuXHRcdHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5wYXJzZShidWZmZXIudG9TdHJpbmcoKSk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZWplY3QobmV3IEZldGNoRXJyb3IoYGludmFsaWQganNvbiByZXNwb25zZSBib2R5IGF0ICR7X3RoaXMyLnVybH0gcmVhc29uOiAke2Vyci5tZXNzYWdlfWAsICdpbnZhbGlkLWpzb24nKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIHRleHRcbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0dGV4dCgpIHtcblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdHJldHVybiBidWZmZXIudG9TdHJpbmcoKTtcblx0XHR9KTtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgYnVmZmVyIChub24tc3BlYyBhcGkpXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdGJ1ZmZlcigpIHtcblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKTtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgdGV4dCwgd2hpbGUgYXV0b21hdGljYWxseSBkZXRlY3RpbmcgdGhlIGVuY29kaW5nIGFuZFxuICAqIHRyeWluZyB0byBkZWNvZGUgdG8gVVRGLTggKG5vbi1zcGVjIGFwaSlcbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0dGV4dENvbnZlcnRlZCgpIHtcblx0XHR2YXIgX3RoaXMzID0gdGhpcztcblxuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0cmV0dXJuIGNvbnZlcnRCb2R5KGJ1ZmZlciwgX3RoaXMzLmhlYWRlcnMpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG4vLyBJbiBicm93c2VycywgYWxsIHByb3BlcnRpZXMgYXJlIGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCb2R5LnByb3RvdHlwZSwge1xuXHRib2R5OiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0Ym9keVVzZWQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRhcnJheUJ1ZmZlcjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGJsb2I6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRqc29uOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dGV4dDogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5Cb2R5Lm1peEluID0gZnVuY3Rpb24gKHByb3RvKSB7XG5cdGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCb2R5LnByb3RvdHlwZSkpIHtcblx0XHQvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZnV0dXJlIHByb29mXG5cdFx0aWYgKCEobmFtZSBpbiBwcm90bykpIHtcblx0XHRcdGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEJvZHkucHJvdG90eXBlLCBuYW1lKTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgbmFtZSwgZGVzYyk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIENvbnN1bWUgYW5kIGNvbnZlcnQgYW4gZW50aXJlIEJvZHkgdG8gYSBCdWZmZXIuXG4gKlxuICogUmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNvbnN1bWUtYm9keVxuICpcbiAqIEByZXR1cm4gIFByb21pc2VcbiAqL1xuZnVuY3Rpb24gY29uc3VtZUJvZHkoKSB7XG5cdHZhciBfdGhpczQgPSB0aGlzO1xuXG5cdGlmICh0aGlzW0lOVEVSTkFMU10uZGlzdHVyYmVkKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihgYm9keSB1c2VkIGFscmVhZHkgZm9yOiAke3RoaXMudXJsfWApKTtcblx0fVxuXG5cdHRoaXNbSU5URVJOQUxTXS5kaXN0dXJiZWQgPSB0cnVlO1xuXG5cdGlmICh0aGlzW0lOVEVSTkFMU10uZXJyb3IpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlamVjdCh0aGlzW0lOVEVSTkFMU10uZXJyb3IpO1xuXHR9XG5cblx0bGV0IGJvZHkgPSB0aGlzLmJvZHk7XG5cblx0Ly8gYm9keSBpcyBudWxsXG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG5cdH1cblxuXHQvLyBib2R5IGlzIGJsb2Jcblx0aWYgKGlzQmxvYihib2R5KSkge1xuXHRcdGJvZHkgPSBib2R5LnN0cmVhbSgpO1xuXHR9XG5cblx0Ly8gYm9keSBpcyBidWZmZXJcblx0aWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVzb2x2ZShib2R5KTtcblx0fVxuXG5cdC8vIGlzdGFuYnVsIGlnbm9yZSBpZjogc2hvdWxkIG5ldmVyIGhhcHBlblxuXHRpZiAoIShib2R5IGluc3RhbmNlb2YgU3RyZWFtKSkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuXHR9XG5cblx0Ly8gYm9keSBpcyBzdHJlYW1cblx0Ly8gZ2V0IHJlYWR5IHRvIGFjdHVhbGx5IGNvbnN1bWUgdGhlIGJvZHlcblx0bGV0IGFjY3VtID0gW107XG5cdGxldCBhY2N1bUJ5dGVzID0gMDtcblx0bGV0IGFib3J0ID0gZmFsc2U7XG5cblx0cmV0dXJuIG5ldyBCb2R5LlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdGxldCByZXNUaW1lb3V0O1xuXG5cdFx0Ly8gYWxsb3cgdGltZW91dCBvbiBzbG93IHJlc3BvbnNlIGJvZHlcblx0XHRpZiAoX3RoaXM0LnRpbWVvdXQpIHtcblx0XHRcdHJlc1RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0YWJvcnQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYFJlc3BvbnNlIHRpbWVvdXQgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7X3RoaXM0LnVybH0gKG92ZXIgJHtfdGhpczQudGltZW91dH1tcylgLCAnYm9keS10aW1lb3V0JykpO1xuXHRcdFx0fSwgX3RoaXM0LnRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdC8vIGhhbmRsZSBzdHJlYW0gZXJyb3JzXG5cdFx0Ym9keS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuXHRcdFx0XHQvLyBpZiB0aGUgcmVxdWVzdCB3YXMgYWJvcnRlZCwgcmVqZWN0IHdpdGggdGhpcyBFcnJvclxuXHRcdFx0XHRhYm9ydCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gb3RoZXIgZXJyb3JzLCBzdWNoIGFzIGluY29ycmVjdCBjb250ZW50LWVuY29kaW5nXG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgSW52YWxpZCByZXNwb25zZSBib2R5IHdoaWxlIHRyeWluZyB0byBmZXRjaCAke190aGlzNC51cmx9OiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGJvZHkub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcblx0XHRcdGlmIChhYm9ydCB8fCBjaHVuayA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChfdGhpczQuc2l6ZSAmJiBhY2N1bUJ5dGVzICsgY2h1bmsubGVuZ3RoID4gX3RoaXM0LnNpemUpIHtcblx0XHRcdFx0YWJvcnQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYGNvbnRlbnQgc2l6ZSBhdCAke190aGlzNC51cmx9IG92ZXIgbGltaXQ6ICR7X3RoaXM0LnNpemV9YCwgJ21heC1zaXplJykpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGFjY3VtQnl0ZXMgKz0gY2h1bmsubGVuZ3RoO1xuXHRcdFx0YWNjdW0ucHVzaChjaHVuayk7XG5cdFx0fSk7XG5cblx0XHRib2R5Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoYWJvcnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjbGVhclRpbWVvdXQocmVzVGltZW91dCk7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc29sdmUoQnVmZmVyLmNvbmNhdChhY2N1bSwgYWNjdW1CeXRlcykpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBzdHJlYW1zIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCB0b28gbXVjaCBkYXRhIChpc3N1ZSAjNDE0KVxuXHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgQnVmZmVyIGZyb20gcmVzcG9uc2UgYm9keSBmb3IgJHtfdGhpczQudXJsfTogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIERldGVjdCBidWZmZXIgZW5jb2RpbmcgYW5kIGNvbnZlcnQgdG8gdGFyZ2V0IGVuY29kaW5nXG4gKiByZWY6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtaHRtbDUtMjAxMTAxMTMvcGFyc2luZy5odG1sI2RldGVybWluaW5nLXRoZS1jaGFyYWN0ZXItZW5jb2RpbmdcbiAqXG4gKiBAcGFyYW0gICBCdWZmZXIgIGJ1ZmZlciAgICBJbmNvbWluZyBidWZmZXJcbiAqIEBwYXJhbSAgIFN0cmluZyAgZW5jb2RpbmcgIFRhcmdldCBlbmNvZGluZ1xuICogQHJldHVybiAgU3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCb2R5KGJ1ZmZlciwgaGVhZGVycykge1xuXHRpZiAodHlwZW9mIGNvbnZlcnQgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYWNrYWdlIGBlbmNvZGluZ2AgbXVzdCBiZSBpbnN0YWxsZWQgdG8gdXNlIHRoZSB0ZXh0Q29udmVydGVkKCkgZnVuY3Rpb24nKTtcblx0fVxuXG5cdGNvbnN0IGN0ID0gaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuXHRsZXQgY2hhcnNldCA9ICd1dGYtOCc7XG5cdGxldCByZXMsIHN0cjtcblxuXHQvLyBoZWFkZXJcblx0aWYgKGN0KSB7XG5cdFx0cmVzID0gL2NoYXJzZXQ9KFteO10qKS9pLmV4ZWMoY3QpO1xuXHR9XG5cblx0Ly8gbm8gY2hhcnNldCBpbiBjb250ZW50IHR5cGUsIHBlZWsgYXQgcmVzcG9uc2UgYm9keSBmb3IgYXQgbW9zdCAxMDI0IGJ5dGVzXG5cdHN0ciA9IGJ1ZmZlci5zbGljZSgwLCAxMDI0KS50b1N0cmluZygpO1xuXG5cdC8vIGh0bWw1XG5cdGlmICghcmVzICYmIHN0cikge1xuXHRcdHJlcyA9IC88bWV0YS4rP2NoYXJzZXQ9KFsnXCJdKSguKz8pXFwxL2kuZXhlYyhzdHIpO1xuXHR9XG5cblx0Ly8gaHRtbDRcblx0aWYgKCFyZXMgJiYgc3RyKSB7XG5cdFx0cmVzID0gLzxtZXRhW1xcc10rP2h0dHAtZXF1aXY9KFsnXCJdKWNvbnRlbnQtdHlwZVxcMVtcXHNdKz9jb250ZW50PShbJ1wiXSkoLis/KVxcMi9pLmV4ZWMoc3RyKTtcblx0XHRpZiAoIXJlcykge1xuXHRcdFx0cmVzID0gLzxtZXRhW1xcc10rP2NvbnRlbnQ9KFsnXCJdKSguKz8pXFwxW1xcc10rP2h0dHAtZXF1aXY9KFsnXCJdKWNvbnRlbnQtdHlwZVxcMy9pLmV4ZWMoc3RyKTtcblx0XHRcdGlmIChyZXMpIHtcblx0XHRcdFx0cmVzLnBvcCgpOyAvLyBkcm9wIGxhc3QgcXVvdGVcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocmVzKSB7XG5cdFx0XHRyZXMgPSAvY2hhcnNldD0oLiopL2kuZXhlYyhyZXMucG9wKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8vIHhtbFxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcblx0XHRyZXMgPSAvPFxcP3htbC4rP2VuY29kaW5nPShbJ1wiXSkoLis/KVxcMS9pLmV4ZWMoc3RyKTtcblx0fVxuXG5cdC8vIGZvdW5kIGNoYXJzZXRcblx0aWYgKHJlcykge1xuXHRcdGNoYXJzZXQgPSByZXMucG9wKCk7XG5cblx0XHQvLyBwcmV2ZW50IGRlY29kZSBpc3N1ZXMgd2hlbiBzaXRlcyB1c2UgaW5jb3JyZWN0IGVuY29kaW5nXG5cdFx0Ly8gcmVmOiBodHRwczovL2hzaXZvbmVuLmZpL2VuY29kaW5nLW1lbnUvXG5cdFx0aWYgKGNoYXJzZXQgPT09ICdnYjIzMTInIHx8IGNoYXJzZXQgPT09ICdnYmsnKSB7XG5cdFx0XHRjaGFyc2V0ID0gJ2diMTgwMzAnO1xuXHRcdH1cblx0fVxuXG5cdC8vIHR1cm4gcmF3IGJ1ZmZlcnMgaW50byBhIHNpbmdsZSB1dGYtOCBidWZmZXJcblx0cmV0dXJuIGNvbnZlcnQoYnVmZmVyLCAnVVRGLTgnLCBjaGFyc2V0KS50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIERldGVjdCBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2JpdGlubi9ub2RlLWZldGNoL2lzc3Vlcy8yOTYjaXNzdWVjb21tZW50LTMwNzU5ODE0M1xuICpcbiAqIEBwYXJhbSAgIE9iamVjdCAgb2JqICAgICBPYmplY3QgdG8gZGV0ZWN0IGJ5IHR5cGUgb3IgYnJhbmRcbiAqIEByZXR1cm4gIFN0cmluZ1xuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyhvYmopIHtcblx0Ly8gRHVjay10eXBpbmcgYXMgYSBuZWNlc3NhcnkgY29uZGl0aW9uLlxuXHRpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iai5hcHBlbmQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9iai5kZWxldGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9iai5nZXQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9iai5nZXRBbGwgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9iai5oYXMgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9iai5zZXQgIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBCcmFuZC1jaGVja2luZyBhbmQgbW9yZSBkdWNrLXR5cGluZyBhcyBvcHRpb25hbCBjb25kaXRpb24uXG5cdHJldHVybiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gJ1VSTFNlYXJjaFBhcmFtcycgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc10nIHx8IHR5cGVvZiBvYmouc29ydCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIFczQyBgQmxvYmAgb2JqZWN0ICh3aGljaCBgRmlsZWAgaW5oZXJpdHMgZnJvbSlcbiAqIEBwYXJhbSAgeyp9IG9ialxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNCbG9iKG9iaikge1xuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLnR5cGUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBvYmouc3RyZWFtID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSAnc3RyaW5nJyAmJiAvXihCbG9ifEZpbGUpJC8udGVzdChvYmouY29uc3RydWN0b3IubmFtZSkgJiYgL14oQmxvYnxGaWxlKSQvLnRlc3Qob2JqW1N5bWJvbC50b1N0cmluZ1RhZ10pO1xufVxuXG4vKipcbiAqIENsb25lIGJvZHkgZ2l2ZW4gUmVzL1JlcSBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSAgIE1peGVkICBpbnN0YW5jZSAgUmVzcG9uc2Ugb3IgUmVxdWVzdCBpbnN0YW5jZVxuICogQHJldHVybiAgTWl4ZWRcbiAqL1xuZnVuY3Rpb24gY2xvbmUoaW5zdGFuY2UpIHtcblx0bGV0IHAxLCBwMjtcblx0bGV0IGJvZHkgPSBpbnN0YW5jZS5ib2R5O1xuXG5cdC8vIGRvbid0IGFsbG93IGNsb25pbmcgYSB1c2VkIGJvZHlcblx0aWYgKGluc3RhbmNlLmJvZHlVc2VkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY2xvbmUgYm9keSBhZnRlciBpdCBpcyB1c2VkJyk7XG5cdH1cblxuXHQvLyBjaGVjayB0aGF0IGJvZHkgaXMgYSBzdHJlYW0gYW5kIG5vdCBmb3JtLWRhdGEgb2JqZWN0XG5cdC8vIG5vdGU6IHdlIGNhbid0IGNsb25lIHRoZSBmb3JtLWRhdGEgb2JqZWN0IHdpdGhvdXQgaGF2aW5nIGl0IGFzIGEgZGVwZW5kZW5jeVxuXHRpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSAmJiB0eXBlb2YgYm9keS5nZXRCb3VuZGFyeSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdC8vIHRlZSBpbnN0YW5jZSBib2R5XG5cdFx0cDEgPSBuZXcgUGFzc1Rocm91Z2goKTtcblx0XHRwMiA9IG5ldyBQYXNzVGhyb3VnaCgpO1xuXHRcdGJvZHkucGlwZShwMSk7XG5cdFx0Ym9keS5waXBlKHAyKTtcblx0XHQvLyBzZXQgaW5zdGFuY2UgYm9keSB0byB0ZWVkIGJvZHkgYW5kIHJldHVybiB0aGUgb3RoZXIgdGVlZCBib2R5XG5cdFx0aW5zdGFuY2VbSU5URVJOQUxTXS5ib2R5ID0gcDE7XG5cdFx0Ym9keSA9IHAyO1xuXHR9XG5cblx0cmV0dXJuIGJvZHk7XG59XG5cbi8qKlxuICogUGVyZm9ybXMgdGhlIG9wZXJhdGlvbiBcImV4dHJhY3QgYSBgQ29udGVudC1UeXBlYCB2YWx1ZSBmcm9tIHxvYmplY3R8XCIgYXNcbiAqIHNwZWNpZmllZCBpbiB0aGUgc3BlY2lmaWNhdGlvbjpcbiAqIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHlpbml0LWV4dHJhY3RcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBpbnN0YW5jZS5ib2R5IGlzIHByZXNlbnQuXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgIGluc3RhbmNlICBBbnkgb3B0aW9ucy5ib2R5IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RDb250ZW50VHlwZShib2R5KSB7XG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyBudWxsXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJpbmdcblx0XHRyZXR1cm4gJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCc7XG5cdH0gZWxzZSBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGEgVVJMU2VhcmNoUGFyYW1zXG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCc7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBibG9iXG5cdFx0cmV0dXJuIGJvZHkudHlwZSB8fCBudWxsO1xuXHR9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYnVmZmVyXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7XG5cdFx0Ly8gYm9keSBpcyBBcnJheUJ1ZmZlclxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJWaWV3XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGJvZHkuZ2V0Qm91bmRhcnkgPT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBkZXRlY3QgZm9ybSBkYXRhIGlucHV0IGZyb20gZm9ybS1kYXRhIG1vZHVsZVxuXHRcdHJldHVybiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTtib3VuZGFyeT0ke2JvZHkuZ2V0Qm91bmRhcnkoKX1gO1xuXHR9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIHtcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxuXHRcdC8vIGNhbid0IHJlYWxseSBkbyBtdWNoIGFib3V0IHRoaXNcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHQvLyBCb2R5IGNvbnN0cnVjdG9yIGRlZmF1bHRzIG90aGVyIHRoaW5ncyB0byBzdHJpbmdcblx0XHRyZXR1cm4gJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCc7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgRmV0Y2ggU3RhbmRhcmQgdHJlYXRzIHRoaXMgYXMgaWYgXCJ0b3RhbCBieXRlc1wiIGlzIGEgcHJvcGVydHkgb24gdGhlIGJvZHkuXG4gKiBGb3IgdXMsIHdlIGhhdmUgdG8gZXhwbGljaXRseSBnZXQgaXQgd2l0aCBhIGZ1bmN0aW9uLlxuICpcbiAqIHJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS10b3RhbC1ieXRlc1xuICpcbiAqIEBwYXJhbSAgIEJvZHkgICAgaW5zdGFuY2UgICBJbnN0YW5jZSBvZiBCb2R5XG4gKiBAcmV0dXJuICBOdW1iZXI/ICAgICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzLCBvciBudWxsIGlmIG5vdCBwb3NzaWJsZVxuICovXG5mdW5jdGlvbiBnZXRUb3RhbEJ5dGVzKGluc3RhbmNlKSB7XG5cdGNvbnN0IGJvZHkgPSBpbnN0YW5jZS5ib2R5O1xuXG5cblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIG51bGxcblx0XHRyZXR1cm4gMDtcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHRyZXR1cm4gYm9keS5zaXplO1xuXHR9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYnVmZmVyXG5cdFx0cmV0dXJuIGJvZHkubGVuZ3RoO1xuXHR9IGVsc2UgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkuZ2V0TGVuZ3RoU3luYyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdC8vIGRldGVjdCBmb3JtIGRhdGEgaW5wdXQgZnJvbSBmb3JtLWRhdGEgbW9kdWxlXG5cdFx0aWYgKGJvZHkuX2xlbmd0aFJldHJpZXZlcnMgJiYgYm9keS5fbGVuZ3RoUmV0cmlldmVycy5sZW5ndGggPT0gMCB8fCAvLyAxLnhcblx0XHRib2R5Lmhhc0tub3duTGVuZ3RoICYmIGJvZHkuaGFzS25vd25MZW5ndGgoKSkge1xuXHRcdFx0Ly8gMi54XG5cdFx0XHRyZXR1cm4gYm9keS5nZXRMZW5ndGhTeW5jKCk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGJvZHkgaXMgc3RyZWFtXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBXcml0ZSBhIEJvZHkgdG8gYSBOb2RlLmpzIFdyaXRhYmxlU3RyZWFtIChlLmcuIGh0dHAuUmVxdWVzdCkgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSAgIEJvZHkgICAgaW5zdGFuY2UgICBJbnN0YW5jZSBvZiBCb2R5XG4gKiBAcmV0dXJuICBWb2lkXG4gKi9cbmZ1bmN0aW9uIHdyaXRlVG9TdHJlYW0oZGVzdCwgaW5zdGFuY2UpIHtcblx0Y29uc3QgYm9keSA9IGluc3RhbmNlLmJvZHk7XG5cblxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdC8vIGJvZHkgaXMgbnVsbFxuXHRcdGRlc3QuZW5kKCk7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0Ym9keS5zdHJlYW0oKS5waXBlKGRlc3QpO1xuXHR9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYnVmZmVyXG5cdFx0ZGVzdC53cml0ZShib2R5KTtcblx0XHRkZXN0LmVuZCgpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGJvZHkgaXMgc3RyZWFtXG5cdFx0Ym9keS5waXBlKGRlc3QpO1xuXHR9XG59XG5cbi8vIGV4cG9zZSBQcm9taXNlXG5Cb2R5LlByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcblxuLyoqXG4gKiBoZWFkZXJzLmpzXG4gKlxuICogSGVhZGVycyBjbGFzcyBvZmZlcnMgY29udmVuaWVudCBoZWxwZXJzXG4gKi9cblxuY29uc3QgaW52YWxpZFRva2VuUmVnZXggPSAvW15cXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XS87XG5jb25zdCBpbnZhbGlkSGVhZGVyQ2hhclJlZ2V4ID0gL1teXFx0XFx4MjAtXFx4N2VcXHg4MC1cXHhmZl0vO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU5hbWUobmFtZSkge1xuXHRuYW1lID0gYCR7bmFtZX1gO1xuXHRpZiAoaW52YWxpZFRva2VuUmVnZXgudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYCR7bmFtZX0gaXMgbm90IGEgbGVnYWwgSFRUUCBoZWFkZXIgbmFtZWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVmFsdWUodmFsdWUpIHtcblx0dmFsdWUgPSBgJHt2YWx1ZX1gO1xuXHRpZiAoaW52YWxpZEhlYWRlckNoYXJSZWdleC50ZXN0KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dmFsdWV9IGlzIG5vdCBhIGxlZ2FsIEhUVFAgaGVhZGVyIHZhbHVlYCk7XG5cdH1cbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBrZXkgaW4gdGhlIG1hcCBvYmplY3QgZ2l2ZW4gYSBoZWFkZXIgbmFtZS5cbiAqXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gKlxuICogQHBhcmFtICAgU3RyaW5nICBuYW1lICBIZWFkZXIgbmFtZVxuICogQHJldHVybiAgU3RyaW5nfFVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBmaW5kKG1hcCwgbmFtZSkge1xuXHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBtYXApIHtcblx0XHRpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IG5hbWUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IE1BUCA9IFN5bWJvbCgnbWFwJyk7XG5jbGFzcyBIZWFkZXJzIHtcblx0LyoqXG4gICogSGVhZGVycyBjbGFzc1xuICAqXG4gICogQHBhcmFtICAgT2JqZWN0ICBoZWFkZXJzICBSZXNwb25zZSBoZWFkZXJzXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRsZXQgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuXG5cdFx0dGhpc1tNQVBdID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRcdGlmIChpbml0IGluc3RhbmNlb2YgSGVhZGVycykge1xuXHRcdFx0Y29uc3QgcmF3SGVhZGVycyA9IGluaXQucmF3KCk7XG5cdFx0XHRjb25zdCBoZWFkZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJhd0hlYWRlcnMpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgaGVhZGVyTmFtZXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiByYXdIZWFkZXJzW2hlYWRlck5hbWVdKSB7XG5cdFx0XHRcdFx0dGhpcy5hcHBlbmQoaGVhZGVyTmFtZSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBXZSBkb24ndCB3b3JyeSBhYm91dCBjb252ZXJ0aW5nIHByb3AgdG8gQnl0ZVN0cmluZyBoZXJlIGFzIGFwcGVuZCgpXG5cdFx0Ly8gd2lsbCBoYW5kbGUgaXQuXG5cdFx0aWYgKGluaXQgPT0gbnVsbCkgOyBlbHNlIGlmICh0eXBlb2YgaW5pdCA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGNvbnN0IG1ldGhvZCA9IGluaXRbU3ltYm9sLml0ZXJhdG9yXTtcblx0XHRcdGlmIChtZXRob2QgIT0gbnVsbCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIG1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0hlYWRlciBwYWlycyBtdXN0IGJlIGl0ZXJhYmxlJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj5cblx0XHRcdFx0Ly8gTm90ZTogcGVyIHNwZWMgd2UgaGF2ZSB0byBmaXJzdCBleGhhdXN0IHRoZSBsaXN0cyB0aGVuIHByb2Nlc3MgdGhlbVxuXHRcdFx0XHRjb25zdCBwYWlycyA9IFtdO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHBhaXIgb2YgaW5pdCkge1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgcGFpciAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhaXJbU3ltYm9sLml0ZXJhdG9yXSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRWFjaCBoZWFkZXIgcGFpciBtdXN0IGJlIGl0ZXJhYmxlJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBhaXJzLnB1c2goQXJyYXkuZnJvbShwYWlyKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcblx0XHRcdFx0XHRpZiAocGFpci5sZW5ndGggIT09IDIpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0VhY2ggaGVhZGVyIHBhaXIgbXVzdCBiZSBhIG5hbWUvdmFsdWUgdHVwbGUnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5hcHBlbmQocGFpclswXSwgcGFpclsxXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPlxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbml0KSkge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gaW5pdFtrZXldO1xuXHRcdFx0XHRcdHRoaXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIGluaXRpYWxpemVyIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG4gICogUmV0dXJuIGNvbWJpbmVkIGhlYWRlciB2YWx1ZSBnaXZlbiBuYW1lXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgIEhlYWRlciBuYW1lXG4gICogQHJldHVybiAgTWl4ZWRcbiAgKi9cblx0Z2V0KG5hbWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XG5cdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1tNQVBdW2tleV0uam9pbignLCAnKTtcblx0fVxuXG5cdC8qKlxuICAqIEl0ZXJhdGUgb3ZlciBhbGwgaGVhZGVyc1xuICAqXG4gICogQHBhcmFtICAgRnVuY3Rpb24gIGNhbGxiYWNrICBFeGVjdXRlZCBmb3IgZWFjaCBpdGVtIHdpdGggcGFyYW1ldGVycyAodmFsdWUsIG5hbWUsIHRoaXNBcmcpXG4gICogQHBhcmFtICAgQm9vbGVhbiAgIHRoaXNBcmcgICBgdGhpc2AgY29udGV4dCBmb3IgY2FsbGJhY2sgZnVuY3Rpb25cbiAgKiBAcmV0dXJuICBWb2lkXG4gICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHRsZXQgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG5cdFx0bGV0IHBhaXJzID0gZ2V0SGVhZGVycyh0aGlzKTtcblx0XHRsZXQgaSA9IDA7XG5cdFx0d2hpbGUgKGkgPCBwYWlycy5sZW5ndGgpIHtcblx0XHRcdHZhciBfcGFpcnMkaSA9IHBhaXJzW2ldO1xuXHRcdFx0Y29uc3QgbmFtZSA9IF9wYWlycyRpWzBdLFxuXHRcdFx0ICAgICAgdmFsdWUgPSBfcGFpcnMkaVsxXTtcblxuXHRcdFx0Y2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2YWx1ZSwgbmFtZSwgdGhpcyk7XG5cdFx0XHRwYWlycyA9IGdldEhlYWRlcnModGhpcyk7XG5cdFx0XHRpKys7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG4gICogT3ZlcndyaXRlIGhlYWRlciB2YWx1ZXMgZ2l2ZW4gbmFtZVxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICAgSGVhZGVyIG5hbWVcbiAgKiBAcGFyYW0gICBTdHJpbmcgIHZhbHVlICBIZWFkZXIgdmFsdWVcbiAgKiBAcmV0dXJuICBWb2lkXG4gICovXG5cdHNldChuYW1lLCB2YWx1ZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsdWUgPSBgJHt2YWx1ZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHR2YWxpZGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XG5cdFx0dGhpc1tNQVBdW2tleSAhPT0gdW5kZWZpbmVkID8ga2V5IDogbmFtZV0gPSBbdmFsdWVdO1xuXHR9XG5cblx0LyoqXG4gICogQXBwZW5kIGEgdmFsdWUgb250byBleGlzdGluZyBoZWFkZXJcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgIEhlYWRlciBuYW1lXG4gICogQHBhcmFtICAgU3RyaW5nICB2YWx1ZSAgSGVhZGVyIHZhbHVlXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRhcHBlbmQobmFtZSwgdmFsdWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbHVlID0gYCR7dmFsdWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0dmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tNQVBdW2tleV0ucHVzaCh2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXNbTUFQXVtuYW1lXSA9IFt2YWx1ZV07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG4gICogQ2hlY2sgZm9yIGhlYWRlciBuYW1lIGV4aXN0ZW5jZVxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICAgbmFtZSAgSGVhZGVyIG5hbWVcbiAgKiBAcmV0dXJuICBCb29sZWFuXG4gICovXG5cdGhhcyhuYW1lKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0cmV0dXJuIGZpbmQodGhpc1tNQVBdLCBuYW1lKSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG4gICogRGVsZXRlIGFsbCBoZWFkZXIgdmFsdWVzIGdpdmVuIG5hbWVcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgSGVhZGVyIG5hbWVcbiAgKiBAcmV0dXJuICBWb2lkXG4gICovXG5cdGRlbGV0ZShuYW1lKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbTUFQXVtrZXldO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIFJldHVybiByYXcgaGVhZGVycyAobm9uLXNwZWMgYXBpKVxuICAqXG4gICogQHJldHVybiAgT2JqZWN0XG4gICovXG5cdHJhdygpIHtcblx0XHRyZXR1cm4gdGhpc1tNQVBdO1xuXHR9XG5cblx0LyoqXG4gICogR2V0IGFuIGl0ZXJhdG9yIG9uIGtleXMuXG4gICpcbiAgKiBAcmV0dXJuICBJdGVyYXRvclxuICAqL1xuXHRrZXlzKCkge1xuXHRcdHJldHVybiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGhpcywgJ2tleScpO1xuXHR9XG5cblx0LyoqXG4gICogR2V0IGFuIGl0ZXJhdG9yIG9uIHZhbHVlcy5cbiAgKlxuICAqIEByZXR1cm4gIEl0ZXJhdG9yXG4gICovXG5cdHZhbHVlcygpIHtcblx0XHRyZXR1cm4gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRoaXMsICd2YWx1ZScpO1xuXHR9XG5cblx0LyoqXG4gICogR2V0IGFuIGl0ZXJhdG9yIG9uIGVudHJpZXMuXG4gICpcbiAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIG9mIHRoZSBIZWFkZXJzIG9iamVjdC5cbiAgKlxuICAqIEByZXR1cm4gIEl0ZXJhdG9yXG4gICovXG5cdFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuXHRcdHJldHVybiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGhpcywgJ2tleSt2YWx1ZScpO1xuXHR9XG59XG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhlYWRlcnMucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdIZWFkZXJzJyxcblx0d3JpdGFibGU6IGZhbHNlLFxuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSGVhZGVycy5wcm90b3R5cGUsIHtcblx0Z2V0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0Zm9yRWFjaDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHNldDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGFwcGVuZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGhhczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGRlbGV0ZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGtleXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHR2YWx1ZXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRlbnRyaWVzOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbmZ1bmN0aW9uIGdldEhlYWRlcnMoaGVhZGVycykge1xuXHRsZXQga2luZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2tleSt2YWx1ZSc7XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnNbTUFQXSkuc29ydCgpO1xuXHRyZXR1cm4ga2V5cy5tYXAoa2luZCA9PT0gJ2tleScgPyBmdW5jdGlvbiAoaykge1xuXHRcdHJldHVybiBrLnRvTG93ZXJDYXNlKCk7XG5cdH0gOiBraW5kID09PSAndmFsdWUnID8gZnVuY3Rpb24gKGspIHtcblx0XHRyZXR1cm4gaGVhZGVyc1tNQVBdW2tdLmpvaW4oJywgJyk7XG5cdH0gOiBmdW5jdGlvbiAoaykge1xuXHRcdHJldHVybiBbay50b0xvd2VyQ2FzZSgpLCBoZWFkZXJzW01BUF1ba10uam9pbignLCAnKV07XG5cdH0pO1xufVxuXG5jb25zdCBJTlRFUk5BTCA9IFN5bWJvbCgnaW50ZXJuYWwnKTtcblxuZnVuY3Rpb24gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRhcmdldCwga2luZCkge1xuXHRjb25zdCBpdGVyYXRvciA9IE9iamVjdC5jcmVhdGUoSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlKTtcblx0aXRlcmF0b3JbSU5URVJOQUxdID0ge1xuXHRcdHRhcmdldCxcblx0XHRraW5kLFxuXHRcdGluZGV4OiAwXG5cdH07XG5cdHJldHVybiBpdGVyYXRvcjtcbn1cblxuY29uc3QgSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mKHtcblx0bmV4dCgpIHtcblx0XHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcblx0XHRpZiAoIXRoaXMgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpICE9PSBIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIG9mIGB0aGlzYCBpcyBub3QgYSBIZWFkZXJzSXRlcmF0b3InKTtcblx0XHR9XG5cblx0XHR2YXIgX0lOVEVSTkFMID0gdGhpc1tJTlRFUk5BTF07XG5cdFx0Y29uc3QgdGFyZ2V0ID0gX0lOVEVSTkFMLnRhcmdldCxcblx0XHQgICAgICBraW5kID0gX0lOVEVSTkFMLmtpbmQsXG5cdFx0ICAgICAgaW5kZXggPSBfSU5URVJOQUwuaW5kZXg7XG5cblx0XHRjb25zdCB2YWx1ZXMgPSBnZXRIZWFkZXJzKHRhcmdldCwga2luZCk7XG5cdFx0Y29uc3QgbGVuID0gdmFsdWVzLmxlbmd0aDtcblx0XHRpZiAoaW5kZXggPj0gbGVuKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRkb25lOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXNbSU5URVJOQUxdLmluZGV4ID0gaW5kZXggKyAxO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHZhbHVlOiB2YWx1ZXNbaW5kZXhdLFxuXHRcdFx0ZG9uZTogZmFsc2Vcblx0XHR9O1xuXHR9XG59LCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnSGVhZGVyc0l0ZXJhdG9yJyxcblx0d3JpdGFibGU6IGZhbHNlLFxuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuLyoqXG4gKiBFeHBvcnQgdGhlIEhlYWRlcnMgb2JqZWN0IGluIGEgZm9ybSB0aGF0IE5vZGUuanMgY2FuIGNvbnN1bWUuXG4gKlxuICogQHBhcmFtICAgSGVhZGVycyAgaGVhZGVyc1xuICogQHJldHVybiAgT2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGV4cG9ydE5vZGVDb21wYXRpYmxlSGVhZGVycyhoZWFkZXJzKSB7XG5cdGNvbnN0IG9iaiA9IE9iamVjdC5hc3NpZ24oeyBfX3Byb3RvX186IG51bGwgfSwgaGVhZGVyc1tNQVBdKTtcblxuXHQvLyBodHRwLnJlcXVlc3QoKSBvbmx5IHN1cHBvcnRzIHN0cmluZyBhcyBIb3N0IGhlYWRlci4gVGhpcyBoYWNrIG1ha2VzXG5cdC8vIHNwZWNpZnlpbmcgY3VzdG9tIEhvc3QgaGVhZGVyIHBvc3NpYmxlLlxuXHRjb25zdCBob3N0SGVhZGVyS2V5ID0gZmluZChoZWFkZXJzW01BUF0sICdIb3N0Jyk7XG5cdGlmIChob3N0SGVhZGVyS2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRvYmpbaG9zdEhlYWRlcktleV0gPSBvYmpbaG9zdEhlYWRlcktleV1bMF07XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIEhlYWRlcnMgb2JqZWN0IGZyb20gYW4gb2JqZWN0IG9mIGhlYWRlcnMsIGlnbm9yaW5nIHRob3NlIHRoYXQgZG9cbiAqIG5vdCBjb25mb3JtIHRvIEhUVFAgZ3JhbW1hciBwcm9kdWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gICBPYmplY3QgIG9iaiAgT2JqZWN0IG9mIGhlYWRlcnNcbiAqIEByZXR1cm4gIEhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSGVhZGVyc0xlbmllbnQob2JqKSB7XG5cdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuXHRmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuXHRcdGlmIChpbnZhbGlkVG9rZW5SZWdleC50ZXN0KG5hbWUpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkob2JqW25hbWVdKSkge1xuXHRcdFx0Zm9yIChjb25zdCB2YWwgb2Ygb2JqW25hbWVdKSB7XG5cdFx0XHRcdGlmIChpbnZhbGlkSGVhZGVyQ2hhclJlZ2V4LnRlc3QodmFsKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChoZWFkZXJzW01BUF1bbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGhlYWRlcnNbTUFQXVtuYW1lXSA9IFt2YWxdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGhlYWRlcnNbTUFQXVtuYW1lXS5wdXNoKHZhbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCFpbnZhbGlkSGVhZGVyQ2hhclJlZ2V4LnRlc3Qob2JqW25hbWVdKSkge1xuXHRcdFx0aGVhZGVyc1tNQVBdW25hbWVdID0gW29ialtuYW1lXV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBoZWFkZXJzO1xufVxuXG5jb25zdCBJTlRFUk5BTFMkMSA9IFN5bWJvbCgnUmVzcG9uc2UgaW50ZXJuYWxzJyk7XG5cbi8vIGZpeCBhbiBpc3N1ZSB3aGVyZSBcIlNUQVRVU19DT0RFU1wiIGFyZW4ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IFNUQVRVU19DT0RFUyA9IGh0dHAuU1RBVFVTX0NPREVTO1xuXG4vKipcbiAqIFJlc3BvbnNlIGNsYXNzXG4gKlxuICogQHBhcmFtICAgU3RyZWFtICBib2R5ICBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSAgIE9iamVjdCAgb3B0cyAgUmVzcG9uc2Ugb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5jbGFzcyBSZXNwb25zZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGxldCBib2R5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBudWxsO1xuXHRcdGxldCBvcHRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuXHRcdEJvZHkuY2FsbCh0aGlzLCBib2R5LCBvcHRzKTtcblxuXHRcdGNvbnN0IHN0YXR1cyA9IG9wdHMuc3RhdHVzIHx8IDIwMDtcblx0XHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0cy5oZWFkZXJzKTtcblxuXHRcdGlmIChib2R5ICE9IG51bGwgJiYgIWhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKSkge1xuXHRcdFx0Y29uc3QgY29udGVudFR5cGUgPSBleHRyYWN0Q29udGVudFR5cGUoYm9keSk7XG5cdFx0XHRpZiAoY29udGVudFR5cGUpIHtcblx0XHRcdFx0aGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW0lOVEVSTkFMUyQxXSA9IHtcblx0XHRcdHVybDogb3B0cy51cmwsXG5cdFx0XHRzdGF0dXMsXG5cdFx0XHRzdGF0dXNUZXh0OiBvcHRzLnN0YXR1c1RleHQgfHwgU1RBVFVTX0NPREVTW3N0YXR1c10sXG5cdFx0XHRoZWFkZXJzLFxuXHRcdFx0Y291bnRlcjogb3B0cy5jb3VudGVyXG5cdFx0fTtcblx0fVxuXG5cdGdldCB1cmwoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLnVybCB8fCAnJztcblx0fVxuXG5cdGdldCBzdGF0dXMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLnN0YXR1cztcblx0fVxuXG5cdC8qKlxuICAqIENvbnZlbmllbmNlIHByb3BlcnR5IHJlcHJlc2VudGluZyBpZiB0aGUgcmVxdWVzdCBlbmRlZCBub3JtYWxseVxuICAqL1xuXHRnZXQgb2soKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzIDwgMzAwO1xuXHR9XG5cblx0Z2V0IHJlZGlyZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLmNvdW50ZXIgPiAwO1xuXHR9XG5cblx0Z2V0IHN0YXR1c1RleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLnN0YXR1c1RleHQ7XG5cdH1cblxuXHRnZXQgaGVhZGVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uaGVhZGVycztcblx0fVxuXG5cdC8qKlxuICAqIENsb25lIHRoaXMgcmVzcG9uc2VcbiAgKlxuICAqIEByZXR1cm4gIFJlc3BvbnNlXG4gICovXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgUmVzcG9uc2UoY2xvbmUodGhpcyksIHtcblx0XHRcdHVybDogdGhpcy51cmwsXG5cdFx0XHRzdGF0dXM6IHRoaXMuc3RhdHVzLFxuXHRcdFx0c3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuXHRcdFx0aGVhZGVyczogdGhpcy5oZWFkZXJzLFxuXHRcdFx0b2s6IHRoaXMub2ssXG5cdFx0XHRyZWRpcmVjdGVkOiB0aGlzLnJlZGlyZWN0ZWRcblx0XHR9KTtcblx0fVxufVxuXG5Cb2R5Lm1peEluKFJlc3BvbnNlLnByb3RvdHlwZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLnByb3RvdHlwZSwge1xuXHR1cmw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzdGF0dXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRvazogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHJlZGlyZWN0ZWQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzdGF0dXNUZXh0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0aGVhZGVyczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGNsb25lOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZXNwb25zZS5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ1Jlc3BvbnNlJyxcblx0d3JpdGFibGU6IGZhbHNlLFxuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuY29uc3QgSU5URVJOQUxTJDIgPSBTeW1ib2woJ1JlcXVlc3QgaW50ZXJuYWxzJyk7XG5jb25zdCBVUkwgPSBVcmwuVVJMIHx8IHdoYXR3Z1VybC5VUkw7XG5cbi8vIGZpeCBhbiBpc3N1ZSB3aGVyZSBcImZvcm1hdFwiLCBcInBhcnNlXCIgYXJlbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxuY29uc3QgcGFyc2VfdXJsID0gVXJsLnBhcnNlO1xuY29uc3QgZm9ybWF0X3VybCA9IFVybC5mb3JtYXQ7XG5cbi8qKlxuICogV3JhcHBlciBhcm91bmQgYG5ldyBVUkxgIHRvIGhhbmRsZSBhcmJpdHJhcnkgVVJMc1xuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdXJsU3RyXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBwYXJzZVVSTCh1cmxTdHIpIHtcblx0LypcbiBcdENoZWNrIHdoZXRoZXIgdGhlIFVSTCBpcyBhYnNvbHV0ZSBvciBub3RcbiBcdFx0U2NoZW1lOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMVxuIFx0QWJzb2x1dGUgVVJMOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuM1xuICovXG5cdGlmICgvXlthLXpBLVpdW2EtekEtWlxcZCtcXC0uXSo6Ly5leGVjKHVybFN0cikpIHtcblx0XHR1cmxTdHIgPSBuZXcgVVJMKHVybFN0cikudG9TdHJpbmcoKTtcblx0fVxuXG5cdC8vIEZhbGxiYWNrIHRvIG9sZCBpbXBsZW1lbnRhdGlvbiBmb3IgYXJiaXRyYXJ5IFVSTHNcblx0cmV0dXJuIHBhcnNlX3VybCh1cmxTdHIpO1xufVxuXG5jb25zdCBzdHJlYW1EZXN0cnVjdGlvblN1cHBvcnRlZCA9ICdkZXN0cm95JyBpbiBTdHJlYW0uUmVhZGFibGUucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgUmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgIGlucHV0XG4gKiBAcmV0dXJuICBCb29sZWFuXG4gKi9cbmZ1bmN0aW9uIGlzUmVxdWVzdChpbnB1dCkge1xuXHRyZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgaW5wdXRbSU5URVJOQUxTJDJdID09PSAnb2JqZWN0Jztcbn1cblxuZnVuY3Rpb24gaXNBYm9ydFNpZ25hbChzaWduYWwpIHtcblx0Y29uc3QgcHJvdG8gPSBzaWduYWwgJiYgdHlwZW9mIHNpZ25hbCA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNpZ25hbCk7XG5cdHJldHVybiAhIShwcm90byAmJiBwcm90by5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQWJvcnRTaWduYWwnKTtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGNsYXNzXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgICBpbnB1dCAgVXJsIG9yIFJlcXVlc3QgaW5zdGFuY2VcbiAqIEBwYXJhbSAgIE9iamVjdCAgaW5pdCAgIEN1c3RvbSBvcHRpb25zXG4gKiBAcmV0dXJuICBWb2lkXG4gKi9cbmNsYXNzIFJlcXVlc3Qge1xuXHRjb25zdHJ1Y3RvcihpbnB1dCkge1xuXHRcdGxldCBpbml0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuXHRcdGxldCBwYXJzZWRVUkw7XG5cblx0XHQvLyBub3JtYWxpemUgaW5wdXRcblx0XHRpZiAoIWlzUmVxdWVzdChpbnB1dCkpIHtcblx0XHRcdGlmIChpbnB1dCAmJiBpbnB1dC5ocmVmKSB7XG5cdFx0XHRcdC8vIGluIG9yZGVyIHRvIHN1cHBvcnQgTm9kZS5qcycgVXJsIG9iamVjdHM7IHRob3VnaCBXSEFUV0cncyBVUkwgb2JqZWN0c1xuXHRcdFx0XHQvLyB3aWxsIGZhbGwgaW50byB0aGlzIGJyYW5jaCBhbHNvIChzaW5jZSB0aGVpciBgdG9TdHJpbmcoKWAgd2lsbCByZXR1cm5cblx0XHRcdFx0Ly8gYGhyZWZgIHByb3BlcnR5IGFueXdheSlcblx0XHRcdFx0cGFyc2VkVVJMID0gcGFyc2VVUkwoaW5wdXQuaHJlZik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBjb2VyY2UgaW5wdXQgdG8gYSBzdHJpbmcgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcGFyc2Vcblx0XHRcdFx0cGFyc2VkVVJMID0gcGFyc2VVUkwoYCR7aW5wdXR9YCk7XG5cdFx0XHR9XG5cdFx0XHRpbnB1dCA9IHt9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJzZWRVUkwgPSBwYXJzZVVSTChpbnB1dC51cmwpO1xuXHRcdH1cblxuXHRcdGxldCBtZXRob2QgPSBpbml0Lm1ldGhvZCB8fCBpbnB1dC5tZXRob2QgfHwgJ0dFVCc7XG5cdFx0bWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRpZiAoKGluaXQuYm9keSAhPSBudWxsIHx8IGlzUmVxdWVzdChpbnB1dCkgJiYgaW5wdXQuYm9keSAhPT0gbnVsbCkgJiYgKG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnSEVBRCcpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHknKTtcblx0XHR9XG5cblx0XHRsZXQgaW5wdXRCb2R5ID0gaW5pdC5ib2R5ICE9IG51bGwgPyBpbml0LmJvZHkgOiBpc1JlcXVlc3QoaW5wdXQpICYmIGlucHV0LmJvZHkgIT09IG51bGwgPyBjbG9uZShpbnB1dCkgOiBudWxsO1xuXG5cdFx0Qm9keS5jYWxsKHRoaXMsIGlucHV0Qm9keSwge1xuXHRcdFx0dGltZW91dDogaW5pdC50aW1lb3V0IHx8IGlucHV0LnRpbWVvdXQgfHwgMCxcblx0XHRcdHNpemU6IGluaXQuc2l6ZSB8fCBpbnB1dC5zaXplIHx8IDBcblx0XHR9KTtcblxuXHRcdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbml0LmhlYWRlcnMgfHwgaW5wdXQuaGVhZGVycyB8fCB7fSk7XG5cblx0XHRpZiAoaW5wdXRCb2R5ICE9IG51bGwgJiYgIWhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKSkge1xuXHRcdFx0Y29uc3QgY29udGVudFR5cGUgPSBleHRyYWN0Q29udGVudFR5cGUoaW5wdXRCb2R5KTtcblx0XHRcdGlmIChjb250ZW50VHlwZSkge1xuXHRcdFx0XHRoZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzaWduYWwgPSBpc1JlcXVlc3QoaW5wdXQpID8gaW5wdXQuc2lnbmFsIDogbnVsbDtcblx0XHRpZiAoJ3NpZ25hbCcgaW4gaW5pdCkgc2lnbmFsID0gaW5pdC5zaWduYWw7XG5cblx0XHRpZiAoc2lnbmFsICE9IG51bGwgJiYgIWlzQWJvcnRTaWduYWwoc2lnbmFsKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgc2lnbmFsIHRvIGJlIGFuIGluc3RhbmNlb2YgQWJvcnRTaWduYWwnKTtcblx0XHR9XG5cblx0XHR0aGlzW0lOVEVSTkFMUyQyXSA9IHtcblx0XHRcdG1ldGhvZCxcblx0XHRcdHJlZGlyZWN0OiBpbml0LnJlZGlyZWN0IHx8IGlucHV0LnJlZGlyZWN0IHx8ICdmb2xsb3cnLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdHBhcnNlZFVSTCxcblx0XHRcdHNpZ25hbFxuXHRcdH07XG5cblx0XHQvLyBub2RlLWZldGNoLW9ubHkgb3B0aW9uc1xuXHRcdHRoaXMuZm9sbG93ID0gaW5pdC5mb2xsb3cgIT09IHVuZGVmaW5lZCA/IGluaXQuZm9sbG93IDogaW5wdXQuZm9sbG93ICE9PSB1bmRlZmluZWQgPyBpbnB1dC5mb2xsb3cgOiAyMDtcblx0XHR0aGlzLmNvbXByZXNzID0gaW5pdC5jb21wcmVzcyAhPT0gdW5kZWZpbmVkID8gaW5pdC5jb21wcmVzcyA6IGlucHV0LmNvbXByZXNzICE9PSB1bmRlZmluZWQgPyBpbnB1dC5jb21wcmVzcyA6IHRydWU7XG5cdFx0dGhpcy5jb3VudGVyID0gaW5pdC5jb3VudGVyIHx8IGlucHV0LmNvdW50ZXIgfHwgMDtcblx0XHR0aGlzLmFnZW50ID0gaW5pdC5hZ2VudCB8fCBpbnB1dC5hZ2VudDtcblx0fVxuXG5cdGdldCBtZXRob2QoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLm1ldGhvZDtcblx0fVxuXG5cdGdldCB1cmwoKSB7XG5cdFx0cmV0dXJuIGZvcm1hdF91cmwodGhpc1tJTlRFUk5BTFMkMl0ucGFyc2VkVVJMKTtcblx0fVxuXG5cdGdldCBoZWFkZXJzKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5oZWFkZXJzO1xuXHR9XG5cblx0Z2V0IHJlZGlyZWN0KCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5yZWRpcmVjdDtcblx0fVxuXG5cdGdldCBzaWduYWwoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLnNpZ25hbDtcblx0fVxuXG5cdC8qKlxuICAqIENsb25lIHRoaXMgcmVxdWVzdFxuICAqXG4gICogQHJldHVybiAgUmVxdWVzdFxuICAqL1xuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFJlcXVlc3QodGhpcyk7XG5cdH1cbn1cblxuQm9keS5taXhJbihSZXF1ZXN0LnByb3RvdHlwZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZXF1ZXN0LnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnUmVxdWVzdCcsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlcXVlc3QucHJvdG90eXBlLCB7XG5cdG1ldGhvZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHVybDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGhlYWRlcnM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRyZWRpcmVjdDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGNsb25lOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c2lnbmFsOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbi8qKlxuICogQ29udmVydCBhIFJlcXVlc3QgdG8gTm9kZS5qcyBodHRwIHJlcXVlc3Qgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gICBSZXF1ZXN0ICBBIFJlcXVlc3QgaW5zdGFuY2VcbiAqIEByZXR1cm4gIE9iamVjdCAgIFRoZSBvcHRpb25zIG9iamVjdCB0byBiZSBwYXNzZWQgdG8gaHR0cC5yZXF1ZXN0XG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVSZXF1ZXN0T3B0aW9ucyhyZXF1ZXN0KSB7XG5cdGNvbnN0IHBhcnNlZFVSTCA9IHJlcXVlc3RbSU5URVJOQUxTJDJdLnBhcnNlZFVSTDtcblx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcXVlc3RbSU5URVJOQUxTJDJdLmhlYWRlcnMpO1xuXG5cdC8vIGZldGNoIHN0ZXAgMS4zXG5cdGlmICghaGVhZGVycy5oYXMoJ0FjY2VwdCcpKSB7XG5cdFx0aGVhZGVycy5zZXQoJ0FjY2VwdCcsICcqLyonKTtcblx0fVxuXG5cdC8vIEJhc2ljIGZldGNoXG5cdGlmICghcGFyc2VkVVJMLnByb3RvY29sIHx8ICFwYXJzZWRVUkwuaG9zdG5hbWUpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPbmx5IGFic29sdXRlIFVSTHMgYXJlIHN1cHBvcnRlZCcpO1xuXHR9XG5cblx0aWYgKCEvXmh0dHBzPzokLy50ZXN0KHBhcnNlZFVSTC5wcm90b2NvbCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPbmx5IEhUVFAoUykgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQnKTtcblx0fVxuXG5cdGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBTdHJlYW0uUmVhZGFibGUgJiYgIXN0cmVhbURlc3RydWN0aW9uU3VwcG9ydGVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5jZWxsYXRpb24gb2Ygc3RyZWFtZWQgcmVxdWVzdHMgd2l0aCBBYm9ydFNpZ25hbCBpcyBub3Qgc3VwcG9ydGVkIGluIG5vZGUgPCA4Jyk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggc3RlcHMgMi40LTIuN1xuXHRsZXQgY29udGVudExlbmd0aFZhbHVlID0gbnVsbDtcblx0aWYgKHJlcXVlc3QuYm9keSA9PSBudWxsICYmIC9eKFBPU1R8UFVUKSQvaS50ZXN0KHJlcXVlc3QubWV0aG9kKSkge1xuXHRcdGNvbnRlbnRMZW5ndGhWYWx1ZSA9ICcwJztcblx0fVxuXHRpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcblx0XHRjb25zdCB0b3RhbEJ5dGVzID0gZ2V0VG90YWxCeXRlcyhyZXF1ZXN0KTtcblx0XHRpZiAodHlwZW9mIHRvdGFsQnl0ZXMgPT09ICdudW1iZXInKSB7XG5cdFx0XHRjb250ZW50TGVuZ3RoVmFsdWUgPSBTdHJpbmcodG90YWxCeXRlcyk7XG5cdFx0fVxuXHR9XG5cdGlmIChjb250ZW50TGVuZ3RoVmFsdWUpIHtcblx0XHRoZWFkZXJzLnNldCgnQ29udGVudC1MZW5ndGgnLCBjb250ZW50TGVuZ3RoVmFsdWUpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXAgMi4xMVxuXHRpZiAoIWhlYWRlcnMuaGFzKCdVc2VyLUFnZW50JykpIHtcblx0XHRoZWFkZXJzLnNldCgnVXNlci1BZ2VudCcsICdub2RlLWZldGNoLzEuMCAoK2h0dHBzOi8vZ2l0aHViLmNvbS9iaXRpbm4vbm9kZS1mZXRjaCknKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwIDIuMTVcblx0aWYgKHJlcXVlc3QuY29tcHJlc3MgJiYgIWhlYWRlcnMuaGFzKCdBY2NlcHQtRW5jb2RpbmcnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdBY2NlcHQtRW5jb2RpbmcnLCAnZ3ppcCxkZWZsYXRlJyk7XG5cdH1cblxuXHRsZXQgYWdlbnQgPSByZXF1ZXN0LmFnZW50O1xuXHRpZiAodHlwZW9mIGFnZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0YWdlbnQgPSBhZ2VudChwYXJzZWRVUkwpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrIGZldGNoIHN0ZXAgNC4yXG5cdC8vIGNodW5rZWQgZW5jb2RpbmcgaXMgaGFuZGxlZCBieSBOb2RlLmpzXG5cblx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHBhcnNlZFVSTCwge1xuXHRcdG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG5cdFx0aGVhZGVyczogZXhwb3J0Tm9kZUNvbXBhdGlibGVIZWFkZXJzKGhlYWRlcnMpLFxuXHRcdGFnZW50XG5cdH0pO1xufVxuXG4vKipcbiAqIGFib3J0LWVycm9yLmpzXG4gKlxuICogQWJvcnRFcnJvciBpbnRlcmZhY2UgZm9yIGNhbmNlbGxlZCByZXF1ZXN0c1xuICovXG5cbi8qKlxuICogQ3JlYXRlIEFib3J0RXJyb3IgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gICBTdHJpbmcgICAgICBtZXNzYWdlICAgICAgRXJyb3IgbWVzc2FnZSBmb3IgaHVtYW5cbiAqIEByZXR1cm4gIEFib3J0RXJyb3JcbiAqL1xuZnVuY3Rpb24gQWJvcnRFcnJvcihtZXNzYWdlKSB7XG4gIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgdGhpcy50eXBlID0gJ2Fib3J0ZWQnO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXG4gIC8vIGhpZGUgY3VzdG9tIGVycm9yIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZnJvbSBlbmQtdXNlcnNcbiAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG59XG5cbkFib3J0RXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuQWJvcnRFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYm9ydEVycm9yO1xuQWJvcnRFcnJvci5wcm90b3R5cGUubmFtZSA9ICdBYm9ydEVycm9yJztcblxuY29uc3QgVVJMJDEgPSBVcmwuVVJMIHx8IHdoYXR3Z1VybC5VUkw7XG5cbi8vIGZpeCBhbiBpc3N1ZSB3aGVyZSBcIlBhc3NUaHJvdWdoXCIsIFwicmVzb2x2ZVwiIGFyZW4ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IFBhc3NUaHJvdWdoJDEgPSBTdHJlYW0uUGFzc1Rocm91Z2g7XG5cbmNvbnN0IGlzRG9tYWluT3JTdWJkb21haW4gPSBmdW5jdGlvbiBpc0RvbWFpbk9yU3ViZG9tYWluKGRlc3RpbmF0aW9uLCBvcmlnaW5hbCkge1xuXHRjb25zdCBvcmlnID0gbmV3IFVSTCQxKG9yaWdpbmFsKS5ob3N0bmFtZTtcblx0Y29uc3QgZGVzdCA9IG5ldyBVUkwkMShkZXN0aW5hdGlvbikuaG9zdG5hbWU7XG5cblx0cmV0dXJuIG9yaWcgPT09IGRlc3QgfHwgb3JpZ1tvcmlnLmxlbmd0aCAtIGRlc3QubGVuZ3RoIC0gMV0gPT09ICcuJyAmJiBvcmlnLmVuZHNXaXRoKGRlc3QpO1xufTtcblxuLyoqXG4gKiBpc1NhbWVQcm90b2NvbCByZXBvcnRzIHdoZXRoZXIgdGhlIHR3byBwcm92aWRlZCBVUkxzIHVzZSB0aGUgc2FtZSBwcm90b2NvbC5cbiAqXG4gKiBCb3RoIGRvbWFpbnMgbXVzdCBhbHJlYWR5IGJlIGluIGNhbm9uaWNhbCBmb3JtLlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSBvcmlnaW5hbFxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSBkZXN0aW5hdGlvblxuICovXG5jb25zdCBpc1NhbWVQcm90b2NvbCA9IGZ1bmN0aW9uIGlzU2FtZVByb3RvY29sKGRlc3RpbmF0aW9uLCBvcmlnaW5hbCkge1xuXHRjb25zdCBvcmlnID0gbmV3IFVSTCQxKG9yaWdpbmFsKS5wcm90b2NvbDtcblx0Y29uc3QgZGVzdCA9IG5ldyBVUkwkMShkZXN0aW5hdGlvbikucHJvdG9jb2w7XG5cblx0cmV0dXJuIG9yaWcgPT09IGRlc3Q7XG59O1xuXG4vKipcbiAqIEZldGNoIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgICAgdXJsICAgQWJzb2x1dGUgdXJsIG9yIFJlcXVlc3QgaW5zdGFuY2VcbiAqIEBwYXJhbSAgIE9iamVjdCAgIG9wdHMgIEZldGNoIG9wdGlvbnNcbiAqIEByZXR1cm4gIFByb21pc2VcbiAqL1xuZnVuY3Rpb24gZmV0Y2godXJsLCBvcHRzKSB7XG5cblx0Ly8gYWxsb3cgY3VzdG9tIHByb21pc2Vcblx0aWYgKCFmZXRjaC5Qcm9taXNlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCduYXRpdmUgcHJvbWlzZSBtaXNzaW5nLCBzZXQgZmV0Y2guUHJvbWlzZSB0byB5b3VyIGZhdm9yaXRlIGFsdGVybmF0aXZlJyk7XG5cdH1cblxuXHRCb2R5LlByb21pc2UgPSBmZXRjaC5Qcm9taXNlO1xuXG5cdC8vIHdyYXAgaHR0cC5yZXF1ZXN0IGludG8gZmV0Y2hcblx0cmV0dXJuIG5ldyBmZXRjaC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHQvLyBidWlsZCByZXF1ZXN0IG9iamVjdFxuXHRcdGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIG9wdHMpO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBnZXROb2RlUmVxdWVzdE9wdGlvbnMocmVxdWVzdCk7XG5cblx0XHRjb25zdCBzZW5kID0gKG9wdGlvbnMucHJvdG9jb2wgPT09ICdodHRwczonID8gaHR0cHMgOiBodHRwKS5yZXF1ZXN0O1xuXHRcdGNvbnN0IHNpZ25hbCA9IHJlcXVlc3Quc2lnbmFsO1xuXG5cdFx0bGV0IHJlc3BvbnNlID0gbnVsbDtcblxuXHRcdGNvbnN0IGFib3J0ID0gZnVuY3Rpb24gYWJvcnQoKSB7XG5cdFx0XHRsZXQgZXJyb3IgPSBuZXcgQWJvcnRFcnJvcignVGhlIHVzZXIgYWJvcnRlZCBhIHJlcXVlc3QuJyk7XG5cdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0aWYgKHJlcXVlc3QuYm9keSAmJiByZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBTdHJlYW0uUmVhZGFibGUpIHtcblx0XHRcdFx0ZGVzdHJveVN0cmVhbShyZXF1ZXN0LmJvZHksIGVycm9yKTtcblx0XHRcdH1cblx0XHRcdGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmJvZHkpIHJldHVybjtcblx0XHRcdHJlc3BvbnNlLmJvZHkuZW1pdCgnZXJyb3InLCBlcnJvcik7XG5cdFx0fTtcblxuXHRcdGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcblx0XHRcdGFib3J0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWJvcnRBbmRGaW5hbGl6ZSA9IGZ1bmN0aW9uIGFib3J0QW5kRmluYWxpemUoKSB7XG5cdFx0XHRhYm9ydCgpO1xuXHRcdFx0ZmluYWxpemUoKTtcblx0XHR9O1xuXG5cdFx0Ly8gc2VuZCByZXF1ZXN0XG5cdFx0Y29uc3QgcmVxID0gc2VuZChvcHRpb25zKTtcblx0XHRsZXQgcmVxVGltZW91dDtcblxuXHRcdGlmIChzaWduYWwpIHtcblx0XHRcdHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0QW5kRmluYWxpemUpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZpbmFsaXplKCkge1xuXHRcdFx0cmVxLmFib3J0KCk7XG5cdFx0XHRpZiAoc2lnbmFsKSBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFuZEZpbmFsaXplKTtcblx0XHRcdGNsZWFyVGltZW91dChyZXFUaW1lb3V0KTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdC50aW1lb3V0KSB7XG5cdFx0XHRyZXEub25jZSgnc29ja2V0JywgZnVuY3Rpb24gKHNvY2tldCkge1xuXHRcdFx0XHRyZXFUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBuZXR3b3JrIHRpbWVvdXQgYXQ6ICR7cmVxdWVzdC51cmx9YCwgJ3JlcXVlc3QtdGltZW91dCcpKTtcblx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHR9LCByZXF1ZXN0LnRpbWVvdXQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgcmVxdWVzdCB0byAke3JlcXVlc3QudXJsfSBmYWlsZWQsIHJlYXNvbjogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKSk7XG5cblx0XHRcdGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5ib2R5KSB7XG5cdFx0XHRcdGRlc3Ryb3lTdHJlYW0ocmVzcG9uc2UuYm9keSwgZXJyKTtcblx0XHRcdH1cblxuXHRcdFx0ZmluYWxpemUoKTtcblx0XHR9KTtcblxuXHRcdGZpeFJlc3BvbnNlQ2h1bmtlZFRyYW5zZmVyQmFkRW5kaW5nKHJlcSwgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0aWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5ib2R5KSB7XG5cdFx0XHRcdGRlc3Ryb3lTdHJlYW0ocmVzcG9uc2UuYm9keSwgZXJyKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8qIGM4IGlnbm9yZSBuZXh0IDE4ICovXG5cdFx0aWYgKHBhcnNlSW50KHByb2Nlc3MudmVyc2lvbi5zdWJzdHJpbmcoMSkpIDwgMTQpIHtcblx0XHRcdC8vIEJlZm9yZSBOb2RlLmpzIDE0LCBwaXBlbGluZSgpIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgYXN5bmMgaXRlcmF0b3JzIGFuZCBkb2VzIG5vdCBhbHdheXNcblx0XHRcdC8vIHByb3Blcmx5IGhhbmRsZSB3aGVuIHRoZSBzb2NrZXQgY2xvc2UvZW5kIGV2ZW50cyBhcmUgb3V0IG9mIG9yZGVyLlxuXHRcdFx0cmVxLm9uKCdzb2NrZXQnLCBmdW5jdGlvbiAocykge1xuXHRcdFx0XHRzLmFkZExpc3RlbmVyKCdjbG9zZScsIGZ1bmN0aW9uIChoYWRFcnJvcikge1xuXHRcdFx0XHRcdC8vIGlmIGEgZGF0YSBsaXN0ZW5lciBpcyBzdGlsbCBwcmVzZW50IHdlIGRpZG4ndCBlbmQgY2xlYW5seVxuXHRcdFx0XHRcdGNvbnN0IGhhc0RhdGFMaXN0ZW5lciA9IHMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMDtcblxuXHRcdFx0XHRcdC8vIGlmIGVuZCBoYXBwZW5lZCBiZWZvcmUgY2xvc2UgYnV0IHRoZSBzb2NrZXQgZGlkbid0IGVtaXQgYW4gZXJyb3IsIGRvIGl0IG5vd1xuXHRcdFx0XHRcdGlmIChyZXNwb25zZSAmJiBoYXNEYXRhTGlzdGVuZXIgJiYgIWhhZEVycm9yICYmICEoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZXJyID0gbmV3IEVycm9yKCdQcmVtYXR1cmUgY2xvc2UnKTtcblx0XHRcdFx0XHRcdGVyci5jb2RlID0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJztcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmJvZHkuZW1pdCgnZXJyb3InLCBlcnIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXEub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24gKHJlcykge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHJlcVRpbWVvdXQpO1xuXG5cdFx0XHRjb25zdCBoZWFkZXJzID0gY3JlYXRlSGVhZGVyc0xlbmllbnQocmVzLmhlYWRlcnMpO1xuXG5cdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNVxuXHRcdFx0aWYgKGZldGNoLmlzUmVkaXJlY3QocmVzLnN0YXR1c0NvZGUpKSB7XG5cdFx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1LjJcblx0XHRcdFx0Y29uc3QgbG9jYXRpb24gPSBoZWFkZXJzLmdldCgnTG9jYXRpb24nKTtcblxuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS4zXG5cdFx0XHRcdGxldCBsb2NhdGlvblVSTCA9IG51bGw7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bG9jYXRpb25VUkwgPSBsb2NhdGlvbiA9PT0gbnVsbCA/IG51bGwgOiBuZXcgVVJMJDEobG9jYXRpb24sIHJlcXVlc3QudXJsKS50b1N0cmluZygpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHQvLyBlcnJvciBoZXJlIGNhbiBvbmx5IGJlIGludmFsaWQgVVJMIGluIExvY2F0aW9uOiBoZWFkZXJcblx0XHRcdFx0XHQvLyBkbyBub3QgdGhyb3cgd2hlbiBvcHRpb25zLnJlZGlyZWN0ID09IG1hbnVhbFxuXHRcdFx0XHRcdC8vIGxldCB0aGUgdXNlciBleHRyYWN0IHRoZSBlcnJvcm5lb3VzIHJlZGlyZWN0IFVSTFxuXHRcdFx0XHRcdGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuXHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGB1cmkgcmVxdWVzdGVkIHJlc3BvbmRzIHdpdGggYW4gaW52YWxpZCByZWRpcmVjdCBVUkw6ICR7bG9jYXRpb259YCwgJ2ludmFsaWQtcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1LjVcblx0XHRcdFx0c3dpdGNoIChyZXF1ZXN0LnJlZGlyZWN0KSB7XG5cdFx0XHRcdFx0Y2FzZSAnZXJyb3InOlxuXHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGB1cmkgcmVxdWVzdGVkIHJlc3BvbmRzIHdpdGggYSByZWRpcmVjdCwgcmVkaXJlY3QgbW9kZSBpcyBzZXQgdG8gZXJyb3I6ICR7cmVxdWVzdC51cmx9YCwgJ25vLXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRjYXNlICdtYW51YWwnOlxuXHRcdFx0XHRcdFx0Ly8gbm9kZS1mZXRjaC1zcGVjaWZpYyBzdGVwOiBtYWtlIG1hbnVhbCByZWRpcmVjdCBhIGJpdCBlYXNpZXIgdG8gdXNlIGJ5IHNldHRpbmcgdGhlIExvY2F0aW9uIGhlYWRlciB2YWx1ZSB0byB0aGUgcmVzb2x2ZWQgVVJMLlxuXHRcdFx0XHRcdFx0aWYgKGxvY2F0aW9uVVJMICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGhhbmRsZSBjb3JydXB0ZWQgaGVhZGVyXG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0aGVhZGVycy5zZXQoJ0xvY2F0aW9uJywgbG9jYXRpb25VUkwpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogbm9kZWpzIHNlcnZlciBwcmV2ZW50IGludmFsaWQgcmVzcG9uc2UgaGVhZGVycywgd2UgY2FuJ3QgdGVzdCB0aGlzIHRocm91Z2ggbm9ybWFsIHJlcXVlc3Rcblx0XHRcdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnZm9sbG93Jzpcblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCAyXG5cdFx0XHRcdFx0XHRpZiAobG9jYXRpb25VUkwgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCA1XG5cdFx0XHRcdFx0XHRpZiAocmVxdWVzdC5jb3VudGVyID49IHJlcXVlc3QuZm9sbG93KSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgbWF4aW11bSByZWRpcmVjdCByZWFjaGVkIGF0OiAke3JlcXVlc3QudXJsfWAsICdtYXgtcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDYgKGNvdW50ZXIgaW5jcmVtZW50KVxuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IFJlcXVlc3Qgb2JqZWN0LlxuXHRcdFx0XHRcdFx0Y29uc3QgcmVxdWVzdE9wdHMgPSB7XG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6IG5ldyBIZWFkZXJzKHJlcXVlc3QuaGVhZGVycyksXG5cdFx0XHRcdFx0XHRcdGZvbGxvdzogcmVxdWVzdC5mb2xsb3csXG5cdFx0XHRcdFx0XHRcdGNvdW50ZXI6IHJlcXVlc3QuY291bnRlciArIDEsXG5cdFx0XHRcdFx0XHRcdGFnZW50OiByZXF1ZXN0LmFnZW50LFxuXHRcdFx0XHRcdFx0XHRjb21wcmVzczogcmVxdWVzdC5jb21wcmVzcyxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0Ym9keTogcmVxdWVzdC5ib2R5LFxuXHRcdFx0XHRcdFx0XHRzaWduYWw6IHJlcXVlc3Quc2lnbmFsLFxuXHRcdFx0XHRcdFx0XHR0aW1lb3V0OiByZXF1ZXN0LnRpbWVvdXQsXG5cdFx0XHRcdFx0XHRcdHNpemU6IHJlcXVlc3Quc2l6ZVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0aWYgKCFpc0RvbWFpbk9yU3ViZG9tYWluKHJlcXVlc3QudXJsLCBsb2NhdGlvblVSTCkgfHwgIWlzU2FtZVByb3RvY29sKHJlcXVlc3QudXJsLCBsb2NhdGlvblVSTCkpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBuYW1lIG9mIFsnYXV0aG9yaXphdGlvbicsICd3d3ctYXV0aGVudGljYXRlJywgJ2Nvb2tpZScsICdjb29raWUyJ10pIHtcblx0XHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5oZWFkZXJzLmRlbGV0ZShuYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgOVxuXHRcdFx0XHRcdFx0aWYgKHJlcy5zdGF0dXNDb2RlICE9PSAzMDMgJiYgcmVxdWVzdC5ib2R5ICYmIGdldFRvdGFsQnl0ZXMocmVxdWVzdCkgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKCdDYW5ub3QgZm9sbG93IHJlZGlyZWN0IHdpdGggYm9keSBiZWluZyBhIHJlYWRhYmxlIHN0cmVhbScsICd1bnN1cHBvcnRlZC1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgMTFcblx0XHRcdFx0XHRcdGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMzAzIHx8IChyZXMuc3RhdHVzQ29kZSA9PT0gMzAxIHx8IHJlcy5zdGF0dXNDb2RlID09PSAzMDIpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHtcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMubWV0aG9kID0gJ0dFVCc7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRzLmJvZHkgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRzLmhlYWRlcnMuZGVsZXRlKCdjb250ZW50LWxlbmd0aCcpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgMTVcblx0XHRcdFx0XHRcdHJlc29sdmUoZmV0Y2gobmV3IFJlcXVlc3QobG9jYXRpb25VUkwsIHJlcXVlc3RPcHRzKSkpO1xuXHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcmVwYXJlIHJlc3BvbnNlXG5cdFx0XHRyZXMub25jZSgnZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAoc2lnbmFsKSBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFuZEZpbmFsaXplKTtcblx0XHRcdH0pO1xuXHRcdFx0bGV0IGJvZHkgPSByZXMucGlwZShuZXcgUGFzc1Rocm91Z2gkMSgpKTtcblxuXHRcdFx0Y29uc3QgcmVzcG9uc2Vfb3B0aW9ucyA9IHtcblx0XHRcdFx0dXJsOiByZXF1ZXN0LnVybCxcblx0XHRcdFx0c3RhdHVzOiByZXMuc3RhdHVzQ29kZSxcblx0XHRcdFx0c3RhdHVzVGV4dDogcmVzLnN0YXR1c01lc3NhZ2UsXG5cdFx0XHRcdGhlYWRlcnM6IGhlYWRlcnMsXG5cdFx0XHRcdHNpemU6IHJlcXVlc3Quc2l6ZSxcblx0XHRcdFx0dGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuXHRcdFx0XHRjb3VudGVyOiByZXF1ZXN0LmNvdW50ZXJcblx0XHRcdH07XG5cblx0XHRcdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDEyLjEuMS4zXG5cdFx0XHRjb25zdCBjb2RpbmdzID0gaGVhZGVycy5nZXQoJ0NvbnRlbnQtRW5jb2RpbmcnKTtcblxuXHRcdFx0Ly8gSFRUUC1uZXR3b3JrIGZldGNoIHN0ZXAgMTIuMS4xLjQ6IGhhbmRsZSBjb250ZW50IGNvZGluZ3NcblxuXHRcdFx0Ly8gaW4gZm9sbG93aW5nIHNjZW5hcmlvcyB3ZSBpZ25vcmUgY29tcHJlc3Npb24gc3VwcG9ydFxuXHRcdFx0Ly8gMS4gY29tcHJlc3Npb24gc3VwcG9ydCBpcyBkaXNhYmxlZFxuXHRcdFx0Ly8gMi4gSEVBRCByZXF1ZXN0XG5cdFx0XHQvLyAzLiBubyBDb250ZW50LUVuY29kaW5nIGhlYWRlclxuXHRcdFx0Ly8gNC4gbm8gY29udGVudCByZXNwb25zZSAoMjA0KVxuXHRcdFx0Ly8gNS4gY29udGVudCBub3QgbW9kaWZpZWQgcmVzcG9uc2UgKDMwNClcblx0XHRcdGlmICghcmVxdWVzdC5jb21wcmVzcyB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnIHx8IGNvZGluZ3MgPT09IG51bGwgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDIwNCB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzA0KSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgTm9kZSB2Nitcblx0XHRcdC8vIEJlIGxlc3Mgc3RyaWN0IHdoZW4gZGVjb2RpbmcgY29tcHJlc3NlZCByZXNwb25zZXMsIHNpbmNlIHNvbWV0aW1lc1xuXHRcdFx0Ly8gc2VydmVycyBzZW5kIHNsaWdodGx5IGludmFsaWQgcmVzcG9uc2VzIHRoYXQgYXJlIHN0aWxsIGFjY2VwdGVkXG5cdFx0XHQvLyBieSBjb21tb24gYnJvd3NlcnMuXG5cdFx0XHQvLyBBbHdheXMgdXNpbmcgWl9TWU5DX0ZMVVNIIGlzIHdoYXQgY1VSTCBkb2VzLlxuXHRcdFx0Y29uc3QgemxpYk9wdGlvbnMgPSB7XG5cdFx0XHRcdGZsdXNoOiB6bGliLlpfU1lOQ19GTFVTSCxcblx0XHRcdFx0ZmluaXNoRmx1c2g6IHpsaWIuWl9TWU5DX0ZMVVNIXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBmb3IgZ3ppcFxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2d6aXAnIHx8IGNvZGluZ3MgPT0gJ3gtZ3ppcCcpIHtcblx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUd1bnppcCh6bGliT3B0aW9ucykpO1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZm9yIGRlZmxhdGVcblx0XHRcdGlmIChjb2RpbmdzID09ICdkZWZsYXRlJyB8fCBjb2RpbmdzID09ICd4LWRlZmxhdGUnKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSB0aGUgaW5mYW1vdXMgcmF3IGRlZmxhdGUgcmVzcG9uc2UgZnJvbSBvbGQgc2VydmVyc1xuXHRcdFx0XHQvLyBhIGhhY2sgZm9yIG9sZCBJSVMgYW5kIEFwYWNoZSBzZXJ2ZXJzXG5cdFx0XHRcdGNvbnN0IHJhdyA9IHJlcy5waXBlKG5ldyBQYXNzVGhyb3VnaCQxKCkpO1xuXHRcdFx0XHRyYXcub25jZSgnZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuXHRcdFx0XHRcdC8vIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM3NTE5ODI4XG5cdFx0XHRcdFx0aWYgKChjaHVua1swXSAmIDB4MEYpID09PSAweDA4KSB7XG5cdFx0XHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlSW5mbGF0ZSgpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUluZmxhdGVSYXcoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmF3Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gc29tZSBvbGQgSUlTIHNlcnZlcnMgcmV0dXJuIHplcm8tbGVuZ3RoIE9LIGRlZmxhdGUgcmVzcG9uc2VzLCBzbyAnZGF0YScgaXMgbmV2ZXIgZW1pdHRlZC5cblx0XHRcdFx0XHRpZiAoIXJlc3BvbnNlKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZm9yIGJyXG5cdFx0XHRpZiAoY29kaW5ncyA9PSAnYnInICYmIHR5cGVvZiB6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MoKSk7XG5cdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBvdGhlcndpc2UsIHVzZSByZXNwb25zZSBhcy1pc1xuXHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHR9KTtcblxuXHRcdHdyaXRlVG9TdHJlYW0ocmVxLCByZXF1ZXN0KTtcblx0fSk7XG59XG5mdW5jdGlvbiBmaXhSZXNwb25zZUNodW5rZWRUcmFuc2ZlckJhZEVuZGluZyhyZXF1ZXN0LCBlcnJvckNhbGxiYWNrKSB7XG5cdGxldCBzb2NrZXQ7XG5cblx0cmVxdWVzdC5vbignc29ja2V0JywgZnVuY3Rpb24gKHMpIHtcblx0XHRzb2NrZXQgPSBzO1xuXHR9KTtcblxuXHRyZXF1ZXN0Lm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChyZXNwb25zZSkge1xuXHRcdGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzO1xuXG5cdFx0aWYgKGhlYWRlcnNbJ3RyYW5zZmVyLWVuY29kaW5nJ10gPT09ICdjaHVua2VkJyAmJiAhaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSkge1xuXHRcdFx0cmVzcG9uc2Uub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoaGFkRXJyb3IpIHtcblx0XHRcdFx0Ly8gdGVzdHMgZm9yIHNvY2tldCBwcmVzZW5jZSwgYXMgaW4gc29tZSBzaXR1YXRpb25zIHRoZVxuXHRcdFx0XHQvLyB0aGUgJ3NvY2tldCcgZXZlbnQgaXMgbm90IHRyaWdnZXJlZCBmb3IgdGhlIHJlcXVlc3Rcblx0XHRcdFx0Ly8gKGhhcHBlbnMgaW4gZGVubyksIGF2b2lkcyBgVHlwZUVycm9yYFxuXHRcdFx0XHQvLyBpZiBhIGRhdGEgbGlzdGVuZXIgaXMgc3RpbGwgcHJlc2VudCB3ZSBkaWRuJ3QgZW5kIGNsZWFubHlcblx0XHRcdFx0Y29uc3QgaGFzRGF0YUxpc3RlbmVyID0gc29ja2V0ICYmIHNvY2tldC5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwO1xuXG5cdFx0XHRcdGlmIChoYXNEYXRhTGlzdGVuZXIgJiYgIWhhZEVycm9yKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXJyID0gbmV3IEVycm9yKCdQcmVtYXR1cmUgY2xvc2UnKTtcblx0XHRcdFx0XHRlcnIuY29kZSA9ICdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSc7XG5cdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhlcnIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBkZXN0cm95U3RyZWFtKHN0cmVhbSwgZXJyKSB7XG5cdGlmIChzdHJlYW0uZGVzdHJveSkge1xuXHRcdHN0cmVhbS5kZXN0cm95KGVycik7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gbm9kZSA8IDhcblx0XHRzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuXHRcdHN0cmVhbS5lbmQoKTtcblx0fVxufVxuXG4vKipcbiAqIFJlZGlyZWN0IGNvZGUgbWF0Y2hpbmdcbiAqXG4gKiBAcGFyYW0gICBOdW1iZXIgICBjb2RlICBTdGF0dXMgY29kZVxuICogQHJldHVybiAgQm9vbGVhblxuICovXG5mZXRjaC5pc1JlZGlyZWN0ID0gZnVuY3Rpb24gKGNvZGUpIHtcblx0cmV0dXJuIGNvZGUgPT09IDMwMSB8fCBjb2RlID09PSAzMDIgfHwgY29kZSA9PT0gMzAzIHx8IGNvZGUgPT09IDMwNyB8fCBjb2RlID09PSAzMDg7XG59O1xuXG4vLyBleHBvc2UgUHJvbWlzZVxuZmV0Y2guUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmZXRjaDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHM7XG5leHBvcnRzLkhlYWRlcnMgPSBIZWFkZXJzO1xuZXhwb3J0cy5SZXF1ZXN0ID0gUmVxdWVzdDtcbmV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcbmV4cG9ydHMuRmV0Y2hFcnJvciA9IEZldGNoRXJyb3I7XG5leHBvcnRzLkFib3J0RXJyb3IgPSBBYm9ydEVycm9yO1xuIiwgIi8qKlxuICogQGxpY2Vuc2VcbiAqIHdlYi1zdHJlYW1zLXBvbHlmaWxsIHY0LjAuMC1iZXRhLjNcbiAqIENvcHlyaWdodCAyMDIxIE1hdHRpYXMgQnVlbGVucywgRGl3YW5rIFNpbmdoIFRvbWVyIGFuZCBvdGhlciBjb250cmlidXRvcnMuXG4gKiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuICovXG5jb25zdCBlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9TeW1ib2w6ZT0+YFN5bWJvbCgke2V9KWA7ZnVuY3Rpb24gdCgpe31mdW5jdGlvbiByKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZX1jb25zdCBvPXQ7ZnVuY3Rpb24gbihlLHQpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIm5hbWVcIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KX1jYXRjaChlKXt9fWNvbnN0IGE9UHJvbWlzZSxpPVByb21pc2UucHJvdG90eXBlLnRoZW4sbD1Qcm9taXNlLnJlc29sdmUuYmluZChhKSxzPVByb21pc2UucmVqZWN0LmJpbmQoYSk7ZnVuY3Rpb24gdShlKXtyZXR1cm4gbmV3IGEoZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbChlKX1mdW5jdGlvbiBkKGUpe3JldHVybiBzKGUpfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiBpLmNhbGwoZSx0LHIpfWZ1bmN0aW9uIGIoZSx0LHIpe2YoZihlLHQsciksdm9pZCAwLG8pfWZ1bmN0aW9uIGgoZSx0KXtiKGUsdCl9ZnVuY3Rpb24gXyhlLHQpe2IoZSx2b2lkIDAsdCl9ZnVuY3Rpb24gcChlLHQscil7cmV0dXJuIGYoZSx0LHIpfWZ1bmN0aW9uIG0oZSl7ZihlLHZvaWQgMCxvKX1sZXQgeT1lPT57aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgcXVldWVNaWNyb3Rhc2speT1xdWV1ZU1pY3JvdGFzaztlbHNle2NvbnN0IGU9Yyh2b2lkIDApO3k9dD0+ZihlLHQpfXJldHVybiB5KGUpfTtmdW5jdGlvbiBnKGUsdCxyKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvblwiKTtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoZSx0LHIpfWZ1bmN0aW9uIHcoZSx0LHIpe3RyeXtyZXR1cm4gYyhnKGUsdCxyKSl9Y2F0Y2goZSl7cmV0dXJuIGQoZSl9fWNsYXNzIFN7Y29uc3RydWN0b3IoKXt0aGlzLl9jdXJzb3I9MCx0aGlzLl9zaXplPTAsdGhpcy5fZnJvbnQ9e19lbGVtZW50czpbXSxfbmV4dDp2b2lkIDB9LHRoaXMuX2JhY2s9dGhpcy5fZnJvbnQsdGhpcy5fY3Vyc29yPTAsdGhpcy5fc2l6ZT0wfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fc2l6ZX1wdXNoKGUpe2NvbnN0IHQ9dGhpcy5fYmFjaztsZXQgcj10OzE2MzgzPT09dC5fZWxlbWVudHMubGVuZ3RoJiYocj17X2VsZW1lbnRzOltdLF9uZXh0OnZvaWQgMH0pLHQuX2VsZW1lbnRzLnB1c2goZSksciE9PXQmJih0aGlzLl9iYWNrPXIsdC5fbmV4dD1yKSwrK3RoaXMuX3NpemV9c2hpZnQoKXtjb25zdCBlPXRoaXMuX2Zyb250O2xldCB0PWU7Y29uc3Qgcj10aGlzLl9jdXJzb3I7bGV0IG89cisxO2NvbnN0IG49ZS5fZWxlbWVudHMsYT1uW3JdO3JldHVybiAxNjM4ND09PW8mJih0PWUuX25leHQsbz0wKSwtLXRoaXMuX3NpemUsdGhpcy5fY3Vyc29yPW8sZSE9PXQmJih0aGlzLl9mcm9udD10KSxuW3JdPXZvaWQgMCxhfWZvckVhY2goZSl7bGV0IHQ9dGhpcy5fY3Vyc29yLHI9dGhpcy5fZnJvbnQsbz1yLl9lbGVtZW50cztmb3IoOyEodD09PW8ubGVuZ3RoJiZ2b2lkIDA9PT1yLl9uZXh0fHx0PT09by5sZW5ndGgmJihyPXIuX25leHQsbz1yLl9lbGVtZW50cyx0PTAsMD09PW8ubGVuZ3RoKSk7KWUob1t0XSksKyt0fXBlZWsoKXtjb25zdCBlPXRoaXMuX2Zyb250LHQ9dGhpcy5fY3Vyc29yO3JldHVybiBlLl9lbGVtZW50c1t0XX19Y29uc3Qgdj1lKFwiW1tBYm9ydFN0ZXBzXV1cIiksUj1lKFwiW1tFcnJvclN0ZXBzXV1cIiksVD1lKFwiW1tDYW5jZWxTdGVwc11dXCIpLHE9ZShcIltbUHVsbFN0ZXBzXV1cIiksQz1lKFwiW1tSZWxlYXNlU3RlcHNdXVwiKTtmdW5jdGlvbiBFKGUsdCl7ZS5fb3duZXJSZWFkYWJsZVN0cmVhbT10LHQuX3JlYWRlcj1lLFwicmVhZGFibGVcIj09PXQuX3N0YXRlP08oZSk6XCJjbG9zZWRcIj09PXQuX3N0YXRlP2Z1bmN0aW9uKGUpe08oZSksaihlKX0oZSk6QihlLHQuX3N0b3JlZEVycm9yKX1mdW5jdGlvbiBQKGUsdCl7cmV0dXJuIEd0KGUuX293bmVyUmVhZGFibGVTdHJlYW0sdCl9ZnVuY3Rpb24gVyhlKXtjb25zdCB0PWUuX293bmVyUmVhZGFibGVTdHJlYW07XCJyZWFkYWJsZVwiPT09dC5fc3RhdGU/QShlLG5ldyBUeXBlRXJyb3IoXCJSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtJ3MgY2xvc2VkbmVzc1wiKSk6ZnVuY3Rpb24oZSx0KXtCKGUsdCl9KGUsbmV3IFR5cGVFcnJvcihcIlJlYWRlciB3YXMgcmVsZWFzZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZCB0byBtb25pdG9yIHRoZSBzdHJlYW0ncyBjbG9zZWRuZXNzXCIpKSx0Ll9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJbQ10oKSx0Ll9yZWFkZXI9dm9pZCAwLGUuX293bmVyUmVhZGFibGVTdHJlYW09dm9pZCAwfWZ1bmN0aW9uIGsoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgXCIrZStcIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHJlYWRlclwiKX1mdW5jdGlvbiBPKGUpe2UuX2Nsb3NlZFByb21pc2U9dSgoKHQscik9PntlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD1yfSkpfWZ1bmN0aW9uIEIoZSx0KXtPKGUpLEEoZSx0KX1mdW5jdGlvbiBBKGUsdCl7dm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZWplY3QmJihtKGUuX2Nsb3NlZFByb21pc2UpLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KHQpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwKX1mdW5jdGlvbiBqKGUpe3ZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSYmKGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwKX1jb25zdCB6PU51bWJlci5pc0Zpbml0ZXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmlzRmluaXRlKGUpfSxMPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/TWF0aC5jZWlsKGUpOk1hdGguZmxvb3IoZSl9O2Z1bmN0aW9uIEYoZSx0KXtpZih2b2lkIDAhPT1lJiYoXCJvYmplY3RcIiE9dHlwZW9mKHI9ZSkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHIpKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gaXMgbm90IGFuIG9iamVjdC5gKTt2YXIgcn1mdW5jdGlvbiBJKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IGlzIG5vdCBhIGZ1bmN0aW9uLmApfWZ1bmN0aW9uIEQoZSx0KXtpZighZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlfShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IGlzIG5vdCBhbiBvYmplY3QuYCl9ZnVuY3Rpb24gJChlLHQscil7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKGBQYXJhbWV0ZXIgJHt0fSBpcyByZXF1aXJlZCBpbiAnJHtyfScuYCl9ZnVuY3Rpb24gTShlLHQscil7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IGlzIHJlcXVpcmVkIGluICcke3J9Jy5gKX1mdW5jdGlvbiBZKGUpe3JldHVybiBOdW1iZXIoZSl9ZnVuY3Rpb24gUShlKXtyZXR1cm4gMD09PWU/MDplfWZ1bmN0aW9uIE4oZSx0KXtjb25zdCByPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSO2xldCBvPU51bWJlcihlKTtpZihvPVEobyksIXoobykpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0fSBpcyBub3QgYSBmaW5pdGUgbnVtYmVyYCk7aWYobz1mdW5jdGlvbihlKXtyZXR1cm4gUShMKGUpKX0obyksbzwwfHxvPnIpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0fSBpcyBvdXRzaWRlIHRoZSBhY2NlcHRlZCByYW5nZSBvZiAwIHRvICR7cn0sIGluY2x1c2l2ZWApO3JldHVybiB6KG8pJiYwIT09bz9vOjB9ZnVuY3Rpb24gSChlKXtpZighcihlKSlyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmdldFJlYWRlcilyZXR1cm4hMTt0cnl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlLmxvY2tlZH1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24geChlKXtpZighcihlKSlyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmdldFdyaXRlcilyZXR1cm4hMTt0cnl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlLmxvY2tlZH1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gVihlLHQpe2lmKCFWdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IGlzIG5vdCBhIFJlYWRhYmxlU3RyZWFtLmApfWZ1bmN0aW9uIFUoZSx0KXtlLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5wdXNoKHQpfWZ1bmN0aW9uIEcoZSx0LHIpe2NvbnN0IG89ZS5fcmVhZGVyLl9yZWFkUmVxdWVzdHMuc2hpZnQoKTtyP28uX2Nsb3NlU3RlcHMoKTpvLl9jaHVua1N0ZXBzKHQpfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIGUuX3JlYWRlci5fcmVhZFJlcXVlc3RzLmxlbmd0aH1mdW5jdGlvbiBKKGUpe2NvbnN0IHQ9ZS5fcmVhZGVyO3JldHVybiB2b2lkIDAhPT10JiYhIUsodCl9Y2xhc3MgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVye2NvbnN0cnVjdG9yKGUpe2lmKCQoZSwxLFwiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyXCIpLFYoZSxcIkZpcnN0IHBhcmFtZXRlclwiKSxVdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSByZWFkaW5nIGJ5IGFub3RoZXIgcmVhZGVyXCIpO0UodGhpcyxlKSx0aGlzLl9yZWFkUmVxdWVzdHM9bmV3IFN9Z2V0IGNsb3NlZCgpe3JldHVybiBLKHRoaXMpP3RoaXMuX2Nsb3NlZFByb21pc2U6ZChlZShcImNsb3NlZFwiKSl9Y2FuY2VsKGUpe3JldHVybiBLKHRoaXMpP3ZvaWQgMD09PXRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0/ZChrKFwiY2FuY2VsXCIpKTpQKHRoaXMsZSk6ZChlZShcImNhbmNlbFwiKSl9cmVhZCgpe2lmKCFLKHRoaXMpKXJldHVybiBkKGVlKFwicmVhZFwiKSk7aWYodm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSlyZXR1cm4gZChrKFwicmVhZCBmcm9tXCIpKTtsZXQgZSx0O2NvbnN0IHI9dSgoKHIsbyk9PntlPXIsdD1vfSkpO3JldHVybiBmdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5fb3duZXJSZWFkYWJsZVN0cmVhbTtyLl9kaXN0dXJiZWQ9ITAsXCJjbG9zZWRcIj09PXIuX3N0YXRlP3QuX2Nsb3NlU3RlcHMoKTpcImVycm9yZWRcIj09PXIuX3N0YXRlP3QuX2Vycm9yU3RlcHMoci5fc3RvcmVkRXJyb3IpOnIuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcltxXSh0KX0odGhpcyx7X2NodW5rU3RlcHM6dD0+ZSh7dmFsdWU6dCxkb25lOiExfSksX2Nsb3NlU3RlcHM6KCk9PmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSksX2Vycm9yU3RlcHM6ZT0+dChlKX0pLHJ9cmVsZWFzZUxvY2soKXtpZighSyh0aGlzKSl0aHJvdyBlZShcInJlbGVhc2VMb2NrXCIpO3ZvaWQgMCE9PXRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0mJmZ1bmN0aW9uKGUpe1coZSk7Y29uc3QgdD1uZXcgVHlwZUVycm9yKFwiUmVhZGVyIHdhcyByZWxlYXNlZFwiKTtaKGUsdCl9KHRoaXMpfX1mdW5jdGlvbiBLKGUpe3JldHVybiEhcihlKSYmKCEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfcmVhZFJlcXVlc3RzXCIpJiZlIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKX1mdW5jdGlvbiBaKGUsdCl7Y29uc3Qgcj1lLl9yZWFkUmVxdWVzdHM7ZS5fcmVhZFJlcXVlc3RzPW5ldyBTLHIuZm9yRWFjaCgoZT0+e2UuX2Vycm9yU3RlcHModCl9KSl9ZnVuY3Rpb24gZWUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5wcm90b3R5cGUuJHtlfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyYCl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLnByb3RvdHlwZSx7Y2FuY2VsOntlbnVtZXJhYmxlOiEwfSxyZWFkOntlbnVtZXJhYmxlOiEwfSxyZWxlYXNlTG9jazp7ZW51bWVyYWJsZTohMH0sY2xvc2VkOntlbnVtZXJhYmxlOiEwfX0pLG4oUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLnByb3RvdHlwZS5jYW5jZWwsXCJjYW5jZWxcIiksbihSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLnJlYWQsXCJyZWFkXCIpLG4oUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLnByb3RvdHlwZS5yZWxlYXNlTG9jayxcInJlbGVhc2VMb2NrXCIpLFwic3ltYm9sXCI9PXR5cGVvZiBlLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLnByb3RvdHlwZSxlLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlclwiLGNvbmZpZ3VyYWJsZTohMH0pO2NsYXNzIHRle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fb25nb2luZ1Byb21pc2U9dm9pZCAwLHRoaXMuX2lzRmluaXNoZWQ9ITEsdGhpcy5fcmVhZGVyPWUsdGhpcy5fcHJldmVudENhbmNlbD10fW5leHQoKXtjb25zdCBlPSgpPT50aGlzLl9uZXh0U3RlcHMoKTtyZXR1cm4gdGhpcy5fb25nb2luZ1Byb21pc2U9dGhpcy5fb25nb2luZ1Byb21pc2U/cCh0aGlzLl9vbmdvaW5nUHJvbWlzZSxlLGUpOmUoKSx0aGlzLl9vbmdvaW5nUHJvbWlzZX1yZXR1cm4oZSl7Y29uc3QgdD0oKT0+dGhpcy5fcmV0dXJuU3RlcHMoZSk7cmV0dXJuIHRoaXMuX29uZ29pbmdQcm9taXNlP3AodGhpcy5fb25nb2luZ1Byb21pc2UsdCx0KTp0KCl9X25leHRTdGVwcygpe2lmKHRoaXMuX2lzRmluaXNoZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjb25zdCBlPXRoaXMuX3JlYWRlcjtyZXR1cm4gdm9pZCAwPT09ZT9kKGsoXCJpdGVyYXRlXCIpKTpmKGUucmVhZCgpLChlPT57dmFyIHQ7cmV0dXJuIHRoaXMuX29uZ29pbmdQcm9taXNlPXZvaWQgMCxlLmRvbmUmJih0aGlzLl9pc0ZpbmlzaGVkPSEwLG51bGw9PT0odD10aGlzLl9yZWFkZXIpfHx2b2lkIDA9PT10fHx0LnJlbGVhc2VMb2NrKCksdGhpcy5fcmVhZGVyPXZvaWQgMCksZX0pLChlPT57dmFyIHQ7dGhyb3cgdGhpcy5fb25nb2luZ1Byb21pc2U9dm9pZCAwLHRoaXMuX2lzRmluaXNoZWQ9ITAsbnVsbD09PSh0PXRoaXMuX3JlYWRlcil8fHZvaWQgMD09PXR8fHQucmVsZWFzZUxvY2soKSx0aGlzLl9yZWFkZXI9dm9pZCAwLGV9KSl9X3JldHVyblN0ZXBzKGUpe2lmKHRoaXMuX2lzRmluaXNoZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dmFsdWU6ZSxkb25lOiEwfSk7dGhpcy5faXNGaW5pc2hlZD0hMDtjb25zdCB0PXRoaXMuX3JlYWRlcjtpZih2b2lkIDA9PT10KXJldHVybiBkKGsoXCJmaW5pc2ggaXRlcmF0aW5nXCIpKTtpZih0aGlzLl9yZWFkZXI9dm9pZCAwLCF0aGlzLl9wcmV2ZW50Q2FuY2VsKXtjb25zdCByPXQuY2FuY2VsKGUpO3JldHVybiB0LnJlbGVhc2VMb2NrKCkscChyLCgoKT0+KHt2YWx1ZTplLGRvbmU6ITB9KSkpfXJldHVybiB0LnJlbGVhc2VMb2NrKCksYyh7dmFsdWU6ZSxkb25lOiEwfSl9fWNvbnN0IHJlPXtuZXh0KCl7cmV0dXJuIG9lKHRoaXMpP3RoaXMuX2FzeW5jSXRlcmF0b3JJbXBsLm5leHQoKTpkKG5lKFwibmV4dFwiKSl9LHJldHVybihlKXtyZXR1cm4gb2UodGhpcyk/dGhpcy5fYXN5bmNJdGVyYXRvckltcGwucmV0dXJuKGUpOmQobmUoXCJyZXR1cm5cIikpfX07ZnVuY3Rpb24gb2UoZSl7aWYoIXIoZSkpcmV0dXJuITE7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiX2FzeW5jSXRlcmF0b3JJbXBsXCIpKXJldHVybiExO3RyeXtyZXR1cm4gZS5fYXN5bmNJdGVyYXRvckltcGwgaW5zdGFuY2VvZiB0ZX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvci4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0ZWFtQXN5bmNJdGVyYXRvcmApfVwic3ltYm9sXCI9PXR5cGVvZiBlLmFzeW5jSXRlcmF0b3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSxlLmFzeW5jSXRlcmF0b3Ise3ZhbHVlKCl7cmV0dXJuIHRoaXN9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IGFlPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPWV9O2Z1bmN0aW9uIGllKGUsdCxyLG8sbil7bmV3IFVpbnQ4QXJyYXkoZSkuc2V0KG5ldyBVaW50OEFycmF5KHIsbyxuKSx0KX1mdW5jdGlvbiBsZShlKXtjb25zdCB0PWZ1bmN0aW9uKGUsdCxyKXtpZihlLnNsaWNlKXJldHVybiBlLnNsaWNlKHQscik7Y29uc3Qgbz1yLXQsbj1uZXcgQXJyYXlCdWZmZXIobyk7cmV0dXJuIGllKG4sMCxlLHQsbyksbn0oZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZU9mZnNldCtlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgVWludDhBcnJheSh0KX1mdW5jdGlvbiBzZShlKXtjb25zdCB0PWUuX3F1ZXVlLnNoaWZ0KCk7cmV0dXJuIGUuX3F1ZXVlVG90YWxTaXplLT10LnNpemUsZS5fcXVldWVUb3RhbFNpemU8MCYmKGUuX3F1ZXVlVG90YWxTaXplPTApLHQudmFsdWV9ZnVuY3Rpb24gdWUoZSx0LHIpe2lmKFwibnVtYmVyXCIhPXR5cGVvZihvPXIpfHxhZShvKXx8bzwwfHxyPT09MS8wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiU2l6ZSBtdXN0IGJlIGEgZmluaXRlLCBub24tTmFOLCBub24tbmVnYXRpdmUgbnVtYmVyLlwiKTt2YXIgbztlLl9xdWV1ZS5wdXNoKHt2YWx1ZTp0LHNpemU6cn0pLGUuX3F1ZXVlVG90YWxTaXplKz1yfWZ1bmN0aW9uIGNlKGUpe2UuX3F1ZXVlPW5ldyBTLGUuX3F1ZXVlVG90YWxTaXplPTB9Y2xhc3MgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdHtjb25zdHJ1Y3Rvcigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpfWdldCB2aWV3KCl7aWYoIWZlKHRoaXMpKXRocm93IEJlKFwidmlld1wiKTtyZXR1cm4gdGhpcy5fdmlld31yZXNwb25kKGUpe2lmKCFmZSh0aGlzKSl0aHJvdyBCZShcInJlc3BvbmRcIik7aWYoJChlLDEsXCJyZXNwb25kXCIpLGU9TihlLFwiRmlyc3QgcGFyYW1ldGVyXCIpLHZvaWQgMD09PXRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGlzIEJZT0IgcmVxdWVzdCBoYXMgYmVlbiBpbnZhbGlkYXRlZFwiKTt0aGlzLl92aWV3LmJ1ZmZlcixmdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCk7aWYoXCJjbG9zZWRcIj09PWUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0uX3N0YXRlKXtpZigwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYnl0ZXNXcml0dGVuIG11c3QgYmUgMCB3aGVuIGNhbGxpbmcgcmVzcG9uZCgpIG9uIGEgY2xvc2VkIHN0cmVhbVwiKX1lbHNle2lmKDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJieXRlc1dyaXR0ZW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gMCB3aGVuIGNhbGxpbmcgcmVzcG9uZCgpIG9uIGEgcmVhZGFibGUgc3RyZWFtXCIpO2lmKHIuYnl0ZXNGaWxsZWQrdD5yLmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJieXRlc1dyaXR0ZW4gb3V0IG9mIHJhbmdlXCIpfXIuYnVmZmVyPXIuYnVmZmVyLHFlKGUsdCl9KHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLGUpfXJlc3BvbmRXaXRoTmV3VmlldyhlKXtpZighZmUodGhpcykpdGhyb3cgQmUoXCJyZXNwb25kV2l0aE5ld1ZpZXdcIik7aWYoJChlLDEsXCJyZXNwb25kV2l0aE5ld1ZpZXdcIiksIUFycmF5QnVmZmVyLmlzVmlldyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiWW91IGNhbiBvbmx5IHJlc3BvbmQgd2l0aCBhcnJheSBidWZmZXIgdmlld3NcIik7aWYodm9pZCAwPT09dGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoaXMgQllPQiByZXF1ZXN0IGhhcyBiZWVuIGludmFsaWRhdGVkXCIpO2UuYnVmZmVyLGZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1lLl9wZW5kaW5nUHVsbEludG9zLnBlZWsoKTtpZihcImNsb3NlZFwiPT09ZS5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbS5fc3RhdGUpe2lmKDAhPT10LmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSB2aWV3J3MgbGVuZ3RoIG11c3QgYmUgMCB3aGVuIGNhbGxpbmcgcmVzcG9uZFdpdGhOZXdWaWV3KCkgb24gYSBjbG9zZWQgc3RyZWFtXCIpfWVsc2UgaWYoMD09PXQuYnl0ZUxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHZpZXcncyBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gMCB3aGVuIGNhbGxpbmcgcmVzcG9uZFdpdGhOZXdWaWV3KCkgb24gYSByZWFkYWJsZSBzdHJlYW1cIik7aWYoci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQhPT10LmJ5dGVPZmZzZXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgcmVnaW9uIHNwZWNpZmllZCBieSB2aWV3IGRvZXMgbm90IG1hdGNoIGJ5b2JSZXF1ZXN0XCIpO2lmKHIuYnVmZmVyQnl0ZUxlbmd0aCE9PXQuYnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgYnVmZmVyIG9mIHZpZXcgaGFzIGRpZmZlcmVudCBjYXBhY2l0eSB0aGFuIGJ5b2JSZXF1ZXN0XCIpO2lmKHIuYnl0ZXNGaWxsZWQrdC5ieXRlTGVuZ3RoPnIuYnl0ZUxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSByZWdpb24gc3BlY2lmaWVkIGJ5IHZpZXcgaXMgbGFyZ2VyIHRoYW4gYnlvYlJlcXVlc3RcIik7Y29uc3Qgbz10LmJ5dGVMZW5ndGg7ci5idWZmZXI9dC5idWZmZXIscWUoZSxvKX0odGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsZSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLHtyZXNwb25kOntlbnVtZXJhYmxlOiEwfSxyZXNwb25kV2l0aE5ld1ZpZXc6e2VudW1lcmFibGU6ITB9LHZpZXc6e2VudW1lcmFibGU6ITB9fSksbihSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0LnByb3RvdHlwZS5yZXNwb25kLFwicmVzcG9uZFwiKSxuKFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLnJlc3BvbmRXaXRoTmV3VmlldyxcInJlc3BvbmRXaXRoTmV3Vmlld1wiKSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdFwiLGNvbmZpZ3VyYWJsZTohMH0pO2NsYXNzIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJ7Y29uc3RydWN0b3IoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKX1nZXQgYnlvYlJlcXVlc3QoKXtpZighZGUodGhpcykpdGhyb3cgQWUoXCJieW9iUmVxdWVzdFwiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYobnVsbD09PWUuX2J5b2JSZXF1ZXN0JiZlLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wKXtjb25zdCB0PWUuX3BlbmRpbmdQdWxsSW50b3MucGVlaygpLHI9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0K3QuYnl0ZXNGaWxsZWQsdC5ieXRlTGVuZ3RoLXQuYnl0ZXNGaWxsZWQpLG89T2JqZWN0LmNyZWF0ZShSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0LnByb3RvdHlwZSk7IWZ1bmN0aW9uKGUsdCxyKXtlLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcj10LGUuX3ZpZXc9cn0obyxlLHIpLGUuX2J5b2JSZXF1ZXN0PW99cmV0dXJuIGUuX2J5b2JSZXF1ZXN0fSh0aGlzKX1nZXQgZGVzaXJlZFNpemUoKXtpZighZGUodGhpcykpdGhyb3cgQWUoXCJkZXNpcmVkU2l6ZVwiKTtyZXR1cm4ga2UodGhpcyl9Y2xvc2UoKXtpZighZGUodGhpcykpdGhyb3cgQWUoXCJjbG9zZVwiKTtpZih0aGlzLl9jbG9zZVJlcXVlc3RlZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluIVwiKTtjb25zdCBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0uX3N0YXRlO2lmKFwicmVhZGFibGVcIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIHN0cmVhbSAoaW4gJHtlfSBzdGF0ZSkgaXMgbm90IGluIHRoZSByZWFkYWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGNsb3NlZGApOyFmdW5jdGlvbihlKXtjb25zdCB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW07aWYoZS5fY2xvc2VSZXF1ZXN0ZWR8fFwicmVhZGFibGVcIiE9PXQuX3N0YXRlKXJldHVybjtpZihlLl9xdWV1ZVRvdGFsU2l6ZT4wKXJldHVybiB2b2lkKGUuX2Nsb3NlUmVxdWVzdGVkPSEwKTtpZihlLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wKXtpZihlLl9wZW5kaW5nUHVsbEludG9zLnBlZWsoKS5ieXRlc0ZpbGxlZD4wKXtjb25zdCB0PW5ldyBUeXBlRXJyb3IoXCJJbnN1ZmZpY2llbnQgYnl0ZXMgdG8gZmlsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYnVmZmVyXCIpO3Rocm93IFBlKGUsdCksdH19RWUoZSksWHQodCl9KHRoaXMpfWVucXVldWUoZSl7aWYoIWRlKHRoaXMpKXRocm93IEFlKFwiZW5xdWV1ZVwiKTtpZigkKGUsMSxcImVucXVldWVcIiksIUFycmF5QnVmZmVyLmlzVmlldyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2h1bmsgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIgdmlld1wiKTtpZigwPT09ZS5ieXRlTGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoXCJjaHVuayBtdXN0IGhhdmUgbm9uLXplcm8gYnl0ZUxlbmd0aFwiKTtpZigwPT09ZS5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2h1bmsncyBidWZmZXIgbXVzdCBoYXZlIG5vbi16ZXJvIGJ5dGVMZW5ndGhcIik7aWYodGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcihcInN0cmVhbSBpcyBjbG9zZWQgb3IgZHJhaW5pbmdcIik7Y29uc3QgdD10aGlzLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLl9zdGF0ZTtpZihcInJlYWRhYmxlXCIhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoYFRoZSBzdHJlYW0gKGluICR7dH0gc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBlbnF1ZXVlZCB0b2ApOyFmdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbTtpZihlLl9jbG9zZVJlcXVlc3RlZHx8XCJyZWFkYWJsZVwiIT09ci5fc3RhdGUpcmV0dXJuO2NvbnN0IG89dC5idWZmZXIsbj10LmJ5dGVPZmZzZXQsYT10LmJ5dGVMZW5ndGgsaT1vO2lmKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApe2NvbnN0IHQ9ZS5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCk7dC5idWZmZXIsMCxSZShlKSx0LmJ1ZmZlcj10LmJ1ZmZlcixcIm5vbmVcIj09PXQucmVhZGVyVHlwZSYmZ2UoZSx0KX1pZihKKHIpKWlmKGZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlQnl0ZVN0cmVhbS5fcmVhZGVyO2Zvcig7dC5fcmVhZFJlcXVlc3RzLmxlbmd0aD4wOyl7aWYoMD09PWUuX3F1ZXVlVG90YWxTaXplKXJldHVybjtXZShlLHQuX3JlYWRSZXF1ZXN0cy5zaGlmdCgpKX19KGUpLDA9PT1YKHIpKW1lKGUsaSxuLGEpO2Vsc2V7ZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCYmQ2UoZSk7RyhyLG5ldyBVaW50OEFycmF5KGksbixhKSwhMSl9ZWxzZSBMZShyKT8obWUoZSxpLG4sYSksVGUoZSkpOm1lKGUsaSxuLGEpO2JlKGUpfSh0aGlzLGUpfWVycm9yKGUpe2lmKCFkZSh0aGlzKSl0aHJvdyBBZShcImVycm9yXCIpO1BlKHRoaXMsZSl9W1RdKGUpe2hlKHRoaXMpLGNlKHRoaXMpO2NvbnN0IHQ9dGhpcy5fY2FuY2VsQWxnb3JpdGhtKGUpO3JldHVybiBFZSh0aGlzKSx0fVtxXShlKXtjb25zdCB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW07aWYodGhpcy5fcXVldWVUb3RhbFNpemU+MClyZXR1cm4gdm9pZCBXZSh0aGlzLGUpO2NvbnN0IHI9dGhpcy5fYXV0b0FsbG9jYXRlQ2h1bmtTaXplO2lmKHZvaWQgMCE9PXIpe2xldCB0O3RyeXt0PW5ldyBBcnJheUJ1ZmZlcihyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBlLl9lcnJvclN0ZXBzKHQpfWNvbnN0IG89e2J1ZmZlcjp0LGJ1ZmZlckJ5dGVMZW5ndGg6cixieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpyLGJ5dGVzRmlsbGVkOjAsZWxlbWVudFNpemU6MSx2aWV3Q29uc3RydWN0b3I6VWludDhBcnJheSxyZWFkZXJUeXBlOlwiZGVmYXVsdFwifTt0aGlzLl9wZW5kaW5nUHVsbEludG9zLnB1c2gobyl9VSh0LGUpLGJlKHRoaXMpfVtDXSgpe2lmKHRoaXMuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5wZWVrKCk7ZS5yZWFkZXJUeXBlPVwibm9uZVwiLHRoaXMuX3BlbmRpbmdQdWxsSW50b3M9bmV3IFMsdGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKGUpfX19ZnVuY3Rpb24gZGUoZSl7cmV0dXJuISFyKGUpJiYoISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcIl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtXCIpJiZlIGluc3RhbmNlb2YgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcil9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuISFyKGUpJiYoISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcIl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclwiKSYmZSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QpfWZ1bmN0aW9uIGJlKGUpe2NvbnN0IHQ9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtO2lmKFwicmVhZGFibGVcIiE9PXQuX3N0YXRlKXJldHVybiExO2lmKGUuX2Nsb3NlUmVxdWVzdGVkKXJldHVybiExO2lmKCFlLl9zdGFydGVkKXJldHVybiExO2lmKEoodCkmJlgodCk+MClyZXR1cm4hMDtpZihMZSh0KSYmemUodCk+MClyZXR1cm4hMDtpZihrZShlKT4wKXJldHVybiEwO3JldHVybiExfShlKTtpZighdClyZXR1cm47aWYoZS5fcHVsbGluZylyZXR1cm4gdm9pZChlLl9wdWxsQWdhaW49ITApO2UuX3B1bGxpbmc9ITA7YihlLl9wdWxsQWxnb3JpdGhtKCksKCgpPT4oZS5fcHVsbGluZz0hMSxlLl9wdWxsQWdhaW4mJihlLl9wdWxsQWdhaW49ITEsYmUoZSkpLG51bGwpKSwodD0+KFBlKGUsdCksbnVsbCkpKX1mdW5jdGlvbiBoZShlKXtSZShlKSxlLl9wZW5kaW5nUHVsbEludG9zPW5ldyBTfWZ1bmN0aW9uIF9lKGUsdCl7bGV0IHI9ITE7XCJjbG9zZWRcIj09PWUuX3N0YXRlJiYocj0hMCk7Y29uc3Qgbz1wZSh0KTtcImRlZmF1bHRcIj09PXQucmVhZGVyVHlwZT9HKGUsbyxyKTpmdW5jdGlvbihlLHQscil7Y29uc3Qgbz1lLl9yZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMuc2hpZnQoKTtyP28uX2Nsb3NlU3RlcHModCk6by5fY2h1bmtTdGVwcyh0KX0oZSxvLHIpfWZ1bmN0aW9uIHBlKGUpe2NvbnN0IHQ9ZS5ieXRlc0ZpbGxlZCxyPWUuZWxlbWVudFNpemU7cmV0dXJuIG5ldyBlLnZpZXdDb25zdHJ1Y3RvcihlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsdC9yKX1mdW5jdGlvbiBtZShlLHQscixvKXtlLl9xdWV1ZS5wdXNoKHtidWZmZXI6dCxieXRlT2Zmc2V0OnIsYnl0ZUxlbmd0aDpvfSksZS5fcXVldWVUb3RhbFNpemUrPW99ZnVuY3Rpb24geWUoZSx0LHIsbyl7bGV0IG47dHJ5e249dC5zbGljZShyLHIrbyl9Y2F0Y2godCl7dGhyb3cgUGUoZSx0KSx0fW1lKGUsbiwwLG8pfWZ1bmN0aW9uIGdlKGUsdCl7dC5ieXRlc0ZpbGxlZD4wJiZ5ZShlLHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVzRmlsbGVkKSxDZShlKX1mdW5jdGlvbiB3ZShlLHQpe2NvbnN0IHI9dC5lbGVtZW50U2l6ZSxvPXQuYnl0ZXNGaWxsZWQtdC5ieXRlc0ZpbGxlZCVyLG49TWF0aC5taW4oZS5fcXVldWVUb3RhbFNpemUsdC5ieXRlTGVuZ3RoLXQuYnl0ZXNGaWxsZWQpLGE9dC5ieXRlc0ZpbGxlZCtuLGk9YS1hJXI7bGV0IGw9bixzPSExO2k+byYmKGw9aS10LmJ5dGVzRmlsbGVkLHM9ITApO2NvbnN0IHU9ZS5fcXVldWU7Zm9yKDtsPjA7KXtjb25zdCByPXUucGVlaygpLG89TWF0aC5taW4obCxyLmJ5dGVMZW5ndGgpLG49dC5ieXRlT2Zmc2V0K3QuYnl0ZXNGaWxsZWQ7aWUodC5idWZmZXIsbixyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsbyksci5ieXRlTGVuZ3RoPT09bz91LnNoaWZ0KCk6KHIuYnl0ZU9mZnNldCs9byxyLmJ5dGVMZW5ndGgtPW8pLGUuX3F1ZXVlVG90YWxTaXplLT1vLFNlKGUsbyx0KSxsLT1vfXJldHVybiBzfWZ1bmN0aW9uIFNlKGUsdCxyKXtyLmJ5dGVzRmlsbGVkKz10fWZ1bmN0aW9uIHZlKGUpezA9PT1lLl9xdWV1ZVRvdGFsU2l6ZSYmZS5fY2xvc2VSZXF1ZXN0ZWQ/KEVlKGUpLFh0KGUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW0pKTpiZShlKX1mdW5jdGlvbiBSZShlKXtudWxsIT09ZS5fYnlvYlJlcXVlc3QmJihlLl9ieW9iUmVxdWVzdC5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwLGUuX2J5b2JSZXF1ZXN0Ll92aWV3PW51bGwsZS5fYnlvYlJlcXVlc3Q9bnVsbCl9ZnVuY3Rpb24gVGUoZSl7Zm9yKDtlLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wOyl7aWYoMD09PWUuX3F1ZXVlVG90YWxTaXplKXJldHVybjtjb25zdCB0PWUuX3BlbmRpbmdQdWxsSW50b3MucGVlaygpO3dlKGUsdCkmJihDZShlKSxfZShlLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLHQpKX19ZnVuY3Rpb24gcWUoZSx0KXtjb25zdCByPWUuX3BlbmRpbmdQdWxsSW50b3MucGVlaygpO1JlKGUpO1wiY2xvc2VkXCI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLl9zdGF0ZT9mdW5jdGlvbihlLHQpe1wibm9uZVwiPT09dC5yZWFkZXJUeXBlJiZDZShlKTtjb25zdCByPWUuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW07aWYoTGUocikpZm9yKDt6ZShyKT4wOylfZShyLENlKGUpKX0oZSxyKTpmdW5jdGlvbihlLHQscil7aWYoU2UoMCx0LHIpLFwibm9uZVwiPT09ci5yZWFkZXJUeXBlKXJldHVybiBnZShlLHIpLHZvaWQgVGUoZSk7aWYoci5ieXRlc0ZpbGxlZDxyLmVsZW1lbnRTaXplKXJldHVybjtDZShlKTtjb25zdCBvPXIuYnl0ZXNGaWxsZWQlci5lbGVtZW50U2l6ZTtpZihvPjApe2NvbnN0IHQ9ci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQ7eWUoZSxyLmJ1ZmZlcix0LW8sbyl9ci5ieXRlc0ZpbGxlZC09byxfZShlLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLHIpLFRlKGUpfShlLHQsciksYmUoZSl9ZnVuY3Rpb24gQ2UoZSl7cmV0dXJuIGUuX3BlbmRpbmdQdWxsSW50b3Muc2hpZnQoKX1mdW5jdGlvbiBFZShlKXtlLl9wdWxsQWxnb3JpdGhtPXZvaWQgMCxlLl9jYW5jZWxBbGdvcml0aG09dm9pZCAwfWZ1bmN0aW9uIFBlKGUsdCl7Y29uc3Qgcj1lLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtO1wicmVhZGFibGVcIj09PXIuX3N0YXRlJiYoaGUoZSksY2UoZSksRWUoZSksSnQocix0KSl9ZnVuY3Rpb24gV2UoZSx0KXtjb25zdCByPWUuX3F1ZXVlLnNoaWZ0KCk7ZS5fcXVldWVUb3RhbFNpemUtPXIuYnl0ZUxlbmd0aCx2ZShlKTtjb25zdCBvPW5ldyBVaW50OEFycmF5KHIuYnVmZmVyLHIuYnl0ZU9mZnNldCxyLmJ5dGVMZW5ndGgpO3QuX2NodW5rU3RlcHMobyl9ZnVuY3Rpb24ga2UoZSl7Y29uc3QgdD1lLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtLl9zdGF0ZTtyZXR1cm5cImVycm9yZWRcIj09PXQ/bnVsbDpcImNsb3NlZFwiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfWZ1bmN0aW9uIE9lKGUsdCxyKXtjb25zdCBvPU9iamVjdC5jcmVhdGUoUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGUpO2xldCBuLGEsaTtuPXZvaWQgMCE9PXQuc3RhcnQ/KCk9PnQuc3RhcnQobyk6KCk9Pnt9LGE9dm9pZCAwIT09dC5wdWxsPygpPT50LnB1bGwobyk6KCk9PmModm9pZCAwKSxpPXZvaWQgMCE9PXQuY2FuY2VsP2U9PnQuY2FuY2VsKGUpOigpPT5jKHZvaWQgMCk7Y29uc3QgbD10LmF1dG9BbGxvY2F0ZUNodW5rU2l6ZTtpZigwPT09bCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXV0b0FsbG9jYXRlQ2h1bmtTaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIik7IWZ1bmN0aW9uKGUsdCxyLG8sbixhLGkpe3QuX2NvbnRyb2xsZWRSZWFkYWJsZUJ5dGVTdHJlYW09ZSx0Ll9wdWxsQWdhaW49ITEsdC5fcHVsbGluZz0hMSx0Ll9ieW9iUmVxdWVzdD1udWxsLHQuX3F1ZXVlPXQuX3F1ZXVlVG90YWxTaXplPXZvaWQgMCxjZSh0KSx0Ll9jbG9zZVJlcXVlc3RlZD0hMSx0Ll9zdGFydGVkPSExLHQuX3N0cmF0ZWd5SFdNPWEsdC5fcHVsbEFsZ29yaXRobT1vLHQuX2NhbmNlbEFsZ29yaXRobT1uLHQuX2F1dG9BbGxvY2F0ZUNodW5rU2l6ZT1pLHQuX3BlbmRpbmdQdWxsSW50b3M9bmV3IFMsZS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyPXQsYihjKHIoKSksKCgpPT4odC5fc3RhcnRlZD0hMCxiZSh0KSxudWxsKSksKGU9PihQZSh0LGUpLG51bGwpKSl9KGUsbyxuLGEsaSxyLGwpfWZ1bmN0aW9uIEJlKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKGBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0LnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0YCl9ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLiR7ZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJgKX1mdW5jdGlvbiBqZShlLHQpe2UuX3JlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5wdXNoKHQpfWZ1bmN0aW9uIHplKGUpe3JldHVybiBlLl9yZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RofWZ1bmN0aW9uIExlKGUpe2NvbnN0IHQ9ZS5fcmVhZGVyO3JldHVybiB2b2lkIDAhPT10JiYhIUZlKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLHtjbG9zZTp7ZW51bWVyYWJsZTohMH0sZW5xdWV1ZTp7ZW51bWVyYWJsZTohMH0sZXJyb3I6e2VudW1lcmFibGU6ITB9LGJ5b2JSZXF1ZXN0OntlbnVtZXJhYmxlOiEwfSxkZXNpcmVkU2l6ZTp7ZW51bWVyYWJsZTohMH19KSxuKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLmNsb3NlLFwiY2xvc2VcIiksbihSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLnByb3RvdHlwZS5lbnF1ZXVlLFwiZW5xdWV1ZVwiKSxuKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLmVycm9yLFwiZXJyb3JcIiksXCJzeW1ib2xcIj09dHlwZW9mIGUudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLnByb3RvdHlwZSxlLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJcIixjb25maWd1cmFibGU6ITB9KTtjbGFzcyBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXJ7Y29uc3RydWN0b3IoZSl7aWYoJChlLDEsXCJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXJcIiksVihlLFwiRmlyc3QgcGFyYW1ldGVyXCIpLFV0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGlzIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBmb3IgZXhjbHVzaXZlIHJlYWRpbmcgYnkgYW5vdGhlciByZWFkZXJcIik7aWYoIWRlKGUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb25zdHJ1Y3QgYSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgZm9yIGEgc3RyZWFtIG5vdCBjb25zdHJ1Y3RlZCB3aXRoIGEgYnl0ZSBzb3VyY2VcIik7RSh0aGlzLGUpLHRoaXMuX3JlYWRJbnRvUmVxdWVzdHM9bmV3IFN9Z2V0IGNsb3NlZCgpe3JldHVybiBGZSh0aGlzKT90aGlzLl9jbG9zZWRQcm9taXNlOmQoRGUoXCJjbG9zZWRcIikpfWNhbmNlbChlKXtyZXR1cm4gRmUodGhpcyk/dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9kKGsoXCJjYW5jZWxcIikpOlAodGhpcyxlKTpkKERlKFwiY2FuY2VsXCIpKX1yZWFkKGUpe2lmKCFGZSh0aGlzKSlyZXR1cm4gZChEZShcInJlYWRcIikpO2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpcmV0dXJuIGQobmV3IFR5cGVFcnJvcihcInZpZXcgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIgdmlld1wiKSk7aWYoMD09PWUuYnl0ZUxlbmd0aClyZXR1cm4gZChuZXcgVHlwZUVycm9yKFwidmlldyBtdXN0IGhhdmUgbm9uLXplcm8gYnl0ZUxlbmd0aFwiKSk7aWYoMD09PWUuYnVmZmVyLmJ5dGVMZW5ndGgpcmV0dXJuIGQobmV3IFR5cGVFcnJvcihcInZpZXcncyBidWZmZXIgbXVzdCBoYXZlIG5vbi16ZXJvIGJ5dGVMZW5ndGhcIikpO2lmKGUuYnVmZmVyLHZvaWQgMD09PXRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0pcmV0dXJuIGQoayhcInJlYWQgZnJvbVwiKSk7bGV0IHQscjtjb25zdCBvPXUoKChlLG8pPT57dD1lLHI9b30pKTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG89ZS5fb3duZXJSZWFkYWJsZVN0cmVhbTtvLl9kaXN0dXJiZWQ9ITAsXCJlcnJvcmVkXCI9PT1vLl9zdGF0ZT9yLl9lcnJvclN0ZXBzKG8uX3N0b3JlZEVycm9yKTpmdW5jdGlvbihlLHQscil7Y29uc3Qgbz1lLl9jb250cm9sbGVkUmVhZGFibGVCeXRlU3RyZWFtO2xldCBuPTE7dC5jb25zdHJ1Y3RvciE9PURhdGFWaWV3JiYobj10LmNvbnN0cnVjdG9yLkJZVEVTX1BFUl9FTEVNRU5UKTtjb25zdCBhPXQuY29uc3RydWN0b3IsaT10LmJ1ZmZlcixsPXtidWZmZXI6aSxidWZmZXJCeXRlTGVuZ3RoOmkuYnl0ZUxlbmd0aCxieXRlT2Zmc2V0OnQuYnl0ZU9mZnNldCxieXRlTGVuZ3RoOnQuYnl0ZUxlbmd0aCxieXRlc0ZpbGxlZDowLGVsZW1lbnRTaXplOm4sdmlld0NvbnN0cnVjdG9yOmEscmVhZGVyVHlwZTpcImJ5b2JcIn07aWYoZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MClyZXR1cm4gZS5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKGwpLHZvaWQgamUobyxyKTtpZihcImNsb3NlZFwiIT09by5fc3RhdGUpe2lmKGUuX3F1ZXVlVG90YWxTaXplPjApe2lmKHdlKGUsbCkpe2NvbnN0IHQ9cGUobCk7cmV0dXJuIHZlKGUpLHZvaWQgci5fY2h1bmtTdGVwcyh0KX1pZihlLl9jbG9zZVJlcXVlc3RlZCl7Y29uc3QgdD1uZXcgVHlwZUVycm9yKFwiSW5zdWZmaWNpZW50IGJ5dGVzIHRvIGZpbGwgZWxlbWVudHMgaW4gdGhlIGdpdmVuIGJ1ZmZlclwiKTtyZXR1cm4gUGUoZSx0KSx2b2lkIHIuX2Vycm9yU3RlcHModCl9fWUuX3BlbmRpbmdQdWxsSW50b3MucHVzaChsKSxqZShvLHIpLGJlKGUpfWVsc2V7Y29uc3QgZT1uZXcgYShsLmJ1ZmZlcixsLmJ5dGVPZmZzZXQsMCk7ci5fY2xvc2VTdGVwcyhlKX19KG8uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcix0LHIpfSh0aGlzLGUse19jaHVua1N0ZXBzOmU9PnQoe3ZhbHVlOmUsZG9uZTohMX0pLF9jbG9zZVN0ZXBzOmU9PnQoe3ZhbHVlOmUsZG9uZTohMH0pLF9lcnJvclN0ZXBzOmU9PnIoZSl9KSxvfXJlbGVhc2VMb2NrKCl7aWYoIUZlKHRoaXMpKXRocm93IERlKFwicmVsZWFzZUxvY2tcIik7dm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSYmZnVuY3Rpb24oZSl7VyhlKTtjb25zdCB0PW5ldyBUeXBlRXJyb3IoXCJSZWFkZXIgd2FzIHJlbGVhc2VkXCIpO0llKGUsdCl9KHRoaXMpfX1mdW5jdGlvbiBGZShlKXtyZXR1cm4hIXIoZSkmJighIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiX3JlYWRJbnRvUmVxdWVzdHNcIikmJmUgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIpfWZ1bmN0aW9uIEllKGUsdCl7Y29uc3Qgcj1lLl9yZWFkSW50b1JlcXVlc3RzO2UuX3JlYWRJbnRvUmVxdWVzdHM9bmV3IFMsci5mb3JFYWNoKChlPT57ZS5fZXJyb3JTdGVwcyh0KX0pKX1mdW5jdGlvbiBEZShlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXJgKX1mdW5jdGlvbiAkZShlLHQpe2NvbnN0e2hpZ2hXYXRlck1hcms6cn09ZTtpZih2b2lkIDA9PT1yKXJldHVybiB0O2lmKGFlKHIpfHxyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGhpZ2hXYXRlck1hcmtcIik7cmV0dXJuIHJ9ZnVuY3Rpb24gTWUoZSl7Y29uc3R7c2l6ZTp0fT1lO3JldHVybiB0fHwoKCk9PjEpfWZ1bmN0aW9uIFllKGUsdCl7RihlLHQpO2NvbnN0IHI9bnVsbD09ZT92b2lkIDA6ZS5oaWdoV2F0ZXJNYXJrLG89bnVsbD09ZT92b2lkIDA6ZS5zaXplO3JldHVybntoaWdoV2F0ZXJNYXJrOnZvaWQgMD09PXI/dm9pZCAwOlkociksc2l6ZTp2b2lkIDA9PT1vP3ZvaWQgMDpRZShvLGAke3R9IGhhcyBtZW1iZXIgJ3NpemUnIHRoYXRgKX19ZnVuY3Rpb24gUWUoZSx0KXtyZXR1cm4gSShlLHQpLHQ9PlkoZSh0KSl9ZnVuY3Rpb24gTmUoZSx0LHIpe3JldHVybiBJKGUscikscj0+dyhlLHQsW3JdKX1mdW5jdGlvbiBIZShlLHQscil7cmV0dXJuIEkoZSxyKSwoKT0+dyhlLHQsW10pfWZ1bmN0aW9uIHhlKGUsdCxyKXtyZXR1cm4gSShlLHIpLHI9PmcoZSx0LFtyXSl9ZnVuY3Rpb24gVmUoZSx0LHIpe3JldHVybiBJKGUsciksKHIsbyk9PncoZSx0LFtyLG9dKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucHJvdG90eXBlLHtjYW5jZWw6e2VudW1lcmFibGU6ITB9LHJlYWQ6e2VudW1lcmFibGU6ITB9LHJlbGVhc2VMb2NrOntlbnVtZXJhYmxlOiEwfSxjbG9zZWQ6e2VudW1lcmFibGU6ITB9fSksbihSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucHJvdG90eXBlLmNhbmNlbCxcImNhbmNlbFwiKSxuKFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlci5wcm90b3R5cGUucmVhZCxcInJlYWRcIiksbihSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucHJvdG90eXBlLnJlbGVhc2VMb2NrLFwicmVsZWFzZUxvY2tcIiksXCJzeW1ib2xcIj09dHlwZW9mIGUudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyXCIsY29uZmlndXJhYmxlOiEwfSk7Y29uc3QgVWU9XCJmdW5jdGlvblwiPT10eXBlb2YgQWJvcnRDb250cm9sbGVyO2NsYXNzIFdyaXRhYmxlU3RyZWFte2NvbnN0cnVjdG9yKGU9e30sdD17fSl7dm9pZCAwPT09ZT9lPW51bGw6RChlLFwiRmlyc3QgcGFyYW1ldGVyXCIpO2NvbnN0IHI9WWUodCxcIlNlY29uZCBwYXJhbWV0ZXJcIiksbz1mdW5jdGlvbihlLHQpe0YoZSx0KTtjb25zdCByPW51bGw9PWU/dm9pZCAwOmUuYWJvcnQsbz1udWxsPT1lP3ZvaWQgMDplLmNsb3NlLG49bnVsbD09ZT92b2lkIDA6ZS5zdGFydCxhPW51bGw9PWU/dm9pZCAwOmUudHlwZSxpPW51bGw9PWU/dm9pZCAwOmUud3JpdGU7cmV0dXJue2Fib3J0OnZvaWQgMD09PXI/dm9pZCAwOk5lKHIsZSxgJHt0fSBoYXMgbWVtYmVyICdhYm9ydCcgdGhhdGApLGNsb3NlOnZvaWQgMD09PW8/dm9pZCAwOkhlKG8sZSxgJHt0fSBoYXMgbWVtYmVyICdjbG9zZScgdGhhdGApLHN0YXJ0OnZvaWQgMD09PW4/dm9pZCAwOnhlKG4sZSxgJHt0fSBoYXMgbWVtYmVyICdzdGFydCcgdGhhdGApLHdyaXRlOnZvaWQgMD09PWk/dm9pZCAwOlZlKGksZSxgJHt0fSBoYXMgbWVtYmVyICd3cml0ZScgdGhhdGApLHR5cGU6YX19KGUsXCJGaXJzdCBwYXJhbWV0ZXJcIik7dmFyIG47KG49dGhpcykuX3N0YXRlPVwid3JpdGFibGVcIixuLl9zdG9yZWRFcnJvcj12b2lkIDAsbi5fd3JpdGVyPXZvaWQgMCxuLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwLG4uX3dyaXRlUmVxdWVzdHM9bmV3IFMsbi5faW5GbGlnaHRXcml0ZVJlcXVlc3Q9dm9pZCAwLG4uX2Nsb3NlUmVxdWVzdD12b2lkIDAsbi5faW5GbGlnaHRDbG9zZVJlcXVlc3Q9dm9pZCAwLG4uX3BlbmRpbmdBYm9ydFJlcXVlc3Q9dm9pZCAwLG4uX2JhY2twcmVzc3VyZT0hMTtpZih2b2lkIDAhPT1vLnR5cGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHR5cGUgaXMgc3BlY2lmaWVkXCIpO2NvbnN0IGE9TWUocik7IWZ1bmN0aW9uKGUsdCxyLG8pe2NvbnN0IG49T2JqZWN0LmNyZWF0ZShXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSk7bGV0IGEsaSxsLHM7YT12b2lkIDAhPT10LnN0YXJ0PygpPT50LnN0YXJ0KG4pOigpPT57fTtpPXZvaWQgMCE9PXQud3JpdGU/ZT0+dC53cml0ZShlLG4pOigpPT5jKHZvaWQgMCk7bD12b2lkIDAhPT10LmNsb3NlPygpPT50LmNsb3NlKCk6KCk9PmModm9pZCAwKTtzPXZvaWQgMCE9PXQuYWJvcnQ/ZT0+dC5hYm9ydChlKTooKT0+Yyh2b2lkIDApOyFmdW5jdGlvbihlLHQscixvLG4sYSxpLGwpe3QuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbT1lLGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcj10LHQuX3F1ZXVlPXZvaWQgMCx0Ll9xdWV1ZVRvdGFsU2l6ZT12b2lkIDAsY2UodCksdC5fYWJvcnRSZWFzb249dm9pZCAwLHQuX2Fib3J0Q29udHJvbGxlcj1mdW5jdGlvbigpe2lmKFVlKXJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyfSgpLHQuX3N0YXJ0ZWQ9ITEsdC5fc3RyYXRlZ3lTaXplQWxnb3JpdGhtPWwsdC5fc3RyYXRlZ3lIV009aSx0Ll93cml0ZUFsZ29yaXRobT1vLHQuX2Nsb3NlQWxnb3JpdGhtPW4sdC5fYWJvcnRBbGdvcml0aG09YTtjb25zdCBzPWJ0KHQpO250KGUscyk7Y29uc3QgdT1yKCk7YihjKHUpLCgoKT0+KHQuX3N0YXJ0ZWQ9ITAsZHQodCksbnVsbCkpLChyPT4odC5fc3RhcnRlZD0hMCxaZShlLHIpLG51bGwpKSl9KGUsbixhLGksbCxzLHIsbyl9KHRoaXMsbywkZShyLDEpLGEpfWdldCBsb2NrZWQoKXtpZighR2UodGhpcykpdGhyb3cgX3QoXCJsb2NrZWRcIik7cmV0dXJuIFhlKHRoaXMpfWFib3J0KGUpe3JldHVybiBHZSh0aGlzKT9YZSh0aGlzKT9kKG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWJvcnQgYSBzdHJlYW0gdGhhdCBhbHJlYWR5IGhhcyBhIHdyaXRlclwiKSk6SmUodGhpcyxlKTpkKF90KFwiYWJvcnRcIikpfWNsb3NlKCl7cmV0dXJuIEdlKHRoaXMpP1hlKHRoaXMpP2QobmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjbG9zZSBhIHN0cmVhbSB0aGF0IGFscmVhZHkgaGFzIGEgd3JpdGVyXCIpKTpydCh0aGlzKT9kKG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2xvc2UgYW4gYWxyZWFkeS1jbG9zaW5nIHN0cmVhbVwiKSk6S2UodGhpcyk6ZChfdChcImNsb3NlXCIpKX1nZXRXcml0ZXIoKXtpZighR2UodGhpcykpdGhyb3cgX3QoXCJnZXRXcml0ZXJcIik7cmV0dXJuIG5ldyBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcyl9fWZ1bmN0aW9uIEdlKGUpe3JldHVybiEhcihlKSYmKCEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfd3JpdGFibGVTdHJlYW1Db250cm9sbGVyXCIpJiZlIGluc3RhbmNlb2YgV3JpdGFibGVTdHJlYW0pfWZ1bmN0aW9uIFhlKGUpe3JldHVybiB2b2lkIDAhPT1lLl93cml0ZXJ9ZnVuY3Rpb24gSmUoZSx0KXt2YXIgcjtpZihcImNsb3NlZFwiPT09ZS5fc3RhdGV8fFwiZXJyb3JlZFwiPT09ZS5fc3RhdGUpcmV0dXJuIGModm9pZCAwKTtlLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIuX2Fib3J0UmVhc29uPXQsbnVsbD09PShyPWUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fYWJvcnRDb250cm9sbGVyKXx8dm9pZCAwPT09cnx8ci5hYm9ydCh0KTtjb25zdCBvPWUuX3N0YXRlO2lmKFwiY2xvc2VkXCI9PT1vfHxcImVycm9yZWRcIj09PW8pcmV0dXJuIGModm9pZCAwKTtpZih2b2lkIDAhPT1lLl9wZW5kaW5nQWJvcnRSZXF1ZXN0KXJldHVybiBlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9wcm9taXNlO2xldCBuPSExO1wiZXJyb3JpbmdcIj09PW8mJihuPSEwLHQ9dm9pZCAwKTtjb25zdCBhPXUoKChyLG8pPT57ZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD17X3Byb21pc2U6dm9pZCAwLF9yZXNvbHZlOnIsX3JlamVjdDpvLF9yZWFzb246dCxfd2FzQWxyZWFkeUVycm9yaW5nOm59fSkpO3JldHVybiBlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9wcm9taXNlPWEsbnx8ZXQoZSx0KSxhfWZ1bmN0aW9uIEtlKGUpe2NvbnN0IHQ9ZS5fc3RhdGU7aWYoXCJjbG9zZWRcIj09PXR8fFwiZXJyb3JlZFwiPT09dClyZXR1cm4gZChuZXcgVHlwZUVycm9yKGBUaGUgc3RyZWFtIChpbiAke3R9IHN0YXRlKSBpcyBub3QgaW4gdGhlIHdyaXRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgY2xvc2VkYCkpO2NvbnN0IHI9dSgoKHQscik9Pntjb25zdCBvPXtfcmVzb2x2ZTp0LF9yZWplY3Q6cn07ZS5fY2xvc2VSZXF1ZXN0PW99KSksbz1lLl93cml0ZXI7dmFyIG47cmV0dXJuIHZvaWQgMCE9PW8mJmUuX2JhY2twcmVzc3VyZSYmXCJ3cml0YWJsZVwiPT09dCYmRXQobyksdWUobj1lLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIsbHQsMCksZHQobikscn1mdW5jdGlvbiBaZShlLHQpe1wid3JpdGFibGVcIiE9PWUuX3N0YXRlP3R0KGUpOmV0KGUsdCl9ZnVuY3Rpb24gZXQoZSx0KXtjb25zdCByPWUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcjtlLl9zdGF0ZT1cImVycm9yaW5nXCIsZS5fc3RvcmVkRXJyb3I9dDtjb25zdCBvPWUuX3dyaXRlcjt2b2lkIDAhPT1vJiZpdChvLHQpLCFmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lLl9pbkZsaWdodFdyaXRlUmVxdWVzdCYmdm9pZCAwPT09ZS5faW5GbGlnaHRDbG9zZVJlcXVlc3QpcmV0dXJuITE7cmV0dXJuITB9KGUpJiZyLl9zdGFydGVkJiZ0dChlKX1mdW5jdGlvbiB0dChlKXtlLl9zdGF0ZT1cImVycm9yZWRcIixlLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXJbUl0oKTtjb25zdCB0PWUuX3N0b3JlZEVycm9yO2lmKGUuX3dyaXRlUmVxdWVzdHMuZm9yRWFjaCgoZT0+e2UuX3JlamVjdCh0KX0pKSxlLl93cml0ZVJlcXVlc3RzPW5ldyBTLHZvaWQgMD09PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QpcmV0dXJuIHZvaWQgb3QoZSk7Y29uc3Qgcj1lLl9wZW5kaW5nQWJvcnRSZXF1ZXN0O2lmKGUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q9dm9pZCAwLHIuX3dhc0FscmVhZHlFcnJvcmluZylyZXR1cm4gci5fcmVqZWN0KHQpLHZvaWQgb3QoZSk7YihlLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXJbdl0oci5fcmVhc29uKSwoKCk9PihyLl9yZXNvbHZlKCksb3QoZSksbnVsbCkpLCh0PT4oci5fcmVqZWN0KHQpLG90KGUpLG51bGwpKSl9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIHZvaWQgMCE9PWUuX2Nsb3NlUmVxdWVzdHx8dm9pZCAwIT09ZS5faW5GbGlnaHRDbG9zZVJlcXVlc3R9ZnVuY3Rpb24gb3QoZSl7dm9pZCAwIT09ZS5fY2xvc2VSZXF1ZXN0JiYoZS5fY2xvc2VSZXF1ZXN0Ll9yZWplY3QoZS5fc3RvcmVkRXJyb3IpLGUuX2Nsb3NlUmVxdWVzdD12b2lkIDApO2NvbnN0IHQ9ZS5fd3JpdGVyO3ZvaWQgMCE9PXQmJlN0KHQsZS5fc3RvcmVkRXJyb3IpfWZ1bmN0aW9uIG50KGUsdCl7Y29uc3Qgcj1lLl93cml0ZXI7dm9pZCAwIT09ciYmdCE9PWUuX2JhY2twcmVzc3VyZSYmKHQ/ZnVuY3Rpb24oZSl7UnQoZSl9KHIpOkV0KHIpKSxlLl9iYWNrcHJlc3N1cmU9dH1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUse2Fib3J0OntlbnVtZXJhYmxlOiEwfSxjbG9zZTp7ZW51bWVyYWJsZTohMH0sZ2V0V3JpdGVyOntlbnVtZXJhYmxlOiEwfSxsb2NrZWQ6e2VudW1lcmFibGU6ITB9fSksbihXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuYWJvcnQsXCJhYm9ydFwiKSxuKFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5jbG9zZSxcImNsb3NlXCIpLG4oV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmdldFdyaXRlcixcImdldFdyaXRlclwiKSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZSxlLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIldyaXRhYmxlU3RyZWFtXCIsY29uZmlndXJhYmxlOiEwfSk7Y2xhc3MgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVye2NvbnN0cnVjdG9yKGUpe2lmKCQoZSwxLFwiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyXCIpLGZ1bmN0aW9uKGUsdCl7aWYoIUdlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gaXMgbm90IGEgV3JpdGFibGVTdHJlYW0uYCl9KGUsXCJGaXJzdCBwYXJhbWV0ZXJcIiksWGUoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgd3JpdGluZyBieSBhbm90aGVyIHdyaXRlclwiKTt0aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtPWUsZS5fd3JpdGVyPXRoaXM7Y29uc3QgdD1lLl9zdGF0ZTtpZihcIndyaXRhYmxlXCI9PT10KSFydChlKSYmZS5fYmFja3ByZXNzdXJlP1J0KHRoaXMpOnF0KHRoaXMpLGd0KHRoaXMpO2Vsc2UgaWYoXCJlcnJvcmluZ1wiPT09dClUdCh0aGlzLGUuX3N0b3JlZEVycm9yKSxndCh0aGlzKTtlbHNlIGlmKFwiY2xvc2VkXCI9PT10KXF0KHRoaXMpLGd0KHI9dGhpcyksdnQocik7ZWxzZXtjb25zdCB0PWUuX3N0b3JlZEVycm9yO1R0KHRoaXMsdCksd3QodGhpcyx0KX12YXIgcn1nZXQgY2xvc2VkKCl7cmV0dXJuIGF0KHRoaXMpP3RoaXMuX2Nsb3NlZFByb21pc2U6ZChtdChcImNsb3NlZFwiKSl9Z2V0IGRlc2lyZWRTaXplKCl7aWYoIWF0KHRoaXMpKXRocm93IG10KFwiZGVzaXJlZFNpemVcIik7aWYodm9pZCAwPT09dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSl0aHJvdyB5dChcImRlc2lyZWRTaXplXCIpO3JldHVybiBmdW5jdGlvbihlKXtjb25zdCB0PWUuX293bmVyV3JpdGFibGVTdHJlYW0scj10Ll9zdGF0ZTtpZihcImVycm9yZWRcIj09PXJ8fFwiZXJyb3JpbmdcIj09PXIpcmV0dXJuIG51bGw7aWYoXCJjbG9zZWRcIj09PXIpcmV0dXJuIDA7cmV0dXJuIGN0KHQuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcil9KHRoaXMpfWdldCByZWFkeSgpe3JldHVybiBhdCh0aGlzKT90aGlzLl9yZWFkeVByb21pc2U6ZChtdChcInJlYWR5XCIpKX1hYm9ydChlKXtyZXR1cm4gYXQodGhpcyk/dm9pZCAwPT09dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbT9kKHl0KFwiYWJvcnRcIikpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEplKGUuX293bmVyV3JpdGFibGVTdHJlYW0sdCl9KHRoaXMsZSk6ZChtdChcImFib3J0XCIpKX1jbG9zZSgpe2lmKCFhdCh0aGlzKSlyZXR1cm4gZChtdChcImNsb3NlXCIpKTtjb25zdCBlPXRoaXMuX293bmVyV3JpdGFibGVTdHJlYW07cmV0dXJuIHZvaWQgMD09PWU/ZCh5dChcImNsb3NlXCIpKTpydChlKT9kKG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2xvc2UgYW4gYWxyZWFkeS1jbG9zaW5nIHN0cmVhbVwiKSk6S2UodGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSl9cmVsZWFzZUxvY2soKXtpZighYXQodGhpcykpdGhyb3cgbXQoXCJyZWxlYXNlTG9ja1wiKTt2b2lkIDAhPT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtJiZmdW5jdGlvbihlKXtjb25zdCB0PWUuX293bmVyV3JpdGFibGVTdHJlYW0scj1uZXcgVHlwZUVycm9yKFwiV3JpdGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3NcIik7aXQoZSxyKSxmdW5jdGlvbihlLHQpe1wicGVuZGluZ1wiPT09ZS5fY2xvc2VkUHJvbWlzZVN0YXRlP1N0KGUsdCk6ZnVuY3Rpb24oZSx0KXt3dChlLHQpfShlLHQpfShlLHIpLHQuX3dyaXRlcj12b2lkIDAsZS5fb3duZXJXcml0YWJsZVN0cmVhbT12b2lkIDB9KHRoaXMpfXdyaXRlKGUpe3JldHVybiBhdCh0aGlzKT92b2lkIDA9PT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtP2QoeXQoXCJ3cml0ZSB0b1wiKSk6ZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuX293bmVyV3JpdGFibGVTdHJlYW0sbz1yLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIsbj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZS5fc3RyYXRlZ3lTaXplQWxnb3JpdGhtKHQpfWNhdGNoKHQpe3JldHVybiBmdChlLHQpLDF9fShvLHQpO2lmKHIhPT1lLl9vd25lcldyaXRhYmxlU3RyZWFtKXJldHVybiBkKHl0KFwid3JpdGUgdG9cIikpO2NvbnN0IGE9ci5fc3RhdGU7aWYoXCJlcnJvcmVkXCI9PT1hKXJldHVybiBkKHIuX3N0b3JlZEVycm9yKTtpZihydChyKXx8XCJjbG9zZWRcIj09PWEpcmV0dXJuIGQobmV3IFR5cGVFcnJvcihcIlRoZSBzdHJlYW0gaXMgY2xvc2luZyBvciBjbG9zZWQgYW5kIGNhbm5vdCBiZSB3cml0dGVuIHRvXCIpKTtpZihcImVycm9yaW5nXCI9PT1hKXJldHVybiBkKHIuX3N0b3JlZEVycm9yKTtjb25zdCBpPWZ1bmN0aW9uKGUpe3JldHVybiB1KCgodCxyKT0+e2NvbnN0IG89e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl93cml0ZVJlcXVlc3RzLnB1c2gobyl9KSl9KHIpO3JldHVybiBmdW5jdGlvbihlLHQscil7dHJ5e3VlKGUsdCxyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBmdChlLHQpfWNvbnN0IG89ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2lmKCFydChvKSYmXCJ3cml0YWJsZVwiPT09by5fc3RhdGUpe250KG8sYnQoZSkpfWR0KGUpfShvLHQsbiksaX0odGhpcyxlKTpkKG10KFwid3JpdGVcIikpfX1mdW5jdGlvbiBhdChlKXtyZXR1cm4hIXIoZSkmJighIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiX293bmVyV3JpdGFibGVTdHJlYW1cIikmJmUgaW5zdGFuY2VvZiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIpfWZ1bmN0aW9uIGl0KGUsdCl7XCJwZW5kaW5nXCI9PT1lLl9yZWFkeVByb21pc2VTdGF0ZT9DdChlLHQpOmZ1bmN0aW9uKGUsdCl7VHQoZSx0KX0oZSx0KX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLHthYm9ydDp7ZW51bWVyYWJsZTohMH0sY2xvc2U6e2VudW1lcmFibGU6ITB9LHJlbGVhc2VMb2NrOntlbnVtZXJhYmxlOiEwfSx3cml0ZTp7ZW51bWVyYWJsZTohMH0sY2xvc2VkOntlbnVtZXJhYmxlOiEwfSxkZXNpcmVkU2l6ZTp7ZW51bWVyYWJsZTohMH0scmVhZHk6e2VudW1lcmFibGU6ITB9fSksbihXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLmFib3J0LFwiYWJvcnRcIiksbihXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLmNsb3NlLFwiY2xvc2VcIiksbihXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLnJlbGVhc2VMb2NrLFwicmVsZWFzZUxvY2tcIiksbihXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLndyaXRlLFwid3JpdGVcIiksXCJzeW1ib2xcIj09dHlwZW9mIGUudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyXCIsY29uZmlndXJhYmxlOiEwfSk7Y29uc3QgbHQ9e307Y2xhc3MgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcntjb25zdHJ1Y3Rvcigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpfWdldCBhYm9ydFJlYXNvbigpe2lmKCFzdCh0aGlzKSl0aHJvdyBwdChcImFib3J0UmVhc29uXCIpO3JldHVybiB0aGlzLl9hYm9ydFJlYXNvbn1nZXQgc2lnbmFsKCl7aWYoIXN0KHRoaXMpKXRocm93IHB0KFwic2lnbmFsXCIpO2lmKHZvaWQgMD09PXRoaXMuX2Fib3J0Q29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuc2lnbmFsIGlzIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuIHRoaXMuX2Fib3J0Q29udHJvbGxlci5zaWduYWx9ZXJyb3IoZSl7aWYoIXN0KHRoaXMpKXRocm93IHB0KFwiZXJyb3JcIik7XCJ3cml0YWJsZVwiPT09dGhpcy5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtLl9zdGF0ZSYmaHQodGhpcyxlKX1bdl0oZSl7Y29uc3QgdD10aGlzLl9hYm9ydEFsZ29yaXRobShlKTtyZXR1cm4gdXQodGhpcyksdH1bUl0oKXtjZSh0aGlzKX19ZnVuY3Rpb24gc3QoZSl7cmV0dXJuISFyKGUpJiYoISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcIl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW1cIikmJmUgaW5zdGFuY2VvZiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKX1mdW5jdGlvbiB1dChlKXtlLl93cml0ZUFsZ29yaXRobT12b2lkIDAsZS5fY2xvc2VBbGdvcml0aG09dm9pZCAwLGUuX2Fib3J0QWxnb3JpdGhtPXZvaWQgMCxlLl9zdHJhdGVneVNpemVBbGdvcml0aG09dm9pZCAwfWZ1bmN0aW9uIGN0KGUpe3JldHVybiBlLl9zdHJhdGVneUhXTS1lLl9xdWV1ZVRvdGFsU2l6ZX1mdW5jdGlvbiBkdChlKXtjb25zdCB0PWUuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtpZighZS5fc3RhcnRlZClyZXR1cm47aWYodm9pZCAwIT09dC5faW5GbGlnaHRXcml0ZVJlcXVlc3QpcmV0dXJuO2lmKFwiZXJyb3JpbmdcIj09PXQuX3N0YXRlKXJldHVybiB2b2lkIHR0KHQpO2lmKDA9PT1lLl9xdWV1ZS5sZW5ndGgpcmV0dXJuO2NvbnN0IHI9ZS5fcXVldWUucGVlaygpLnZhbHVlO3I9PT1sdD9mdW5jdGlvbihlKXtjb25zdCB0PWUuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTsoZnVuY3Rpb24oZSl7ZS5faW5GbGlnaHRDbG9zZVJlcXVlc3Q9ZS5fY2xvc2VSZXF1ZXN0LGUuX2Nsb3NlUmVxdWVzdD12b2lkIDB9KSh0KSxzZShlKTtjb25zdCByPWUuX2Nsb3NlQWxnb3JpdGhtKCk7dXQoZSksYihyLCgoKT0+KGZ1bmN0aW9uKGUpe2UuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0Ll9yZXNvbHZlKHZvaWQgMCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3Q9dm9pZCAwLFwiZXJyb3JpbmdcIj09PWUuX3N0YXRlJiYoZS5fc3RvcmVkRXJyb3I9dm9pZCAwLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QmJihlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCksZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDApKSxlLl9zdGF0ZT1cImNsb3NlZFwiO2NvbnN0IHQ9ZS5fd3JpdGVyO3ZvaWQgMCE9PXQmJnZ0KHQpfSh0KSxudWxsKSksKGU9PihmdW5jdGlvbihlLHQpe2UuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0Ll9yZWplY3QodCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3Q9dm9pZCAwLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QmJihlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9yZWplY3QodCksZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDApLFplKGUsdCl9KHQsZSksbnVsbCkpKX0oZSk6ZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTshZnVuY3Rpb24oZSl7ZS5faW5GbGlnaHRXcml0ZVJlcXVlc3Q9ZS5fd3JpdGVSZXF1ZXN0cy5zaGlmdCgpfShyKTtiKGUuX3dyaXRlQWxnb3JpdGhtKHQpLCgoKT0+eyFmdW5jdGlvbihlKXtlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVzb2x2ZSh2b2lkIDApLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMH0ocik7Y29uc3QgdD1yLl9zdGF0ZTtpZihzZShlKSwhcnQocikmJlwid3JpdGFibGVcIj09PXQpe2NvbnN0IHQ9YnQoZSk7bnQocix0KX1yZXR1cm4gZHQoZSksbnVsbH0pLCh0PT4oXCJ3cml0YWJsZVwiPT09ci5fc3RhdGUmJnV0KGUpLGZ1bmN0aW9uKGUsdCl7ZS5faW5GbGlnaHRXcml0ZVJlcXVlc3QuX3JlamVjdCh0KSxlLl9pbkZsaWdodFdyaXRlUmVxdWVzdD12b2lkIDAsWmUoZSx0KX0ocix0KSxudWxsKSkpfShlLHIpfWZ1bmN0aW9uIGZ0KGUsdCl7XCJ3cml0YWJsZVwiPT09ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtLl9zdGF0ZSYmaHQoZSx0KX1mdW5jdGlvbiBidChlKXtyZXR1cm4gY3QoZSk8PTB9ZnVuY3Rpb24gaHQoZSx0KXtjb25zdCByPWUuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTt1dChlKSxldChyLHQpfWZ1bmN0aW9uIF90KGUpe3JldHVybiBuZXcgVHlwZUVycm9yKGBXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuJHtlfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgV3JpdGFibGVTdHJlYW1gKX1mdW5jdGlvbiBwdChlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuJHtlfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcmApfWZ1bmN0aW9uIG10KGUpe3JldHVybiBuZXcgVHlwZUVycm9yKGBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIucHJvdG90eXBlLiR7ZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcmApfWZ1bmN0aW9uIHl0KGUpe3JldHVybiBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IFwiK2UrXCIgYSBzdHJlYW0gdXNpbmcgYSByZWxlYXNlZCB3cml0ZXJcIil9ZnVuY3Rpb24gZ3QoZSl7ZS5fY2xvc2VkUHJvbWlzZT11KCgodCxyKT0+e2UuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT10LGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXIsZS5fY2xvc2VkUHJvbWlzZVN0YXRlPVwicGVuZGluZ1wifSkpfWZ1bmN0aW9uIHd0KGUsdCl7Z3QoZSksU3QoZSx0KX1mdW5jdGlvbiBTdChlLHQpe3ZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0JiYobShlLl9jbG9zZWRQcm9taXNlKSxlLl9jbG9zZWRQcm9taXNlX3JlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlU3RhdGU9XCJyZWplY3RlZFwiKX1mdW5jdGlvbiB2dChlKXt2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUmJihlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUodm9pZCAwKSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlU3RhdGU9XCJyZXNvbHZlZFwiKX1mdW5jdGlvbiBSdChlKXtlLl9yZWFkeVByb21pc2U9dSgoKHQscik9PntlLl9yZWFkeVByb21pc2VfcmVzb2x2ZT10LGUuX3JlYWR5UHJvbWlzZV9yZWplY3Q9cn0pKSxlLl9yZWFkeVByb21pc2VTdGF0ZT1cInBlbmRpbmdcIn1mdW5jdGlvbiBUdChlLHQpe1J0KGUpLEN0KGUsdCl9ZnVuY3Rpb24gcXQoZSl7UnQoZSksRXQoZSl9ZnVuY3Rpb24gQ3QoZSx0KXt2b2lkIDAhPT1lLl9yZWFkeVByb21pc2VfcmVqZWN0JiYobShlLl9yZWFkeVByb21pc2UpLGUuX3JlYWR5UHJvbWlzZV9yZWplY3QodCksZS5fcmVhZHlQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX3JlYWR5UHJvbWlzZV9yZWplY3Q9dm9pZCAwLGUuX3JlYWR5UHJvbWlzZVN0YXRlPVwicmVqZWN0ZWRcIil9ZnVuY3Rpb24gRXQoZSl7dm9pZCAwIT09ZS5fcmVhZHlQcm9taXNlX3Jlc29sdmUmJihlLl9yZWFkeVByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT1cImZ1bGZpbGxlZFwiKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSx7YWJvcnRSZWFzb246e2VudW1lcmFibGU6ITB9LHNpZ25hbDp7ZW51bWVyYWJsZTohMH0sZXJyb3I6e2VudW1lcmFibGU6ITB9fSksXCJzeW1ib2xcIj09dHlwZW9mIGUudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSxlLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJcIixjb25maWd1cmFibGU6ITB9KTtjb25zdCBQdD1cInVuZGVmaW5lZFwiIT10eXBlb2YgRE9NRXhjZXB0aW9uP0RPTUV4Y2VwdGlvbjp2b2lkIDA7Y29uc3QgV3Q9ZnVuY3Rpb24oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmXCJvYmplY3RcIiE9dHlwZW9mIGUpcmV0dXJuITE7dHJ5e3JldHVybiBuZXcgZSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KFB0KT9QdDpmdW5jdGlvbigpe2NvbnN0IGU9ZnVuY3Rpb24oZSx0KXt0aGlzLm1lc3NhZ2U9ZXx8XCJcIix0aGlzLm5hbWU9dHx8XCJFcnJvclwiLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpfTtyZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImNvbnN0cnVjdG9yXCIse3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oKTtmdW5jdGlvbiBrdChlLHQscixvLG4sYSl7Y29uc3QgaT1lLmdldFJlYWRlcigpLGw9dC5nZXRXcml0ZXIoKTtWdChlKSYmKGUuX2Rpc3R1cmJlZD0hMCk7bGV0IHMsXyxnLHc9ITEsUz0hMSx2PVwicmVhZGFibGVcIixSPVwid3JpdGFibGVcIixUPSExLHE9ITE7Y29uc3QgQz11KChlPT57Zz1lfSkpO2xldCBFPVByb21pc2UucmVzb2x2ZSh2b2lkIDApO3JldHVybiB1KCgoUCxXKT0+e2xldCBrO2Z1bmN0aW9uIE8oKXtpZih3KXJldHVybjtjb25zdCBlPXUoKChlLHQpPT57IWZ1bmN0aW9uIHIobyl7bz9lKCk6ZihmdW5jdGlvbigpe2lmKHcpcmV0dXJuIGMoITApO3JldHVybiBmKGwucmVhZHksKCgpPT5mKGkucmVhZCgpLChlPT4hIWUuZG9uZXx8KEU9bC53cml0ZShlLnZhbHVlKSxtKEUpLCExKSkpKSl9KCkscix0KX0oITEpfSkpO20oZSl9ZnVuY3Rpb24gQigpe3JldHVybiB2PVwiY2xvc2VkXCIscj9MKCk6eigoKCk9PihHZSh0KSYmKFQ9cnQodCksUj10Ll9zdGF0ZSksVHx8XCJjbG9zZWRcIj09PVI/Yyh2b2lkIDApOlwiZXJyb3JpbmdcIj09PVJ8fFwiZXJyb3JlZFwiPT09Uj9kKF8pOihUPSEwLGwuY2xvc2UoKSkpKSwhMSx2b2lkIDApLG51bGx9ZnVuY3Rpb24gQShlKXtyZXR1cm4gd3x8KHY9XCJlcnJvcmVkXCIscz1lLG8/TCghMCxlKTp6KCgoKT0+bC5hYm9ydChlKSksITAsZSkpLG51bGx9ZnVuY3Rpb24gaihlKXtyZXR1cm4gU3x8KFI9XCJlcnJvcmVkXCIsXz1lLG4/TCghMCxlKTp6KCgoKT0+aS5jYW5jZWwoZSkpLCEwLGUpKSxudWxsfWlmKHZvaWQgMCE9PWEmJihrPSgpPT57Y29uc3QgZT12b2lkIDAhPT1hLnJlYXNvbj9hLnJlYXNvbjpuZXcgV3QoXCJBYm9ydGVkXCIsXCJBYm9ydEVycm9yXCIpLHQ9W107b3x8dC5wdXNoKCgoKT0+XCJ3cml0YWJsZVwiPT09Uj9sLmFib3J0KGUpOmModm9pZCAwKSkpLG58fHQucHVzaCgoKCk9PlwicmVhZGFibGVcIj09PXY/aS5jYW5jZWwoZSk6Yyh2b2lkIDApKSkseigoKCk9PlByb21pc2UuYWxsKHQubWFwKChlPT5lKCkpKSkpLCEwLGUpfSxhLmFib3J0ZWQ/aygpOmEuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsaykpLFZ0KGUpJiYodj1lLl9zdGF0ZSxzPWUuX3N0b3JlZEVycm9yKSxHZSh0KSYmKFI9dC5fc3RhdGUsXz10Ll9zdG9yZWRFcnJvcixUPXJ0KHQpKSxWdChlKSYmR2UodCkmJihxPSEwLGcoKSksXCJlcnJvcmVkXCI9PT12KUEocyk7ZWxzZSBpZihcImVycm9yaW5nXCI9PT1SfHxcImVycm9yZWRcIj09PVIpaihfKTtlbHNlIGlmKFwiY2xvc2VkXCI9PT12KUIoKTtlbHNlIGlmKFR8fFwiY2xvc2VkXCI9PT1SKXtjb25zdCBlPW5ldyBUeXBlRXJyb3IoXCJ0aGUgZGVzdGluYXRpb24gd3JpdGFibGUgc3RyZWFtIGNsb3NlZCBiZWZvcmUgYWxsIGRhdGEgY291bGQgYmUgcGlwZWQgdG8gaXRcIik7bj9MKCEwLGUpOnooKCgpPT5pLmNhbmNlbChlKSksITAsZSl9ZnVuY3Rpb24geihlLHQscil7ZnVuY3Rpb24gbygpe3JldHVyblwid3JpdGFibGVcIiE9PVJ8fFQ/bigpOmgoZnVuY3Rpb24oKXtsZXQgZTtyZXR1cm4gYyhmdW5jdGlvbiB0KCl7aWYoZSE9PUUpcmV0dXJuIGU9RSxwKEUsdCx0KX0oKSl9KCksbiksbnVsbH1mdW5jdGlvbiBuKCl7cmV0dXJuIGU/YihlKCksKCgpPT5GKHQscikpLChlPT5GKCEwLGUpKSk6Rih0LHIpLG51bGx9d3x8KHc9ITAscT9vKCk6aChDLG8pKX1mdW5jdGlvbiBMKGUsdCl7eih2b2lkIDAsZSx0KX1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuIFM9ITAsbC5yZWxlYXNlTG9jaygpLGkucmVsZWFzZUxvY2soKSx2b2lkIDAhPT1hJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGspLGU/Vyh0KTpQKHZvaWQgMCksbnVsbH13fHwoYihpLmNsb3NlZCxCLEEpLGIobC5jbG9zZWQsKGZ1bmN0aW9uKCl7cmV0dXJuIFN8fChSPVwiY2xvc2VkXCIpLG51bGx9KSxqKSkscT9PKCk6eSgoKCk9PntxPSEwLGcoKSxPKCl9KSl9KSl9ZnVuY3Rpb24gT3QoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBlLmdldFJlYWRlcih7bW9kZTpcImJ5b2JcIn0pLnJlbGVhc2VMb2NrKCksITB9Y2F0Y2goZSl7cmV0dXJuITF9fShlKT9mdW5jdGlvbihlKXtsZXQgdCxyLG8sbixhLGk9ZS5nZXRSZWFkZXIoKSxsPSExLHM9ITEsZD0hMSxmPSExLGg9ITEscD0hMTtjb25zdCBtPXUoKGU9PnthPWV9KSk7ZnVuY3Rpb24geShlKXtfKGUuY2xvc2VkLCh0PT4oZSE9PWl8fChvLmVycm9yKHQpLG4uZXJyb3IodCksaCYmcHx8YSh2b2lkIDApKSxudWxsKSkpfWZ1bmN0aW9uIGcoKXtsJiYoaS5yZWxlYXNlTG9jaygpLGk9ZS5nZXRSZWFkZXIoKSx5KGkpLGw9ITEpLGIoaS5yZWFkKCksKGU9Pnt2YXIgdCxyO2lmKGQ9ITEsZj0hMSxlLmRvbmUpcmV0dXJuIGh8fG8uY2xvc2UoKSxwfHxuLmNsb3NlKCksbnVsbD09PSh0PW8uYnlvYlJlcXVlc3QpfHx2b2lkIDA9PT10fHx0LnJlc3BvbmQoMCksbnVsbD09PShyPW4uYnlvYlJlcXVlc3QpfHx2b2lkIDA9PT1yfHxyLnJlc3BvbmQoMCksaCYmcHx8YSh2b2lkIDApLG51bGw7Y29uc3QgbD1lLnZhbHVlLHU9bDtsZXQgYz1sO2lmKCFoJiYhcCl0cnl7Yz1sZShsKX1jYXRjaChlKXtyZXR1cm4gby5lcnJvcihlKSxuLmVycm9yKGUpLGEoaS5jYW5jZWwoZSkpLG51bGx9cmV0dXJuIGh8fG8uZW5xdWV1ZSh1KSxwfHxuLmVucXVldWUoYykscz0hMSxkP1MoKTpmJiZ2KCksbnVsbH0pLCgoKT0+KHM9ITEsbnVsbCkpKX1mdW5jdGlvbiB3KHQscil7bHx8KGkucmVsZWFzZUxvY2soKSxpPWUuZ2V0UmVhZGVyKHttb2RlOlwiYnlvYlwifSkseShpKSxsPSEwKTtjb25zdCB1PXI/bjpvLGM9cj9vOm47YihpLnJlYWQodCksKGU9Pnt2YXIgdDtkPSExLGY9ITE7Y29uc3Qgbz1yP3A6aCxuPXI/aDpwO2lmKGUuZG9uZSl7b3x8dS5jbG9zZSgpLG58fGMuY2xvc2UoKTtjb25zdCByPWUudmFsdWU7cmV0dXJuIHZvaWQgMCE9PXImJihvfHx1LmJ5b2JSZXF1ZXN0LnJlc3BvbmRXaXRoTmV3VmlldyhyKSxufHxudWxsPT09KHQ9Yy5ieW9iUmVxdWVzdCl8fHZvaWQgMD09PXR8fHQucmVzcG9uZCgwKSksbyYmbnx8YSh2b2lkIDApLG51bGx9Y29uc3QgbD1lLnZhbHVlO2lmKG4pb3x8dS5ieW9iUmVxdWVzdC5yZXNwb25kV2l0aE5ld1ZpZXcobCk7ZWxzZXtsZXQgZTt0cnl7ZT1sZShsKX1jYXRjaChlKXtyZXR1cm4gdS5lcnJvcihlKSxjLmVycm9yKGUpLGEoaS5jYW5jZWwoZSkpLG51bGx9b3x8dS5ieW9iUmVxdWVzdC5yZXNwb25kV2l0aE5ld1ZpZXcobCksYy5lbnF1ZXVlKGUpfXJldHVybiBzPSExLGQ/UygpOmYmJnYoKSxudWxsfSksKCgpPT4ocz0hMSxudWxsKSkpfWZ1bmN0aW9uIFMoKXtpZihzKXJldHVybiBkPSEwLGModm9pZCAwKTtzPSEwO2NvbnN0IGU9by5ieW9iUmVxdWVzdDtyZXR1cm4gbnVsbD09PWU/ZygpOncoZS52aWV3LCExKSxjKHZvaWQgMCl9ZnVuY3Rpb24gdigpe2lmKHMpcmV0dXJuIGY9ITAsYyh2b2lkIDApO3M9ITA7Y29uc3QgZT1uLmJ5b2JSZXF1ZXN0O3JldHVybiBudWxsPT09ZT9nKCk6dyhlLnZpZXcsITApLGModm9pZCAwKX1mdW5jdGlvbiBSKGUpe2lmKGg9ITAsdD1lLHApe2NvbnN0IGU9W3Qscl0sbz1pLmNhbmNlbChlKTthKG8pfXJldHVybiBtfWZ1bmN0aW9uIFQoZSl7aWYocD0hMCxyPWUsaCl7Y29uc3QgZT1bdCxyXSxvPWkuY2FuY2VsKGUpO2Eobyl9cmV0dXJuIG19Y29uc3QgcT1uZXcgUmVhZGFibGVTdHJlYW0oe3R5cGU6XCJieXRlc1wiLHN0YXJ0KGUpe289ZX0scHVsbDpTLGNhbmNlbDpSfSksQz1uZXcgUmVhZGFibGVTdHJlYW0oe3R5cGU6XCJieXRlc1wiLHN0YXJ0KGUpe249ZX0scHVsbDp2LGNhbmNlbDpUfSk7cmV0dXJuIHkoaSksW3EsQ119KGUpOmZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1lLmdldFJlYWRlcigpO2xldCBvLG4sYSxpLGwscz0hMSxkPSExLGY9ITEsaD0hMTtjb25zdCBwPXUoKGU9PntsPWV9KSk7ZnVuY3Rpb24gbSgpe3JldHVybiBzPyhkPSEwLGModm9pZCAwKSk6KHM9ITAsYihyLnJlYWQoKSwoZT0+e2lmKGQ9ITEsZS5kb25lKXJldHVybiBmfHxhLmNsb3NlKCksaHx8aS5jbG9zZSgpLGYmJmh8fGwodm9pZCAwKSxudWxsO2NvbnN0IHQ9ZS52YWx1ZSxyPXQsbz10O3JldHVybiBmfHxhLmVucXVldWUociksaHx8aS5lbnF1ZXVlKG8pLHM9ITEsZCYmbSgpLG51bGx9KSwoKCk9PihzPSExLG51bGwpKSksYyh2b2lkIDApKX1mdW5jdGlvbiB5KGUpe2lmKGY9ITAsbz1lLGgpe2NvbnN0IGU9W28sbl0sdD1yLmNhbmNlbChlKTtsKHQpfXJldHVybiBwfWZ1bmN0aW9uIGcoZSl7aWYoaD0hMCxuPWUsZil7Y29uc3QgZT1bbyxuXSx0PXIuY2FuY2VsKGUpO2wodCl9cmV0dXJuIHB9Y29uc3Qgdz1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KGUpe2E9ZX0scHVsbDptLGNhbmNlbDp5fSksUz1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KGUpe2k9ZX0scHVsbDptLGNhbmNlbDpnfSk7cmV0dXJuIF8oci5jbG9zZWQsKGU9PihhLmVycm9yKGUpLGkuZXJyb3IoZSksZiYmaHx8bCh2b2lkIDApLG51bGwpKSksW3csU119KGUpfWNsYXNzIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJ7Y29uc3RydWN0b3IoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKX1nZXQgZGVzaXJlZFNpemUoKXtpZighQnQodGhpcykpdGhyb3cgRHQoXCJkZXNpcmVkU2l6ZVwiKTtyZXR1cm4gTHQodGhpcyl9Y2xvc2UoKXtpZighQnQodGhpcykpdGhyb3cgRHQoXCJjbG9zZVwiKTtpZighRnQodGhpcykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBzdHJlYW0gaXMgbm90IGluIGEgc3RhdGUgdGhhdCBwZXJtaXRzIGNsb3NlXCIpOyFmdW5jdGlvbihlKXtpZighRnQoZSkpcmV0dXJuO2NvbnN0IHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2UuX2Nsb3NlUmVxdWVzdGVkPSEwLDA9PT1lLl9xdWV1ZS5sZW5ndGgmJihqdChlKSxYdCh0KSl9KHRoaXMpfWVucXVldWUoZSl7aWYoIUJ0KHRoaXMpKXRocm93IER0KFwiZW5xdWV1ZVwiKTtpZighRnQodGhpcykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBzdHJlYW0gaXMgbm90IGluIGEgc3RhdGUgdGhhdCBwZXJtaXRzIGVucXVldWVcIik7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIUZ0KGUpKXJldHVybjtjb25zdCByPWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZihVdChyKSYmWChyKT4wKUcocix0LCExKTtlbHNle2xldCByO3RyeXtyPWUuX3N0cmF0ZWd5U2l6ZUFsZ29yaXRobSh0KX1jYXRjaCh0KXt0aHJvdyB6dChlLHQpLHR9dHJ5e3VlKGUsdCxyKX1jYXRjaCh0KXt0aHJvdyB6dChlLHQpLHR9fUF0KGUpfSh0aGlzLGUpfWVycm9yKGUpe2lmKCFCdCh0aGlzKSl0aHJvdyBEdChcImVycm9yXCIpO3p0KHRoaXMsZSl9W1RdKGUpe2NlKHRoaXMpO2NvbnN0IHQ9dGhpcy5fY2FuY2VsQWxnb3JpdGhtKGUpO3JldHVybiBqdCh0aGlzKSx0fVtxXShlKXtjb25zdCB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZih0aGlzLl9xdWV1ZS5sZW5ndGg+MCl7Y29uc3Qgcj1zZSh0aGlzKTt0aGlzLl9jbG9zZVJlcXVlc3RlZCYmMD09PXRoaXMuX3F1ZXVlLmxlbmd0aD8oanQodGhpcyksWHQodCkpOkF0KHRoaXMpLGUuX2NodW5rU3RlcHMocil9ZWxzZSBVKHQsZSksQXQodGhpcyl9W0NdKCl7fX1mdW5jdGlvbiBCdChlKXtyZXR1cm4hIXIoZSkmJighIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbVwiKSYmZSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIpfWZ1bmN0aW9uIEF0KGUpe2NvbnN0IHQ9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07aWYoIUZ0KGUpKXJldHVybiExO2lmKCFlLl9zdGFydGVkKXJldHVybiExO2lmKFV0KHQpJiZYKHQpPjApcmV0dXJuITA7aWYoTHQoZSk+MClyZXR1cm4hMDtyZXR1cm4hMX0oZSk7aWYoIXQpcmV0dXJuO2lmKGUuX3B1bGxpbmcpcmV0dXJuIHZvaWQoZS5fcHVsbEFnYWluPSEwKTtlLl9wdWxsaW5nPSEwO2IoZS5fcHVsbEFsZ29yaXRobSgpLCgoKT0+KGUuX3B1bGxpbmc9ITEsZS5fcHVsbEFnYWluJiYoZS5fcHVsbEFnYWluPSExLEF0KGUpKSxudWxsKSksKHQ9Pih6dChlLHQpLG51bGwpKSl9ZnVuY3Rpb24ganQoZSl7ZS5fcHVsbEFsZ29yaXRobT12b2lkIDAsZS5fY2FuY2VsQWxnb3JpdGhtPXZvaWQgMCxlLl9zdHJhdGVneVNpemVBbGdvcml0aG09dm9pZCAwfWZ1bmN0aW9uIHp0KGUsdCl7Y29uc3Qgcj1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XCJyZWFkYWJsZVwiPT09ci5fc3RhdGUmJihjZShlKSxqdChlKSxKdChyLHQpKX1mdW5jdGlvbiBMdChlKXtjb25zdCB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7cmV0dXJuXCJlcnJvcmVkXCI9PT10P251bGw6XCJjbG9zZWRcIj09PXQ/MDplLl9zdHJhdGVneUhXTS1lLl9xdWV1ZVRvdGFsU2l6ZX1mdW5jdGlvbiBGdChlKXtyZXR1cm4hZS5fY2xvc2VSZXF1ZXN0ZWQmJlwicmVhZGFibGVcIj09PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGV9ZnVuY3Rpb24gSXQoZSx0LHIsbyl7Y29uc3Qgbj1PYmplY3QuY3JlYXRlKFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlKTtsZXQgYSxpLGw7YT12b2lkIDAhPT10LnN0YXJ0PygpPT50LnN0YXJ0KG4pOigpPT57fSxpPXZvaWQgMCE9PXQucHVsbD8oKT0+dC5wdWxsKG4pOigpPT5jKHZvaWQgMCksbD12b2lkIDAhPT10LmNhbmNlbD9lPT50LmNhbmNlbChlKTooKT0+Yyh2b2lkIDApLGZ1bmN0aW9uKGUsdCxyLG8sbixhLGkpe3QuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbT1lLHQuX3F1ZXVlPXZvaWQgMCx0Ll9xdWV1ZVRvdGFsU2l6ZT12b2lkIDAsY2UodCksdC5fc3RhcnRlZD0hMSx0Ll9jbG9zZVJlcXVlc3RlZD0hMSx0Ll9wdWxsQWdhaW49ITEsdC5fcHVsbGluZz0hMSx0Ll9zdHJhdGVneVNpemVBbGdvcml0aG09aSx0Ll9zdHJhdGVneUhXTT1hLHQuX3B1bGxBbGdvcml0aG09byx0Ll9jYW5jZWxBbGdvcml0aG09bixlLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9dCxiKGMocigpKSwoKCk9Pih0Ll9zdGFydGVkPSEwLEF0KHQpLG51bGwpKSwoZT0+KHp0KHQsZSksbnVsbCkpKX0oZSxuLGEsaSxsLHIsbyl9ZnVuY3Rpb24gRHQoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLiR7ZX0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJgKX1mdW5jdGlvbiAkdChlLHQscil7cmV0dXJuIEkoZSxyKSxyPT53KGUsdCxbcl0pfWZ1bmN0aW9uIE10KGUsdCxyKXtyZXR1cm4gSShlLHIpLHI9PncoZSx0LFtyXSl9ZnVuY3Rpb24gWXQoZSx0LHIpe3JldHVybiBJKGUscikscj0+ZyhlLHQsW3JdKX1mdW5jdGlvbiBRdChlLHQpe2lmKFwiYnl0ZXNcIiE9PShlPWAke2V9YCkpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0fSAnJHtlfScgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRpb24gdmFsdWUgZm9yIFJlYWRhYmxlU3RyZWFtVHlwZWApO3JldHVybiBlfWZ1bmN0aW9uIE50KGUsdCl7aWYoXCJieW9iXCIhPT0oZT1gJHtlfWApKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gJyR7ZX0nIGlzIG5vdCBhIHZhbGlkIGVudW1lcmF0aW9uIHZhbHVlIGZvciBSZWFkYWJsZVN0cmVhbVJlYWRlck1vZGVgKTtyZXR1cm4gZX1mdW5jdGlvbiBIdChlLHQpe0YoZSx0KTtjb25zdCByPW51bGw9PWU/dm9pZCAwOmUucHJldmVudEFib3J0LG89bnVsbD09ZT92b2lkIDA6ZS5wcmV2ZW50Q2FuY2VsLG49bnVsbD09ZT92b2lkIDA6ZS5wcmV2ZW50Q2xvc2UsYT1udWxsPT1lP3ZvaWQgMDplLnNpZ25hbDtyZXR1cm4gdm9pZCAwIT09YSYmZnVuY3Rpb24oZSx0KXtpZighZnVuY3Rpb24oZSl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiExO3RyeXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUuYWJvcnRlZH1jYXRjaChlKXtyZXR1cm4hMX19KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7dH0gaXMgbm90IGFuIEFib3J0U2lnbmFsLmApfShhLGAke3R9IGhhcyBtZW1iZXIgJ3NpZ25hbCcgdGhhdGApLHtwcmV2ZW50QWJvcnQ6Qm9vbGVhbihyKSxwcmV2ZW50Q2FuY2VsOkJvb2xlYW4obykscHJldmVudENsb3NlOkJvb2xlYW4obiksc2lnbmFsOmF9fWZ1bmN0aW9uIHh0KGUsdCl7RihlLHQpO2NvbnN0IHI9bnVsbD09ZT92b2lkIDA6ZS5yZWFkYWJsZTtNKHIsXCJyZWFkYWJsZVwiLFwiUmVhZGFibGVXcml0YWJsZVBhaXJcIiksZnVuY3Rpb24oZSx0KXtpZighSChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IGlzIG5vdCBhIFJlYWRhYmxlU3RyZWFtLmApfShyLGAke3R9IGhhcyBtZW1iZXIgJ3JlYWRhYmxlJyB0aGF0YCk7Y29uc3Qgbz1udWxsPT1lP3ZvaWQgMDplLndyaXRhYmxlO3JldHVybiBNKG8sXCJ3cml0YWJsZVwiLFwiUmVhZGFibGVXcml0YWJsZVBhaXJcIiksZnVuY3Rpb24oZSx0KXtpZigheChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke3R9IGlzIG5vdCBhIFdyaXRhYmxlU3RyZWFtLmApfShvLGAke3R9IGhhcyBtZW1iZXIgJ3dyaXRhYmxlJyB0aGF0YCkse3JlYWRhYmxlOnIsd3JpdGFibGU6b319T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUse2Nsb3NlOntlbnVtZXJhYmxlOiEwfSxlbnF1ZXVlOntlbnVtZXJhYmxlOiEwfSxlcnJvcjp7ZW51bWVyYWJsZTohMH0sZGVzaXJlZFNpemU6e2VudW1lcmFibGU6ITB9fSksbihSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS5jbG9zZSxcImNsb3NlXCIpLG4oUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuZW5xdWV1ZSxcImVucXVldWVcIiksbihSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS5lcnJvcixcImVycm9yXCIpLFwic3ltYm9sXCI9PXR5cGVvZiBlLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUsZS50b1N0cmluZ1RhZyx7dmFsdWU6XCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyXCIsY29uZmlndXJhYmxlOiEwfSk7Y2xhc3MgUmVhZGFibGVTdHJlYW17Y29uc3RydWN0b3IoZT17fSx0PXt9KXt2b2lkIDA9PT1lP2U9bnVsbDpEKGUsXCJGaXJzdCBwYXJhbWV0ZXJcIik7Y29uc3Qgcj1ZZSh0LFwiU2Vjb25kIHBhcmFtZXRlclwiKSxvPWZ1bmN0aW9uKGUsdCl7RihlLHQpO2NvbnN0IHI9ZSxvPW51bGw9PXI/dm9pZCAwOnIuYXV0b0FsbG9jYXRlQ2h1bmtTaXplLG49bnVsbD09cj92b2lkIDA6ci5jYW5jZWwsYT1udWxsPT1yP3ZvaWQgMDpyLnB1bGwsaT1udWxsPT1yP3ZvaWQgMDpyLnN0YXJ0LGw9bnVsbD09cj92b2lkIDA6ci50eXBlO3JldHVybnthdXRvQWxsb2NhdGVDaHVua1NpemU6dm9pZCAwPT09bz92b2lkIDA6TihvLGAke3R9IGhhcyBtZW1iZXIgJ2F1dG9BbGxvY2F0ZUNodW5rU2l6ZScgdGhhdGApLGNhbmNlbDp2b2lkIDA9PT1uP3ZvaWQgMDokdChuLHIsYCR7dH0gaGFzIG1lbWJlciAnY2FuY2VsJyB0aGF0YCkscHVsbDp2b2lkIDA9PT1hP3ZvaWQgMDpNdChhLHIsYCR7dH0gaGFzIG1lbWJlciAncHVsbCcgdGhhdGApLHN0YXJ0OnZvaWQgMD09PWk/dm9pZCAwOll0KGkscixgJHt0fSBoYXMgbWVtYmVyICdzdGFydCcgdGhhdGApLHR5cGU6dm9pZCAwPT09bD92b2lkIDA6UXQobCxgJHt0fSBoYXMgbWVtYmVyICd0eXBlJyB0aGF0YCl9fShlLFwiRmlyc3QgcGFyYW1ldGVyXCIpO3ZhciBuO2lmKChuPXRoaXMpLl9zdGF0ZT1cInJlYWRhYmxlXCIsbi5fcmVhZGVyPXZvaWQgMCxuLl9zdG9yZWRFcnJvcj12b2lkIDAsbi5fZGlzdHVyYmVkPSExLFwiYnl0ZXNcIj09PW8udHlwZSl7aWYodm9pZCAwIT09ci5zaXplKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHN0cmF0ZWd5IGZvciBhIGJ5dGUgc3RyZWFtIGNhbm5vdCBoYXZlIGEgc2l6ZSBmdW5jdGlvblwiKTtPZSh0aGlzLG8sJGUociwwKSl9ZWxzZXtjb25zdCBlPU1lKHIpO0l0KHRoaXMsbywkZShyLDEpLGUpfX1nZXQgbG9ja2VkKCl7aWYoIVZ0KHRoaXMpKXRocm93IEt0KFwibG9ja2VkXCIpO3JldHVybiBVdCh0aGlzKX1jYW5jZWwoZSl7cmV0dXJuIFZ0KHRoaXMpP1V0KHRoaXMpP2QobmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYW5jZWwgYSBzdHJlYW0gdGhhdCBhbHJlYWR5IGhhcyBhIHJlYWRlclwiKSk6R3QodGhpcyxlKTpkKEt0KFwiY2FuY2VsXCIpKX1nZXRSZWFkZXIoZSl7aWYoIVZ0KHRoaXMpKXRocm93IEt0KFwiZ2V0UmVhZGVyXCIpO3JldHVybiB2b2lkIDA9PT1mdW5jdGlvbihlLHQpe0YoZSx0KTtjb25zdCByPW51bGw9PWU/dm9pZCAwOmUubW9kZTtyZXR1cm57bW9kZTp2b2lkIDA9PT1yP3ZvaWQgMDpOdChyLGAke3R9IGhhcyBtZW1iZXIgJ21vZGUnIHRoYXRgKX19KGUsXCJGaXJzdCBwYXJhbWV0ZXJcIikubW9kZT9uZXcgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHRoaXMpOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKGUpfSh0aGlzKX1waXBlVGhyb3VnaChlLHQ9e30pe2lmKCFIKHRoaXMpKXRocm93IEt0KFwicGlwZVRocm91Z2hcIik7JChlLDEsXCJwaXBlVGhyb3VnaFwiKTtjb25zdCByPXh0KGUsXCJGaXJzdCBwYXJhbWV0ZXJcIiksbz1IdCh0LFwiU2Vjb25kIHBhcmFtZXRlclwiKTtpZih0aGlzLmxvY2tlZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnBpcGVUaHJvdWdoIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFJlYWRhYmxlU3RyZWFtXCIpO2lmKHIud3JpdGFibGUubG9ja2VkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRocm91Z2ggY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgV3JpdGFibGVTdHJlYW1cIik7cmV0dXJuIG0oa3QodGhpcyxyLndyaXRhYmxlLG8ucHJldmVudENsb3NlLG8ucHJldmVudEFib3J0LG8ucHJldmVudENhbmNlbCxvLnNpZ25hbCkpLHIucmVhZGFibGV9cGlwZVRvKGUsdD17fSl7aWYoIUgodGhpcykpcmV0dXJuIGQoS3QoXCJwaXBlVG9cIikpO2lmKHZvaWQgMD09PWUpcmV0dXJuIGQoXCJQYXJhbWV0ZXIgMSBpcyByZXF1aXJlZCBpbiAncGlwZVRvJy5cIik7aWYoIXgoZSkpcmV0dXJuIGQobmV3IFR5cGVFcnJvcihcIlJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8ncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV3JpdGFibGVTdHJlYW1cIikpO2xldCByO3RyeXtyPUh0KHQsXCJTZWNvbmQgcGFyYW1ldGVyXCIpfWNhdGNoKGUpe3JldHVybiBkKGUpfXJldHVybiB0aGlzLmxvY2tlZD9kKG5ldyBUeXBlRXJyb3IoXCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFJlYWRhYmxlU3RyZWFtXCIpKTplLmxvY2tlZD9kKG5ldyBUeXBlRXJyb3IoXCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFdyaXRhYmxlU3RyZWFtXCIpKTprdCh0aGlzLGUsci5wcmV2ZW50Q2xvc2Usci5wcmV2ZW50QWJvcnQsci5wcmV2ZW50Q2FuY2VsLHIuc2lnbmFsKX10ZWUoKXtpZighSCh0aGlzKSl0aHJvdyBLdChcInRlZVwiKTtpZih0aGlzLmxvY2tlZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHRlZSBhIHN0cmVhbSB0aGF0IGFscmVhZHkgaGFzIGEgcmVhZGVyXCIpO3JldHVybiBPdCh0aGlzKX12YWx1ZXMoZSl7aWYoIUgodGhpcykpdGhyb3cgS3QoXCJ2YWx1ZXNcIik7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1lLmdldFJlYWRlcigpLG89bmV3IHRlKHIsdCksbj1PYmplY3QuY3JlYXRlKHJlKTtyZXR1cm4gbi5fYXN5bmNJdGVyYXRvckltcGw9byxufSh0aGlzLGZ1bmN0aW9uKGUsdCl7RihlLHQpO2NvbnN0IHI9bnVsbD09ZT92b2lkIDA6ZS5wcmV2ZW50Q2FuY2VsO3JldHVybntwcmV2ZW50Q2FuY2VsOkJvb2xlYW4ocil9fShlLFwiRmlyc3QgcGFyYW1ldGVyXCIpLnByZXZlbnRDYW5jZWwpfX1mdW5jdGlvbiBWdChlKXtyZXR1cm4hIXIoZSkmJighIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlclwiKSYmZSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gdm9pZCAwIT09ZS5fcmVhZGVyfWZ1bmN0aW9uIEd0KGUscil7aWYoZS5fZGlzdHVyYmVkPSEwLFwiY2xvc2VkXCI9PT1lLl9zdGF0ZSlyZXR1cm4gYyh2b2lkIDApO2lmKFwiZXJyb3JlZFwiPT09ZS5fc3RhdGUpcmV0dXJuIGQoZS5fc3RvcmVkRXJyb3IpO1h0KGUpO2NvbnN0IG89ZS5fcmVhZGVyO2lmKHZvaWQgMCE9PW8mJkZlKG8pKXtjb25zdCBlPW8uX3JlYWRJbnRvUmVxdWVzdHM7by5fcmVhZEludG9SZXF1ZXN0cz1uZXcgUyxlLmZvckVhY2goKGU9PntlLl9jbG9zZVN0ZXBzKHZvaWQgMCl9KSl9cmV0dXJuIHAoZS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyW1RdKHIpLHQpfWZ1bmN0aW9uIFh0KGUpe2UuX3N0YXRlPVwiY2xvc2VkXCI7Y29uc3QgdD1lLl9yZWFkZXI7aWYodm9pZCAwIT09dCYmKGoodCksSyh0KSkpe2NvbnN0IGU9dC5fcmVhZFJlcXVlc3RzO3QuX3JlYWRSZXF1ZXN0cz1uZXcgUyxlLmZvckVhY2goKGU9PntlLl9jbG9zZVN0ZXBzKCl9KSl9fWZ1bmN0aW9uIEp0KGUsdCl7ZS5fc3RhdGU9XCJlcnJvcmVkXCIsZS5fc3RvcmVkRXJyb3I9dDtjb25zdCByPWUuX3JlYWRlcjt2b2lkIDAhPT1yJiYoQShyLHQpLEsocik/WihyLHQpOkllKHIsdCkpfWZ1bmN0aW9uIEt0KGUpe3JldHVybiBuZXcgVHlwZUVycm9yKGBSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUuJHtlfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1gKX1mdW5jdGlvbiBadChlLHQpe0YoZSx0KTtjb25zdCByPW51bGw9PWU/dm9pZCAwOmUuaGlnaFdhdGVyTWFyaztyZXR1cm4gTShyLFwiaGlnaFdhdGVyTWFya1wiLFwiUXVldWluZ1N0cmF0ZWd5SW5pdFwiKSx7aGlnaFdhdGVyTWFyazpZKHIpfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUse2NhbmNlbDp7ZW51bWVyYWJsZTohMH0sZ2V0UmVhZGVyOntlbnVtZXJhYmxlOiEwfSxwaXBlVGhyb3VnaDp7ZW51bWVyYWJsZTohMH0scGlwZVRvOntlbnVtZXJhYmxlOiEwfSx0ZWU6e2VudW1lcmFibGU6ITB9LHZhbHVlczp7ZW51bWVyYWJsZTohMH0sbG9ja2VkOntlbnVtZXJhYmxlOiEwfX0pLG4oUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLmNhbmNlbCxcImNhbmNlbFwiKSxuKFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5nZXRSZWFkZXIsXCJnZXRSZWFkZXJcIiksbihSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRocm91Z2gsXCJwaXBlVGhyb3VnaFwiKSxuKFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8sXCJwaXBlVG9cIiksbihSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUudGVlLFwidGVlXCIpLG4oUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnZhbHVlcyxcInZhbHVlc1wiKSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZSxlLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIlJlYWRhYmxlU3RyZWFtXCIsY29uZmlndXJhYmxlOiEwfSksXCJzeW1ib2xcIj09dHlwZW9mIGUuYXN5bmNJdGVyYXRvciYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZSxlLmFzeW5jSXRlcmF0b3Ise3ZhbHVlOlJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS52YWx1ZXMsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7Y29uc3QgZXI9ZT0+ZS5ieXRlTGVuZ3RoO24oZXIsXCJzaXplXCIpO2NsYXNzIEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3l7Y29uc3RydWN0b3IoZSl7JChlLDEsXCJCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5XCIpLGU9WnQoZSxcIkZpcnN0IHBhcmFtZXRlclwiKSx0aGlzLl9ieXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5SGlnaFdhdGVyTWFyaz1lLmhpZ2hXYXRlck1hcmt9Z2V0IGhpZ2hXYXRlck1hcmsoKXtpZighcnIodGhpcykpdGhyb3cgdHIoXCJoaWdoV2F0ZXJNYXJrXCIpO3JldHVybiB0aGlzLl9ieXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5SGlnaFdhdGVyTWFya31nZXQgc2l6ZSgpe2lmKCFycih0aGlzKSl0aHJvdyB0cihcInNpemVcIik7cmV0dXJuIGVyfX1mdW5jdGlvbiB0cihlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneS5wcm90b3R5cGUuJHtlfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneWApfWZ1bmN0aW9uIHJyKGUpe3JldHVybiEhcihlKSYmKCEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfYnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUhpZ2hXYXRlck1hcmtcIikmJmUgaW5zdGFuY2VvZiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5KX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5LnByb3RvdHlwZSx7aGlnaFdhdGVyTWFyazp7ZW51bWVyYWJsZTohMH0sc2l6ZTp7ZW51bWVyYWJsZTohMH19KSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kucHJvdG90eXBlLGUudG9TdHJpbmdUYWcse3ZhbHVlOlwiQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneVwiLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IG9yPSgpPT4xO24ob3IsXCJzaXplXCIpO2NsYXNzIENvdW50UXVldWluZ1N0cmF0ZWd5e2NvbnN0cnVjdG9yKGUpeyQoZSwxLFwiQ291bnRRdWV1aW5nU3RyYXRlZ3lcIiksZT1adChlLFwiRmlyc3QgcGFyYW1ldGVyXCIpLHRoaXMuX2NvdW50UXVldWluZ1N0cmF0ZWd5SGlnaFdhdGVyTWFyaz1lLmhpZ2hXYXRlck1hcmt9Z2V0IGhpZ2hXYXRlck1hcmsoKXtpZighYXIodGhpcykpdGhyb3cgbnIoXCJoaWdoV2F0ZXJNYXJrXCIpO3JldHVybiB0aGlzLl9jb3VudFF1ZXVpbmdTdHJhdGVneUhpZ2hXYXRlck1hcmt9Z2V0IHNpemUoKXtpZighYXIodGhpcykpdGhyb3cgbnIoXCJzaXplXCIpO3JldHVybiBvcn19ZnVuY3Rpb24gbnIoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYENvdW50UXVldWluZ1N0cmF0ZWd5LnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBDb3VudFF1ZXVpbmdTdHJhdGVneWApfWZ1bmN0aW9uIGFyKGUpe3JldHVybiEhcihlKSYmKCEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfY291bnRRdWV1aW5nU3RyYXRlZ3lIaWdoV2F0ZXJNYXJrXCIpJiZlIGluc3RhbmNlb2YgQ291bnRRdWV1aW5nU3RyYXRlZ3kpfWZ1bmN0aW9uIGlyKGUsdCxyKXtyZXR1cm4gSShlLHIpLHI9PncoZSx0LFtyXSl9ZnVuY3Rpb24gbHIoZSx0LHIpe3JldHVybiBJKGUscikscj0+ZyhlLHQsW3JdKX1mdW5jdGlvbiBzcihlLHQscil7cmV0dXJuIEkoZSxyKSwocixvKT0+dyhlLHQsW3Isb10pfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvdW50UXVldWluZ1N0cmF0ZWd5LnByb3RvdHlwZSx7aGlnaFdhdGVyTWFyazp7ZW51bWVyYWJsZTohMH0sc2l6ZTp7ZW51bWVyYWJsZTohMH19KSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KENvdW50UXVldWluZ1N0cmF0ZWd5LnByb3RvdHlwZSxlLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIkNvdW50UXVldWluZ1N0cmF0ZWd5XCIsY29uZmlndXJhYmxlOiEwfSk7Y2xhc3MgVHJhbnNmb3JtU3RyZWFte2NvbnN0cnVjdG9yKGU9e30sdD17fSxyPXt9KXt2b2lkIDA9PT1lJiYoZT1udWxsKTtjb25zdCBvPVllKHQsXCJTZWNvbmQgcGFyYW1ldGVyXCIpLG49WWUocixcIlRoaXJkIHBhcmFtZXRlclwiKSxhPWZ1bmN0aW9uKGUsdCl7RihlLHQpO2NvbnN0IHI9bnVsbD09ZT92b2lkIDA6ZS5mbHVzaCxvPW51bGw9PWU/dm9pZCAwOmUucmVhZGFibGVUeXBlLG49bnVsbD09ZT92b2lkIDA6ZS5zdGFydCxhPW51bGw9PWU/dm9pZCAwOmUudHJhbnNmb3JtLGk9bnVsbD09ZT92b2lkIDA6ZS53cml0YWJsZVR5cGU7cmV0dXJue2ZsdXNoOnZvaWQgMD09PXI/dm9pZCAwOmlyKHIsZSxgJHt0fSBoYXMgbWVtYmVyICdmbHVzaCcgdGhhdGApLHJlYWRhYmxlVHlwZTpvLHN0YXJ0OnZvaWQgMD09PW4/dm9pZCAwOmxyKG4sZSxgJHt0fSBoYXMgbWVtYmVyICdzdGFydCcgdGhhdGApLHRyYW5zZm9ybTp2b2lkIDA9PT1hP3ZvaWQgMDpzcihhLGUsYCR7dH0gaGFzIG1lbWJlciAndHJhbnNmb3JtJyB0aGF0YCksd3JpdGFibGVUeXBlOml9fShlLFwiRmlyc3QgcGFyYW1ldGVyXCIpO2lmKHZvaWQgMCE9PWEucmVhZGFibGVUeXBlKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCByZWFkYWJsZVR5cGUgc3BlY2lmaWVkXCIpO2lmKHZvaWQgMCE9PWEud3JpdGFibGVUeXBlKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB3cml0YWJsZVR5cGUgc3BlY2lmaWVkXCIpO2NvbnN0IGk9JGUobiwwKSxsPU1lKG4pLHM9JGUobywxKSxmPU1lKG8pO2xldCBiOyFmdW5jdGlvbihlLHQscixvLG4sYSl7ZnVuY3Rpb24gaSgpe3JldHVybiB0fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1lLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyO2lmKGUuX2JhY2twcmVzc3VyZSl7cmV0dXJuIHAoZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSwoKCk9PntpZihcImVycm9yaW5nXCI9PT0oR2UoZS5fd3JpdGFibGUpP2UuX3dyaXRhYmxlLl9zdGF0ZTplLl93cml0YWJsZVN0YXRlKSl0aHJvdyBHZShlLl93cml0YWJsZSk/ZS5fd3JpdGFibGUuX3N0b3JlZEVycm9yOmUuX3dyaXRhYmxlU3RvcmVkRXJyb3I7cmV0dXJuIHByKHIsdCl9KSl9cmV0dXJuIHByKHIsdCl9KGUsdCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gY3IoZSx0KSxjKHZvaWQgMCl9KGUsdCl9ZnVuY3Rpb24gdSgpe3JldHVybiBmdW5jdGlvbihlKXtjb25zdCB0PWUuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXIscj10Ll9mbHVzaEFsZ29yaXRobSgpO3JldHVybiBocih0KSxwKHIsKCgpPT57aWYoXCJlcnJvcmVkXCI9PT1lLl9yZWFkYWJsZVN0YXRlKXRocm93IGUuX3JlYWRhYmxlU3RvcmVkRXJyb3I7Z3IoZSkmJndyKGUpfSksKHQ9Pnt0aHJvdyBjcihlLHQpLGUuX3JlYWRhYmxlU3RvcmVkRXJyb3J9KSl9KGUpfWZ1bmN0aW9uIGQoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZyKGUsITEpLGUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2V9KGUpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIGRyKGUsdCksYyh2b2lkIDApfWUuX3dyaXRhYmxlU3RhdGU9XCJ3cml0YWJsZVwiLGUuX3dyaXRhYmxlU3RvcmVkRXJyb3I9dm9pZCAwLGUuX3dyaXRhYmxlSGFzSW5GbGlnaHRPcGVyYXRpb249ITEsZS5fd3JpdGFibGVTdGFydGVkPSExLGUuX3dyaXRhYmxlPWZ1bmN0aW9uKGUsdCxyLG8sbixhLGkpe3JldHVybiBuZXcgV3JpdGFibGVTdHJlYW0oe3N0YXJ0KHIpe2UuX3dyaXRhYmxlQ29udHJvbGxlcj1yO3RyeXtjb25zdCB0PXIuc2lnbmFsO3ZvaWQgMCE9PXQmJnQuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsKCgpPT57XCJ3cml0YWJsZVwiPT09ZS5fd3JpdGFibGVTdGF0ZSYmKGUuX3dyaXRhYmxlU3RhdGU9XCJlcnJvcmluZ1wiLHQucmVhc29uJiYoZS5fd3JpdGFibGVTdG9yZWRFcnJvcj10LnJlYXNvbikpfSkpfWNhdGNoKGUpe31yZXR1cm4gcCh0KCksKCgpPT4oZS5fd3JpdGFibGVTdGFydGVkPSEwLENyKGUpLG51bGwpKSwodD0+e3Rocm93IGUuX3dyaXRhYmxlU3RhcnRlZD0hMCxScihlLHQpLHR9KSl9LHdyaXRlOnQ9PihmdW5jdGlvbihlKXtlLl93cml0YWJsZUhhc0luRmxpZ2h0T3BlcmF0aW9uPSEwfShlKSxwKHIodCksKCgpPT4oZnVuY3Rpb24oZSl7ZS5fd3JpdGFibGVIYXNJbkZsaWdodE9wZXJhdGlvbj0hMX0oZSksQ3IoZSksbnVsbCkpLCh0PT57dGhyb3cgZnVuY3Rpb24oZSx0KXtlLl93cml0YWJsZUhhc0luRmxpZ2h0T3BlcmF0aW9uPSExLFJyKGUsdCl9KGUsdCksdH0pKSksY2xvc2U6KCk9PihmdW5jdGlvbihlKXtlLl93cml0YWJsZUhhc0luRmxpZ2h0T3BlcmF0aW9uPSEwfShlKSxwKG8oKSwoKCk9PihmdW5jdGlvbihlKXtlLl93cml0YWJsZUhhc0luRmxpZ2h0T3BlcmF0aW9uPSExO1wiZXJyb3JpbmdcIj09PWUuX3dyaXRhYmxlU3RhdGUmJihlLl93cml0YWJsZVN0b3JlZEVycm9yPXZvaWQgMCk7ZS5fd3JpdGFibGVTdGF0ZT1cImNsb3NlZFwifShlKSxudWxsKSksKHQ9Pnt0aHJvdyBmdW5jdGlvbihlLHQpe2UuX3dyaXRhYmxlSGFzSW5GbGlnaHRPcGVyYXRpb249ITEsZS5fd3JpdGFibGVTdGF0ZSxScihlLHQpfShlLHQpLHR9KSkpLGFib3J0OnQ9PihlLl93cml0YWJsZVN0YXRlPVwiZXJyb3JlZFwiLGUuX3dyaXRhYmxlU3RvcmVkRXJyb3I9dCxuKHQpKX0se2hpZ2hXYXRlck1hcms6YSxzaXplOml9KX0oZSxpLGwsdSxzLHIsbyksZS5fcmVhZGFibGVTdGF0ZT1cInJlYWRhYmxlXCIsZS5fcmVhZGFibGVTdG9yZWRFcnJvcj12b2lkIDAsZS5fcmVhZGFibGVDbG9zZVJlcXVlc3RlZD0hMSxlLl9yZWFkYWJsZVB1bGxpbmc9ITEsZS5fcmVhZGFibGU9ZnVuY3Rpb24oZSx0LHIsbyxuLGEpe3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OnI9PihlLl9yZWFkYWJsZUNvbnRyb2xsZXI9cix0KCkuY2F0Y2goKHQ9PntTcihlLHQpfSkpKSxwdWxsOigpPT4oZS5fcmVhZGFibGVQdWxsaW5nPSEwLHIoKS5jYXRjaCgodD0+e1NyKGUsdCl9KSkpLGNhbmNlbDp0PT4oZS5fcmVhZGFibGVTdGF0ZT1cImNsb3NlZFwiLG8odCkpfSx7aGlnaFdhdGVyTWFyazpuLHNpemU6YX0pfShlLGksZCxmLG4sYSksZS5fYmFja3ByZXNzdXJlPXZvaWQgMCxlLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlPXZvaWQgMCxlLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGZyKGUsITApLGUuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwfSh0aGlzLHUoKGU9PntiPWV9KSkscyxmLGksbCksZnVuY3Rpb24oZSx0KXtjb25zdCByPU9iamVjdC5jcmVhdGUoVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlKTtsZXQgbyxuO289dm9pZCAwIT09dC50cmFuc2Zvcm0/ZT0+dC50cmFuc2Zvcm0oZSxyKTplPT57dHJ5e3JldHVybiBfcihyLGUpLGModm9pZCAwKX1jYXRjaChlKXtyZXR1cm4gZChlKX19O249dm9pZCAwIT09dC5mbHVzaD8oKT0+dC5mbHVzaChyKTooKT0+Yyh2b2lkIDApOyFmdW5jdGlvbihlLHQscixvKXt0Ll9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtPWUsZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcj10LHQuX3RyYW5zZm9ybUFsZ29yaXRobT1yLHQuX2ZsdXNoQWxnb3JpdGhtPW99KGUscixvLG4pfSh0aGlzLGEpLHZvaWQgMCE9PWEuc3RhcnQ/YihhLnN0YXJ0KHRoaXMuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXIpKTpiKHZvaWQgMCl9Z2V0IHJlYWRhYmxlKCl7aWYoIXVyKHRoaXMpKXRocm93IHlyKFwicmVhZGFibGVcIik7cmV0dXJuIHRoaXMuX3JlYWRhYmxlfWdldCB3cml0YWJsZSgpe2lmKCF1cih0aGlzKSl0aHJvdyB5cihcIndyaXRhYmxlXCIpO3JldHVybiB0aGlzLl93cml0YWJsZX19ZnVuY3Rpb24gdXIoZSl7cmV0dXJuISFyKGUpJiYoISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcIl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyXCIpJiZlIGluc3RhbmNlb2YgVHJhbnNmb3JtU3RyZWFtKX1mdW5jdGlvbiBjcihlLHQpe1NyKGUsdCksZHIoZSx0KX1mdW5jdGlvbiBkcihlLHQpe2hyKGUuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXIpLGZ1bmN0aW9uKGUsdCl7ZS5fd3JpdGFibGVDb250cm9sbGVyLmVycm9yKHQpO1wid3JpdGFibGVcIj09PWUuX3dyaXRhYmxlU3RhdGUmJlRyKGUsdCl9KGUsdCksZS5fYmFja3ByZXNzdXJlJiZmcihlLCExKX1mdW5jdGlvbiBmcihlLHQpe3ZvaWQgMCE9PWUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UmJmUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZSgpLGUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U9dSgodD0+e2UuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZT10fSkpLGUuX2JhY2twcmVzc3VyZT10fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRyYW5zZm9ybVN0cmVhbS5wcm90b3R5cGUse3JlYWRhYmxlOntlbnVtZXJhYmxlOiEwfSx3cml0YWJsZTp7ZW51bWVyYWJsZTohMH19KSxcInN5bWJvbFwiPT10eXBlb2YgZS50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zZm9ybVN0cmVhbS5wcm90b3R5cGUsZS50b1N0cmluZ1RhZyx7dmFsdWU6XCJUcmFuc2Zvcm1TdHJlYW1cIixjb25maWd1cmFibGU6ITB9KTtjbGFzcyBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcntjb25zdHJ1Y3Rvcigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpfWdldCBkZXNpcmVkU2l6ZSgpe2lmKCFicih0aGlzKSl0aHJvdyBtcihcImRlc2lyZWRTaXplXCIpO3JldHVybiB2cih0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtKX1lbnF1ZXVlKGUpe2lmKCFicih0aGlzKSl0aHJvdyBtcihcImVucXVldWVcIik7X3IodGhpcyxlKX1lcnJvcihlKXtpZighYnIodGhpcykpdGhyb3cgbXIoXCJlcnJvclwiKTt2YXIgdDt0PWUsY3IodGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSx0KX10ZXJtaW5hdGUoKXtpZighYnIodGhpcykpdGhyb3cgbXIoXCJ0ZXJtaW5hdGVcIik7IWZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbTtncih0KSYmd3IodCk7Y29uc3Qgcj1uZXcgVHlwZUVycm9yKFwiVHJhbnNmb3JtU3RyZWFtIHRlcm1pbmF0ZWRcIik7ZHIodCxyKX0odGhpcyl9fWZ1bmN0aW9uIGJyKGUpe3JldHVybiEhcihlKSYmKCEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJfY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbVwiKSYmZSBpbnN0YW5jZW9mIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKX1mdW5jdGlvbiBocihlKXtlLl90cmFuc2Zvcm1BbGdvcml0aG09dm9pZCAwLGUuX2ZsdXNoQWxnb3JpdGhtPXZvaWQgMH1mdW5jdGlvbiBfcihlLHQpe2NvbnN0IHI9ZS5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbTtpZighZ3IocikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlYWRhYmxlIHNpZGUgaXMgbm90IGluIGEgc3RhdGUgdGhhdCBwZXJtaXRzIGVucXVldWVcIik7dHJ5eyFmdW5jdGlvbihlLHQpe2UuX3JlYWRhYmxlUHVsbGluZz0hMTt0cnl7ZS5fcmVhZGFibGVDb250cm9sbGVyLmVucXVldWUodCl9Y2F0Y2godCl7dGhyb3cgU3IoZSx0KSx0fX0ocix0KX1jYXRjaChlKXt0aHJvdyBkcihyLGUpLHIuX3JlYWRhYmxlU3RvcmVkRXJyb3J9Y29uc3Qgbz1mdW5jdGlvbihlKXtyZXR1cm4hZnVuY3Rpb24oZSl7aWYoIWdyKGUpKXJldHVybiExO2lmKGUuX3JlYWRhYmxlUHVsbGluZylyZXR1cm4hMDtpZih2cihlKT4wKXJldHVybiEwO3JldHVybiExfShlKX0ocik7byE9PXIuX2JhY2twcmVzc3VyZSYmZnIociwhMCl9ZnVuY3Rpb24gcHIoZSx0KXtyZXR1cm4gcChlLl90cmFuc2Zvcm1BbGdvcml0aG0odCksdm9pZCAwLCh0PT57dGhyb3cgY3IoZS5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSx0KSx0fSkpfWZ1bmN0aW9uIG1yKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKGBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuJHtlfSBjYW4gb25seSBiZSB1c2VkIG9uIGEgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJgKX1mdW5jdGlvbiB5cihlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZS4ke2V9IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW1gKX1mdW5jdGlvbiBncihlKXtyZXR1cm4hZS5fcmVhZGFibGVDbG9zZVJlcXVlc3RlZCYmXCJyZWFkYWJsZVwiPT09ZS5fcmVhZGFibGVTdGF0ZX1mdW5jdGlvbiB3cihlKXtlLl9yZWFkYWJsZVN0YXRlPVwiY2xvc2VkXCIsZS5fcmVhZGFibGVDbG9zZVJlcXVlc3RlZD0hMCxlLl9yZWFkYWJsZUNvbnRyb2xsZXIuY2xvc2UoKX1mdW5jdGlvbiBTcihlLHQpe1wicmVhZGFibGVcIj09PWUuX3JlYWRhYmxlU3RhdGUmJihlLl9yZWFkYWJsZVN0YXRlPVwiZXJyb3JlZFwiLGUuX3JlYWRhYmxlU3RvcmVkRXJyb3I9dCksZS5fcmVhZGFibGVDb250cm9sbGVyLmVycm9yKHQpfWZ1bmN0aW9uIHZyKGUpe3JldHVybiBlLl9yZWFkYWJsZUNvbnRyb2xsZXIuZGVzaXJlZFNpemV9ZnVuY3Rpb24gUnIoZSx0KXtcIndyaXRhYmxlXCIhPT1lLl93cml0YWJsZVN0YXRlP3FyKGUpOlRyKGUsdCl9ZnVuY3Rpb24gVHIoZSx0KXtlLl93cml0YWJsZVN0YXRlPVwiZXJyb3JpbmdcIixlLl93cml0YWJsZVN0b3JlZEVycm9yPXQsIWZ1bmN0aW9uKGUpe3JldHVybiBlLl93cml0YWJsZUhhc0luRmxpZ2h0T3BlcmF0aW9ufShlKSYmZS5fd3JpdGFibGVTdGFydGVkJiZxcihlKX1mdW5jdGlvbiBxcihlKXtlLl93cml0YWJsZVN0YXRlPVwiZXJyb3JlZFwifWZ1bmN0aW9uIENyKGUpe1wiZXJyb3JpbmdcIj09PWUuX3dyaXRhYmxlU3RhdGUmJnFyKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZSx7ZW5xdWV1ZTp7ZW51bWVyYWJsZTohMH0sZXJyb3I6e2VudW1lcmFibGU6ITB9LHRlcm1pbmF0ZTp7ZW51bWVyYWJsZTohMH0sZGVzaXJlZFNpemU6e2VudW1lcmFibGU6ITB9fSksbihUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuZW5xdWV1ZSxcImVucXVldWVcIiksbihUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuZXJyb3IsXCJlcnJvclwiKSxuKFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS50ZXJtaW5hdGUsXCJ0ZXJtaW5hdGVcIiksXCJzeW1ib2xcIj09dHlwZW9mIGUudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUsZS50b1N0cmluZ1RhZyx7dmFsdWU6XCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlclwiLGNvbmZpZ3VyYWJsZTohMH0pO2V4cG9ydHtCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5LENvdW50UXVldWluZ1N0cmF0ZWd5LFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsUmVhZGFibGVTdHJlYW0sUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QsUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcixSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIsVHJhbnNmb3JtU3RyZWFtLFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLFdyaXRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIsV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyfTtcbiIsICJleHBvcnQgY29uc3QgaXNGdW5jdGlvbiA9ICh2YWx1ZSkgPT4gKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKTtcbiIsICIvKiEgQmFzZWQgb24gZmV0Y2gtYmxvYi4gTUlUIExpY2Vuc2UuIEppbW15IFdcdTAwRTRydGluZyA8aHR0cHM6Ly9qaW1teS53YXJ0aW5nLnNlL29wZW5zb3VyY2U+ICYgRGF2aWQgRnJhbmsgKi9cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi9pc0Z1bmN0aW9uLmpzXCI7XG5jb25zdCBDSFVOS19TSVpFID0gNjU1MzY7XG5hc3luYyBmdW5jdGlvbiogY2xvbmVQYXJ0KHBhcnQpIHtcbiAgICBjb25zdCBlbmQgPSBwYXJ0LmJ5dGVPZmZzZXQgKyBwYXJ0LmJ5dGVMZW5ndGg7XG4gICAgbGV0IHBvc2l0aW9uID0gcGFydC5ieXRlT2Zmc2V0O1xuICAgIHdoaWxlIChwb3NpdGlvbiAhPT0gZW5kKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBNYXRoLm1pbihlbmQgLSBwb3NpdGlvbiwgQ0hVTktfU0laRSk7XG4gICAgICAgIGNvbnN0IGNodW5rID0gcGFydC5idWZmZXIuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgc2l6ZSk7XG4gICAgICAgIHBvc2l0aW9uICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICAgIHlpZWxkIG5ldyBVaW50OEFycmF5KGNodW5rKTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiogY29uc3VtZU5vZGVCbG9iKGJsb2IpIHtcbiAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgIHdoaWxlIChwb3NpdGlvbiAhPT0gYmxvYi5zaXplKSB7XG4gICAgICAgIGNvbnN0IGNodW5rID0gYmxvYi5zbGljZShwb3NpdGlvbiwgTWF0aC5taW4oYmxvYi5zaXplLCBwb3NpdGlvbiArIENIVU5LX1NJWkUpKTtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2h1bmsuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgcG9zaXRpb24gKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XG4gICAgICAgIHlpZWxkIG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBjb25zdW1lQmxvYlBhcnRzKHBhcnRzLCBjbG9uZSA9IGZhbHNlKSB7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcocGFydCkpIHtcbiAgICAgICAgICAgIGlmIChjbG9uZSkge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBjbG9uZVBhcnQocGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBwYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24ocGFydC5zdHJlYW0pKSB7XG4gICAgICAgICAgICB5aWVsZCogcGFydC5zdHJlYW0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkKiBjb25zdW1lTm9kZUJsb2IocGFydCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24qIHNsaWNlQmxvYihibG9iUGFydHMsIGJsb2JTaXplLCBzdGFydCA9IDAsIGVuZCkge1xuICAgIGVuZCAhPT0gbnVsbCAmJiBlbmQgIT09IHZvaWQgMCA/IGVuZCA6IChlbmQgPSBibG9iU2l6ZSk7XG4gICAgbGV0IHJlbGF0aXZlU3RhcnQgPSBzdGFydCA8IDBcbiAgICAgICAgPyBNYXRoLm1heChibG9iU2l6ZSArIHN0YXJ0LCAwKVxuICAgICAgICA6IE1hdGgubWluKHN0YXJ0LCBibG9iU2l6ZSk7XG4gICAgbGV0IHJlbGF0aXZlRW5kID0gZW5kIDwgMFxuICAgICAgICA/IE1hdGgubWF4KGJsb2JTaXplICsgZW5kLCAwKVxuICAgICAgICA6IE1hdGgubWluKGVuZCwgYmxvYlNpemUpO1xuICAgIGNvbnN0IHNwYW4gPSBNYXRoLm1heChyZWxhdGl2ZUVuZCAtIHJlbGF0aXZlU3RhcnQsIDApO1xuICAgIGxldCBhZGRlZCA9IDA7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGJsb2JQYXJ0cykge1xuICAgICAgICBpZiAoYWRkZWQgPj0gc3Bhbikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFydFNpemUgPSBBcnJheUJ1ZmZlci5pc1ZpZXcocGFydCkgPyBwYXJ0LmJ5dGVMZW5ndGggOiBwYXJ0LnNpemU7XG4gICAgICAgIGlmIChyZWxhdGl2ZVN0YXJ0ICYmIHBhcnRTaXplIDw9IHJlbGF0aXZlU3RhcnQpIHtcbiAgICAgICAgICAgIHJlbGF0aXZlU3RhcnQgLT0gcGFydFNpemU7XG4gICAgICAgICAgICByZWxhdGl2ZUVuZCAtPSBwYXJ0U2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjaHVuaztcbiAgICAgICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcocGFydCkpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IHBhcnQuc3ViYXJyYXkocmVsYXRpdmVTdGFydCwgTWF0aC5taW4ocGFydFNpemUsIHJlbGF0aXZlRW5kKSk7XG4gICAgICAgICAgICAgICAgYWRkZWQgKz0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNodW5rID0gcGFydC5zbGljZShyZWxhdGl2ZVN0YXJ0LCBNYXRoLm1pbihwYXJ0U2l6ZSwgcmVsYXRpdmVFbmQpKTtcbiAgICAgICAgICAgICAgICBhZGRlZCArPSBjaHVuay5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVsYXRpdmVFbmQgLT0gcGFydFNpemU7XG4gICAgICAgICAgICByZWxhdGl2ZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIHlpZWxkIGNodW5rO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgIi8qISBCYXNlZCBvbiBmZXRjaC1ibG9iLiBNSVQgTGljZW5zZS4gSmltbXkgV1x1MDBFNHJ0aW5nIDxodHRwczovL2ppbW15LndhcnRpbmcuc2Uvb3BlbnNvdXJjZT4gJiBEYXZpZCBGcmFuayAqL1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9CbG9iX3BhcnRzLCBfQmxvYl90eXBlLCBfQmxvYl9zaXplO1xuaW1wb3J0IHsgUmVhZGFibGVTdHJlYW0gfSBmcm9tIFwid2ViLXN0cmVhbXMtcG9seWZpbGxcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi9pc0Z1bmN0aW9uLmpzXCI7XG5pbXBvcnQgeyBjb25zdW1lQmxvYlBhcnRzLCBzbGljZUJsb2IgfSBmcm9tIFwiLi9ibG9iSGVscGVycy5qc1wiO1xuZXhwb3J0IGNsYXNzIEJsb2Ige1xuICAgIGNvbnN0cnVjdG9yKGJsb2JQYXJ0cyA9IFtdLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgX0Jsb2JfcGFydHMuc2V0KHRoaXMsIFtdKTtcbiAgICAgICAgX0Jsb2JfdHlwZS5zZXQodGhpcywgXCJcIik7XG4gICAgICAgIF9CbG9iX3NpemUuc2V0KHRoaXMsIDApO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgaWYgKHR5cGVvZiBibG9iUGFydHMgIT09IFwib2JqZWN0XCIgfHwgYmxvYlBhcnRzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnQmxvYic6IFwiXG4gICAgICAgICAgICAgICAgKyBcIlRoZSBwcm92aWRlZCB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgc2VxdWVuY2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNGdW5jdGlvbihibG9iUGFydHNbU3ltYm9sLml0ZXJhdG9yXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdCbG9iJzogXCJcbiAgICAgICAgICAgICAgICArIFwiVGhlIG9iamVjdCBtdXN0IGhhdmUgYSBjYWxsYWJsZSBAQGl0ZXJhdG9yIHByb3BlcnR5LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdCbG9iJzogcGFyYW1ldGVyIDIgY2Fubm90IGNvbnZlcnQgdG8gZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgICBmb3IgKGNvbnN0IHJhdyBvZiBibG9iUGFydHMpIHtcbiAgICAgICAgICAgIGxldCBwYXJ0O1xuICAgICAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhyYXcpKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5ldyBVaW50OEFycmF5KHJhdy5idWZmZXIuc2xpY2UocmF3LmJ5dGVPZmZzZXQsIHJhdy5ieXRlT2Zmc2V0ICsgcmF3LmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJhdyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5ldyBVaW50OEFycmF5KHJhdy5zbGljZSgwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyYXcgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IHJhdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnQgPSBlbmNvZGVyLmVuY29kZShTdHJpbmcocmF3KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9CbG9iX3NpemUsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2Jfc2l6ZSwgXCJmXCIpICsgKEFycmF5QnVmZmVyLmlzVmlldyhwYXJ0KSA/IHBhcnQuYnl0ZUxlbmd0aCA6IHBhcnQuc2l6ZSksIFwiZlwiKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2JfcGFydHMsIFwiZlwiKS5wdXNoKHBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGUgPSBvcHRpb25zLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBTdHJpbmcob3B0aW9ucy50eXBlKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfQmxvYl90eXBlLCAvXltcXHgyMC1cXHg3RV0qJC8udGVzdCh0eXBlKSA/IHR5cGUgOiBcIlwiLCBcImZcIik7XG4gICAgfVxuICAgIHN0YXRpYyBbKF9CbG9iX3BhcnRzID0gbmV3IFdlYWtNYXAoKSwgX0Jsb2JfdHlwZSA9IG5ldyBXZWFrTWFwKCksIF9CbG9iX3NpemUgPSBuZXcgV2Vha01hcCgpLCBTeW1ib2wuaGFzSW5zdGFuY2UpXSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZVxuICAgICAgICAgICAgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbnN0cnVjdG9yKVxuICAgICAgICAgICAgJiYgKGlzRnVuY3Rpb24odmFsdWUuc3RyZWFtKVxuICAgICAgICAgICAgICAgIHx8IGlzRnVuY3Rpb24odmFsdWUuYXJyYXlCdWZmZXIpKVxuICAgICAgICAgICAgJiYgL14oQmxvYnxGaWxlKSQvLnRlc3QodmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkpO1xuICAgIH1cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2JfdHlwZSwgXCJmXCIpO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2Jfc2l6ZSwgXCJmXCIpO1xuICAgIH1cbiAgICBzbGljZShzdGFydCwgZW5kLCBjb250ZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2Ioc2xpY2VCbG9iKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jsb2JfcGFydHMsIFwiZlwiKSwgdGhpcy5zaXplLCBzdGFydCwgZW5kKSwge1xuICAgICAgICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJsb2JQYXJ0cyhfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CbG9iX3BhcnRzLCBcImZcIikpKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gZGVjb2Rlci5kZWNvZGUoY2h1bmssIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSBkZWNvZGVyLmRlY29kZSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBhcnJheUJ1ZmZlcigpIHtcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuc2l6ZSk7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCbG9iUGFydHMoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmxvYl9wYXJ0cywgXCJmXCIpKSkge1xuICAgICAgICAgICAgdmlldy5zZXQoY2h1bmssIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aWV3LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RyZWFtKCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGNvbnN1bWVCbG9iUGFydHMoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmxvYl9wYXJ0cywgXCJmXCIpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgICAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlTWljcm90YXNrKCgpID0+IGNvbnRyb2xsZXIuY2xvc2UoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJCbG9iXCI7XG4gICAgfVxufVxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvYi5wcm90b3R5cGUsIHtcbiAgICB0eXBlOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBzaXplOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBzbGljZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gICAgc3RyZWFtOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICB0ZXh0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBhcnJheUJ1ZmZlcjogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuIiwgInZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfRmlsZV9uYW1lLCBfRmlsZV9sYXN0TW9kaWZpZWQ7XG5pbXBvcnQgeyBCbG9iIH0gZnJvbSBcIi4vQmxvYi5qc1wiO1xuZXhwb3J0IGNsYXNzIEZpbGUgZXh0ZW5kcyBCbG9iIHtcbiAgICBjb25zdHJ1Y3RvcihmaWxlQml0cywgbmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKGZpbGVCaXRzLCBvcHRpb25zKTtcbiAgICAgICAgX0ZpbGVfbmFtZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0ZpbGVfbGFzdE1vZGlmaWVkLnNldCh0aGlzLCAwKTtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnRmlsZSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBcIlxuICAgICAgICAgICAgICAgICsgYGJ1dCBvbmx5ICR7YXJndW1lbnRzLmxlbmd0aH0gcHJlc2VudC5gKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9GaWxlX25hbWUsIFN0cmluZyhuYW1lKSwgXCJmXCIpO1xuICAgICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IERhdGUubm93KClcbiAgICAgICAgICAgIDogTnVtYmVyKG9wdGlvbnMubGFzdE1vZGlmaWVkKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obGFzdE1vZGlmaWVkKSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfRmlsZV9sYXN0TW9kaWZpZWQsIGxhc3RNb2RpZmllZCwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBbKF9GaWxlX25hbWUgPSBuZXcgV2Vha01hcCgpLCBfRmlsZV9sYXN0TW9kaWZpZWQgPSBuZXcgV2Vha01hcCgpLCBTeW1ib2wuaGFzSW5zdGFuY2UpXSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgICAgICAmJiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSBcIkZpbGVcIlxuICAgICAgICAgICAgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT09IFwic3RyaW5nXCI7XG4gICAgfVxuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRmlsZV9uYW1lLCBcImZcIik7XG4gICAgfVxuICAgIGdldCBsYXN0TW9kaWZpZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9GaWxlX2xhc3RNb2RpZmllZCwgXCJmXCIpO1xuICAgIH1cbiAgICBnZXQgd2Via2l0UmVsYXRpdmVQYXRoKCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEZpbGUgfSBmcm9tIFwiLi9GaWxlLmpzXCI7XG5leHBvcnQgY29uc3QgaXNGaWxlID0gKHZhbHVlKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIEZpbGU7XG4iLCAiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwgIi8qIVxuICogaHVtYW5pemUtbXMgLSBpbmRleC5qc1xuICogQ29weXJpZ2h0KGMpIDIwMTQgZGVhZF9ob3JzZSA8ZGVhZF9ob3JzZUBxcS5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBtcyA9IHJlcXVpcmUoJ21zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgaWYgKHR5cGVvZiB0ID09PSAnbnVtYmVyJykgcmV0dXJuIHQ7XG4gIHZhciByID0gbXModCk7XG4gIGlmIChyID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKHV0aWwuZm9ybWF0KCdodW1hbml6ZS1tcyglaikgcmVzdWx0IHVuZGVmaW5lZCcsIHQpKTtcbiAgICBjb25zb2xlLndhcm4oZXJyLnN0YWNrKTtcbiAgfVxuICByZXR1cm4gcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYWdlbnRcbiAgQ1VSUkVOVF9JRDogU3ltYm9sKCdhZ2VudGtlZXBhbGl2ZSNjdXJyZW50SWQnKSxcbiAgQ1JFQVRFX0lEOiBTeW1ib2woJ2FnZW50a2VlcGFsaXZlI2NyZWF0ZUlkJyksXG4gIElOSVRfU09DS0VUOiBTeW1ib2woJ2FnZW50a2VlcGFsaXZlI2luaXRTb2NrZXQnKSxcbiAgQ1JFQVRFX0hUVFBTX0NPTk5FQ1RJT046IFN5bWJvbCgnYWdlbnRrZWVwYWxpdmUjY3JlYXRlSHR0cHNDb25uZWN0aW9uJyksXG4gIC8vIHNvY2tldFxuICBTT0NLRVRfQ1JFQVRFRF9USU1FOiBTeW1ib2woJ2FnZW50a2VlcGFsaXZlI3NvY2tldENyZWF0ZWRUaW1lJyksXG4gIFNPQ0tFVF9OQU1FOiBTeW1ib2woJ2FnZW50a2VlcGFsaXZlI3NvY2tldE5hbWUnKSxcbiAgU09DS0VUX1JFUVVFU1RfQ09VTlQ6IFN5bWJvbCgnYWdlbnRrZWVwYWxpdmUjc29ja2V0UmVxdWVzdENvdW50JyksXG4gIFNPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5UOiBTeW1ib2woJ2FnZW50a2VlcGFsaXZlI3NvY2tldFJlcXVlc3RGaW5pc2hlZENvdW50JyksXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgT3JpZ2luYWxBZ2VudCA9IHJlcXVpcmUoJ2h0dHAnKS5BZ2VudDtcbmNvbnN0IG1zID0gcmVxdWlyZSgnaHVtYW5pemUtbXMnKTtcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgndXRpbCcpLmRlYnVnbG9nKCdhZ2VudGtlZXBhbGl2ZScpO1xuY29uc3Qge1xuICBJTklUX1NPQ0tFVCxcbiAgQ1VSUkVOVF9JRCxcbiAgQ1JFQVRFX0lELFxuICBTT0NLRVRfQ1JFQVRFRF9USU1FLFxuICBTT0NLRVRfTkFNRSxcbiAgU09DS0VUX1JFUVVFU1RfQ09VTlQsXG4gIFNPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5ULFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbi8vIE9yaWdpbmFsQWdlbnQgY29tZSBmcm9tXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3Y4LjEyLjAvbGliL19odHRwX2FnZW50LmpzXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMC4xMi4wL2xpYi9faHR0cF9hZ2VudC5qc1xuXG4vLyBub2RlIDw9IDEwXG5sZXQgZGVmYXVsdFRpbWVvdXRMaXN0ZW5lckNvdW50ID0gMTtcbmNvbnN0IG1ham9yVmVyc2lvbiA9IHBhcnNlSW50KHByb2Nlc3MudmVyc2lvbi5zcGxpdCgnLicsIDEpWzBdLnN1YnN0cmluZygxKSk7XG5pZiAobWFqb3JWZXJzaW9uID49IDExICYmIG1ham9yVmVyc2lvbiA8PSAxMikge1xuICBkZWZhdWx0VGltZW91dExpc3RlbmVyQ291bnQgPSAyO1xufSBlbHNlIGlmIChtYWpvclZlcnNpb24gPj0gMTMpIHtcbiAgZGVmYXVsdFRpbWVvdXRMaXN0ZW5lckNvdW50ID0gMztcbn1cblxuZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgY29uc29sZS5sb2coJ1thZ2VudGtlZXBhbGl2ZTpkZXByZWNhdGVkXSAlcycsIG1lc3NhZ2UpO1xufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIE9yaWdpbmFsQWdlbnQge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5rZWVwQWxpdmUgPSBvcHRpb25zLmtlZXBBbGl2ZSAhPT0gZmFsc2U7XG4gICAgLy8gZGVmYXVsdCBpcyBrZWVwLWFsaXZlIGFuZCA0cyBmcmVlIHNvY2tldCB0aW1lb3V0XG4gICAgLy8gc2VlIGh0dHBzOi8vbWVkaXVtLmNvbS9zc2Vuc2UtdGVjaC9yZWR1Y2UtbmV0d29ya2luZy1lcnJvcnMtaW4tbm9kZWpzLTIzYjRlYjlmMmQ4M1xuICAgIGlmIChvcHRpb25zLmZyZWVTb2NrZXRUaW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuZnJlZVNvY2tldFRpbWVvdXQgPSA0MDAwO1xuICAgIH1cbiAgICAvLyBMZWdhY3kgQVBJOiBrZWVwQWxpdmVUaW1lb3V0IHNob3VsZCBiZSByZW5hbWUgdG8gYGZyZWVTb2NrZXRUaW1lb3V0YFxuICAgIGlmIChvcHRpb25zLmtlZXBBbGl2ZVRpbWVvdXQpIHtcbiAgICAgIGRlcHJlY2F0ZSgnb3B0aW9ucy5rZWVwQWxpdmVUaW1lb3V0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2Ugb3B0aW9ucy5mcmVlU29ja2V0VGltZW91dCBpbnN0ZWFkJyk7XG4gICAgICBvcHRpb25zLmZyZWVTb2NrZXRUaW1lb3V0ID0gb3B0aW9ucy5rZWVwQWxpdmVUaW1lb3V0O1xuICAgICAgZGVsZXRlIG9wdGlvbnMua2VlcEFsaXZlVGltZW91dDtcbiAgICB9XG4gICAgLy8gTGVnYWN5IEFQSTogZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQgc2hvdWxkIGJlIHJlbmFtZSB0byBgZnJlZVNvY2tldFRpbWVvdXRgXG4gICAgaWYgKG9wdGlvbnMuZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQpIHtcbiAgICAgIGRlcHJlY2F0ZSgnb3B0aW9ucy5mcmVlU29ja2V0S2VlcEFsaXZlVGltZW91dCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIG9wdGlvbnMuZnJlZVNvY2tldFRpbWVvdXQgaW5zdGVhZCcpO1xuICAgICAgb3B0aW9ucy5mcmVlU29ja2V0VGltZW91dCA9IG9wdGlvbnMuZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQ7XG4gICAgICBkZWxldGUgb3B0aW9ucy5mcmVlU29ja2V0S2VlcEFsaXZlVGltZW91dDtcbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBzb2NrZXQgdG8gdGltZW91dCBhZnRlciB0aW1lb3V0IG1pbGxpc2Vjb25kcyBvZiBpbmFjdGl2aXR5IG9uIHRoZSBzb2NrZXQuXG4gICAgLy8gQnkgZGVmYXVsdCBpcyBkb3VibGUgZnJlZSBzb2NrZXQgdGltZW91dC5cbiAgICBpZiAob3B0aW9ucy50aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBzb2NrZXQgZGVmYXVsdCBpbmFjdGl2aXR5IHRpbWVvdXQgPj0gOHNcbiAgICAgIG9wdGlvbnMudGltZW91dCA9IE1hdGgubWF4KG9wdGlvbnMuZnJlZVNvY2tldFRpbWVvdXQgKiAyLCA4MDAwKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGh1bWFuaXplIGZvcm1hdFxuICAgIG9wdGlvbnMudGltZW91dCA9IG1zKG9wdGlvbnMudGltZW91dCk7XG4gICAgb3B0aW9ucy5mcmVlU29ja2V0VGltZW91dCA9IG1zKG9wdGlvbnMuZnJlZVNvY2tldFRpbWVvdXQpO1xuICAgIG9wdGlvbnMuc29ja2V0QWN0aXZlVFRMID0gb3B0aW9ucy5zb2NrZXRBY3RpdmVUVEwgPyBtcyhvcHRpb25zLnNvY2tldEFjdGl2ZVRUTCkgOiAwO1xuXG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzW0NVUlJFTlRfSURdID0gMDtcblxuICAgIC8vIGNyZWF0ZSBzb2NrZXQgc3VjY2VzcyBjb3VudGVyXG4gICAgdGhpcy5jcmVhdGVTb2NrZXRDb3VudCA9IDA7XG4gICAgdGhpcy5jcmVhdGVTb2NrZXRDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICB0aGlzLmNyZWF0ZVNvY2tldEVycm9yQ291bnQgPSAwO1xuICAgIHRoaXMuY3JlYXRlU29ja2V0RXJyb3JDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICB0aGlzLmNsb3NlU29ja2V0Q291bnQgPSAwO1xuICAgIHRoaXMuY2xvc2VTb2NrZXRDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICAvLyBzb2NrZXQgZXJyb3IgZXZlbnQgY291bnRcbiAgICB0aGlzLmVycm9yU29ja2V0Q291bnQgPSAwO1xuICAgIHRoaXMuZXJyb3JTb2NrZXRDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICAvLyByZXF1ZXN0IGZpbmlzaGVkIGNvdW50ZXJcbiAgICB0aGlzLnJlcXVlc3RDb3VudCA9IDA7XG4gICAgdGhpcy5yZXF1ZXN0Q291bnRMYXN0Q2hlY2sgPSAwO1xuXG4gICAgLy8gaW5jbHVkaW5nIGZyZWUgc29ja2V0IHRpbWVvdXQgY291bnRlclxuICAgIHRoaXMudGltZW91dFNvY2tldENvdW50ID0gMDtcbiAgICB0aGlzLnRpbWVvdXRTb2NrZXRDb3VudExhc3RDaGVjayA9IDA7XG5cbiAgICB0aGlzLm9uKCdmcmVlJywgc29ja2V0ID0+IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzMyMDAwXG4gICAgICAvLyBOb2RlLmpzIG5hdGl2ZSBhZ2VudCB3aWxsIGNoZWNrIHNvY2tldCB0aW1lb3V0IGVxcyBhZ2VudC5vcHRpb25zLnRpbWVvdXQuXG4gICAgICAvLyBVc2UgdGhlIHR0bCBvciBmcmVlU29ja2V0VGltZW91dCB0byBvdmVyd3JpdGUuXG4gICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5jYWxjU29ja2V0VGltZW91dChzb2NrZXQpO1xuICAgICAgaWYgKHRpbWVvdXQgPiAwICYmIHNvY2tldC50aW1lb3V0ICE9PSB0aW1lb3V0KSB7XG4gICAgICAgIHNvY2tldC5zZXRUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZyZWVTb2NrZXRLZWVwQWxpdmVUaW1lb3V0KCkge1xuICAgIGRlcHJlY2F0ZSgnYWdlbnQuZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBhZ2VudC5vcHRpb25zLmZyZWVTb2NrZXRUaW1lb3V0IGluc3RlYWQnKTtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZyZWVTb2NrZXRUaW1lb3V0O1xuICB9XG5cbiAgZ2V0IHRpbWVvdXQoKSB7XG4gICAgZGVwcmVjYXRlKCdhZ2VudC50aW1lb3V0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgYWdlbnQub3B0aW9ucy50aW1lb3V0IGluc3RlYWQnKTtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRpbWVvdXQ7XG4gIH1cblxuICBnZXQgc29ja2V0QWN0aXZlVFRMKCkge1xuICAgIGRlcHJlY2F0ZSgnYWdlbnQuc29ja2V0QWN0aXZlVFRMIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgYWdlbnQub3B0aW9ucy5zb2NrZXRBY3RpdmVUVEwgaW5zdGVhZCcpO1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc29ja2V0QWN0aXZlVFRMO1xuICB9XG5cbiAgY2FsY1NvY2tldFRpbWVvdXQoc29ja2V0KSB7XG4gICAgLyoqXG4gICAgICogcmV0dXJuIDw9IDA6IHNob3VsZCBmcmVlIHNvY2tldFxuICAgICAqIHJldHVybiA+IDA6IHNob3VsZCB1cGRhdGUgc29ja2V0IHRpbWVvdXRcbiAgICAgKiByZXR1cm4gdW5kZWZpbmVkOiBub3QgZmluZCBjdXN0b20gdGltZW91dFxuICAgICAqL1xuICAgIGxldCBmcmVlU29ja2V0VGltZW91dCA9IHRoaXMub3B0aW9ucy5mcmVlU29ja2V0VGltZW91dDtcbiAgICBjb25zdCBzb2NrZXRBY3RpdmVUVEwgPSB0aGlzLm9wdGlvbnMuc29ja2V0QWN0aXZlVFRMO1xuICAgIGlmIChzb2NrZXRBY3RpdmVUVEwpIHtcbiAgICAgIC8vIGNoZWNrIHNvY2tldEFjdGl2ZVRUTFxuICAgICAgY29uc3QgYWxpdmVUaW1lID0gRGF0ZS5ub3coKSAtIHNvY2tldFtTT0NLRVRfQ1JFQVRFRF9USU1FXTtcbiAgICAgIGNvbnN0IGRpZmYgPSBzb2NrZXRBY3RpdmVUVEwgLSBhbGl2ZVRpbWU7XG4gICAgICBpZiAoZGlmZiA8PSAwKSB7XG4gICAgICAgIHJldHVybiBkaWZmO1xuICAgICAgfVxuICAgICAgaWYgKGZyZWVTb2NrZXRUaW1lb3V0ICYmIGRpZmYgPCBmcmVlU29ja2V0VGltZW91dCkge1xuICAgICAgICBmcmVlU29ja2V0VGltZW91dCA9IGRpZmY7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHNldCBmcmVlU29ja2V0VGltZW91dFxuICAgIGlmIChmcmVlU29ja2V0VGltZW91dCkge1xuICAgICAgLy8gc2V0IGZyZWUga2VlcGFsaXZlIHRpbWVyXG4gICAgICAvLyB0cnkgdG8gdXNlIHNvY2tldCBjdXN0b20gZnJlZVNvY2tldFRpbWVvdXQgZmlyc3QsIHN1cHBvcnQgaGVhZGVyc1sna2VlcC1hbGl2ZSddXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZS1tb2R1bGVzL3VybGxpYi9ibG9iL2I3NjA1MzAyMDkyM2Y0ZDk5YTFjOTNjZjJlMTZlMGM1YmExMGJhY2YvbGliL3VybGxpYi5qcyNMNDk4XG4gICAgICBjb25zdCBjdXN0b21GcmVlU29ja2V0VGltZW91dCA9IHNvY2tldC5mcmVlU29ja2V0VGltZW91dCB8fCBzb2NrZXQuZnJlZVNvY2tldEtlZXBBbGl2ZVRpbWVvdXQ7XG4gICAgICByZXR1cm4gY3VzdG9tRnJlZVNvY2tldFRpbWVvdXQgfHwgZnJlZVNvY2tldFRpbWVvdXQ7XG4gICAgfVxuICB9XG5cbiAga2VlcFNvY2tldEFsaXZlKHNvY2tldCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLmtlZXBTb2NrZXRBbGl2ZShzb2NrZXQpO1xuICAgIC8vIHNob3VsZCBub3Qga2VlcEFsaXZlLCBkbyBub3RoaW5nXG4gICAgaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7XG5cbiAgICBjb25zdCBjdXN0b21UaW1lb3V0ID0gdGhpcy5jYWxjU29ja2V0VGltZW91dChzb2NrZXQpO1xuICAgIGlmICh0eXBlb2YgY3VzdG9tVGltZW91dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY3VzdG9tVGltZW91dCA8PSAwKSB7XG4gICAgICBkZWJ1ZygnJXMocmVxdWVzdHM6ICVzLCBmaW5pc2hlZDogJXMpIGZyZWUgYnV0IG5lZWQgdG8gZGVzdHJveSBieSBUVEwsIHJlcXVlc3QgY291bnQgJXMsIGRpZmYgaXMgJXMnLFxuICAgICAgICBzb2NrZXRbU09DS0VUX05BTUVdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfQ09VTlRdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfRklOSVNIRURfQ09VTlRdLCBjdXN0b21UaW1lb3V0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHNvY2tldC50aW1lb3V0ICE9PSBjdXN0b21UaW1lb3V0KSB7XG4gICAgICBzb2NrZXQuc2V0VGltZW91dChjdXN0b21UaW1lb3V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBvbmx5IGNhbGwgb24gYWRkUmVxdWVzdFxuICByZXVzZVNvY2tldCguLi5hcmdzKSB7XG4gICAgLy8gcmV1c2VTb2NrZXQoc29ja2V0LCByZXEpXG4gICAgc3VwZXIucmV1c2VTb2NrZXQoLi4uYXJncyk7XG4gICAgY29uc3Qgc29ja2V0ID0gYXJnc1swXTtcbiAgICBjb25zdCByZXEgPSBhcmdzWzFdO1xuICAgIHJlcS5yZXVzZWRTb2NrZXQgPSB0cnVlO1xuICAgIGNvbnN0IGFnZW50VGltZW91dCA9IHRoaXMub3B0aW9ucy50aW1lb3V0O1xuICAgIGlmIChnZXRTb2NrZXRUaW1lb3V0KHNvY2tldCkgIT09IGFnZW50VGltZW91dCkge1xuICAgICAgLy8gcmVzZXQgdGltZW91dCBiZWZvcmUgdXNlXG4gICAgICBzb2NrZXQuc2V0VGltZW91dChhZ2VudFRpbWVvdXQpO1xuICAgICAgZGVidWcoJyVzIHJlc2V0IHRpbWVvdXQgdG8gJXNtcycsIHNvY2tldFtTT0NLRVRfTkFNRV0sIGFnZW50VGltZW91dCk7XG4gICAgfVxuICAgIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9DT1VOVF0rKztcbiAgICBkZWJ1ZygnJXMocmVxdWVzdHM6ICVzLCBmaW5pc2hlZDogJXMpIHJldXNlIG9uIGFkZFJlcXVlc3QsIHRpbWVvdXQgJXNtcycsXG4gICAgICBzb2NrZXRbU09DS0VUX05BTUVdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfQ09VTlRdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfRklOSVNIRURfQ09VTlRdLFxuICAgICAgZ2V0U29ja2V0VGltZW91dChzb2NrZXQpKTtcbiAgfVxuXG4gIFtDUkVBVEVfSURdKCkge1xuICAgIGNvbnN0IGlkID0gdGhpc1tDVVJSRU5UX0lEXSsrO1xuICAgIGlmICh0aGlzW0NVUlJFTlRfSURdID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgdGhpc1tDVVJSRU5UX0lEXSA9IDA7XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgW0lOSVRfU09DS0VUXShzb2NrZXQsIG9wdGlvbnMpIHtcbiAgICAvLyBidWdmaXggaGVyZS5cbiAgICAvLyBodHRwcyBvbiBub2RlIDgsIDEwIHdvbid0IHNldCBhZ2VudC5vcHRpb25zLnRpbWVvdXQgYnkgZGVmYXVsdFxuICAgIC8vIFRPRE86IG5lZWQgdG8gZml4IG9uIG5vZGUgaXRzZWxmXG4gICAgaWYgKG9wdGlvbnMudGltZW91dCkge1xuICAgICAgY29uc3QgdGltZW91dCA9IGdldFNvY2tldFRpbWVvdXQoc29ja2V0KTtcbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICBzb2NrZXQuc2V0VGltZW91dChvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMua2VlcEFsaXZlKSB7XG4gICAgICAvLyBEaXNhYmxlIE5hZ2xlJ3MgYWxnb3JpdGhtOiBodHRwOi8vYmxvZy5jYXVzdGlrLmNvbS8yMDEyLzA0LzA4L3NjYWxpbmctbm9kZS1qcy10by0xMDBrLWNvbmN1cnJlbnQtY29ubmVjdGlvbnMvXG4gICAgICAvLyBodHRwczovL2ZlbmdtazIuY29tL2JlbmNobWFyay9uYWdsZS1hbGdvcml0aG0tZGVsYXllZC1hY2stbW9jay5odG1sXG4gICAgICBzb2NrZXQuc2V0Tm9EZWxheSh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVTb2NrZXRDb3VudCsrO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc29ja2V0QWN0aXZlVFRMKSB7XG4gICAgICBzb2NrZXRbU09DS0VUX0NSRUFURURfVElNRV0gPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgICAvLyBkb24ndCBzaG93IHRoZSBob2xlICctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLScga2V5IHN0cmluZ1xuICAgIHNvY2tldFtTT0NLRVRfTkFNRV0gPSBgc29ja1ske3RoaXNbQ1JFQVRFX0lEXSgpfSMke29wdGlvbnMuX2FnZW50S2V5fV1gLnNwbGl0KCctLS0tLUJFR0lOJywgMSlbMF07XG4gICAgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0NPVU5UXSA9IDE7XG4gICAgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5UXSA9IDA7XG4gICAgaW5zdGFsbExpc3RlbmVycyh0aGlzLCBzb2NrZXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgY3JlYXRlQ29ubmVjdGlvbihvcHRpb25zLCBvbmNyZWF0ZSkge1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBvbk5ld0NyZWF0ZSA9IChlcnIsIHNvY2tldCkgPT4ge1xuICAgICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGlzLmNyZWF0ZVNvY2tldEVycm9yQ291bnQrKztcbiAgICAgICAgcmV0dXJuIG9uY3JlYXRlKGVycik7XG4gICAgICB9XG4gICAgICB0aGlzW0lOSVRfU09DS0VUXShzb2NrZXQsIG9wdGlvbnMpO1xuICAgICAgb25jcmVhdGUoZXJyLCBzb2NrZXQpO1xuICAgIH07XG5cbiAgICBjb25zdCBuZXdTb2NrZXQgPSBzdXBlci5jcmVhdGVDb25uZWN0aW9uKG9wdGlvbnMsIG9uTmV3Q3JlYXRlKTtcbiAgICBpZiAobmV3U29ja2V0KSBvbk5ld0NyZWF0ZShudWxsLCBuZXdTb2NrZXQpO1xuICAgIHJldHVybiBuZXdTb2NrZXQ7XG4gIH1cblxuICBnZXQgc3RhdHVzQ2hhbmdlZCgpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5jcmVhdGVTb2NrZXRDb3VudCAhPT0gdGhpcy5jcmVhdGVTb2NrZXRDb3VudExhc3RDaGVjayB8fFxuICAgICAgdGhpcy5jcmVhdGVTb2NrZXRFcnJvckNvdW50ICE9PSB0aGlzLmNyZWF0ZVNvY2tldEVycm9yQ291bnRMYXN0Q2hlY2sgfHxcbiAgICAgIHRoaXMuY2xvc2VTb2NrZXRDb3VudCAhPT0gdGhpcy5jbG9zZVNvY2tldENvdW50TGFzdENoZWNrIHx8XG4gICAgICB0aGlzLmVycm9yU29ja2V0Q291bnQgIT09IHRoaXMuZXJyb3JTb2NrZXRDb3VudExhc3RDaGVjayB8fFxuICAgICAgdGhpcy50aW1lb3V0U29ja2V0Q291bnQgIT09IHRoaXMudGltZW91dFNvY2tldENvdW50TGFzdENoZWNrIHx8XG4gICAgICB0aGlzLnJlcXVlc3RDb3VudCAhPT0gdGhpcy5yZXF1ZXN0Q291bnRMYXN0Q2hlY2s7XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlU29ja2V0Q291bnRMYXN0Q2hlY2sgPSB0aGlzLmNyZWF0ZVNvY2tldENvdW50O1xuICAgICAgdGhpcy5jcmVhdGVTb2NrZXRFcnJvckNvdW50TGFzdENoZWNrID0gdGhpcy5jcmVhdGVTb2NrZXRFcnJvckNvdW50O1xuICAgICAgdGhpcy5jbG9zZVNvY2tldENvdW50TGFzdENoZWNrID0gdGhpcy5jbG9zZVNvY2tldENvdW50O1xuICAgICAgdGhpcy5lcnJvclNvY2tldENvdW50TGFzdENoZWNrID0gdGhpcy5lcnJvclNvY2tldENvdW50O1xuICAgICAgdGhpcy50aW1lb3V0U29ja2V0Q291bnRMYXN0Q2hlY2sgPSB0aGlzLnRpbWVvdXRTb2NrZXRDb3VudDtcbiAgICAgIHRoaXMucmVxdWVzdENvdW50TGFzdENoZWNrID0gdGhpcy5yZXF1ZXN0Q291bnQ7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgZ2V0Q3VycmVudFN0YXR1cygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlU29ja2V0Q291bnQ6IHRoaXMuY3JlYXRlU29ja2V0Q291bnQsXG4gICAgICBjcmVhdGVTb2NrZXRFcnJvckNvdW50OiB0aGlzLmNyZWF0ZVNvY2tldEVycm9yQ291bnQsXG4gICAgICBjbG9zZVNvY2tldENvdW50OiB0aGlzLmNsb3NlU29ja2V0Q291bnQsXG4gICAgICBlcnJvclNvY2tldENvdW50OiB0aGlzLmVycm9yU29ja2V0Q291bnQsXG4gICAgICB0aW1lb3V0U29ja2V0Q291bnQ6IHRoaXMudGltZW91dFNvY2tldENvdW50LFxuICAgICAgcmVxdWVzdENvdW50OiB0aGlzLnJlcXVlc3RDb3VudCxcbiAgICAgIGZyZWVTb2NrZXRzOiBpbnNwZWN0KHRoaXMuZnJlZVNvY2tldHMpLFxuICAgICAgc29ja2V0czogaW5zcGVjdCh0aGlzLnNvY2tldHMpLFxuICAgICAgcmVxdWVzdHM6IGluc3BlY3QodGhpcy5yZXF1ZXN0cyksXG4gICAgfTtcbiAgfVxufVxuXG4vLyBub2RlIDggZG9uJ3QgaGFzIHRpbWVvdXQgYXR0cmlidXRlIG9uIHNvY2tldFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMjEyMDQvZmlsZXMjZGlmZi1lNmVmMDI0YzM3NzVkNzg3YzM4NDg3YTYzMDllNDkxZFI0MDhcbmZ1bmN0aW9uIGdldFNvY2tldFRpbWVvdXQoc29ja2V0KSB7XG4gIHJldHVybiBzb2NrZXQudGltZW91dCB8fCBzb2NrZXQuX2lkbGVUaW1lb3V0O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsTGlzdGVuZXJzKGFnZW50LCBzb2NrZXQsIG9wdGlvbnMpIHtcbiAgZGVidWcoJyVzIGNyZWF0ZSwgdGltZW91dCAlc21zJywgc29ja2V0W1NPQ0tFVF9OQU1FXSwgZ2V0U29ja2V0VGltZW91dChzb2NrZXQpKTtcblxuICAvLyBsaXN0ZW5lciBzb2NrZXQgZXZlbnRzOiBjbG9zZSwgdGltZW91dCwgZXJyb3IsIGZyZWVcbiAgZnVuY3Rpb24gb25GcmVlKCkge1xuICAgIC8vIGNyZWF0ZSBhbmQgc29ja2V0LmVtaXQoJ2ZyZWUnKSBsb2dpY1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvX2h0dHBfYWdlbnQuanMjTDMxMVxuICAgIC8vIG5vIHJlcSBvbiB0aGUgc29ja2V0LCBpdCBzaG91bGQgYmUgdGhlIG5ldyBzb2NrZXRcbiAgICBpZiAoIXNvY2tldC5faHR0cE1lc3NhZ2UgJiYgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0NPVU5UXSA9PT0gMSkgcmV0dXJuO1xuXG4gICAgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5UXSsrO1xuICAgIGFnZW50LnJlcXVlc3RDb3VudCsrO1xuICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgZnJlZScsXG4gICAgICBzb2NrZXRbU09DS0VUX05BTUVdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfQ09VTlRdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfRklOSVNIRURfQ09VTlRdKTtcblxuICAgIC8vIHNob3VsZCByZXVzZSBvbiBwZWRkaW5nIHJlcXVlc3RzP1xuICAgIGNvbnN0IG5hbWUgPSBhZ2VudC5nZXROYW1lKG9wdGlvbnMpO1xuICAgIGlmIChzb2NrZXQud3JpdGFibGUgJiYgYWdlbnQucmVxdWVzdHNbbmFtZV0gJiYgYWdlbnQucmVxdWVzdHNbbmFtZV0ubGVuZ3RoKSB7XG4gICAgICAvLyB3aWxsIGJlIHJldXNlIG9uIGFnZW50IGZyZWUgbGlzdGVuZXJcbiAgICAgIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9DT1VOVF0rKztcbiAgICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgd2lsbCBiZSByZXVzZSBvbiBhZ2VudCBmcmVlIGV2ZW50JyxcbiAgICAgICAgc29ja2V0W1NPQ0tFVF9OQU1FXSwgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0NPVU5UXSwgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5UXSk7XG4gICAgfVxuICB9XG4gIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG5cbiAgZnVuY3Rpb24gb25DbG9zZShpc0Vycm9yKSB7XG4gICAgZGVidWcoJyVzKHJlcXVlc3RzOiAlcywgZmluaXNoZWQ6ICVzKSBjbG9zZSwgaXNFcnJvcjogJXMnLFxuICAgICAgc29ja2V0W1NPQ0tFVF9OQU1FXSwgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0NPVU5UXSwgc29ja2V0W1NPQ0tFVF9SRVFVRVNUX0ZJTklTSEVEX0NPVU5UXSwgaXNFcnJvcik7XG4gICAgYWdlbnQuY2xvc2VTb2NrZXRDb3VudCsrO1xuICB9XG4gIHNvY2tldC5vbignY2xvc2UnLCBvbkNsb3NlKTtcblxuICAvLyBzdGFydCBzb2NrZXQgdGltZW91dCBoYW5kbGVyXG4gIGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAvLyBvblRpbWVvdXQgYW5kIGVtaXRSZXF1ZXN0VGltZW91dChfaHR0cF9jbGllbnQuanMpXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvdjEyLngvbGliL19odHRwX2NsaWVudC5qcyNMNzExXG4gICAgY29uc3QgbGlzdGVuZXJDb3VudCA9IHNvY2tldC5saXN0ZW5lcnMoJ3RpbWVvdXQnKS5sZW5ndGg7XG4gICAgLy8gbm9kZSA8PSAxMCwgZGVmYXVsdCBsaXN0ZW5lckNvdW50IGlzIDEsIG9uVGltZW91dFxuICAgIC8vIDExIDwgbm9kZSA8PSAxMiwgZGVmYXVsdCBsaXN0ZW5lckNvdW50IGlzIDIsIG9uVGltZW91dCBhbmQgZW1pdFJlcXVlc3RUaW1lb3V0XG4gICAgLy8gbm9kZSA+PSAxMywgZGVmYXVsdCBsaXN0ZW5lckNvdW50IGlzIDMsIG9uVGltZW91dCxcbiAgICAvLyAgIG9uVGltZW91dChodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zMjAwMC9maWxlcyNkaWZmLTVmN2ZiMDg1MDQxMmM2YmUxODlmYWVkZGVhNmM1MzU5UjMzMylcbiAgICAvLyAgIGFuZCBlbWl0UmVxdWVzdFRpbWVvdXRcbiAgICBjb25zdCB0aW1lb3V0ID0gZ2V0U29ja2V0VGltZW91dChzb2NrZXQpO1xuICAgIGNvbnN0IHJlcSA9IHNvY2tldC5faHR0cE1lc3NhZ2U7XG4gICAgY29uc3QgcmVxVGltZW91dExpc3RlbmVyQ291bnQgPSByZXEgJiYgcmVxLmxpc3RlbmVycygndGltZW91dCcpLmxlbmd0aCB8fCAwO1xuICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgdGltZW91dCBhZnRlciAlc21zLCBsaXN0ZW5lcnMgJXMsIGRlZmF1bHRUaW1lb3V0TGlzdGVuZXJDb3VudCAlcywgaGFzSHR0cFJlcXVlc3QgJXMsIEh0dHBSZXF1ZXN0IHRpbWVvdXRMaXN0ZW5lckNvdW50ICVzJyxcbiAgICAgIHNvY2tldFtTT0NLRVRfTkFNRV0sIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9DT1VOVF0sIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9GSU5JU0hFRF9DT1VOVF0sXG4gICAgICB0aW1lb3V0LCBsaXN0ZW5lckNvdW50LCBkZWZhdWx0VGltZW91dExpc3RlbmVyQ291bnQsICEhcmVxLCByZXFUaW1lb3V0TGlzdGVuZXJDb3VudCk7XG4gICAgaWYgKGRlYnVnLmVuYWJsZWQpIHtcbiAgICAgIGRlYnVnKCd0aW1lb3V0IGxpc3RlbmVyczogJXMnLCBzb2NrZXQubGlzdGVuZXJzKCd0aW1lb3V0JykubWFwKGYgPT4gZi5uYW1lKS5qb2luKCcsICcpKTtcbiAgICB9XG4gICAgYWdlbnQudGltZW91dFNvY2tldENvdW50Kys7XG4gICAgY29uc3QgbmFtZSA9IGFnZW50LmdldE5hbWUob3B0aW9ucyk7XG4gICAgaWYgKGFnZW50LmZyZWVTb2NrZXRzW25hbWVdICYmIGFnZW50LmZyZWVTb2NrZXRzW25hbWVdLmluZGV4T2Yoc29ja2V0KSAhPT0gLTEpIHtcbiAgICAgIC8vIGZyZWUgc29ja2V0IHRpbWVvdXQsIGRlc3Ryb3kgcXVpZXRseVxuICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgIC8vIFJlbW92ZSBpdCBmcm9tIGZyZWVTb2NrZXRzIGxpc3QgaW1tZWRpYXRlbHkgdG8gcHJldmVudCBuZXcgcmVxdWVzdHNcbiAgICAgIC8vIGZyb20gYmVpbmcgc2VudCB0aHJvdWdoIHRoaXMgc29ja2V0LlxuICAgICAgYWdlbnQucmVtb3ZlU29ja2V0KHNvY2tldCwgb3B0aW9ucyk7XG4gICAgICBkZWJ1ZygnJXMgaXMgZnJlZSwgZGVzdHJveSBxdWlldGx5Jywgc29ja2V0W1NPQ0tFVF9OQU1FXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGFueSByZXF1ZXN0IHNvY2tldCB0aW1lb3V0IGhhbmRsZXIsXG4gICAgICAvLyBhZ2VudCBuZWVkIHRvIGhhbmRsZSBzb2NrZXQgdGltZW91dCBpdHNlbGYuXG4gICAgICAvL1xuICAgICAgLy8gY3VzdG9tIHJlcXVlc3Qgc29ja2V0IHRpbWVvdXQgaGFuZGxlIGxvZ2ljIG11c3QgZm9sbG93IHRoZXNlIHJ1bGVzOlxuICAgICAgLy8gIDEuIERlc3Ryb3kgc29ja2V0IGZpcnN0XG4gICAgICAvLyAgMi4gTXVzdCBlbWl0IHNvY2tldCAnYWdlbnRSZW1vdmUnIGV2ZW50IHRlbGwgYWdlbnQgcmVtb3ZlIHNvY2tldFxuICAgICAgLy8gICAgIGZyb20gZnJlZVNvY2tldHMgbGlzdCBpbW1lZGlhdGVseS5cbiAgICAgIC8vICAgICBPdGhlcmlzZSB5b3UgbWF5IGJlIGdldCAnc29ja2V0IGhhbmcgdXAnIGVycm9yIHdoZW4gcmV1c2VcbiAgICAgIC8vICAgICBmcmVlIHNvY2tldCBhbmQgdGltZW91dCBoYXBwZW4gaW4gdGhlIHNhbWUgdGltZS5cbiAgICAgIGlmIChyZXFUaW1lb3V0TGlzdGVuZXJDb3VudCA9PT0gMCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignU29ja2V0IHRpbWVvdXQnKTtcbiAgICAgICAgZXJyb3IuY29kZSA9ICdFUlJfU09DS0VUX1RJTUVPVVQnO1xuICAgICAgICBlcnJvci50aW1lb3V0ID0gdGltZW91dDtcbiAgICAgICAgLy8gbXVzdCBtYW51YWxseSBjYWxsIHNvY2tldC5lbmQoKSBvciBzb2NrZXQuZGVzdHJveSgpIHRvIGVuZCB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgLy8gaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0LXYxMC54L2RvY3MvYXBpL25ldC5odG1sI25ldF9zb2NrZXRfc2V0dGltZW91dF90aW1lb3V0X2NhbGxiYWNrXG4gICAgICAgIHNvY2tldC5kZXN0cm95KGVycm9yKTtcbiAgICAgICAgYWdlbnQucmVtb3ZlU29ja2V0KHNvY2tldCwgb3B0aW9ucyk7XG4gICAgICAgIGRlYnVnKCclcyBkZXN0cm95IHdpdGggdGltZW91dCBlcnJvcicsIHNvY2tldFtTT0NLRVRfTkFNRV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzb2NrZXQub24oJ3RpbWVvdXQnLCBvblRpbWVvdXQpO1xuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgY29uc3QgbGlzdGVuZXJDb3VudCA9IHNvY2tldC5saXN0ZW5lcnMoJ2Vycm9yJykubGVuZ3RoO1xuICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgZXJyb3I6ICVzLCBsaXN0ZW5lckNvdW50OiAlcycsXG4gICAgICBzb2NrZXRbU09DS0VUX05BTUVdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfQ09VTlRdLCBzb2NrZXRbU09DS0VUX1JFUVVFU1RfRklOSVNIRURfQ09VTlRdLFxuICAgICAgZXJyLCBsaXN0ZW5lckNvdW50KTtcbiAgICBhZ2VudC5lcnJvclNvY2tldENvdW50Kys7XG4gICAgaWYgKGxpc3RlbmVyQ291bnQgPT09IDEpIHtcbiAgICAgIC8vIGlmIHNvY2tldCBkb24ndCBjb250YWluIGVycm9yIGV2ZW50IGhhbmRsZXIsIGRvbid0IGNhdGNoIGl0LCBlbWl0IGl0IGFnYWluXG4gICAgICBkZWJ1ZygnJXMgZW1pdCB1bmNhdWdodCBlcnJvciBldmVudCcsIHNvY2tldFtTT0NLRVRfTkFNRV0pO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgc29ja2V0LmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9XG4gIH1cbiAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuXG4gIGZ1bmN0aW9uIG9uUmVtb3ZlKCkge1xuICAgIGRlYnVnKCclcyhyZXF1ZXN0czogJXMsIGZpbmlzaGVkOiAlcykgYWdlbnRSZW1vdmUnLFxuICAgICAgc29ja2V0W1NPQ0tFVF9OQU1FXSxcbiAgICAgIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9DT1VOVF0sIHNvY2tldFtTT0NLRVRfUkVRVUVTVF9GSU5JU0hFRF9DT1VOVF0pO1xuICAgIC8vIFdlIG5lZWQgdGhpcyBmdW5jdGlvbiBmb3IgY2FzZXMgbGlrZSBIVFRQICd1cGdyYWRlJ1xuICAgIC8vIChkZWZpbmVkIGJ5IFdlYlNvY2tldHMpIHdoZXJlIHdlIG5lZWQgdG8gcmVtb3ZlIGEgc29ja2V0IGZyb20gdGhlXG4gICAgLy8gcG9vbCBiZWNhdXNlIGl0J2xsIGJlIGxvY2tlZCB1cCBpbmRlZmluaXRlbHlcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25DbG9zZSk7XG4gICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCd0aW1lb3V0Jywgb25UaW1lb3V0KTtcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25SZW1vdmUpO1xuICB9XG4gIHNvY2tldC5vbignYWdlbnRSZW1vdmUnLCBvblJlbW92ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWdlbnQ7XG5cbmZ1bmN0aW9uIGluc3BlY3Qob2JqKSB7XG4gIGNvbnN0IHJlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICByZXNba2V5XSA9IG9ialtrZXldLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgT3JpZ2luYWxIdHRwc0FnZW50ID0gcmVxdWlyZSgnaHR0cHMnKS5BZ2VudDtcbmNvbnN0IEh0dHBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKTtcbmNvbnN0IHtcbiAgSU5JVF9TT0NLRVQsXG4gIENSRUFURV9IVFRQU19DT05ORUNUSU9OLFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmNsYXNzIEh0dHBzQWdlbnQgZXh0ZW5kcyBIdHRwQWdlbnQge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmRlZmF1bHRQb3J0ID0gNDQzO1xuICAgIHRoaXMucHJvdG9jb2wgPSAnaHR0cHM6JztcbiAgICB0aGlzLm1heENhY2hlZFNlc3Npb25zID0gdGhpcy5vcHRpb25zLm1heENhY2hlZFNlc3Npb25zO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMubWF4Q2FjaGVkU2Vzc2lvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tYXhDYWNoZWRTZXNzaW9ucyA9IDEwMDtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSB7XG4gICAgICBtYXA6IHt9LFxuICAgICAgbGlzdDogW10sXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZUNvbm5lY3Rpb24ob3B0aW9ucywgb25jcmVhdGUpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW0NSRUFURV9IVFRQU19DT05ORUNUSU9OXShvcHRpb25zLCBvbmNyZWF0ZSk7XG4gICAgdGhpc1tJTklUX1NPQ0tFVF0oc29ja2V0LCBvcHRpb25zKTtcbiAgICByZXR1cm4gc29ja2V0O1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaHR0cHMuanMjTDg5XG5IdHRwc0FnZW50LnByb3RvdHlwZVtDUkVBVEVfSFRUUFNfQ09OTkVDVElPTl0gPSBPcmlnaW5hbEh0dHBzQWdlbnQucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb247XG5cbltcbiAgJ2dldE5hbWUnLFxuICAnX2dldFNlc3Npb24nLFxuICAnX2NhY2hlU2Vzc2lvbicsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQ5ODJcbiAgJ19ldmljdFNlc3Npb24nLFxuXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAodHlwZW9mIE9yaWdpbmFsSHR0cHNBZ2VudC5wcm90b3R5cGVbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIEh0dHBzQWdlbnQucHJvdG90eXBlW21ldGhvZF0gPSBPcmlnaW5hbEh0dHBzQWdlbnQucHJvdG90eXBlW21ldGhvZF07XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEh0dHBzQWdlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBIdHRwQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9hZ2VudCcpO1xubW9kdWxlLmV4cG9ydHMgPSBIdHRwQWdlbnQ7XG5tb2R1bGUuZXhwb3J0cy5IdHRwQWdlbnQgPSBIdHRwQWdlbnQ7XG5tb2R1bGUuZXhwb3J0cy5IdHRwc0FnZW50ID0gcmVxdWlyZSgnLi9saWIvaHR0cHNfYWdlbnQnKTtcbm1vZHVsZS5leHBvcnRzLmNvbnN0YW50cyA9IHJlcXVpcmUoJy4vbGliL2NvbnN0YW50cycpO1xuIiwgIi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUHJpdmF0ZURhdGFcbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge3t0eXBlOnN0cmluZ319IGV2ZW50IFRoZSBvcmlnaW5hbCBldmVudCBvYmplY3QuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXZlbnRQaGFzZSBUaGUgY3VycmVudCBldmVudCBwaGFzZS5cbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR8bnVsbH0gY3VycmVudFRhcmdldCBUaGUgY3VycmVudCBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNhbmNlbGVkIFRoZSBmbGFnIHRvIHByZXZlbnQgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3RvcHBlZCBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBpbW1lZGlhdGVTdG9wcGVkIFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24gaW1tZWRpYXRlbHkuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBUaGUgbGlzdGVuZXIgaWYgdGhlIGN1cnJlbnQgbGlzdGVuZXIgaXMgcGFzc2l2ZS4gT3RoZXJ3aXNlIHRoaXMgaXMgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lU3RhbXAgVGhlIHVuaXggdGltZS5cbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBQcml2YXRlIGRhdGEgZm9yIGV2ZW50IHdyYXBwZXJzLlxuICogQHR5cGUge1dlYWtNYXA8RXZlbnQsIFByaXZhdGVEYXRhPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHByaXZhdGVEYXRhID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIENhY2hlIGZvciB3cmFwcGVyIGNsYXNzZXMuXG4gKiBAdHlwZSB7V2Vha01hcDxPYmplY3QsIEZ1bmN0aW9uPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHdyYXBwZXJzID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIEdldCBwcml2YXRlIGRhdGEuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IHRvIGdldCBwcml2YXRlIGRhdGEuXG4gKiBAcmV0dXJucyB7UHJpdmF0ZURhdGF9IFRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIGV2ZW50LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGQoZXZlbnQpIHtcbiAgICBjb25zdCByZXR2ID0gcHJpdmF0ZURhdGEuZ2V0KGV2ZW50KVxuICAgIGNvbnNvbGUuYXNzZXJ0KFxuICAgICAgICByZXR2ICE9IG51bGwsXG4gICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50IG9iamVjdCwgYnV0IGdvdFwiLFxuICAgICAgICBldmVudFxuICAgIClcbiAgICByZXR1cm4gcmV0dlxufVxuXG4vKipcbiAqIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jc2V0LXRoZS1jYW5jZWxlZC1mbGFnXG4gKiBAcGFyYW0gZGF0YSB7UHJpdmF0ZURhdGF9IHByaXZhdGUgZGF0YS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FuY2VsRmxhZyhkYXRhKSB7XG4gICAgaWYgKGRhdGEucGFzc2l2ZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5hYmxlIHRvIHByZXZlbnREZWZhdWx0IGluc2lkZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVyIGludm9jYXRpb24uXCIsXG4gICAgICAgICAgICAgICAgZGF0YS5wYXNzaXZlTGlzdGVuZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFkYXRhLmV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZGF0YS5jYW5jZWxlZCA9IHRydWVcbiAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQucHJldmVudERlZmF1bHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhLmV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1ldmVudFxuICogQHByaXZhdGVcbiAqL1xuLyoqXG4gKiBUaGUgZXZlbnQgd3JhcHBlci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCBvZiB0aGlzIGRpc3BhdGNoaW5nLlxuICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgcHJpdmF0ZURhdGEuc2V0KHRoaXMsIHtcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBldmVudFBoYXNlOiAyLFxuICAgICAgICBjdXJyZW50VGFyZ2V0OiBldmVudFRhcmdldCxcbiAgICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgaW1tZWRpYXRlU3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHBhc3NpdmVMaXN0ZW5lcjogbnVsbCxcbiAgICAgICAgdGltZVN0YW1wOiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKSxcbiAgICB9KVxuXG4gICAgLy8gaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jVW5mb3JnZWFibGVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJpc1RydXN0ZWRcIiwgeyB2YWx1ZTogZmFsc2UsIGVudW1lcmFibGU6IHRydWUgfSlcblxuICAgIC8vIERlZmluZSBhY2Nlc3NvcnNcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnQpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICAgICAgaWYgKCEoa2V5IGluIHRoaXMpKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBkZWZpbmVSZWRpcmVjdERlc2NyaXB0b3Ioa2V5KSlcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gU2hvdWxkIGJlIGVudW1lcmFibGUsIGJ1dCBjbGFzcyBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZS5cbkV2ZW50LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudC50eXBlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IHRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRUYXJnZXQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5jdXJyZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtFdmVudFRhcmdldFtdfSBUaGUgY29tcG9zZWQgcGF0aCBvZiB0aGlzIGV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBvc2VkUGF0aCgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IHBkKHRoaXMpLmN1cnJlbnRUYXJnZXRcbiAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtjdXJyZW50VGFyZ2V0XVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBOT05FLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IE5PTkUoKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIENBUFRVUklOR19QSEFTRS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBDQVBUVVJJTkdfUEhBU0UoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEFUX1RBUkdFVC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBBVF9UQVJHRVQoKSB7XG4gICAgICAgIHJldHVybiAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEJVQkJMSU5HX1BIQVNFLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IEJVQkJMSU5HX1BIQVNFKCkge1xuICAgICAgICByZXR1cm4gM1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgZXZlbnRQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50UGhhc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKVxuXG4gICAgICAgIGRhdGEuc3RvcHBlZCA9IHRydWVcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKVxuXG4gICAgICAgIGRhdGEuc3RvcHBlZCA9IHRydWVcbiAgICAgICAgZGF0YS5pbW1lZGlhdGVTdG9wcGVkID0gdHJ1ZVxuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBiZSBidWJibGluZy5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgYnViYmxlcygpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGQodGhpcykuZXZlbnQuYnViYmxlcylcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgY2FuY2VsYWJsZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgY2FuY2VsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGQodGhpcykuZXZlbnQuY2FuY2VsYWJsZSlcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VsIHRoaXMgZXZlbnQuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHNldENhbmNlbEZsYWcocGQodGhpcykpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdFByZXZlbnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmNhbmNlbGVkXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGNvbXBvc2VkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBjb21wb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGQodGhpcykuZXZlbnQuY29tcG9zZWQpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bml4IHRpbWUgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCB0aW1lU3RhbXAoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS50aW1lU3RhbXBcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBzcmNFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gc3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBjYW5jZWxCdWJibGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5zdG9wcGVkXG4gICAgfSxcbiAgICBzZXQgY2FuY2VsQnViYmxlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKVxuXG4gICAgICAgIGRhdGEuc3RvcHBlZCA9IHRydWVcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LmNhbmNlbEJ1YmJsZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCByZXR1cm5WYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuICFwZCh0aGlzKS5jYW5jZWxlZFxuICAgIH0sXG4gICAgc2V0IHJldHVyblZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHNldENhbmNlbEZsYWcocGQodGhpcykpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGlzIGV2ZW50IG9iamVjdC4gQnV0IGRvIG5vdGhpbmcgdW5kZXIgZXZlbnQgZGlzcGF0Y2hpbmcuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYnViYmxlcz1mYWxzZV0gVGhlIGZsYWcgdG8gYmUgcG9zc2libGUgdG8gYnViYmxlIHVwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NhbmNlbGFibGU9ZmFsc2VdIFRoZSBmbGFnIHRvIGJlIHBvc3NpYmxlIHRvIGNhbmNlbC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGluaXRFdmVudCgpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9LFxufVxuXG4vLyBgY29uc3RydWN0b3JgIGlzIG5vdCBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEV2ZW50LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbn0pXG5cbi8vIEVuc3VyZSBgZXZlbnQgaW5zdGFuY2VvZiB3aW5kb3cuRXZlbnRgIGlzIGB0cnVlYC5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuRXZlbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXZlbnQucHJvdG90eXBlLCB3aW5kb3cuRXZlbnQucHJvdG90eXBlKVxuXG4gICAgLy8gTWFrZSBhc3NvY2lhdGlvbiBmb3Igd3JhcHBlcnMuXG4gICAgd3JhcHBlcnMuc2V0KHdpbmRvdy5FdmVudC5wcm90b3R5cGUsIEV2ZW50KVxufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byByZWRpcmVjdCBhIGdpdmVuIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBQcm9wZXJ0eSBuYW1lIHRvIGRlZmluZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge1Byb3BlcnR5RGVzY3JpcHRvcn0gVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gcmVkaXJlY3QgdGhlIHByb3BlcnR5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFtrZXldXG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgcGQodGhpcykuZXZlbnRba2V5XSA9IHZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGNhbGwgYSBnaXZlbiBtZXRob2QgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUgdG8gZGVmaW5lIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byBjYWxsIHRoZSBtZXRob2QgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGQodGhpcykuZXZlbnRcbiAgICAgICAgICAgIHJldHVybiBldmVudFtrZXldLmFwcGx5KGV2ZW50LCBhcmd1bWVudHMpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lIG5ldyB3cmFwcGVyIGNsYXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gQmFzZUV2ZW50IFRoZSBiYXNlIHdyYXBwZXIgY2xhc3MuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIHByb3RvdHlwZSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSBkZWZpbmVkIHdyYXBwZXIgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVXcmFwcGVyKEJhc2VFdmVudCwgcHJvdG8pIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvdG8pXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCYXNlRXZlbnRcbiAgICB9XG5cbiAgICAvKiogQ3VzdG9tRXZlbnQgKi9cbiAgICBmdW5jdGlvbiBDdXN0b21FdmVudChldmVudFRhcmdldCwgZXZlbnQpIHtcbiAgICAgICAgQmFzZUV2ZW50LmNhbGwodGhpcywgZXZlbnRUYXJnZXQsIGV2ZW50KVxuICAgIH1cblxuICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogQ3VzdG9tRXZlbnQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICB9KVxuXG4gICAgLy8gRGVmaW5lIGFjY2Vzc29ycy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBpZiAoIShrZXkgaW4gQmFzZUV2ZW50LnByb3RvdHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBrZXkpXG4gICAgICAgICAgICBjb25zdCBpc0Z1bmMgPSB0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgQ3VzdG9tRXZlbnQucHJvdG90eXBlLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBpc0Z1bmNcbiAgICAgICAgICAgICAgICAgICAgPyBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpXG4gICAgICAgICAgICAgICAgICAgIDogZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSlcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBDdXN0b21FdmVudFxufVxuXG4vKipcbiAqIEdldCB0aGUgd3JhcHBlciBjbGFzcyBvZiBhIGdpdmVuIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgcHJvdG90eXBlIG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byBnZXQgaXRzIHdyYXBwZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSB3cmFwcGVyIGNsYXNzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0V3JhcHBlcihwcm90bykge1xuICAgIGlmIChwcm90byA9PSBudWxsIHx8IHByb3RvID09PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgICAgIHJldHVybiBFdmVudFxuICAgIH1cblxuICAgIGxldCB3cmFwcGVyID0gd3JhcHBlcnMuZ2V0KHByb3RvKVxuICAgIGlmICh3cmFwcGVyID09IG51bGwpIHtcbiAgICAgICAgd3JhcHBlciA9IGRlZmluZVdyYXBwZXIoZ2V0V3JhcHBlcihPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pKSwgcHJvdG8pXG4gICAgICAgIHdyYXBwZXJzLnNldChwcm90bywgd3JhcHBlcilcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXJcbn1cblxuLyoqXG4gKiBXcmFwIGEgZ2l2ZW4gZXZlbnQgdG8gbWFuYWdlbWVudCBhIGRpc3BhdGNoaW5nLlxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCBvZiB0aGlzIGRpc3BhdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IFRoZSBldmVudCB0byB3cmFwLlxuICogQHJldHVybnMge0V2ZW50fSBUaGUgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgY29uc3QgV3JhcHBlciA9IGdldFdyYXBwZXIoT2JqZWN0LmdldFByb3RvdHlwZU9mKGV2ZW50KSlcbiAgICByZXR1cm4gbmV3IFdyYXBwZXIoZXZlbnRUYXJnZXQsIGV2ZW50KVxufVxuXG4vKipcbiAqIEdldCB0aGUgaW1tZWRpYXRlU3RvcHBlZCBmbGFnIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gZ2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24gaW1tZWRpYXRlbHkuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdG9wcGVkKGV2ZW50KSB7XG4gICAgcmV0dXJuIHBkKGV2ZW50KS5pbW1lZGlhdGVTdG9wcGVkXG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IGV2ZW50IHBoYXNlIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50UGhhc2UgTmV3IGV2ZW50IHBoYXNlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RXZlbnRQaGFzZShldmVudCwgZXZlbnRQaGFzZSkge1xuICAgIHBkKGV2ZW50KS5ldmVudFBoYXNlID0gZXZlbnRQaGFzZVxufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCB0YXJnZXQgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fG51bGx9IGN1cnJlbnRUYXJnZXQgTmV3IGN1cnJlbnQgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q3VycmVudFRhcmdldChldmVudCwgY3VycmVudFRhcmdldCkge1xuICAgIHBkKGV2ZW50KS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldFxufVxuXG4vKipcbiAqIFNldCBhIHBhc3NpdmUgbGlzdGVuZXIgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBOZXcgcGFzc2l2ZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBhc3NpdmVMaXN0ZW5lcihldmVudCwgcGFzc2l2ZUxpc3RlbmVyKSB7XG4gICAgcGQoZXZlbnQpLnBhc3NpdmVMaXN0ZW5lciA9IHBhc3NpdmVMaXN0ZW5lclxufVxuIiwgImltcG9ydCB7XG4gICAgaXNTdG9wcGVkLFxuICAgIHNldEN1cnJlbnRUYXJnZXQsXG4gICAgc2V0RXZlbnRQaGFzZSxcbiAgICBzZXRQYXNzaXZlTGlzdGVuZXIsXG4gICAgd3JhcEV2ZW50LFxufSBmcm9tIFwiLi9ldmVudC5tanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExpc3RlbmVyTm9kZVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEBwcm9wZXJ0eSB7MXwyfDN9IGxpc3RlbmVyVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXNzaXZlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9uY2VcbiAqIEBwcm9wZXJ0eSB7TGlzdGVuZXJOb2RlfG51bGx9IG5leHRcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBAdHlwZSB7V2Vha01hcDxvYmplY3QsIE1hcDxzdHJpbmcsIExpc3RlbmVyTm9kZT4+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbGlzdGVuZXJzTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBMaXN0ZW5lciB0eXBlc1xuY29uc3QgQ0FQVFVSRSA9IDFcbmNvbnN0IEJVQkJMRSA9IDJcbmNvbnN0IEFUVFJJQlVURSA9IDNcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gdmFsdWUgaXMgYW4gb2JqZWN0IG9yIG5vdC5cbiAqIEBwYXJhbSB7YW55fSB4IFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QoeCkge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiIC8vZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxufVxuXG4vKipcbiAqIEdldCBsaXN0ZW5lcnMuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBldmVudFRhcmdldCBUaGUgZXZlbnQgdGFyZ2V0IHRvIGdldC5cbiAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBMaXN0ZW5lck5vZGU+fSBUaGUgbGlzdGVuZXJzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0TGlzdGVuZXJzKGV2ZW50VGFyZ2V0KSB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gbGlzdGVuZXJzTWFwLmdldChldmVudFRhcmdldClcbiAgICBpZiAobGlzdGVuZXJzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50VGFyZ2V0IG9iamVjdCwgYnV0IGdvdCBhbm90aGVyIHZhbHVlLlwiXG4gICAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGxpc3RlbmVyc1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIGV2ZW50IGF0dHJpYnV0ZSBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byBnZXQgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKVxuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSlcbiAgICAgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5saXN0ZW5lclR5cGUgPT09IEFUVFJJQlVURSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5saXN0ZW5lclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuXG4gICAgICAgIHNldChsaXN0ZW5lcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiICYmICFpc09iamVjdChsaXN0ZW5lcikpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IG51bGwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpXG5cbiAgICAgICAgICAgIC8vIFRyYXZlcnNlIHRvIHRoZSB0YWlsIHdoaWxlIHJlbW92aW5nIG9sZCB2YWx1ZS5cbiAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbFxuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSlcbiAgICAgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5saXN0ZW5lclR5cGUgPT09IEFUVFJJQlVURSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgb2xkIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbm9kZS5uZXh0KVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gbm9kZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIG5ldyB2YWx1ZS5cbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lclR5cGU6IEFUVFJJQlVURSxcbiAgICAgICAgICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9uY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJldiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbmV3Tm9kZSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXdOb2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIERlZmluZSBhbiBldmVudCBhdHRyaWJ1dGUgKGUuZy4gYGV2ZW50VGFyZ2V0Lm9uY2xpY2tgKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFRhcmdldFByb3RvdHlwZSBUaGUgZXZlbnQgdGFyZ2V0IHByb3RvdHlwZSB0byBkZWZpbmUgYW4gZXZlbnQgYXR0cmJpdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGRlZmluZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBkZWZpbmVFdmVudEF0dHJpYnV0ZShldmVudFRhcmdldFByb3RvdHlwZSwgZXZlbnROYW1lKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICBldmVudFRhcmdldFByb3RvdHlwZSxcbiAgICAgICAgYG9uJHtldmVudE5hbWV9YCxcbiAgICAgICAgZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSlcbiAgICApXG59XG5cbi8qKlxuICogRGVmaW5lIGEgY3VzdG9tIEV2ZW50VGFyZ2V0IHdpdGggZXZlbnQgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGV2ZW50TmFtZXMgRXZlbnQgbmFtZXMgZm9yIGV2ZW50IGF0dHJpYnV0ZXMuXG4gKiBAcmV0dXJucyB7RXZlbnRUYXJnZXR9IFRoZSBjdXN0b20gRXZlbnRUYXJnZXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDdXN0b21FdmVudFRhcmdldChldmVudE5hbWVzKSB7XG4gICAgLyoqIEN1c3RvbUV2ZW50VGFyZ2V0ICovXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnRUYXJnZXQoKSB7XG4gICAgICAgIEV2ZW50VGFyZ2V0LmNhbGwodGhpcylcbiAgICB9XG5cbiAgICBDdXN0b21FdmVudFRhcmdldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50VGFyZ2V0LnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IEN1c3RvbUV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSlcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnROYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBkZWZpbmVFdmVudEF0dHJpYnV0ZShDdXN0b21FdmVudFRhcmdldC5wcm90b3R5cGUsIGV2ZW50TmFtZXNbaV0pXG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50VGFyZ2V0XG59XG5cbi8qKlxuICogRXZlbnRUYXJnZXQuXG4gKlxuICogLSBUaGlzIGlzIGNvbnN0cnVjdG9yIGlmIG5vIGFyZ3VtZW50cy5cbiAqIC0gVGhpcyBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBDdXN0b21FdmVudFRhcmdldCBjb25zdHJ1Y3RvciBpZiB0aGVyZSBhcmUgYXJndW1lbnRzLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICpcbiAqICAgICBjbGFzcyBBIGV4dGVuZHMgRXZlbnRUYXJnZXQge31cbiAqICAgICBjbGFzcyBCIGV4dGVuZHMgRXZlbnRUYXJnZXQoXCJtZXNzYWdlXCIpIHt9XG4gKiAgICAgY2xhc3MgQyBleHRlbmRzIEV2ZW50VGFyZ2V0KFwibWVzc2FnZVwiLCBcImVycm9yXCIpIHt9XG4gKiAgICAgY2xhc3MgRCBleHRlbmRzIEV2ZW50VGFyZ2V0KFtcIm1lc3NhZ2VcIiwgXCJlcnJvclwiXSkge31cbiAqL1xuZnVuY3Rpb24gRXZlbnRUYXJnZXQoKSB7XG4gICAgLyplc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRXZlbnRUYXJnZXQpIHtcbiAgICAgICAgbGlzdGVuZXJzTWFwLnNldCh0aGlzLCBuZXcgTWFwKCkpXG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZUN1c3RvbUV2ZW50VGFyZ2V0KGFyZ3VtZW50c1swXSlcbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0eXBlc1tpXSA9IGFyZ3VtZW50c1tpXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZpbmVDdXN0b21FdmVudFRhcmdldCh0eXBlcylcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKVxuICAgIC8qZXNsaW50LWVuYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xufVxuXG4vLyBTaG91bGQgYmUgZW51bWVyYWJsZSwgYnV0IGNsYXNzIG1ldGhvZHMgYXJlIG5vdCBlbnVtZXJhYmxlLlxuRXZlbnRUYXJnZXQucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGdpdmVuIGxpc3RlbmVyIHRvIHRoaXMgZXZlbnQgdGFyZ2V0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciB0byBhZGQuXG4gICAgICogQHBhcmFtIHtib29sZWFufHtjYXB0dXJlPzpib29sZWFuLHBhc3NpdmU/OmJvb2xlYW4sb25jZT86Ym9vbGVhbn19IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBmb3IgdGhpcyBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIiAmJiAhaXNPYmplY3QobGlzdGVuZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiJ2xpc3RlbmVyJyBzaG91bGQgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QuXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcylcbiAgICAgICAgY29uc3Qgb3B0aW9uc0lzT2JqID0gaXNPYmplY3Qob3B0aW9ucylcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IG9wdGlvbnNJc09ialxuICAgICAgICAgICAgPyBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSlcbiAgICAgICAgICAgIDogQm9vbGVhbihvcHRpb25zKVxuICAgICAgICBjb25zdCBsaXN0ZW5lclR5cGUgPSBjYXB0dXJlID8gQ0FQVFVSRSA6IEJVQkJMRVxuICAgICAgICBjb25zdCBuZXdOb2RlID0ge1xuICAgICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgICBsaXN0ZW5lclR5cGUsXG4gICAgICAgICAgICBwYXNzaXZlOiBvcHRpb25zSXNPYmogJiYgQm9vbGVhbihvcHRpb25zLnBhc3NpdmUpLFxuICAgICAgICAgICAgb25jZTogb3B0aW9uc0lzT2JqICYmIEJvb2xlYW4ob3B0aW9ucy5vbmNlKSxcbiAgICAgICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgaXQgYXMgdGhlIGZpcnN0IG5vZGUgaWYgdGhlIGZpcnN0IG5vZGUgaXMgbnVsbC5cbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSlcbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ld05vZGUpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYXZlcnNlIHRvIHRoZSB0YWlsIHdoaWxlIGNoZWNraW5nIGR1cGxpY2F0aW9uLi5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsXG4gICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyID09PSBsaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXJUeXBlID09PSBsaXN0ZW5lclR5cGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFNob3VsZCBpZ25vcmUgZHVwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2ID0gbm9kZVxuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGl0LlxuICAgICAgICBwcmV2Lm5leHQgPSBuZXdOb2RlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIGdpdmVuIGxpc3RlbmVyIGZyb20gdGhpcyBldmVudCB0YXJnZXQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58e2NhcHR1cmU/OmJvb2xlYW4scGFzc2l2ZT86Ym9vbGVhbixvbmNlPzpib29sZWFufX0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGZvciB0aGlzIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcylcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IGlzT2JqZWN0KG9wdGlvbnMpXG4gICAgICAgICAgICA/IEJvb2xlYW4ob3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMpXG4gICAgICAgIGNvbnN0IGxpc3RlbmVyVHlwZSA9IGNhcHR1cmUgPyBDQVBUVVJFIDogQlVCQkxFXG5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsXG4gICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpXG4gICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyID09PSBsaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXJUeXBlID09PSBsaXN0ZW5lclR5cGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5vZGUubmV4dFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmV2ID0gbm9kZVxuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3BhdGNoIGEgZ2l2ZW4gZXZlbnQuXG4gICAgICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgZXZlbnQgdG8gZGlzcGF0Y2guXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGBmYWxzZWAgaWYgY2FuY2VsZWQuXG4gICAgICovXG4gICAgZGlzcGF0Y2hFdmVudChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCB8fCB0eXBlb2YgZXZlbnQudHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJldmVudC50eXBlXCIgc2hvdWxkIGJlIGEgc3RyaW5nLicpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBsaXN0ZW5lcnMgYXJlbid0IHJlZ2lzdGVyZWQsIHRlcm1pbmF0ZS5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpXG4gICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGV2ZW50LnR5cGVcbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSlcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXdyaXRlIHNldmVyYWwgcHJvcGVydGllcywgc28gd3JhcCBvYmplY3QuXG4gICAgICAgIGNvbnN0IHdyYXBwZWRFdmVudCA9IHdyYXBFdmVudCh0aGlzLCBldmVudClcblxuICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgcHJvY2VzcyBjYXB0dXJpbmcgcGhhc2UgYW5kIGJ1YmJsaW5nIHBoYXNlLlxuICAgICAgICAvLyBUaGlzIGlzbid0IHBhcnRpY2lwYXRpbmcgaW4gYSB0cmVlLlxuICAgICAgICBsZXQgcHJldiA9IG51bGxcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGlzdGVuZXIgaWYgaXQncyBvbmNlXG4gICAgICAgICAgICBpZiAobm9kZS5vbmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGV2ZW50TmFtZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXYgPSBub2RlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGwgdGhpcyBsaXN0ZW5lclxuICAgICAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgIHdyYXBwZWRFdmVudCxcbiAgICAgICAgICAgICAgICBub2RlLnBhc3NpdmUgPyBub2RlLmxpc3RlbmVyIDogbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLmxpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyLmNhbGwodGhpcywgd3JhcHBlZEV2ZW50KVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSAhPT0gQVRUUklCVVRFICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG5vZGUubGlzdGVuZXIuaGFuZGxlRXZlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lci5oYW5kbGVFdmVudCh3cmFwcGVkRXZlbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJyZWFrIGlmIGBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25gIHdhcyBjYWxsZWQuXG4gICAgICAgICAgICBpZiAoaXNTdG9wcGVkKHdyYXBwZWRFdmVudCkpIHtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0XG4gICAgICAgIH1cbiAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKHdyYXBwZWRFdmVudCwgbnVsbClcbiAgICAgICAgc2V0RXZlbnRQaGFzZSh3cmFwcGVkRXZlbnQsIDApXG4gICAgICAgIHNldEN1cnJlbnRUYXJnZXQod3JhcHBlZEV2ZW50LCBudWxsKVxuXG4gICAgICAgIHJldHVybiAhd3JhcHBlZEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICB9LFxufVxuXG4vLyBgY29uc3RydWN0b3JgIGlzIG5vdCBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEV2ZW50VGFyZ2V0LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbn0pXG5cbi8vIEVuc3VyZSBgZXZlbnRUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuRXZlbnRUYXJnZXRgIGlzIGB0cnVlYC5cbmlmIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgdHlwZW9mIHdpbmRvdy5FdmVudFRhcmdldCAhPT0gXCJ1bmRlZmluZWRcIlxuKSB7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgd2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZSlcbn1cblxuZXhwb3J0IHsgZGVmaW5lRXZlbnRBdHRyaWJ1dGUsIEV2ZW50VGFyZ2V0IH1cbmV4cG9ydCBkZWZhdWx0IEV2ZW50VGFyZ2V0XG4iLCAiaW1wb3J0IHtcbiAgICAvLyBFdmVudCxcbiAgICBFdmVudFRhcmdldCxcbiAgICAvLyBUeXBlLFxuICAgIGRlZmluZUV2ZW50QXR0cmlidXRlLFxufSBmcm9tIFwiZXZlbnQtdGFyZ2V0LXNoaW1cIlxuXG4vLyBLbm93biBMaW1pdGF0aW9uXG4vLyAgIFVzZSBgYW55YCBiZWNhdXNlIHRoZSB0eXBlIG9mIGBBYm9ydFNpZ25hbGAgaW4gYGxpYi5kb20uZC50c2AgaXMgd3JvbmcgYW5kXG4vLyAgIHRvIG1ha2UgYXNzaWduYWJsZSBvdXIgYEFib3J0U2lnbmFsYCBpbnRvIHRoYXQuXG4vLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVFNKUy1saWItZ2VuZXJhdG9yL3B1bGwvNjIzXG50eXBlIEV2ZW50cyA9IHtcbiAgICBhYm9ydDogYW55IC8vIEV2ZW50ICYgVHlwZTxcImFib3J0XCI+XG59XG50eXBlIEV2ZW50QXR0cmlidXRlcyA9IHtcbiAgICBvbmFib3J0OiBhbnkgLy8gRXZlbnQgJiBUeXBlPFwiYWJvcnRcIj5cbn1cblxuLyoqXG4gKiBUaGUgc2lnbmFsIGNsYXNzLlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0c2lnbmFsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFib3J0U2lnbmFsIGV4dGVuZHMgRXZlbnRUYXJnZXQ8RXZlbnRzLCBFdmVudEF0dHJpYnV0ZXM+IHtcbiAgICAvKipcbiAgICAgKiBBYm9ydFNpZ25hbCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBYm9ydFNpZ25hbCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHlcIilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGBBYm9ydFNpZ25hbGAncyBgQWJvcnRDb250cm9sbGVyYCBoYXMgc2lnbmFsZWQgdG8gYWJvcnQsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFib3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGFib3J0ZWQgPSBhYm9ydGVkRmxhZ3MuZ2V0KHRoaXMpXG4gICAgICAgIGlmICh0eXBlb2YgYWJvcnRlZCAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYEV4cGVjdGVkICd0aGlzJyB0byBiZSBhbiAnQWJvcnRTaWduYWwnIG9iamVjdCwgYnV0IGdvdCAke1xuICAgICAgICAgICAgICAgICAgICB0aGlzID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdGhpc1xuICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYm9ydGVkXG4gICAgfVxufVxuZGVmaW5lRXZlbnRBdHRyaWJ1dGUoQWJvcnRTaWduYWwucHJvdG90eXBlLCBcImFib3J0XCIpXG5cbi8qKlxuICogQ3JlYXRlIGFuIEFib3J0U2lnbmFsIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFib3J0U2lnbmFsKCk6IEFib3J0U2lnbmFsIHtcbiAgICBjb25zdCBzaWduYWwgPSBPYmplY3QuY3JlYXRlKEFib3J0U2lnbmFsLnByb3RvdHlwZSlcbiAgICBFdmVudFRhcmdldC5jYWxsKHNpZ25hbClcbiAgICBhYm9ydGVkRmxhZ3Muc2V0KHNpZ25hbCwgZmFsc2UpXG4gICAgcmV0dXJuIHNpZ25hbFxufVxuXG4vKipcbiAqIEFib3J0IGEgZ2l2ZW4gc2lnbmFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJvcnRTaWduYWwoc2lnbmFsOiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICAgIGlmIChhYm9ydGVkRmxhZ3MuZ2V0KHNpZ25hbCkgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFib3J0ZWRGbGFncy5zZXQoc2lnbmFsLCB0cnVlKVxuICAgIHNpZ25hbC5kaXNwYXRjaEV2ZW50PFwiYWJvcnRcIj4oeyB0eXBlOiBcImFib3J0XCIgfSlcbn1cblxuLyoqXG4gKiBBYm9ydGVkIGZsYWcgZm9yIGVhY2ggaW5zdGFuY2VzLlxuICovXG5jb25zdCBhYm9ydGVkRmxhZ3MgPSBuZXcgV2Vha01hcDxBYm9ydFNpZ25hbCwgYm9vbGVhbj4oKVxuXG4vLyBQcm9wZXJ0aWVzIHNob3VsZCBiZSBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQWJvcnRTaWduYWwucHJvdG90eXBlLCB7XG4gICAgYWJvcnRlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG59KVxuXG4vLyBgdG9TdHJpbmcoKWAgc2hvdWxkIHJldHVybiBgXCJbb2JqZWN0IEFib3J0U2lnbmFsXVwiYFxuaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBcInN5bWJvbFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFib3J0U2lnbmFsLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFwiQWJvcnRTaWduYWxcIixcbiAgICB9KVxufVxuIiwgImltcG9ydCBBYm9ydFNpZ25hbCwgeyBhYm9ydFNpZ25hbCwgY3JlYXRlQWJvcnRTaWduYWwgfSBmcm9tIFwiLi9hYm9ydC1zaWduYWxcIlxuXG4vKipcbiAqIFRoZSBBYm9ydENvbnRyb2xsZXIuXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jYWJvcnRjb250cm9sbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFib3J0Q29udHJvbGxlciB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGlzIGNvbnRyb2xsZXIuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzaWduYWxzLnNldCh0aGlzLCBjcmVhdGVBYm9ydFNpZ25hbCgpKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBBYm9ydFNpZ25hbGAgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNpZ25hbCgpOiBBYm9ydFNpZ25hbCB7XG4gICAgICAgIHJldHVybiBnZXRTaWduYWwodGhpcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBYm9ydCBhbmQgc2lnbmFsIHRvIGFueSBvYnNlcnZlcnMgdGhhdCB0aGUgYXNzb2NpYXRlZCBhY3Rpdml0eSBpcyB0byBiZSBhYm9ydGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYm9ydCgpOiB2b2lkIHtcbiAgICAgICAgYWJvcnRTaWduYWwoZ2V0U2lnbmFsKHRoaXMpKVxuICAgIH1cbn1cblxuLyoqXG4gKiBBc3NvY2lhdGVkIHNpZ25hbHMuXG4gKi9cbmNvbnN0IHNpZ25hbHMgPSBuZXcgV2Vha01hcDxBYm9ydENvbnRyb2xsZXIsIEFib3J0U2lnbmFsPigpXG5cbi8qKlxuICogR2V0IHRoZSBhc3NvY2lhdGVkIHNpZ25hbCBvZiBhIGdpdmVuIGNvbnRyb2xsZXIuXG4gKi9cbmZ1bmN0aW9uIGdldFNpZ25hbChjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpOiBBYm9ydFNpZ25hbCB7XG4gICAgY29uc3Qgc2lnbmFsID0gc2lnbmFscy5nZXQoY29udHJvbGxlcilcbiAgICBpZiAoc2lnbmFsID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBFeHBlY3RlZCAndGhpcycgdG8gYmUgYW4gJ0Fib3J0Q29udHJvbGxlcicgb2JqZWN0LCBidXQgZ290ICR7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlciA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIGNvbnRyb2xsZXJcbiAgICAgICAgICAgIH1gLFxuICAgICAgICApXG4gICAgfVxuICAgIHJldHVybiBzaWduYWxcbn1cblxuLy8gUHJvcGVydGllcyBzaG91bGQgYmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFib3J0Q29udHJvbGxlci5wcm90b3R5cGUsIHtcbiAgICBzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGFib3J0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcbn0pXG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gXCJzeW1ib2xcIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogXCJBYm9ydENvbnRyb2xsZXJcIixcbiAgICB9KVxufVxuXG5leHBvcnQgeyBBYm9ydENvbnRyb2xsZXIsIEFib3J0U2lnbmFsIH1cbiIsICIvKiEgbm9kZS1kb21leGNlcHRpb24uIE1JVCBMaWNlbnNlLiBKaW1teSBXXHUwMEU0cnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuXG5pZiAoIWdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBNZXNzYWdlQ2hhbm5lbCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKSxcbiAgICBwb3J0ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCkucG9ydDEsXG4gICAgYWIgPSBuZXcgQXJyYXlCdWZmZXIoKVxuICAgIHBvcnQucG9zdE1lc3NhZ2UoYWIsIFthYiwgYWJdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIuY29uc3RydWN0b3IubmFtZSA9PT0gJ0RPTUV4Y2VwdGlvbicgJiYgKFxuICAgICAgZ2xvYmFsVGhpcy5ET01FeGNlcHRpb24gPSBlcnIuY29uc3RydWN0b3JcbiAgICApXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzLkRPTUV4Y2VwdGlvblxuIiwgImNvbnN0IGdldFR5cGUgPSAodmFsdWUpID0+IChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwcCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgaWYgKHBwID09PSBudWxsIHx8IHBwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IEN0b3IgPSBwcC5jb25zdHJ1Y3RvciAmJiBwcC5jb25zdHJ1Y3Rvci50b1N0cmluZygpO1xuICAgIHJldHVybiBDdG9yID09PSBPYmplY3QudG9TdHJpbmcoKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGlzUGxhaW5PYmplY3Q7XG4iLCAidmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9GaWxlRnJvbVBhdGhfcGF0aCwgX0ZpbGVGcm9tUGF0aF9zdGFydDtcbmltcG9ydCB7IHN0YXRTeW5jLCBjcmVhdGVSZWFkU3RyZWFtLCBwcm9taXNlcyBhcyBmcyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IERPTUV4Y2VwdGlvbiBmcm9tIFwibm9kZS1kb21leGNlcHRpb25cIjtcbmltcG9ydCB7IEZpbGUgfSBmcm9tIFwiLi9GaWxlLmpzXCI7XG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tIFwiLi9pc1BsYWluT2JqZWN0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pc0ZpbGUuanNcIjtcbmNvbnN0IE1FU1NBR0UgPSBcIlRoZSByZXF1ZXN0ZWQgZmlsZSBjb3VsZCBub3QgYmUgcmVhZCwgXCJcbiAgICArIFwidHlwaWNhbGx5IGR1ZSB0byBwZXJtaXNzaW9uIHByb2JsZW1zIHRoYXQgaGF2ZSBvY2N1cnJlZCBhZnRlciBhIHJlZmVyZW5jZSBcIlxuICAgICsgXCJ0byBhIGZpbGUgd2FzIGFjcXVpcmVkLlwiO1xuY2xhc3MgRmlsZUZyb21QYXRoIHtcbiAgICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgICAgICBfRmlsZUZyb21QYXRoX3BhdGguc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9GaWxlRnJvbVBhdGhfc3RhcnQuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0ZpbGVGcm9tUGF0aF9wYXRoLCBpbnB1dC5wYXRoLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0ZpbGVGcm9tUGF0aF9zdGFydCwgaW5wdXQuc3RhcnQgfHwgMCwgXCJmXCIpO1xuICAgICAgICB0aGlzLm5hbWUgPSBiYXNlbmFtZShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9GaWxlRnJvbVBhdGhfcGF0aCwgXCJmXCIpKTtcbiAgICAgICAgdGhpcy5zaXplID0gaW5wdXQuc2l6ZTtcbiAgICAgICAgdGhpcy5sYXN0TW9kaWZpZWQgPSBpbnB1dC5sYXN0TW9kaWZpZWQ7XG4gICAgfVxuICAgIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlRnJvbVBhdGgoe1xuICAgICAgICAgICAgcGF0aDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRmlsZUZyb21QYXRoX3BhdGgsIFwiZlwiKSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDogdGhpcy5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICBzaXplOiBlbmQgLSBzdGFydCxcbiAgICAgICAgICAgIHN0YXJ0XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyAqc3RyZWFtKCkge1xuICAgICAgICBjb25zdCB7IG10aW1lTXMgfSA9IGF3YWl0IGZzLnN0YXQoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRmlsZUZyb21QYXRoX3BhdGgsIFwiZlwiKSk7XG4gICAgICAgIGlmIChtdGltZU1zID4gdGhpcy5sYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oTUVTU0FHRSwgXCJOb3RSZWFkYWJsZUVycm9yXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgICAgICAgIHlpZWxkKiBjcmVhdGVSZWFkU3RyZWFtKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0ZpbGVGcm9tUGF0aF9wYXRoLCBcImZcIiksIHtcbiAgICAgICAgICAgICAgICBzdGFydDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRmlsZUZyb21QYXRoX3N0YXJ0LCBcImZcIiksXG4gICAgICAgICAgICAgICAgZW5kOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9GaWxlRnJvbVBhdGhfc3RhcnQsIFwiZlwiKSArIHRoaXMuc2l6ZSAtIDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBbKF9GaWxlRnJvbVBhdGhfcGF0aCA9IG5ldyBXZWFrTWFwKCksIF9GaWxlRnJvbVBhdGhfc3RhcnQgPSBuZXcgV2Vha01hcCgpLCBTeW1ib2wudG9TdHJpbmdUYWcpXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiRmlsZVwiO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVGcm9tUGF0aChwYXRoLCB7IG10aW1lTXMsIHNpemUgfSwgZmlsZW5hbWVPck9wdGlvbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBmaWxlbmFtZTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChmaWxlbmFtZU9yT3B0aW9ucykpIHtcbiAgICAgICAgW29wdGlvbnMsIGZpbGVuYW1lXSA9IFtmaWxlbmFtZU9yT3B0aW9ucywgdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVPck9wdGlvbnM7XG4gICAgfVxuICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZUZyb21QYXRoKHsgcGF0aCwgc2l6ZSwgbGFzdE1vZGlmaWVkOiBtdGltZU1zIH0pO1xuICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSBmaWxlLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRmlsZShbZmlsZV0sIGZpbGVuYW1lLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWRcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWxlRnJvbVBhdGhTeW5jKHBhdGgsIGZpbGVuYW1lT3JPcHRpb25zLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKHBhdGgpO1xuICAgIHJldHVybiBjcmVhdGVGaWxlRnJvbVBhdGgocGF0aCwgc3RhdHMsIGZpbGVuYW1lT3JPcHRpb25zLCBvcHRpb25zKTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaWxlRnJvbVBhdGgocGF0aCwgZmlsZW5hbWVPck9wdGlvbnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQocGF0aCk7XG4gICAgcmV0dXJuIGNyZWF0ZUZpbGVGcm9tUGF0aChwYXRoLCBzdGF0cywgZmlsZW5hbWVPck9wdGlvbnMsIG9wdGlvbnMpO1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGlubGluZVN1Z2dlc3Rpb25zIH0gZnJvbSBcIi4vZXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBTZXR0aW5ncywgREVGQVVMVF9TRVRUSU5HUyB9IGZyb20gJy4vc2V0dGluZ3Mvc2V0dGluZ3MnO1xuaW1wb3J0IEluc2NyaWJlU2V0dGluZ3NUYWIgZnJvbSAnLi9zZXR0aW5ncy90YWInO1xuaW1wb3J0IHsgUHJvdmlkZXJGYWN0b3J5IH0gZnJvbSAnLi9wcm92aWRlcnMvZmFjdG9yeSc7XG5pbXBvcnQgeyBQcm9maWxlU2VydmljZSB9IGZyb20gJy4vcHJvZmlsZS9zZXJ2aWNlJztcbmltcG9ydCBDb21wbGV0aW9uU2VydmljZSBmcm9tICcuL2NvbXBsZXRpb25zL3NlcnZpY2UnO1xuaW1wb3J0IFN0YXR1c0Jhckl0ZW0gZnJvbSAnLi9zdGF0dXNiYXIvc3RhdHVzYmFyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zY3JpYmUgZXh0ZW5kcyBQbHVnaW4ge1xuXHRzZXR0aW5nczogU2V0dGluZ3M7XG5cdHByb3ZpZGVyRmFjdG9yeTogUHJvdmlkZXJGYWN0b3J5O1xuXHRzdGF0dXNCYXJJdGVtOiBTdGF0dXNCYXJJdGVtO1xuXG5cdHByaXZhdGUgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlO1xuXHRwcml2YXRlIGNvbXBsZXRpb25FbmdpbmU6IENvbXBsZXRpb25TZXJ2aWNlO1xuXG5cdGFzeW5jIG9ubG9hZCgpIHtcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuXG5cdFx0dGhpcy5wcm9maWxlU2VydmljZSA9IG5ldyBQcm9maWxlU2VydmljZSh0aGlzKTtcblx0XHR0aGlzLnByb3ZpZGVyRmFjdG9yeSA9IG5ldyBQcm92aWRlckZhY3RvcnkodGhpcyk7XG5cdFx0dGhpcy5jb21wbGV0aW9uRW5naW5lID0gbmV3IENvbXBsZXRpb25TZXJ2aWNlKHRoaXMuYXBwLCB0aGlzLnNldHRpbmdzLCB0aGlzLnByb2ZpbGVTZXJ2aWNlLCB0aGlzLnByb3ZpZGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5zdGF0dXNCYXJJdGVtID0gbmV3IFN0YXR1c0Jhckl0ZW0odGhpcywgdGhpcy5wcm9maWxlU2VydmljZSwgdGhpcy5jb21wbGV0aW9uRW5naW5lKTtcblxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgSW5zY3JpYmVTZXR0aW5nc1RhYih0aGlzKSk7XG5cdFx0YXdhaXQgdGhpcy5zZXR1cEV4dGVuc2lvbigpO1xuXHR9XG5cblx0YXN5bmMgb251bmxvYWQoKSB7XG5cdFx0dGhpcy5wcm9maWxlU2VydmljZS5vbnVubG9hZCgpO1xuXHR9XG5cblx0YXN5bmMgc2V0dXBFeHRlbnNpb24oKSB7XG5cdFx0Y29uc3QgZXh0ZW5zaW9uID0gaW5saW5lU3VnZ2VzdGlvbnMoe1xuXHRcdFx0ZmV0Y2hGdW5jOiAoKSA9PiB0aGlzLmNvbXBsZXRpb25FbmdpbmUuZmV0Y2hDb21wbGV0aW9uKCksXG5cdFx0XHRnZXRPcHRpb25zOiAoKSA9PiB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldE9wdGlvbnMoKVxuXHRcdH0pO1xuXHRcdHRoaXMucmVnaXN0ZXJFZGl0b3JFeHRlbnNpb24oZXh0ZW5zaW9uKTtcblx0fVxuXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0REVGQVVMVF9TRVRUSU5HUyxcblx0XHRcdGF3YWl0IHRoaXMubG9hZERhdGEoKVxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcblx0XHR0aGlzLnByb3ZpZGVyRmFjdG9yeS5yZWJ1aWxkUHJvdmlkZXJzKCk7XG5cdH1cbn0iLCAiLyoqXG4gKiBJbmxpbmUgQ29tcGxldGlvbnMgZXh0ZW5zaW9uIGZvciBDb2RlTWlycm9yXG4gKlxuICogVGhpcyBleHRlbnNpb24gb2ZmZXJzIGlubGluZSBzdWdnZXN0aW9ucyB3aXRoOlxuICogLSBDb25maWd1cmFibGUgc3VnZ2VzdGlvbiBmZXRjaGluZyBzdHJhdGVnaWVzXG4gKiAtIE11bHRpcGxlIHRleHQgc2VnbWVudGF0aW9uIGFwcHJvYWNoZXNcbiAqIC0gRGVib3VuY2VkIG5ldHdvcmsgcmVxdWVzdHNcbiAqIC0gTm9uLWludmFzaXZlIHN1Z2dlc3Rpb24gcmVuZGVyaW5nXG4gKi9cblxuaW1wb3J0IHtcbiAgICBWaWV3UGx1Z2luLFxuICAgIEVkaXRvclZpZXcsXG4gICAgVmlld1VwZGF0ZSxcbiAgICBEZWNvcmF0aW9uLFxuICAgIFdpZGdldFR5cGUsXG4gICAga2V5bWFwLFxufSBmcm9tICdAY29kZW1pcnJvci92aWV3JztcbmltcG9ydCB7XG4gICAgU3RhdGVFZmZlY3QsXG4gICAgVGV4dCxcbiAgICBTdGF0ZUZpZWxkLFxuICAgIEVkaXRvclN0YXRlLFxuICAgIEVkaXRvclNlbGVjdGlvbixcbiAgICBUcmFuc2FjdGlvbixcbiAgICBQcmVjLFxufSBmcm9tICdAY29kZW1pcnJvci9zdGF0ZSc7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICBUeXBlIERlZmluaXRpb25zXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBTdXBwb3J0ZWQgc2VnbWVudGF0aW9uIHN0cmF0ZWdpZXMgKi9cbmV4cG9ydCB0eXBlIFNwbGl0U3RyYXRlZ3kgPSBrZXlvZiB0eXBlb2YgVGV4dFNwbGl0U3RyYXRlZ2llcztcblxuLyoqIElubGluZSBzdWdnZXN0aW9uIHN0cnVjdHVyZSBcdTIwMTMgbm93IG9ubHkgY2FycmllcyB0ZXh0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0aW9uIHtcbiAgICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKiBJbmxpbmUgY29tcGxldGlvbiBjb25maWd1cmF0aW9uLlxuICogXG4gKiBOb3RlOiBJbnN0ZWFkIG9mIGVhY2ggc3VnZ2VzdGlvbiBjYXJyeWluZyBpdHMgc3BsaXQgc3RyYXRlZ3ksXG4gKiB5b3Ugc3VwcGx5IGEgZHluYW1pYyBnZXR0ZXIgZnVuY3Rpb24gKGBnZXRPcHRpb25zYCkgc28gdGhhdCB0aGUgZXh0ZW5zaW9uXG4gKiBhbHdheXMgdXNlcyB0aGUgY3VycmVudCBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVDb21wbGV0aW9uQ29uZmlnIHtcbiAgICBmZXRjaEZ1bmM6IChcbiAgICAgICAgc3RhdGU6IEVkaXRvclN0YXRlXG4gICAgKSA9PiBBc3luY0dlbmVyYXRvcjxTdWdnZXN0aW9uPiB8IFByb21pc2U8U3VnZ2VzdGlvbj47XG4gICAgLyoqIChPcHRpb25hbCkgQSBzdGF0aWMgaG90a2V5IGZvciBhY2NlcHRpbmcgc3VnZ2VzdGlvbnMuICovXG4gICAgYWNjZXB0YW5jZUhvdGtleT86IHN0cmluZztcbiAgICAvKiogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgY3VycmVudCBvcHRpb25zLiAqL1xuICAgIGdldE9wdGlvbnM6ICgpID0+IElubGluZUNvbXBsZXRpb25PcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElubGluZUNvbXBsZXRpb25PcHRpb25zIHtcbiAgICBkZWxheU1zPzogbnVtYmVyO1xuICAgIHNwbGl0U3RyYXRlZ3k/OiBTcGxpdFN0cmF0ZWd5O1xufVxuXG4vKiogSW50ZXJuYWwgc3RhdGUgZm9yIHRoZSBjdXJyZW50IHN1Z2dlc3Rpb24gc2Vzc2lvbi5cbiAqIE5vdGU6IFRoZSBwcmV2aW91cyBcInNlZ21lbnRhdGlvblwiIHByb3BlcnR5IGhhcyBiZWVuIHJlbW92ZWQuXG4gKi9cbmludGVyZmFjZSBTdWdnZXN0aW9uU2Vzc2lvbiB7XG4gICAgZnVsbFRleHQ6IHN0cmluZyB8IG51bGw7XG4gICAgcmVtYWluaW5nVGV4dDogc3RyaW5nIHwgbnVsbDtcbiAgICBiYXNlbGluZURvY3VtZW50OiBUZXh0IHwgbnVsbDtcbiAgICBhbmNob3JQb3NpdGlvbjogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIFRleHQgU2VnbWVudGF0aW9uIFN0cmF0ZWdpZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBBIHNldCBvZiB0ZXh0IHNwbGl0dGluZyBmdW5jdGlvbnMgdXNlZCB0byBkZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlXG4gKiBzdWdnZXN0aW9uIHRvIGFjY2VwdCB3aGVuIHRyaWdnZXJlZC5cbiAqL1xuY29uc3QgVGV4dFNwbGl0U3RyYXRlZ2llcyA9IHtcbiAgICAvKipcbiAgICAgKiBXb3JkLWxldmVsIHNlZ21lbnRhdGlvbiAoc3BhY2UtZGVsaW1pdGVkKS5cbiAgICAgKiBBY2NlcHRzIHRleHQgdW50aWwgKGFuZCBpbmNsdWRpbmcpIHRoZSBmaXJzdCBzcGFjZS5cbiAgICAgKi9cbiAgICB3b3JkOiAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRTcGFjZSA9IHRleHQuaW5kZXhPZignICcpO1xuICAgICAgICByZXR1cm4gbmV4dFNwYWNlID09PSAtMVxuICAgICAgICAgICAgPyB7IGFjY2VwdGVkOiB0ZXh0LCByZW1haW5pbmc6ICcnIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGFjY2VwdGVkOiB0ZXh0LnNsaWNlKDAsIG5leHRTcGFjZSArIDEpLFxuICAgICAgICAgICAgICAgIHJlbWFpbmluZzogdGV4dC5zbGljZShuZXh0U3BhY2UgKyAxKSxcbiAgICAgICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNlbnRlbmNlLWxldmVsIHNlZ21lbnRhdGlvbiAocHVuY3R1YXRpb24gZm9sbG93ZWQgYnkgd2hpdGVzcGFjZSkuXG4gICAgICovXG4gICAgc2VudGVuY2U6ICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9bLiE/XVxccysvKTtcbiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWNjZXB0ZWQ6IHRleHQuc2xpY2UoMCwgbWF0Y2guaW5kZXggKyAxKSxcbiAgICAgICAgICAgICAgICByZW1haW5pbmc6IHRleHQuc2xpY2UobWF0Y2guaW5kZXggKyAxKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgYWNjZXB0ZWQ6IHRleHQsIHJlbWFpbmluZzogJycgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUGFyYWdyYXBoLWxldmVsIHNlZ21lbnRhdGlvbiAoZG91YmxlIG5ld2xpbmUpLlxuICAgICAqL1xuICAgIHBhcmFncmFwaDogKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhFbmQgPSB0ZXh0LmluZGV4T2YoJ1xcblxcbicpO1xuICAgICAgICByZXR1cm4gcGFyYWdyYXBoRW5kID09PSAtMVxuICAgICAgICAgICAgPyB7IGFjY2VwdGVkOiB0ZXh0LCByZW1haW5pbmc6ICcnIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGFjY2VwdGVkOiB0ZXh0LnNsaWNlKDAsIHBhcmFncmFwaEVuZCArIDIpLFxuICAgICAgICAgICAgICAgIHJlbWFpbmluZzogdGV4dC5zbGljZShwYXJhZ3JhcGhFbmQgKyAyKSxcbiAgICAgICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEF0b21pYyBhY2NlcHRhbmNlIFx1MjAxMyBjb25zdW1lIHRoZSBlbnRpcmUgc3VnZ2VzdGlvbi5cbiAgICAgKi9cbiAgICBmdWxsOiAodGV4dDogc3RyaW5nKSA9PiAoeyBhY2NlcHRlZDogdGV4dCwgcmVtYWluaW5nOiAnJyB9KSxcbn0gYXMgY29uc3Q7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICBTdWdnZXN0aW9uIFNlc3Npb24gU3RhdGUgTWFuYWdlbWVudFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEVmZmVjdCB0byB1cGRhdGUgdGhlIHN1Z2dlc3Rpb24gc2Vzc2lvbiBzdGF0ZS5cbiAqIEEgYG51bGxgIGNvbnRlbnQgc2lnbmFscyBhIHJlc2V0LlxuICovXG5jb25zdCBTdWdnZXN0aW9uVXBkYXRlRWZmZWN0ID0gU3RhdGVFZmZlY3QuZGVmaW5lPHtcbiAgICBjb250ZW50OiBzdHJpbmcgfCBudWxsO1xuICAgIGRvY3VtZW50OiBUZXh0IHwgbnVsbDtcbiAgICBhbmNob3I6IG51bWJlciB8IG51bGw7XG59PigpO1xuXG4vKipcbiAqIFRoZSBzdGF0ZSBmaWVsZCB0aGF0IGhvbGRzIHRoZSBjdXJyZW50IHN1Z2dlc3Rpb24gc2Vzc2lvbi5cbiAqL1xuY29uc3Qgc3VnZ2VzdGlvblNlc3Npb25TdGF0ZSA9IFN0YXRlRmllbGQuZGVmaW5lPFN1Z2dlc3Rpb25TZXNzaW9uPih7XG4gICAgY3JlYXRlOiAoKSA9PiBnZXRSZXNldFNlc3Npb24oKSxcblxuICAgIHVwZGF0ZShzZXNzaW9uLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAvLyBQcm9jZXNzIGV4cGxpY2l0IHNlc3Npb24gdXBkYXRlIGVmZmVjdHMuXG4gICAgICAgIGNvbnN0IGVmZmVjdCA9IHRyYW5zYWN0aW9uLmVmZmVjdHMuZmluZCgoZSkgPT5cbiAgICAgICAgICAgIGUuaXMoU3VnZ2VzdGlvblVwZGF0ZUVmZmVjdClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGVmZmVjdCkgcmV0dXJuIHVwZGF0ZVNlc3Npb25Gcm9tRWZmZWN0KGVmZmVjdC52YWx1ZSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyBjaGFuZ2VkLCBhZGp1c3QgdGhlIHNlc3Npb24uXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uLmRvY0NoYW5nZWQgJiZcbiAgICAgICAgICAgIHNlc3Npb24ucmVtYWluaW5nVGV4dCAmJlxuICAgICAgICAgICAgc2Vzc2lvbi5hbmNob3JQb3NpdGlvbiAhPT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVTZXNzaW9uT25Eb2N1bWVudENoYW5nZShzZXNzaW9uLCB0cmFuc2FjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbiBhY3RpdmUgc3VnZ2VzdGlvbiBidXQgdGhlIGN1cnNvciBoYXMgbW92ZWQsIGNhbmNlbCBpdC5cbiAgICAgICAgaWYgKHNlc3Npb24ucmVtYWluaW5nVGV4dCAhPT0gbnVsbCAmJiBzZXNzaW9uLmFuY2hvclBvc2l0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlU2Vzc2lvbk9uQ3Vyc29yRHJpZnQoc2Vzc2lvbiwgdHJhbnNhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgfSxcbn0pO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmcmVzaCwgZW1wdHkgc3VnZ2VzdGlvbiBzZXNzaW9uLlxuICovXG5mdW5jdGlvbiBnZXRSZXNldFNlc3Npb24oKTogU3VnZ2VzdGlvblNlc3Npb24ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZ1bGxUZXh0OiBudWxsLFxuICAgICAgICByZW1haW5pbmdUZXh0OiBudWxsLFxuICAgICAgICBiYXNlbGluZURvY3VtZW50OiBudWxsLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogbnVsbCxcbiAgICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzZXNzaW9uIHN0YXRlIGJhc2VkIG9uIGFuIGluY29taW5nIGVmZmVjdC5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbkZyb21FZmZlY3QoZWZmZWN0OiB7XG4gICAgY29udGVudDogc3RyaW5nIHwgbnVsbDtcbiAgICBkb2N1bWVudDogVGV4dCB8IG51bGw7XG4gICAgYW5jaG9yOiBudW1iZXIgfCBudWxsO1xufSk6IFN1Z2dlc3Rpb25TZXNzaW9uIHtcbiAgICByZXR1cm4gZWZmZWN0LmNvbnRlbnQgPT09IG51bGxcbiAgICAgICAgPyBnZXRSZXNldFNlc3Npb24oKVxuICAgICAgICA6IGluaXRpYWxpemVTZXNzaW9uKGVmZmVjdCBhcyB7XG4gICAgICAgICAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgICAgICAgICBkb2N1bWVudDogVGV4dDtcbiAgICAgICAgICAgIGFuY2hvcjogbnVtYmVyO1xuICAgICAgICB9KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBhIG5ldyBzdWdnZXN0aW9uIHNlc3Npb24gd2l0aCBwcm92aWRlZCBlZmZlY3QgZGF0YS5cbiAqL1xuZnVuY3Rpb24gaW5pdGlhbGl6ZVNlc3Npb24oZWZmZWN0OiB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIGRvY3VtZW50OiBUZXh0O1xuICAgIGFuY2hvcjogbnVtYmVyO1xufSk6IFN1Z2dlc3Rpb25TZXNzaW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmdWxsVGV4dDogZWZmZWN0LmNvbnRlbnQsXG4gICAgICAgIHJlbWFpbmluZ1RleHQ6IGVmZmVjdC5jb250ZW50LFxuICAgICAgICBiYXNlbGluZURvY3VtZW50OiBlZmZlY3QuZG9jdW1lbnQsXG4gICAgICAgIGFuY2hvclBvc2l0aW9uOiBlZmZlY3QuYW5jaG9yLFxuICAgIH07XG59XG5cbi8qKlxuICogQWRqdXN0IHRoZSBzdWdnZXN0aW9uIHNlc3Npb24gaW4gcmVzcG9uc2UgdG8gZG9jdW1lbnQgY2hhbmdlcy5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbk9uRG9jdW1lbnRDaGFuZ2UoXG4gICAgc2Vzc2lvbjogU3VnZ2VzdGlvblNlc3Npb24sXG4gICAgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uXG4pOiBTdWdnZXN0aW9uU2Vzc2lvbiB7XG4gICAgbGV0IGluc2VydGVkQ29udGVudCA9ICcnO1xuICAgIGxldCBpbnNlcnRpb25BdEFuY2hvciA9IGZhbHNlO1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIGRvY3VtZW50IGNoYW5nZXMgdG8gZGV0ZWN0IGFuIGluc2VydGlvbiBhdCB0aGUgc3VnZ2VzdGlvbidzIGFuY2hvci5cbiAgICB0cmFuc2FjdGlvbi5jaGFuZ2VzLml0ZXJDaGFuZ2VzKChmcm9tQSwgdG9BLCBfZnJvbUIsIF90b0IsIGluc2VydGVkKSA9PiB7XG4gICAgICAgIGlmIChmcm9tQSA9PT0gc2Vzc2lvbi5hbmNob3JQb3NpdGlvbiAmJiB0b0EgPT09IGZyb21BKSB7XG4gICAgICAgICAgICBpbnNlcnRlZENvbnRlbnQgPSBpbnNlcnRlZC50b1N0cmluZygpO1xuICAgICAgICAgICAgaW5zZXJ0aW9uQXRBbmNob3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWluc2VydGlvbkF0QW5jaG9yIHx8ICFzZXNzaW9uLnJlbWFpbmluZ1RleHQpIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWRhdGVTZXNzaW9uKHNlc3Npb24pO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB0aGUgaW5zZXJ0ZWQgdGV4dCBtYXRjaGVzIHRoZSBwZW5kaW5nIHN1Z2dlc3Rpb24uXG4gICAgaWYgKHNlc3Npb24ucmVtYWluaW5nVGV4dC5zdGFydHNXaXRoKGluc2VydGVkQ29udGVudCkpIHtcbiAgICAgICAgcmV0dXJuIGFkdmFuY2VTZXNzaW9uKHNlc3Npb24sIGluc2VydGVkQ29udGVudC5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnZhbGlkYXRlU2Vzc2lvbihzZXNzaW9uKTtcbn1cblxuLyoqXG4gKiBBZHZhbmNlIHRoZSBzZXNzaW9uIGJ5IGNvbnN1bWluZyBhY2NlcHRlZCB0ZXh0LlxuICovXG5mdW5jdGlvbiBhZHZhbmNlU2Vzc2lvbihcbiAgICBzZXNzaW9uOiBTdWdnZXN0aW9uU2Vzc2lvbixcbiAgICBjb25zdW1lZExlbmd0aDogbnVtYmVyXG4pOiBTdWdnZXN0aW9uU2Vzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgcmVtYWluaW5nVGV4dDpcbiAgICAgICAgICAgIHNlc3Npb24ucmVtYWluaW5nVGV4dCEuc2xpY2UoY29uc3VtZWRMZW5ndGgpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHNlc3Npb24ucmVtYWluaW5nVGV4dCEuc2xpY2UoY29uc3VtZWRMZW5ndGgpXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogc2Vzc2lvbi5hbmNob3JQb3NpdGlvbiEgKyBjb25zdW1lZExlbmd0aCxcbiAgICB9O1xufVxuXG4vKipcbiAqIEludmFsaWRhdGUgdGhlIHNlc3Npb24sIGVmZmVjdGl2ZWx5IGNhbmNlbGxpbmcgYW55IHBlbmRpbmcgc3VnZ2VzdGlvbi5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZGF0ZVNlc3Npb24oc2Vzc2lvbjogU3VnZ2VzdGlvblNlc3Npb24pOiBTdWdnZXN0aW9uU2Vzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgcmVtYWluaW5nVGV4dDogbnVsbCxcbiAgICAgICAgYW5jaG9yUG9zaXRpb246IG51bGwsXG4gICAgfTtcbn1cblxuLyoqXG4gKiBDYW5jZWwgdGhlIHN1Z2dlc3Rpb24gaWYgdGhlIGN1cnNvciBoYXMgZHJpZnRlZCBhd2F5LlxuICovXG5mdW5jdGlvbiB1cGRhdGVTZXNzaW9uT25DdXJzb3JEcmlmdChcbiAgICBzZXNzaW9uOiBTdWdnZXN0aW9uU2Vzc2lvbixcbiAgICB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb25cbik6IFN1Z2dlc3Rpb25TZXNzaW9uIHtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24uc3RhdGUuc2VsZWN0aW9uLm1haW4uaGVhZCAhPT0gc2Vzc2lvbi5hbmNob3JQb3NpdGlvblxuICAgICAgICA/IGludmFsaWRhdGVTZXNzaW9uKHNlc3Npb24pXG4gICAgICAgIDogc2Vzc2lvbjtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIFN1Z2dlc3Rpb24gUmVuZGVyaW5nIChWaXN1YWxpemF0aW9uIExheWVyKVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFdpZGdldCBmb3IgcmVuZGVyaW5nIGlubGluZSBzdWdnZXN0aW9uIHRleHQuXG4gKi9cbmNsYXNzIFN1Z2dlc3Rpb25XaWRnZXQgZXh0ZW5kcyBXaWRnZXRUeXBlIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgT1BBQ0lUWSA9IDAuNDtcbiAgICBzdGF0aWMgcmVhZG9ubHkgQ1NTX0NMQVNTID0gJ2NtLWlubGluZS1wcmVkaWN0aW9uJztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29udGVudDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgdG9ET00oKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBzcGFuLmNsYXNzTmFtZSA9IFN1Z2dlc3Rpb25XaWRnZXQuQ1NTX0NMQVNTO1xuICAgICAgICBzcGFuLnN0eWxlLm9wYWNpdHkgPSBTdWdnZXN0aW9uV2lkZ2V0Lk9QQUNJVFkudG9TdHJpbmcoKTtcbiAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICAgICAgcmV0dXJuIHNwYW47XG4gICAgfVxufVxuXG4vKipcbiAqIFBsdWdpbiB0aGF0IHJlbmRlcnMgaW5saW5lIHN1Z2dlc3Rpb24gZGVjb3JhdGlvbnMuXG4gKi9cbmNvbnN0IHN1Z2dlc3Rpb25SZW5kZXJlciA9IFZpZXdQbHVnaW4uZnJvbUNsYXNzKFxuICAgIGNsYXNzIHtcbiAgICAgICAgZGVjb3JhdGlvbnMgPSBEZWNvcmF0aW9uLm5vbmU7XG5cbiAgICAgICAgdXBkYXRlKHVwZGF0ZTogVmlld1VwZGF0ZSkge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHVwZGF0ZS5zdGF0ZS5maWVsZChzdWdnZXN0aW9uU2Vzc2lvblN0YXRlKTtcbiAgICAgICAgICAgIHRoaXMuZGVjb3JhdGlvbnMgPSBzZXNzaW9uLnJlbWFpbmluZ1RleHRcbiAgICAgICAgICAgICAgICA/IHRoaXMuY3JlYXRlRGVjb3JhdGlvbih1cGRhdGUudmlldywgc2Vzc2lvbi5yZW1haW5pbmdUZXh0KVxuICAgICAgICAgICAgICAgIDogRGVjb3JhdGlvbi5ub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZSBjcmVhdGVEZWNvcmF0aW9uKHZpZXc6IEVkaXRvclZpZXcsIHN1Z2dlc3Rpb25UZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gdmlldy5zdGF0ZS5zZWxlY3Rpb24ubWFpbi5oZWFkO1xuICAgICAgICAgICAgcmV0dXJuIERlY29yYXRpb24uc2V0KFtcbiAgICAgICAgICAgICAgICBEZWNvcmF0aW9uLndpZGdldCh7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogbmV3IFN1Z2dlc3Rpb25XaWRnZXQoc3VnZ2VzdGlvblRleHQpLFxuICAgICAgICAgICAgICAgICAgICBzaWRlOiAxLFxuICAgICAgICAgICAgICAgIH0pLnJhbmdlKGN1cnNvclBvc2l0aW9uKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7IGRlY29yYXRpb25zOiAodikgPT4gdi5kZWNvcmF0aW9ucyB9XG4pO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgU3VnZ2VzdGlvbiBGZXRjaGluZyAoRGVib3VuY2VkIEZldGNoZXIpXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmZXRjaGVyIGZvciBzdWdnZXN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gZmV0Y2ggLSBUaGUgc3VnZ2VzdGlvbiBmZXRjaCBmdW5jdGlvbi5cbiAqIEBwYXJhbSBnZXREZWxheSAtIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBjdXJyZW50IGRlYm91bmNlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuY29uc3QgY3JlYXRlRGVib3VuY2VkRmV0Y2hlciA9IChcbiAgICBmZXRjaDogKHN0YXRlOiBFZGl0b3JTdGF0ZSkgPT4gQXN5bmNHZW5lcmF0b3I8U3VnZ2VzdGlvbj4sXG4gICAgZ2V0RGVsYXk6ICgpID0+IG51bWJlclxuKSA9PiB7XG4gICAgbGV0IGFjdGl2ZVJlcXVlc3QgPSB0cnVlO1xuICAgIGxldCB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG4gICAgLyoqXG4gICAgICogVGhyb3R0bGVkIGZldGNoIHRoYXQgd2FpdHMgZm9yIHRoZSBkZWJvdW5jZSBpbnRlcnZhbC5cbiAgICAgKi9cbiAgICBjb25zdCB0aHJvdHRsZWRGZXRjaCA9IGFzeW5jIGZ1bmN0aW9uKiAoc3RhdGU6IEVkaXRvclN0YXRlKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICBhY3RpdmVSZXF1ZXN0ID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQocmVzb2x2ZSwgZ2V0RGVsYXkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYWN0aXZlUmVxdWVzdCkgeWllbGQqIGZldGNoKHN0YXRlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUGx1Z2luIHRoYXQgaW5pdGlhdGVzIHN1Z2dlc3Rpb24gZmV0Y2hpbmcgb24gZG9jdW1lbnQgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBjb25zdCBmZXRjaGVyUGx1Z2luID0gVmlld1BsdWdpbi5mcm9tQ2xhc3MoXG4gICAgICAgIGNsYXNzIHtcbiAgICAgICAgICAgIHByaXZhdGUgY3VycmVudFJlcXVlc3RJZCA9IDA7XG5cbiAgICAgICAgICAgIGFzeW5jIHVwZGF0ZSh1cGRhdGU6IFZpZXdVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHVwZGF0ZS5zdGF0ZTtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IHRyaWdnZXIgZmV0Y2ggaWYgdGhlcmUgaXMgbm8gYWN0aXZlIHN1Z2dlc3Rpb24uXG4gICAgICAgICAgICAgICAgaWYgKCF1cGRhdGUuZG9jQ2hhbmdlZCB8fCBzdGF0ZS5maWVsZChzdWdnZXN0aW9uU2Vzc2lvblN0YXRlKS5yZW1haW5pbmdUZXh0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMuY3VycmVudFJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHN1Z2dlc3Rpb24gb2YgdGhyb3R0bGVkRmV0Y2goc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBzdGFsZSByZXF1ZXN0cy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gdGhpcy5jdXJyZW50UmVxdWVzdElkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZS52aWV3LmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdHM6IFN1Z2dlc3Rpb25VcGRhdGVFZmZlY3Qub2Yoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHN1Z2dlc3Rpb24udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudDogc3RhdGUuZG9jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcjogc3RhdGUuc2VsZWN0aW9uLm1haW4uaGVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmV0Y2hlclBsdWdpbixcbiAgICAgICAgdGVybWluYXRlOiAoKSA9PiB7XG4gICAgICAgICAgICBhY3RpdmVSZXF1ZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIFVzZXIgSW50ZXJhY3Rpb24gKEFjY2VwdGFuY2UgSGFuZGxlcilcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEga2V5IGJpbmRpbmcgdGhhdCBhY2NlcHRzIHRoZSBjdXJyZW50IHN1Z2dlc3Rpb24uXG4gKlxuICogQHBhcmFtIHRlcm1pbmF0ZUZldGNoIC0gRnVuY3Rpb24gdG8gc3RvcCBmdXJ0aGVyIGZldGNoaW5nLlxuICogQHBhcmFtIGhvdGtleSAtIFRoZSBrZXkgdGhhdCB0cmlnZ2VycyBhY2NlcHRhbmNlLlxuICogQHBhcmFtIGdldE9wdGlvbnMgLSBGdW5jdGlvbiByZXR1cm5pbmcgZHluYW1pYyBvcHRpb25zIChpbmNsdWRpbmcgc3BsaXRTdHJhdGVneSkuXG4gKi9cbmNvbnN0IGNyZWF0ZUFjY2VwdGFuY2VIYW5kbGVyID0gKFxuICAgIHRlcm1pbmF0ZUZldGNoOiAoKSA9PiB2b2lkLFxuICAgIGhvdGtleTogc3RyaW5nLFxuICAgIGdldE9wdGlvbnM6ICgpID0+IHsgZGVsYXlNcz86IG51bWJlcjsgc3BsaXRTdHJhdGVneT86IFNwbGl0U3RyYXRlZ3kgfVxuKSA9PlxuICAgIFByZWMuaGlnaGVzdChcbiAgICAgICAga2V5bWFwLm9mKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBrZXk6IGhvdGtleSxcbiAgICAgICAgICAgICAgICBydW46ICh2aWV3OiBFZGl0b3JWaWV3KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB2aWV3LnN0YXRlLmZpZWxkKHN1Z2dlc3Rpb25TZXNzaW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24ucmVtYWluaW5nVGV4dCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBvYnRhaW4gdGhlIGN1cnJlbnQgc3BsaXQgc3RyYXRlZ3kgZnJvbSBnZXRPcHRpb25zLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkeW5hbWljT3B0aW9ucyA9IGdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudGF0aW9uS2V5ID0gZHluYW1pY09wdGlvbnMuc3BsaXRTdHJhdGVneSA/PyAnd29yZCc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgYWNjZXB0ZWQsIHJlbWFpbmluZyB9ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIFRleHRTcGxpdFN0cmF0ZWdpZXNbc2VnbWVudGF0aW9uS2V5XShzZXNzaW9uLnJlbWFpbmluZ1RleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXB0ZWQpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGFjY2VwdGVkIHN1Z2dlc3Rpb24gdGV4dC5cbiAgICAgICAgICAgICAgICAgICAgdmlldy5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pbnNlcnRDb21wbGV0aW9uKHZpZXcuc3RhdGUsIGFjY2VwdGVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdHM6IFN1Z2dlc3Rpb25VcGRhdGVFZmZlY3Qub2Yoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHJlbWFpbmluZyB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50OiByZW1haW5pbmcgPyBzZXNzaW9uLmJhc2VsaW5lRG9jdW1lbnQgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcjogcmVtYWluaW5nID8gc2Vzc2lvbi5hbmNob3JQb3NpdGlvbiEgKyBhY2NlcHRlZC5sZW5ndGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVtYWluaW5nKSB0ZXJtaW5hdGVGZXRjaCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSlcbiAgICApO1xuXG4vKipcbiAqIEhlbHBlciB0byBjcmVhdGUgYSB0cmFuc2FjdGlvbiB0aGF0IGluc2VydHMgY29tcGxldGlvbiB0ZXh0LlxuICovXG5jb25zdCBpbnNlcnRDb21wbGV0aW9uID0gKHN0YXRlOiBFZGl0b3JTdGF0ZSwgdGV4dDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY3Vyc29yUG9zID0gc3RhdGUuc2VsZWN0aW9uLm1haW4uaGVhZDtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZS5jaGFuZ2VCeVJhbmdlKCgpID0+ICh7XG4gICAgICAgICAgICBjaGFuZ2VzOiB7IGZyb206IGN1cnNvclBvcywgaW5zZXJ0OiB0ZXh0IH0sXG4gICAgICAgICAgICByYW5nZTogRWRpdG9yU2VsZWN0aW9uLmN1cnNvcihjdXJzb3JQb3MgKyB0ZXh0Lmxlbmd0aCksXG4gICAgICAgIH0pKSxcbiAgICAgICAgdXNlckV2ZW50OiAnY29tcGxldGlvbi5hY2NlcHQnLFxuICAgIH07XG59O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgUHVibGljIEFQSVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFRoZSBtYWluIGV4dGVuc2lvbiBmdW5jdGlvbi4gSXQgd2lyZXMgdXAgc2Vzc2lvbiBzdGF0ZSBtYW5hZ2VtZW50LFxuICogc3VnZ2VzdGlvbiBmZXRjaGluZywgcmVuZGVyaW5nLCBhbmQgdXNlciBpbnRlcmFjdGlvbi5cbiAqXG4gKiBOb3RpY2UgdGhhdCB0aGUgc3VnZ2VzdGlvbiBub3cgb25seSBjb250YWlucyB0ZXh0LlxuICogVGhlIHNwbGl0IHN0cmF0ZWd5IGlzIGFsd2F5cyBvYnRhaW5lZCBkeW5hbWljYWxseSB2aWEgYGdldE9wdGlvbnMoKWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmxpbmVTdWdnZXN0aW9ucyhjb25maWc6IElubGluZUNvbXBsZXRpb25Db25maWcpIHtcbiAgICBjb25zdCB7IGZldGNoRnVuYywgZ2V0T3B0aW9ucyB9ID0gY29uZmlnO1xuICAgIC8vIFVzZSB0aGUgaG90a2V5IGZyb20gdGhlIGNvbmZpZyBpZiBwcm92aWRlZDsgb3RoZXJ3aXNlLCBkZWZhdWx0IHRvIFwiVGFiXCIuXG4gICAgY29uc3Qgc3RhdGljSG90a2V5ID0gY29uZmlnLmFjY2VwdGFuY2VIb3RrZXkgfHwgJ1RhYic7XG5cbiAgICAvLyBOb3JtYWxpemUgdGhlIGZldGNoIGZ1bmN0aW9uIHRvIGFsd2F5cyByZXR1cm4gYW4gYXN5bmMgZ2VuZXJhdG9yLlxuICAgIGNvbnN0IG5vcm1hbGl6ZUZldGNoID0gYXN5bmMgZnVuY3Rpb24qIChzdGF0ZTogRWRpdG9yU3RhdGUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGdW5jKHN0YXRlKTtcbiAgICAgICAgaWYgKFN5bWJvbC5hc3luY0l0ZXJhdG9yIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgeWllbGQqIHJlc3VsdCBhcyBBc3luY0dlbmVyYXRvcjxTdWdnZXN0aW9uPjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkIHJlc3VsdCBhcyBTdWdnZXN0aW9uO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIFVzZSBnZXRPcHRpb25zKCkgdG8gb2J0YWluIHRoZSBjdXJyZW50IGRlYm91bmNlIGRlbGF5LlxuICAgIGNvbnN0IGdldERlbGF5ID0gKCkgPT4gZ2V0T3B0aW9ucygpLmRlbGF5TXMgPz8gMzAwO1xuICAgIGNvbnN0IHsgZmV0Y2hlclBsdWdpbiwgdGVybWluYXRlIH0gPSBjcmVhdGVEZWJvdW5jZWRGZXRjaGVyKG5vcm1hbGl6ZUZldGNoLCBnZXREZWxheSk7XG4gICAgY29uc3QgYWNjZXB0YW5jZUhhbmRsZXIgPSBjcmVhdGVBY2NlcHRhbmNlSGFuZGxlcih0ZXJtaW5hdGUsIHN0YXRpY0hvdGtleSwgZ2V0T3B0aW9ucyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uU2Vzc2lvblN0YXRlLFxuICAgICAgICBmZXRjaGVyUGx1Z2luLFxuICAgICAgICBzdWdnZXN0aW9uUmVuZGVyZXIsXG4gICAgICAgIGFjY2VwdGFuY2VIYW5kbGVyLFxuICAgIF07XG59XG4iLCAiaW1wb3J0IGZzLCB7IHByb21pc2VzIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IE9sbGFtYSBhcyBPbGxhbWEkMSB9IGZyb20gJy4vYnJvd3Nlci5tanMnO1xuaW1wb3J0ICd3aGF0d2ctZmV0Y2gnO1xuXG5jbGFzcyBPbGxhbWEgZXh0ZW5kcyBPbGxhbWEkMSB7XG4gIGFzeW5jIGVuY29kZUltYWdlKGltYWdlKSB7XG4gICAgaWYgKHR5cGVvZiBpbWFnZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGltYWdlKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGltYWdlKSkge1xuICAgICAgICBjb25zdCBmaWxlQnVmZmVyID0gYXdhaXQgcHJvbWlzZXMucmVhZEZpbGUocmVzb2x2ZShpbWFnZSkpO1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oZmlsZUJ1ZmZlcikudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgfVxuICAgIHJldHVybiBpbWFnZTtcbiAgfVxuICAvKipcbiAgICogY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICogQHBhcmFtIHBhdGgge3N0cmluZ30gLSBUaGUgcGF0aCB0byB0aGUgZmlsZVxuICAgKiBAcHJpdmF0ZSBAaW50ZXJuYWxcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgZmlsZSBleGlzdHMgb3Igbm90XG4gICAqL1xuICBhc3luYyBmaWxlRXhpc3RzKHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcHJvbWlzZXMuYWNjZXNzKHBhdGgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGFzeW5jIGNyZWF0ZShyZXF1ZXN0KSB7XG4gICAgaWYgKHJlcXVlc3QuZnJvbSAmJiBhd2FpdCB0aGlzLmZpbGVFeGlzdHMocmVzb2x2ZShyZXF1ZXN0LmZyb20pKSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJDcmVhdGluZyB3aXRoIGEgbG9jYWwgcGF0aCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBmcm9tIG9sbGFtYS1qc1wiKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3Quc3RyZWFtKSB7XG4gICAgICByZXR1cm4gc3VwZXIuY3JlYXRlKHJlcXVlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3VwZXIuY3JlYXRlKHJlcXVlc3QpO1xuICAgIH1cbiAgfVxufVxuY29uc3QgaW5kZXggPSBuZXcgT2xsYW1hKCk7XG5cbmV4cG9ydCB7IE9sbGFtYSwgaW5kZXggYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCAnd2hhdHdnLWZldGNoJztcblxuY29uc3QgdmVyc2lvbiA9IFwiMC41LjE0XCI7XG5cbmNvbnN0IGRlZmF1bHRQb3J0ID0gXCIxMTQzNFwiO1xuY29uc3QgZGVmYXVsdEhvc3QgPSBgaHR0cDovLzEyNy4wLjAuMToke2RlZmF1bHRQb3J0fWA7XG5cbnZhciBfX2RlZlByb3AkMSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZk5vcm1hbFByb3AkMSA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkMShvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19wdWJsaWNGaWVsZCQxID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ge1xuICBfX2RlZk5vcm1hbFByb3AkMShvYmosIHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIgPyBrZXkgKyBcIlwiIDoga2V5LCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5jbGFzcyBSZXNwb25zZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihlcnJvciwgc3RhdHVzX2NvZGUpIHtcbiAgICBzdXBlcihlcnJvcik7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIHRoaXMuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZTtcbiAgICB0aGlzLm5hbWUgPSBcIlJlc3BvbnNlRXJyb3JcIjtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXJyb3IpO1xuICAgIH1cbiAgfVxufVxuY2xhc3MgQWJvcnRhYmxlQXN5bmNJdGVyYXRvciB7XG4gIGNvbnN0cnVjdG9yKGFib3J0Q29udHJvbGxlciwgaXRyLCBkb25lQ2FsbGJhY2spIHtcbiAgICBfX3B1YmxpY0ZpZWxkJDEodGhpcywgXCJhYm9ydENvbnRyb2xsZXJcIik7XG4gICAgX19wdWJsaWNGaWVsZCQxKHRoaXMsIFwiaXRyXCIpO1xuICAgIF9fcHVibGljRmllbGQkMSh0aGlzLCBcImRvbmVDYWxsYmFja1wiKTtcbiAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IGFib3J0Q29udHJvbGxlcjtcbiAgICB0aGlzLml0ciA9IGl0cjtcbiAgICB0aGlzLmRvbmVDYWxsYmFjayA9IGRvbmVDYWxsYmFjaztcbiAgfVxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICB9XG4gIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgbWVzc2FnZSBvZiB0aGlzLml0cikge1xuICAgICAgaWYgKFwiZXJyb3JcIiBpbiBtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlLmVycm9yKTtcbiAgICAgIH1cbiAgICAgIHlpZWxkIG1lc3NhZ2U7XG4gICAgICBpZiAobWVzc2FnZS5kb25lIHx8IG1lc3NhZ2Uuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aGlzLmRvbmVDYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkRpZCBub3QgcmVjZWl2ZSBkb25lIG9yIHN1Y2Nlc3MgcmVzcG9uc2UgaW4gc3RyZWFtLlwiKTtcbiAgfVxufVxuY29uc3QgY2hlY2tPayA9IGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IG1lc3NhZ2UgPSBgRXJyb3IgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YDtcbiAgbGV0IGVycm9yRGF0YSA9IG51bGw7XG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKT8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGVycm9yRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIG1lc3NhZ2UgPSBlcnJvckRhdGEuZXJyb3IgfHwgbWVzc2FnZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coXCJGYWlsZWQgdG8gcGFyc2UgZXJyb3IgcmVzcG9uc2UgYXMgSlNPTlwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiR2V0dGluZyB0ZXh0IGZyb20gcmVzcG9uc2VcIik7XG4gICAgICBjb25zdCB0ZXh0UmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICBtZXNzYWdlID0gdGV4dFJlc3BvbnNlIHx8IG1lc3NhZ2U7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIGdldCB0ZXh0IGZyb20gZXJyb3IgcmVzcG9uc2VcIik7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBSZXNwb25zZUVycm9yKG1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG59O1xuZnVuY3Rpb24gZ2V0UGxhdGZvcm0oKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5uYXZpZ2F0b3IpIHtcbiAgICBjb25zdCBuYXYgPSBuYXZpZ2F0b3I7XG4gICAgaWYgKFwidXNlckFnZW50RGF0YVwiIGluIG5hdiAmJiBuYXYudXNlckFnZW50RGF0YT8ucGxhdGZvcm0pIHtcbiAgICAgIHJldHVybiBgJHtuYXYudXNlckFnZW50RGF0YS5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpfSBCcm93c2VyLyR7bmF2aWdhdG9yLnVzZXJBZ2VudH07YDtcbiAgICB9XG4gICAgaWYgKG5hdmlnYXRvci5wbGF0Zm9ybSkge1xuICAgICAgcmV0dXJuIGAke25hdmlnYXRvci5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpfSBCcm93c2VyLyR7bmF2aWdhdG9yLnVzZXJBZ2VudH07YDtcbiAgICB9XG4gICAgcmV0dXJuIGB1bmtub3duIEJyb3dzZXIvJHtuYXZpZ2F0b3IudXNlckFnZW50fTtgO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGAke3Byb2Nlc3MuYXJjaH0gJHtwcm9jZXNzLnBsYXRmb3JtfSBOb2RlLmpzLyR7cHJvY2Vzcy52ZXJzaW9ufWA7XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59XG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXJzKGhlYWRlcnMpIHtcbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgaGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoaGVhZGVycyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGhlYWRlcnMgfHwge307XG4gIH1cbn1cbmNvbnN0IGZldGNoV2l0aEhlYWRlcnMgPSBhc3luYyAoZmV0Y2gsIHVybCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRIZWFkZXJzID0ge1xuICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgXCJVc2VyLUFnZW50XCI6IGBvbGxhbWEtanMvJHt2ZXJzaW9ufSAoJHtnZXRQbGF0Zm9ybSgpfSlgXG4gIH07XG4gIG9wdGlvbnMuaGVhZGVycyA9IG5vcm1hbGl6ZUhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcbiAgY29uc3QgY3VzdG9tSGVhZGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhvcHRpb25zLmhlYWRlcnMpLmZpbHRlcigoW2tleV0pID0+ICFPYmplY3Qua2V5cyhkZWZhdWx0SGVhZGVycykuc29tZSgoZGVmYXVsdEtleSkgPT4gZGVmYXVsdEtleS50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKSkpXG4gICk7XG4gIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAuLi5kZWZhdWx0SGVhZGVycyxcbiAgICAuLi5jdXN0b21IZWFkZXJzXG4gIH07XG4gIHJldHVybiBmZXRjaCh1cmwsIG9wdGlvbnMpO1xufTtcbmNvbnN0IGdldCA9IGFzeW5jIChmZXRjaCwgaG9zdCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aEhlYWRlcnMoZmV0Y2gsIGhvc3QsIHtcbiAgICBoZWFkZXJzOiBvcHRpb25zPy5oZWFkZXJzXG4gIH0pO1xuICBhd2FpdCBjaGVja09rKHJlc3BvbnNlKTtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmNvbnN0IHBvc3QgPSBhc3luYyAoZmV0Y2gsIGhvc3QsIGRhdGEsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgaXNSZWNvcmQgPSAoaW5wdXQpID0+IHtcbiAgICByZXR1cm4gaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGlucHV0KTtcbiAgfTtcbiAgY29uc3QgZm9ybWF0dGVkRGF0YSA9IGlzUmVjb3JkKGRhdGEpID8gSlNPTi5zdHJpbmdpZnkoZGF0YSkgOiBkYXRhO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aEhlYWRlcnMoZmV0Y2gsIGhvc3QsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGJvZHk6IGZvcm1hdHRlZERhdGEsXG4gICAgc2lnbmFsOiBvcHRpb25zPy5zaWduYWwsXG4gICAgaGVhZGVyczogb3B0aW9ucz8uaGVhZGVyc1xuICB9KTtcbiAgYXdhaXQgY2hlY2tPayhyZXNwb25zZSk7XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5jb25zdCBkZWwgPSBhc3luYyAoZmV0Y2gsIGhvc3QsIGRhdGEsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhIZWFkZXJzKGZldGNoLCBob3N0LCB7XG4gICAgbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgIGhlYWRlcnM6IG9wdGlvbnM/LmhlYWRlcnNcbiAgfSk7XG4gIGF3YWl0IGNoZWNrT2socmVzcG9uc2UpO1xuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuY29uc3QgcGFyc2VKU09OID0gYXN5bmMgZnVuY3Rpb24qIChpdHIpIHtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcihcInV0Zi04XCIpO1xuICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgY29uc3QgcmVhZGVyID0gaXRyLmdldFJlYWRlcigpO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IGNodW5rIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgIGlmIChkb25lKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKGNodW5rKTtcbiAgICBjb25zdCBwYXJ0cyA9IGJ1ZmZlci5zcGxpdChcIlxcblwiKTtcbiAgICBidWZmZXIgPSBwYXJ0cy5wb3AoKSA/PyBcIlwiO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgeWllbGQgSlNPTi5wYXJzZShwYXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcImludmFsaWQganNvbjogXCIsIHBhcnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHBhcnQgb2YgYnVmZmVyLnNwbGl0KFwiXFxuXCIpLmZpbHRlcigocCkgPT4gcCAhPT0gXCJcIikpIHtcbiAgICB0cnkge1xuICAgICAgeWllbGQgSlNPTi5wYXJzZShwYXJ0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKFwiaW52YWxpZCBqc29uOiBcIiwgcGFydCk7XG4gICAgfVxuICB9XG59O1xuY29uc3QgZm9ybWF0SG9zdCA9IChob3N0KSA9PiB7XG4gIGlmICghaG9zdCkge1xuICAgIHJldHVybiBkZWZhdWx0SG9zdDtcbiAgfVxuICBsZXQgaXNFeHBsaWNpdFByb3RvY29sID0gaG9zdC5pbmNsdWRlcyhcIjovL1wiKTtcbiAgaWYgKGhvc3Quc3RhcnRzV2l0aChcIjpcIikpIHtcbiAgICBob3N0ID0gYGh0dHA6Ly8xMjcuMC4wLjEke2hvc3R9YDtcbiAgICBpc0V4cGxpY2l0UHJvdG9jb2wgPSB0cnVlO1xuICB9XG4gIGlmICghaXNFeHBsaWNpdFByb3RvY29sKSB7XG4gICAgaG9zdCA9IGBodHRwOi8vJHtob3N0fWA7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChob3N0KTtcbiAgbGV0IHBvcnQgPSB1cmwucG9ydDtcbiAgaWYgKCFwb3J0KSB7XG4gICAgaWYgKCFpc0V4cGxpY2l0UHJvdG9jb2wpIHtcbiAgICAgIHBvcnQgPSBkZWZhdWx0UG9ydDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9ydCA9IHVybC5wcm90b2NvbCA9PT0gXCJodHRwczpcIiA/IFwiNDQzXCIgOiBcIjgwXCI7XG4gICAgfVxuICB9XG4gIGxldCBmb3JtYXR0ZWRIb3N0ID0gYCR7dXJsLnByb3RvY29sfS8vJHt1cmwuaG9zdG5hbWV9OiR7cG9ydH0ke3VybC5wYXRobmFtZX1gO1xuICBpZiAoZm9ybWF0dGVkSG9zdC5lbmRzV2l0aChcIi9cIikpIHtcbiAgICBmb3JtYXR0ZWRIb3N0ID0gZm9ybWF0dGVkSG9zdC5zbGljZSgwLCAtMSk7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdHRlZEhvc3Q7XG59O1xuXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fcHVibGljRmllbGQgPSAob2JqLCBrZXksIHZhbHVlKSA9PiB7XG4gIF9fZGVmTm9ybWFsUHJvcChvYmosIHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIgPyBrZXkgKyBcIlwiIDoga2V5LCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5sZXQgT2xsYW1hJDEgPSBjbGFzcyBPbGxhbWEge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsIFwiY29uZmlnXCIpO1xuICAgIF9fcHVibGljRmllbGQodGhpcywgXCJmZXRjaFwiKTtcbiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsIFwib25nb2luZ1N0cmVhbWVkUmVxdWVzdHNcIiwgW10pO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgaG9zdDogXCJcIixcbiAgICAgIGhlYWRlcnM6IGNvbmZpZz8uaGVhZGVyc1xuICAgIH07XG4gICAgaWYgKCFjb25maWc/LnByb3h5KSB7XG4gICAgICB0aGlzLmNvbmZpZy5ob3N0ID0gZm9ybWF0SG9zdChjb25maWc/Lmhvc3QgPz8gZGVmYXVsdEhvc3QpO1xuICAgIH1cbiAgICB0aGlzLmZldGNoID0gY29uZmlnPy5mZXRjaCA/PyBmZXRjaDtcbiAgfVxuICAvLyBBYm9ydCBhbnkgb25nb2luZyBzdHJlYW1lZCByZXF1ZXN0cyB0byBPbGxhbWFcbiAgYWJvcnQoKSB7XG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHRoaXMub25nb2luZ1N0cmVhbWVkUmVxdWVzdHMpIHtcbiAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICB9XG4gICAgdGhpcy5vbmdvaW5nU3RyZWFtZWRSZXF1ZXN0cy5sZW5ndGggPSAwO1xuICB9XG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgYSByZXF1ZXN0IHRvIHRoZSBPbGxhbWEgc2VydmVyLiBJZiB0aGUgcmVxdWVzdCBpcyBzdHJlYW1hYmxlLCBpdCB3aWxsIHJldHVybiBhXG4gICAqIEFib3J0YWJsZUFzeW5jSXRlcmF0b3IgdGhhdCB5aWVsZHMgdGhlIHJlc3BvbnNlIG1lc3NhZ2VzLiBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgKiBvYmplY3QuXG4gICAqIEBwYXJhbSBlbmRwb2ludCB7c3RyaW5nfSAtIFRoZSBlbmRwb2ludCB0byBzZW5kIHRoZSByZXF1ZXN0IHRvLlxuICAgKiBAcGFyYW0gcmVxdWVzdCB7b2JqZWN0fSAtIFRoZSByZXF1ZXN0IG9iamVjdCB0byBzZW5kIHRvIHRoZSBlbmRwb2ludC5cbiAgICogQHByb3RlY3RlZCB7VCB8IEFib3J0YWJsZUFzeW5jSXRlcmF0b3I8VD59IC0gVGhlIHJlc3BvbnNlIG9iamVjdCBvciBhIEFib3J0YWJsZUFzeW5jSXRlcmF0b3IgdGhhdCB5aWVsZHNcbiAgICogcmVzcG9uc2UgbWVzc2FnZXMuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIHRoZSByZXNwb25zZSBib2R5IGlzIG1pc3Npbmcgb3IgaWYgdGhlIHJlc3BvbnNlIGlzIGFuIGVycm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUIHwgQWJvcnRhYmxlQXN5bmNJdGVyYXRvcjxUPj59IC0gVGhlIHJlc3BvbnNlIG9iamVjdCBvciBhIEFib3J0YWJsZUFzeW5jSXRlcmF0b3IgdGhhdCB5aWVsZHMgdGhlIHN0cmVhbWVkIHJlc3BvbnNlLlxuICAgKi9cbiAgYXN5bmMgcHJvY2Vzc1N0cmVhbWFibGVSZXF1ZXN0KGVuZHBvaW50LCByZXF1ZXN0KSB7XG4gICAgcmVxdWVzdC5zdHJlYW0gPSByZXF1ZXN0LnN0cmVhbSA/PyBmYWxzZTtcbiAgICBjb25zdCBob3N0ID0gYCR7dGhpcy5jb25maWcuaG9zdH0vYXBpLyR7ZW5kcG9pbnR9YDtcbiAgICBpZiAocmVxdWVzdC5zdHJlYW0pIHtcbiAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlMiA9IGF3YWl0IHBvc3QodGhpcy5mZXRjaCwgaG9zdCwgcmVxdWVzdCwge1xuICAgICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuY29uZmlnLmhlYWRlcnNcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXNwb25zZTIuYm9keSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGJvZHlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBpdHIgPSBwYXJzZUpTT04ocmVzcG9uc2UyLmJvZHkpO1xuICAgICAgY29uc3QgYWJvcnRhYmxlQXN5bmNJdGVyYXRvciA9IG5ldyBBYm9ydGFibGVBc3luY0l0ZXJhdG9yKFxuICAgICAgICBhYm9ydENvbnRyb2xsZXIsXG4gICAgICAgIGl0cixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLm9uZ29pbmdTdHJlYW1lZFJlcXVlc3RzLmluZGV4T2YoYWJvcnRhYmxlQXN5bmNJdGVyYXRvcik7XG4gICAgICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5vbmdvaW5nU3RyZWFtZWRSZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGhpcy5vbmdvaW5nU3RyZWFtZWRSZXF1ZXN0cy5wdXNoKGFib3J0YWJsZUFzeW5jSXRlcmF0b3IpO1xuICAgICAgcmV0dXJuIGFib3J0YWJsZUFzeW5jSXRlcmF0b3I7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdCh0aGlzLmZldGNoLCBob3N0LCByZXF1ZXN0LCB7XG4gICAgICBoZWFkZXJzOiB0aGlzLmNvbmZpZy5oZWFkZXJzXG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgfVxuICAvKipcbiAgICogRW5jb2RlcyBhbiBpbWFnZSB0byBiYXNlNjQgaWYgaXQgaXMgYSBVaW50OEFycmF5LlxuICAgKiBAcGFyYW0gaW1hZ2Uge1VpbnQ4QXJyYXkgfCBzdHJpbmd9IC0gVGhlIGltYWdlIHRvIGVuY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBUaGUgYmFzZTY0IGVuY29kZWQgaW1hZ2UuXG4gICAqL1xuICBhc3luYyBlbmNvZGVJbWFnZShpbWFnZSkge1xuICAgIGlmICh0eXBlb2YgaW1hZ2UgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShpbWFnZSk7XG4gICAgICBsZXQgYnl0ZVN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBsZW4gPSB1aW50OEFycmF5LmJ5dGVMZW5ndGg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGJ5dGVTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1aW50OEFycmF5W2ldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBidG9hKGJ5dGVTdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gaW1hZ2U7XG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHJlc3BvbnNlIGZyb20gYSB0ZXh0IHByb21wdC5cbiAgICogQHBhcmFtIHJlcXVlc3Qge0dlbmVyYXRlUmVxdWVzdH0gLSBUaGUgcmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEdlbmVyYXRlUmVzcG9uc2UgfCBBYm9ydGFibGVBc3luY0l0ZXJhdG9yPEdlbmVyYXRlUmVzcG9uc2U+Pn0gLSBUaGUgcmVzcG9uc2Ugb2JqZWN0IG9yXG4gICAqIGFuIEFib3J0YWJsZUFzeW5jSXRlcmF0b3IgdGhhdCB5aWVsZHMgcmVzcG9uc2UgbWVzc2FnZXMuXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZShyZXF1ZXN0KSB7XG4gICAgaWYgKHJlcXVlc3QuaW1hZ2VzKSB7XG4gICAgICByZXF1ZXN0LmltYWdlcyA9IGF3YWl0IFByb21pc2UuYWxsKHJlcXVlc3QuaW1hZ2VzLm1hcCh0aGlzLmVuY29kZUltYWdlLmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0cmVhbWFibGVSZXF1ZXN0KFwiZ2VuZXJhdGVcIiwgcmVxdWVzdCk7XG4gIH1cbiAgLyoqXG4gICAqIENoYXRzIHdpdGggdGhlIG1vZGVsLiBUaGUgcmVxdWVzdCBvYmplY3QgY2FuIGNvbnRhaW4gbWVzc2FnZXMgd2l0aCBpbWFnZXMgdGhhdCBhcmUgZWl0aGVyXG4gICAqIFVpbnQ4QXJyYXlzIG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZ3MuIFRoZSBpbWFnZXMgd2lsbCBiZSBiYXNlNjQgZW5jb2RlZCBiZWZvcmUgc2VuZGluZyB0aGVcbiAgICogcmVxdWVzdC5cbiAgICogQHBhcmFtIHJlcXVlc3Qge0NoYXRSZXF1ZXN0fSAtIFRoZSByZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2hhdFJlc3BvbnNlIHwgQWJvcnRhYmxlQXN5bmNJdGVyYXRvcjxDaGF0UmVzcG9uc2U+Pn0gLSBUaGUgcmVzcG9uc2Ugb2JqZWN0IG9yIGFuXG4gICAqIEFib3J0YWJsZUFzeW5jSXRlcmF0b3IgdGhhdCB5aWVsZHMgcmVzcG9uc2UgbWVzc2FnZXMuXG4gICAqL1xuICBhc3luYyBjaGF0KHJlcXVlc3QpIHtcbiAgICBpZiAocmVxdWVzdC5tZXNzYWdlcykge1xuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHJlcXVlc3QubWVzc2FnZXMpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaW1hZ2VzKSB7XG4gICAgICAgICAgbWVzc2FnZS5pbWFnZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIG1lc3NhZ2UuaW1hZ2VzLm1hcCh0aGlzLmVuY29kZUltYWdlLmJpbmQodGhpcykpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RyZWFtYWJsZVJlcXVlc3QoXCJjaGF0XCIsIHJlcXVlc3QpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG1vZGVsIGZyb20gYSBzdHJlYW0gb2YgZGF0YS5cbiAgICogQHBhcmFtIHJlcXVlc3Qge0NyZWF0ZVJlcXVlc3R9IC0gVGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQcm9ncmVzc1Jlc3BvbnNlIHwgQWJvcnRhYmxlQXN5bmNJdGVyYXRvcjxQcm9ncmVzc1Jlc3BvbnNlPj59IC0gVGhlIHJlc3BvbnNlIG9iamVjdCBvciBhIHN0cmVhbSBvZiBwcm9ncmVzcyByZXNwb25zZXMuXG4gICAqL1xuICBhc3luYyBjcmVhdGUocmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdHJlYW1hYmxlUmVxdWVzdChcImNyZWF0ZVwiLCB7XG4gICAgICAuLi5yZXF1ZXN0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFB1bGxzIGEgbW9kZWwgZnJvbSB0aGUgT2xsYW1hIHJlZ2lzdHJ5LiBUaGUgcmVxdWVzdCBvYmplY3QgY2FuIGNvbnRhaW4gYSBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGVcbiAgICogcmVzcG9uc2Ugc2hvdWxkIGJlIHN0cmVhbWVkLlxuICAgKiBAcGFyYW0gcmVxdWVzdCB7UHVsbFJlcXVlc3R9IC0gVGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQcm9ncmVzc1Jlc3BvbnNlIHwgQWJvcnRhYmxlQXN5bmNJdGVyYXRvcjxQcm9ncmVzc1Jlc3BvbnNlPj59IC0gVGhlIHJlc3BvbnNlIG9iamVjdCBvclxuICAgKiBhbiBBYm9ydGFibGVBc3luY0l0ZXJhdG9yIHRoYXQgeWllbGRzIHJlc3BvbnNlIG1lc3NhZ2VzLlxuICAgKi9cbiAgYXN5bmMgcHVsbChyZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0cmVhbWFibGVSZXF1ZXN0KFwicHVsbFwiLCB7XG4gICAgICBuYW1lOiByZXF1ZXN0Lm1vZGVsLFxuICAgICAgc3RyZWFtOiByZXF1ZXN0LnN0cmVhbSxcbiAgICAgIGluc2VjdXJlOiByZXF1ZXN0Lmluc2VjdXJlXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFB1c2hlcyBhIG1vZGVsIHRvIHRoZSBPbGxhbWEgcmVnaXN0cnkuIFRoZSByZXF1ZXN0IG9iamVjdCBjYW4gY29udGFpbiBhIHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIGlmIHRoZVxuICAgKiByZXNwb25zZSBzaG91bGQgYmUgc3RyZWFtZWQuXG4gICAqIEBwYXJhbSByZXF1ZXN0IHtQdXNoUmVxdWVzdH0gLSBUaGUgcmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFByb2dyZXNzUmVzcG9uc2UgfCBBYm9ydGFibGVBc3luY0l0ZXJhdG9yPFByb2dyZXNzUmVzcG9uc2U+Pn0gLSBUaGUgcmVzcG9uc2Ugb2JqZWN0IG9yXG4gICAqIGFuIEFib3J0YWJsZUFzeW5jSXRlcmF0b3IgdGhhdCB5aWVsZHMgcmVzcG9uc2UgbWVzc2FnZXMuXG4gICAqL1xuICBhc3luYyBwdXNoKHJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RyZWFtYWJsZVJlcXVlc3QoXCJwdXNoXCIsIHtcbiAgICAgIG5hbWU6IHJlcXVlc3QubW9kZWwsXG4gICAgICBzdHJlYW06IHJlcXVlc3Quc3RyZWFtLFxuICAgICAgaW5zZWN1cmU6IHJlcXVlc3QuaW5zZWN1cmVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRGVsZXRlcyBhIG1vZGVsIGZyb20gdGhlIHNlcnZlci4gVGhlIHJlcXVlc3Qgb2JqZWN0IHNob3VsZCBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBtb2RlbCB0b1xuICAgKiBkZWxldGUuXG4gICAqIEBwYXJhbSByZXF1ZXN0IHtEZWxldGVSZXF1ZXN0fSAtIFRoZSByZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8U3RhdHVzUmVzcG9uc2U+fSAtIFRoZSByZXNwb25zZSBvYmplY3QuXG4gICAqL1xuICBhc3luYyBkZWxldGUocmVxdWVzdCkge1xuICAgIGF3YWl0IGRlbChcbiAgICAgIHRoaXMuZmV0Y2gsXG4gICAgICBgJHt0aGlzLmNvbmZpZy5ob3N0fS9hcGkvZGVsZXRlYCxcbiAgICAgIHsgbmFtZTogcmVxdWVzdC5tb2RlbCB9LFxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmNvbmZpZy5oZWFkZXJzIH1cbiAgICApO1xuICAgIHJldHVybiB7IHN0YXR1czogXCJzdWNjZXNzXCIgfTtcbiAgfVxuICAvKipcbiAgICogQ29waWVzIGEgbW9kZWwgZnJvbSBvbmUgbmFtZSB0byBhbm90aGVyLiBUaGUgcmVxdWVzdCBvYmplY3Qgc2hvdWxkIGNvbnRhaW4gdGhlIG5hbWUgb2YgdGhlXG4gICAqIG1vZGVsIHRvIGNvcHkgYW5kIHRoZSBuZXcgbmFtZS5cbiAgICogQHBhcmFtIHJlcXVlc3Qge0NvcHlSZXF1ZXN0fSAtIFRoZSByZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8U3RhdHVzUmVzcG9uc2U+fSAtIFRoZSByZXNwb25zZSBvYmplY3QuXG4gICAqL1xuICBhc3luYyBjb3B5KHJlcXVlc3QpIHtcbiAgICBhd2FpdCBwb3N0KHRoaXMuZmV0Y2gsIGAke3RoaXMuY29uZmlnLmhvc3R9L2FwaS9jb3B5YCwgeyAuLi5yZXF1ZXN0IH0sIHtcbiAgICAgIGhlYWRlcnM6IHRoaXMuY29uZmlnLmhlYWRlcnNcbiAgICB9KTtcbiAgICByZXR1cm4geyBzdGF0dXM6IFwic3VjY2Vzc1wiIH07XG4gIH1cbiAgLyoqXG4gICAqIExpc3RzIHRoZSBtb2RlbHMgb24gdGhlIHNlcnZlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8TGlzdFJlc3BvbnNlPn0gLSBUaGUgcmVzcG9uc2Ugb2JqZWN0LlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiB0aGUgcmVzcG9uc2UgYm9keSBpcyBtaXNzaW5nLlxuICAgKi9cbiAgYXN5bmMgbGlzdCgpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldCh0aGlzLmZldGNoLCBgJHt0aGlzLmNvbmZpZy5ob3N0fS9hcGkvdGFnc2AsIHtcbiAgICAgIGhlYWRlcnM6IHRoaXMuY29uZmlnLmhlYWRlcnNcbiAgICB9KTtcbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93cyB0aGUgbWV0YWRhdGEgb2YgYSBtb2RlbC4gVGhlIHJlcXVlc3Qgb2JqZWN0IHNob3VsZCBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBtb2RlbC5cbiAgICogQHBhcmFtIHJlcXVlc3Qge1Nob3dSZXF1ZXN0fSAtIFRoZSByZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8U2hvd1Jlc3BvbnNlPn0gLSBUaGUgcmVzcG9uc2Ugb2JqZWN0LlxuICAgKi9cbiAgYXN5bmMgc2hvdyhyZXF1ZXN0KSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb3N0KHRoaXMuZmV0Y2gsIGAke3RoaXMuY29uZmlnLmhvc3R9L2FwaS9zaG93YCwge1xuICAgICAgLi4ucmVxdWVzdFxuICAgIH0sIHtcbiAgICAgIGhlYWRlcnM6IHRoaXMuY29uZmlnLmhlYWRlcnNcbiAgICB9KTtcbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICB9XG4gIC8qKlxuICAgKiBFbWJlZHMgdGV4dCBpbnB1dCBpbnRvIHZlY3RvcnMuXG4gICAqIEBwYXJhbSByZXF1ZXN0IHtFbWJlZFJlcXVlc3R9IC0gVGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxFbWJlZFJlc3BvbnNlPn0gLSBUaGUgcmVzcG9uc2Ugb2JqZWN0LlxuICAgKi9cbiAgYXN5bmMgZW1iZWQocmVxdWVzdCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdCh0aGlzLmZldGNoLCBgJHt0aGlzLmNvbmZpZy5ob3N0fS9hcGkvZW1iZWRgLCB7XG4gICAgICAuLi5yZXF1ZXN0XG4gICAgfSwge1xuICAgICAgaGVhZGVyczogdGhpcy5jb25maWcuaGVhZGVyc1xuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gIH1cbiAgLyoqXG4gICAqIEVtYmVkcyBhIHRleHQgcHJvbXB0IGludG8gYSB2ZWN0b3IuXG4gICAqIEBwYXJhbSByZXF1ZXN0IHtFbWJlZGRpbmdzUmVxdWVzdH0gLSBUaGUgcmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEVtYmVkZGluZ3NSZXNwb25zZT59IC0gVGhlIHJlc3BvbnNlIG9iamVjdC5cbiAgICovXG4gIGFzeW5jIGVtYmVkZGluZ3MocmVxdWVzdCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdCh0aGlzLmZldGNoLCBgJHt0aGlzLmNvbmZpZy5ob3N0fS9hcGkvZW1iZWRkaW5nc2AsIHtcbiAgICAgIC4uLnJlcXVlc3RcbiAgICB9LCB7XG4gICAgICBoZWFkZXJzOiB0aGlzLmNvbmZpZy5oZWFkZXJzXG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgfVxuICAvKipcbiAgICogTGlzdHMgdGhlIHJ1bm5pbmcgbW9kZWxzIG9uIHRoZSBzZXJ2ZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8TGlzdFJlc3BvbnNlPn0gLSBUaGUgcmVzcG9uc2Ugb2JqZWN0LlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiB0aGUgcmVzcG9uc2UgYm9keSBpcyBtaXNzaW5nLlxuICAgKi9cbiAgYXN5bmMgcHMoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZXQodGhpcy5mZXRjaCwgYCR7dGhpcy5jb25maWcuaG9zdH0vYXBpL3BzYCwge1xuICAgICAgaGVhZGVyczogdGhpcy5jb25maWcuaGVhZGVyc1xuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gIH1cbn07XG5jb25zdCBicm93c2VyID0gbmV3IE9sbGFtYSQxKCk7XG5cbmV4cG9ydCB7IE9sbGFtYSQxIGFzIE9sbGFtYSwgYnJvd3NlciBhcyBkZWZhdWx0IH07XG4iLCAiLyohXG4gKiBtdXN0YWNoZS5qcyAtIExvZ2ljLWxlc3Mge3ttdXN0YWNoZX19IHRlbXBsYXRlcyB3aXRoIEphdmFTY3JpcHRcbiAqIGh0dHA6Ly9naXRodWIuY29tL2phbmwvbXVzdGFjaGUuanNcbiAqL1xuXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXlQb2x5ZmlsbCAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogTW9yZSBjb3JyZWN0IHR5cGVvZiBzdHJpbmcgaGFuZGxpbmcgYXJyYXlcbiAqIHdoaWNoIG5vcm1hbGx5IHJldHVybnMgdHlwZW9mICdvYmplY3QnXG4gKi9cbmZ1bmN0aW9uIHR5cGVTdHIgKG9iaikge1xuICByZXR1cm4gaXNBcnJheShvYmopID8gJ2FycmF5JyA6IHR5cGVvZiBvYmo7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCAoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbn1cblxuLyoqXG4gKiBOdWxsIHNhZmUgd2F5IG9mIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCxcbiAqIGluY2x1ZGluZyBpdHMgcHJvdG90eXBlLCBoYXMgYSBnaXZlbiBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eSAob2JqLCBwcm9wTmFtZSkge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgKHByb3BOYW1lIGluIG9iaik7XG59XG5cbi8qKlxuICogU2FmZSB3YXkgb2YgZGV0ZWN0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiB0aGluZyBpcyBhIHByaW1pdGl2ZSBhbmRcbiAqIHdoZXRoZXIgaXQgaGFzIHRoZSBnaXZlbiBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBwcmltaXRpdmVIYXNPd25Qcm9wZXJ0eSAocHJpbWl0aXZlLCBwcm9wTmFtZSkge1xuICByZXR1cm4gKFxuICAgIHByaW1pdGl2ZSAhPSBudWxsXG4gICAgJiYgdHlwZW9mIHByaW1pdGl2ZSAhPT0gJ29iamVjdCdcbiAgICAmJiBwcmltaXRpdmUuaGFzT3duUHJvcGVydHlcbiAgICAmJiBwcmltaXRpdmUuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpXG4gICk7XG59XG5cbi8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQ09VQ0hEQi01Nzdcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qcy9pc3N1ZXMvMTg5XG52YXIgcmVnRXhwVGVzdCA9IFJlZ0V4cC5wcm90b3R5cGUudGVzdDtcbmZ1bmN0aW9uIHRlc3RSZWdFeHAgKHJlLCBzdHJpbmcpIHtcbiAgcmV0dXJuIHJlZ0V4cFRlc3QuY2FsbChyZSwgc3RyaW5nKTtcbn1cblxudmFyIG5vblNwYWNlUmUgPSAvXFxTLztcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZSAoc3RyaW5nKSB7XG4gIHJldHVybiAhdGVzdFJlZ0V4cChub25TcGFjZVJlLCBzdHJpbmcpO1xufVxuXG52YXIgZW50aXR5TWFwID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnLFxuICAnLyc6ICcmI3gyRjsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5mdW5jdGlvbiBlc2NhcGVIdG1sIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UoL1smPD5cIidgPVxcL10vZywgZnVuY3Rpb24gZnJvbUVudGl0eU1hcCAocykge1xuICAgIHJldHVybiBlbnRpdHlNYXBbc107XG4gIH0pO1xufVxuXG52YXIgd2hpdGVSZSA9IC9cXHMqLztcbnZhciBzcGFjZVJlID0gL1xccysvO1xudmFyIGVxdWFsc1JlID0gL1xccyo9LztcbnZhciBjdXJseVJlID0gL1xccypcXH0vO1xudmFyIHRhZ1JlID0gLyN8XFxefFxcL3w+fFxce3wmfD18IS87XG5cbi8qKlxuICogQnJlYWtzIHVwIHRoZSBnaXZlbiBgdGVtcGxhdGVgIHN0cmluZyBpbnRvIGEgdHJlZSBvZiB0b2tlbnMuIElmIHRoZSBgdGFnc2BcbiAqIGFyZ3VtZW50IGlzIGdpdmVuIGhlcmUgaXQgbXVzdCBiZSBhbiBhcnJheSB3aXRoIHR3byBzdHJpbmcgdmFsdWVzOiB0aGVcbiAqIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFncyB1c2VkIGluIHRoZSB0ZW1wbGF0ZSAoZS5nLiBbIFwiPCVcIiwgXCIlPlwiIF0pLiBPZlxuICogY291cnNlLCB0aGUgZGVmYXVsdCBpcyB0byB1c2UgbXVzdGFjaGVzIChpLmUuIG11c3RhY2hlLnRhZ3MpLlxuICpcbiAqIEEgdG9rZW4gaXMgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCA0IGVsZW1lbnRzLiBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGVcbiAqIG11c3RhY2hlIHN5bWJvbCB0aGF0IHdhcyB1c2VkIGluc2lkZSB0aGUgdGFnLCBlLmcuIFwiI1wiIG9yIFwiJlwiLiBJZiB0aGUgdGFnXG4gKiBkaWQgbm90IGNvbnRhaW4gYSBzeW1ib2wgKGkuZS4ge3tteVZhbHVlfX0pIHRoaXMgZWxlbWVudCBpcyBcIm5hbWVcIi4gRm9yXG4gKiBhbGwgdGV4dCB0aGF0IGFwcGVhcnMgb3V0c2lkZSBhIHN5bWJvbCB0aGlzIGVsZW1lbnQgaXMgXCJ0ZXh0XCIuXG4gKlxuICogVGhlIHNlY29uZCBlbGVtZW50IG9mIGEgdG9rZW4gaXMgaXRzIFwidmFsdWVcIi4gRm9yIG11c3RhY2hlIHRhZ3MgdGhpcyBpc1xuICogd2hhdGV2ZXIgZWxzZSB3YXMgaW5zaWRlIHRoZSB0YWcgYmVzaWRlcyB0aGUgb3BlbmluZyBzeW1ib2wuIEZvciB0ZXh0IHRva2Vuc1xuICogdGhpcyBpcyB0aGUgdGV4dCBpdHNlbGYuXG4gKlxuICogVGhlIHRoaXJkIGFuZCBmb3VydGggZWxlbWVudHMgb2YgdGhlIHRva2VuIGFyZSB0aGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzLFxuICogcmVzcGVjdGl2ZWx5LCBvZiB0aGUgdG9rZW4gaW4gdGhlIG9yaWdpbmFsIHRlbXBsYXRlLlxuICpcbiAqIFRva2VucyB0aGF0IGFyZSB0aGUgcm9vdCBub2RlIG9mIGEgc3VidHJlZSBjb250YWluIHR3byBtb3JlIGVsZW1lbnRzOiAxKSBhblxuICogYXJyYXkgb2YgdG9rZW5zIGluIHRoZSBzdWJ0cmVlIGFuZCAyKSB0aGUgaW5kZXggaW4gdGhlIG9yaWdpbmFsIHRlbXBsYXRlIGF0XG4gKiB3aGljaCB0aGUgY2xvc2luZyB0YWcgZm9yIHRoYXQgc2VjdGlvbiBiZWdpbnMuXG4gKlxuICogVG9rZW5zIGZvciBwYXJ0aWFscyBhbHNvIGNvbnRhaW4gdHdvIG1vcmUgZWxlbWVudHM6IDEpIGEgc3RyaW5nIHZhbHVlIG9mXG4gKiBpbmRlbmRhdGlvbiBwcmlvciB0byB0aGF0IHRhZyBhbmQgMikgdGhlIGluZGV4IG9mIHRoYXQgdGFnIG9uIHRoYXQgbGluZSAtXG4gKiBlZyBhIHZhbHVlIG9mIDIgaW5kaWNhdGVzIHRoZSBwYXJ0aWFsIGlzIHRoZSB0aGlyZCB0YWcgb24gdGhpcyBsaW5lLlxuICovXG5mdW5jdGlvbiBwYXJzZVRlbXBsYXRlICh0ZW1wbGF0ZSwgdGFncykge1xuICBpZiAoIXRlbXBsYXRlKVxuICAgIHJldHVybiBbXTtcbiAgdmFyIGxpbmVIYXNOb25TcGFjZSA9IGZhbHNlO1xuICB2YXIgc2VjdGlvbnMgPSBbXTsgICAgIC8vIFN0YWNrIHRvIGhvbGQgc2VjdGlvbiB0b2tlbnNcbiAgdmFyIHRva2VucyA9IFtdOyAgICAgICAvLyBCdWZmZXIgdG8gaG9sZCB0aGUgdG9rZW5zXG4gIHZhciBzcGFjZXMgPSBbXTsgICAgICAgLy8gSW5kaWNlcyBvZiB3aGl0ZXNwYWNlIHRva2VucyBvbiB0aGUgY3VycmVudCBsaW5lXG4gIHZhciBoYXNUYWcgPSBmYWxzZTsgICAgLy8gSXMgdGhlcmUgYSB7e3RhZ319IG9uIHRoZSBjdXJyZW50IGxpbmU/XG4gIHZhciBub25TcGFjZSA9IGZhbHNlOyAgLy8gSXMgdGhlcmUgYSBub24tc3BhY2UgY2hhciBvbiB0aGUgY3VycmVudCBsaW5lP1xuICB2YXIgaW5kZW50YXRpb24gPSAnJzsgIC8vIFRyYWNrcyBpbmRlbnRhdGlvbiBmb3IgdGFncyB0aGF0IHVzZSBpdFxuICB2YXIgdGFnSW5kZXggPSAwOyAgICAgIC8vIFN0b3JlcyBhIGNvdW50IG9mIG51bWJlciBvZiB0YWdzIGVuY291bnRlcmVkIG9uIGEgbGluZVxuXG4gIC8vIFN0cmlwcyBhbGwgd2hpdGVzcGFjZSB0b2tlbnMgYXJyYXkgZm9yIHRoZSBjdXJyZW50IGxpbmVcbiAgLy8gaWYgdGhlcmUgd2FzIGEge3sjdGFnfX0gb24gaXQgYW5kIG90aGVyd2lzZSBvbmx5IHNwYWNlLlxuICBmdW5jdGlvbiBzdHJpcFNwYWNlICgpIHtcbiAgICBpZiAoaGFzVGFnICYmICFub25TcGFjZSkge1xuICAgICAgd2hpbGUgKHNwYWNlcy5sZW5ndGgpXG4gICAgICAgIGRlbGV0ZSB0b2tlbnNbc3BhY2VzLnBvcCgpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3BhY2VzID0gW107XG4gICAgfVxuXG4gICAgaGFzVGFnID0gZmFsc2U7XG4gICAgbm9uU3BhY2UgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBvcGVuaW5nVGFnUmUsIGNsb3NpbmdUYWdSZSwgY2xvc2luZ0N1cmx5UmU7XG4gIGZ1bmN0aW9uIGNvbXBpbGVUYWdzICh0YWdzVG9Db21waWxlKSB7XG4gICAgaWYgKHR5cGVvZiB0YWdzVG9Db21waWxlID09PSAnc3RyaW5nJylcbiAgICAgIHRhZ3NUb0NvbXBpbGUgPSB0YWdzVG9Db21waWxlLnNwbGl0KHNwYWNlUmUsIDIpO1xuXG4gICAgaWYgKCFpc0FycmF5KHRhZ3NUb0NvbXBpbGUpIHx8IHRhZ3NUb0NvbXBpbGUubGVuZ3RoICE9PSAyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRhZ3M6ICcgKyB0YWdzVG9Db21waWxlKTtcblxuICAgIG9wZW5pbmdUYWdSZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKHRhZ3NUb0NvbXBpbGVbMF0pICsgJ1xcXFxzKicpO1xuICAgIGNsb3NpbmdUYWdSZSA9IG5ldyBSZWdFeHAoJ1xcXFxzKicgKyBlc2NhcGVSZWdFeHAodGFnc1RvQ29tcGlsZVsxXSkpO1xuICAgIGNsb3NpbmdDdXJseVJlID0gbmV3IFJlZ0V4cCgnXFxcXHMqJyArIGVzY2FwZVJlZ0V4cCgnfScgKyB0YWdzVG9Db21waWxlWzFdKSk7XG4gIH1cblxuICBjb21waWxlVGFncyh0YWdzIHx8IG11c3RhY2hlLnRhZ3MpO1xuXG4gIHZhciBzY2FubmVyID0gbmV3IFNjYW5uZXIodGVtcGxhdGUpO1xuXG4gIHZhciBzdGFydCwgdHlwZSwgdmFsdWUsIGNociwgdG9rZW4sIG9wZW5TZWN0aW9uO1xuICB3aGlsZSAoIXNjYW5uZXIuZW9zKCkpIHtcbiAgICBzdGFydCA9IHNjYW5uZXIucG9zO1xuXG4gICAgLy8gTWF0Y2ggYW55IHRleHQgYmV0d2VlbiB0YWdzLlxuICAgIHZhbHVlID0gc2Nhbm5lci5zY2FuVW50aWwob3BlbmluZ1RhZ1JlKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBpIDwgdmFsdWVMZW5ndGg7ICsraSkge1xuICAgICAgICBjaHIgPSB2YWx1ZS5jaGFyQXQoaSk7XG5cbiAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjaHIpKSB7XG4gICAgICAgICAgc3BhY2VzLnB1c2godG9rZW5zLmxlbmd0aCk7XG4gICAgICAgICAgaW5kZW50YXRpb24gKz0gY2hyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vblNwYWNlID0gdHJ1ZTtcbiAgICAgICAgICBsaW5lSGFzTm9uU3BhY2UgPSB0cnVlO1xuICAgICAgICAgIGluZGVudGF0aW9uICs9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRva2Vucy5wdXNoKFsgJ3RleHQnLCBjaHIsIHN0YXJ0LCBzdGFydCArIDEgXSk7XG4gICAgICAgIHN0YXJ0ICs9IDE7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIHdoaXRlc3BhY2Ugb24gdGhlIGN1cnJlbnQgbGluZS5cbiAgICAgICAgaWYgKGNociA9PT0gJ1xcbicpIHtcbiAgICAgICAgICBzdHJpcFNwYWNlKCk7XG4gICAgICAgICAgaW5kZW50YXRpb24gPSAnJztcbiAgICAgICAgICB0YWdJbmRleCA9IDA7XG4gICAgICAgICAgbGluZUhhc05vblNwYWNlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYXRjaCB0aGUgb3BlbmluZyB0YWcuXG4gICAgaWYgKCFzY2FubmVyLnNjYW4ob3BlbmluZ1RhZ1JlKSlcbiAgICAgIGJyZWFrO1xuXG4gICAgaGFzVGFnID0gdHJ1ZTtcblxuICAgIC8vIEdldCB0aGUgdGFnIHR5cGUuXG4gICAgdHlwZSA9IHNjYW5uZXIuc2Nhbih0YWdSZSkgfHwgJ25hbWUnO1xuICAgIHNjYW5uZXIuc2Nhbih3aGl0ZVJlKTtcblxuICAgIC8vIEdldCB0aGUgdGFnIHZhbHVlLlxuICAgIGlmICh0eXBlID09PSAnPScpIHtcbiAgICAgIHZhbHVlID0gc2Nhbm5lci5zY2FuVW50aWwoZXF1YWxzUmUpO1xuICAgICAgc2Nhbm5lci5zY2FuKGVxdWFsc1JlKTtcbiAgICAgIHNjYW5uZXIuc2NhblVudGlsKGNsb3NpbmdUYWdSZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAneycpIHtcbiAgICAgIHZhbHVlID0gc2Nhbm5lci5zY2FuVW50aWwoY2xvc2luZ0N1cmx5UmUpO1xuICAgICAgc2Nhbm5lci5zY2FuKGN1cmx5UmUpO1xuICAgICAgc2Nhbm5lci5zY2FuVW50aWwoY2xvc2luZ1RhZ1JlKTtcbiAgICAgIHR5cGUgPSAnJic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gc2Nhbm5lci5zY2FuVW50aWwoY2xvc2luZ1RhZ1JlKTtcbiAgICB9XG5cbiAgICAvLyBNYXRjaCB0aGUgY2xvc2luZyB0YWcuXG4gICAgaWYgKCFzY2FubmVyLnNjYW4oY2xvc2luZ1RhZ1JlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5jbG9zZWQgdGFnIGF0ICcgKyBzY2FubmVyLnBvcyk7XG5cbiAgICBpZiAodHlwZSA9PSAnPicpIHtcbiAgICAgIHRva2VuID0gWyB0eXBlLCB2YWx1ZSwgc3RhcnQsIHNjYW5uZXIucG9zLCBpbmRlbnRhdGlvbiwgdGFnSW5kZXgsIGxpbmVIYXNOb25TcGFjZSBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b2tlbiA9IFsgdHlwZSwgdmFsdWUsIHN0YXJ0LCBzY2FubmVyLnBvcyBdO1xuICAgIH1cbiAgICB0YWdJbmRleCsrO1xuICAgIHRva2Vucy5wdXNoKHRva2VuKTtcblxuICAgIGlmICh0eXBlID09PSAnIycgfHwgdHlwZSA9PT0gJ14nKSB7XG4gICAgICBzZWN0aW9ucy5wdXNoKHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICcvJykge1xuICAgICAgLy8gQ2hlY2sgc2VjdGlvbiBuZXN0aW5nLlxuICAgICAgb3BlblNlY3Rpb24gPSBzZWN0aW9ucy5wb3AoKTtcblxuICAgICAgaWYgKCFvcGVuU2VjdGlvbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbm9wZW5lZCBzZWN0aW9uIFwiJyArIHZhbHVlICsgJ1wiIGF0ICcgKyBzdGFydCk7XG5cbiAgICAgIGlmIChvcGVuU2VjdGlvblsxXSAhPT0gdmFsdWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5jbG9zZWQgc2VjdGlvbiBcIicgKyBvcGVuU2VjdGlvblsxXSArICdcIiBhdCAnICsgc3RhcnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ25hbWUnIHx8IHR5cGUgPT09ICd7JyB8fCB0eXBlID09PSAnJicpIHtcbiAgICAgIG5vblNwYWNlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICc9Jykge1xuICAgICAgLy8gU2V0IHRoZSB0YWdzIGZvciB0aGUgbmV4dCB0aW1lIGFyb3VuZC5cbiAgICAgIGNvbXBpbGVUYWdzKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzdHJpcFNwYWNlKCk7XG5cbiAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvcGVuIHNlY3Rpb25zIHdoZW4gd2UncmUgZG9uZS5cbiAgb3BlblNlY3Rpb24gPSBzZWN0aW9ucy5wb3AoKTtcblxuICBpZiAob3BlblNlY3Rpb24pXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmNsb3NlZCBzZWN0aW9uIFwiJyArIG9wZW5TZWN0aW9uWzFdICsgJ1wiIGF0ICcgKyBzY2FubmVyLnBvcyk7XG5cbiAgcmV0dXJuIG5lc3RUb2tlbnMoc3F1YXNoVG9rZW5zKHRva2VucykpO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIHRoZSB2YWx1ZXMgb2YgY29uc2VjdXRpdmUgdGV4dCB0b2tlbnMgaW4gdGhlIGdpdmVuIGB0b2tlbnNgIGFycmF5XG4gKiB0byBhIHNpbmdsZSB0b2tlbi5cbiAqL1xuZnVuY3Rpb24gc3F1YXNoVG9rZW5zICh0b2tlbnMpIHtcbiAgdmFyIHNxdWFzaGVkVG9rZW5zID0gW107XG5cbiAgdmFyIHRva2VuLCBsYXN0VG9rZW47XG4gIGZvciAodmFyIGkgPSAwLCBudW1Ub2tlbnMgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbnVtVG9rZW5zOyArK2kpIHtcbiAgICB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgIGlmICh0b2tlbikge1xuICAgICAgaWYgKHRva2VuWzBdID09PSAndGV4dCcgJiYgbGFzdFRva2VuICYmIGxhc3RUb2tlblswXSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIGxhc3RUb2tlblsxXSArPSB0b2tlblsxXTtcbiAgICAgICAgbGFzdFRva2VuWzNdID0gdG9rZW5bM107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcXVhc2hlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgbGFzdFRva2VuID0gdG9rZW47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNxdWFzaGVkVG9rZW5zO1xufVxuXG4vKipcbiAqIEZvcm1zIHRoZSBnaXZlbiBhcnJheSBvZiBgdG9rZW5zYCBpbnRvIGEgbmVzdGVkIHRyZWUgc3RydWN0dXJlIHdoZXJlXG4gKiB0b2tlbnMgdGhhdCByZXByZXNlbnQgYSBzZWN0aW9uIGhhdmUgdHdvIGFkZGl0aW9uYWwgaXRlbXM6IDEpIGFuIGFycmF5IG9mXG4gKiBhbGwgdG9rZW5zIHRoYXQgYXBwZWFyIGluIHRoYXQgc2VjdGlvbiBhbmQgMikgdGhlIGluZGV4IGluIHRoZSBvcmlnaW5hbFxuICogdGVtcGxhdGUgdGhhdCByZXByZXNlbnRzIHRoZSBlbmQgb2YgdGhhdCBzZWN0aW9uLlxuICovXG5mdW5jdGlvbiBuZXN0VG9rZW5zICh0b2tlbnMpIHtcbiAgdmFyIG5lc3RlZFRva2VucyA9IFtdO1xuICB2YXIgY29sbGVjdG9yID0gbmVzdGVkVG9rZW5zO1xuICB2YXIgc2VjdGlvbnMgPSBbXTtcblxuICB2YXIgdG9rZW4sIHNlY3Rpb247XG4gIGZvciAodmFyIGkgPSAwLCBudW1Ub2tlbnMgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbnVtVG9rZW5zOyArK2kpIHtcbiAgICB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgIHN3aXRjaCAodG9rZW5bMF0pIHtcbiAgICAgIGNhc2UgJyMnOlxuICAgICAgY2FzZSAnXic6XG4gICAgICAgIGNvbGxlY3Rvci5wdXNoKHRva2VuKTtcbiAgICAgICAgc2VjdGlvbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbGxlY3RvciA9IHRva2VuWzRdID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLyc6XG4gICAgICAgIHNlY3Rpb24gPSBzZWN0aW9ucy5wb3AoKTtcbiAgICAgICAgc2VjdGlvbls1XSA9IHRva2VuWzJdO1xuICAgICAgICBjb2xsZWN0b3IgPSBzZWN0aW9ucy5sZW5ndGggPiAwID8gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV1bNF0gOiBuZXN0ZWRUb2tlbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29sbGVjdG9yLnB1c2godG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXN0ZWRUb2tlbnM7XG59XG5cbi8qKlxuICogQSBzaW1wbGUgc3RyaW5nIHNjYW5uZXIgdGhhdCBpcyB1c2VkIGJ5IHRoZSB0ZW1wbGF0ZSBwYXJzZXIgdG8gZmluZFxuICogdG9rZW5zIGluIHRlbXBsYXRlIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIFNjYW5uZXIgKHN0cmluZykge1xuICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgdGhpcy50YWlsID0gc3RyaW5nO1xuICB0aGlzLnBvcyA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhaWwgaXMgZW1wdHkgKGVuZCBvZiBzdHJpbmcpLlxuICovXG5TY2FubmVyLnByb3RvdHlwZS5lb3MgPSBmdW5jdGlvbiBlb3MgKCkge1xuICByZXR1cm4gdGhpcy50YWlsID09PSAnJztcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAqIFJldHVybnMgdGhlIG1hdGNoZWQgdGV4dCBpZiBpdCBjYW4gbWF0Y2gsIHRoZSBlbXB0eSBzdHJpbmcgb3RoZXJ3aXNlLlxuICovXG5TY2FubmVyLnByb3RvdHlwZS5zY2FuID0gZnVuY3Rpb24gc2NhbiAocmUpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy50YWlsLm1hdGNoKHJlKTtcblxuICBpZiAoIW1hdGNoIHx8IG1hdGNoLmluZGV4ICE9PSAwKVxuICAgIHJldHVybiAnJztcblxuICB2YXIgc3RyaW5nID0gbWF0Y2hbMF07XG5cbiAgdGhpcy50YWlsID0gdGhpcy50YWlsLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKTtcbiAgdGhpcy5wb3MgKz0gc3RyaW5nLmxlbmd0aDtcblxuICByZXR1cm4gc3RyaW5nO1xufTtcblxuLyoqXG4gKiBTa2lwcyBhbGwgdGV4dCB1bnRpbCB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGNhbiBiZSBtYXRjaGVkLiBSZXR1cm5zXG4gKiB0aGUgc2tpcHBlZCBzdHJpbmcsIHdoaWNoIGlzIHRoZSBlbnRpcmUgdGFpbCBpZiBubyBtYXRjaCBjYW4gYmUgbWFkZS5cbiAqL1xuU2Nhbm5lci5wcm90b3R5cGUuc2NhblVudGlsID0gZnVuY3Rpb24gc2NhblVudGlsIChyZSkge1xuICB2YXIgaW5kZXggPSB0aGlzLnRhaWwuc2VhcmNoKHJlKSwgbWF0Y2g7XG5cbiAgc3dpdGNoIChpbmRleCkge1xuICAgIGNhc2UgLTE6XG4gICAgICBtYXRjaCA9IHRoaXMudGFpbDtcbiAgICAgIHRoaXMudGFpbCA9ICcnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAwOlxuICAgICAgbWF0Y2ggPSAnJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBtYXRjaCA9IHRoaXMudGFpbC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgdGhpcy50YWlsID0gdGhpcy50YWlsLnN1YnN0cmluZyhpbmRleCk7XG4gIH1cblxuICB0aGlzLnBvcyArPSBtYXRjaC5sZW5ndGg7XG5cbiAgcmV0dXJuIG1hdGNoO1xufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVuZGVyaW5nIGNvbnRleHQgYnkgd3JhcHBpbmcgYSB2aWV3IG9iamVjdCBhbmRcbiAqIG1haW50YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gQ29udGV4dCAodmlldywgcGFyZW50Q29udGV4dCkge1xuICB0aGlzLnZpZXcgPSB2aWV3O1xuICB0aGlzLmNhY2hlID0geyAnLic6IHRoaXMudmlldyB9O1xuICB0aGlzLnBhcmVudCA9IHBhcmVudENvbnRleHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb250ZXh0IHVzaW5nIHRoZSBnaXZlbiB2aWV3IHdpdGggdGhpcyBjb250ZXh0XG4gKiBhcyB0aGUgcGFyZW50LlxuICovXG5Db250ZXh0LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAodmlldykge1xuICByZXR1cm4gbmV3IENvbnRleHQodmlldywgdGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBuYW1lIGluIHRoaXMgY29udGV4dCwgdHJhdmVyc2luZ1xuICogdXAgdGhlIGNvbnRleHQgaGllcmFyY2h5IGlmIHRoZSB2YWx1ZSBpcyBhYnNlbnQgaW4gdGhpcyBjb250ZXh0J3Mgdmlldy5cbiAqL1xuQ29udGV4dC5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24gbG9va3VwIChuYW1lKSB7XG4gIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cbiAgdmFyIHZhbHVlO1xuICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICB2YWx1ZSA9IGNhY2hlW25hbWVdO1xuICB9IGVsc2Uge1xuICAgIHZhciBjb250ZXh0ID0gdGhpcywgaW50ZXJtZWRpYXRlVmFsdWUsIG5hbWVzLCBpbmRleCwgbG9va3VwSGl0ID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoY29udGV4dCkge1xuICAgICAgaWYgKG5hbWUuaW5kZXhPZignLicpID4gMCkge1xuICAgICAgICBpbnRlcm1lZGlhdGVWYWx1ZSA9IGNvbnRleHQudmlldztcbiAgICAgICAgbmFtZXMgPSBuYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIGluZGV4ID0gMDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVXNpbmcgdGhlIGRvdCBub3Rpb24gcGF0aCBpbiBgbmFtZWAsIHdlIGRlc2NlbmQgdGhyb3VnaCB0aGVcbiAgICAgICAgICogbmVzdGVkIG9iamVjdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgbG9va3VwIGhhcyBiZWVuIHN1Y2Nlc3NmdWwsIHdlIGhhdmUgdG9cbiAgICAgICAgICogY2hlY2sgaWYgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBwYXRoIGFjdHVhbGx5IGhhcyB0aGUgcHJvcGVydHlcbiAgICAgICAgICogd2UgYXJlIGxvb2tpbmcgZm9yLiBXZSBzdG9yZSB0aGUgcmVzdWx0IGluIGBsb29rdXBIaXRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIGlzIHNwZWNpYWxseSBuZWNlc3NhcnkgZm9yIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIHNldCB0b1xuICAgICAgICAgKiBgdW5kZWZpbmVkYCBhbmQgd2Ugd2FudCB0byBhdm9pZCBsb29raW5nIHVwIHBhcmVudCBjb250ZXh0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogSW4gdGhlIGNhc2Ugd2hlcmUgZG90IG5vdGF0aW9uIGlzIHVzZWQsIHdlIGNvbnNpZGVyIHRoZSBsb29rdXBcbiAgICAgICAgICogdG8gYmUgc3VjY2Vzc2Z1bCBldmVuIGlmIHRoZSBsYXN0IFwib2JqZWN0XCIgaW4gdGhlIHBhdGggaXNcbiAgICAgICAgICogbm90IGFjdHVhbGx5IGFuIG9iamVjdCBidXQgYSBwcmltaXRpdmUgKGUuZy4sIGEgc3RyaW5nLCBvciBhblxuICAgICAgICAgKiBpbnRlZ2VyKSwgYmVjYXVzZSBpdCBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGFjY2VzcyBhIHByb3BlcnR5XG4gICAgICAgICAqIG9mIGFuIGF1dG9ib3hlZCBwcmltaXRpdmUsIHN1Y2ggYXMgdGhlIGxlbmd0aCBvZiBhIHN0cmluZy5cbiAgICAgICAgICoqL1xuICAgICAgICB3aGlsZSAoaW50ZXJtZWRpYXRlVmFsdWUgIT0gbnVsbCAmJiBpbmRleCA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gbmFtZXMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIGxvb2t1cEhpdCA9IChcbiAgICAgICAgICAgICAgaGFzUHJvcGVydHkoaW50ZXJtZWRpYXRlVmFsdWUsIG5hbWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlSGFzT3duUHJvcGVydHkoaW50ZXJtZWRpYXRlVmFsdWUsIG5hbWVzW2luZGV4XSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpbnRlcm1lZGlhdGVWYWx1ZSA9IGludGVybWVkaWF0ZVZhbHVlW25hbWVzW2luZGV4KytdXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJtZWRpYXRlVmFsdWUgPSBjb250ZXh0LnZpZXdbbmFtZV07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9ubHkgY2hlY2tpbmcgYWdhaW5zdCBgaGFzUHJvcGVydHlgLCB3aGljaCBhbHdheXMgcmV0dXJucyBgZmFsc2VgIGlmXG4gICAgICAgICAqIGBjb250ZXh0LnZpZXdgIGlzIG5vdCBhbiBvYmplY3QuIERlbGliZXJhdGVseSBvbWl0dGluZyB0aGUgY2hlY2tcbiAgICAgICAgICogYWdhaW5zdCBgcHJpbWl0aXZlSGFzT3duUHJvcGVydHlgIGlmIGRvdCBub3RhdGlvbiBpcyBub3QgdXNlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQ29uc2lkZXIgdGhpcyBleGFtcGxlOlxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICogTXVzdGFjaGUucmVuZGVyKFwiVGhlIGxlbmd0aCBvZiBhIGZvb3RiYWxsIGZpZWxkIGlzIHt7I2xlbmd0aH19e3tsZW5ndGh9fXt7L2xlbmd0aH19LlwiLCB7bGVuZ3RoOiBcIjEwMCB5YXJkc1wifSlcbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIHdlIHdlcmUgdG8gY2hlY2sgYWxzbyBhZ2FpbnN0IGBwcmltaXRpdmVIYXNPd25Qcm9wZXJ0eWAsIGFzIHdlIGRvXG4gICAgICAgICAqIGluIHRoZSBkb3Qgbm90YXRpb24gY2FzZSwgdGhlbiByZW5kZXIgY2FsbCB3b3VsZCByZXR1cm46XG4gICAgICAgICAqXG4gICAgICAgICAqIFwiVGhlIGxlbmd0aCBvZiBhIGZvb3RiYWxsIGZpZWxkIGlzIDkuXCJcbiAgICAgICAgICpcbiAgICAgICAgICogcmF0aGVyIHRoYW4gdGhlIGV4cGVjdGVkOlxuICAgICAgICAgKlxuICAgICAgICAgKiBcIlRoZSBsZW5ndGggb2YgYSBmb290YmFsbCBmaWVsZCBpcyAxMDAgeWFyZHMuXCJcbiAgICAgICAgICoqL1xuICAgICAgICBsb29rdXBIaXQgPSBoYXNQcm9wZXJ0eShjb250ZXh0LnZpZXcsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobG9va3VwSGl0KSB7XG4gICAgICAgIHZhbHVlID0gaW50ZXJtZWRpYXRlVmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0ID0gY29udGV4dC5wYXJlbnQ7XG4gICAgfVxuXG4gICAgY2FjaGVbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSlcbiAgICB2YWx1ZSA9IHZhbHVlLmNhbGwodGhpcy52aWV3KTtcblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIEEgV3JpdGVyIGtub3dzIGhvdyB0byB0YWtlIGEgc3RyZWFtIG9mIHRva2VucyBhbmQgcmVuZGVyIHRoZW0gdG8gYVxuICogc3RyaW5nLCBnaXZlbiBhIGNvbnRleHQuIEl0IGFsc28gbWFpbnRhaW5zIGEgY2FjaGUgb2YgdGVtcGxhdGVzIHRvXG4gKiBhdm9pZCB0aGUgbmVlZCB0byBwYXJzZSB0aGUgc2FtZSB0ZW1wbGF0ZSB0d2ljZS5cbiAqL1xuZnVuY3Rpb24gV3JpdGVyICgpIHtcbiAgdGhpcy50ZW1wbGF0ZUNhY2hlID0ge1xuICAgIF9jYWNoZToge30sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuX2NhY2hlW2tleV0gPSB2YWx1ZTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0IChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZVtrZXldO1xuICAgIH0sXG4gICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgIHRoaXMuX2NhY2hlID0ge307XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENsZWFycyBhbGwgY2FjaGVkIHRlbXBsYXRlcyBpbiB0aGlzIHdyaXRlci5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5jbGVhckNhY2hlID0gZnVuY3Rpb24gY2xlYXJDYWNoZSAoKSB7XG4gIGlmICh0eXBlb2YgdGhpcy50ZW1wbGF0ZUNhY2hlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMudGVtcGxhdGVDYWNoZS5jbGVhcigpO1xuICB9XG59O1xuXG4vKipcbiAqIFBhcnNlcyBhbmQgY2FjaGVzIHRoZSBnaXZlbiBgdGVtcGxhdGVgIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gYHRhZ3NgIG9yXG4gKiBgbXVzdGFjaGUudGFnc2AgaWYgYHRhZ3NgIGlzIG9taXR0ZWQsICBhbmQgcmV0dXJucyB0aGUgYXJyYXkgb2YgdG9rZW5zXG4gKiB0aGF0IGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBwYXJzZS5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlICh0ZW1wbGF0ZSwgdGFncykge1xuICB2YXIgY2FjaGUgPSB0aGlzLnRlbXBsYXRlQ2FjaGU7XG4gIHZhciBjYWNoZUtleSA9IHRlbXBsYXRlICsgJzonICsgKHRhZ3MgfHwgbXVzdGFjaGUudGFncykuam9pbignOicpO1xuICB2YXIgaXNDYWNoZUVuYWJsZWQgPSB0eXBlb2YgY2FjaGUgIT09ICd1bmRlZmluZWQnO1xuICB2YXIgdG9rZW5zID0gaXNDYWNoZUVuYWJsZWQgPyBjYWNoZS5nZXQoY2FjaGVLZXkpIDogdW5kZWZpbmVkO1xuXG4gIGlmICh0b2tlbnMgPT0gdW5kZWZpbmVkKSB7XG4gICAgdG9rZW5zID0gcGFyc2VUZW1wbGF0ZSh0ZW1wbGF0ZSwgdGFncyk7XG4gICAgaXNDYWNoZUVuYWJsZWQgJiYgY2FjaGUuc2V0KGNhY2hlS2V5LCB0b2tlbnMpO1xuICB9XG4gIHJldHVybiB0b2tlbnM7XG59O1xuXG4vKipcbiAqIEhpZ2gtbGV2ZWwgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byByZW5kZXIgdGhlIGdpdmVuIGB0ZW1wbGF0ZWAgd2l0aFxuICogdGhlIGdpdmVuIGB2aWV3YC5cbiAqXG4gKiBUaGUgb3B0aW9uYWwgYHBhcnRpYWxzYCBhcmd1bWVudCBtYXkgYmUgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlXG4gKiBuYW1lcyBhbmQgdGVtcGxhdGVzIG9mIHBhcnRpYWxzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRlbXBsYXRlLiBJdCBtYXlcbiAqIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgdG8gbG9hZCBwYXJ0aWFsIHRlbXBsYXRlcyBvbiB0aGUgZmx5XG4gKiB0aGF0IHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50OiB0aGUgbmFtZSBvZiB0aGUgcGFydGlhbC5cbiAqXG4gKiBJZiB0aGUgb3B0aW9uYWwgYGNvbmZpZ2AgYXJndW1lbnQgaXMgZ2l2ZW4gaGVyZSwgdGhlbiBpdCBzaG91bGQgYmUgYW5cbiAqIG9iamVjdCB3aXRoIGEgYHRhZ3NgIGF0dHJpYnV0ZSBvciBhbiBgZXNjYXBlYCBhdHRyaWJ1dGUgb3IgYm90aC5cbiAqIElmIGFuIGFycmF5IGlzIHBhc3NlZCwgdGhlbiBpdCB3aWxsIGJlIGludGVycHJldGVkIHRoZSBzYW1lIHdheSBhc1xuICogYSBgdGFnc2AgYXR0cmlidXRlIG9uIGEgYGNvbmZpZ2Agb2JqZWN0LlxuICpcbiAqIFRoZSBgdGFnc2AgYXR0cmlidXRlIG9mIGEgYGNvbmZpZ2Agb2JqZWN0IG11c3QgYmUgYW4gYXJyYXkgd2l0aCB0d29cbiAqIHN0cmluZyB2YWx1ZXM6IHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZ3MgdXNlZCBpbiB0aGUgdGVtcGxhdGUgKGUuZy5cbiAqIFsgXCI8JVwiLCBcIiU+XCIgXSkuIFRoZSBkZWZhdWx0IGlzIHRvIG11c3RhY2hlLnRhZ3MuXG4gKlxuICogVGhlIGBlc2NhcGVgIGF0dHJpYnV0ZSBvZiBhIGBjb25maWdgIG9iamVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gd2hpY2hcbiAqIGFjY2VwdHMgYSBzdHJpbmcgYXMgaW5wdXQgYW5kIG91dHB1dHMgYSBzYWZlbHkgZXNjYXBlZCBzdHJpbmcuXG4gKiBJZiBhbiBgZXNjYXBlYCBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQsIHRoZW4gYW4gSFRNTC1zYWZlIHN0cmluZ1xuICogZXNjYXBpbmcgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgZGVmYXVsdC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIgKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscywgY29uZmlnKSB7XG4gIHZhciB0YWdzID0gdGhpcy5nZXRDb25maWdUYWdzKGNvbmZpZyk7XG4gIHZhciB0b2tlbnMgPSB0aGlzLnBhcnNlKHRlbXBsYXRlLCB0YWdzKTtcbiAgdmFyIGNvbnRleHQgPSAodmlldyBpbnN0YW5jZW9mIENvbnRleHQpID8gdmlldyA6IG5ldyBDb250ZXh0KHZpZXcsIHVuZGVmaW5lZCk7XG4gIHJldHVybiB0aGlzLnJlbmRlclRva2Vucyh0b2tlbnMsIGNvbnRleHQsIHBhcnRpYWxzLCB0ZW1wbGF0ZSwgY29uZmlnKTtcbn07XG5cbi8qKlxuICogTG93LWxldmVsIG1ldGhvZCB0aGF0IHJlbmRlcnMgdGhlIGdpdmVuIGFycmF5IG9mIGB0b2tlbnNgIHVzaW5nXG4gKiB0aGUgZ2l2ZW4gYGNvbnRleHRgIGFuZCBgcGFydGlhbHNgLlxuICpcbiAqIE5vdGU6IFRoZSBgb3JpZ2luYWxUZW1wbGF0ZWAgaXMgb25seSBldmVyIHVzZWQgdG8gZXh0cmFjdCB0aGUgcG9ydGlvblxuICogb2YgdGhlIG9yaWdpbmFsIHRlbXBsYXRlIHRoYXQgd2FzIGNvbnRhaW5lZCBpbiBhIGhpZ2hlci1vcmRlciBzZWN0aW9uLlxuICogSWYgdGhlIHRlbXBsYXRlIGRvZXNuJ3QgdXNlIGhpZ2hlci1vcmRlciBzZWN0aW9ucywgdGhpcyBhcmd1bWVudCBtYXlcbiAqIGJlIG9taXR0ZWQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUucmVuZGVyVG9rZW5zID0gZnVuY3Rpb24gcmVuZGVyVG9rZW5zICh0b2tlbnMsIGNvbnRleHQsIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlLCBjb25maWcpIHtcbiAgdmFyIGJ1ZmZlciA9ICcnO1xuXG4gIHZhciB0b2tlbiwgc3ltYm9sLCB2YWx1ZTtcbiAgZm9yICh2YXIgaSA9IDAsIG51bVRva2VucyA9IHRva2Vucy5sZW5ndGg7IGkgPCBudW1Ub2tlbnM7ICsraSkge1xuICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgIHN5bWJvbCA9IHRva2VuWzBdO1xuXG4gICAgaWYgKHN5bWJvbCA9PT0gJyMnKSB2YWx1ZSA9IHRoaXMucmVuZGVyU2VjdGlvbih0b2tlbiwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUsIGNvbmZpZyk7XG4gICAgZWxzZSBpZiAoc3ltYm9sID09PSAnXicpIHZhbHVlID0gdGhpcy5yZW5kZXJJbnZlcnRlZCh0b2tlbiwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUsIGNvbmZpZyk7XG4gICAgZWxzZSBpZiAoc3ltYm9sID09PSAnPicpIHZhbHVlID0gdGhpcy5yZW5kZXJQYXJ0aWFsKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscywgY29uZmlnKTtcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICcmJykgdmFsdWUgPSB0aGlzLnVuZXNjYXBlZFZhbHVlKHRva2VuLCBjb250ZXh0KTtcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICduYW1lJykgdmFsdWUgPSB0aGlzLmVzY2FwZWRWYWx1ZSh0b2tlbiwgY29udGV4dCwgY29uZmlnKTtcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd0ZXh0JykgdmFsdWUgPSB0aGlzLnJhd1ZhbHVlKHRva2VuKTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgYnVmZmVyICs9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbldyaXRlci5wcm90b3R5cGUucmVuZGVyU2VjdGlvbiA9IGZ1bmN0aW9uIHJlbmRlclNlY3Rpb24gKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSwgY29uZmlnKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGJ1ZmZlciA9ICcnO1xuICB2YXIgdmFsdWUgPSBjb250ZXh0Lmxvb2t1cCh0b2tlblsxXSk7XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlbmRlciBhbiBhcmJpdHJhcnkgdGVtcGxhdGVcbiAgLy8gaW4gdGhlIGN1cnJlbnQgY29udGV4dCBieSBoaWdoZXItb3JkZXIgc2VjdGlvbnMuXG4gIGZ1bmN0aW9uIHN1YlJlbmRlciAodGVtcGxhdGUpIHtcbiAgICByZXR1cm4gc2VsZi5yZW5kZXIodGVtcGxhdGUsIGNvbnRleHQsIHBhcnRpYWxzLCBjb25maWcpO1xuICB9XG5cbiAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAodmFyIGogPSAwLCB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaiA8IHZhbHVlTGVuZ3RoOyArK2opIHtcbiAgICAgIGJ1ZmZlciArPSB0aGlzLnJlbmRlclRva2Vucyh0b2tlbls0XSwgY29udGV4dC5wdXNoKHZhbHVlW2pdKSwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUsIGNvbmZpZyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgYnVmZmVyICs9IHRoaXMucmVuZGVyVG9rZW5zKHRva2VuWzRdLCBjb250ZXh0LnB1c2godmFsdWUpLCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSwgY29uZmlnKTtcbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUZW1wbGF0ZSAhPT0gJ3N0cmluZycpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgaGlnaGVyLW9yZGVyIHNlY3Rpb25zIHdpdGhvdXQgdGhlIG9yaWdpbmFsIHRlbXBsYXRlJyk7XG5cbiAgICAvLyBFeHRyYWN0IHRoZSBwb3J0aW9uIG9mIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZSB0aGF0IHRoZSBzZWN0aW9uIGNvbnRhaW5zLlxuICAgIHZhbHVlID0gdmFsdWUuY2FsbChjb250ZXh0LnZpZXcsIG9yaWdpbmFsVGVtcGxhdGUuc2xpY2UodG9rZW5bM10sIHRva2VuWzVdKSwgc3ViUmVuZGVyKTtcblxuICAgIGlmICh2YWx1ZSAhPSBudWxsKVxuICAgICAgYnVmZmVyICs9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGJ1ZmZlciArPSB0aGlzLnJlbmRlclRva2Vucyh0b2tlbls0XSwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUsIGNvbmZpZyk7XG4gIH1cbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbldyaXRlci5wcm90b3R5cGUucmVuZGVySW52ZXJ0ZWQgPSBmdW5jdGlvbiByZW5kZXJJbnZlcnRlZCAodG9rZW4sIGNvbnRleHQsIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlLCBjb25maWcpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dC5sb29rdXAodG9rZW5bMV0pO1xuXG4gIC8vIFVzZSBKYXZhU2NyaXB0J3MgZGVmaW5pdGlvbiBvZiBmYWxzeS4gSW5jbHVkZSBlbXB0eSBhcnJheXMuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qcy9pc3N1ZXMvMTg2XG4gIGlmICghdmFsdWUgfHwgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpXG4gICAgcmV0dXJuIHRoaXMucmVuZGVyVG9rZW5zKHRva2VuWzRdLCBjb250ZXh0LCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSwgY29uZmlnKTtcbn07XG5cbldyaXRlci5wcm90b3R5cGUuaW5kZW50UGFydGlhbCA9IGZ1bmN0aW9uIGluZGVudFBhcnRpYWwgKHBhcnRpYWwsIGluZGVudGF0aW9uLCBsaW5lSGFzTm9uU3BhY2UpIHtcbiAgdmFyIGZpbHRlcmVkSW5kZW50YXRpb24gPSBpbmRlbnRhdGlvbi5yZXBsYWNlKC9bXiBcXHRdL2csICcnKTtcbiAgdmFyIHBhcnRpYWxCeU5sID0gcGFydGlhbC5zcGxpdCgnXFxuJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydGlhbEJ5TmwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocGFydGlhbEJ5TmxbaV0ubGVuZ3RoICYmIChpID4gMCB8fCAhbGluZUhhc05vblNwYWNlKSkge1xuICAgICAgcGFydGlhbEJ5TmxbaV0gPSBmaWx0ZXJlZEluZGVudGF0aW9uICsgcGFydGlhbEJ5TmxbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJ0aWFsQnlObC5qb2luKCdcXG4nKTtcbn07XG5cbldyaXRlci5wcm90b3R5cGUucmVuZGVyUGFydGlhbCA9IGZ1bmN0aW9uIHJlbmRlclBhcnRpYWwgKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscywgY29uZmlnKSB7XG4gIGlmICghcGFydGlhbHMpIHJldHVybjtcbiAgdmFyIHRhZ3MgPSB0aGlzLmdldENvbmZpZ1RhZ3MoY29uZmlnKTtcblxuICB2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKHBhcnRpYWxzKSA/IHBhcnRpYWxzKHRva2VuWzFdKSA6IHBhcnRpYWxzW3Rva2VuWzFdXTtcbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB2YXIgbGluZUhhc05vblNwYWNlID0gdG9rZW5bNl07XG4gICAgdmFyIHRhZ0luZGV4ID0gdG9rZW5bNV07XG4gICAgdmFyIGluZGVudGF0aW9uID0gdG9rZW5bNF07XG4gICAgdmFyIGluZGVudGVkVmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodGFnSW5kZXggPT0gMCAmJiBpbmRlbnRhdGlvbikge1xuICAgICAgaW5kZW50ZWRWYWx1ZSA9IHRoaXMuaW5kZW50UGFydGlhbCh2YWx1ZSwgaW5kZW50YXRpb24sIGxpbmVIYXNOb25TcGFjZSk7XG4gICAgfVxuICAgIHZhciB0b2tlbnMgPSB0aGlzLnBhcnNlKGluZGVudGVkVmFsdWUsIHRhZ3MpO1xuICAgIHJldHVybiB0aGlzLnJlbmRlclRva2Vucyh0b2tlbnMsIGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnRlZFZhbHVlLCBjb25maWcpO1xuICB9XG59O1xuXG5Xcml0ZXIucHJvdG90eXBlLnVuZXNjYXBlZFZhbHVlID0gZnVuY3Rpb24gdW5lc2NhcGVkVmFsdWUgKHRva2VuLCBjb250ZXh0KSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHQubG9va3VwKHRva2VuWzFdKTtcbiAgaWYgKHZhbHVlICE9IG51bGwpXG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuV3JpdGVyLnByb3RvdHlwZS5lc2NhcGVkVmFsdWUgPSBmdW5jdGlvbiBlc2NhcGVkVmFsdWUgKHRva2VuLCBjb250ZXh0LCBjb25maWcpIHtcbiAgdmFyIGVzY2FwZSA9IHRoaXMuZ2V0Q29uZmlnRXNjYXBlKGNvbmZpZykgfHwgbXVzdGFjaGUuZXNjYXBlO1xuICB2YXIgdmFsdWUgPSBjb250ZXh0Lmxvb2t1cCh0b2tlblsxXSk7XG4gIGlmICh2YWx1ZSAhPSBudWxsKVxuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBlc2NhcGUgPT09IG11c3RhY2hlLmVzY2FwZSkgPyBTdHJpbmcodmFsdWUpIDogZXNjYXBlKHZhbHVlKTtcbn07XG5cbldyaXRlci5wcm90b3R5cGUucmF3VmFsdWUgPSBmdW5jdGlvbiByYXdWYWx1ZSAodG9rZW4pIHtcbiAgcmV0dXJuIHRva2VuWzFdO1xufTtcblxuV3JpdGVyLnByb3RvdHlwZS5nZXRDb25maWdUYWdzID0gZnVuY3Rpb24gZ2V0Q29uZmlnVGFncyAoY29uZmlnKSB7XG4gIGlmIChpc0FycmF5KGNvbmZpZykpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIGVsc2UgaWYgKGNvbmZpZyAmJiB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBjb25maWcudGFncztcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5Xcml0ZXIucHJvdG90eXBlLmdldENvbmZpZ0VzY2FwZSA9IGZ1bmN0aW9uIGdldENvbmZpZ0VzY2FwZSAoY29uZmlnKSB7XG4gIGlmIChjb25maWcgJiYgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgIWlzQXJyYXkoY29uZmlnKSkge1xuICAgIHJldHVybiBjb25maWcuZXNjYXBlO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG5cbnZhciBtdXN0YWNoZSA9IHtcbiAgbmFtZTogJ211c3RhY2hlLmpzJyxcbiAgdmVyc2lvbjogJzQuMi4wJyxcbiAgdGFnczogWyAne3snLCAnfX0nIF0sXG4gIGNsZWFyQ2FjaGU6IHVuZGVmaW5lZCxcbiAgZXNjYXBlOiB1bmRlZmluZWQsXG4gIHBhcnNlOiB1bmRlZmluZWQsXG4gIHJlbmRlcjogdW5kZWZpbmVkLFxuICBTY2FubmVyOiB1bmRlZmluZWQsXG4gIENvbnRleHQ6IHVuZGVmaW5lZCxcbiAgV3JpdGVyOiB1bmRlZmluZWQsXG4gIC8qKlxuICAgKiBBbGxvd3MgYSB1c2VyIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNhY2hpbmcgc3RyYXRlZ3ksIGJ5IHByb3ZpZGluZyBhblxuICAgKiBvYmplY3Qgd2l0aCBzZXQsIGdldCBhbmQgY2xlYXIgbWV0aG9kcy4gVGhpcyBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpc2FibGVcbiAgICogdGhlIGNhY2hlIGJ5IHNldHRpbmcgaXQgdG8gdGhlIGxpdGVyYWwgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBzZXQgdGVtcGxhdGVDYWNoZSAoY2FjaGUpIHtcbiAgICBkZWZhdWx0V3JpdGVyLnRlbXBsYXRlQ2FjaGUgPSBjYWNoZTtcbiAgfSxcbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgb3Igb3ZlcnJpZGRlbiBjYWNoaW5nIG9iamVjdCBmcm9tIHRoZSBkZWZhdWx0IHdyaXRlci5cbiAgICovXG4gIGdldCB0ZW1wbGF0ZUNhY2hlICgpIHtcbiAgICByZXR1cm4gZGVmYXVsdFdyaXRlci50ZW1wbGF0ZUNhY2hlO1xuICB9XG59O1xuXG4vLyBBbGwgaGlnaC1sZXZlbCBtdXN0YWNoZS4qIGZ1bmN0aW9ucyB1c2UgdGhpcyB3cml0ZXIuXG52YXIgZGVmYXVsdFdyaXRlciA9IG5ldyBXcml0ZXIoKTtcblxuLyoqXG4gKiBDbGVhcnMgYWxsIGNhY2hlZCB0ZW1wbGF0ZXMgaW4gdGhlIGRlZmF1bHQgd3JpdGVyLlxuICovXG5tdXN0YWNoZS5jbGVhckNhY2hlID0gZnVuY3Rpb24gY2xlYXJDYWNoZSAoKSB7XG4gIHJldHVybiBkZWZhdWx0V3JpdGVyLmNsZWFyQ2FjaGUoKTtcbn07XG5cbi8qKlxuICogUGFyc2VzIGFuZCBjYWNoZXMgdGhlIGdpdmVuIHRlbXBsYXRlIGluIHRoZSBkZWZhdWx0IHdyaXRlciBhbmQgcmV0dXJucyB0aGVcbiAqIGFycmF5IG9mIHRva2VucyBpdCBjb250YWlucy4gRG9pbmcgdGhpcyBhaGVhZCBvZiB0aW1lIGF2b2lkcyB0aGUgbmVlZCB0b1xuICogcGFyc2UgdGVtcGxhdGVzIG9uIHRoZSBmbHkgYXMgdGhleSBhcmUgcmVuZGVyZWQuXG4gKi9cbm11c3RhY2hlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKHRlbXBsYXRlLCB0YWdzKSB7XG4gIHJldHVybiBkZWZhdWx0V3JpdGVyLnBhcnNlKHRlbXBsYXRlLCB0YWdzKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgYHRlbXBsYXRlYCB3aXRoIHRoZSBnaXZlbiBgdmlld2AsIGBwYXJ0aWFsc2AsIGFuZCBgY29uZmlnYFxuICogdXNpbmcgdGhlIGRlZmF1bHQgd3JpdGVyLlxuICovXG5tdXN0YWNoZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIgKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscywgY29uZmlnKSB7XG4gIGlmICh0eXBlb2YgdGVtcGxhdGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0ZW1wbGF0ZSEgVGVtcGxhdGUgc2hvdWxkIGJlIGEgXCJzdHJpbmdcIiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdidXQgXCInICsgdHlwZVN0cih0ZW1wbGF0ZSkgKyAnXCIgd2FzIGdpdmVuIGFzIHRoZSBmaXJzdCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhcmd1bWVudCBmb3IgbXVzdGFjaGUjcmVuZGVyKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscyknKTtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0V3JpdGVyLnJlbmRlcih0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMsIGNvbmZpZyk7XG59O1xuXG4vLyBFeHBvcnQgdGhlIGVzY2FwaW5nIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIHVzZXIgbWF5IG92ZXJyaWRlIGl0LlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hlLmpzL2lzc3Vlcy8yNDRcbm11c3RhY2hlLmVzY2FwZSA9IGVzY2FwZUh0bWw7XG5cbi8vIEV4cG9ydCB0aGVzZSBtYWlubHkgZm9yIHRlc3RpbmcsIGJ1dCBhbHNvIGZvciBhZHZhbmNlZCB1c2FnZS5cbm11c3RhY2hlLlNjYW5uZXIgPSBTY2FubmVyO1xubXVzdGFjaGUuQ29udGV4dCA9IENvbnRleHQ7XG5tdXN0YWNoZS5Xcml0ZXIgPSBXcml0ZXI7XG5cbmV4cG9ydCBkZWZhdWx0IG11c3RhY2hlO1xuIiwgImxldCBtZXRob2RzID0ge1xuICBvbmU6IHt9LFxuICB0d286IHt9LFxuICB0aHJlZToge30sXG4gIGZvdXI6IHt9LFxufVxuXG5sZXQgbW9kZWwgPSB7XG4gIG9uZToge30sXG4gIHR3bzoge30sXG4gIHRocmVlOiB7fSxcbn1cbmxldCBjb21wdXRlID0ge31cbmxldCBob29rcyA9IFtdXG5cbmV4cG9ydCBkZWZhdWx0IHsgbWV0aG9kcywgbW9kZWwsIGNvbXB1dGUsIGhvb2tzIH1cbiIsICJjb25zdCBpc0FycmF5ID0gaW5wdXQgPT4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuXG5jb25zdCBmbnMgPSB7XG4gIC8qKiBhZGQgbWV0YWRhdGEgdG8gdGVybSBvYmplY3RzICovXG4gIGNvbXB1dGU6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIGNvbnN0IHsgd29ybGQgfSA9IHRoaXNcbiAgICBjb25zdCBjb21wdXRlID0gd29ybGQuY29tcHV0ZVxuICAgIC8vIGRvIG9uZSBtZXRob2RcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBjb21wdXRlLmhhc093blByb3BlcnR5KGlucHV0KSkge1xuICAgICAgY29tcHV0ZVtpbnB1dF0odGhpcylcbiAgICB9XG4gICAgLy8gYWxsb3cgYSBsaXN0IG9mIG1ldGhvZHNcbiAgICBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgaW5wdXQuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgaWYgKHdvcmxkLmNvbXB1dGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICBjb21wdXRlW25hbWVdKHRoaXMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdubyBjb21wdXRlOicsIGlucHV0KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIC8vIGFsbG93IGEgY3VzdG9tIGNvbXB1dGUgZnVuY3Rpb25cbiAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlucHV0KHRoaXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2Fybignbm8gY29tcHV0ZTonLCBpbnB1dCkgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9LFxufVxuZXhwb3J0IGRlZmF1bHQgZm5zXG4iLCAiLy8gd3JhcHBlcnMgZm9yIGxvb3BzIGluIGphdmFzY3JpcHQgYXJyYXlzXG5cbmNvbnN0IGZvckVhY2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgbGV0IHB0cnMgPSB0aGlzLmZ1bGxQb2ludGVyXG4gIHB0cnMuZm9yRWFjaCgocHRyLCBpKSA9PiB7XG4gICAgbGV0IHZpZXcgPSB0aGlzLnVwZGF0ZShbcHRyXSlcbiAgICBjYih2aWV3LCBpKVxuICB9KVxuICByZXR1cm4gdGhpc1xufVxuXG5jb25zdCBtYXAgPSBmdW5jdGlvbiAoY2IsIGVtcHR5KSB7XG4gIGxldCBwdHJzID0gdGhpcy5mdWxsUG9pbnRlclxuICBsZXQgcmVzID0gcHRycy5tYXAoKHB0ciwgaSkgPT4ge1xuICAgIGxldCB2aWV3ID0gdGhpcy51cGRhdGUoW3B0cl0pXG4gICAgbGV0IG91dCA9IGNiKHZpZXcsIGkpXG4gICAgLy8gaWYgd2UgcmV0dXJuZWQgbm90aGluZywgcmV0dXJuIGEgdmlld1xuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9uZSgpXG4gICAgfVxuICAgIHJldHVybiBvdXRcbiAgfSlcbiAgaWYgKHJlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZW1wdHkgfHwgdGhpcy51cGRhdGUoW10pXG4gIH1cbiAgLy8gcmV0dXJuIGFuIGFycmF5IG9mIHZhbHVlcywgb3IgVmlldyBvYmplY3RzP1xuICAvLyB1c2VyIGNhbiByZXR1cm4gZWl0aGVyIGZyb20gdGhlaXIgY2FsbGJhY2tcbiAgaWYgKHJlc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gYXJyYXkgb2Ygc3RyaW5nc1xuICAgIGlmICh0eXBlb2YgcmVzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzXG4gICAgaWYgKHR5cGVvZiByZXNbMF0gPT09ICdvYmplY3QnICYmIChyZXNbMF0gPT09IG51bGwgfHwgIXJlc1swXS5pc1ZpZXcpKSB7XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG4gIC8vIHJldHVybiBhIFZpZXcgb2JqZWN0XG4gIGxldCBhbGwgPSBbXVxuICByZXMuZm9yRWFjaChwdHIgPT4ge1xuICAgIGFsbCA9IGFsbC5jb25jYXQocHRyLmZ1bGxQb2ludGVyKVxuICB9KVxuICByZXR1cm4gdGhpcy50b1ZpZXcoYWxsKVxufVxuXG5jb25zdCBmaWx0ZXIgPSBmdW5jdGlvbiAoY2IpIHtcbiAgbGV0IHB0cnMgPSB0aGlzLmZ1bGxQb2ludGVyXG4gIHB0cnMgPSBwdHJzLmZpbHRlcigocHRyLCBpKSA9PiB7XG4gICAgbGV0IHZpZXcgPSB0aGlzLnVwZGF0ZShbcHRyXSlcbiAgICByZXR1cm4gY2IodmlldywgaSlcbiAgfSlcbiAgbGV0IHJlcyA9IHRoaXMudXBkYXRlKHB0cnMpXG4gIHJldHVybiByZXNcbn1cblxuY29uc3QgZmluZCA9IGZ1bmN0aW9uIChjYikge1xuICBsZXQgcHRycyA9IHRoaXMuZnVsbFBvaW50ZXJcbiAgbGV0IGZvdW5kID0gcHRycy5maW5kKChwdHIsIGkpID0+IHtcbiAgICBsZXQgdmlldyA9IHRoaXMudXBkYXRlKFtwdHJdKVxuICAgIHJldHVybiBjYih2aWV3LCBpKVxuICB9KVxuICByZXR1cm4gdGhpcy51cGRhdGUoW2ZvdW5kXSlcbn1cblxuY29uc3Qgc29tZSA9IGZ1bmN0aW9uIChjYikge1xuICBsZXQgcHRycyA9IHRoaXMuZnVsbFBvaW50ZXJcbiAgcmV0dXJuIHB0cnMuc29tZSgocHRyLCBpKSA9PiB7XG4gICAgbGV0IHZpZXcgPSB0aGlzLnVwZGF0ZShbcHRyXSlcbiAgICByZXR1cm4gY2IodmlldywgaSlcbiAgfSlcbn1cblxuY29uc3QgcmFuZG9tID0gZnVuY3Rpb24gKG4gPSAxKSB7XG4gIGxldCBwdHJzID0gdGhpcy5mdWxsUG9pbnRlclxuICBsZXQgciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHB0cnMubGVuZ3RoKVxuICAvL3ByZXZlbnQgaXQgZnJvbSBnb2luZyBvdmVyIHRoZSBlbmRcbiAgaWYgKHIgKyBuID4gdGhpcy5sZW5ndGgpIHtcbiAgICByID0gdGhpcy5sZW5ndGggLSBuXG4gICAgciA9IHIgPCAwID8gMCA6IHJcbiAgfVxuICBwdHJzID0gcHRycy5zbGljZShyLCByICsgbilcbiAgcmV0dXJuIHRoaXMudXBkYXRlKHB0cnMpXG59XG5leHBvcnQgZGVmYXVsdCB7IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBmaW5kLCBzb21lLCByYW5kb20gfVxuIiwgImNvbnN0IHV0aWxzID0ge1xuICAvKiogKi9cbiAgdGVybUxpc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRob2RzLm9uZS50ZXJtTGlzdCh0aGlzLmRvY3MpXG4gIH0sXG4gIC8qKiByZXR1cm4gaW5kaXZpZHVhbCB0ZXJtcyovXG4gIHRlcm1zOiBmdW5jdGlvbiAobikge1xuICAgIGxldCBtID0gdGhpcy5tYXRjaCgnLicpXG4gICAgLy8gdGhpcyBpcyBhIGJpdCBmYXN0ZXIgdGhhbiAubWF0Y2goJy4nKSBcbiAgICAvLyBsZXQgcHRycyA9IFtdXG4gICAgLy8gdGhpcy5kb2NzLmZvckVhY2goKHRlcm1zKSA9PiB7XG4gICAgLy8gICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgLy8gICAgIGxldCBbeSwgeF0gPSB0ZXJtLmluZGV4IHx8IFtdXG4gICAgLy8gICAgIHB0cnMucHVzaChbeSwgeCwgeCArIDFdKVxuICAgIC8vICAgfSlcbiAgICAvLyB9KVxuICAgIC8vIGxldCBtID0gdGhpcy51cGRhdGUocHRycylcbiAgICByZXR1cm4gdHlwZW9mIG4gPT09ICdudW1iZXInID8gbS5lcShuKSA6IG1cbiAgfSxcblxuICAvKiogKi9cbiAgZ3JvdXBzOiBmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICBpZiAoZ3JvdXAgfHwgZ3JvdXAgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9ncm91cHNbZ3JvdXBdIHx8IFtdKVxuICAgIH1cbiAgICAvLyByZXR1cm4gYW4gb2JqZWN0IG9mIFZpZXdzXG4gICAgbGV0IHJlcyA9IHt9XG4gICAgT2JqZWN0LmtleXModGhpcy5fZ3JvdXBzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgcmVzW2tdID0gdGhpcy51cGRhdGUodGhpcy5fZ3JvdXBzW2tdKVxuICAgIH0pXG4gICAgLy8gdGhpcy5fZ3JvdXBzID0gbnVsbFxuICAgIHJldHVybiByZXNcbiAgfSxcbiAgLyoqICovXG4gIGVxOiBmdW5jdGlvbiAobikge1xuICAgIGxldCBwdHIgPSB0aGlzLnBvaW50ZXJcbiAgICBpZiAoIXB0cikge1xuICAgICAgcHRyID0gdGhpcy5kb2NzLm1hcCgoX2RvYywgaSkgPT4gW2ldKVxuICAgIH1cbiAgICBpZiAocHRyW25dKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGUoW3B0cltuXV0pXG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vbmUoKVxuICB9LFxuICAvKiogKi9cbiAgZmlyc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lcSgwKVxuICB9LFxuICAvKiogKi9cbiAgbGFzdDogZnVuY3Rpb24gKCkge1xuICAgIGxldCBuID0gdGhpcy5mdWxsUG9pbnRlci5sZW5ndGggLSAxXG4gICAgcmV0dXJuIHRoaXMuZXEobilcbiAgfSxcblxuICAvKiogZ3JhYiB0ZXJtWzBdIGZvciBldmVyeSBtYXRjaCAqL1xuICBmaXJzdFRlcm1zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2goJ14uJylcbiAgfSxcblxuICAvKiogZ3JhYiB0aGUgbGFzdCB0ZXJtIGZvciBldmVyeSBtYXRjaCAgKi9cbiAgbGFzdFRlcm1zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2goJy4kJylcbiAgfSxcblxuICAvKiogKi9cbiAgc2xpY2U6IGZ1bmN0aW9uIChtaW4sIG1heCkge1xuICAgIGxldCBwbnRycyA9IHRoaXMucG9pbnRlciB8fCB0aGlzLmRvY3MubWFwKChfbywgbikgPT4gW25dKVxuICAgIHBudHJzID0gcG50cnMuc2xpY2UobWluLCBtYXgpXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlKHBudHJzKVxuICB9LFxuXG4gIC8qKiByZXR1cm4gYSB2aWV3IG9mIHRoZSBlbnRpcmUgZG9jdW1lbnQgKi9cbiAgYWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlKCkudG9WaWV3KClcbiAgfSxcbiAgLyoqICAqL1xuICBmdWxsU2VudGVuY2VzOiBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHB0cnMgPSB0aGlzLmZ1bGxQb2ludGVyLm1hcChhID0+IFthWzBdXSkgLy9sYXp5IVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZShwdHJzKS50b1ZpZXcoKVxuICB9LFxuICAvKiogcmV0dXJuIGEgdmlldyBvZiBubyBwYXJ0cyBvZiB0aGUgZG9jdW1lbnQgKi9cbiAgbm9uZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZShbXSlcbiAgfSxcblxuICAvKiogYXJlIHRoZXNlIHR3byB2aWV3cyBsb29raW5nIGF0IHRoZSBzYW1lIHdvcmRzPyAqL1xuICBpc0RvYzogZnVuY3Rpb24gKGIpIHtcbiAgICBpZiAoIWIgfHwgIWIuaXNWaWV3KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgbGV0IGFQdHIgPSB0aGlzLmZ1bGxQb2ludGVyXG4gICAgbGV0IGJQdHIgPSBiLmZ1bGxQb2ludGVyXG4gICAgaWYgKCFhUHRyLmxlbmd0aCA9PT0gYlB0ci5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICAvLyBlbnN1cmUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lXG4gICAgcmV0dXJuIGFQdHIuZXZlcnkoKHB0ciwgaSkgPT4ge1xuICAgICAgaWYgKCFiUHRyW2ldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIFtuLCBzdGFydCwgZW5kXSBhcmUgYWxsIHRoZSBzYW1lXG4gICAgICByZXR1cm4gcHRyWzBdID09PSBiUHRyW2ldWzBdICYmIHB0clsxXSA9PT0gYlB0cltpXVsxXSAmJiBwdHJbMl0gPT09IGJQdHJbaV1bMl1cbiAgICB9KVxuICB9LFxuXG4gIC8qKiBob3cgbWFueSBzZXBlcmF0ZSB0ZXJtcyBkb2VzIHRoZSBkb2N1bWVudCBoYXZlPyAqL1xuICB3b3JkQ291bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5kb2NzLnJlZHVjZSgoY291bnQsIHRlcm1zKSA9PiB7XG4gICAgICBjb3VudCArPSB0ZXJtcy5maWx0ZXIodCA9PiB0LnRleHQgIT09ICcnKS5sZW5ndGhcbiAgICAgIHJldHVybiBjb3VudFxuICAgIH0sIDApXG4gIH0sXG5cbiAgLy8gaXMgdGhlIHBvaW50ZXIgdGhlIGZ1bGwgc2VudGVuY2U/XG4gIGlzRnVsbDogZnVuY3Rpb24gKCkge1xuICAgIGxldCBwdHJzID0gdGhpcy5wb2ludGVyXG4gICAgaWYgKCFwdHJzKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBtdXN0IHN0YXJ0IGF0IGJlZ2lubmluZ1xuICAgIGlmIChwdHJzLmxlbmd0aCA9PT0gMCB8fCBwdHJzWzBdWzBdICE9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgbGV0IHdhbnRUZXJtcyA9IDBcbiAgICBsZXQgaGF2ZVRlcm1zID0gMFxuICAgIHRoaXMuZG9jdW1lbnQuZm9yRWFjaCh0ZXJtcyA9PiB3YW50VGVybXMgKz0gdGVybXMubGVuZ3RoKVxuICAgIHRoaXMuZG9jcy5mb3JFYWNoKHRlcm1zID0+IGhhdmVUZXJtcyArPSB0ZXJtcy5sZW5ndGgpXG4gICAgcmV0dXJuIHdhbnRUZXJtcyA9PT0gaGF2ZVRlcm1zXG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBwdHJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgLy8gICBsZXQgW24sIHN0YXJ0LCBlbmRdID0gcHRyc1tpXVxuICAgIC8vICAgLy8gaXQncyBub3QgdGhlIHN0YXJ0XG4gICAgLy8gICBpZiAobiAhPT0gaSB8fCBzdGFydCAhPT0gMCkge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2VcbiAgICAvLyAgIH1cbiAgICAvLyAgIC8vIGl0J3MgdG9vIHNob3J0XG4gICAgLy8gICBpZiAoZG9jdW1lbnRbbl0ubGVuZ3RoID4gZW5kKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZVxuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICAvLyByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIC8vIHJldHVybiB0aGUgbnRoIGVsZW0gb2YgYSBkb2NcbiAgZ2V0TnRoOiBmdW5jdGlvbiAobikge1xuICAgIGlmICh0eXBlb2YgbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLmVxKG4pXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmlmKG4pXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxufVxudXRpbHMuZ3JvdXAgPSB1dGlscy5ncm91cHNcbnV0aWxzLmZ1bGxTZW50ZW5jZSA9IHV0aWxzLmZ1bGxTZW50ZW5jZXNcbnV0aWxzLnNlbnRlbmNlID0gdXRpbHMuZnVsbFNlbnRlbmNlc1xudXRpbHMubGFzdFRlcm0gPSB1dGlscy5sYXN0VGVybXNcbnV0aWxzLmZpcnN0VGVybSA9IHV0aWxzLmZpcnN0VGVybXNcbmV4cG9ydCBkZWZhdWx0IHV0aWxzXG4iLCAiaW1wb3J0IGNvbXB1dGUgZnJvbSAnLi9jb21wdXRlLmpzJ1xuaW1wb3J0IGxvb3BzIGZyb20gJy4vbG9vcHMuanMnXG5pbXBvcnQgdXRpbCBmcm9tICcuL3V0aWxzLmpzJ1xuXG5jb25zdCBtZXRob2RzID0gT2JqZWN0LmFzc2lnbih7fSwgdXRpbCwgY29tcHV0ZSwgbG9vcHMpXG5cbi8vIGFsaWFzZXNcbm1ldGhvZHMuZ2V0ID0gbWV0aG9kcy5lcVxuZXhwb3J0IGRlZmF1bHQgbWV0aG9kc1xuIiwgImltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkLmpzJ1xuaW1wb3J0IGFwaSBmcm9tICcuL21ldGhvZHMvaW5kZXguanMnXG5cbmNsYXNzIFZpZXcge1xuICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgcG9pbnRlciwgZ3JvdXBzID0ge30pIHtcbiAgICAvLyBpbnZpc2libGUgcHJvcHNcbiAgICBsZXQgcHJvcHMgPSBbXG4gICAgICBbJ2RvY3VtZW50JywgZG9jdW1lbnRdLFxuICAgICAgWyd3b3JsZCcsIHdvcmxkXSxcbiAgICAgIFsnX2dyb3VwcycsIGdyb3Vwc10sXG4gICAgICBbJ19jYWNoZScsIG51bGxdLFxuICAgICAgWyd2aWV3VHlwZScsICdWaWV3J10sXG4gICAgXVxuICAgIHByb3BzLmZvckVhY2goYSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYVswXSwge1xuICAgICAgICB2YWx1ZTogYVsxXSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG4gICAgdGhpcy5wdHJzID0gcG9pbnRlclxuICB9XG4gIC8qIGdldHRlcnM6ICAqL1xuICBnZXQgZG9jcygpIHtcbiAgICBsZXQgZG9jcyA9IHRoaXMuZG9jdW1lbnRcbiAgICBpZiAodGhpcy5wdHJzKSB7XG4gICAgICBkb2NzID0gd29ybGQubWV0aG9kcy5vbmUuZ2V0RG9jKHRoaXMucHRycywgdGhpcy5kb2N1bWVudClcbiAgICB9XG4gICAgcmV0dXJuIGRvY3NcbiAgfVxuICBnZXQgcG9pbnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wdHJzXG4gIH1cbiAgZ2V0IG1ldGhvZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMud29ybGQubWV0aG9kc1xuICB9XG4gIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy53b3JsZC5tb2RlbFxuICB9XG4gIGdldCBob29rcygpIHtcbiAgICByZXR1cm4gdGhpcy53b3JsZC5ob29rc1xuICB9XG4gIGdldCBpc1ZpZXcoKSB7XG4gICAgcmV0dXJuIHRydWUgLy90aGlzIGNvbWVzIGluIGhhbmR5IHNvbWV0aW1lc1xuICB9XG4gIC8vIGlzIHRoZSB2aWV3IG5vdC1lbXB0eT9cbiAgZ2V0IGZvdW5kKCkge1xuICAgIHJldHVybiB0aGlzLmRvY3MubGVuZ3RoID4gMFxuICB9XG4gIC8vIGhvdyBtYW55IG1hdGNoZXMgd2UgaGF2ZVxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmRvY3MubGVuZ3RoXG4gIH1cbiAgLy8gcmV0dXJuIGEgbW9yZS1oYWNrYWJsZSBwb2ludGVyXG4gIGdldCBmdWxsUG9pbnRlcigpIHtcbiAgICBsZXQgeyBkb2NzLCBwdHJzLCBkb2N1bWVudCB9ID0gdGhpc1xuICAgIC8vIGNvbXB1dGUgYSBwcm9wZXIgcG9pbnRlciwgZnJvbSBkb2NzXG4gICAgbGV0IHBvaW50ZXJzID0gcHRycyB8fCBkb2NzLm1hcCgoX2QsIG4pID0+IFtuXSlcbiAgICAvLyBkbyB3ZSBuZWVkIHRvIHJlcGFpciBpdCwgZmlyc3Q/XG4gICAgcmV0dXJuIHBvaW50ZXJzLm1hcChhID0+IHtcbiAgICAgIGxldCBbbiwgc3RhcnQsIGVuZCwgaWQsIGVuZElkXSA9IGFcbiAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMFxuICAgICAgZW5kID0gZW5kIHx8IChkb2N1bWVudFtuXSB8fCBbXSkubGVuZ3RoXG4gICAgICAvL2FkZCBmcm96ZW4gaWQsIGZvciBnb29kLW1lYXN1cmVcbiAgICAgIGlmIChkb2N1bWVudFtuXSAmJiBkb2N1bWVudFtuXVtzdGFydF0pIHtcbiAgICAgICAgaWQgPSBpZCB8fCBkb2N1bWVudFtuXVtzdGFydF0uaWRcbiAgICAgICAgaWYgKGRvY3VtZW50W25dW2VuZCAtIDFdKSB7XG4gICAgICAgICAgZW5kSWQgPSBlbmRJZCB8fCBkb2N1bWVudFtuXVtlbmQgLSAxXS5pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW24sIHN0YXJ0LCBlbmQsIGlkLCBlbmRJZF1cbiAgICB9KVxuICB9XG4gIC8vIGNyZWF0ZSBhIG5ldyBWaWV3LCBmcm9tIHRoaXMgb25lXG4gIHVwZGF0ZShwb2ludGVyKSB7XG4gICAgbGV0IG0gPSBuZXcgVmlldyh0aGlzLmRvY3VtZW50LCBwb2ludGVyKVxuICAgIC8vIHNlbmQgdGhlIGNhY2hlIGRvd24sIHRvbz9cbiAgICBpZiAodGhpcy5fY2FjaGUgJiYgcG9pbnRlciAmJiBwb2ludGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIG9ubHkga2VlcCBjYWNoZSBpZiBpdCdzIGEgZnVsbC1zZW50ZW5jZVxuICAgICAgbGV0IGNhY2hlID0gW11cbiAgICAgIHBvaW50ZXIuZm9yRWFjaCgocHRyLCBpKSA9PiB7XG4gICAgICAgIGxldCBbbiwgc3RhcnQsIGVuZF0gPSBwdHJcbiAgICAgICAgaWYgKHB0ci5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBjYWNoZVtpXSA9IHRoaXMuX2NhY2hlW25dXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT09IDAgJiYgdGhpcy5kb2N1bWVudFtuXS5sZW5ndGggPT09IGVuZCkge1xuICAgICAgICAgIGNhY2hlW2ldID0gdGhpcy5fY2FjaGVbbl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChjYWNoZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG0uX2NhY2hlID0gY2FjaGVcbiAgICAgIH1cbiAgICB9XG4gICAgbS53b3JsZCA9IHRoaXMud29ybGRcbiAgICByZXR1cm4gbVxuICB9XG4gIC8vIGNyZWF0ZSBhIG5ldyBWaWV3LCBmcm9tIHRoaXMgb25lXG4gIHRvVmlldyhwb2ludGVyKSB7XG4gICAgcmV0dXJuIG5ldyBWaWV3KHRoaXMuZG9jdW1lbnQsIHBvaW50ZXIgfHwgdGhpcy5wb2ludGVyKVxuICB9XG4gIGZyb21UZXh0KGlucHV0KSB7XG4gICAgY29uc3QgeyBtZXRob2RzIH0gPSB0aGlzXG4gICAgLy9hc3N1bWUgLi8wMS10b2tlbml6ZSBpcyBpbnN0YWxsZWRcbiAgICBsZXQgZG9jdW1lbnQgPSBtZXRob2RzLm9uZS50b2tlbml6ZS5mcm9tU3RyaW5nKGlucHV0LCB0aGlzLndvcmxkKVxuICAgIGxldCBkb2MgPSBuZXcgVmlldyhkb2N1bWVudClcbiAgICBkb2Mud29ybGQgPSB0aGlzLndvcmxkXG4gICAgZG9jLmNvbXB1dGUoWydub3JtYWwnLCAnZnJlZXplJywgJ2xleGljb24nXSlcbiAgICBpZiAodGhpcy53b3JsZC5jb21wdXRlLnByZVRhZ2dlcikge1xuICAgICAgZG9jLmNvbXB1dGUoJ3ByZVRhZ2dlcicpXG4gICAgfVxuICAgIGRvYy5jb21wdXRlKCd1bmZyZWV6ZScpXG4gICAgcmV0dXJuIGRvY1xuICB9XG4gIGNsb25lKCkge1xuICAgIC8vIGNsb25lIHRoZSB3aG9sZSBkb2N1bWVudFxuICAgIGxldCBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQuc2xpY2UoMCkgLy9ub2RlIDE3OiBzdHJ1Y3R1cmVkQ2xvbmUoZG9jdW1lbnQpO1xuICAgIGRvY3VtZW50ID0gZG9jdW1lbnQubWFwKHRlcm1zID0+IHtcbiAgICAgIHJldHVybiB0ZXJtcy5tYXAodGVybSA9PiB7XG4gICAgICAgIHRlcm0gPSBPYmplY3QuYXNzaWduKHt9LCB0ZXJtKVxuICAgICAgICB0ZXJtLnRhZ3MgPSBuZXcgU2V0KHRlcm0udGFncylcbiAgICAgICAgcmV0dXJuIHRlcm1cbiAgICAgIH0pXG4gICAgfSlcbiAgICAvLyBjbG9uZSBvbmx5IHN1Yi1kb2N1bWVudCA/XG4gICAgbGV0IG0gPSB0aGlzLnVwZGF0ZSh0aGlzLnBvaW50ZXIpXG4gICAgbS5kb2N1bWVudCA9IGRvY3VtZW50XG4gICAgbS5fY2FjaGUgPSB0aGlzLl9jYWNoZSAvL2Nsb25lIHRoaXMgdG9vP1xuICAgIHJldHVybiBtXG4gIH1cbn1cbk9iamVjdC5hc3NpZ24oVmlldy5wcm90b3R5cGUsIGFwaSlcbmV4cG9ydCBkZWZhdWx0IFZpZXdcbiIsICJleHBvcnQgZGVmYXVsdCAnMTQuMTQuNCciLCAiY29uc3QgaXNPYmplY3QgPSBmdW5jdGlvbiAoaXRlbSkge1xuICByZXR1cm4gaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaXRlbSlcbn1cblxuLy8gcmVjdXJzaXZlIG1lcmdlIG9mIG9iamVjdHNcbmZ1bmN0aW9uIG1lcmdlRGVlcChtb2RlbCwgcGx1Z2luKSB7XG4gIGlmIChpc09iamVjdChwbHVnaW4pKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcGx1Z2luKSB7XG4gICAgICBpZiAoaXNPYmplY3QocGx1Z2luW2tleV0pKSB7XG4gICAgICAgIGlmICghbW9kZWxba2V5XSkgT2JqZWN0LmFzc2lnbihtb2RlbCwgeyBba2V5XToge30gfSlcbiAgICAgICAgbWVyZ2VEZWVwKG1vZGVsW2tleV0sIHBsdWdpbltrZXldKSAvL3JlY3Vyc2lvblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtb2RlbCwgeyBba2V5XTogcGx1Z2luW2tleV0gfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1vZGVsXG59XG4vLyBjb25zdCBtZXJnZWQgPSBtZXJnZURlZXAoeyBhOiAxIH0sIHsgYjogeyBjOiB7IGQ6IHsgZTogMTIzNDUgfSB9IH0gfSlcbi8vIGNvbnNvbGUuZGlyKG1lcmdlZCwgeyBkZXB0aDogNSB9KVxuXG4vLyB2cm9vbVxuZnVuY3Rpb24gbWVyZ2VRdWljayhtb2RlbCwgcGx1Z2luKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIHBsdWdpbikge1xuICAgIG1vZGVsW2tleV0gPSBtb2RlbFtrZXldIHx8IHt9XG4gICAgT2JqZWN0LmFzc2lnbihtb2RlbFtrZXldLCBwbHVnaW5ba2V5XSlcbiAgfVxuICByZXR1cm4gbW9kZWxcbn1cblxuY29uc3QgYWRkSXJyZWd1bGFycyA9IGZ1bmN0aW9uIChtb2RlbCwgY29uaikge1xuICBsZXQgbSA9IG1vZGVsLnR3by5tb2RlbHMgfHwge31cbiAgT2JqZWN0LmtleXMoY29uaikuZm9yRWFjaChrID0+IHtcbiAgICAvLyB2ZXJiIGZvcm1zXG4gICAgaWYgKGNvbmpba10ucGFzdFRlbnNlKSB7XG4gICAgICBpZiAobS50b1Bhc3QpIHtcbiAgICAgICAgbS50b1Bhc3QuZXhba10gPSBjb25qW2tdLnBhc3RUZW5zZVxuICAgICAgfVxuICAgICAgaWYgKG0uZnJvbVBhc3QpIHtcbiAgICAgICAgbS5mcm9tUGFzdC5leFtjb25qW2tdLnBhc3RUZW5zZV0gPSBrXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25qW2tdLnByZXNlbnRUZW5zZSkge1xuICAgICAgaWYgKG0udG9QcmVzZW50KSB7XG4gICAgICAgIG0udG9QcmVzZW50LmV4W2tdID0gY29ualtrXS5wcmVzZW50VGVuc2VcbiAgICAgIH1cbiAgICAgIGlmIChtLmZyb21QcmVzZW50KSB7XG4gICAgICAgIG0uZnJvbVByZXNlbnQuZXhbY29ualtrXS5wcmVzZW50VGVuc2VdID0ga1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29ualtrXS5nZXJ1bmQpIHtcbiAgICAgIGlmIChtLnRvR2VydW5kKSB7XG4gICAgICAgIG0udG9HZXJ1bmQuZXhba10gPSBjb25qW2tdLmdlcnVuZFxuICAgICAgfVxuICAgICAgaWYgKG0uZnJvbUdlcnVuZCkge1xuICAgICAgICBtLmZyb21HZXJ1bmQuZXhbY29ualtrXS5nZXJ1bmRdID0ga1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhZGplY3RpdmUgZm9ybXNcbiAgICBpZiAoY29ualtrXS5jb21wYXJhdGl2ZSkge1xuICAgICAgaWYgKG0udG9Db21wYXJhdGl2ZSkge1xuICAgICAgICBtLnRvQ29tcGFyYXRpdmUuZXhba10gPSBjb25qW2tdLmNvbXBhcmF0aXZlXG4gICAgICB9XG4gICAgICBpZiAobS5mcm9tQ29tcGFyYXRpdmUpIHtcbiAgICAgICAgbS5mcm9tQ29tcGFyYXRpdmUuZXhbY29ualtrXS5jb21wYXJhdGl2ZV0gPSBrXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25qW2tdLnN1cGVybGF0aXZlKSB7XG4gICAgICBpZiAobS50b1N1cGVybGF0aXZlKSB7XG4gICAgICAgIG0udG9TdXBlcmxhdGl2ZS5leFtrXSA9IGNvbmpba10uc3VwZXJsYXRpdmVcbiAgICAgIH1cbiAgICAgIGlmIChtLmZyb21TdXBlcmxhdGl2ZSkge1xuICAgICAgICBtLmZyb21TdXBlcmxhdGl2ZS5leFtjb25qW2tdLnN1cGVybGF0aXZlXSA9IGtcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5cbmNvbnN0IGV4dGVuZCA9IGZ1bmN0aW9uIChwbHVnaW4sIHdvcmxkLCBWaWV3LCBubHApIHtcbiAgY29uc3QgeyBtZXRob2RzLCBtb2RlbCwgY29tcHV0ZSwgaG9va3MgfSA9IHdvcmxkXG4gIGlmIChwbHVnaW4ubWV0aG9kcykge1xuICAgIG1lcmdlUXVpY2sobWV0aG9kcywgcGx1Z2luLm1ldGhvZHMpXG4gIH1cbiAgaWYgKHBsdWdpbi5tb2RlbCkge1xuICAgIG1lcmdlRGVlcChtb2RlbCwgcGx1Z2luLm1vZGVsKVxuICB9XG4gIGlmIChwbHVnaW4uaXJyZWd1bGFycykge1xuICAgIGFkZElycmVndWxhcnMobW9kZWwsIHBsdWdpbi5pcnJlZ3VsYXJzKVxuICB9XG4gIC8vIHNoYWxsb3ctbWVyZ2UgY29tcHV0ZVxuICBpZiAocGx1Z2luLmNvbXB1dGUpIHtcbiAgICBPYmplY3QuYXNzaWduKGNvbXB1dGUsIHBsdWdpbi5jb21wdXRlKVxuICB9XG4gIC8vIGFwcGVuZCBuZXcgaG9va3NcbiAgaWYgKGhvb2tzKSB7XG4gICAgd29ybGQuaG9va3MgPSBob29rcy5jb25jYXQocGx1Z2luLmhvb2tzIHx8IFtdKVxuICB9XG4gIC8vIGFzc2lnbiBuZXcgY2xhc3MgbWV0aG9kc1xuICBpZiAocGx1Z2luLmFwaSkge1xuICAgIHBsdWdpbi5hcGkoVmlldylcbiAgfVxuICBpZiAocGx1Z2luLmxpYikge1xuICAgIE9iamVjdC5rZXlzKHBsdWdpbi5saWIpLmZvckVhY2goayA9PiAobmxwW2tdID0gcGx1Z2luLmxpYltrXSkpXG4gIH1cbiAgaWYgKHBsdWdpbi50YWdzKSB7XG4gICAgbmxwLmFkZFRhZ3MocGx1Z2luLnRhZ3MpXG4gIH1cbiAgaWYgKHBsdWdpbi53b3Jkcykge1xuICAgIG5scC5hZGRXb3JkcyhwbHVnaW4ud29yZHMpXG4gIH1cbiAgaWYgKHBsdWdpbi5mcm96ZW4pIHtcbiAgICBubHAuYWRkV29yZHMocGx1Z2luLmZyb3plbiwgdHJ1ZSlcbiAgfVxuICBpZiAocGx1Z2luLm11dGF0ZSkge1xuICAgIHBsdWdpbi5tdXRhdGUod29ybGQsIG5scClcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5kXG4iLCAiXG4vKiogbG9nIHRoZSBkZWNpc2lvbi1tYWtpbmcgdG8gY29uc29sZSAqL1xuY29uc3QgdmVyYm9zZSA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgY29uc3QgZW52ID0gdHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICFwcm9jZXNzLmVudiA/IHNlbGYuZW52IHx8IHt9IDogcHJvY2Vzcy5lbnYgLy91c2Ugd2luZG93LCBpbiBicm93c2VyXG4gIGVudi5ERUJVR19UQUdTID0gc2V0ID09PSAndGFnZ2VyJyB8fCBzZXQgPT09IHRydWUgPyB0cnVlIDogJydcbiAgZW52LkRFQlVHX01BVENIID0gc2V0ID09PSAnbWF0Y2gnIHx8IHNldCA9PT0gdHJ1ZSA/IHRydWUgOiAnJ1xuICBlbnYuREVCVUdfQ0hVTktTID0gc2V0ID09PSAnY2h1bmtlcicgfHwgc2V0ID09PSB0cnVlID8gdHJ1ZSA6ICcnXG4gIHJldHVybiB0aGlzXG59XG5cbmV4cG9ydCB7IHZlcmJvc2UgfSIsICJjb25zdCBpc09iamVjdCA9IHZhbCA9PiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuY29uc3QgaXNBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09PSAnW29iamVjdCBBcnJheV0nXG59XG5cbi8vIGludGVybmFsIFRlcm0gb2JqZWN0cyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50XG5jb25zdCBmcm9tSnNvbiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gIHJldHVybiBqc29uLm1hcChvID0+IHtcbiAgICByZXR1cm4gby50ZXJtcy5tYXAodGVybSA9PiB7XG4gICAgICBpZiAoaXNBcnJheSh0ZXJtLnRhZ3MpKSB7XG4gICAgICAgIHRlcm0udGFncyA9IG5ldyBTZXQodGVybS50YWdzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRlcm1cbiAgICB9KVxuICB9KVxufVxuXG4vLyBpbnRlcnByZXQgYW4gYXJyYXktb2YtYXJyYXlzXG5jb25zdCBwcmVUb2tlbml6ZWQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBhcnIubWFwKChhKSA9PiB7XG4gICAgcmV0dXJuIGEubWFwKHN0ciA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiBzdHIsXG4gICAgICAgIG5vcm1hbDogc3RyLC8vY2xlYW51cFxuICAgICAgICBwcmU6ICcnLFxuICAgICAgICBwb3N0OiAnICcsXG4gICAgICAgIHRhZ3M6IG5ldyBTZXQoKVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbmNvbnN0IGlucHV0cyA9IGZ1bmN0aW9uIChpbnB1dCwgVmlldywgd29ybGQpIHtcbiAgY29uc3QgeyBtZXRob2RzIH0gPSB3b3JsZFxuICBsZXQgZG9jID0gbmV3IFZpZXcoW10pXG4gIGRvYy53b3JsZCA9IHdvcmxkXG4gIC8vIHN1cHBvcnQgYSBudW1iZXJcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICBpbnB1dCA9IFN0cmluZyhpbnB1dClcbiAgfVxuICAvLyByZXR1cm4gZW1wdHkgZG9jXG4gIGlmICghaW5wdXQpIHtcbiAgICByZXR1cm4gZG9jXG4gIH1cbiAgLy8gcGFyc2UgYSBzdHJpbmdcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICBsZXQgZG9jdW1lbnQgPSBtZXRob2RzLm9uZS50b2tlbml6ZS5mcm9tU3RyaW5nKGlucHV0LCB3b3JsZClcbiAgICByZXR1cm4gbmV3IFZpZXcoZG9jdW1lbnQpXG4gIH1cbiAgLy8gaGFuZGxlIGNvbXByb21pc2UgVmlld1xuICBpZiAoaXNPYmplY3QoaW5wdXQpICYmIGlucHV0LmlzVmlldykge1xuICAgIHJldHVybiBuZXcgVmlldyhpbnB1dC5kb2N1bWVudCwgaW5wdXQucHRycylcbiAgfVxuICAvLyBoYW5kbGUganNvbiBpbnB1dFxuICBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAvLyBwcmUtdG9rZW5pemVkIGFycmF5LW9mLWFycmF5cyBcbiAgICBpZiAoaXNBcnJheShpbnB1dFswXSkpIHtcbiAgICAgIGxldCBkb2N1bWVudCA9IHByZVRva2VuaXplZChpbnB1dClcbiAgICAgIHJldHVybiBuZXcgVmlldyhkb2N1bWVudClcbiAgICB9XG4gICAgLy8gaGFuZGxlIGpzb24gb3V0cHV0XG4gICAgbGV0IGRvY3VtZW50ID0gZnJvbUpzb24oaW5wdXQpXG4gICAgcmV0dXJuIG5ldyBWaWV3KGRvY3VtZW50KVxuICB9XG4gIHJldHVybiBkb2Ncbn1cbmV4cG9ydCBkZWZhdWx0IGlucHV0cyIsICJpbXBvcnQgVmlldyBmcm9tICcuL0FQSS9WaWV3LmpzJ1xuaW1wb3J0IHRtcFdybGQgZnJvbSAnLi9BUEkvd29ybGQuanMnXG5pbXBvcnQgdmVyc2lvbiBmcm9tICcuL192ZXJzaW9uLmpzJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuL0FQSS9leHRlbmQuanMnXG5pbXBvcnQgeyB2ZXJib3NlIH0gZnJvbSAnLi9BUEkvX2xpYi5qcydcbmltcG9ydCBoYW5kbGVJbnB1dHMgZnJvbSAnLi9BUEkvaW5wdXRzLmpzJ1xuXG5sZXQgd29ybGQgPSBPYmplY3QuYXNzaWduKHt9LCB0bXBXcmxkKVxuXG5jb25zdCBubHAgPSBmdW5jdGlvbiAoaW5wdXQsIGxleCkge1xuICBpZiAobGV4KSB7XG4gICAgbmxwLmFkZFdvcmRzKGxleClcbiAgfVxuICBsZXQgZG9jID0gaGFuZGxlSW5wdXRzKGlucHV0LCBWaWV3LCB3b3JsZClcbiAgaWYgKGlucHV0KSB7XG4gICAgZG9jLmNvbXB1dGUod29ybGQuaG9va3MpXG4gIH1cbiAgcmV0dXJuIGRvY1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG5scCwgJ193b3JsZCcsIHtcbiAgdmFsdWU6IHdvcmxkLFxuICB3cml0YWJsZTogdHJ1ZSxcbn0pXG5cbi8qKiBkb24ndCBydW4gdGhlIFBPUy10YWdnZXIgKi9cbm5scC50b2tlbml6ZSA9IGZ1bmN0aW9uIChpbnB1dCwgbGV4KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gdGhpcy5fd29ybGRcbiAgLy8gYWRkIHVzZXItZ2l2ZW4gd29yZHMgdG8gbGV4aWNvblxuICBpZiAobGV4KSB7XG4gICAgbmxwLmFkZFdvcmRzKGxleClcbiAgfVxuICAvLyBydW4gdGhlIHRva2VuaXplclxuICBsZXQgZG9jID0gaGFuZGxlSW5wdXRzKGlucHV0LCBWaWV3LCB3b3JsZClcbiAgLy8gZ2l2ZSBjb250cmFjdGlvbnMgYSBzaG90LCBhdCBsZWFzdFxuICBpZiAoY29tcHV0ZS5jb250cmFjdGlvbnMpIHtcbiAgICBkb2MuY29tcHV0ZShbJ2FsaWFzJywgJ25vcm1hbCcsICdtYWNoaW5lJywgJ2NvbnRyYWN0aW9ucyddKSAvL3J1biBpdCBpZiB3ZSd2ZSBnb3QgaXRcbiAgfVxuICByZXR1cm4gZG9jXG59XG5cbi8qKiBleHRlbmQgY29tcHJvbWlzZSBmdW5jdGlvbmFsaXR5ICovXG5ubHAucGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICBleHRlbmQocGx1Z2luLCB0aGlzLl93b3JsZCwgVmlldywgdGhpcylcbiAgcmV0dXJuIHRoaXNcbn1cbm5scC5leHRlbmQgPSBubHAucGx1Z2luXG5cblxuLyoqIHJlYWNoLWludG8gY29tcHJvbWlzZSBpbnRlcm5hbHMgKi9cbm5scC53b3JsZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3dvcmxkXG59XG5ubHAubW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl93b3JsZC5tb2RlbFxufVxubmxwLm1ldGhvZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl93b3JsZC5tZXRob2RzXG59XG5ubHAuaG9va3MgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl93b3JsZC5ob29rc1xufVxuXG4vKiogbG9nIHRoZSBkZWNpc2lvbi1tYWtpbmcgdG8gY29uc29sZSAqL1xubmxwLnZlcmJvc2UgPSB2ZXJib3NlXG4vKiogY3VycmVudCBsaWJyYXJ5IHJlbGVhc2UgdmVyc2lvbiAqL1xubmxwLnZlcnNpb24gPSB2ZXJzaW9uXG5cbmV4cG9ydCBkZWZhdWx0IG5scFxuIiwgImNvbnN0IGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XG4gIGxldCBjYWNoZSA9IGRvY3VtZW50Lm1hcCh0ZXJtcyA9PiB7XG4gICAgbGV0IGl0ZW1zID0gbmV3IFNldCgpXG4gICAgdGVybXMuZm9yRWFjaCh0ZXJtID0+IHtcbiAgICAgIC8vIGFkZCB3b3Jkc1xuICAgICAgaWYgKHRlcm0ubm9ybWFsICE9PSAnJykge1xuICAgICAgICBpdGVtcy5hZGQodGVybS5ub3JtYWwpXG4gICAgICB9XG4gICAgICAvLyBjYWNoZSBzd2l0Y2gtc3RhdHVzIC0gJyVOb3VufFZlcmIlJ1xuICAgICAgaWYgKHRlcm0uc3dpdGNoKSB7XG4gICAgICAgIGl0ZW1zLmFkZChgJSR7dGVybS5zd2l0Y2h9JWApXG4gICAgICB9XG4gICAgICAvLyBjYWNoZSBpbXBsaWNpdCB3b3JkcywgdG9vXG4gICAgICBpZiAodGVybS5pbXBsaWNpdCkge1xuICAgICAgICBpdGVtcy5hZGQodGVybS5pbXBsaWNpdClcbiAgICAgIH1cbiAgICAgIGlmICh0ZXJtLm1hY2hpbmUpIHtcbiAgICAgICAgaXRlbXMuYWRkKHRlcm0ubWFjaGluZSlcbiAgICAgIH1cbiAgICAgIGlmICh0ZXJtLnJvb3QpIHtcbiAgICAgICAgaXRlbXMuYWRkKHRlcm0ucm9vdClcbiAgICAgIH1cbiAgICAgIC8vIGNhY2hlIHNsYXNoZXMgd29yZHMsIGV0Y1xuICAgICAgaWYgKHRlcm0uYWxpYXMpIHtcbiAgICAgICAgdGVybS5hbGlhcy5mb3JFYWNoKHN0ciA9PiBpdGVtcy5hZGQoc3RyKSlcbiAgICAgIH1cbiAgICAgIGxldCB0YWdzID0gQXJyYXkuZnJvbSh0ZXJtLnRhZ3MpXG4gICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRhZ3MubGVuZ3RoOyB0ICs9IDEpIHtcbiAgICAgICAgaXRlbXMuYWRkKCcjJyArIHRhZ3NbdF0pXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gaXRlbXNcbiAgfSlcbiAgcmV0dXJuIGNhY2hlXG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDYWNoZVxuIiwgImltcG9ydCBjYWNoZURvYyBmcm9tICcuL2NhY2hlRG9jLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uZToge1xuICAgIGNhY2hlRG9jLFxuICB9LFxufVxuIiwgImNvbnN0IG1ldGhvZHMgPSB7XG4gIC8qKiAqL1xuICBjYWNoZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2NhY2hlID0gdGhpcy5tZXRob2RzLm9uZS5jYWNoZURvYyh0aGlzLmRvY3VtZW50KVxuICAgIHJldHVybiB0aGlzXG4gIH0sXG4gIC8qKiAqL1xuICB1bmNhY2hlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fY2FjaGUgPSBudWxsXG4gICAgcmV0dXJuIHRoaXNcbiAgfSxcbn1cbmNvbnN0IGFkZEFQSSA9IGZ1bmN0aW9uIChWaWV3KSB7XG4gIE9iamVjdC5hc3NpZ24oVmlldy5wcm90b3R5cGUsIG1ldGhvZHMpXG59XG5leHBvcnQgZGVmYXVsdCBhZGRBUElcbiIsICJcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY2FjaGU6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmlldy5fY2FjaGUgPSB2aWV3Lm1ldGhvZHMub25lLmNhY2hlRG9jKHZpZXcuZG9jdW1lbnQpXG4gIH1cbn0iLCAiaW1wb3J0IG1ldGhvZHMgZnJvbSAnLi9tZXRob2RzL2luZGV4LmpzJ1xuaW1wb3J0IGFwaSBmcm9tICcuL2FwaS5qcydcbmltcG9ydCBjb21wdXRlIGZyb20gJy4vY29tcHV0ZS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhcGksXG4gIGNvbXB1dGUsXG4gIG1ldGhvZHMsXG59XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAvKiogKi9cbiAgdG9Mb3dlckNhc2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRlcm1MaXN0KCkuZm9yRWFjaCh0ID0+IHtcbiAgICAgIHQudGV4dCA9IHQudGV4dC50b0xvd2VyQ2FzZSgpXG4gICAgfSlcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuICAvKiogKi9cbiAgdG9VcHBlckNhc2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRlcm1MaXN0KCkuZm9yRWFjaCh0ID0+IHtcbiAgICAgIHQudGV4dCA9IHQudGV4dC50b1VwcGVyQ2FzZSgpXG4gICAgfSlcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuICAvKiogKi9cbiAgdG9UaXRsZUNhc2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRlcm1MaXN0KCkuZm9yRWFjaCh0ID0+IHtcbiAgICAgIHQudGV4dCA9IHQudGV4dC5yZXBsYWNlKC9eICpbYS16XFx1MDBDMC1cXHUwMEZGXS8sIHggPT4geC50b1VwcGVyQ2FzZSgpKSAvL3N1cHBvcnQgdW5pY29kZT9cbiAgICB9KVxuICAgIHJldHVybiB0aGlzXG4gIH0sXG4gIC8qKiAqL1xuICB0b0NhbWVsQ2FzZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZG9jcy5mb3JFYWNoKHRlcm1zID0+IHtcbiAgICAgIHRlcm1zLmZvckVhY2goKHQsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgICB0LnRleHQgPSB0LnRleHQucmVwbGFjZSgvXiAqW2EtelxcdTAwQzAtXFx1MDBGRl0vLCB4ID0+IHgudG9VcHBlckNhc2UoKSkgLy9zdXBwb3J0IHVuaWNvZGU/XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHRlcm1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0LnBvc3QgPSAnJ1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXNcbiAgfSxcbn1cbiIsICIvLyBjYXNlIGxvZ2ljXG5jb25zdCBpc1RpdGxlQ2FzZSA9IChzdHIpID0+IC9eXFxwe0x1fVtcXHB7TGx9J1x1MjAxOV0vdS50ZXN0KHN0cikgfHwgL15cXHB7THV9JC91LnRlc3Qoc3RyKVxuY29uc3QgdG9UaXRsZUNhc2UgPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvXlxccHtMbH0vdSwgeCA9PiB4LnRvVXBwZXJDYXNlKCkpXG5jb25zdCB0b0xvd2VyQ2FzZSA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC9eXFxwe0x1fS91LCB4ID0+IHgudG9Mb3dlckNhc2UoKSlcblxuLy8gc3BsaWNlIGFuIGFycmF5IGludG8gYW4gYXJyYXlcbmNvbnN0IHNwbGljZUFyciA9IChwYXJlbnQsIGluZGV4LCBjaGlsZCkgPT4ge1xuICAvLyB0YWcgdGhlbSBhcyBkaXJ0eVxuICBjaGlsZC5mb3JFYWNoKHRlcm0gPT4gdGVybS5kaXJ0eSA9IHRydWUpXG4gIGlmIChwYXJlbnQpIHtcbiAgICBsZXQgYXJncyA9IFtpbmRleCwgMF0uY29uY2F0KGNoaWxkKVxuICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkocGFyZW50LCBhcmdzKVxuICB9XG4gIHJldHVybiBwYXJlbnRcbn1cblxuLy8gYWRkIGEgc3BhY2UgYXQgZW5kLCBpZiByZXF1aXJlZFxuY29uc3QgZW5kU3BhY2UgPSBmdW5jdGlvbiAodGVybXMpIHtcbiAgY29uc3QgaGFzU3BhY2UgPSAvICQvXG4gIGNvbnN0IGhhc0Rhc2ggPSAvWy1cdTIwMTNcdTIwMTRdL1xuICBsZXQgbGFzdFRlcm0gPSB0ZXJtc1t0ZXJtcy5sZW5ndGggLSAxXVxuICBpZiAobGFzdFRlcm0gJiYgIWhhc1NwYWNlLnRlc3QobGFzdFRlcm0ucG9zdCkgJiYgIWhhc0Rhc2gudGVzdChsYXN0VGVybS5wb3N0KSkge1xuICAgIGxhc3RUZXJtLnBvc3QgKz0gJyAnXG4gIH1cbn1cblxuLy8gc2VudGVuY2UtZW5kaW5nIHB1bmN0dWF0aW9uIHNob3VsZCBtb3ZlIGluIGFwcGVuZFxuY29uc3QgbW92ZVB1bmN0ID0gKHNvdXJjZSwgZW5kLCBuZWVkbGUpID0+IHtcbiAgY29uc3QganVpY3kgPSAvWy0uPyEsOzopXHUyMDEzXHUyMDE0J1wiXS9nXG4gIGxldCB3YXNMYXN0ID0gc291cmNlW2VuZCAtIDFdXG4gIGlmICghd2FzTGFzdCkge1xuICAgIHJldHVyblxuICB9XG4gIGxldCBwb3N0ID0gd2FzTGFzdC5wb3N0XG4gIGlmIChqdWljeS50ZXN0KHBvc3QpKSB7XG4gICAgbGV0IHB1bmN0ID0gcG9zdC5tYXRjaChqdWljeSkuam9pbignJykgLy9ub3QgcGVyZmVjdFxuICAgIGxldCBsYXN0ID0gbmVlZGxlW25lZWRsZS5sZW5ndGggLSAxXVxuICAgIGxhc3QucG9zdCA9IHB1bmN0ICsgbGFzdC5wb3N0XG4gICAgLy8gcmVtb3ZlIGl0LCBmcm9tIHNvdXJjZVxuICAgIHdhc0xhc3QucG9zdCA9IHdhc0xhc3QucG9zdC5yZXBsYWNlKGp1aWN5LCAnJylcbiAgfVxufVxuXG5cbmNvbnN0IG1vdmVUaXRsZUNhc2UgPSBmdW5jdGlvbiAoaG9tZSwgc3RhcnQsIG5lZWRsZSkge1xuICBsZXQgZnJvbSA9IGhvbWVbc3RhcnRdXG4gIC8vIHNob3VsZCB3ZSBib3RoZXI/XG4gIGlmIChzdGFydCAhPT0gMCB8fCAhaXNUaXRsZUNhc2UoZnJvbS50ZXh0KSkge1xuICAgIHJldHVyblxuICB9XG4gIC8vIHRpdGxlY2FzZSBuZXcgZmlyc3QgdGVybVxuICBuZWVkbGVbMF0udGV4dCA9IHRvVGl0bGVDYXNlKG5lZWRsZVswXS50ZXh0KVxuICAvLyBzaG91bGQgd2UgdW4tdGl0bGVjYXNlIHRoZSBvbGQgd29yZD9cbiAgbGV0IG9sZCA9IGhvbWVbc3RhcnRdXG4gIGlmIChvbGQudGFncy5oYXMoJ1Byb3Blck5vdW4nKSB8fCBvbGQudGFncy5oYXMoJ0Fjcm9ueW0nKSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmIChpc1RpdGxlQ2FzZShvbGQudGV4dCkgJiYgb2xkLnRleHQubGVuZ3RoID4gMSkge1xuICAgIG9sZC50ZXh0ID0gdG9Mb3dlckNhc2Uob2xkLnRleHQpXG4gIH1cbn1cblxuLy8gcHV0IHRoZXNlIHdvcmRzIGJlZm9yZSB0aGUgb3RoZXJzXG5jb25zdCBjbGVhblByZXBlbmQgPSBmdW5jdGlvbiAoaG9tZSwgcHRyLCBuZWVkbGUsIGRvY3VtZW50KSB7XG4gIGxldCBbbiwgc3RhcnQsIGVuZF0gPSBwdHJcbiAgLy8gaW50cm9kdWNlIHNwYWNlcyBhcHByb3ByaWF0ZWx5XG4gIGlmIChzdGFydCA9PT0gMCkge1xuICAgIC8vIGF0IHN0YXJ0IC0gbmVlZCBzcGFjZSBpbiBpbnNlcnRcbiAgICBlbmRTcGFjZShuZWVkbGUpXG4gIH0gZWxzZSBpZiAoZW5kID09PSBkb2N1bWVudFtuXS5sZW5ndGgpIHtcbiAgICAvLyBhdCBlbmQgLSBuZWVkIHNwYWNlIGluIGhvbWVcbiAgICBlbmRTcGFjZShuZWVkbGUpXG4gIH0gZWxzZSB7XG4gICAgLy8gaW4gbWlkZGxlIC0gbmVlZCBzcGFjZSBpbiBob21lIGFuZCBpbnNlcnRcbiAgICBlbmRTcGFjZShuZWVkbGUpXG4gICAgZW5kU3BhY2UoW2hvbWVbcHRyWzFdXV0pXG4gIH1cbiAgbW92ZVRpdGxlQ2FzZShob21lLCBzdGFydCwgbmVlZGxlKVxuICAvLyBtb3ZlUHVuY3QoaG9tZSwgZW5kLCBuZWVkbGUpXG4gIHNwbGljZUFycihob21lLCBzdGFydCwgbmVlZGxlKVxufVxuXG5jb25zdCBjbGVhbkFwcGVuZCA9IGZ1bmN0aW9uIChob21lLCBwdHIsIG5lZWRsZSwgZG9jdW1lbnQpIHtcbiAgbGV0IFtuLCAsIGVuZF0gPSBwdHJcbiAgbGV0IHRvdGFsID0gKGRvY3VtZW50W25dIHx8IFtdKS5sZW5ndGhcbiAgaWYgKGVuZCA8IHRvdGFsKSB7XG4gICAgLy8gYXJlIHdlIGluIHRoZSBtaWRkbGU/XG4gICAgLy8gYWRkIHRyYWlsaW5nIHNwYWNlIG9uIHNlbGZcbiAgICBtb3ZlUHVuY3QoaG9tZSwgZW5kLCBuZWVkbGUpXG4gICAgZW5kU3BhY2UobmVlZGxlKVxuICB9IGVsc2UgaWYgKHRvdGFsID09PSBlbmQpIHtcbiAgICAvLyBhcmUgd2UgYXQgdGhlIGVuZD9cbiAgICAvLyBhZGQgYSBzcGFjZSB0byBwcmVkZWNlc3NvclxuICAgIGVuZFNwYWNlKGhvbWUpXG4gICAgLy8gdmVyeSBlbmQsIG1vdmUgcGVyaW9kXG4gICAgbW92ZVB1bmN0KGhvbWUsIGVuZCwgbmVlZGxlKVxuICAgIC8vIGlzIHRoZXJlIGFub3RoZXIgc2VudGVuY2UgYWZ0ZXI/XG4gICAgaWYgKGRvY3VtZW50W24gKyAxXSkge1xuICAgICAgbmVlZGxlW25lZWRsZS5sZW5ndGggLSAxXS5wb3N0ICs9ICcgJ1xuICAgIH1cbiAgfVxuICBzcGxpY2VBcnIoaG9tZSwgcHRyWzJdLCBuZWVkbGUpXG4gIC8vIHNldCBuZXcgZW5kSWRcbiAgcHRyWzRdID0gbmVlZGxlW25lZWRsZS5sZW5ndGggLSAxXS5pZFxufVxuXG5leHBvcnQgeyBjbGVhblByZXBlbmQsIGNsZWFuQXBwZW5kLCBzcGxpY2VBcnIgfVxuIiwgIi8qXG51bmlxdWUgJiBvcmRlcmVkIHRlcm0gaWRzLCBiYXNlZCBvbiB0aW1lICYgdGVybSBpbmRleFxuXG5CYXNlIDM2IChudW1iZXJzK2FzY2lpKVxuICAzIGRpZ2l0IDQsNjAwXG4gIDIgZGlnaXQgMSwyMDBcbiAgMSBkaWdpdCAzNlxuXG4gIFRUVHxOTk58SUl8UlxuXG5UVFQgLT4gNDYgdGVybXMgc2luY2UgbG9hZFxuTk5OIC0+IDQ2IHRob3VzYW5kIHNlbnRlbmNlcyAoPjEgaW5mLWplc3QpXG5JSSAgLT4gMSwyMDAgd29yZHMgaW4gYSBzZW50ZW5jZSAobnV0cylcblIgICAtPiAxLTM2IHJhbmRvbSBudW1iZXIgXG5cbm5vdmVsczogXG4gIGF2ZyA4MCwwMDAgd29yZHNcbiAgICAxNSB3b3JkcyBwZXIgc2VudGVuY2VcbiAgNSwwMDAgc2VudGVuY2VzXG5cbkluZmluaXRlIEplc3Q6XG4gIDM2LDI0NyBzZW50ZW5jZXNcbiAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9sb25nZXN0X25vdmVsc1xuXG5jb2xsaXNpb25zIGFyZSBtb3JlLWxpa2VseSBhZnRlclxuICAgIDQ2IHNlY29uZHMgaGF2ZSBwYXNzZWQsXG4gIGFuZCBcbiAgICBhZnRlciA0Ni10aG91c2FuZCBzZW50ZW5jZXNcblxuKi9cbmxldCBpbmRleCA9IDBcblxuY29uc3QgcGFkMyA9IChzdHIpID0+IHtcbiAgc3RyID0gc3RyLmxlbmd0aCA8IDMgPyAnMCcgKyBzdHIgOiBzdHJcbiAgcmV0dXJuIHN0ci5sZW5ndGggPCAzID8gJzAnICsgc3RyIDogc3RyXG59XG5cbmNvbnN0IHRvSWQgPSBmdW5jdGlvbiAodGVybSkge1xuICBsZXQgW24sIGldID0gdGVybS5pbmRleCB8fCBbMCwgMF1cbiAgaW5kZXggKz0gMVxuXG4gIC8vZG9uJ3Qgb3ZlcmZsb3cgaW5kZXhcbiAgaW5kZXggPSBpbmRleCA+IDQ2NjU1ID8gMCA6IGluZGV4XG4gIC8vZG9uJ3Qgb3ZlcmZsb3cgc2VudGVuY2VzXG4gIG4gPSBuID4gNDY2NTUgPyAwIDogblxuICAvLyAvL2Rvbid0IG92ZXJmbG93IHRlcm1zXG4gIGkgPSBpID4gMTI5NCA/IDAgOiBpXG5cbiAgLy8gMyBkaWdpdHMgZm9yIHRpbWVcbiAgbGV0IGlkID0gcGFkMyhpbmRleC50b1N0cmluZygzNikpXG4gIC8vIDMgZGlnaXQgIGZvciBzZW50ZW5jZSBpbmRleCAoNDZrKVxuICBpZCArPSBwYWQzKG4udG9TdHJpbmcoMzYpKVxuXG4gIC8vIDEgZGlnaXQgZm9yIHRlcm0gaW5kZXggKDM2KVxuICBsZXQgdHggPSBpLnRvU3RyaW5nKDM2KVxuICB0eCA9IHR4Lmxlbmd0aCA8IDIgPyAnMCcgKyB0eCA6IHR4IC8vcGFkMlxuICBpZCArPSB0eFxuXG4gIC8vIDEgZGlnaXQgcmFuZG9tIG51bWJlclxuICBsZXQgciA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiAzNiwgMTApXG4gIGlkICs9IChyKS50b1N0cmluZygzNilcblxuICByZXR1cm4gdGVybS5ub3JtYWwgKyAnfCcgKyBpZC50b1VwcGVyQ2FzZSgpXG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvSWRcblxuLy8gc2V0SW50ZXJ2YWwoKCkgPT4gY29uc29sZS5sb2codG9JZCg0LCAxMikpLCAxMDApXG4iLCAiaW1wb3J0IHsgY2xlYW5BcHBlbmQsIGNsZWFuUHJlcGVuZCB9IGZyb20gJy4vbGliL2luc2VydC5qcydcbmltcG9ydCB1dWlkIGZyb20gJy4uL2NvbXB1dGUvdXVpZC5qcydcbi8vIGFyZSB3ZSBpbnNlcnRpbmcgaW5zaWRlIGEgY29udHJhY3Rpb24/XG4vLyBleHBhbmQgaXQgZmlyc3RcbmNvbnN0IGV4cGFuZCA9IGZ1bmN0aW9uIChtKSB7XG4gIGlmIChtLmhhcygnQGhhc0NvbnRyYWN0aW9uJykgJiYgdHlwZW9mIG0uY29udHJhY3Rpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8mJiBtLmFmdGVyKCdeLicpLmhhcygnQGhhc0NvbnRyYWN0aW9uJylcbiAgICBsZXQgbW9yZSA9IG0uZ3JvdygnQGhhc0NvbnRyYWN0aW9uJylcbiAgICBtb3JlLmNvbnRyYWN0aW9ucygpLmV4cGFuZCgpXG4gIH1cbn1cblxuY29uc3QgaXNBcnJheSA9IGFyciA9PiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuXG4vLyBzZXQgbmV3IGlkcyBmb3IgZWFjaCB0ZXJtc1xuY29uc3QgYWRkSWRzID0gZnVuY3Rpb24gKHRlcm1zKSB7XG4gIHRlcm1zID0gdGVybXMubWFwKHRlcm0gPT4ge1xuICAgIHRlcm0uaWQgPSB1dWlkKHRlcm0pXG4gICAgcmV0dXJuIHRlcm1cbiAgfSlcbiAgcmV0dXJuIHRlcm1zXG59XG5cbmNvbnN0IGdldFRlcm1zID0gZnVuY3Rpb24gKGlucHV0LCB3b3JsZCkge1xuICBjb25zdCB7IG1ldGhvZHMgfSA9IHdvcmxkXG4gIC8vIGNyZWF0ZSBvdXIgdGVybXMgZnJvbSBhIHN0cmluZ1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBtZXRob2RzLm9uZS50b2tlbml6ZS5mcm9tU3RyaW5nKGlucHV0LCB3b3JsZClbMF0gLy9hc3N1bWUgb25lIHNlbnRlbmNlXG4gIH1cbiAgLy9hbGxvdyBhIHZpZXcgb2JqZWN0XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0LmlzVmlldykge1xuICAgIHJldHVybiBpbnB1dC5jbG9uZSgpLmRvY3NbMF0gfHwgW10gLy9hc3N1bWUgb25lIHNlbnRlbmNlXG4gIH1cbiAgLy9hbGxvdyBhbiBhcnJheSBvZiB0ZXJtcywgdG9vXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpc0FycmF5KGlucHV0WzBdKSA/IGlucHV0WzBdIDogaW5wdXRcbiAgfVxuICByZXR1cm4gW11cbn1cblxuY29uc3QgaW5zZXJ0ID0gZnVuY3Rpb24gKGlucHV0LCB2aWV3LCBwcmVwZW5kKSB7XG4gIGNvbnN0IHsgZG9jdW1lbnQsIHdvcmxkIH0gPSB2aWV3XG4gIHZpZXcudW5jYWNoZSgpXG4gIC8vIGluc2VydCB3b3JkcyBhdCBlbmQgb2YgZWFjaCBkb2NcbiAgbGV0IHB0cnMgPSB2aWV3LmZ1bGxQb2ludGVyXG4gIGxldCBzZWxmUHRycyA9IHZpZXcuZnVsbFBvaW50ZXJcbiAgdmlldy5mb3JFYWNoKChtLCBpKSA9PiB7XG4gICAgbGV0IHB0ciA9IG0uZnVsbFBvaW50ZXJbMF1cbiAgICBsZXQgW25dID0gcHRyXG4gICAgLy8gYWRkLWluIHRoZSB3b3Jkc1xuICAgIGxldCBob21lID0gZG9jdW1lbnRbbl1cbiAgICBsZXQgdGVybXMgPSBnZXRUZXJtcyhpbnB1dCwgd29ybGQpXG4gICAgLy8gYXJlIHdlIGluc2VydGluZyBub3RoaW5nP1xuICAgIGlmICh0ZXJtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0ZXJtcyA9IGFkZElkcyh0ZXJtcylcbiAgICBpZiAocHJlcGVuZCkge1xuICAgICAgZXhwYW5kKHZpZXcudXBkYXRlKFtwdHJdKS5maXJzdFRlcm0oKSlcbiAgICAgIGNsZWFuUHJlcGVuZChob21lLCBwdHIsIHRlcm1zLCBkb2N1bWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kKHZpZXcudXBkYXRlKFtwdHJdKS5sYXN0VGVybSgpKVxuICAgICAgY2xlYW5BcHBlbmQoaG9tZSwgcHRyLCB0ZXJtcywgZG9jdW1lbnQpXG4gICAgfVxuICAgIC8vIGhhcmRlbiB0aGUgcG9pbnRlclxuICAgIGlmIChkb2N1bWVudFtuXSAmJiBkb2N1bWVudFtuXVtwdHJbMV1dKSB7XG4gICAgICBwdHJbM10gPSBkb2N1bWVudFtuXVtwdHJbMV1dLmlkXG4gICAgfVxuICAgIC8vIGNoYW5nZSBzZWxmIGJhY2t3YXJkcyBieSBsZW5cbiAgICBzZWxmUHRyc1tpXSA9IHB0clxuICAgIC8vIGV4dGVuZCB0aGUgcG9pbnRlclxuICAgIHB0clsyXSArPSB0ZXJtcy5sZW5ndGhcbiAgICBwdHJzW2ldID0gcHRyXG4gIH0pXG4gIGxldCBkb2MgPSB2aWV3LnRvVmlldyhwdHJzKVxuICAvLyBzaGlmdCBvdXIgc2VsZiBwb2ludGVyLCBpZiBuZWNlc3NhcnlcbiAgdmlldy5wdHJzID0gc2VsZlB0cnNcbiAgLy8gdHJ5IHRvIHRhZyB0aGVtLCB0b29cbiAgZG9jLmNvbXB1dGUoWydpZCcsICdpbmRleCcsICdmcmVlemUnLCAnbGV4aWNvbiddKVxuICBpZiAoZG9jLndvcmxkLmNvbXB1dGUucHJlVGFnZ2VyKSB7XG4gICAgZG9jLmNvbXB1dGUoJ3ByZVRhZ2dlcicpXG4gIH1cbiAgZG9jLmNvbXB1dGUoJ3VuZnJlZXplJylcbiAgcmV0dXJuIGRvY1xufVxuXG5jb25zdCBmbnMgPSB7XG4gIGluc2VydEFmdGVyOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5zZXJ0KGlucHV0LCB0aGlzLCBmYWxzZSlcbiAgfSxcbiAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5zZXJ0KGlucHV0LCB0aGlzLCB0cnVlKVxuICB9LFxufVxuZm5zLmFwcGVuZCA9IGZucy5pbnNlcnRBZnRlclxuZm5zLnByZXBlbmQgPSBmbnMuaW5zZXJ0QmVmb3JlXG5mbnMuaW5zZXJ0ID0gZm5zLmluc2VydEFmdGVyXG5cbmV4cG9ydCBkZWZhdWx0IGZuc1xuIiwgImNvbnN0IGRvbGxhclN0dWIgPSAvXFwkWzAtOWEtel0rL2dcbmNvbnN0IGZucyA9IHt9XG5cbi8vIGNhc2UgbG9naWNcbmNvbnN0IGlzVGl0bGVDYXNlID0gKHN0cikgPT4gL15cXHB7THV9W1xccHtMbH0nXHUyMDE5XS91LnRlc3Qoc3RyKSB8fCAvXlxccHtMdX0kL3UudGVzdChzdHIpXG5jb25zdCB0b1RpdGxlQ2FzZSA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC9eXFxwe0xsfS91LCB4ID0+IHgudG9VcHBlckNhc2UoKSlcbmNvbnN0IHRvTG93ZXJDYXNlID0gKHN0cikgPT4gc3RyLnJlcGxhY2UoL15cXHB7THV9L3UsIHggPT4geC50b0xvd2VyQ2FzZSgpKVxuXG4vLyBkb2MucmVwbGFjZSgnZm9vJywgKG0pPT57fSlcbmNvbnN0IHJlcGxhY2VCeUZuID0gZnVuY3Rpb24gKG1haW4sIGZuLCBrZWVwKSB7XG4gIG1haW4uZm9yRWFjaChtID0+IHtcbiAgICBsZXQgb3V0ID0gZm4obSlcbiAgICBtLnJlcGxhY2VXaXRoKG91dCwga2VlcClcbiAgfSlcbiAgcmV0dXJuIG1haW5cbn1cblxuLy8gc3VwcG9ydCAnZm9vICQwJyByZXBsYWNlbWVudHNcbmNvbnN0IHN1YkRvbGxhclNpZ24gPSBmdW5jdGlvbiAoaW5wdXQsIG1haW4pIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgfVxuICBsZXQgZ3JvdXBzID0gbWFpbi5ncm91cHMoKVxuICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoZG9sbGFyU3R1YiwgYSA9PiB7XG4gICAgbGV0IG51bSA9IGEucmVwbGFjZSgvXFwkLywgJycpXG4gICAgaWYgKGdyb3Vwcy5oYXNPd25Qcm9wZXJ0eShudW0pKSB7XG4gICAgICByZXR1cm4gZ3JvdXBzW251bV0udGV4dCgpXG4gICAgfVxuICAgIHJldHVybiBhXG4gIH0pXG4gIHJldHVybiBpbnB1dFxufVxuXG5mbnMucmVwbGFjZVdpdGggPSBmdW5jdGlvbiAoaW5wdXQsIGtlZXAgPSB7fSkge1xuICBsZXQgcHRycyA9IHRoaXMuZnVsbFBvaW50ZXJcbiAgbGV0IG1haW4gPSB0aGlzXG4gIHRoaXMudW5jYWNoZSgpXG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcmVwbGFjZUJ5Rm4obWFpbiwgaW5wdXQsIGtlZXApXG4gIH1cbiAgbGV0IHRlcm1zID0gbWFpbi5kb2NzWzBdXG4gIGlmICghdGVybXMpIHJldHVybiBtYWluXG4gIGxldCBpc09yaWdpbmFsUG9zc2Vzc2l2ZSA9IGtlZXAucG9zc2Vzc2l2ZXMgJiYgdGVybXNbdGVybXMubGVuZ3RoIC0gMV0udGFncy5oYXMoJ1Bvc3Nlc3NpdmUnKVxuICBsZXQgaXNPcmlnaW5hbFRpdGxlQ2FzZSA9IGtlZXAuY2FzZSAmJiBpc1RpdGxlQ2FzZSh0ZXJtc1swXS50ZXh0KVxuICAvLyBzdXBwb3J0ICdmb28gJDAnIHJlcGxhY2VtZW50c1xuICBpbnB1dCA9IHN1YkRvbGxhclNpZ24oaW5wdXQsIG1haW4pXG5cbiAgbGV0IG9yaWdpbmFsID0gdGhpcy51cGRhdGUocHRycylcbiAgLy8gc29mdGVuLXVwIHBvaW50ZXJcbiAgcHRycyA9IHB0cnMubWFwKHB0ciA9PiBwdHIuc2xpY2UoMCwgMykpXG4gIC8vIG9yaWdpbmFsLmZyZWV6ZSgpXG4gIGxldCBvbGRUYWdzID0gKG9yaWdpbmFsLmRvY3NbMF0gfHwgW10pLm1hcCh0ZXJtID0+IEFycmF5LmZyb20odGVybS50YWdzKSlcbiAgbGV0IG9yaWdpbmFsUHJlID0gb3JpZ2luYWwuZG9jc1swXVswXS5wcmVcbiAgbGV0IG9yaWdpbmFsUG9zdCA9IG9yaWdpbmFsLmRvY3NbMF1bb3JpZ2luYWwuZG9jc1swXS5sZW5ndGggLSAxXS5wb3N0XG4gIC8vIHNsaWRlIHRoaXMgaW5cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICBpbnB1dCA9IHRoaXMuZnJvbVRleHQoaW5wdXQpLmNvbXB1dGUoJ2lkJylcbiAgfVxuICBtYWluLmluc2VydEFmdGVyKGlucHV0KVxuICAvLyBhcmUgd2UgcmVwbGFjaW5nIHBhcnQgb2YgYSBjb250cmFjdGlvbj9cbiAgaWYgKG9yaWdpbmFsLmhhcygnQGhhc0NvbnRyYWN0aW9uJykgJiYgbWFpbi5jb250cmFjdGlvbnMpIHtcbiAgICBsZXQgbW9yZSA9IG1haW4uZ3JvdygnQGhhc0NvbnRyYWN0aW9uKycpXG4gICAgbW9yZS5jb250cmFjdGlvbnMoKS5leHBhbmQoKVxuICB9XG4gIC8vIGRlbGV0ZSB0aGUgb3JpZ2luYWwgdGVybXNcbiAgbWFpbi5kZWxldGUob3JpZ2luYWwpIC8vc2NpZW5jZS5cblxuICAvLyBrZWVwIFwiSm9obidzXCJcbiAgaWYgKGlzT3JpZ2luYWxQb3NzZXNzaXZlKSB7XG4gICAgbGV0IHRtcCA9IG1haW4uZG9jc1swXVxuICAgIGxldCB0ZXJtID0gdG1wW3RtcC5sZW5ndGggLSAxXVxuICAgIGlmICghdGVybS50YWdzLmhhcygnUG9zc2Vzc2l2ZScpKSB7XG4gICAgICB0ZXJtLnRleHQgKz0gXCInc1wiXG4gICAgICB0ZXJtLm5vcm1hbCArPSBcIidzXCJcbiAgICAgIHRlcm0udGFncy5hZGQoJ1Bvc3Nlc3NpdmUnKVxuICAgIH1cbiAgfVxuXG4gIC8vIHRyeSB0byBrZWVwIHNvbWUgcHJlLXB1bmN0dWF0aW9uXG4gIGlmIChvcmlnaW5hbFByZSAmJiBtYWluLmRvY3NbMF0pIHtcbiAgICBtYWluLmRvY3NbMF1bMF0ucHJlID0gb3JpZ2luYWxQcmVcbiAgfVxuICAvLyB0cnkgdG8ga2VlcCBhbnkgcG9zdC1wdW5jdHVhdGlvblxuICBpZiAob3JpZ2luYWxQb3N0ICYmIG1haW4uZG9jc1swXSkge1xuICAgIGxldCBsYXN0T25lID0gbWFpbi5kb2NzWzBdW21haW4uZG9jc1swXS5sZW5ndGggLSAxXVxuICAgIGlmICghbGFzdE9uZS5wb3N0LnRyaW0oKSkge1xuICAgICAgbGFzdE9uZS5wb3N0ID0gb3JpZ2luYWxQb3N0XG4gICAgfVxuICB9XG5cbiAgLy8gd2hhdCBzaG91bGQgd2UgcmV0dXJuP1xuICBsZXQgbSA9IG1haW4udG9WaWV3KHB0cnMpLmNvbXB1dGUoWydpbmRleCcsICdmcmVlemUnLCAnbGV4aWNvbiddKVxuICBpZiAobS53b3JsZC5jb21wdXRlLnByZVRhZ2dlcikge1xuICAgIG0uY29tcHV0ZSgncHJlVGFnZ2VyJylcbiAgfVxuICBtLmNvbXB1dGUoJ3VuZnJlZXplJylcbiAgLy8gcmVwbGFjZSBhbnkgb2xkIHRhZ3NcbiAgaWYgKGtlZXAudGFncykge1xuICAgIG0udGVybXMoKS5mb3JFYWNoKCh0ZXJtLCBpKSA9PiB7XG4gICAgICB0ZXJtLnRhZ1NhZmUob2xkVGFnc1tpXSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKCFtLmRvY3NbMF0gfHwgIW0uZG9jc1swXVswXSkgcmV0dXJuIG1cblxuICAvLyB0cnkgdG8gY28tZXJjZSBjYXNlLCB0b29cbiAgaWYgKGtlZXAuY2FzZSkge1xuICAgIGxldCB0cmFuc2Zvcm1DYXNlID0gaXNPcmlnaW5hbFRpdGxlQ2FzZSA/IHRvVGl0bGVDYXNlIDogdG9Mb3dlckNhc2VcbiAgICBtLmRvY3NbMF1bMF0udGV4dCA9IHRyYW5zZm9ybUNhc2UobS5kb2NzWzBdWzBdLnRleHQpXG4gIH1cblxuICAvLyBjb25zb2xlLmxvZyhpbnB1dC5kb2NzWzBdKVxuICAvLyBsZXQgcmVncyA9IGlucHV0LmRvY3NbMF0ubWFwKHQgPT4ge1xuICAvLyAgIHJldHVybiB7IGlkOiB0LmlkLCBvcHRpb25hbDogdHJ1ZSB9XG4gIC8vIH0pXG4gIC8vIG0uYWZ0ZXIoJyhhfGhveSknKS5kZWJ1ZygpXG4gIC8vIG0uZ3Jvd1JpZ2h0KCcoYXxob3kpJykuZGVidWcoKVxuICAvLyBjb25zb2xlLmxvZyhtKVxuICByZXR1cm4gbVxufVxuXG5mbnMucmVwbGFjZSA9IGZ1bmN0aW9uIChtYXRjaCwgaW5wdXQsIGtlZXApIHtcbiAgaWYgKG1hdGNoICYmICFpbnB1dCkge1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2VXaXRoKG1hdGNoLCBrZWVwKVxuICB9XG4gIGxldCBtID0gdGhpcy5tYXRjaChtYXRjaClcbiAgaWYgKCFtLmZvdW5kKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuICB0aGlzLnNvZnRlbigpXG4gIHJldHVybiBtLnJlcGxhY2VXaXRoKGlucHV0LCBrZWVwKVxufVxuZXhwb3J0IGRlZmF1bHQgZm5zXG4iLCAiXG4vLyB0cmFuc2ZlciBzZW50ZW5jZS1lbmRpbmcgcHVuY3R1YXRpb25cbmNvbnN0IHJlcGFpclB1bmN0ID0gZnVuY3Rpb24gKHRlcm1zLCBsZW4pIHtcbiAgbGV0IGxhc3QgPSB0ZXJtcy5sZW5ndGggLSAxXG4gIGxldCBmcm9tID0gdGVybXNbbGFzdF1cbiAgbGV0IHRvID0gdGVybXNbbGFzdCAtIGxlbl1cbiAgaWYgKHRvICYmIGZyb20pIHtcbiAgICB0by5wb3N0ICs9IGZyb20ucG9zdCAvL3RoaXMgaXNuJ3QgcGVyZmVjdC5cbiAgICB0by5wb3N0ID0gdG8ucG9zdC5yZXBsYWNlKC8gKyhbLj8hLDs6XSkvLCAnJDEnKVxuICAgIC8vIGRvbid0IGFsbG93IGFueSBzaWxseSBwdW5jdHVhdGlvbiBvdXRjb21lcyBsaWtlICcsISdcbiAgICB0by5wb3N0ID0gdG8ucG9zdC5yZXBsYWNlKC9bLDs6XSsoWy4/IV0pLywgJyQxJylcbiAgfVxufVxuXG4vLyByZW1vdmUgdGVybXMgZnJvbSBkb2N1bWVudCBqc29uXG5jb25zdCBwbHVja091dCA9IGZ1bmN0aW9uIChkb2N1bWVudCwgbm90cykge1xuICBub3RzLmZvckVhY2gocHRyID0+IHtcbiAgICBsZXQgW24sIHN0YXJ0LCBlbmRdID0gcHRyXG4gICAgbGV0IGxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgaWYgKCFkb2N1bWVudFtuXSkge1xuICAgICAgcmV0dXJuIC8vIHdlaXJkIVxuICAgIH1cbiAgICBpZiAoZW5kID09PSBkb2N1bWVudFtuXS5sZW5ndGggJiYgZW5kID4gMSkge1xuICAgICAgcmVwYWlyUHVuY3QoZG9jdW1lbnRbbl0sIGxlbilcbiAgICB9XG4gICAgZG9jdW1lbnRbbl0uc3BsaWNlKHN0YXJ0LCBsZW4pIC8vIHJlcGxhY2VzIGxlbiB0ZXJtcyBhdCBpbmRleCBzdGFydFxuICB9KVxuICAvLyByZW1vdmUgYW55IG5vdy1lbXB0eSBzZW50ZW5jZXNcbiAgLy8gKGZvcmVhY2ggKyBzcGxpY2UgPSAnbXV0YWJsZSBmaWx0ZXInKVxuICBmb3IgKGxldCBpID0gZG9jdW1lbnQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICBpZiAoZG9jdW1lbnRbaV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICBkb2N1bWVudC5zcGxpY2UoaSwgMSlcbiAgICAgIC8vIHJlbW92ZSBhbnkgdHJhaWxpbmcgd2hpdGVzcGFjZSBiZWZvcmUgb3VyIHJlbW92ZWQgc2VudGVuY2VcbiAgICAgIGlmIChpID09PSBkb2N1bWVudC5sZW5ndGggJiYgZG9jdW1lbnRbaSAtIDFdKSB7XG4gICAgICAgIGxldCB0ZXJtcyA9IGRvY3VtZW50W2kgLSAxXVxuICAgICAgICBsZXQgbGFzdFRlcm0gPSB0ZXJtc1t0ZXJtcy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAobGFzdFRlcm0pIHtcbiAgICAgICAgICBsYXN0VGVybS5wb3N0ID0gbGFzdFRlcm0ucG9zdC50cmltRW5kKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gcmVwYWlyIGFueSBkb3duc3RyZWFtIGluZGV4ZXNcbiAgICAgIC8vIGZvciAobGV0IGsgPSBpOyBrIDwgZG9jdW1lbnQubGVuZ3RoOyBrICs9IDEpIHtcbiAgICAgIC8vICAgZG9jdW1lbnRba10uZm9yRWFjaCh0ZXJtID0+IHRlcm0uaW5kZXhbMF0gLT0gMSlcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBsdWNrT3V0IiwgImltcG9ydCBwbHVja091dFRlcm0gZnJvbSAnLi9saWIvcmVtb3ZlLmpzJ1xuXG5jb25zdCBmaXhQb2ludGVycyA9IGZ1bmN0aW9uIChwdHJzLCBnb25lUHRycykge1xuICBwdHJzID0gcHRycy5tYXAocHRyID0+IHtcbiAgICBsZXQgW25dID0gcHRyXG4gICAgaWYgKCFnb25lUHRyc1tuXSkge1xuICAgICAgcmV0dXJuIHB0clxuICAgIH1cbiAgICBnb25lUHRyc1tuXS5mb3JFYWNoKG5vID0+IHtcbiAgICAgIGxldCBsZW4gPSBub1syXSAtIG5vWzFdXG4gICAgICAvLyBkb2VzIGl0IGVmZmVjdCBvdXIgcG9pbnRlcj9cbiAgICAgIGlmIChwdHJbMV0gPD0gbm9bMV0gJiYgcHRyWzJdID49IG5vWzJdKSB7XG4gICAgICAgIHB0clsyXSAtPSBsZW5cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBwdHJcbiAgfSlcblxuICAvLyBkZWNyZW1lbnQgYW55IHBvaW50ZXJzIGFmdGVyIGEgbm93LWVtcHR5IHBvaW50ZXJcbiAgcHRycy5mb3JFYWNoKChwdHIsIGkpID0+IHtcbiAgICAvLyBpcyB0aGUgcG9pbnRlciBub3cgZW1wdHk/XG4gICAgaWYgKHB0clsxXSA9PT0gMCAmJiBwdHJbMl0gPT0gMCkge1xuICAgICAgLy8gZ28gZG93biBzdWJzZXF1ZW50IHBvaW50ZXJzXG4gICAgICBmb3IgKGxldCBuID0gaSArIDE7IG4gPCBwdHJzLmxlbmd0aDsgbiArPSAxKSB7XG4gICAgICAgIHB0cnNbbl1bMF0gLT0gMVxuICAgICAgICBpZiAocHRyc1tuXVswXSA8IDApIHtcbiAgICAgICAgICBwdHJzW25dWzBdID0gMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KVxuICAvLyByZW1vdmUgYW55IG5vdy1lbXB0eSBwb2ludGVyc1xuICBwdHJzID0gcHRycy5maWx0ZXIocHRyID0+IHB0clsyXSAtIHB0clsxXSA+IDApXG5cbiAgLy8gcmVtb3ZlIG9sZCBoYXJkLXBvaW50ZXJzXG4gIHB0cnMgPSBwdHJzLm1hcCgocHRyKSA9PiB7XG4gICAgcHRyWzNdID0gbnVsbFxuICAgIHB0cls0XSA9IG51bGxcbiAgICByZXR1cm4gcHRyXG4gIH0pXG4gIHJldHVybiBwdHJzXG59XG5cbmNvbnN0IG1ldGhvZHMgPSB7XG4gIC8qKiAqL1xuICByZW1vdmU6IGZ1bmN0aW9uIChyZWcpIHtcbiAgICBjb25zdCB7IGluZGV4TiB9ID0gdGhpcy5tZXRob2RzLm9uZS5wb2ludGVyXG4gICAgdGhpcy51bmNhY2hlKClcbiAgICAvLyB0d28gbW9kZXM6XG4gICAgLy8gIC0gYS4gcmVtb3ZlIHNlbGYsIGZyb20gZnVsbCBwYXJlbnRcbiAgICBsZXQgc2VsZiA9IHRoaXMuYWxsKClcbiAgICBsZXQgbm90ID0gdGhpc1xuICAgIC8vICAtIGIuIHJlbW92ZSBhIG1hdGNoLCBmcm9tIHNlbGZcbiAgICBpZiAocmVnKSB7XG4gICAgICBzZWxmID0gdGhpc1xuICAgICAgbm90ID0gdGhpcy5tYXRjaChyZWcpXG4gICAgfVxuICAgIGxldCBpc0Z1bGwgPSAhc2VsZi5wdHJzXG4gICAgLy8gaXMgaXQgcGFydCBvZiBhIGNvbnRyYWN0aW9uP1xuICAgIGlmIChub3QuaGFzKCdAaGFzQ29udHJhY3Rpb24nKSAmJiBub3QuY29udHJhY3Rpb25zKSB7XG4gICAgICBsZXQgbW9yZSA9IG5vdC5ncm93KCdAaGFzQ29udHJhY3Rpb24nKVxuICAgICAgbW9yZS5jb250cmFjdGlvbnMoKS5leHBhbmQoKVxuICAgIH1cblxuICAgIGxldCBwdHJzID0gc2VsZi5mdWxsUG9pbnRlclxuICAgIGxldCBub3RzID0gbm90LmZ1bGxQb2ludGVyLnJldmVyc2UoKVxuICAgIC8vIHJlbW92ZSB0aGVtIGZyb20gdGhlIGFjdHVhbCBkb2N1bWVudClcbiAgICBsZXQgZG9jdW1lbnQgPSBwbHVja091dFRlcm0odGhpcy5kb2N1bWVudCwgbm90cylcbiAgICAvLyByZXBhaXIgb3VyIHBvaW50ZXJzXG4gICAgbGV0IGdvbmVQdHJzID0gaW5kZXhOKG5vdHMpXG4gICAgcHRycyA9IGZpeFBvaW50ZXJzKHB0cnMsIGdvbmVQdHJzKVxuICAgIC8vIGNsZWFuIHVwIG91ciBvcmlnaW5hbCBpbnB1dHNcbiAgICBzZWxmLnB0cnMgPSBwdHJzXG4gICAgc2VsZi5kb2N1bWVudCA9IGRvY3VtZW50XG4gICAgc2VsZi5jb21wdXRlKCdpbmRleCcpXG4gICAgLy8gaWYgd2Ugc3RhcnRlZCB6b29tZWQtb3V0LCB0cnkgdG8gZW5kIHpvb21lZC1vdXRcbiAgICBpZiAoaXNGdWxsKSB7XG4gICAgICBzZWxmLnB0cnMgPSB1bmRlZmluZWRcbiAgICB9XG4gICAgaWYgKCFyZWcpIHtcbiAgICAgIHRoaXMucHRycyA9IFtdXG4gICAgICByZXR1cm4gc2VsZi5ub25lKClcbiAgICB9XG4gICAgbGV0IHJlcyA9IHNlbGYudG9WaWV3KHB0cnMpIC8vcmV0dXJuIG5ldyBkb2N1bWVudFxuICAgIHJldHVybiByZXNcbiAgfSxcbn1cblxuLy8gYWxpYXNlc1xubWV0aG9kcy5kZWxldGUgPSBtZXRob2RzLnJlbW92ZVxuZXhwb3J0IGRlZmF1bHQgbWV0aG9kc1xuIiwgImNvbnN0IG1ldGhvZHMgPSB7XG4gIC8qKiBhZGQgdGhpcyBwdW5jdHVhdGlvbiBvciB3aGl0ZXNwYWNlIGJlZm9yZSBlYWNoIG1hdGNoOiAqL1xuICBwcmU6IGZ1bmN0aW9uIChzdHIsIGNvbmNhdCkge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmZvdW5kKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb2NzWzBdWzBdLnByZVxuICAgIH1cbiAgICB0aGlzLmRvY3MuZm9yRWFjaCh0ZXJtcyA9PiB7XG4gICAgICBsZXQgdGVybSA9IHRlcm1zWzBdXG4gICAgICBpZiAoY29uY2F0ID09PSB0cnVlKSB7XG4gICAgICAgIHRlcm0ucHJlICs9IHN0clxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVybS5wcmUgPSBzdHJcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0aGlzXG4gIH0sXG5cbiAgLyoqIGFkZCB0aGlzIHB1bmN0dWF0aW9uIG9yIHdoaXRlc3BhY2UgYWZ0ZXIgZWFjaCBtYXRjaDogKi9cbiAgcG9zdDogZnVuY3Rpb24gKHN0ciwgY29uY2F0KSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbGFzdCA9IHRoaXMuZG9jc1t0aGlzLmRvY3MubGVuZ3RoIC0gMV1cbiAgICAgIHJldHVybiBsYXN0W2xhc3QubGVuZ3RoIC0gMV0ucG9zdFxuICAgIH1cbiAgICB0aGlzLmRvY3MuZm9yRWFjaCh0ZXJtcyA9PiB7XG4gICAgICBsZXQgdGVybSA9IHRlcm1zW3Rlcm1zLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoY29uY2F0ID09PSB0cnVlKSB7XG4gICAgICAgIHRlcm0ucG9zdCArPSBzdHJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm0ucG9zdCA9IHN0clxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXNcbiAgfSxcblxuICAvKiogcmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSBzdGFydC9lbmQgKi9cbiAgdHJpbTogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5mb3VuZCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgbGV0IGRvY3MgPSB0aGlzLmRvY3NcbiAgICBsZXQgc3RhcnQgPSBkb2NzWzBdWzBdXG4gICAgc3RhcnQucHJlID0gc3RhcnQucHJlLnRyaW1TdGFydCgpXG4gICAgbGV0IGxhc3QgPSBkb2NzW2RvY3MubGVuZ3RoIC0gMV1cbiAgICBsZXQgZW5kID0gbGFzdFtsYXN0Lmxlbmd0aCAtIDFdXG4gICAgZW5kLnBvc3QgPSBlbmQucG9zdC50cmltRW5kKClcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuXG4gIC8qKiBjb25uZWN0IHdvcmRzIHdpdGggaHlwaGVuLCBhbmQgcmVtb3ZlIHdoaXRlc3BhY2UgKi9cbiAgaHlwaGVuYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5kb2NzLmZvckVhY2godGVybXMgPT4ge1xuICAgICAgLy9yZW1vdmUgd2hpdGVzcGFjZVxuICAgICAgdGVybXMuZm9yRWFjaCgodCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICAgIHQucHJlID0gJydcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVybXNbaSArIDFdKSB7XG4gICAgICAgICAgdC5wb3N0ID0gJy0nXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuXG4gIC8qKiByZW1vdmUgaHlwaGVucyBiZXR3ZWVuIHdvcmRzLCBhbmQgc2V0IHdoaXRlc3BhY2UgKi9cbiAgZGVoeXBoZW5hdGU6IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBoYXNIeXBoZW4gPSAvWy1cdTIwMTNcdTIwMTRdL1xuICAgIHRoaXMuZG9jcy5mb3JFYWNoKHRlcm1zID0+IHtcbiAgICAgIC8vcmVtb3ZlIHdoaXRlc3BhY2VcbiAgICAgIHRlcm1zLmZvckVhY2godCA9PiB7XG4gICAgICAgIGlmIChoYXNIeXBoZW4udGVzdCh0LnBvc3QpKSB7XG4gICAgICAgICAgdC5wb3N0ID0gJyAnXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuXG4gIC8qKiBhZGQgcXVvdGF0aW9ucyBhcm91bmQgdGhlc2UgbWF0Y2hlcyAqL1xuICB0b1F1b3RhdGlvbnM6IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG4gICAgc3RhcnQgPSBzdGFydCB8fCBgXCJgXG4gICAgZW5kID0gZW5kIHx8IGBcImBcbiAgICB0aGlzLmRvY3MuZm9yRWFjaCh0ZXJtcyA9PiB7XG4gICAgICB0ZXJtc1swXS5wcmUgPSBzdGFydCArIHRlcm1zWzBdLnByZVxuICAgICAgbGV0IGxhc3QgPSB0ZXJtc1t0ZXJtcy5sZW5ndGggLSAxXVxuICAgICAgbGFzdC5wb3N0ID0gZW5kICsgbGFzdC5wb3N0XG4gICAgfSlcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuXG4gIC8qKiBhZGQgYnJhY2tldHMgYXJvdW5kIHRoZXNlIG1hdGNoZXMgKi9cbiAgdG9QYXJlbnRoZXNlczogZnVuY3Rpb24gKHN0YXJ0LCBlbmQpIHtcbiAgICBzdGFydCA9IHN0YXJ0IHx8IGAoYFxuICAgIGVuZCA9IGVuZCB8fCBgKWBcbiAgICB0aGlzLmRvY3MuZm9yRWFjaCh0ZXJtcyA9PiB7XG4gICAgICB0ZXJtc1swXS5wcmUgPSBzdGFydCArIHRlcm1zWzBdLnByZVxuICAgICAgbGV0IGxhc3QgPSB0ZXJtc1t0ZXJtcy5sZW5ndGggLSAxXVxuICAgICAgbGFzdC5wb3N0ID0gZW5kICsgbGFzdC5wb3N0XG4gICAgfSlcbiAgICByZXR1cm4gdGhpc1xuICB9LFxufVxuXG4vLyBhbGlhc2VzXG5tZXRob2RzLmRlSHlwaGVuYXRlID0gbWV0aG9kcy5kZWh5cGhlbmF0ZVxubWV0aG9kcy50b1F1b3RhdGlvbiA9IG1ldGhvZHMudG9RdW90YXRpb25zXG5cbmV4cG9ydCBkZWZhdWx0IG1ldGhvZHNcbiIsICIvKiogYWxwaGFiZXRpY2FsIG9yZGVyICovXG5jb25zdCBhbHBoYSA9IChhLCBiKSA9PiB7XG4gIGlmIChhLm5vcm1hbCA8IGIubm9ybWFsKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKGEubm9ybWFsID4gYi5ub3JtYWwpIHtcbiAgICByZXR1cm4gMVxuICB9XG4gIHJldHVybiAwXG59XG5cbi8qKiBjb3VudCB0aGUgIyBvZiBjaGFyYWN0ZXJzIG9mIGVhY2ggbWF0Y2ggKi9cbmNvbnN0IGxlbmd0aCA9IChhLCBiKSA9PiB7XG4gIGxldCBsZWZ0ID0gYS5ub3JtYWwudHJpbSgpLmxlbmd0aFxuICBsZXQgcmlnaHQgPSBiLm5vcm1hbC50cmltKCkubGVuZ3RoXG4gIGlmIChsZWZ0IDwgcmlnaHQpIHtcbiAgICByZXR1cm4gMVxuICB9XG4gIGlmIChsZWZ0ID4gcmlnaHQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vKiogY291bnQgdGhlICMgb2YgdGVybXMgaW4gZWFjaCBtYXRjaCAqL1xuY29uc3Qgd29yZENvdW50ID0gKGEsIGIpID0+IHtcbiAgaWYgKGEud29yZHMgPCBiLndvcmRzKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICBpZiAoYS53b3JkcyA+IGIud29yZHMpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vKiogY291bnQgdGhlICMgb2YgdGVybXMgaW4gZWFjaCBtYXRjaCAqL1xuY29uc3Qgc2VxdWVudGlhbCA9IChhLCBiKSA9PiB7XG4gIGlmIChhWzBdIDwgYlswXSkge1xuICAgIHJldHVybiAxXG4gIH1cbiAgaWYgKGFbMF0gPiBiWzBdKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgcmV0dXJuIGFbMV0gPiBiWzFdID8gMSA6IC0xXG59XG5cbi8qKiBzb3J0IGJ5ICMgb2YgZHVwbGljYXRlcyBpbiB0aGUgZG9jdW1lbnQqL1xuY29uc3QgYnlGcmVxID0gZnVuY3Rpb24gKGFycikge1xuICBsZXQgY291bnRzID0ge31cbiAgYXJyLmZvckVhY2gobyA9PiB7XG4gICAgY291bnRzW28ubm9ybWFsXSA9IGNvdW50c1tvLm5vcm1hbF0gfHwgMFxuICAgIGNvdW50c1tvLm5vcm1hbF0gKz0gMVxuICB9KVxuICAvLyBzb3J0IGJ5IGZyZXFcbiAgYXJyLnNvcnQoKGEsIGIpID0+IHtcbiAgICBsZXQgbGVmdCA9IGNvdW50c1thLm5vcm1hbF1cbiAgICBsZXQgcmlnaHQgPSBjb3VudHNbYi5ub3JtYWxdXG4gICAgaWYgKGxlZnQgPCByaWdodCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgaWYgKGxlZnQgPiByaWdodCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiAwXG4gIH0pXG4gIHJldHVybiBhcnJcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBhbHBoYSwgbGVuZ3RoLCB3b3JkQ291bnQsIHNlcXVlbnRpYWwsIGJ5RnJlcSB9XG4iLCAiaW1wb3J0IG1ldGhvZHMgZnJvbSAnLi9saWIvX3NvcnQuanMnXG4vLyBhbGlhc2VzXG5jb25zdCBzZXFOYW1lcyA9IG5ldyBTZXQoWydpbmRleCcsICdzZXF1ZW5jZScsICdzZXEnLCAnc2VxdWVudGlhbCcsICdjaHJvbicsICdjaHJvbm9sb2dpY2FsJ10pXG5jb25zdCBmcmVxTmFtZXMgPSBuZXcgU2V0KFsnZnJlcScsICdmcmVxdWVuY3knLCAndG9waycsICdyZXBlYXRzJ10pXG5jb25zdCBhbHBoYU5hbWVzID0gbmV3IFNldChbJ2FscGhhJywgJ2FscGhhYmV0aWNhbCddKVxuXG4vLyBzdXBwb3J0IGZ1bmN0aW9uIGFzIHBhcmFtZXRlclxuY29uc3QgY3VzdG9tU29ydCA9IGZ1bmN0aW9uICh2aWV3LCBmbikge1xuICBsZXQgcHRycyA9IHZpZXcuZnVsbFBvaW50ZXJcbiAgcHRycyA9IHB0cnMuc29ydCgoYSwgYikgPT4ge1xuICAgIGEgPSB2aWV3LnVwZGF0ZShbYV0pXG4gICAgYiA9IHZpZXcudXBkYXRlKFtiXSlcbiAgICByZXR1cm4gZm4oYSwgYilcbiAgfSlcbiAgdmlldy5wdHJzID0gcHRycyAvL211dGF0ZSBvcmlnaW5hbFxuICByZXR1cm4gdmlld1xufVxuXG4vKiogcmUtYXJyYW5nZSB0aGUgb3JkZXIgb2YgdGhlIG1hdGNoZXMgKGluIHBsYWNlKSAqL1xuY29uc3Qgc29ydCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICBsZXQgeyBkb2NzLCBwb2ludGVyIH0gPSB0aGlzXG4gIHRoaXMudW5jYWNoZSgpXG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY3VzdG9tU29ydCh0aGlzLCBpbnB1dClcbiAgfVxuICBpbnB1dCA9IGlucHV0IHx8ICdhbHBoYSdcbiAgbGV0IHB0cnMgPSBwb2ludGVyIHx8IGRvY3MubWFwKChfZCwgbikgPT4gW25dKVxuICBsZXQgYXJyID0gZG9jcy5tYXAoKHRlcm1zLCBuKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiBuLFxuICAgICAgd29yZHM6IHRlcm1zLmxlbmd0aCxcbiAgICAgIG5vcm1hbDogdGVybXMubWFwKHQgPT4gdC5tYWNoaW5lIHx8IHQubm9ybWFsIHx8ICcnKS5qb2luKCcgJyksXG4gICAgICBwb2ludGVyOiBwdHJzW25dLFxuICAgIH1cbiAgfSlcbiAgLy8gJ2Nocm9ub2xvZ2ljYWwnIHNvcnRpbmdcbiAgaWYgKHNlcU5hbWVzLmhhcyhpbnB1dCkpIHtcbiAgICBpbnB1dCA9ICdzZXF1ZW50aWFsJ1xuICB9XG4gIC8vIGFscGhhYmV0aWNhbCBzb3J0aW5nXG4gIGlmIChhbHBoYU5hbWVzLmhhcyhpbnB1dCkpIHtcbiAgICBpbnB1dCA9ICdhbHBoYSdcbiAgfVxuICAvLyBzb3J0IGJ5IGZyZXF1ZW5jeVxuICBpZiAoZnJlcU5hbWVzLmhhcyhpbnB1dCkpIHtcbiAgICBhcnIgPSBtZXRob2RzLmJ5RnJlcShhcnIpXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlKGFyci5tYXAobyA9PiBvLnBvaW50ZXIpKVxuICB9XG4gIC8vIGFwcGx5IHNvcnQgbWV0aG9kIG9uIGVhY2ggcGhyYXNlXG4gIGlmICh0eXBlb2YgbWV0aG9kc1tpbnB1dF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcnIgPSBhcnIuc29ydChtZXRob2RzW2lucHV0XSlcbiAgICByZXR1cm4gdGhpcy51cGRhdGUoYXJyLm1hcChvID0+IG8ucG9pbnRlcikpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuLyoqIHJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSBtYXRjaGVzLCBidXQgbm90IHRoZSB3b3JkcyBvciBpbmRleCAqL1xuY29uc3QgcmV2ZXJzZSA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IHB0cnMgPSB0aGlzLnBvaW50ZXIgfHwgdGhpcy5kb2NzLm1hcCgoX2QsIG4pID0+IFtuXSlcbiAgcHRycyA9IFtdLmNvbmNhdChwdHJzKVxuICBwdHJzID0gcHRycy5yZXZlcnNlKClcbiAgaWYgKHRoaXMuX2NhY2hlKSB7XG4gICAgdGhpcy5fY2FjaGUgPSB0aGlzLl9jYWNoZS5yZXZlcnNlKClcbiAgfVxuICByZXR1cm4gdGhpcy51cGRhdGUocHRycylcbn1cblxuLyoqIHJlbW92ZSBhbnkgZHVwbGljYXRlIG1hdGNoZXMgKi9cbmNvbnN0IHVuaXF1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IGFscmVhZHkgPSBuZXcgU2V0KClcbiAgbGV0IHJlcyA9IHRoaXMuZmlsdGVyKG0gPT4ge1xuICAgIGxldCB0eHQgPSBtLnRleHQoJ21hY2hpbmUnKVxuICAgIGlmIChhbHJlYWR5Lmhhcyh0eHQpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgYWxyZWFkeS5hZGQodHh0KVxuICAgIHJldHVybiB0cnVlXG4gIH0pXG4gIC8vIHRoaXMucHRycyA9IHJlcy5wdHJzIC8vbXV0YXRlIG9yaWdpbmFsP1xuICByZXR1cm4gcmVzLy8uY29tcHV0ZSgnaW5kZXgnKVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IHVuaXF1ZSwgcmV2ZXJzZSwgc29ydCB9XG4iLCAiY29uc3QgaXNBcnJheSA9IChhcnIpID0+IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09PSAnW29iamVjdCBBcnJheV0nXG5cbi8vIGFwcGVuZCBhIG5ldyBkb2N1bWVudCwgc29tZWhvd1xuY29uc3QgY29tYmluZURvY3MgPSBmdW5jdGlvbiAoaG9tZURvY3MsIGlucHV0RG9jcykge1xuICBpZiAoaG9tZURvY3MubGVuZ3RoID4gMCkge1xuICAgIC8vIGFkZCBhIHNwYWNlXG4gICAgbGV0IGVuZCA9IGhvbWVEb2NzW2hvbWVEb2NzLmxlbmd0aCAtIDFdXG4gICAgbGV0IGxhc3QgPSBlbmRbZW5kLmxlbmd0aCAtIDFdXG4gICAgaWYgKC8gLy50ZXN0KGxhc3QucG9zdCkgPT09IGZhbHNlKSB7XG4gICAgICBsYXN0LnBvc3QgKz0gJyAnXG4gICAgfVxuICB9XG4gIGhvbWVEb2NzID0gaG9tZURvY3MuY29uY2F0KGlucHV0RG9jcylcbiAgcmV0dXJuIGhvbWVEb2NzXG59XG5cbmNvbnN0IGNvbWJpbmVWaWV3cyA9IGZ1bmN0aW9uIChob21lLCBpbnB1dCkge1xuICAvLyBpcyBpdCBhIHZpZXcgZnJvbSB0aGUgc2FtZSBkb2N1bWVudD9cbiAgaWYgKGhvbWUuZG9jdW1lbnQgPT09IGlucHV0LmRvY3VtZW50KSB7XG4gICAgbGV0IHB0cnMgPSBob21lLmZ1bGxQb2ludGVyLmNvbmNhdChpbnB1dC5mdWxsUG9pbnRlcilcbiAgICByZXR1cm4gaG9tZS50b1ZpZXcocHRycykuY29tcHV0ZSgnaW5kZXgnKVxuICB9XG4gIC8vIHVwZGF0ZSBuIG9mIG5ldyBwb2ludGVyLCB0byBlbmQgb2Ygb3VyIHBvaW50ZXJcbiAgbGV0IHB0cnMgPSBpbnB1dC5mdWxsUG9pbnRlclxuICBwdHJzLmZvckVhY2goYSA9PiB7XG4gICAgYVswXSArPSBob21lLmRvY3VtZW50Lmxlbmd0aFxuICB9KVxuICBob21lLmRvY3VtZW50ID0gY29tYmluZURvY3MoaG9tZS5kb2N1bWVudCwgaW5wdXQuZG9jcylcbiAgcmV0dXJuIGhvbWUuYWxsKClcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAvLyBhZGQgc3RyaW5nIGFzIG5ldyBtYXRjaC9zZW50ZW5jZVxuICBjb25jYXQ6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIC8vIHBhcnNlIGFuZCBzcGxpY2UtaW4gbmV3IHRlcm1zXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBtb3JlID0gdGhpcy5mcm9tVGV4dChpbnB1dClcbiAgICAgIC8vIGVhc3kgY29uY2F0XG4gICAgICBpZiAoIXRoaXMuZm91bmQgfHwgIXRoaXMucHRycykge1xuICAgICAgICB0aGlzLmRvY3VtZW50ID0gdGhpcy5kb2N1bWVudC5jb25jYXQobW9yZS5kb2N1bWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlLCB0aGlzIGlzIGFjdHVhbGx5IGEgc3BsaWNlIG9wZXJhdGlvblxuICAgICAgICBsZXQgcHRycyA9IHRoaXMuZnVsbFBvaW50ZXJcbiAgICAgICAgbGV0IGF0ID0gcHRyc1twdHJzLmxlbmd0aCAtIDFdWzBdXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuc3BsaWNlKGF0LCAwLCAuLi5tb3JlLmRvY3VtZW50KVxuICAgICAgfVxuICAgICAgLy8gcHV0IHRoZSBkb2NzXG4gICAgICByZXR1cm4gdGhpcy5hbGwoKS5jb21wdXRlKCdpbmRleCcpXG4gICAgfVxuICAgIC8vIHBsb3Agc29tZSB2aWV3IG9iamVjdHMgdG9nZXRoZXJcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dC5pc1ZpZXcpIHtcbiAgICAgIHJldHVybiBjb21iaW5lVmlld3ModGhpcywgaW5wdXQpXG4gICAgfVxuICAgIC8vIGFzc3VtZSBpdCdzIGFuIGFycmF5IG9mIHRlcm1zXG4gICAgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICBsZXQgZG9jcyA9IGNvbWJpbmVEb2NzKHRoaXMuZG9jdW1lbnQsIGlucHV0KVxuICAgICAgdGhpcy5kb2N1bWVudCA9IGRvY3NcbiAgICAgIHJldHVybiB0aGlzLmFsbCgpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH0sXG59IiwgIi8vIGFkZCBpbmRleGVzIHRvIHBvaW50ZXJzXG5jb25zdCBoYXJkZW4gPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucHRycyA9IHRoaXMuZnVsbFBvaW50ZXJcbiAgcmV0dXJuIHRoaXNcbn1cbi8vIHJlbW92ZSBpbmRleGVzIGZyb20gcG9pbnRlcnNcbmNvbnN0IHNvZnRlbiA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IHB0ciA9IHRoaXMucHRyc1xuICBpZiAoIXB0ciB8fCBwdHIubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgcHRyID0gcHRyLm1hcChhID0+IGEuc2xpY2UoMCwgMykpXG4gIHRoaXMucHRycyA9IHB0clxuICByZXR1cm4gdGhpc1xufVxuZXhwb3J0IGRlZmF1bHQgeyBoYXJkZW4sIHNvZnRlbiB9IiwgImltcG9ydCBjYXNlRm5zIGZyb20gJy4vY2FzZS5qcydcbmltcG9ydCBpbnNlcnQgZnJvbSAnLi9pbnNlcnQuanMnXG5pbXBvcnQgcmVwbGFjZSBmcm9tICcuL3JlcGxhY2UuanMnXG5pbXBvcnQgcmVtb3ZlIGZyb20gJy4vcmVtb3ZlLmpzJ1xuaW1wb3J0IHdoaXRlc3BhY2UgZnJvbSAnLi93aGl0ZXNwYWNlLmpzJ1xuaW1wb3J0IHNvcnQgZnJvbSAnLi9zb3J0LmpzJ1xuaW1wb3J0IGNvbmNhdCBmcm9tICcuL2NvbmNhdC5qcydcbmltcG9ydCBoYXJkZW4gZnJvbSAnLi9oYXJkZW4uanMnXG5cbmNvbnN0IG1ldGhvZHMgPSBPYmplY3QuYXNzaWduKHt9LCBjYXNlRm5zLCBpbnNlcnQsIHJlcGxhY2UsIHJlbW92ZSwgd2hpdGVzcGFjZSwgc29ydCwgY29uY2F0LCBoYXJkZW4pXG5cbmNvbnN0IGFkZEFQSSA9IGZ1bmN0aW9uIChWaWV3KSB7XG4gIE9iamVjdC5hc3NpZ24oVmlldy5wcm90b3R5cGUsIG1ldGhvZHMpXG59XG5leHBvcnQgZGVmYXVsdCBhZGRBUElcbiIsICJpbXBvcnQgdXVpZCBmcm9tICcuL3V1aWQuanMnXG5cbmNvbnN0IGNvbXB1dGUgPSB7XG4gIGlkOiBmdW5jdGlvbiAodmlldykge1xuICAgIGxldCBkb2NzID0gdmlldy5kb2NzXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBkb2NzLmxlbmd0aDsgbiArPSAxKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3Nbbl0ubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgbGV0IHRlcm0gPSBkb2NzW25dW2ldXG4gICAgICAgIHRlcm0uaWQgPSB0ZXJtLmlkIHx8IHV1aWQodGVybSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcHV0ZSIsICJpbXBvcnQgYXBpIGZyb20gJy4vYXBpL2luZGV4LmpzJ1xuaW1wb3J0IGNvbXB1dGUgZnJvbSAnLi9jb21wdXRlL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFwaSxcbiAgY29tcHV0ZSxcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBbXG4gIC8vIHNpbXBsZSBtYXBwaW5nc1xuICB7IHdvcmQ6ICdAJywgb3V0OiBbJ2F0J10gfSxcbiAgeyB3b3JkOiAnYXJlbnQnLCBvdXQ6IFsnYXJlJywgJ25vdCddIH0sXG4gIHsgd29yZDogJ2Fsb3QnLCBvdXQ6IFsnYScsICdsb3QnXSB9LFxuICB7IHdvcmQ6ICdicmInLCBvdXQ6IFsnYmUnLCAncmlnaHQnLCAnYmFjayddIH0sXG4gIHsgd29yZDogJ2Nhbm5vdCcsIG91dDogWydjYW4nLCAnbm90J10gfSxcbiAgeyB3b3JkOiAnZHVuJywgb3V0OiBbJ2RvJywgJ25vdCddIH0sXG4gIHsgd29yZDogXCJjYW4ndFwiLCBvdXQ6IFsnY2FuJywgJ25vdCddIH0sXG4gIHsgd29yZDogXCJzaGFuJ3RcIiwgb3V0OiBbJ3Nob3VsZCcsICdub3QnXSB9LFxuICB7IHdvcmQ6IFwid29uJ3RcIiwgb3V0OiBbJ3dpbGwnLCAnbm90J10gfSxcbiAgeyB3b3JkOiBcInRoYXQnc1wiLCBvdXQ6IFsndGhhdCcsICdpcyddIH0sXG4gIHsgd29yZDogXCJ3aGF0J3NcIiwgb3V0OiBbJ3doYXQnLCAnaXMnXSB9LFxuICB7IHdvcmQ6IFwibGV0J3NcIiwgb3V0OiBbJ2xldCcsICd1cyddIH0sXG4gIC8vIHsgd29yZDogXCJ0aGVyZSdzXCIsIG91dDogWyd0aGVyZScsICdpcyddIH0sXG4gIHsgd29yZDogJ2R1bm5vJywgb3V0OiBbJ2RvJywgJ25vdCcsICdrbm93J10gfSxcbiAgeyB3b3JkOiAnZ29ubmEnLCBvdXQ6IFsnZ29pbmcnLCAndG8nXSB9LFxuICB7IHdvcmQ6ICdnb3R0YScsIG91dDogWydoYXZlJywgJ2dvdCcsICd0byddIH0sIC8vaG1tXG4gIHsgd29yZDogJ2dpbW1lJywgb3V0OiBbJ2dpdmUnLCAnbWUnXSB9LFxuICB7IHdvcmQ6ICdvdXR0YScsIG91dDogWydvdXQnLCAnb2YnXSB9LFxuICB7IHdvcmQ6ICd0cnluYScsIG91dDogWyd0cnlpbmcnLCAndG8nXSB9LFxuICB7IHdvcmQ6ICdndGcnLCBvdXQ6IFsnZ290JywgJ3RvJywgJ2dvJ10gfSxcbiAgeyB3b3JkOiAnaW0nLCBvdXQ6IFsnaScsICdhbSddIH0sXG4gIHsgd29yZDogJ2ltbWEnLCBvdXQ6IFsnSScsICd3aWxsJ10gfSxcbiAgeyB3b3JkOiAnaW1vJywgb3V0OiBbJ2luJywgJ215JywgJ29waW5pb24nXSB9LFxuICB7IHdvcmQ6ICdpcmwnLCBvdXQ6IFsnaW4nLCAncmVhbCcsICdsaWZlJ10gfSxcbiAgeyB3b3JkOiAnaXZlJywgb3V0OiBbJ2knLCAnaGF2ZSddIH0sXG4gIHsgd29yZDogJ3JuJywgb3V0OiBbJ3JpZ2h0JywgJ25vdyddIH0sXG4gIHsgd29yZDogJ3RiaCcsIG91dDogWyd0bycsICdiZScsICdob25lc3QnXSB9LFxuICB7IHdvcmQ6ICd3YW5uYScsIG91dDogWyd3YW50JywgJ3RvJ10gfSxcbiAgeyB3b3JkOiBgYydtZXJlYCwgb3V0OiBbJ2NvbWUnLCAnaGVyZSddIH0sXG4gIHsgd29yZDogYGMnbW9uYCwgb3V0OiBbJ2NvbWUnLCAnb24nXSB9LFxuICAvLyBzaG91bGRhLCBjb3VsZGFcbiAgeyB3b3JkOiAnc2hvdWxkYScsIG91dDogWydzaG91bGQnLCAnaGF2ZSddIH0sXG4gIHsgd29yZDogJ2NvdWxkYScsIG91dDogWydjb3VsZGEnLCAnaGF2ZSddIH0sXG4gIHsgd29yZDogJ3dvdWxkYScsIG91dDogWyd3b3VsZGEnLCAnaGF2ZSddIH0sXG4gIHsgd29yZDogJ211c3RhJywgb3V0OiBbJ211c3QnLCAnaGF2ZSddIH0sXG5cbiAgeyB3b3JkOiBcInRpc1wiLCBvdXQ6IFsnaXQnLCAnaXMnXSB9LFxuICB7IHdvcmQ6IFwidHdhc1wiLCBvdXQ6IFsnaXQnLCAnd2FzJ10gfSxcbiAgeyB3b3JkOiBgeSdrbm93YCwgb3V0OiBbJ3lvdScsICdrbm93J10gfSxcbiAgeyB3b3JkOiBcIm5lJ2VyXCIsIG91dDogWyduZXZlciddIH0sXG4gIHsgd29yZDogXCJvJ2VyXCIsIG91dDogWydvdmVyJ10gfSxcbiAgLy8gY29udHJhY3Rpb24tcGFydCBtYXBwaW5nc1xuICB7IGFmdGVyOiAnbGwnLCBvdXQ6IFsnd2lsbCddIH0sXG4gIHsgYWZ0ZXI6ICd2ZScsIG91dDogWydoYXZlJ10gfSxcbiAgeyBhZnRlcjogJ3JlJywgb3V0OiBbJ2FyZSddIH0sXG4gIHsgYWZ0ZXI6ICdtJywgb3V0OiBbJ2FtJ10gfSxcbiAgLy8gZnJlbmNoIGNvbnRyYWN0aW9uc1xuICB7IGJlZm9yZTogJ2MnLCBvdXQ6IFsnY2UnXSB9LFxuICB7IGJlZm9yZTogJ20nLCBvdXQ6IFsnbWUnXSB9LFxuICB7IGJlZm9yZTogJ24nLCBvdXQ6IFsnbmUnXSB9LFxuICB7IGJlZm9yZTogJ3F1Jywgb3V0OiBbJ3F1ZSddIH0sXG4gIHsgYmVmb3JlOiAncycsIG91dDogWydzZSddIH0sXG4gIHsgYmVmb3JlOiAndCcsIG91dDogWyd0dSddIH0sIC8vIHQnYWltZVxuXG4gIC8vIG1pc3NpbmcgYXBvc3Ryb3BoZXNcbiAgeyB3b3JkOiAnc2hvdWxkbnQnLCBvdXQ6IFsnc2hvdWxkJywgJ25vdCddIH0sXG4gIHsgd29yZDogJ2NvdWxkbnQnLCBvdXQ6IFsnY291bGQnLCAnbm90J10gfSxcbiAgeyB3b3JkOiAnd291bGRudCcsIG91dDogWyd3b3VsZCcsICdub3QnXSB9LFxuICB7IHdvcmQ6ICdoYXNudCcsIG91dDogWydoYXMnLCAnbm90J10gfSxcbiAgeyB3b3JkOiAnd2FzbnQnLCBvdXQ6IFsnd2FzJywgJ25vdCddIH0sXG4gIHsgd29yZDogJ2lzbnQnLCBvdXQ6IFsnaXMnLCAnbm90J10gfSxcbiAgeyB3b3JkOiAnY2FudCcsIG91dDogWydjYW4nLCAnbm90J10gfSxcbiAgeyB3b3JkOiAnZG9udCcsIG91dDogWydkbycsICdub3QnXSB9LFxuICB7IHdvcmQ6ICd3b250Jywgb3V0OiBbJ3dpbGwnLCAnbm90J10gfSxcbiAgLy8gYXBvc3Ryb3BoZSBkXG4gIHsgd29yZDogJ2hvd2QnLCBvdXQ6IFsnaG93JywgJ2RpZCddIH0sXG4gIHsgd29yZDogJ3doYXRkJywgb3V0OiBbJ3doYXQnLCAnZGlkJ10gfSxcbiAgeyB3b3JkOiAnd2hlbmQnLCBvdXQ6IFsnd2hlbicsICdkaWQnXSB9LFxuICB7IHdvcmQ6ICd3aGVyZWQnLCBvdXQ6IFsnd2hlcmUnLCAnZGlkJ10gfSxcbl1cbiIsICIvLyBudW1iZXIgc3VmZml4ZXMgdGhhdCBhcmUgbm90IHVuaXRzXG5jb25zdCB0ID0gdHJ1ZVxuZXhwb3J0IGRlZmF1bHQge1xuICAnc3QnOiB0LFxuICAnbmQnOiB0LFxuICAncmQnOiB0LFxuICAndGgnOiB0LFxuICAnYW0nOiB0LFxuICAncG0nOiB0LFxuICAnbWF4JzogdCxcbiAgJ1x1MDBCMCc6IHQsXG4gICdzJzogdCwgLy8gMTk5MHNcbiAgJ2UnOiB0LCAvLyAxOGUgLSBmcmVuY2gvc3BhbmlzaCBvcmRpbmFsXG4gICdlcic6IHQsIC8vZnJlbmNoIDFlclxuICAnXHUwMEU4cmUnOiB0LCAvLycnXG4gICdcdTAwRThtZSc6IHQsIC8vZnJlbmNoIDJcdTAwRThtZVxufSIsICJpbXBvcnQgY29udHJhY3Rpb25zIGZyb20gJy4vY29udHJhY3Rpb25zLmpzJ1xuaW1wb3J0IG51bWJlclN1ZmZpeGVzIGZyb20gJy4vbnVtYmVyLXN1ZmZpeC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBvbmU6IHtcbiAgICBjb250cmFjdGlvbnMsXG4gICAgbnVtYmVyU3VmZml4ZXNcbiAgfVxufVxuIiwgIi8vIHB1dCBuIG5ldyB3b3JkcyB3aGVyZSAxIHdvcmQgd2FzXG5jb25zdCBpbnNlcnRDb250cmFjdGlvbiA9IGZ1bmN0aW9uIChkb2N1bWVudCwgcG9pbnQsIHdvcmRzKSB7XG4gIGxldCBbbiwgd10gPSBwb2ludFxuICBpZiAoIXdvcmRzIHx8IHdvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVyblxuICB9XG4gIHdvcmRzID0gd29yZHMubWFwKCh3b3JkLCBpKSA9PiB7XG4gICAgd29yZC5pbXBsaWNpdCA9IHdvcmQudGV4dFxuICAgIHdvcmQubWFjaGluZSA9IHdvcmQudGV4dFxuICAgIHdvcmQucHJlID0gJydcbiAgICB3b3JkLnBvc3QgPSAnJ1xuICAgIHdvcmQudGV4dCA9ICcnXG4gICAgd29yZC5ub3JtYWwgPSAnJ1xuICAgIHdvcmQuaW5kZXggPSBbbiwgdyArIGldXG4gICAgcmV0dXJuIHdvcmRcbiAgfSlcbiAgaWYgKHdvcmRzWzBdKSB7XG4gICAgLy8gbW92ZSB3aGl0ZXNwYWNlIG92ZXJcbiAgICB3b3Jkc1swXS5wcmUgPSBkb2N1bWVudFtuXVt3XS5wcmVcbiAgICB3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxXS5wb3N0ID0gZG9jdW1lbnRbbl1bd10ucG9zdFxuICAgIC8vIGFkZCB0aGUgdGV4dC9ub3JtYWwgdG8gdGhlIGZpcnN0IHRlcm1cbiAgICB3b3Jkc1swXS50ZXh0ID0gZG9jdW1lbnRbbl1bd10udGV4dFxuICAgIHdvcmRzWzBdLm5vcm1hbCA9IGRvY3VtZW50W25dW3ddLm5vcm1hbCAvLyBtb3ZlIHRhZ3MgdG9vP1xuICB9XG4gIC8vIGRvIHRoZSBzcGxpY2VcbiAgZG9jdW1lbnRbbl0uc3BsaWNlKHcsIDEsIC4uLndvcmRzKVxufVxuZXhwb3J0IGRlZmF1bHQgaW5zZXJ0Q29udHJhY3Rpb25cbiIsICJjb25zdCBoYXNDb250cmFjdGlvbiA9IC8nL1xuLy9sb29rIGZvciBhIHBhc3QtdGVuc2UgdmVyYlxuLy8gY29uc3QgaGFzUGFzdFRlbnNlID0gKHRlcm1zLCBpKSA9PiB7XG4vLyAgIGxldCBhZnRlciA9IHRlcm1zLnNsaWNlKGkgKyAxLCBpICsgMylcbi8vICAgcmV0dXJuIGFmdGVyLnNvbWUodCA9PiB0LnRhZ3MuaGFzKCdQYXN0VGVuc2UnKSlcbi8vIH1cbi8vIGhlJ2Qgd2Fsa2VkIC0+IGhhZFxuLy8gaG93J2QgLT4gZGlkXG4vLyBoZSdkIGdvIC0+IHdvdWxkXG5cbmNvbnN0IGFsd2F5c0RpZCA9IG5ldyBTZXQoW1xuICAnd2hhdCcsXG4gICdob3cnLFxuICAnd2hlbicsXG4gICd3aGVyZScsXG4gICd3aHknLFxuXSlcblxuLy8gYWZ0ZXItd29yZHNcbmNvbnN0IHVzZVdvdWxkID0gbmV3IFNldChbXG4gICdiZScsXG4gICdnbycsXG4gICdzdGFydCcsXG4gICd0aGluaycsXG4gICduZWVkJyxcbl0pXG5cbmNvbnN0IHVzZUhhZCA9IG5ldyBTZXQoW1xuICAnYmVlbicsXG4gICdnb25lJ1xuXSlcbi8vIHRoZXknZCBnb25lXG4vLyB0aGV5J2QgZ29cblxuXG4vLyBoZSdkIGJlZW5cbi8vICAgIGhlIGhhZCBiZWVuXG4vLyAgICBoZSB3b3VsZCBiZWVuXG5cbmNvbnN0IF9hcG9zdHJvcGhlRCA9IGZ1bmN0aW9uICh0ZXJtcywgaSkge1xuICBsZXQgYmVmb3JlID0gdGVybXNbaV0ubm9ybWFsLnNwbGl0KGhhc0NvbnRyYWN0aW9uKVswXVxuXG4gIC8vIHdoYXQnZCwgaG93J2RcbiAgaWYgKGFsd2F5c0RpZC5oYXMoYmVmb3JlKSkge1xuICAgIHJldHVybiBbYmVmb3JlLCAnZGlkJ11cbiAgfVxuICBpZiAodGVybXNbaSArIDFdKSB7XG4gICAgLy8gdGhleSdkIGdvbmVcbiAgICBpZiAodXNlSGFkLmhhcyh0ZXJtc1tpICsgMV0ubm9ybWFsKSkge1xuICAgICAgcmV0dXJuIFtiZWZvcmUsICdoYWQnXVxuICAgIH1cbiAgICAvLyB0aGV5J2QgZ29cbiAgICBpZiAodXNlV291bGQuaGFzKHRlcm1zW2kgKyAxXS5ub3JtYWwpKSB7XG4gICAgICByZXR1cm4gW2JlZm9yZSwgJ3dvdWxkJ11cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbiAgLy8gICBpZiAoaGFzUGFzdFRlbnNlKHRlcm1zLCBpKSA9PT0gdHJ1ZSkge1xuICAvLyAgICAgcmV0dXJuIFtiZWZvcmUsICdoYWQnXVxuICAvLyAgIH1cbiAgLy8gICAvLyBoYWQvd291bGQvZGlkXG4gIC8vICAgcmV0dXJuIFtiZWZvcmUsICd3b3VsZCddXG59XG5leHBvcnQgZGVmYXVsdCBfYXBvc3Ryb3BoZURcbiIsICJcbi8vYWluJ3QgLT4gYXJlL2lzIG5vdFxuY29uc3QgYXBvc3Ryb3BoZVQgPSBmdW5jdGlvbiAodGVybXMsIGkpIHtcbiAgaWYgKHRlcm1zW2ldLm5vcm1hbCA9PT0gXCJhaW4ndFwiIHx8IHRlcm1zW2ldLm5vcm1hbCA9PT0gJ2FpbnQnKSB7XG4gICAgcmV0dXJuIG51bGwgLy9kbyB0aGlzIGluIC4vdHdvL1xuICB9XG4gIGxldCBiZWZvcmUgPSB0ZXJtc1tpXS5ub3JtYWwucmVwbGFjZSgvbid0LywgJycpXG4gIHJldHVybiBbYmVmb3JlLCAnbm90J11cbn1cblxuZXhwb3J0IGRlZmF1bHQgYXBvc3Ryb3BoZVRcbiIsICJjb25zdCBoYXNDb250cmFjdGlvbiA9IC8nL1xuY29uc3QgaXNGZW1pbmluZSA9IC8oZXxcdTAwRTl8YWlzb258c2lvbnx0aW9uKSQvXG5jb25zdCBpc01hc2N1bGluZSA9IC8oYWdlfGlzbWV8YWNsZXxlZ2V8b2lyZSkkL1xuLy8gbCdhbW91clxuY29uc3QgcHJlTCA9ICh0ZXJtcywgaSkgPT4ge1xuICAvLyBsZS9sYVxuICBsZXQgYWZ0ZXIgPSB0ZXJtc1tpXS5ub3JtYWwuc3BsaXQoaGFzQ29udHJhY3Rpb24pWzFdXG4gIC8vIHF1aWNrIGZyZW5jaCBnZW5kZXIgZGlzYW1iaWcgKHJvdWdoKVxuICBpZiAoYWZ0ZXIgJiYgYWZ0ZXIuZW5kc1dpdGgoJ2UnKSkge1xuICAgIHJldHVybiBbJ2xhJywgYWZ0ZXJdXG4gIH1cbiAgcmV0dXJuIFsnbGUnLCBhZnRlcl1cbn1cblxuLy8gZCdhbWVyaXF1ZVxuY29uc3QgcHJlRCA9ICh0ZXJtcywgaSkgPT4ge1xuICBsZXQgYWZ0ZXIgPSB0ZXJtc1tpXS5ub3JtYWwuc3BsaXQoaGFzQ29udHJhY3Rpb24pWzFdXG4gIC8vIHF1aWNrIGd1ZXNzIGZvciBub3VuLWFncmVlbWVudCAocm91Z2gpXG4gIGlmIChhZnRlciAmJiBpc0ZlbWluaW5lLnRlc3QoYWZ0ZXIpICYmICFpc01hc2N1bGluZS50ZXN0KGFmdGVyKSkge1xuICAgIHJldHVybiBbJ2R1JywgYWZ0ZXJdXG4gIH0gZWxzZSBpZiAoYWZ0ZXIgJiYgYWZ0ZXIuZW5kc1dpdGgoJ3MnKSkge1xuICAgIHJldHVybiBbJ2RlcycsIGFmdGVyXVxuICB9XG4gIHJldHVybiBbJ2RlJywgYWZ0ZXJdXG59XG5cbi8vIGonYWltZVxuY29uc3QgcHJlSiA9ICh0ZXJtcywgaSkgPT4ge1xuICBsZXQgYWZ0ZXIgPSB0ZXJtc1tpXS5ub3JtYWwuc3BsaXQoaGFzQ29udHJhY3Rpb24pWzFdXG4gIHJldHVybiBbJ2plJywgYWZ0ZXJdXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJlSixcbiAgcHJlTCxcbiAgcHJlRCxcbn1cbiIsICJjb25zdCBpc1JhbmdlID0gL14oWzAtOS5dezEsNH1bYS16XXswLDJ9KSA/Wy1cdTIwMTNcdTIwMTRdID8oWzAtOV17MSw0fVthLXpdezAsMn0pJC9pXG5jb25zdCB0aW1lUmFuZ2UgPSAvXihbMC05XXsxLDJ9KDpbMC05XVswLTldKT8oYW18cG0pPykgP1stXHUyMDEzXHUyMDE0XSA/KFswLTldezEsMn0oOlswLTldWzAtOV0pPyhhbXxwbSk/KSQvaVxuY29uc3QgcGhvbmVOdW0gPSAvXlswLTldezN9LVswLTldezR9JC9cblxuY29uc3QgbnVtYmVyUmFuZ2UgPSBmdW5jdGlvbiAodGVybXMsIGkpIHtcbiAgbGV0IHRlcm0gPSB0ZXJtc1tpXVxuICBsZXQgcGFydHMgPSB0ZXJtLnRleHQubWF0Y2goaXNSYW5nZSlcbiAgaWYgKHBhcnRzICE9PSBudWxsKSB7XG4gICAgLy8gMTIzLTEyMzQgaXMgYSBwaG9uZSBudW1iZXIsIG5vdCBhIG51bWJlci1yYW5nZVxuICAgIGlmICh0ZXJtLnRhZ3MuaGFzKCdQaG9uZU51bWJlcicpID09PSB0cnVlIHx8IHBob25lTnVtLnRlc3QodGVybS50ZXh0KSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIFtwYXJ0c1sxXSwgJ3RvJywgcGFydHNbMl1dXG4gIH0gZWxzZSB7XG4gICAgcGFydHMgPSB0ZXJtLnRleHQubWF0Y2godGltZVJhbmdlKVxuICAgIGlmIChwYXJ0cyAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtwYXJ0c1sxXSwgJ3RvJywgcGFydHNbNF1dXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5leHBvcnQgZGVmYXVsdCBudW1iZXJSYW5nZVxuIiwgImNvbnN0IG51bVVuaXQgPSAvXihbKy1dP1swLTldWy4sMC05XSopKFthLXpcdTAwQjBcdTAwQjJcdTAwQjNcdTAwQjUvXSspJC8gLy8obXVzdCBiZSBsb3dlcmNhc2UpXG5cbmNvbnN0IG51bWJlclVuaXQgPSBmdW5jdGlvbiAodGVybXMsIGksIHdvcmxkKSB7XG4gIGNvbnN0IG5vdFVuaXQgPSB3b3JsZC5tb2RlbC5vbmUubnVtYmVyU3VmZml4ZXMgfHwge31cbiAgbGV0IHRlcm0gPSB0ZXJtc1tpXVxuICBsZXQgcGFydHMgPSB0ZXJtLnRleHQubWF0Y2gobnVtVW5pdClcbiAgaWYgKHBhcnRzICE9PSBudWxsKSB7XG4gICAgLy8gaXMgaXQgYSByZWNvZ25pemVkIHVuaXQsIGxpa2UgJ2ttJz9cbiAgICBsZXQgdW5pdCA9IHBhcnRzWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpXG4gICAgLy8gZG9uJ3Qgc3BsaXQgJzNyZCdcbiAgICBpZiAobm90VW5pdC5oYXNPd25Qcm9wZXJ0eSh1bml0KSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIFtwYXJ0c1sxXSwgdW5pdF0gLy9zcGxpdCBpdFxuICB9XG4gIHJldHVybiBudWxsXG59XG5leHBvcnQgZGVmYXVsdCBudW1iZXJVbml0XG4iLCAiaW1wb3J0IHNwbGljZSBmcm9tICcuL19zcGxpY2UuanMnXG5pbXBvcnQgYXBvc3Ryb3BoZUQgZnJvbSAnLi9hcG9zdHJvcGhlLWQuanMnXG5pbXBvcnQgYXBvc3Ryb3BoZVQgZnJvbSAnLi9hcG9zdHJvcGhlLXQuanMnXG5pbXBvcnQgZnJlbmNoIGZyb20gJy4vZnJlbmNoLmpzJ1xuaW1wb3J0IG51bWJlclJhbmdlIGZyb20gJy4vbnVtYmVyLXJhbmdlLmpzJ1xuaW1wb3J0IG51bWJlclVuaXQgZnJvbSAnLi9udW1iZXItdW5pdC5qcydcblxuY29uc3QgYnlBcG9zdHJvcGhlID0gLycvXG5jb25zdCBudW1EYXNoID0gL15bMC05XVteLVx1MjAxM1x1MjAxNF0qWy1cdTIwMTNcdTIwMTRdLio/WzAtOV0vXG5cbi8vIHJ1biB0YWdnZXIgb24gb3VyIG5ldyBpbXBsaWNpdCB0ZXJtc1xuY29uc3QgcmVUYWcgPSBmdW5jdGlvbiAodGVybXMsIHZpZXcsIHN0YXJ0LCBsZW4pIHtcbiAgbGV0IHRtcCA9IHZpZXcudXBkYXRlKClcbiAgdG1wLmRvY3VtZW50ID0gW3Rlcm1zXVxuICAvLyBvZmZlciB0byByZS10YWcgbmVpZ2hib3VycywgdG9vXG4gIGxldCBlbmQgPSBzdGFydCArIGxlblxuICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgc3RhcnQgLT0gMVxuICB9XG4gIGlmICh0ZXJtc1tlbmRdKSB7XG4gICAgZW5kICs9IDFcbiAgfVxuICB0bXAucHRycyA9IFtbMCwgc3RhcnQsIGVuZF1dXG59XG5cbmNvbnN0IGJ5RW5kID0ge1xuICAvLyBhaW4ndFxuICB0OiAodGVybXMsIGkpID0+IGFwb3N0cm9waGVUKHRlcm1zLCBpKSxcbiAgLy8gaG93J2RcbiAgZDogKHRlcm1zLCBpKSA9PiBhcG9zdHJvcGhlRCh0ZXJtcywgaSksXG59XG5cbmNvbnN0IGJ5U3RhcnQgPSB7XG4gIC8vIGonYWltZVxuICBqOiAodGVybXMsIGkpID0+IGZyZW5jaC5wcmVKKHRlcm1zLCBpKSxcbiAgLy8gbCdhbW91clxuICBsOiAodGVybXMsIGkpID0+IGZyZW5jaC5wcmVMKHRlcm1zLCBpKSxcbiAgLy8gZCdhbWVyaXF1ZVxuICBkOiAodGVybXMsIGkpID0+IGZyZW5jaC5wcmVEKHRlcm1zLCBpKSxcbn1cblxuLy8gcHVsbC1hcGFydCBrbm93biBjb250cmFjdGlvbnMgZnJvbSBtb2RlbFxuY29uc3Qga25vd25PbmVzID0gZnVuY3Rpb24gKGxpc3QsIHRlcm0sIGJlZm9yZSwgYWZ0ZXIpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgbGV0IG8gPSBsaXN0W2ldXG4gICAgLy8gbG9vayBmb3Igd29yZC13b3JkIG1hdGNoIChjYW5ub3QtPiBbY2FuLCBub3RdKVxuICAgIGlmIChvLndvcmQgPT09IHRlcm0ubm9ybWFsKSB7XG4gICAgICByZXR1cm4gby5vdXRcbiAgICB9XG4gICAgLy8gbG9vayBmb3IgYWZ0ZXItbWF0Y2ggKCdyZSAtPiBbXywgYXJlXSlcbiAgICBlbHNlIGlmIChhZnRlciAhPT0gbnVsbCAmJiBhZnRlciA9PT0gby5hZnRlcikge1xuICAgICAgcmV0dXJuIFtiZWZvcmVdLmNvbmNhdChvLm91dClcbiAgICB9XG4gICAgLy8gbG9vayBmb3IgYmVmb3JlLW1hdGNoIChsJyAtPiBbbGUsIF9dKVxuICAgIGVsc2UgaWYgKGJlZm9yZSAhPT0gbnVsbCAmJiBiZWZvcmUgPT09IG8uYmVmb3JlICYmIGFmdGVyICYmIGFmdGVyLmxlbmd0aCA+IDIpIHtcbiAgICAgIHJldHVybiBvLm91dC5jb25jYXQoYWZ0ZXIpXG4gICAgICAvLyByZXR1cm4gW28ub3V0LCBhZnRlcl0gLy90eXBlb2Ygby5vdXQgPT09ICdzdHJpbmcnID8gW28ub3V0LCBhZnRlcl0gOiBvLm91dCh0ZXJtcywgaSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgdG9Eb2NzID0gZnVuY3Rpb24gKHdvcmRzLCB2aWV3KSB7XG4gIGxldCBkb2MgPSB2aWV3LmZyb21UZXh0KHdvcmRzLmpvaW4oJyAnKSlcbiAgZG9jLmNvbXB1dGUoWydpZCcsICdhbGlhcyddKVxuICByZXR1cm4gZG9jLmRvY3NbMF1cbn1cblxuLy8gdGhlcmUncyBpcyB1c3VhbGx5IFt0aGVyZSwgaXNdXG4vLyBidXQgY2FuIGJlICd0aGVyZSBoYXMnIGZvciAndGhlcmUgaGFzICguLikgYmVlbidcbmNvbnN0IHRoZXJlSGFzID0gZnVuY3Rpb24gKHRlcm1zLCBpKSB7XG4gIGZvciAobGV0IGsgPSBpICsgMTsgayA8IDU7IGsgKz0gMSkge1xuICAgIGlmICghdGVybXNba10pIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGlmICh0ZXJtc1trXS5ub3JtYWwgPT09ICdiZWVuJykge1xuICAgICAgcmV0dXJuIFsndGhlcmUnLCAnaGFzJ11cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsndGhlcmUnLCAnaXMnXVxufVxuXG4vL3JlYWxseSBlYXN5IG9uZXNcbmNvbnN0IGNvbnRyYWN0aW9ucyA9IHZpZXcgPT4ge1xuICBsZXQgeyB3b3JsZCwgZG9jdW1lbnQgfSA9IHZpZXdcbiAgY29uc3QgeyBtb2RlbCwgbWV0aG9kcyB9ID0gd29ybGRcbiAgbGV0IGxpc3QgPSBtb2RlbC5vbmUuY29udHJhY3Rpb25zIHx8IFtdXG4gIC8vIGxldCB1bml0cyA9IG5ldyBTZXQobW9kZWwub25lLnVuaXRzIHx8IFtdKVxuICAvLyBlYWNoIHNlbnRlbmNlXG4gIGRvY3VtZW50LmZvckVhY2goKHRlcm1zLCBuKSA9PiB7XG4gICAgLy8gbG9vcCB0aHJvdWdoIHRlcm1zIGJhY2t3YXJkc1xuICAgIGZvciAobGV0IGkgPSB0ZXJtcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgbGV0IGJlZm9yZSA9IG51bGxcbiAgICAgIGxldCBhZnRlciA9IG51bGxcbiAgICAgIGlmIChieUFwb3N0cm9waGUudGVzdCh0ZXJtc1tpXS5ub3JtYWwpID09PSB0cnVlKSB7XG4gICAgICAgIGxldCByZXMgPSB0ZXJtc1tpXS5ub3JtYWwuc3BsaXQoYnlBcG9zdHJvcGhlKVxuICAgICAgICBiZWZvcmUgPSByZXNbMF1cbiAgICAgICAgYWZ0ZXIgPSByZXNbMV1cbiAgICAgIH1cbiAgICAgIC8vIGFueSBrbm93bi1vbmVzLCBsaWtlICdkdW5ubyc/XG4gICAgICBsZXQgd29yZHMgPSBrbm93bk9uZXMobGlzdCwgdGVybXNbaV0sIGJlZm9yZSwgYWZ0ZXIpXG4gICAgICAvLyBbJ2ZvbycsICdzJ11cbiAgICAgIGlmICghd29yZHMgJiYgYnlFbmQuaGFzT3duUHJvcGVydHkoYWZ0ZXIpKSB7XG4gICAgICAgIHdvcmRzID0gYnlFbmRbYWZ0ZXJdKHRlcm1zLCBpLCB3b3JsZClcbiAgICAgIH1cbiAgICAgIC8vIFsnaicsICdhaW1lJ11cbiAgICAgIGlmICghd29yZHMgJiYgYnlTdGFydC5oYXNPd25Qcm9wZXJ0eShiZWZvcmUpKSB7XG4gICAgICAgIHdvcmRzID0gYnlTdGFydFtiZWZvcmVdKHRlcm1zLCBpKVxuICAgICAgfVxuICAgICAgLy8gJ3RoZXJlIGlzJyB2cyAndGhlcmUgaGFzJ1xuICAgICAgaWYgKGJlZm9yZSA9PT0gJ3RoZXJlJyAmJiBhZnRlciA9PT0gJ3MnKSB7XG4gICAgICAgIHdvcmRzID0gdGhlcmVIYXModGVybXMsIGkpXG4gICAgICB9XG4gICAgICAvLyBhY3R1YWxseSBpbnNlcnQgdGhlIG5ldyB0ZXJtc1xuICAgICAgaWYgKHdvcmRzKSB7XG4gICAgICAgIHdvcmRzID0gdG9Eb2NzKHdvcmRzLCB2aWV3KVxuICAgICAgICBzcGxpY2UoZG9jdW1lbnQsIFtuLCBpXSwgd29yZHMpXG4gICAgICAgIHJlVGFnKGRvY3VtZW50W25dLCB2aWV3LCBpLCB3b3Jkcy5sZW5ndGgpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICAvLyAnNDQtMicgaGFzIHNwZWNpYWwgY2FyZVxuICAgICAgaWYgKG51bURhc2gudGVzdCh0ZXJtc1tpXS5ub3JtYWwpKSB7XG4gICAgICAgIHdvcmRzID0gbnVtYmVyUmFuZ2UodGVybXMsIGkpXG4gICAgICAgIGlmICh3b3Jkcykge1xuICAgICAgICAgIHdvcmRzID0gdG9Eb2NzKHdvcmRzLCB2aWV3KVxuICAgICAgICAgIHNwbGljZShkb2N1bWVudCwgW24sIGldLCB3b3JkcylcbiAgICAgICAgICBtZXRob2RzLm9uZS5zZXRUYWcod29yZHMsICdOdW1iZXJSYW5nZScsIHdvcmxkKSAvL2FkZCBjdXN0b20gdGFnXG4gICAgICAgICAgLy8gaXMgaXQgYSB0aW1lLXJhbmdlLCBsaWtlICc1LTlwbSdcbiAgICAgICAgICBpZiAod29yZHNbMl0gJiYgd29yZHNbMl0udGFncy5oYXMoJ1RpbWUnKSkge1xuICAgICAgICAgICAgbWV0aG9kcy5vbmUuc2V0VGFnKFt3b3Jkc1swXV0sICdUaW1lJywgd29ybGQsIG51bGwsICd0aW1lLXJhbmdlJylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVUYWcoZG9jdW1lbnRbbl0sIHZpZXcsIGksIHdvcmRzLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgLy8gc3BsaXQtYXBhcnQgJzRrbSdcbiAgICAgIHdvcmRzID0gbnVtYmVyVW5pdCh0ZXJtcywgaSwgd29ybGQpXG4gICAgICBpZiAod29yZHMpIHtcbiAgICAgICAgd29yZHMgPSB0b0RvY3Mod29yZHMsIHZpZXcpXG4gICAgICAgIHNwbGljZShkb2N1bWVudCwgW24sIGldLCB3b3JkcylcbiAgICAgICAgbWV0aG9kcy5vbmUuc2V0VGFnKFt3b3Jkc1sxXV0sICdVbml0Jywgd29ybGQsIG51bGwsICdjb250cmFjdGlvbi11bml0JylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5leHBvcnQgZGVmYXVsdCBjb250cmFjdGlvbnNcbiIsICJpbXBvcnQgY29udHJhY3Rpb25zIGZyb20gJy4vY29udHJhY3Rpb25zL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7IGNvbnRyYWN0aW9ucyB9XG4iLCAiaW1wb3J0IG1vZGVsIGZyb20gJy4vbW9kZWwvaW5kZXguanMnXG5pbXBvcnQgY29tcHV0ZSBmcm9tICcuL2NvbXB1dGUvaW5kZXguanMnXG5cbmNvbnN0IHBsdWdpbiA9IHtcbiAgbW9kZWw6IG1vZGVsLFxuICBjb21wdXRlOiBjb21wdXRlLFxuICBob29rczogWydjb250cmFjdGlvbnMnXSxcbn1cbmV4cG9ydCBkZWZhdWx0IHBsdWdpblxuIiwgImNvbnN0IGZyZWV6ZSA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gIGNvbnN0IHdvcmxkID0gdmlldy53b3JsZFxuICBjb25zdCB7IG1vZGVsLCBtZXRob2RzIH0gPSB2aWV3LndvcmxkXG4gIGNvbnN0IHNldFRhZyA9IG1ldGhvZHMub25lLnNldFRhZ1xuICBjb25zdCB7IGZyb3plbkxleCB9ID0gbW9kZWwub25lXG4gIGNvbnN0IG11bHRpID0gbW9kZWwub25lLl9tdWx0aUNhY2hlIHx8IHt9XG5cbiAgdmlldy5kb2NzLmZvckVhY2godGVybXMgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVybXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIC8vIGJhc2ljIGxleGljb24gbG9va3VwXG4gICAgICBsZXQgdCA9IHRlcm1zW2ldXG4gICAgICBsZXQgd29yZCA9IHQubWFjaGluZSB8fCB0Lm5vcm1hbFxuXG4gICAgICAvLyB0ZXN0IGEgbXVsdGktd29yZFxuICAgICAgaWYgKG11bHRpW3dvcmRdICE9PSB1bmRlZmluZWQgJiYgdGVybXNbaSArIDFdKSB7XG4gICAgICAgIGxldCBlbmQgPSBpICsgbXVsdGlbd29yZF0gLSAxXG4gICAgICAgIGZvciAobGV0IGsgPSBlbmQ7IGsgPiBpOyBrIC09IDEpIHtcbiAgICAgICAgICBsZXQgd29yZHMgPSB0ZXJtcy5zbGljZShpLCBrICsgMSlcbiAgICAgICAgICBsZXQgc3RyID0gd29yZHMubWFwKHRlcm0gPT4gdGVybS5tYWNoaW5lIHx8IHRlcm0ubm9ybWFsKS5qb2luKCcgJylcbiAgICAgICAgICAvLyBsb29rdXAgZnJvemVuIGxleGljb25cbiAgICAgICAgICBpZiAoZnJvemVuTGV4Lmhhc093blByb3BlcnR5KHN0cikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHNldFRhZyh3b3JkcywgZnJvemVuTGV4W3N0cl0sIHdvcmxkLCBmYWxzZSwgJzEtZnJvemVuLW11bHRpLWxleGljb24nKVxuICAgICAgICAgICAgd29yZHMuZm9yRWFjaCh0ZXJtID0+ICh0ZXJtLmZyb3plbiA9IHRydWUpKVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHRlc3Qgc2luZ2xlIHdvcmRcbiAgICAgIGlmIChmcm96ZW5MZXhbd29yZF0gIT09IHVuZGVmaW5lZCAmJiBmcm96ZW5MZXguaGFzT3duUHJvcGVydHkod29yZCkpIHtcbiAgICAgICAgc2V0VGFnKFt0XSwgZnJvemVuTGV4W3dvcmRdLCB3b3JsZCwgZmFsc2UsICcxLWZyZWV6ZS1sZXhpY29uJylcbiAgICAgICAgdC5mcm96ZW4gPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5jb25zdCB1bmZyZWV6ZSA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gIHZpZXcuZG9jcy5mb3JFYWNoKHRzID0+IHtcbiAgICB0cy5mb3JFYWNoKHRlcm0gPT4ge1xuICAgICAgZGVsZXRlIHRlcm0uZnJvemVuXG4gICAgfSlcbiAgfSlcbiAgcmV0dXJuIHZpZXdcbn1cbmV4cG9ydCBkZWZhdWx0IHsgZnJvemVuOiBmcmVlemUsIGZyZWV6ZSwgdW5mcmVlemUgfVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmNvbnN0IGJsdWUgPSBzdHIgPT4gJ1xceDFiWzM0bScgKyBzdHIgKyAnXFx4MWJbMG0nXG5jb25zdCBkaW0gPSBzdHIgPT4gJ1xceDFiWzNtXFx4MWJbMm0nICsgc3RyICsgJ1xceDFiWzBtJ1xuXG5jb25zdCBkZWJ1ZyA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gIHZpZXcuZG9jcy5mb3JFYWNoKHRlcm1zID0+IHtcbiAgICBjb25zb2xlLmxvZyhibHVlKCdcXG4gIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCcpKVxuICAgIHRlcm1zLmZvckVhY2godCA9PiB7XG4gICAgICBsZXQgc3RyID0gYCAgJHtkaW0oJ1x1MjUwMicpfSAgYFxuICAgICAgbGV0IHR4dCA9IHQuaW1wbGljaXQgfHwgdC50ZXh0IHx8ICctJ1xuICAgICAgaWYgKHQuZnJvemVuID09PSB0cnVlKSB7XG4gICAgICAgIHN0ciArPSBgJHtibHVlKHR4dCl9IFx1Mjc0NFx1RkUwRmBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciArPSBkaW0odHh0KVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coc3RyKVxuICAgIH0pXG4gIH0pXG59XG5leHBvcnQgZGVmYXVsdCBkZWJ1Z1xuIiwgImltcG9ydCBjb21wdXRlIGZyb20gJy4vY29tcHV0ZS5qcydcbmltcG9ydCBkZWJ1ZyBmcm9tICcuL2RlYnVnLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC8vIGFkZCAuY29tcHV0ZSgnZnJlZXplJylcbiAgY29tcHV0ZSxcblxuICBtdXRhdGU6IHdvcmxkID0+IHtcbiAgICBjb25zdCBtZXRob2RzID0gd29ybGQubWV0aG9kcy5vbmVcbiAgICAvLyBhZGQgQGlzRnJvemVuIG1ldGhvZFxuICAgIG1ldGhvZHMudGVybU1ldGhvZHMuaXNGcm96ZW4gPSB0ZXJtID0+IHRlcm0uZnJvemVuID09PSB0cnVlXG4gICAgLy8gYWRkcyBgLmRlYnVnKCdmcm96ZW4nKWBcbiAgICBtZXRob2RzLmRlYnVnLmZyZWV6ZSA9IGRlYnVnXG4gICAgbWV0aG9kcy5kZWJ1Zy5mcm96ZW4gPSBkZWJ1Z1xuICB9LFxuXG4gIGFwaTogZnVuY3Rpb24gKFZpZXcpIHtcbiAgICAvLyBzZXQgYWxsIHRlcm1zIHRvIHJlamVjdCBhbnkgZGVzY3RydWN0aXZlIHRhZ3NcbiAgICBWaWV3LnByb3RvdHlwZS5mcmVlemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmRvY3MuZm9yRWFjaCh0cyA9PiB7XG4gICAgICAgIHRzLmZvckVhY2godGVybSA9PiB7XG4gICAgICAgICAgdGVybS5mcm96ZW4gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgLy8gcmVzZXQgYWxsIHRlcm1zIHRvIGFsbG93ICBhbnkgZGVzY3RydWN0aXZlIHRhZ3NcbiAgICBWaWV3LnByb3RvdHlwZS51bmZyZWV6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuY29tcHV0ZSgndW5mcmVlemUnKVxuICAgIH1cbiAgICAvLyByZXR1cm4gYWxsIGZyb3plbiB0ZXJtc1xuICAgIFZpZXcucHJvdG90eXBlLmlzRnJvemVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF0Y2goJ0Bpc0Zyb3plbisnKVxuICAgIH1cbiAgfSxcbiAgLy8gcnVuIGl0IGluIGluaXRcbiAgaG9va3M6IFsnZnJlZXplJ10sXG59XG4iLCAiLy8gc2Nhbi1haGVhZCB0byBtYXRjaCBtdWx0aXBsZS13b3JkIHRlcm1zIC0gJ2phY2sgcmFiYml0J1xuY29uc3QgbXVsdGlXb3JkID0gZnVuY3Rpb24gKHRlcm1zLCBzdGFydF9pLCB3b3JsZCkge1xuICBjb25zdCB7IG1vZGVsLCBtZXRob2RzIH0gPSB3b3JsZFxuICBjb25zdCBzZXRUYWcgPSBtZXRob2RzLm9uZS5zZXRUYWdcbiAgY29uc3QgbXVsdGkgPSBtb2RlbC5vbmUuX211bHRpQ2FjaGUgfHwge31cbiAgY29uc3QgeyBsZXhpY29uIH0gPSBtb2RlbC5vbmUgfHwge31cbiAgbGV0IHQgPSB0ZXJtc1tzdGFydF9pXVxuICBsZXQgd29yZCA9IHQubWFjaGluZSB8fCB0Lm5vcm1hbFxuXG4gIC8vIGZvdW5kIGEgd29yZCB0byBzY2FuLWFoZWFkIG9uXG4gIGlmIChtdWx0aVt3b3JkXSAhPT0gdW5kZWZpbmVkICYmIHRlcm1zW3N0YXJ0X2kgKyAxXSkge1xuICAgIGxldCBlbmQgPSBzdGFydF9pICsgbXVsdGlbd29yZF0gLSAxXG4gICAgZm9yIChsZXQgaSA9IGVuZDsgaSA+IHN0YXJ0X2k7IGkgLT0gMSkge1xuICAgICAgbGV0IHdvcmRzID0gdGVybXMuc2xpY2Uoc3RhcnRfaSwgaSArIDEpXG4gICAgICBpZiAod29yZHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBsZXQgc3RyID0gd29yZHMubWFwKHRlcm0gPT4gdGVybS5tYWNoaW5lIHx8IHRlcm0ubm9ybWFsKS5qb2luKCcgJylcbiAgICAgIC8vIGxvb2t1cCByZWd1bGFyIGxleGljb25cbiAgICAgIGlmIChsZXhpY29uLmhhc093blByb3BlcnR5KHN0cikgPT09IHRydWUpIHtcbiAgICAgICAgbGV0IHRhZyA9IGxleGljb25bc3RyXVxuICAgICAgICBzZXRUYWcod29yZHMsIHRhZywgd29ybGQsIGZhbHNlLCAnMS1tdWx0aS1sZXhpY29uJylcbiAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciBwaHJhc2FsLXZlcmJzIC0gMm5kIHdvcmQgaXMgYSAjUGFydGljbGVcbiAgICAgICAgaWYgKHRhZyAmJiB0YWcubGVuZ3RoID09PSAyICYmICh0YWdbMF0gPT09ICdQaHJhc2FsVmVyYicgfHwgdGFnWzFdID09PSAnUGhyYXNhbFZlcmInKSkge1xuICAgICAgICAgIHNldFRhZyhbd29yZHNbMV1dLCAnUGFydGljbGUnLCB3b3JsZCwgZmFsc2UsICcxLXBocmFzYWwtcGFydGljbGUnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBudWxsXG59XG5leHBvcnQgZGVmYXVsdCBtdWx0aVdvcmRcbiIsICJjb25zdCBwcmVmaXggPSAvXih1bmRlcnxvdmVyfG1pc3xyZXx1bnxkaXN8c2VtaXxwcmV8cG9zdCktPy9cbi8vIGFudGl8bm9ufGV4dHJhfGludGVyfGludHJhfG92ZXJcbmNvbnN0IGFsbG93UHJlZml4ID0gbmV3IFNldChbJ1ZlcmInLCAnSW5maW5pdGl2ZScsICdQYXN0VGVuc2UnLCAnR2VydW5kJywgJ1ByZXNlbnRUZW5zZScsICdBZGplY3RpdmUnLCAnUGFydGljaXBsZSddKVxuXG4vLyB0YWcgYW55IHdvcmRzIGluIG91ciBsZXhpY29uXG5jb25zdCBjaGVja0xleGljb24gPSBmdW5jdGlvbiAodGVybXMsIGksIHdvcmxkKSB7XG4gIGNvbnN0IHsgbW9kZWwsIG1ldGhvZHMgfSA9IHdvcmxkXG4gIC8vIGNvbnN0IGZhc3RUYWcgPSBtZXRob2RzLm9uZS5mYXN0VGFnXG4gIGNvbnN0IHNldFRhZyA9IG1ldGhvZHMub25lLnNldFRhZ1xuICBjb25zdCB7IGxleGljb24gfSA9IG1vZGVsLm9uZVxuXG4gIC8vIGJhc2ljIGxleGljb24gbG9va3VwXG4gIGxldCB0ID0gdGVybXNbaV1cbiAgbGV0IHdvcmQgPSB0Lm1hY2hpbmUgfHwgdC5ub3JtYWxcbiAgLy8gbm9ybWFsIGxleGljb24gbG9va3VwXG4gIGlmIChsZXhpY29uW3dvcmRdICE9PSB1bmRlZmluZWQgJiYgbGV4aWNvbi5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkge1xuICAgIHNldFRhZyhbdF0sIGxleGljb25bd29yZF0sIHdvcmxkLCBmYWxzZSwgJzEtbGV4aWNvbicpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvLyBsb29rdXAgYWxpYXNlcyBpbiB0aGUgbGV4aWNvblxuICBpZiAodC5hbGlhcykge1xuICAgIGxldCBmb3VuZCA9IHQuYWxpYXMuZmluZChzdHIgPT4gbGV4aWNvbi5oYXNPd25Qcm9wZXJ0eShzdHIpKVxuICAgIGlmIChmb3VuZCkge1xuICAgICAgc2V0VGFnKFt0XSwgbGV4aWNvbltmb3VuZF0sIHdvcmxkLCBmYWxzZSwgJzEtbGV4aWNvbi1hbGlhcycpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICAvLyBwcmVmaXhpbmcgZm9yIHZlcmJzL2FkamVjdGl2ZXNcbiAgaWYgKHByZWZpeC50ZXN0KHdvcmQpID09PSB0cnVlKSB7XG4gICAgbGV0IHN0ZW0gPSB3b3JkLnJlcGxhY2UocHJlZml4LCAnJylcbiAgICBpZiAobGV4aWNvbi5oYXNPd25Qcm9wZXJ0eShzdGVtKSAmJiBzdGVtLmxlbmd0aCA+IDMpIHtcbiAgICAgIC8vIG9ubHkgYWxsb3cgcHJlZml4ZXMgZm9yIHZlcmJzL2FkamVjdGl2ZXNcbiAgICAgIGlmIChhbGxvd1ByZWZpeC5oYXMobGV4aWNvbltzdGVtXSkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJy0+Jywgd29yZCwgc3RlbSwgbGV4aWNvbltzdGVtXSlcbiAgICAgICAgc2V0VGFnKFt0XSwgbGV4aWNvbltzdGVtXSwgd29ybGQsIGZhbHNlLCAnMS1sZXhpY29uLXByZWZpeCcpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5leHBvcnQgZGVmYXVsdCBjaGVja0xleGljb25cbiIsICJpbXBvcnQgbXVsdGlXb3JkIGZyb20gJy4vbXVsdGktd29yZC5qcydcbmltcG9ydCBzaW5nbGVXb3JkIGZyb20gJy4vc2luZ2xlLXdvcmQuanMnXG5cbi8vIHRhZyBhbnkgd29yZHMgaW4gb3VyIGxleGljb24gLSBldmVuIGlmIGl0IGhhc24ndCBiZWVuIGZpbGxlZC11cCB5ZXRcbi8vIHJlc3Qgb2YgcHJlLXRhZ2dlciBpcyBpbiAuL3R3by9wcmVUYWdnZXJcbmNvbnN0IGxleGljb24gPSBmdW5jdGlvbiAodmlldykge1xuICBjb25zdCB3b3JsZCA9IHZpZXcud29ybGRcbiAgLy8gbG9vcCB0aHJvdWdoIG91ciB0ZXJtc1xuICB2aWV3LmRvY3MuZm9yRWFjaCh0ZXJtcyA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXJtcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHRlcm1zW2ldLnRhZ3Muc2l6ZSA9PT0gMCkge1xuICAgICAgICBsZXQgZm91bmQgPSBudWxsXG4gICAgICAgIGZvdW5kID0gZm91bmQgfHwgbXVsdGlXb3JkKHRlcm1zLCBpLCB3b3JsZClcbiAgICAgICAgLy8gbG9va3VwIGtub3duIHdvcmRzXG4gICAgICAgIGZvdW5kID0gZm91bmQgfHwgc2luZ2xlV29yZCh0ZXJtcywgaSwgd29ybGQpXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxleGljb24sXG59XG4iLCAiLy8gZGVyaXZlIGNsZXZlciB0aGluZ3MgZnJvbSBvdXIgbGV4aWNvbiBrZXktdmFsdWUgcGFpcnNcbmNvbnN0IGV4cGFuZCA9IGZ1bmN0aW9uICh3b3Jkcykge1xuICAvLyBjb25zdCB7IG1ldGhvZHMsIG1vZGVsIH0gPSB3b3JsZFxuICBsZXQgbGV4ID0ge31cbiAgLy8gY29uc29sZS5sb2coJ3N0YXJ0OicsIE9iamVjdC5rZXlzKGxleCkubGVuZ3RoKVxuICBsZXQgX211bHRpID0ge31cbiAgLy8gZ28gdGhyb3VnaCBlYWNoIHdvcmQgaW4gdGhpcyBrZXktdmFsdWUgb2JqOlxuICBPYmplY3Qua2V5cyh3b3JkcykuZm9yRWFjaCh3b3JkID0+IHtcbiAgICBsZXQgdGFnID0gd29yZHNbd29yZF1cbiAgICAvLyBub3JtYWxpemUgbGV4aWNvbiBhIGxpdHRsZSBiaXRcbiAgICB3b3JkID0gd29yZC50b0xvd2VyQ2FzZSgpLnRyaW0oKVxuICAgIHdvcmQgPSB3b3JkLnJlcGxhY2UoLydzXFxiLywgJycpXG4gICAgLy8gY2FjaGUgbXVsdGktd29yZCB0ZXJtc1xuICAgIGxldCBzcGxpdCA9IHdvcmQuc3BsaXQoLyAvKVxuICAgIGlmIChzcGxpdC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBwcmVmZXIgbG9uZ2VyIG9uZXNcbiAgICAgIGlmIChfbXVsdGlbc3BsaXRbMF1dID09PSB1bmRlZmluZWQgfHwgc3BsaXQubGVuZ3RoID4gX211bHRpW3NwbGl0WzBdXSkge1xuICAgICAgICBfbXVsdGlbc3BsaXRbMF1dID0gc3BsaXQubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuICAgIGxleFt3b3JkXSA9IGxleFt3b3JkXSB8fCB0YWdcbiAgfSlcbiAgLy8gY2xlYW51cFxuICBkZWxldGUgbGV4WycnXVxuICBkZWxldGUgbGV4W251bGxdXG4gIGRlbGV0ZSBsZXhbJyAnXVxuICByZXR1cm4geyBsZXgsIF9tdWx0aSB9XG59XG5leHBvcnQgZGVmYXVsdCBleHBhbmRcbiIsICJpbXBvcnQgZXhwYW5kTGV4aWNvbiBmcm9tICcuL2V4cGFuZC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBvbmU6IHtcbiAgICBleHBhbmRMZXhpY29uLFxuICB9XG59IiwgIi8qKiBpbnNlcnQgbmV3IHdvcmRzL3BocmFzZXMgaW50byB0aGUgbGV4aWNvbiAqL1xuY29uc3QgYWRkV29yZHMgPSBmdW5jdGlvbiAod29yZHMsIGlzRnJvemVuID0gZmFsc2UpIHtcbiAgY29uc3Qgd29ybGQgPSB0aGlzLndvcmxkKClcbiAgY29uc3QgeyBtZXRob2RzLCBtb2RlbCB9ID0gd29ybGRcbiAgaWYgKCF3b3Jkcykge1xuICAgIHJldHVyblxuICB9XG4gIC8vIG5vcm1hbGl6ZSB0YWcgdmFsc1xuICBPYmplY3Qua2V5cyh3b3JkcykuZm9yRWFjaChrID0+IHtcbiAgICBpZiAodHlwZW9mIHdvcmRzW2tdID09PSAnc3RyaW5nJyAmJiB3b3Jkc1trXS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIHdvcmRzW2tdID0gd29yZHNba10ucmVwbGFjZSgvXiMvLCAnJylcbiAgICB9XG4gIH0pXG4gIC8vIHRoZXNlIHdvcmRzIGdvIGludG8gYSBzZXBlcmF0ZSBsZXhpY29uXG4gIGlmIChpc0Zyb3plbiA9PT0gdHJ1ZSkge1xuICAgIGxldCB7IGxleCwgX211bHRpIH0gPSBtZXRob2RzLm9uZS5leHBhbmRMZXhpY29uKHdvcmRzLCB3b3JsZClcbiAgICBPYmplY3QuYXNzaWduKG1vZGVsLm9uZS5fbXVsdGlDYWNoZSwgX211bHRpKVxuICAgIE9iamVjdC5hc3NpZ24obW9kZWwub25lLmZyb3plbkxleCwgbGV4KVxuICAgIHJldHVyblxuICB9XG4gIC8vIGFkZCBzb21lIHdvcmRzIHRvIG91ciBsZXhpY29uXG4gIGlmIChtZXRob2RzLnR3by5leHBhbmRMZXhpY29uKSB7XG4gICAgLy8gZG8gZmFuY3kgLi90d28gdmVyc2lvblxuICAgIGxldCB7IGxleCwgX211bHRpIH0gPSBtZXRob2RzLnR3by5leHBhbmRMZXhpY29uKHdvcmRzLCB3b3JsZClcbiAgICBPYmplY3QuYXNzaWduKG1vZGVsLm9uZS5sZXhpY29uLCBsZXgpXG4gICAgT2JqZWN0LmFzc2lnbihtb2RlbC5vbmUuX211bHRpQ2FjaGUsIF9tdWx0aSlcbiAgfVxuICAvLyBkbyBiYXNpYyAuL29uZSB2ZXJzaW9uXG4gIGxldCB7IGxleCwgX211bHRpIH0gPSBtZXRob2RzLm9uZS5leHBhbmRMZXhpY29uKHdvcmRzLCB3b3JsZClcbiAgT2JqZWN0LmFzc2lnbihtb2RlbC5vbmUubGV4aWNvbiwgbGV4KVxuICBPYmplY3QuYXNzaWduKG1vZGVsLm9uZS5fbXVsdGlDYWNoZSwgX211bHRpKVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IGFkZFdvcmRzIH1cbiIsICJpbXBvcnQgY29tcHV0ZSBmcm9tICcuL2NvbXB1dGUvaW5kZXguanMnXG5pbXBvcnQgbWV0aG9kcyBmcm9tICcuL21ldGhvZHMvaW5kZXguanMnXG5pbXBvcnQgbGliIGZyb20gJy4vbGliLmpzJ1xuXG5jb25zdCBtb2RlbCA9IHtcbiAgb25lOiB7XG4gICAgbGV4aWNvbjoge30sIC8vc2V0dXAgYmxhbmsgbGV4aWNvblxuICAgIF9tdWx0aUNhY2hlOiB7fSxcbiAgICBmcm96ZW5MZXg6IHt9LCAvLzJuZCBsZXhpY29uXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbW9kZWwsXG4gIG1ldGhvZHMsXG4gIGNvbXB1dGUsXG4gIGxpYixcbiAgaG9va3M6IFsnbGV4aWNvbiddLFxufVxuIiwgIi8vIGVkaXRlZCBieSBTcGVuY2VyIEtlbGx5XG4vLyBjcmVkaXQgdG8gaHR0cHM6Ly9naXRodWIuY29tL0JydW5vUkIvYWhvY29yYXNpY2sgYnkgQnJ1bm8gUm9iZXJ0byBCXHUwMEZBcmlnby5cblxuY29uc3QgdG9rZW5pemUgPSBmdW5jdGlvbiAocGhyYXNlLCB3b3JsZCkge1xuICBjb25zdCB7IG1ldGhvZHMsIG1vZGVsIH0gPSB3b3JsZFxuICBsZXQgdGVybXMgPSBtZXRob2RzLm9uZS50b2tlbml6ZS5zcGxpdFRlcm1zKHBocmFzZSwgbW9kZWwpLm1hcCh0ID0+IG1ldGhvZHMub25lLnRva2VuaXplLnNwbGl0V2hpdGVzcGFjZSh0LCBtb2RlbCkpXG4gIHJldHVybiB0ZXJtcy5tYXAodGVybSA9PiB0ZXJtLnRleHQudG9Mb3dlckNhc2UoKSlcbn1cblxuLy8gdHVybiBhbiBhcnJheSBvciBvYmplY3QgaW50byBhIGNvbXByZXNzZWQgYWhvLWNvcmFzaWNrIHN0cnVjdHVyZVxuY29uc3QgYnVpbGRUcmllID0gZnVuY3Rpb24gKHBocmFzZXMsIHdvcmxkKSB7XG5cbiAgLy8gY29uc3QgdG9rZW5pemU9bWV0aG9kcy5vbmUuXG4gIGxldCBnb05leHQgPSBbe31dXG4gIGxldCBlbmRBcyA9IFtudWxsXVxuICBsZXQgZmFpbFRvID0gWzBdXG5cbiAgbGV0IHhzID0gW11cbiAgbGV0IG4gPSAwXG4gIHBocmFzZXMuZm9yRWFjaChmdW5jdGlvbiAocGhyYXNlKSB7XG4gICAgbGV0IGN1cnIgPSAwXG4gICAgLy8gbGV0IHdvcmRzQiA9IHBocmFzZS5zcGxpdCgvIC9nKS5maWx0ZXIodyA9PiB3KVxuICAgIGxldCB3b3JkcyA9IHRva2VuaXplKHBocmFzZSwgd29ybGQpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHdvcmQgPSB3b3Jkc1tpXVxuICAgICAgaWYgKGdvTmV4dFtjdXJyXSAmJiBnb05leHRbY3Vycl0uaGFzT3duUHJvcGVydHkod29yZCkpIHtcbiAgICAgICAgY3VyciA9IGdvTmV4dFtjdXJyXVt3b3JkXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbisrXG4gICAgICAgIGdvTmV4dFtjdXJyXVt3b3JkXSA9IG5cbiAgICAgICAgZ29OZXh0W25dID0ge31cbiAgICAgICAgY3VyciA9IG5cbiAgICAgICAgZW5kQXNbbl0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIGVuZEFzW2N1cnJdID0gW3dvcmRzLmxlbmd0aF1cbiAgfSlcbiAgLy8gZihzKSA9IDAgZm9yIGFsbCBzdGF0ZXMgb2YgZGVwdGggMSAodGhlIG9uZXMgZnJvbSB3aGljaCB0aGUgMCBzdGF0ZSBjYW4gdHJhbnNpdGlvbiB0bylcbiAgZm9yIChsZXQgd29yZCBpbiBnb05leHRbMF0pIHtcbiAgICBuID0gZ29OZXh0WzBdW3dvcmRdXG4gICAgZmFpbFRvW25dID0gMFxuICAgIHhzLnB1c2gobilcbiAgfVxuXG4gIHdoaWxlICh4cy5sZW5ndGgpIHtcbiAgICBsZXQgciA9IHhzLnNoaWZ0KClcbiAgICAvLyBmb3IgZWFjaCBzeW1ib2wgYSBzdWNoIHRoYXQgZyhyLCBhKSA9IHNcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGdvTmV4dFtyXSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGxldCB3b3JkID0ga2V5c1tpXVxuICAgICAgbGV0IHMgPSBnb05leHRbcl1bd29yZF1cbiAgICAgIHhzLnB1c2gocylcbiAgICAgIC8vIHNldCBzdGF0ZSA9IGYocilcbiAgICAgIG4gPSBmYWlsVG9bcl1cbiAgICAgIHdoaWxlIChuID4gMCAmJiAhZ29OZXh0W25dLmhhc093blByb3BlcnR5KHdvcmQpKSB7XG4gICAgICAgIG4gPSBmYWlsVG9bbl1cbiAgICAgIH1cbiAgICAgIGlmIChnb05leHQuaGFzT3duUHJvcGVydHkobikpIHtcbiAgICAgICAgbGV0IGZzID0gZ29OZXh0W25dW3dvcmRdXG4gICAgICAgIGZhaWxUb1tzXSA9IGZzXG4gICAgICAgIGlmIChlbmRBc1tmc10pIHtcbiAgICAgICAgICBlbmRBc1tzXSA9IGVuZEFzW3NdIHx8IFtdXG4gICAgICAgICAgZW5kQXNbc10gPSBlbmRBc1tzXS5jb25jYXQoZW5kQXNbZnNdKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWlsVG9bc10gPSAwXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGdvTmV4dCwgZW5kQXMsIGZhaWxUbyB9XG59XG5leHBvcnQgZGVmYXVsdCBidWlsZFRyaWVcblxuLy8gY29uc29sZS5sb2coYnVpbGRUcmllKFsnc21hcnQgYW5kIGNvb2wnLCAnc21hcnQgYW5kIG5pY2UnXSkpXG4iLCAiLy8gZm9sbG93IG91ciB0cmllIHN0cnVjdHVyZVxuY29uc3Qgc2NhbldvcmRzID0gZnVuY3Rpb24gKHRlcm1zLCB0cmllLCBvcHRzKSB7XG4gIGxldCBuID0gMFxuICBsZXQgcmVzdWx0cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGVybXMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgd29yZCA9IHRlcm1zW2ldW29wdHMuZm9ybV0gfHwgdGVybXNbaV0ubm9ybWFsXG4gICAgLy8gbWFpbiBtYXRjaC1sb2dpYyBsb29wOlxuICAgIHdoaWxlIChuID4gMCAmJiAodHJpZS5nb05leHRbbl0gPT09IHVuZGVmaW5lZCB8fCAhdHJpZS5nb05leHRbbl0uaGFzT3duUHJvcGVydHkod29yZCkpKSB7XG4gICAgICBuID0gdHJpZS5mYWlsVG9bbl0gfHwgMCAvLyAodXN1YWxseSBiYWNrIHRvIDApXG4gICAgfVxuICAgIC8vIGRpZCB3ZSBmYWlsP1xuICAgIGlmICghdHJpZS5nb05leHRbbl0uaGFzT3duUHJvcGVydHkod29yZCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIG4gPSB0cmllLmdvTmV4dFtuXVt3b3JkXVxuICAgIGlmICh0cmllLmVuZEFzW25dKSB7XG4gICAgICBsZXQgYXJyID0gdHJpZS5lbmRBc1tuXVxuICAgICAgZm9yIChsZXQgbyA9IDA7IG8gPCBhcnIubGVuZ3RoOyBvKyspIHtcbiAgICAgICAgbGV0IGxlbiA9IGFycltvXVxuICAgICAgICBsZXQgdGVybSA9IHRlcm1zW2kgLSBsZW4gKyAxXVxuICAgICAgICBsZXQgW25vLCBzdGFydF0gPSB0ZXJtLmluZGV4XG4gICAgICAgIHJlc3VsdHMucHVzaChbbm8sIHN0YXJ0LCBzdGFydCArIGxlbiwgdGVybS5pZF0pXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRzXG59XG5cbmNvbnN0IGNhY2hlTWlzcyA9IGZ1bmN0aW9uICh3b3JkcywgY2FjaGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChjYWNoZS5oYXMod29yZHNbaV0pID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3Qgc2NhbiA9IGZ1bmN0aW9uICh2aWV3LCB0cmllLCBvcHRzKSB7XG4gIGxldCByZXN1bHRzID0gW11cbiAgb3B0cy5mb3JtID0gb3B0cy5mb3JtIHx8ICdub3JtYWwnXG4gIGxldCBkb2NzID0gdmlldy5kb2NzXG4gIGlmICghdHJpZS5nb05leHQgfHwgIXRyaWUuZ29OZXh0WzBdKSB7XG4gICAgY29uc29sZS5lcnJvcignQ29tcHJvbWlzZSBpbnZhbGlkIGxvb2t1cCB0cmllJykvL2VzbGludC1kaXNhYmxlLWxpbmVcbiAgICByZXR1cm4gdmlldy5ub25lKClcbiAgfVxuICBsZXQgZmlyc3RXb3JkcyA9IE9iamVjdC5rZXlzKHRyaWUuZ29OZXh0WzBdKVxuICAvLyBkbyBlYWNoIHBocmFzZVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3MubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBjYW4gd2Ugc2tpcCB0aGUgcGhyYXNlLCBhbGwgdG9nZXRoZXI/XG4gICAgaWYgKHZpZXcuX2NhY2hlICYmIHZpZXcuX2NhY2hlW2ldICYmIGNhY2hlTWlzcyhmaXJzdFdvcmRzLCB2aWV3Ll9jYWNoZVtpXSkgPT09IHRydWUpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGxldCB0ZXJtcyA9IGRvY3NbaV1cbiAgICBsZXQgZm91bmQgPSBzY2FuV29yZHModGVybXMsIHRyaWUsIG9wdHMpXG4gICAgaWYgKGZvdW5kLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChmb3VuZClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZpZXcudXBkYXRlKHJlc3VsdHMpXG59XG5leHBvcnQgZGVmYXVsdCBzY2FuXG4iLCAiaW1wb3J0IGJ1aWxkIGZyb20gJy4vYnVpbGRUcmllL2luZGV4LmpzJ1xuaW1wb3J0IHNjYW4gZnJvbSAnLi9zY2FuLmpzJ1xuXG5jb25zdCBpc09iamVjdCA9IHZhbCA9PiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKFZpZXcpIHtcblxuICAvKiogZmluZCBhbGwgbWF0Y2hlcyBpbiB0aGlzIGRvY3VtZW50ICovXG4gIFZpZXcucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9uZSgpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnB1dCA9IFtpbnB1dF1cbiAgICB9XG4gICAgbGV0IHRyaWUgPSBpc09iamVjdChpbnB1dCkgPyBpbnB1dCA6IGJ1aWxkKGlucHV0LCB0aGlzLndvcmxkKVxuICAgIGxldCByZXMgPSBzY2FuKHRoaXMsIHRyaWUsIG9wdHMpXG4gICAgcmVzID0gcmVzLnNldHRsZSgpXG4gICAgcmV0dXJuIHJlc1xuICB9XG59IiwgIi8vIGNob3Atb2ZmIHRhaWwgb2YgcmVkdW5kYW50IHZhbHMgYXQgZW5kIG9mIGFycmF5XG5jb25zdCB0cnVuY2F0ZSA9IChsaXN0LCB2YWwpID0+IHtcbiAgZm9yIChsZXQgaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICBpZiAobGlzdFtpXSAhPT0gdmFsKSB7XG4gICAgICBsaXN0ID0gbGlzdC5zbGljZSgwLCBpICsgMSlcbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG4gIHJldHVybiBsaXN0XG59XG5cbi8vIHBydW5lIHRyaWUgYSBiaXRcbmNvbnN0IGNvbXByZXNzID0gZnVuY3Rpb24gKHRyaWUpIHtcbiAgdHJpZS5nb05leHQgPSB0cmllLmdvTmV4dC5tYXAobyA9PiB7XG4gICAgaWYgKE9iamVjdC5rZXlzKG8pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICByZXR1cm4gb1xuICB9KVxuICAvLyBjaG9wLW9mZiB0YWlsIG9mIHVuZGVmaW5lZCB2YWxzIGluIGdvTmV4dCBhcnJheVxuICB0cmllLmdvTmV4dCA9IHRydW5jYXRlKHRyaWUuZ29OZXh0LCB1bmRlZmluZWQpXG4gIC8vIGNob3Atb2ZmIHRhaWwgb2YgemVyb3MgaW4gZmFpbFRvIGFycmF5XG4gIHRyaWUuZmFpbFRvID0gdHJ1bmNhdGUodHJpZS5mYWlsVG8sIDApXG4gIC8vIGNob3Atb2ZmIHRhaWwgb2YgbnVsbHMgaW4gZW5kQXMgYXJyYXlcbiAgdHJpZS5lbmRBcyA9IHRydW5jYXRlKHRyaWUuZW5kQXMsIG51bGwpXG4gIHJldHVybiB0cmllXG59XG5leHBvcnQgZGVmYXVsdCBjb21wcmVzcyIsICJpbXBvcnQgYXBpIGZyb20gJy4vYXBpL2luZGV4LmpzJ1xuaW1wb3J0IGNvbXByZXNzIGZyb20gJy4vYXBpL2J1aWxkVHJpZS9jb21wcmVzcy5qcydcbmltcG9ydCBidWlsZCBmcm9tICcuL2FwaS9idWlsZFRyaWUvaW5kZXguanMnXG5cbi8qKiBwcmUtY29tcGlsZSBhIGxpc3Qgb2YgbWF0Y2hlcyB0byBsb29rdXAgKi9cbmNvbnN0IGxpYiA9IHtcbiAgLyoqIHR1cm4gYW4gYXJyYXkgb3Igb2JqZWN0IGludG8gYSBjb21wcmVzc2VkIHRyaWUqL1xuICBidWlsZFRyaWU6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIGNvbnN0IHRyaWUgPSBidWlsZChpbnB1dCwgdGhpcy53b3JsZCgpKVxuICAgIHJldHVybiBjb21wcmVzcyh0cmllKVxuICB9XG59XG4vLyBhZGQgYWxpYXNcbmxpYi5jb21waWxlID0gbGliLmJ1aWxkVHJpZVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFwaSxcbiAgbGliXG59XG4iLCAiZXhwb3J0IGNvbnN0IHJlbFBvaW50ZXIgPSBmdW5jdGlvbiAocHRycywgcGFyZW50KSB7XG4gIGlmICghcGFyZW50KSB7XG4gICAgcmV0dXJuIHB0cnNcbiAgfVxuICBwdHJzLmZvckVhY2gocHRyID0+IHtcbiAgICBsZXQgbiA9IHB0clswXVxuICAgIGlmIChwYXJlbnRbbl0pIHtcbiAgICAgIHB0clswXSA9IHBhcmVudFtuXVswXSAvL25cbiAgICAgIHB0clsxXSArPSBwYXJlbnRbbl1bMV0gLy9zdGFydFxuICAgICAgcHRyWzJdICs9IHBhcmVudFtuXVsxXSAvL2VuZFxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHB0cnNcbn1cblxuLy8gbWFrZSBtYXRjaC1yZXN1bHQgcmVsYXRpdmUgdG8gd2hvbGUgZG9jdW1lbnRcbmV4cG9ydCBjb25zdCBmaXhQb2ludGVycyA9IGZ1bmN0aW9uIChyZXMsIHBhcmVudCkge1xuICBsZXQgeyBwdHJzLCBieUdyb3VwIH0gPSByZXNcbiAgcHRycyA9IHJlbFBvaW50ZXIocHRycywgcGFyZW50KVxuICBPYmplY3Qua2V5cyhieUdyb3VwKS5mb3JFYWNoKGsgPT4ge1xuICAgIGJ5R3JvdXBba10gPSByZWxQb2ludGVyKGJ5R3JvdXBba10sIHBhcmVudClcbiAgfSlcbiAgcmV0dXJuIHsgcHRycywgYnlHcm91cCB9XG59XG5cbi8vIHR1cm4gYW55IG1hdGNoYWJsZSBpbnB1dCBpbnRwIGEgbGlzdCBvZiBtYXRjaGVzXG5leHBvcnQgY29uc3QgcGFyc2VSZWdzID0gZnVuY3Rpb24gKHJlZ3MsIG9wdHMsIHdvcmxkKSB7XG4gIGNvbnN0IG9uZSA9IHdvcmxkLm1ldGhvZHMub25lXG4gIGlmICh0eXBlb2YgcmVncyA9PT0gJ251bWJlcicpIHtcbiAgICByZWdzID0gU3RyaW5nKHJlZ3MpXG4gIH1cbiAgLy8gc3VwcG9ydCBwYXJhbSBhcyBzdHJpbmdcbiAgaWYgKHR5cGVvZiByZWdzID09PSAnc3RyaW5nJykge1xuICAgIHJlZ3MgPSBvbmUua2lsbFVuaWNvZGUocmVncywgd29ybGQpXG4gICAgcmVncyA9IG9uZS5wYXJzZU1hdGNoKHJlZ3MsIG9wdHMsIHdvcmxkKVxuICB9XG4gIHJldHVybiByZWdzXG59XG5cbmNvbnN0IGlzT2JqZWN0ID0gdmFsID0+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG4vLyBkaWQgdGhleSBwYXNzLWluIGEgY29tcHJvbWlzZSBvYmplY3Q/XG5leHBvcnQgY29uc3QgaXNWaWV3ID0gdmFsID0+IHZhbCAmJiBpc09iamVjdCh2YWwpICYmIHZhbC5pc1ZpZXcgPT09IHRydWVcblxuZXhwb3J0IGNvbnN0IGlzTmV0ID0gdmFsID0+IHZhbCAmJiBpc09iamVjdCh2YWwpICYmIHZhbC5pc05ldCA9PT0gdHJ1ZVxuIiwgImltcG9ydCB7IGZpeFBvaW50ZXJzLCBpc1ZpZXcsIGlzTmV0LCBwYXJzZVJlZ3MgfSBmcm9tICcuL19saWIuanMnXG5cbmNvbnN0IG1hdGNoID0gZnVuY3Rpb24gKHJlZ3MsIGdyb3VwLCBvcHRzKSB7XG4gIGNvbnN0IG9uZSA9IHRoaXMubWV0aG9kcy5vbmVcbiAgLy8gc3VwcG9ydCBwYXJhbSBhcyB2aWV3IG9iamVjdFxuICBpZiAoaXNWaWV3KHJlZ3MpKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJzZWN0aW9uKHJlZ3MpXG4gIH1cbiAgLy8gc3VwcG9ydCBhIGNvbXBpbGVkIHNldCBvZiBtYXRjaGVzXG4gIGlmIChpc05ldChyZWdzKSkge1xuICAgIHJldHVybiB0aGlzLnN3ZWVwKHJlZ3MsIHsgdGFnZ2VyOiBmYWxzZSB9KS52aWV3LnNldHRsZSgpXG4gIH1cbiAgcmVncyA9IHBhcnNlUmVncyhyZWdzLCBvcHRzLCB0aGlzLndvcmxkKVxuICBsZXQgdG9kbyA9IHsgcmVncywgZ3JvdXAgfVxuICBsZXQgcmVzID0gb25lLm1hdGNoKHRoaXMuZG9jcywgdG9kbywgdGhpcy5fY2FjaGUpXG4gIGxldCB7IHB0cnMsIGJ5R3JvdXAgfSA9IGZpeFBvaW50ZXJzKHJlcywgdGhpcy5mdWxsUG9pbnRlcilcbiAgbGV0IHZpZXcgPSB0aGlzLnRvVmlldyhwdHJzKVxuICB2aWV3Ll9ncm91cHMgPSBieUdyb3VwXG4gIHJldHVybiB2aWV3XG59XG5cbmNvbnN0IG1hdGNoT25lID0gZnVuY3Rpb24gKHJlZ3MsIGdyb3VwLCBvcHRzKSB7XG4gIGNvbnN0IG9uZSA9IHRoaXMubWV0aG9kcy5vbmVcbiAgLy8gc3VwcG9ydCBhdCB2aWV3IGFzIGEgcGFyYW1cbiAgaWYgKGlzVmlldyhyZWdzKSkge1xuICAgIHJldHVybiB0aGlzLmludGVyc2VjdGlvbihyZWdzKS5lcSgwKVxuICB9XG4gIC8vIHN1cHBvcnQgYSBjb21waWxlZCBzZXQgb2YgbWF0Y2hlc1xuICBpZiAoaXNOZXQocmVncykpIHtcbiAgICByZXR1cm4gdGhpcy5zd2VlcChyZWdzLCB7IHRhZ2dlcjogZmFsc2UsIG1hdGNoT25lOiB0cnVlIH0pLnZpZXdcbiAgfVxuICByZWdzID0gcGFyc2VSZWdzKHJlZ3MsIG9wdHMsIHRoaXMud29ybGQpXG4gIGxldCB0b2RvID0geyByZWdzLCBncm91cCwganVzdE9uZTogdHJ1ZSB9XG4gIGxldCByZXMgPSBvbmUubWF0Y2godGhpcy5kb2NzLCB0b2RvLCB0aGlzLl9jYWNoZSlcbiAgbGV0IHsgcHRycywgYnlHcm91cCB9ID0gZml4UG9pbnRlcnMocmVzLCB0aGlzLmZ1bGxQb2ludGVyKVxuICBsZXQgdmlldyA9IHRoaXMudG9WaWV3KHB0cnMpXG4gIHZpZXcuX2dyb3VwcyA9IGJ5R3JvdXBcbiAgcmV0dXJuIHZpZXdcbn1cblxuY29uc3QgaGFzID0gZnVuY3Rpb24gKHJlZ3MsIGdyb3VwLCBvcHRzKSB7XG4gIGNvbnN0IG9uZSA9IHRoaXMubWV0aG9kcy5vbmVcbiAgLy8gc3VwcG9ydCB2aWV3IGFzIGlucHV0XG4gIGlmIChpc1ZpZXcocmVncykpIHtcbiAgICBsZXQgcHRycyA9IHRoaXMuaW50ZXJzZWN0aW9uKHJlZ3MpLmZ1bGxQb2ludGVyXG4gICAgcmV0dXJuIHB0cnMubGVuZ3RoID4gMFxuICB9XG4gIC8vIHN1cHBvcnQgYSBjb21waWxlZCBzZXQgb2YgbWF0Y2hlc1xuICBpZiAoaXNOZXQocmVncykpIHtcbiAgICByZXR1cm4gdGhpcy5zd2VlcChyZWdzLCB7IHRhZ2dlcjogZmFsc2UgfSkudmlldy5mb3VuZFxuICB9XG4gIHJlZ3MgPSBwYXJzZVJlZ3MocmVncywgb3B0cywgdGhpcy53b3JsZClcbiAgbGV0IHRvZG8gPSB7IHJlZ3MsIGdyb3VwLCBqdXN0T25lOiB0cnVlIH1cbiAgbGV0IHB0cnMgPSBvbmUubWF0Y2godGhpcy5kb2NzLCB0b2RvLCB0aGlzLl9jYWNoZSkucHRyc1xuICByZXR1cm4gcHRycy5sZW5ndGggPiAwXG59XG5cbi8vICdpZidcbmNvbnN0IGlmRm4gPSBmdW5jdGlvbiAocmVncywgZ3JvdXAsIG9wdHMpIHtcbiAgY29uc3Qgb25lID0gdGhpcy5tZXRob2RzLm9uZVxuICAvLyBzdXBwb3J0IHZpZXcgYXMgaW5wdXRcbiAgaWYgKGlzVmlldyhyZWdzKSkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcihtID0+IG0uaW50ZXJzZWN0aW9uKHJlZ3MpLmZvdW5kKVxuICB9XG4gIC8vIHN1cHBvcnQgYSBjb21waWxlZCBzZXQgb2YgbWF0Y2hlc1xuICBpZiAoaXNOZXQocmVncykpIHtcbiAgICBsZXQgbSA9IHRoaXMuc3dlZXAocmVncywgeyB0YWdnZXI6IGZhbHNlIH0pLnZpZXcuc2V0dGxlKClcbiAgICByZXR1cm4gdGhpcy5pZihtKSAvL3JlY3Vyc2Ugd2l0aCByZXN1bHRcbiAgfVxuICByZWdzID0gcGFyc2VSZWdzKHJlZ3MsIG9wdHMsIHRoaXMud29ybGQpXG4gIGxldCB0b2RvID0geyByZWdzLCBncm91cCwganVzdE9uZTogdHJ1ZSB9XG4gIGxldCBwdHJzID0gdGhpcy5mdWxsUG9pbnRlclxuICBsZXQgY2FjaGUgPSB0aGlzLl9jYWNoZSB8fCBbXVxuICBwdHJzID0gcHRycy5maWx0ZXIoKHB0ciwgaSkgPT4ge1xuICAgIGxldCBtID0gdGhpcy51cGRhdGUoW3B0cl0pXG4gICAgbGV0IHJlcyA9IG9uZS5tYXRjaChtLmRvY3MsIHRvZG8sIGNhY2hlW2ldKS5wdHJzXG4gICAgcmV0dXJuIHJlcy5sZW5ndGggPiAwXG4gIH0pXG4gIGxldCB2aWV3ID0gdGhpcy51cGRhdGUocHRycylcbiAgLy8gdHJ5IGFuZCByZWNvbnN0cnVjdCB0aGUgY2FjaGVcbiAgaWYgKHRoaXMuX2NhY2hlKSB7XG4gICAgdmlldy5fY2FjaGUgPSBwdHJzLm1hcChwdHIgPT4gY2FjaGVbcHRyWzBdXSlcbiAgfVxuICByZXR1cm4gdmlld1xufVxuXG5jb25zdCBpZk5vID0gZnVuY3Rpb24gKHJlZ3MsIGdyb3VwLCBvcHRzKSB7XG4gIGNvbnN0IHsgbWV0aG9kcyB9ID0gdGhpc1xuICBjb25zdCBvbmUgPSBtZXRob2RzLm9uZVxuICAvLyBzdXBwb3J0IGEgdmlldyBvYmplY3QgYXMgaW5wdXRcbiAgaWYgKGlzVmlldyhyZWdzKSkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcihtID0+ICFtLmludGVyc2VjdGlvbihyZWdzKS5mb3VuZClcbiAgfVxuICAvLyBzdXBwb3J0IGEgY29tcGlsZWQgc2V0IG9mIG1hdGNoZXNcbiAgaWYgKGlzTmV0KHJlZ3MpKSB7XG4gICAgbGV0IG0gPSB0aGlzLnN3ZWVwKHJlZ3MsIHsgdGFnZ2VyOiBmYWxzZSB9KS52aWV3LnNldHRsZSgpXG4gICAgcmV0dXJuIHRoaXMuaWZObyhtKVxuICB9XG4gIC8vIG90aGVyd2lzZSBwYXJzZSB0aGUgbWF0Y2ggc3RyaW5nXG4gIHJlZ3MgPSBwYXJzZVJlZ3MocmVncywgb3B0cywgdGhpcy53b3JsZClcbiAgbGV0IGNhY2hlID0gdGhpcy5fY2FjaGUgfHwgW11cbiAgbGV0IHZpZXcgPSB0aGlzLmZpbHRlcigobSwgaSkgPT4ge1xuICAgIGxldCB0b2RvID0geyByZWdzLCBncm91cCwganVzdE9uZTogdHJ1ZSB9XG4gICAgbGV0IHB0cnMgPSBvbmUubWF0Y2gobS5kb2NzLCB0b2RvLCBjYWNoZVtpXSkucHRyc1xuICAgIHJldHVybiBwdHJzLmxlbmd0aCA9PT0gMFxuICB9KVxuICAvLyB0cnkgdG8gcmVjb25zdHJ1Y3QgdGhlIGNhY2hlXG4gIGlmICh0aGlzLl9jYWNoZSkge1xuICAgIHZpZXcuX2NhY2hlID0gdmlldy5wdHJzLm1hcChwdHIgPT4gY2FjaGVbcHRyWzBdXSlcbiAgfVxuICByZXR1cm4gdmlld1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IG1hdGNoT25lLCBtYXRjaCwgaGFzLCBpZjogaWZGbiwgaWZObyB9XG4iLCAiY29uc3QgYmVmb3JlID0gZnVuY3Rpb24gKHJlZ3MsIGdyb3VwLCBvcHRzKSB7XG4gIGNvbnN0IHsgaW5kZXhOIH0gPSB0aGlzLm1ldGhvZHMub25lLnBvaW50ZXJcbiAgbGV0IHByZSA9IFtdXG4gIGxldCBieU4gPSBpbmRleE4odGhpcy5mdWxsUG9pbnRlcilcbiAgT2JqZWN0LmtleXMoYnlOKS5mb3JFYWNoKGsgPT4ge1xuICAgIC8vIGNoZWNrIG9ubHkgdGhlIGVhcmxpZXN0IG1hdGNoIGluIHRoZSBzZW50ZW5jZVxuICAgIGxldCBmaXJzdCA9IGJ5TltrXS5zb3J0KChhLCBiKSA9PiAoYVsxXSA+IGJbMV0gPyAxIDogLTEpKVswXVxuICAgIGlmIChmaXJzdFsxXSA+IDApIHtcbiAgICAgIHByZS5wdXNoKFtmaXJzdFswXSwgMCwgZmlyc3RbMV1dKVxuICAgIH1cbiAgfSlcbiAgbGV0IHByZVdvcmRzID0gdGhpcy50b1ZpZXcocHJlKVxuICBpZiAoIXJlZ3MpIHtcbiAgICByZXR1cm4gcHJlV29yZHNcbiAgfVxuICByZXR1cm4gcHJlV29yZHMubWF0Y2gocmVncywgZ3JvdXAsIG9wdHMpXG59XG5cbmNvbnN0IGFmdGVyID0gZnVuY3Rpb24gKHJlZ3MsIGdyb3VwLCBvcHRzKSB7XG4gIGNvbnN0IHsgaW5kZXhOIH0gPSB0aGlzLm1ldGhvZHMub25lLnBvaW50ZXJcbiAgbGV0IHBvc3QgPSBbXVxuICBsZXQgYnlOID0gaW5kZXhOKHRoaXMuZnVsbFBvaW50ZXIpXG4gIGxldCBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgT2JqZWN0LmtleXMoYnlOKS5mb3JFYWNoKGsgPT4ge1xuICAgIC8vIGNoZWNrIG9ubHkgdGhlIGxhdGVzdCBtYXRjaCBpbiB0aGUgc2VudGVuY2VcbiAgICBsZXQgbGFzdCA9IGJ5TltrXS5zb3J0KChhLCBiKSA9PiAoYVsxXSA+IGJbMV0gPyAtMSA6IDEpKVswXVxuICAgIGxldCBbbiwgLCBlbmRdID0gbGFzdFxuICAgIGlmIChlbmQgPCBkb2N1bWVudFtuXS5sZW5ndGgpIHtcbiAgICAgIHBvc3QucHVzaChbbiwgZW5kLCBkb2N1bWVudFtuXS5sZW5ndGhdKVxuICAgIH1cbiAgfSlcbiAgbGV0IHBvc3RXb3JkcyA9IHRoaXMudG9WaWV3KHBvc3QpXG4gIGlmICghcmVncykge1xuICAgIHJldHVybiBwb3N0V29yZHNcbiAgfVxuICByZXR1cm4gcG9zdFdvcmRzLm1hdGNoKHJlZ3MsIGdyb3VwLCBvcHRzKVxufVxuXG5jb25zdCBncm93TGVmdCA9IGZ1bmN0aW9uIChyZWdzLCBncm91cCwgb3B0cykge1xuICBpZiAodHlwZW9mIHJlZ3MgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVncyA9IHRoaXMud29ybGQubWV0aG9kcy5vbmUucGFyc2VNYXRjaChyZWdzLCBvcHRzLCB0aGlzLndvcmxkKVxuICB9XG4gIHJlZ3NbcmVncy5sZW5ndGggLSAxXS5lbmQgPSB0cnVlIC8vIGVuc3VyZSBtYXRjaGVzIGFyZSBiZXNpZGUgdXMgXHUyMTkwXG4gIGxldCBwdHJzID0gdGhpcy5mdWxsUG9pbnRlclxuICB0aGlzLmZvckVhY2goKG0sIG4pID0+IHtcbiAgICBsZXQgbW9yZSA9IG0uYmVmb3JlKHJlZ3MsIGdyb3VwKVxuICAgIGlmIChtb3JlLmZvdW5kKSB7XG4gICAgICBsZXQgdGVybXMgPSBtb3JlLnRlcm1zKClcbiAgICAgIHB0cnNbbl1bMV0gLT0gdGVybXMubGVuZ3RoXG4gICAgICBwdHJzW25dWzNdID0gdGVybXMuZG9jc1swXVswXS5pZFxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHRoaXMudXBkYXRlKHB0cnMpXG59XG5cbmNvbnN0IGdyb3dSaWdodCA9IGZ1bmN0aW9uIChyZWdzLCBncm91cCwgb3B0cykge1xuICBpZiAodHlwZW9mIHJlZ3MgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVncyA9IHRoaXMud29ybGQubWV0aG9kcy5vbmUucGFyc2VNYXRjaChyZWdzLCBvcHRzLCB0aGlzLndvcmxkKVxuICB9XG4gIHJlZ3NbMF0uc3RhcnQgPSB0cnVlIC8vIGVuc3VyZSBtYXRjaGVzIGFyZSBiZXNpZGUgdXMgXHUyMTkyXG4gIGxldCBwdHJzID0gdGhpcy5mdWxsUG9pbnRlclxuICB0aGlzLmZvckVhY2goKG0sIG4pID0+IHtcbiAgICBsZXQgbW9yZSA9IG0uYWZ0ZXIocmVncywgZ3JvdXApXG4gICAgaWYgKG1vcmUuZm91bmQpIHtcbiAgICAgIGxldCB0ZXJtcyA9IG1vcmUudGVybXMoKVxuICAgICAgcHRyc1tuXVsyXSArPSB0ZXJtcy5sZW5ndGhcbiAgICAgIHB0cnNbbl1bNF0gPSBudWxsIC8vcmVtb3ZlIGVuZC1pZFxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHRoaXMudXBkYXRlKHB0cnMpXG59XG5cbmNvbnN0IGdyb3cgPSBmdW5jdGlvbiAocmVncywgZ3JvdXAsIG9wdHMpIHtcbiAgcmV0dXJuIHRoaXMuZ3Jvd1JpZ2h0KHJlZ3MsIGdyb3VwLCBvcHRzKS5ncm93TGVmdChyZWdzLCBncm91cCwgb3B0cylcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBiZWZvcmUsIGFmdGVyLCBncm93TGVmdCwgZ3Jvd1JpZ2h0LCBncm93IH1cbiIsICJjb25zdCBjb21iaW5lID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gIHJldHVybiBbbGVmdFswXSwgbGVmdFsxXSwgcmlnaHRbMl1dXG59XG5cbmNvbnN0IGlzQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xufVxuXG5jb25zdCBnZXREb2MgPSAocmVnLCB2aWV3LCBncm91cCkgPT4ge1xuICBpZiAodHlwZW9mIHJlZyA9PT0gJ3N0cmluZycgfHwgaXNBcnJheShyZWcpKSB7XG4gICAgcmV0dXJuIHZpZXcubWF0Y2gocmVnLCBncm91cClcbiAgfVxuICBpZiAoIXJlZykge1xuICAgIHJldHVybiB2aWV3Lm5vbmUoKVxuICB9XG4gIHJldHVybiByZWdcbn1cblxuY29uc3QgYWRkSWRzID0gZnVuY3Rpb24gKHB0ciwgdmlldykge1xuICBsZXQgW24sIHN0YXJ0LCBlbmRdID0gcHRyXG4gIGlmICh2aWV3LmRvY3VtZW50W25dICYmIHZpZXcuZG9jdW1lbnRbbl1bc3RhcnRdKSB7XG4gICAgcHRyWzNdID0gcHRyWzNdIHx8IHZpZXcuZG9jdW1lbnRbbl1bc3RhcnRdLmlkXG4gICAgaWYgKHZpZXcuZG9jdW1lbnRbbl1bZW5kIC0gMV0pIHtcbiAgICAgIHB0cls0XSA9IHB0cls0XSB8fCB2aWV3LmRvY3VtZW50W25dW2VuZCAtIDFdLmlkXG4gICAgfVxuICB9XG4gIHJldHVybiBwdHJcbn1cblxuY29uc3QgbWV0aG9kcyA9IHt9XG4vLyBbYmVmb3JlXSwgW21hdGNoXSwgW2FmdGVyXVxubWV0aG9kcy5zcGxpdE9uID0gZnVuY3Rpb24gKG0sIGdyb3VwKSB7XG4gIGNvbnN0IHsgc3BsaXRBbGwgfSA9IHRoaXMubWV0aG9kcy5vbmUucG9pbnRlclxuICBsZXQgc3BsaXRzID0gZ2V0RG9jKG0sIHRoaXMsIGdyb3VwKS5mdWxsUG9pbnRlclxuICBsZXQgYWxsID0gc3BsaXRBbGwodGhpcy5mdWxsUG9pbnRlciwgc3BsaXRzKVxuICBsZXQgcmVzID0gW11cbiAgYWxsLmZvckVhY2gobyA9PiB7XG4gICAgcmVzLnB1c2goby5wYXNzdGhyb3VnaClcbiAgICByZXMucHVzaChvLmJlZm9yZSlcbiAgICByZXMucHVzaChvLm1hdGNoKVxuICAgIHJlcy5wdXNoKG8uYWZ0ZXIpXG4gIH0pXG4gIHJlcyA9IHJlcy5maWx0ZXIocCA9PiBwKVxuICByZXMgPSByZXMubWFwKHAgPT4gYWRkSWRzKHAsIHRoaXMpKVxuICByZXR1cm4gdGhpcy51cGRhdGUocmVzKVxufVxuXG4vLyBbYmVmb3JlXSwgW21hdGNoIGFmdGVyXVxubWV0aG9kcy5zcGxpdEJlZm9yZSA9IGZ1bmN0aW9uIChtLCBncm91cCkge1xuICBjb25zdCB7IHNwbGl0QWxsIH0gPSB0aGlzLm1ldGhvZHMub25lLnBvaW50ZXJcbiAgbGV0IHNwbGl0cyA9IGdldERvYyhtLCB0aGlzLCBncm91cCkuZnVsbFBvaW50ZXJcbiAgbGV0IGFsbCA9IHNwbGl0QWxsKHRoaXMuZnVsbFBvaW50ZXIsIHNwbGl0cylcbiAgLy8gcmVwYWlyIG1hdGNoZXMgdG8gZmF2b3IgW21hdGNoLCBhZnRlcl1cbiAgLy8gLSBpbnN0ZWFkIG9mIFtiZWZvcmUsIG1hdGNoXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIC8vIG1vdmUgYSBiZWZvcmUgdG8gYSBwcmVjZWRpbmcgYWZ0ZXJcbiAgICBpZiAoIWFsbFtpXS5hZnRlciAmJiBhbGxbaSArIDFdICYmIGFsbFtpICsgMV0uYmVmb3JlKSB7XG4gICAgICAvLyBlbnN1cmUgaXQncyBmcm9tIHRoZSBzYW1lIG9yaWdpbmFsIHNlbnRlbmNlXG4gICAgICBpZiAoYWxsW2ldLm1hdGNoICYmIGFsbFtpXS5tYXRjaFswXSA9PT0gYWxsW2kgKyAxXS5iZWZvcmVbMF0pIHtcbiAgICAgICAgYWxsW2ldLmFmdGVyID0gYWxsW2kgKyAxXS5iZWZvcmVcbiAgICAgICAgZGVsZXRlIGFsbFtpICsgMV0uYmVmb3JlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlcyA9IFtdXG4gIGFsbC5mb3JFYWNoKG8gPT4ge1xuICAgIHJlcy5wdXNoKG8ucGFzc3Rocm91Z2gpXG4gICAgcmVzLnB1c2goby5iZWZvcmUpXG4gICAgLy8gYSwgW3gsIGJdXG4gICAgaWYgKG8ubWF0Y2ggJiYgby5hZnRlcikge1xuICAgICAgcmVzLnB1c2goY29tYmluZShvLm1hdGNoLCBvLmFmdGVyKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYSwgW3hdLCBiXG4gICAgICByZXMucHVzaChvLm1hdGNoKVxuICAgIH1cbiAgfSlcbiAgcmVzID0gcmVzLmZpbHRlcihwID0+IHApXG4gIHJlcyA9IHJlcy5tYXAocCA9PiBhZGRJZHMocCwgdGhpcykpXG4gIHJldHVybiB0aGlzLnVwZGF0ZShyZXMpXG59XG5cbi8vIFtiZWZvcmUgbWF0Y2hdLCBbYWZ0ZXJdXG5tZXRob2RzLnNwbGl0QWZ0ZXIgPSBmdW5jdGlvbiAobSwgZ3JvdXApIHtcbiAgY29uc3QgeyBzcGxpdEFsbCB9ID0gdGhpcy5tZXRob2RzLm9uZS5wb2ludGVyXG4gIGxldCBzcGxpdHMgPSBnZXREb2MobSwgdGhpcywgZ3JvdXApLmZ1bGxQb2ludGVyXG4gIGxldCBhbGwgPSBzcGxpdEFsbCh0aGlzLmZ1bGxQb2ludGVyLCBzcGxpdHMpXG4gIGxldCByZXMgPSBbXVxuICBhbGwuZm9yRWFjaChvID0+IHtcbiAgICByZXMucHVzaChvLnBhc3N0aHJvdWdoKVxuICAgIGlmIChvLmJlZm9yZSAmJiBvLm1hdGNoKSB7XG4gICAgICByZXMucHVzaChjb21iaW5lKG8uYmVmb3JlLCBvLm1hdGNoKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnB1c2goby5iZWZvcmUpXG4gICAgICByZXMucHVzaChvLm1hdGNoKVxuICAgIH1cbiAgICByZXMucHVzaChvLmFmdGVyKVxuICB9KVxuICByZXMgPSByZXMuZmlsdGVyKHAgPT4gcClcbiAgcmVzID0gcmVzLm1hcChwID0+IGFkZElkcyhwLCB0aGlzKSlcbiAgcmV0dXJuIHRoaXMudXBkYXRlKHJlcylcbn1cbm1ldGhvZHMuc3BsaXQgPSBtZXRob2RzLnNwbGl0QWZ0ZXJcblxuZXhwb3J0IGRlZmF1bHQgbWV0aG9kc1xuIiwgIi8vIGNoZWNrIGlmIHR3byBwb2ludGVycyBhcmUgcGVyZmVjdGx5IGNvbnNlY3V0aXZlXG5jb25zdCBpc05laWdoYm91ciA9IGZ1bmN0aW9uIChwdHJMLCBwdHJSKSB7XG4gIC8vIHZhbGlkYXRlXG4gIGlmICghcHRyTCB8fCAhcHRyUikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8vIHNhbWUgc2VudGVuY2VcbiAgaWYgKHB0ckxbMF0gIT09IHB0clJbMF0pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBlbnN1cmUgUiBzdGFydHMgd2hlcmUgTCBlbmRzXG4gIHJldHVybiBwdHJMWzJdID09PSBwdHJSWzFdXG59XG5cbi8vIGpvaW4gdHdvIG5laWdoYm91cmluZyB3b3JkcywgaWYgdGhleSBib3RoIG1hdGNoXG5jb25zdCBtZXJnZUlmID0gZnVuY3Rpb24gKGRvYywgbE1hdGNoLCByTWF0Y2gpIHtcbiAgY29uc3Qgd29ybGQgPSBkb2Mud29ybGRcbiAgY29uc3QgcGFyc2VNYXRjaCA9IHdvcmxkLm1ldGhvZHMub25lLnBhcnNlTWF0Y2hcbiAgbE1hdGNoID0gbE1hdGNoIHx8ICcuJCcgLy9kZWZhdWx0c1xuICByTWF0Y2ggPSByTWF0Y2ggfHwgJ14uJ1xuICBsZXQgbGVmdE1hdGNoID0gcGFyc2VNYXRjaChsTWF0Y2gsIHt9LCB3b3JsZClcbiAgbGV0IHJpZ2h0TWF0Y2ggPSBwYXJzZU1hdGNoKHJNYXRjaCwge30sIHdvcmxkKVxuICAvLyBlbnN1cmUgZW5kLXJlcXVpcmVtZW50IHRvIGxlZnQtbWF0Y2gsIHN0YXJ0LXJlcXVpcmVtbnRzIHRvIHJpZ2h0IG1hdGNoXG4gIGxlZnRNYXRjaFtsZWZ0TWF0Y2gubGVuZ3RoIC0gMV0uZW5kID0gdHJ1ZVxuICByaWdodE1hdGNoWzBdLnN0YXJ0ID0gdHJ1ZVxuICAvLyBsZXQncyBnZXQgZ29pbmcuXG4gIGxldCBwdHJzID0gZG9jLmZ1bGxQb2ludGVyXG4gIGxldCByZXMgPSBbcHRyc1swXV1cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwdHJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgbGV0IHB0ckwgPSByZXNbcmVzLmxlbmd0aCAtIDFdXG4gICAgbGV0IHB0clIgPSBwdHJzW2ldXG4gICAgbGV0IGxlZnQgPSBkb2MudXBkYXRlKFtwdHJMXSlcbiAgICBsZXQgcmlnaHQgPSBkb2MudXBkYXRlKFtwdHJSXSlcbiAgICAvLyBzaG91bGQgd2UgbWFyZ2UgbGVmdCtyaWdodD9cbiAgICBpZiAoaXNOZWlnaGJvdXIocHRyTCwgcHRyUikgJiYgbGVmdC5oYXMobGVmdE1hdGNoKSAmJiByaWdodC5oYXMocmlnaHRNYXRjaCkpIHtcbiAgICAgIC8vIG1lcmdlIHJpZ2h0IHB0ciBpbnRvIGV4aXN0aW5nIHJlc3VsdFxuICAgICAgcmVzW3Jlcy5sZW5ndGggLSAxXSA9IFtwdHJMWzBdLCBwdHJMWzFdLCBwdHJSWzJdLCBwdHJMWzNdLCBwdHJSWzRdXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMucHVzaChwdHJSKVxuICAgIH1cbiAgfVxuICAvLyByZXR1cm4gbmV3IHBvaW50ZXJzXG4gIHJldHVybiBkb2MudXBkYXRlKHJlcylcbn1cblxuY29uc3QgbWV0aG9kcyA9IHtcbiAgLy8gIG1lcmdlIG9ubHkgaWYgY29uZGl0aW9ucyBhcmUgbWV0XG4gIGpvaW5JZjogZnVuY3Rpb24gKGxNYXRjaCwgck1hdGNoKSB7XG4gICAgcmV0dXJuIG1lcmdlSWYodGhpcywgbE1hdGNoLCByTWF0Y2gpXG4gIH0sXG4gIC8vIG1lcmdlIGFsbCBuZWlnaGJvdXJpbmcgbWF0Y2hlc1xuICBqb2luOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG1lcmdlSWYodGhpcylcbiAgfSxcbn1cbmV4cG9ydCBkZWZhdWx0IG1ldGhvZHNcbiIsICJpbXBvcnQgbWF0Y2ggZnJvbSAnLi9tYXRjaC5qcydcbmltcG9ydCBsb29rYXJvdW5kIGZyb20gJy4vbG9va2Fyb3VuZC5qcydcbmltcG9ydCBzcGxpdCBmcm9tICcuL3NwbGl0LmpzJ1xuaW1wb3J0IGpvaW4gZnJvbSAnLi9qb2luLmpzJ1xuXG5jb25zdCBtZXRob2RzID0gT2JqZWN0LmFzc2lnbih7fSwgbWF0Y2gsIGxvb2thcm91bmQsIHNwbGl0LCBqb2luKVxuLy8gYWxpYXNlc1xubWV0aG9kcy5sb29rQmVoaW5kID0gbWV0aG9kcy5iZWZvcmVcbm1ldGhvZHMubG9va0JlZm9yZSA9IG1ldGhvZHMuYmVmb3JlXG5cbm1ldGhvZHMubG9va0FoZWFkID0gbWV0aG9kcy5hZnRlclxubWV0aG9kcy5sb29rQWZ0ZXIgPSBtZXRob2RzLmFmdGVyXG5cbm1ldGhvZHMubm90SWYgPSBtZXRob2RzLmlmTm9cbmNvbnN0IG1hdGNoQVBJID0gZnVuY3Rpb24gKFZpZXcpIHtcbiAgT2JqZWN0LmFzc2lnbihWaWV3LnByb3RvdHlwZSwgbWV0aG9kcylcbn1cbmV4cG9ydCBkZWZhdWx0IG1hdGNoQVBJXG4iLCAiLy8gbWF0Y2ggICdmb28gL3llcy8nIGFuZCBub3QgJ2Zvby9uby9iYXInXG5jb25zdCBieVNsYXNoZXMgPSAvKD86XnxcXHMpKFshW15dKig/OjxbXjxdKj4pP1xcLy4qP1teXFxcXC9dXFwvWz9cXF0rKiR+XSopKD86XFxzfCQpL1xuLy8gbWF0Y2ggJyh5ZXMpIGJ1dCBub3QgZm9vKG5vKWJhcidcbmNvbnN0IGJ5UGFyZW50aGVzZXMgPSAvKFshflteXSooPzo8W148XSo+KT9cXChbXildK1teXFxcXCldXFwpWz9cXF0rKiR+XSopKD86XFxzfCQpL1xuLy8gb2theVxuY29uc3QgYnlXb3JkID0gLyAvZ1xuXG5jb25zdCBpc0Jsb2NrID0gc3RyID0+IHtcbiAgcmV0dXJuIC9eWyFbXl0qKDxbXjxdKj4pP1xcKC8udGVzdChzdHIpICYmIC9cXClbP1xcXSsqJH5dKiQvLnRlc3Qoc3RyKVxufVxuY29uc3QgaXNSZWcgPSBzdHIgPT4ge1xuICByZXR1cm4gL15bIVteXSooPFtePF0qPik/XFwvLy50ZXN0KHN0cikgJiYgL1xcL1s/XFxdKyokfl0qJC8udGVzdChzdHIpXG59XG5cbmNvbnN0IGNsZWFuVXAgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyciA9IGFyci5tYXAoc3RyID0+IHN0ci50cmltKCkpXG4gIGFyciA9IGFyci5maWx0ZXIoc3RyID0+IHN0cilcbiAgcmV0dXJuIGFyclxufVxuXG5jb25zdCBwYXJzZUJsb2NrcyA9IGZ1bmN0aW9uICh0eHQpIHtcbiAgLy8gcGFyc2UgYnkgL3JlZ2V4LyBmaXJzdFxuICBsZXQgYXJyID0gdHh0LnNwbGl0KGJ5U2xhc2hlcylcbiAgbGV0IHJlcyA9IFtdXG4gIC8vIHBhcnNlIGJ5IChibG9ja3MpLCBuZXh0XG4gIGFyci5mb3JFYWNoKHN0ciA9PiB7XG4gICAgaWYgKGlzUmVnKHN0cikpIHtcbiAgICAgIHJlcy5wdXNoKHN0cilcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXMgPSByZXMuY29uY2F0KHN0ci5zcGxpdChieVBhcmVudGhlc2VzKSlcbiAgfSlcbiAgcmVzID0gY2xlYW5VcChyZXMpXG4gIC8vIHNwbGl0IGJ5IHNwYWNlcywgbm93XG4gIGxldCBmaW5hbCA9IFtdXG4gIHJlcy5mb3JFYWNoKHN0ciA9PiB7XG4gICAgaWYgKGlzQmxvY2soc3RyKSkge1xuICAgICAgZmluYWwucHVzaChzdHIpXG4gICAgfSBlbHNlIGlmIChpc1JlZyhzdHIpKSB7XG4gICAgICBmaW5hbC5wdXNoKHN0cilcbiAgICB9IGVsc2Uge1xuICAgICAgZmluYWwgPSBmaW5hbC5jb25jYXQoc3RyLnNwbGl0KGJ5V29yZCkpXG4gICAgfVxuICB9KVxuICBmaW5hbCA9IGNsZWFuVXAoZmluYWwpXG4gIHJldHVybiBmaW5hbFxufVxuZXhwb3J0IGRlZmF1bHQgcGFyc2VCbG9ja3NcbiIsICJjb25zdCBoYXNNaW5NYXggPSAvXFx7KFswLTldKyk/KCwgKlswLTldKik/XFx9L1xuY29uc3QgYW5kU2lnbiA9IC8mJi9cbi8vIGNvbnN0IGhhc0Rhc2ggPSAvXFxwe0xldHRlcn1bLVx1MjAxM1x1MjAxNF1cXHB7TGV0dGVyfS91XG5jb25zdCBjYXB0dXJlTmFtZSA9IG5ldyBSZWdFeHAoL148XFxzKihcXFMrKVxccyo+Lylcbi8qIGJyZWFrLWRvd24gYSBtYXRjaCBleHByZXNzaW9uIGludG8gdGhpczpcbntcbiAgd29yZDonJyxcbiAgdGFnOicnLFxuICByZWdleDonJyxcblxuICBzdGFydDpmYWxzZSxcbiAgZW5kOmZhbHNlLFxuICBuZWdhdGl2ZTpmYWxzZSxcbiAgYW55dGhpbmc6ZmFsc2UsXG4gIGdyZWVkeTpmYWxzZSxcbiAgb3B0aW9uYWw6ZmFsc2UsXG5cbiAgbmFtZWQ6JycsXG4gIGNob2ljZXM6W10sXG59XG4qL1xuY29uc3QgdGl0bGVDYXNlID0gc3RyID0+IHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSlcbmNvbnN0IGVuZCA9IChzdHIpID0+IHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpXG5jb25zdCBzdGFydCA9IChzdHIpID0+IHN0ci5jaGFyQXQoMClcbmNvbnN0IHN0cmlwU3RhcnQgPSAoc3RyKSA9PiBzdHIuc3Vic3RyaW5nKDEpXG5jb25zdCBzdHJpcEVuZCA9IChzdHIpID0+IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDEpXG5cbmNvbnN0IHN0cmlwQm90aCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgc3RyID0gc3RyaXBTdGFydChzdHIpXG4gIHN0ciA9IHN0cmlwRW5kKHN0cilcbiAgcmV0dXJuIHN0clxufVxuLy9cbmNvbnN0IHBhcnNlVG9rZW4gPSBmdW5jdGlvbiAodywgb3B0cykge1xuICBsZXQgb2JqID0ge31cbiAgLy9jb2xsZWN0IGFueSBmbGFncyAoZG8gaXQgdHdpY2UpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSArPSAxKSB7XG4gICAgLy9lbmQtZmxhZ1xuICAgIGlmIChlbmQodykgPT09ICckJykge1xuICAgICAgb2JqLmVuZCA9IHRydWVcbiAgICAgIHcgPSBzdHJpcEVuZCh3KVxuICAgIH1cbiAgICAvL2Zyb250LWZsYWdcbiAgICBpZiAoc3RhcnQodykgPT09ICdeJykge1xuICAgICAgb2JqLnN0YXJ0ID0gdHJ1ZVxuICAgICAgdyA9IHN0cmlwU3RhcnQodylcbiAgICB9XG4gICAgaWYgKGVuZCh3KSA9PT0gJz8nKSB7XG4gICAgICBvYmoub3B0aW9uYWwgPSB0cnVlXG4gICAgICB3ID0gc3RyaXBFbmQodylcbiAgICB9XG4gICAgLy9jYXB0dXJlIGdyb3VwICh0aGlzIG9uZSBjYW4gc3BhbiBtdWx0aXBsZS10ZXJtcylcbiAgICBpZiAoc3RhcnQodykgPT09ICdbJyB8fCBlbmQodykgPT09ICddJykge1xuICAgICAgb2JqLmdyb3VwID0gbnVsbFxuICAgICAgaWYgKHN0YXJ0KHcpID09PSAnWycpIHtcbiAgICAgICAgb2JqLmdyb3VwU3RhcnQgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoZW5kKHcpID09PSAnXScpIHtcbiAgICAgICAgb2JqLmdyb3VwRW5kID0gdHJ1ZVxuICAgICAgfVxuICAgICAgdyA9IHcucmVwbGFjZSgvXlxcWy8sICcnKVxuICAgICAgdyA9IHcucmVwbGFjZSgvXFxdJC8sICcnKVxuICAgICAgLy8gVXNlIGNhcHR1cmUgZ3JvdXAgbmFtZVxuICAgICAgaWYgKHN0YXJ0KHcpID09PSAnPCcpIHtcbiAgICAgICAgY29uc3QgcmVzID0gY2FwdHVyZU5hbWUuZXhlYyh3KVxuICAgICAgICBpZiAocmVzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgb2JqLmdyb3VwID0gcmVzWzFdXG4gICAgICAgICAgdyA9IHcucmVwbGFjZShyZXNbMF0sICcnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vYmFjay1mbGFnc1xuICAgIGlmIChlbmQodykgPT09ICcrJykge1xuICAgICAgb2JqLmdyZWVkeSA9IHRydWVcbiAgICAgIHcgPSBzdHJpcEVuZCh3KVxuICAgIH1cbiAgICBpZiAodyAhPT0gJyonICYmIGVuZCh3KSA9PT0gJyonICYmIHcgIT09ICdcXFxcKicpIHtcbiAgICAgIG9iai5ncmVlZHkgPSB0cnVlXG4gICAgICB3ID0gc3RyaXBFbmQodylcbiAgICB9XG4gICAgaWYgKHN0YXJ0KHcpID09PSAnIScpIHtcbiAgICAgIG9iai5uZWdhdGl2ZSA9IHRydWVcbiAgICAgIC8vIG9iai5vcHRpb25hbCA9IHRydWVcbiAgICAgIHcgPSBzdHJpcFN0YXJ0KHcpXG4gICAgfVxuICAgIC8vc29mdC1tYXRjaFxuICAgIGlmIChzdGFydCh3KSA9PT0gJ34nICYmIGVuZCh3KSA9PT0gJ34nICYmIHcubGVuZ3RoID4gMikge1xuICAgICAgdyA9IHN0cmlwQm90aCh3KVxuICAgICAgb2JqLmZ1enp5ID0gdHJ1ZVxuICAgICAgb2JqLm1pbiA9IG9wdHMuZnV6enkgfHwgMC44NVxuICAgICAgaWYgKC9cXCgvLnRlc3QodykgPT09IGZhbHNlKSB7XG4gICAgICAgIG9iai53b3JkID0gd1xuICAgICAgICByZXR1cm4gb2JqXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9yZWdleFxuICAgIGlmIChzdGFydCh3KSA9PT0gJy8nICYmIGVuZCh3KSA9PT0gJy8nKSB7XG4gICAgICB3ID0gc3RyaXBCb3RoKHcpXG4gICAgICBpZiAob3B0cy5jYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgIG9iai51c2UgPSAndGV4dCdcbiAgICAgIH1cbiAgICAgIG9iai5yZWdleCA9IG5ldyBSZWdFeHAodykgLy9wb3RlbnRpYWwgdnVsbiAtIHNlY3VyaXR5L2RldGVjdC1ub24tbGl0ZXJhbC1yZWdleHBcbiAgICAgIHJldHVybiBvYmpcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvb3sxLDl9XG4gICAgaWYgKGhhc01pbk1heC50ZXN0KHcpID09PSB0cnVlKSB7XG4gICAgICB3ID0gdy5yZXBsYWNlKGhhc01pbk1heCwgKF9hLCBiLCBjKSA9PiB7XG4gICAgICAgIGlmIChjID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyAnezN9J1x0RXhhY3RseSB0aHJlZSB0aW1lc1xuICAgICAgICAgIG9iai5taW4gPSBOdW1iZXIoYilcbiAgICAgICAgICBvYmoubWF4ID0gTnVtYmVyKGIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYyA9IGMucmVwbGFjZSgvLCAqLywgJycpXG4gICAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gJ3ssOX0nIGltcGxpZWQgemVybyBtaW5cbiAgICAgICAgICAgIG9iai5taW4gPSAwXG4gICAgICAgICAgICBvYmoubWF4ID0gTnVtYmVyKGMpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICd7Miw0fScgVHdvIHRvIGZvdXIgdGltZXNcbiAgICAgICAgICAgIG9iai5taW4gPSBOdW1iZXIoYilcbiAgICAgICAgICAgIC8vICd7Myx9JyBUaHJlZSBvciBtb3JlIHRpbWVzXG4gICAgICAgICAgICBvYmoubWF4ID0gTnVtYmVyKGMgfHwgOTk5KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB1c2Ugc2FtZSBtZXRob2QgYXMgJysnXG4gICAgICAgIG9iai5ncmVlZHkgPSB0cnVlXG4gICAgICAgIC8vIDAgYXMgbWluIG1lYW5zIHRoZSBzYW1lIGFzICc/J1xuICAgICAgICBpZiAoIW9iai5taW4pIHtcbiAgICAgICAgICBvYmoub3B0aW9uYWwgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vd3JhcHBlZC1mbGFnc1xuICAgIGlmIChzdGFydCh3KSA9PT0gJygnICYmIGVuZCh3KSA9PT0gJyknKSB7XG4gICAgICAvLyBzdXBwb3J0IChvbmUgJiYgdHdvKVxuICAgICAgaWYgKGFuZFNpZ24udGVzdCh3KSkge1xuICAgICAgICBvYmouY2hvaWNlcyA9IHcuc3BsaXQoYW5kU2lnbilcbiAgICAgICAgb2JqLm9wZXJhdG9yID0gJ2FuZCdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iai5jaG9pY2VzID0gdy5zcGxpdCgnfCcpXG4gICAgICAgIG9iai5vcGVyYXRvciA9ICdvcidcbiAgICAgIH1cbiAgICAgIC8vcmVtb3ZlICcoJyBhbmQgJyknXG4gICAgICBvYmouY2hvaWNlc1swXSA9IHN0cmlwU3RhcnQob2JqLmNob2ljZXNbMF0pXG4gICAgICBsZXQgbGFzdCA9IG9iai5jaG9pY2VzLmxlbmd0aCAtIDFcbiAgICAgIG9iai5jaG9pY2VzW2xhc3RdID0gc3RyaXBFbmQob2JqLmNob2ljZXNbbGFzdF0pXG4gICAgICAvLyBjbGVhbiB1cCB0aGUgcmVzdWx0c1xuICAgICAgb2JqLmNob2ljZXMgPSBvYmouY2hvaWNlcy5tYXAocyA9PiBzLnRyaW0oKSlcbiAgICAgIG9iai5jaG9pY2VzID0gb2JqLmNob2ljZXMuZmlsdGVyKHMgPT4gcylcbiAgICAgIC8vcmVjdXJzaW9uIGFsZXJ0IVxuICAgICAgb2JqLmNob2ljZXMgPSBvYmouY2hvaWNlcy5tYXAoc3RyID0+IHtcbiAgICAgICAgcmV0dXJuIHN0ci5zcGxpdCgvIC9nKS5tYXAocyA9PiBwYXJzZVRva2VuKHMsIG9wdHMpKVxuICAgICAgfSlcbiAgICAgIHcgPSAnJ1xuICAgIH1cblxuICAgIC8vcm9vdC9zZW5zZSBvdmVybG9hZGVkXG4gICAgaWYgKHN0YXJ0KHcpID09PSAneycgJiYgZW5kKHcpID09PSAnfScpIHtcbiAgICAgIHcgPSBzdHJpcEJvdGgodylcbiAgICAgIC8vIG9iai5zZW5zZSA9IHdcbiAgICAgIG9iai5yb290ID0gd1xuICAgICAgaWYgKC9cXC8vLnRlc3QodykpIHtcbiAgICAgICAgbGV0IHNwbGl0ID0gb2JqLnJvb3Quc3BsaXQoL1xcLy8pXG4gICAgICAgIG9iai5yb290ID0gc3BsaXRbMF1cbiAgICAgICAgb2JqLnBvcyA9IHNwbGl0WzFdXG4gICAgICAgIGlmIChvYmoucG9zID09PSAnYWRqJykge1xuICAgICAgICAgIG9iai5wb3MgPSAnQWRqZWN0aXZlJ1xuICAgICAgICB9XG4gICAgICAgIC8vIHRpdGxlY2FzZVxuICAgICAgICBvYmoucG9zID0gb2JqLnBvcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG9iai5wb3Muc3Vic3RyKDEpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLy8gYWRkIHNlbnNlLW51bWJlciB0b29cbiAgICAgICAgaWYgKHNwbGl0WzJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvYmouc2Vuc2UgPSBzcGxpdFsyXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqXG4gICAgfVxuICAgIC8vY2h1bmtzXG4gICAgaWYgKHN0YXJ0KHcpID09PSAnPCcgJiYgZW5kKHcpID09PSAnPicpIHtcbiAgICAgIHcgPSBzdHJpcEJvdGgodylcbiAgICAgIG9iai5jaHVuayA9IHRpdGxlQ2FzZSh3KVxuICAgICAgb2JqLmdyZWVkeSA9IHRydWVcbiAgICAgIHJldHVybiBvYmpcbiAgICB9XG4gICAgaWYgKHN0YXJ0KHcpID09PSAnJScgJiYgZW5kKHcpID09PSAnJScpIHtcbiAgICAgIHcgPSBzdHJpcEJvdGgodylcbiAgICAgIG9iai5zd2l0Y2ggPSB3XG4gICAgICByZXR1cm4gb2JqXG4gICAgfVxuICB9XG4gIC8vZG8gdGhlIGFjdHVhbCB0b2tlbiBjb250ZW50XG4gIGlmIChzdGFydCh3KSA9PT0gJyMnKSB7XG4gICAgb2JqLnRhZyA9IHN0cmlwU3RhcnQodylcbiAgICBvYmoudGFnID0gdGl0bGVDYXNlKG9iai50YWcpXG4gICAgcmV0dXJuIG9ialxuICB9XG4gIC8vZHluYW1pYyBmdW5jdGlvbiBvbiBhIHRlcm0gb2JqZWN0XG4gIGlmIChzdGFydCh3KSA9PT0gJ0AnKSB7XG4gICAgb2JqLm1ldGhvZCA9IHN0cmlwU3RhcnQodylcbiAgICByZXR1cm4gb2JqXG4gIH1cbiAgaWYgKHcgPT09ICcuJykge1xuICAgIG9iai5hbnl0aGluZyA9IHRydWVcbiAgICByZXR1cm4gb2JqXG4gIH1cbiAgLy9zdXBwb3J0IGFsb25lLWFzdHJpeFxuICBpZiAodyA9PT0gJyonKSB7XG4gICAgb2JqLmFueXRoaW5nID0gdHJ1ZVxuICAgIG9iai5ncmVlZHkgPSB0cnVlXG4gICAgb2JqLm9wdGlvbmFsID0gdHJ1ZVxuICAgIHJldHVybiBvYmpcbiAgfVxuICBpZiAodykge1xuICAgIC8vc29tZWhvdyBoYW5kbGUgZW5jb2RlZC1jaGFycz9cbiAgICB3ID0gdy5yZXBsYWNlKCdcXFxcKicsICcqJylcbiAgICB3ID0gdy5yZXBsYWNlKCdcXFxcLicsICcuJylcbiAgICBpZiAob3B0cy5jYXNlU2Vuc2l0aXZlKSB7XG4gICAgICBvYmoudXNlID0gJ3RleHQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHcgPSB3LnRvTG93ZXJDYXNlKClcbiAgICB9XG4gICAgb2JqLndvcmQgPSB3XG4gIH1cbiAgcmV0dXJuIG9ialxufVxuZXhwb3J0IGRlZmF1bHQgcGFyc2VUb2tlblxuIiwgImNvbnN0IGhhc0Rhc2ggPSAvW2EtejAtOV1bLVx1MjAxM1x1MjAxNF1bYS16XS9pXG5cbi8vIG1hdGNoICdyZS1kbycgLT4gWydyZScsJ2RvJ11cbmNvbnN0IHNwbGl0SHlwaGVucyA9IGZ1bmN0aW9uIChyZWdzLCB3b3JsZCkge1xuICBsZXQgcHJlZml4ZXMgPSB3b3JsZC5tb2RlbC5vbmUucHJlZml4ZXNcbiAgZm9yIChsZXQgaSA9IHJlZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICBsZXQgcmVnID0gcmVnc1tpXVxuICAgIGlmIChyZWcud29yZCAmJiBoYXNEYXNoLnRlc3QocmVnLndvcmQpKSB7XG4gICAgICBsZXQgd29yZHMgPSByZWcud29yZC5zcGxpdCgvWy1cdTIwMTNcdTIwMTRdL2cpXG4gICAgICAvLyBkb24ndCBzcGxpdCAncmUtY3ljbGUnLCBldGNcbiAgICAgIGlmIChwcmVmaXhlcy5oYXNPd25Qcm9wZXJ0eSh3b3Jkc1swXSkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHdvcmRzID0gd29yZHMuZmlsdGVyKHcgPT4gdykucmV2ZXJzZSgpXG4gICAgICByZWdzLnNwbGljZShpLCAxKVxuICAgICAgd29yZHMuZm9yRWFjaCh3ID0+IHtcbiAgICAgICAgbGV0IG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHJlZylcbiAgICAgICAgb2JqLndvcmQgPSB3XG4gICAgICAgIHJlZ3Muc3BsaWNlKGksIDAsIG9iailcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIHJldHVybiByZWdzXG59XG5leHBvcnQgZGVmYXVsdCBzcGxpdEh5cGhlbnMiLCAiXG4vLyBhZGQgYWxsIGNvbmp1Z2F0aW9ucyBvZiB0aGlzIHZlcmJcbmNvbnN0IGFkZFZlcmJzID0gZnVuY3Rpb24gKHRva2VuLCB3b3JsZCkge1xuICBsZXQgeyBhbGwgfSA9IHdvcmxkLm1ldGhvZHMudHdvLnRyYW5zZm9ybS52ZXJiIHx8IHt9XG4gIGxldCBzdHIgPSB0b2tlbi5yb290XG4gIGlmICghYWxsKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIGFsbChzdHIsIHdvcmxkLm1vZGVsKVxufVxuXG4vLyBhZGQgYWxsIGluZmxlY3Rpb25zIG9mIHRoaXMgbm91blxuY29uc3QgYWRkTm91biA9IGZ1bmN0aW9uICh0b2tlbiwgd29ybGQpIHtcbiAgbGV0IHsgYWxsIH0gPSB3b3JsZC5tZXRob2RzLnR3by50cmFuc2Zvcm0ubm91biB8fCB7fVxuICBpZiAoIWFsbCkge1xuICAgIHJldHVybiBbdG9rZW4ucm9vdF1cbiAgfVxuICByZXR1cm4gYWxsKHRva2VuLnJvb3QsIHdvcmxkLm1vZGVsKVxufVxuXG4vLyBhZGQgYWxsIGluZmxlY3Rpb25zIG9mIHRoaXMgYWRqZWN0aXZlXG5jb25zdCBhZGRBZGplY3RpdmUgPSBmdW5jdGlvbiAodG9rZW4sIHdvcmxkKSB7XG4gIGxldCB7IGFsbCB9ID0gd29ybGQubWV0aG9kcy50d28udHJhbnNmb3JtLmFkamVjdGl2ZSB8fCB7fVxuICBpZiAoIWFsbCkge1xuICAgIHJldHVybiBbdG9rZW4ucm9vdF1cbiAgfVxuICByZXR1cm4gYWxsKHRva2VuLnJvb3QsIHdvcmxkLm1vZGVsKVxufVxuXG4vLyB0dXJuICd7d2Fsa30nIGludG8gJ3dhbGtpbmcnLCAnd2Fsa2VkJywgZXRjXG5jb25zdCBpbmZsZWN0Um9vdCA9IGZ1bmN0aW9uIChyZWdzLCB3b3JsZCkge1xuICAvLyBkbyB3ZSBoYXZlIGNvbXByb21pc2UvdHdvP1xuICByZWdzID0gcmVncy5tYXAodG9rZW4gPT4ge1xuICAgIC8vIGEgcmVnIHRvIGNvbnZlcnQgJ3tmb299J1xuICAgIGlmICh0b2tlbi5yb290KSB7XG4gICAgICAvLyBjaGVjayBpZiBjb21wcm9taXNlL3R3byBpcyBsb2FkZWRcbiAgICAgIGlmICh3b3JsZC5tZXRob2RzLnR3byAmJiB3b3JsZC5tZXRob2RzLnR3by50cmFuc2Zvcm0pIHtcbiAgICAgICAgbGV0IGNob2ljZXMgPSBbXVxuICAgICAgICAvLyBoYXZlIGV4cGxpY2l0bHkgc2V0IGZyb20gUE9TIC0gJ3tzd2VldC9hZGplY3RpdmV9J1xuICAgICAgICBpZiAodG9rZW4ucG9zKSB7XG4gICAgICAgICAgaWYgKHRva2VuLnBvcyA9PT0gJ1ZlcmInKSB7XG4gICAgICAgICAgICBjaG9pY2VzID0gY2hvaWNlcy5jb25jYXQoYWRkVmVyYnModG9rZW4sIHdvcmxkKSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnBvcyA9PT0gJ05vdW4nKSB7XG4gICAgICAgICAgICBjaG9pY2VzID0gY2hvaWNlcy5jb25jYXQoYWRkTm91bih0b2tlbiwgd29ybGQpKVxuICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4ucG9zID09PSAnQWRqZWN0aXZlJykge1xuICAgICAgICAgICAgY2hvaWNlcyA9IGNob2ljZXMuY29uY2F0KGFkZEFkamVjdGl2ZSh0b2tlbiwgd29ybGQpKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkbyB2ZXJiL25vdW4vYWRqIGJ5IGRlZmF1bHRcbiAgICAgICAgICBjaG9pY2VzID0gY2hvaWNlcy5jb25jYXQoYWRkVmVyYnModG9rZW4sIHdvcmxkKSlcbiAgICAgICAgICBjaG9pY2VzID0gY2hvaWNlcy5jb25jYXQoYWRkTm91bih0b2tlbiwgd29ybGQpKVxuICAgICAgICAgIGNob2ljZXMgPSBjaG9pY2VzLmNvbmNhdChhZGRBZGplY3RpdmUodG9rZW4sIHdvcmxkKSlcbiAgICAgICAgfVxuICAgICAgICBjaG9pY2VzID0gY2hvaWNlcy5maWx0ZXIoc3RyID0+IHN0cilcbiAgICAgICAgaWYgKGNob2ljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRva2VuLm9wZXJhdG9yID0gJ29yJ1xuICAgICAgICAgIHRva2VuLmZhc3RPciA9IG5ldyBTZXQoY2hvaWNlcylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgbm8gY29tcHJvbWlzZS90d28sIGRyb3AgZG93biBpbnRvICdtYWNoaW5lJyBsb29rdXBcbiAgICAgICAgdG9rZW4ubWFjaGluZSA9IHRva2VuLnJvb3RcbiAgICAgICAgZGVsZXRlIHRva2VuLmlkXG4gICAgICAgIGRlbGV0ZSB0b2tlbi5yb290XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b2tlblxuICB9KVxuXG4gIHJldHVybiByZWdzXG59XG5leHBvcnQgZGVmYXVsdCBpbmZsZWN0Um9vdCIsICIvLyBuYW1lIGFueSBbdW5uYW1lZF0gY2FwdHVyZS1ncm91cHMgd2l0aCBhIG51bWJlclxuY29uc3QgbmFtZUdyb3VwcyA9IGZ1bmN0aW9uIChyZWdzKSB7XG4gIGxldCBpbmRleCA9IDBcbiAgbGV0IGluR3JvdXAgPSBudWxsXG4gIC8vJ2ZpbGwgaW4nIGNhcHR1cmUgZ3JvdXBzIGJldHdlZW4gc3RhcnQtZW5kXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVncy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHRva2VuID0gcmVnc1tpXVxuICAgIGlmICh0b2tlbi5ncm91cFN0YXJ0ID09PSB0cnVlKSB7XG4gICAgICBpbkdyb3VwID0gdG9rZW4uZ3JvdXBcbiAgICAgIGlmIChpbkdyb3VwID09PSBudWxsKSB7XG4gICAgICAgIGluR3JvdXAgPSBTdHJpbmcoaW5kZXgpXG4gICAgICAgIGluZGV4ICs9IDFcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluR3JvdXAgIT09IG51bGwpIHtcbiAgICAgIHRva2VuLmdyb3VwID0gaW5Hcm91cFxuICAgIH1cbiAgICBpZiAodG9rZW4uZ3JvdXBFbmQgPT09IHRydWUpIHtcbiAgICAgIGluR3JvdXAgPSBudWxsXG4gICAgfVxuICB9XG4gIHJldHVybiByZWdzXG59XG5cbi8vIG9wdGltaXplIGFuICdvcicgbG9va3VwLCB3aGVuIHRoZSAoYXxifGMpIGxpc3QgaXMgc2ltcGxlIG9yIG11bHRpLXdvcmRcbmNvbnN0IGRvRmFzdE9yTW9kZSA9IGZ1bmN0aW9uICh0b2tlbnMpIHtcbiAgcmV0dXJuIHRva2Vucy5tYXAodG9rZW4gPT4ge1xuICAgIGlmICh0b2tlbi5jaG9pY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBpdCdzIGFuIE9SXG4gICAgICBpZiAodG9rZW4ub3BlcmF0b3IgIT09ICdvcicpIHtcbiAgICAgICAgcmV0dXJuIHRva2VuXG4gICAgICB9XG4gICAgICBpZiAodG9rZW4uZnV6enkgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRva2VuXG4gICAgICB9XG4gICAgICAvLyBhcmUgdGhleSBhbGwgc3RyYWlnaHQtdXAgd29yZHM/IHRoZW4gb3B0aW1pemUgdGhlbS5cbiAgICAgIGxldCBzaG91bGRQYWNrID0gdG9rZW4uY2hvaWNlcy5ldmVyeShibG9jayA9PiB7XG4gICAgICAgIGlmIChibG9jay5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVnID0gYmxvY2tbMF1cbiAgICAgICAgLy8gfmZ1enp5fiB3b3JkcyBuZWVkIG1vcmUgY2FyZVxuICAgICAgICBpZiAocmVnLmZ1enp5ID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgLy8gXiBhbmQgJCBnZXQgbG9zdCBpbiBmYXN0T3JcbiAgICAgICAgaWYgKHJlZy5zdGFydCB8fCByZWcuZW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZy53b3JkICE9PSB1bmRlZmluZWQgJiYgcmVnLm5lZ2F0aXZlICE9PSB0cnVlICYmIHJlZy5vcHRpb25hbCAhPT0gdHJ1ZSAmJiByZWcubWV0aG9kICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWUgLy9yZWcgaXMgc2ltcGxlLWVub3VnaFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSlcbiAgICAgIGlmIChzaG91bGRQYWNrID09PSB0cnVlKSB7XG4gICAgICAgIHRva2VuLmZhc3RPciA9IG5ldyBTZXQoKVxuICAgICAgICB0b2tlbi5jaG9pY2VzLmZvckVhY2goYmxvY2sgPT4ge1xuICAgICAgICAgIHRva2VuLmZhc3RPci5hZGQoYmxvY2tbMF0ud29yZClcbiAgICAgICAgfSlcbiAgICAgICAgZGVsZXRlIHRva2VuLmNob2ljZXNcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRva2VuXG4gIH0pXG59XG5cbi8vIHN1cHBvcnQgfihhfGJ8Yyl+XG5jb25zdCBmdXp6eU9yID0gZnVuY3Rpb24gKHJlZ3MpIHtcbiAgcmV0dXJuIHJlZ3MubWFwKHJlZyA9PiB7XG4gICAgaWYgKHJlZy5mdXp6eSAmJiByZWcuY2hvaWNlcykge1xuICAgICAgLy8gcGFzcyBmdXp6eS1kYXRhIHRvIGVhY2ggT1IgY2hvaWNlXG4gICAgICByZWcuY2hvaWNlcy5mb3JFYWNoKHIgPT4ge1xuICAgICAgICBpZiAoci5sZW5ndGggPT09IDEgJiYgclswXS53b3JkKSB7XG4gICAgICAgICAgclswXS5mdXp6eSA9IHRydWVcbiAgICAgICAgICByWzBdLm1pbiA9IHJlZy5taW5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJlZ1xuICB9KVxufVxuXG5jb25zdCBwb3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChyZWdzKSB7XG4gIC8vIGVuc3VyZSBhbGwgY2FwdHVyZSBncm91cHMgbmFtZXMgYXJlIGZpbGxlZCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmRcbiAgcmVncyA9IG5hbWVHcm91cHMocmVncylcbiAgLy8gY29udmVydCAnY2hvaWNlcycgZm9ybWF0IHRvICdmYXN0T3InIGZvcm1hdFxuICByZWdzID0gZG9GYXN0T3JNb2RlKHJlZ3MpXG4gIC8vIHN1cHBvcnQgfihmb298YmFyKX5cbiAgcmVncyA9IGZ1enp5T3IocmVncylcbiAgcmV0dXJuIHJlZ3Ncbn1cbmV4cG9ydCBkZWZhdWx0IHBvc3RQcm9jZXNzXG4iLCAiaW1wb3J0IHBhcnNlQmxvY2tzIGZyb20gJy4vMDEtcGFyc2VCbG9ja3MuanMnXG5pbXBvcnQgcGFyc2VUb2tlbiBmcm9tICcuLzAyLXBhcnNlVG9rZW4uanMnXG5pbXBvcnQgc3BsaXRIeXBoZW5zIGZyb20gJy4vMDMtc3BsaXRIeXBoZW5zLmpzJ1xuaW1wb3J0IGluZmxlY3RSb290IGZyb20gJy4vMDQtaW5mbGVjdC1yb290LmpzJ1xuaW1wb3J0IHBvc3RQcm9jZXNzIGZyb20gJy4vMDUtcG9zdFByb2Nlc3MuanMnXG5cbi8qKiBwYXJzZSBhIG1hdGNoLXN5bnRheCBzdHJpbmcgaW50byBqc29uICovXG5jb25zdCBzeW50YXggPSBmdW5jdGlvbiAoaW5wdXQsIG9wdHMsIHdvcmxkKSB7XG4gIC8vIGZhaWwtZmFzdFxuICBpZiAoaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHVuZGVmaW5lZCB8fCBpbnB1dCA9PT0gJycpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuICBvcHRzID0gb3B0cyB8fCB7fVxuICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgIGlucHV0ID0gU3RyaW5nKGlucHV0KSAvL2dvIGZvciBpdD9cbiAgfVxuICBsZXQgdG9rZW5zID0gcGFyc2VCbG9ja3MoaW5wdXQpXG4gIC8vdHVybiB0aGVtIGludG8gb2JqZWN0c1xuICB0b2tlbnMgPSB0b2tlbnMubWFwKHN0ciA9PiBwYXJzZVRva2VuKHN0ciwgb3B0cykpXG4gIC8vICd+cmUtZG9+J1xuICB0b2tlbnMgPSBzcGxpdEh5cGhlbnModG9rZW5zLCB3b3JsZClcbiAgLy8gJ3t3YWxrfSdcbiAgdG9rZW5zID0gaW5mbGVjdFJvb3QodG9rZW5zLCB3b3JsZClcbiAgLy9jbGVhbiB1cCBhbnl0aGluZyB3ZWlyZFxuICB0b2tlbnMgPSBwb3N0UHJvY2Vzcyh0b2tlbnMsIG9wdHMpXG4gIC8vIGNvbnNvbGUubG9nKHRva2VucylcbiAgcmV0dXJuIHRva2Vuc1xufVxuZXhwb3J0IGRlZmF1bHQgc3ludGF4XG4iLCAiY29uc3QgYW55SW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHNldEEsIHNldEIpIHtcbiAgZm9yIChsZXQgZWxlbSBvZiBzZXRCKSB7XG4gICAgaWYgKHNldEEuaGFzKGVsZW0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cbi8vIGNoZWNrIHdvcmRzL3RhZ3MgYWdhaW5zdCBvdXIgY2FjaGVcbmNvbnN0IGZhaWxGYXN0ID0gZnVuY3Rpb24gKHJlZ3MsIGNhY2hlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVncy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGxldCByZWcgPSByZWdzW2ldXG4gICAgaWYgKHJlZy5vcHRpb25hbCA9PT0gdHJ1ZSB8fCByZWcubmVnYXRpdmUgPT09IHRydWUgfHwgcmVnLmZ1enp5ID09PSB0cnVlKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICAvLyBpcyB0aGUgd29yZCBtaXNzaW5nIGZyb20gdGhlIGNhY2hlP1xuICAgIGlmIChyZWcud29yZCAhPT0gdW5kZWZpbmVkICYmIGNhY2hlLmhhcyhyZWcud29yZCkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBpcyB0aGUgdGFnIG1pc3Npbmc/XG4gICAgaWYgKHJlZy50YWcgIT09IHVuZGVmaW5lZCAmJiBjYWNoZS5oYXMoJyMnICsgcmVnLnRhZykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBwZXJmb3JtIGEgc3BlZWR1cCBmb3IgZmFzdC1vclxuICAgIGlmIChyZWcuZmFzdE9yICYmIGFueUludGVyc2VjdGlvbihyZWcuZmFzdE9yLCBjYWNoZSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5leHBvcnQgZGVmYXVsdCBmYWlsRmFzdFxuIiwgIi8vIGZ1enp5LW1hdGNoIChkYW1lcmF1LWxldmVuc2h0ZWluKVxuLy8gQmFzZWQgb24gIHRhZC1saXNweSAvbm9kZS1kYW1lcmF1LWxldmVuc2h0ZWluXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGFkLWxpc3B5L25vZGUtZGFtZXJhdS1sZXZlbnNodGVpbi9ibG9iL21hc3Rlci9pbmRleC5qc1xuLy8gY291bnQgc3RlcHMgKGluc2VydGlvbnMsIGRlbGV0aW9ucywgc3Vic3RpdHV0aW9ucywgb3IgdHJhbnNwb3NpdGlvbnMpXG5jb25zdCBlZGl0RGlzdGFuY2UgPSBmdW5jdGlvbiAoc3RyQSwgc3RyQikge1xuICBsZXQgYUxlbmd0aCA9IHN0ckEubGVuZ3RoLFxuICAgIGJMZW5ndGggPSBzdHJCLmxlbmd0aFxuICAvLyBmYWlsLWZhc3RcbiAgaWYgKGFMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYkxlbmd0aFxuICB9XG4gIGlmIChiTGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGFMZW5ndGhcbiAgfVxuICAvLyBJZiB0aGUgbGltaXQgaXMgbm90IGRlZmluZWQgaXQgd2lsbCBiZSBjYWxjdWxhdGUgZnJvbSB0aGlzIGFuZCB0aGF0IGFyZ3MuXG4gIGxldCBsaW1pdCA9IChiTGVuZ3RoID4gYUxlbmd0aCA/IGJMZW5ndGggOiBhTGVuZ3RoKSArIDFcbiAgaWYgKE1hdGguYWJzKGFMZW5ndGggLSBiTGVuZ3RoKSA+IChsaW1pdCB8fCAxMDApKSB7XG4gICAgcmV0dXJuIGxpbWl0IHx8IDEwMFxuICB9XG4gIC8vIGluaXQgdGhlIGFycmF5XG4gIGxldCBtYXRyaXggPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbWl0OyBpKyspIHtcbiAgICBtYXRyaXhbaV0gPSBbaV1cbiAgICBtYXRyaXhbaV0ubGVuZ3RoID0gbGltaXRcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbWl0OyBpKyspIHtcbiAgICBtYXRyaXhbMF1baV0gPSBpXG4gIH1cbiAgLy8gQ2FsY3VsYXRlIG1hdHJpeC5cbiAgbGV0IGosIGFfaW5kZXgsIGJfaW5kZXgsIGNvc3QsIG1pbiwgdFxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBhTGVuZ3RoOyArK2kpIHtcbiAgICBhX2luZGV4ID0gc3RyQVtpIC0gMV1cbiAgICBmb3IgKGogPSAxOyBqIDw9IGJMZW5ndGg7ICsraikge1xuICAgICAgLy8gQ2hlY2sgdGhlIGphZ2dlZCBkaXN0YW5jZSB0b3RhbCBzbyBmYXJcbiAgICAgIGlmIChpID09PSBqICYmIG1hdHJpeFtpXVtqXSA+IDQpIHtcbiAgICAgICAgcmV0dXJuIGFMZW5ndGhcbiAgICAgIH1cbiAgICAgIGJfaW5kZXggPSBzdHJCW2ogLSAxXVxuICAgICAgY29zdCA9IGFfaW5kZXggPT09IGJfaW5kZXggPyAwIDogMSAvLyBTdGVwIDVcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbWluaW11bSAobXVjaCBmYXN0ZXIgdGhhbiBNYXRoLm1pbiguLi4pKS5cbiAgICAgIG1pbiA9IG1hdHJpeFtpIC0gMV1bal0gKyAxIC8vIERlbGV0aW9uLlxuICAgICAgaWYgKCh0ID0gbWF0cml4W2ldW2ogLSAxXSArIDEpIDwgbWluKSBtaW4gPSB0IC8vIEluc2VydGlvbi5cbiAgICAgIGlmICgodCA9IG1hdHJpeFtpIC0gMV1baiAtIDFdICsgY29zdCkgPCBtaW4pIG1pbiA9IHQgLy8gU3Vic3RpdHV0aW9uLlxuICAgICAgLy8gVXBkYXRlIG1hdHJpeC5cbiAgICAgIGxldCBzaG91bGRVcGRhdGUgPVxuICAgICAgICBpID4gMSAmJiBqID4gMSAmJiBhX2luZGV4ID09PSBzdHJCW2ogLSAyXSAmJiBzdHJBW2kgLSAyXSA9PT0gYl9pbmRleCAmJiAodCA9IG1hdHJpeFtpIC0gMl1baiAtIDJdICsgY29zdCkgPCBtaW5cbiAgICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgICAgbWF0cml4W2ldW2pdID0gdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF0cml4W2ldW2pdID0gbWluXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIHJldHVybiBudW1iZXIgb2Ygc3RlcHNcbiAgcmV0dXJuIG1hdHJpeFthTGVuZ3RoXVtiTGVuZ3RoXVxufVxuLy8gc2NvcmUgc2ltaWxhcml0eSBieSBmcm9tIDAtMSAoc3RlcHMvbGVuZ3RoKVxuY29uc3QgZnV6enlNYXRjaCA9IGZ1bmN0aW9uIChzdHJBLCBzdHJCLCBtaW5MZW5ndGggPSAzKSB7XG4gIGlmIChzdHJBID09PSBzdHJCKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICAvL2Rvbid0IGV2ZW4gYm90aGVyIG9uIHRpbnkgc3RyaW5nc1xuICBpZiAoc3RyQS5sZW5ndGggPCBtaW5MZW5ndGggfHwgc3RyQi5sZW5ndGggPCBtaW5MZW5ndGgpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGNvbnN0IHN0ZXBzID0gZWRpdERpc3RhbmNlKHN0ckEsIHN0ckIpXG4gIGxldCBsZW5ndGggPSBNYXRoLm1heChzdHJBLmxlbmd0aCwgc3RyQi5sZW5ndGgpXG4gIGxldCByZWxhdGl2ZSA9IGxlbmd0aCA9PT0gMCA/IDAgOiBzdGVwcyAvIGxlbmd0aFxuICBsZXQgc2ltaWxhcml0eSA9IDEgLSByZWxhdGl2ZVxuICByZXR1cm4gc2ltaWxhcml0eVxufVxuZXhwb3J0IGRlZmF1bHQgZnV6enlNYXRjaFxuIiwgIi8vIHRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRoICdAaGFzQ29tbWEnIGluIHRoZSBtYXRjaCBzeW50YXhcbi8vIHZhcmlvdXMgdW5pY29kZSBxdW90YXRpb24tbWFyayBmb3JtYXRzXG5jb25zdCBzdGFydFF1b3RlID1cbiAgLyhbXFx1MDAyMlxcdUZGMDJcXHUwMDI3XFx1MjAxQ1xcdTIwMThcXHUyMDFGXFx1MjAxQlxcdTIwMUVcXHUyRTQyXFx1MjAxQVxcdTAwQUJcXHUyMDM5XFx1MjAzNVxcdTIwMzZcXHUyMDM3XFx1MzAxRFxcdTAwNjBcXHUzMDFGXSkvXG5cbmNvbnN0IGVuZFF1b3RlID0gLyhbXFx1MDAyMlxcdUZGMDJcXHUwMDI3XFx1MjAxRFxcdTIwMTlcXHUwMEJCXFx1MjAzQVxcdTIwMzJcXHUyMDMzXFx1MjAzNFxcdTMwMUVcXHUwMEI0XSkvXG5cbmNvbnN0IGhhc0h5cGhlbiA9IC9eWy1cdTIwMTNcdTIwMTRdJC9cbmNvbnN0IGhhc0Rhc2ggPSAvIFstXHUyMDEzXHUyMDE0XXsxLDN9IC9cblxuLyoqIHNlYXJjaCB0aGUgdGVybSdzICdwb3N0JyBwdW5jdHVhdGlvbiAgKi9cbmNvbnN0IGhhc1Bvc3QgPSAodGVybSwgcHVuY3QpID0+IHRlcm0ucG9zdC5pbmRleE9mKHB1bmN0KSAhPT0gLTFcbi8qKiBzZWFyY2ggdGhlIHRlcm0ncyAncHJlJyBwdW5jdHVhdGlvbiAgKi9cbi8vIGNvbnN0IGhhc1ByZSA9ICh0ZXJtLCBwdW5jdCkgPT4gdGVybS5wcmUuaW5kZXhPZihwdW5jdCkgIT09IC0xXG5cbmNvbnN0IG1ldGhvZHMgPSB7XG4gIC8qKiBkb2VzIGl0IGhhdmUgYSBxdW90YXRpb24gc3ltYm9sPyAgKi9cbiAgaGFzUXVvdGU6IHRlcm0gPT4gc3RhcnRRdW90ZS50ZXN0KHRlcm0ucHJlKSB8fCBlbmRRdW90ZS50ZXN0KHRlcm0ucG9zdCksXG4gIC8qKiBkb2VzIGl0IGhhdmUgYSBjb21tYT8gICovXG4gIGhhc0NvbW1hOiB0ZXJtID0+IGhhc1Bvc3QodGVybSwgJywnKSxcbiAgLyoqIGRvZXMgaXQgZW5kIGluIGEgcGVyaW9kPyAqL1xuICBoYXNQZXJpb2Q6IHRlcm0gPT4gaGFzUG9zdCh0ZXJtLCAnLicpID09PSB0cnVlICYmIGhhc1Bvc3QodGVybSwgJy4uLicpID09PSBmYWxzZSxcbiAgLyoqIGRvZXMgaXQgZW5kIGluIGFuIGV4Y2xhbWF0aW9uICovXG4gIGhhc0V4Y2xhbWF0aW9uOiB0ZXJtID0+IGhhc1Bvc3QodGVybSwgJyEnKSxcbiAgLyoqIGRvZXMgaXQgZW5kIHdpdGggYSBxdWVzdGlvbiBtYXJrPyAqL1xuICBoYXNRdWVzdGlvbk1hcms6IHRlcm0gPT4gaGFzUG9zdCh0ZXJtLCAnPycpIHx8IGhhc1Bvc3QodGVybSwgJ1x1MDBCRicpLFxuICAvKiogaXMgdGhlcmUgYSAuLi4gYXQgdGhlIGVuZD8gKi9cbiAgaGFzRWxsaXBzZXM6IHRlcm0gPT4gaGFzUG9zdCh0ZXJtLCAnLi4nKSB8fCBoYXNQb3N0KHRlcm0sICdcdTIwMjYnKSxcbiAgLyoqIGlzIHRoZXJlIGEgc2VtaWNvbG9uIGFmdGVyIHRlcm0gd29yZD8gKi9cbiAgaGFzU2VtaWNvbG9uOiB0ZXJtID0+IGhhc1Bvc3QodGVybSwgJzsnKSxcbiAgLyoqIGlzIHRoZXJlIGEgY29sb24gYWZ0ZXIgdGVybSB3b3JkPyAqL1xuICBoYXNDb2xvbjogdGVybSA9PiBoYXNQb3N0KHRlcm0sICc6JyksXG4gIC8qKiBpcyB0aGVyZSBhIHNsYXNoICcvJyBpbiB0ZXJtIHdvcmQ/ICovXG4gIGhhc1NsYXNoOiB0ZXJtID0+IC9cXC8vLnRlc3QodGVybS50ZXh0KSxcbiAgLyoqIGEgaHlwaGVuIGNvbm5lY3RzIHR3byB3b3JkcyBsaWtlLXRlcm0gKi9cbiAgaGFzSHlwaGVuOiB0ZXJtID0+IGhhc0h5cGhlbi50ZXN0KHRlcm0ucG9zdCkgfHwgaGFzSHlwaGVuLnRlc3QodGVybS5wcmUpLFxuICAvKiogYSBkYXNoIHNlcGFyYXRlcyB3b3JkcyAtIGxpa2UgdGhhdCAqL1xuICBoYXNEYXNoOiB0ZXJtID0+IGhhc0Rhc2gudGVzdCh0ZXJtLnBvc3QpIHx8IGhhc0Rhc2gudGVzdCh0ZXJtLnByZSksXG4gIC8qKiBpcyBpdCBtdWx0aXBsZSB3b3JkcyBjb21iaW5kZWQgKi9cbiAgaGFzQ29udHJhY3Rpb246IHRlcm0gPT4gQm9vbGVhbih0ZXJtLmltcGxpY2l0KSxcbiAgLyoqIGlzIGl0IGFuIGFjcm9ueW0gKi9cbiAgaXNBY3JvbnltOiB0ZXJtID0+IHRlcm0udGFncy5oYXMoJ0Fjcm9ueW0nKSxcbiAgLyoqIGRvZXMgaXQgaGF2ZSBhbnkgdGFncyAqL1xuICBpc0tub3duOiB0ZXJtID0+IHRlcm0udGFncy5zaXplID4gMCxcbiAgLyoqIHVwcGVyY2FzZSBmaXJzdCBsZXR0ZXIsIHRoZW4gYSBsb3dlcmNhc2UgKi9cbiAgaXNUaXRsZUNhc2U6IHRlcm0gPT4gL15cXHB7THV9W2EteidcXHUwMEMwLVxcdTAwRkZdL3UudGVzdCh0ZXJtLnRleHQpLFxuICAvKiogdXBwZXJjYXNlIGFsbCBsZXR0ZXJzICovXG4gIGlzVXBwZXJDYXNlOiB0ZXJtID0+IC9eXFxwe0x1fSskL3UudGVzdCh0ZXJtLnRleHQpLFxufVxuLy8gYWxpYXNlc1xubWV0aG9kcy5oYXNRdW90YXRpb24gPSBtZXRob2RzLmhhc1F1b3RlXG5cbmV4cG9ydCBkZWZhdWx0IG1ldGhvZHNcbiIsICJpbXBvcnQgZnV6enkgZnJvbSAnLi9fZnV6enkuanMnXG5pbXBvcnQgbWV0aG9kcyBmcm9tICcuLi8uLi90ZXJtTWV0aG9kcy5qcycgLy90aGlzIHNob3VsZCBsb2FkIG9mZiBvZiAnbWV0aG9kcy5vbmUudGVybU1ldGhvZHMnXG5cbi8vZGVjbGFyZSBpdCB1cCBoZXJlXG5sZXQgd3JhcE1hdGNoID0gZnVuY3Rpb24gKCkgeyB9XG4vKiogaWdub3JlIG9wdGlvbmFsL2dyZWVkeSBsb2dpYywgc3RyYWlnaHQtdXAgdGVybSBtYXRjaCovXG5jb25zdCBkb2VzTWF0Y2ggPSBmdW5jdGlvbiAodGVybSwgcmVnLCBpbmRleCwgbGVuZ3RoKSB7XG4gIC8vIHN1cHBvcnQgJy4nXG4gIGlmIChyZWcuYW55dGhpbmcgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vIHN1cHBvcnQgJ14nIChpbiBwYXJlbnRoZXNlcylcbiAgaWYgKHJlZy5zdGFydCA9PT0gdHJ1ZSAmJiBpbmRleCAhPT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8vIHN1cHBvcnQgJyQnIChpbiBwYXJlbnRoZXNlcylcbiAgaWYgKHJlZy5lbmQgPT09IHRydWUgJiYgaW5kZXggIT09IGxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBtYXRjaCBhbiBpZFxuICBpZiAocmVnLmlkICE9PSB1bmRlZmluZWQgJiYgcmVnLmlkID09PSB0ZXJtLmlkKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvL3N1cHBvcnQgYSB0ZXh0IG1hdGNoXG4gIGlmIChyZWcud29yZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gY2hlY2sgY2FzZS1zZW5zaXRpdml0eSwgZXRjXG4gICAgaWYgKHJlZy51c2UpIHtcbiAgICAgIHJldHVybiByZWcud29yZCA9PT0gdGVybVtyZWcudXNlXVxuICAgIH1cbiAgICAvL21hdGNoIGNvbnRyYWN0aW9ucywgbWFjaGluZS1mb3JtXG4gICAgaWYgKHRlcm0ubWFjaGluZSAhPT0gbnVsbCAmJiB0ZXJtLm1hY2hpbmUgPT09IHJlZy53b3JkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyB0ZXJtIGFsaWFzZXMgZm9yIHNsYXNoZXMgYW5kIHRoaW5nc1xuICAgIGlmICh0ZXJtLmFsaWFzICE9PSB1bmRlZmluZWQgJiYgdGVybS5hbGlhcy5oYXNPd25Qcm9wZXJ0eShyZWcud29yZCkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIHN1cHBvcnQgfiBmdXp6eSBtYXRjaFxuICAgIGlmIChyZWcuZnV6enkgPT09IHRydWUpIHtcbiAgICAgIGlmIChyZWcud29yZCA9PT0gdGVybS5yb290KSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBsZXQgc2NvcmUgPSBmdXp6eShyZWcud29yZCwgdGVybS5ub3JtYWwpXG4gICAgICBpZiAoc2NvcmUgPj0gcmVnLm1pbikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBtYXRjaCBzbGFzaGVzIGFuZCB0aGluZ3NcbiAgICBpZiAodGVybS5hbGlhcyAmJiB0ZXJtLmFsaWFzLnNvbWUoc3RyID0+IHN0ciA9PT0gcmVnLndvcmQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvL21hdGNoIGVpdGhlciAubm9ybWFsIG9yIC50ZXh0XG4gICAgcmV0dXJuIHJlZy53b3JkID09PSB0ZXJtLnRleHQgfHwgcmVnLndvcmQgPT09IHRlcm0ubm9ybWFsXG4gIH1cbiAgLy9zdXBwb3J0ICNUYWdcbiAgaWYgKHJlZy50YWcgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0ZXJtLnRhZ3MuaGFzKHJlZy50YWcpID09PSB0cnVlXG4gIH1cbiAgLy9zdXBwb3J0IEBtZXRob2RcbiAgaWYgKHJlZy5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgbWV0aG9kc1tyZWcubWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJyAmJiBtZXRob2RzW3JlZy5tZXRob2RdKHRlcm0pID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvL3N1cHBvcnQgd2hpdGVzcGFjZS9wdW5jdHVhdGlvblxuICBpZiAocmVnLnByZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRlcm0ucHJlICYmIHRlcm0ucHJlLmluY2x1ZGVzKHJlZy5wcmUpXG4gIH1cbiAgaWYgKHJlZy5wb3N0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdGVybS5wb3N0ICYmIHRlcm0ucG9zdC5pbmNsdWRlcyhyZWcucG9zdClcbiAgfVxuICAvL3N1cHBvcnQgL3JlZy9cbiAgaWYgKHJlZy5yZWdleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHN0ciA9IHRlcm0ubm9ybWFsXG4gICAgaWYgKHJlZy51c2UpIHtcbiAgICAgIHN0ciA9IHRlcm1bcmVnLnVzZV1cbiAgICB9XG4gICAgcmV0dXJuIHJlZy5yZWdleC50ZXN0KHN0cilcbiAgfVxuICAvL3N1cHBvcnQgPGNodW5rPlxuICBpZiAocmVnLmNodW5rICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdGVybS5jaHVuayA9PT0gcmVnLmNodW5rXG4gIH1cbiAgLy9zdXBwb3J0ICVOb3VufFZlcmIlXG4gIGlmIChyZWcuc3dpdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdGVybS5zd2l0Y2ggPT09IHJlZy5zd2l0Y2hcbiAgfVxuICAvL3N1cHBvcnQge21hY2hpbmV9XG4gIGlmIChyZWcubWFjaGluZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRlcm0ubm9ybWFsID09PSByZWcubWFjaGluZSB8fCB0ZXJtLm1hY2hpbmUgPT09IHJlZy5tYWNoaW5lIHx8IHRlcm0ucm9vdCA9PT0gcmVnLm1hY2hpbmVcbiAgfVxuICAvL3N1cHBvcnQge3dvcmQvc2Vuc2V9XG4gIGlmIChyZWcuc2Vuc2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0ZXJtLnNlbnNlID09PSByZWcuc2Vuc2VcbiAgfVxuICAvLyBzdXBwb3J0IG9wdGltaXplZCAob25lfHR3bylcbiAgaWYgKHJlZy5mYXN0T3IgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIHt3b3JrL3ZlcmJ9IG11c3QgYmUgYSB2ZXJiXG4gICAgaWYgKHJlZy5wb3MgJiYgIXRlcm0udGFncy5oYXMocmVnLnBvcykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGxldCBzdHIgPSB0ZXJtLnJvb3QgfHwgdGVybS5pbXBsaWNpdCB8fCB0ZXJtLm1hY2hpbmUgfHwgdGVybS5ub3JtYWxcbiAgICByZXR1cm4gcmVnLmZhc3RPci5oYXMoc3RyKSB8fCByZWcuZmFzdE9yLmhhcyh0ZXJtLnRleHQpXG4gIH1cbiAgLy9zdXBwb3J0IHNsb3dlciAob25lfHR3bylcbiAgaWYgKHJlZy5jaG9pY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyB0cnkgdG8gc3VwcG9ydCAmJiBvcGVyYXRvclxuICAgIGlmIChyZWcub3BlcmF0b3IgPT09ICdhbmQnKSB7XG4gICAgICAvLyBtdXN0IG1hdGNoIHRoZW0gYWxsXG4gICAgICByZXR1cm4gcmVnLmNob2ljZXMuZXZlcnkociA9PiB3cmFwTWF0Y2godGVybSwgciwgaW5kZXgsIGxlbmd0aCkpXG4gICAgfVxuICAgIC8vIG9yIG11c3QgbWF0Y2ggb25lXG4gICAgcmV0dXJuIHJlZy5jaG9pY2VzLnNvbWUociA9PiB3cmFwTWF0Y2godGVybSwgciwgaW5kZXgsIGxlbmd0aCkpXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG4vLyB3cmFwIHJlc3VsdCBmb3IgIW5lZ2F0aXZlIG1hdGNoIGxvZ2ljXG53cmFwTWF0Y2ggPSBmdW5jdGlvbiAodCwgcmVnLCBpbmRleCwgbGVuZ3RoKSB7XG4gIGxldCByZXN1bHQgPSBkb2VzTWF0Y2godCwgcmVnLCBpbmRleCwgbGVuZ3RoKVxuICBpZiAocmVnLm5lZ2F0aXZlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICFyZXN1bHRcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5leHBvcnQgZGVmYXVsdCB3cmFwTWF0Y2hcbiIsICJpbXBvcnQgZG9lc01hdGNoIGZyb20gJy4uLy4uL3Rlcm0vZG9lc01hdGNoLmpzJ1xuXG4vLyBmb3IgZ3JlZWR5IGNoZWNraW5nLCB3ZSBubyBsb25nZXIgY2FyZSBhYm91dCB0aGUgcmVnLnN0YXJ0XG4vLyB2YWx1ZSwgYW5kIGxlYXZpbmcgaXQgY2FuIGNhdXNlIGZhaWx1cmVzIGZvciBhbmNob3JlZCBncmVlZHlcbi8vIG1hdGNoZXMuICBkaXR0byBmb3IgZW5kLWdyZWVkeSBtYXRjaGVzOiB3ZSBuZWVkIGFuIGVhcmxpZXIgbm9uLVxuLy8gZW5kaW5nIG1hdGNoIHRvIHN1Y2NjZWVkIHVudGlsIHdlIGdldCB0byB0aGUgYWN0dWFsIGVuZC5cbmNvbnN0IGdldEdyZWVkeSA9IGZ1bmN0aW9uIChzdGF0ZSwgZW5kUmVnKSB7XG4gIGxldCByZWcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWdzW3N0YXRlLnJdLCB7IHN0YXJ0OiBmYWxzZSwgZW5kOiBmYWxzZSB9KVxuICBsZXQgc3RhcnQgPSBzdGF0ZS50XG4gIGZvciAoOyBzdGF0ZS50IDwgc3RhdGUudGVybXMubGVuZ3RoOyBzdGF0ZS50ICs9IDEpIHtcbiAgICAvL3N0b3AgZm9yIG5leHQtcmVnIG1hdGNoXG4gICAgaWYgKGVuZFJlZyAmJiBkb2VzTWF0Y2goc3RhdGUudGVybXNbc3RhdGUudF0sIGVuZFJlZywgc3RhdGUuc3RhcnRfaSArIHN0YXRlLnQsIHN0YXRlLnBocmFzZV9sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gc3RhdGUudFxuICAgIH1cbiAgICBsZXQgY291bnQgPSBzdGF0ZS50IC0gc3RhcnQgKyAxXG4gICAgLy8gaXMgaXQgbWF4LWxlbmd0aCBub3c/XG4gICAgaWYgKHJlZy5tYXggIT09IHVuZGVmaW5lZCAmJiBjb3VudCA9PT0gcmVnLm1heCkge1xuICAgICAgcmV0dXJuIHN0YXRlLnRcbiAgICB9XG4gICAgLy9zdG9wIGhlcmVcbiAgICBpZiAoZG9lc01hdGNoKHN0YXRlLnRlcm1zW3N0YXRlLnRdLCByZWcsIHN0YXRlLnN0YXJ0X2kgKyBzdGF0ZS50LCBzdGF0ZS5waHJhc2VfbGVuZ3RoKSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIGlzIGl0IHRvbyBzaG9ydD9cbiAgICAgIGlmIChyZWcubWluICE9PSB1bmRlZmluZWQgJiYgY291bnQgPCByZWcubWluKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGUudFxuICAgIH1cbiAgfVxuICByZXR1cm4gc3RhdGUudFxufVxuXG5jb25zdCBncmVlZHlUbyA9IGZ1bmN0aW9uIChzdGF0ZSwgbmV4dFJlZykge1xuICBsZXQgdCA9IHN0YXRlLnRcbiAgLy9pZiB0aGVyZSdzIG5vIG5leHQgb25lLCBqdXN0IGdvIG9mZiB0aGUgZW5kIVxuICBpZiAoIW5leHRSZWcpIHtcbiAgICByZXR1cm4gc3RhdGUudGVybXMubGVuZ3RoXG4gIH1cbiAgLy9vdGhlcndpc2UsIHdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBuZXh0IG9uZVxuICBmb3IgKDsgdCA8IHN0YXRlLnRlcm1zLmxlbmd0aDsgdCArPSAxKSB7XG4gICAgaWYgKGRvZXNNYXRjaChzdGF0ZS50ZXJtc1t0XSwgbmV4dFJlZywgc3RhdGUuc3RhcnRfaSArIHQsIHN0YXRlLnBocmFzZV9sZW5ndGgpID09PSB0cnVlKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgZ3JlZWR5VG8gJHtzdGF0ZS50ZXJtc1t0XS5ub3JtYWx9YClcbiAgICAgIHJldHVybiB0XG4gICAgfVxuICB9XG4gIC8vZ3Vlc3MgaXQgZG9lc24ndCBleGlzdCwgdGhlbi5cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgaXNFbmRHcmVlZHkgPSBmdW5jdGlvbiAocmVnLCBzdGF0ZSkge1xuICBpZiAocmVnLmVuZCA9PT0gdHJ1ZSAmJiByZWcuZ3JlZWR5ID09PSB0cnVlKSB7XG4gICAgaWYgKHN0YXRlLnN0YXJ0X2kgKyBzdGF0ZS50IDwgc3RhdGUucGhyYXNlX2xlbmd0aCAtIDEpIHtcbiAgICAgIGxldCB0bXBSZWcgPSBPYmplY3QuYXNzaWduKHt9LCByZWcsIHsgZW5kOiBmYWxzZSB9KVxuICAgICAgaWYgKGRvZXNNYXRjaChzdGF0ZS50ZXJtc1tzdGF0ZS50XSwgdG1wUmVnLCBzdGF0ZS5zdGFydF9pICsgc3RhdGUudCwgc3RhdGUucGhyYXNlX2xlbmd0aCkgPT09IHRydWUpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGVuZEdyZWVkeSAke3N0YXRlLnRlcm1zW3N0YXRlLnRdLm5vcm1hbH1gKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IHsgaXNFbmRHcmVlZHksIGdyZWVkeVRvLCBnZXRHcmVlZHkgfSIsICJcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwID0gZnVuY3Rpb24gKHN0YXRlLCB0ZXJtX2luZGV4KSB7XG4gIGlmIChzdGF0ZS5ncm91cHNbc3RhdGUuaW5Hcm91cF0pIHtcbiAgICByZXR1cm4gc3RhdGUuZ3JvdXBzW3N0YXRlLmluR3JvdXBdXG4gIH1cbiAgc3RhdGUuZ3JvdXBzW3N0YXRlLmluR3JvdXBdID0ge1xuICAgIHN0YXJ0OiB0ZXJtX2luZGV4LFxuICAgIGxlbmd0aDogMCxcbiAgfVxuICByZXR1cm4gc3RhdGUuZ3JvdXBzW3N0YXRlLmluR3JvdXBdXG59XG4iLCAiaW1wb3J0IHsgZ3JlZWR5VG8gfSBmcm9tICcuL2xvZ2ljL2dyZWVkeS5qcydcbmltcG9ydCB7IGdldEdyb3VwIH0gZnJvbSAnLi4vX2xpYi5qcydcblxuLy9zdXBwb3J0ICd1bnNwZWNpZmljIGdyZWVkeScgLiogcHJvcGVybHlcbi8vIGl0cyBsb2dpYyBpcyAnZ3JlZWR5IHVudGlsJywgd2hlcmUgaXQncyBsb29raW5nIGZvciB0aGUgbmV4dCB0b2tlblxuLy8gJy4rIGZvbycgbWVhbnMgd2UgY2hlY2sgZm9yICdmb28nLCBpbmRlZmluZXRseVxuY29uc3QgZG9Bc3RyaXggPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgbGV0IHsgcmVncyB9ID0gc3RhdGVcbiAgbGV0IHJlZyA9IHJlZ3Nbc3RhdGUucl1cblxuICBsZXQgc2tpcHRvID0gZ3JlZWR5VG8oc3RhdGUsIHJlZ3Nbc3RhdGUuciArIDFdKVxuICAvL21heWJlIHdlIGNvdWxkbid0IGZpbmQgaXRcbiAgaWYgKHNraXB0byA9PT0gbnVsbCB8fCBza2lwdG8gPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIC8vIGVuc3VyZSBpdCdzIGxvbmcgZW5vdWdoXG4gIGlmIChyZWcubWluICE9PSB1bmRlZmluZWQgJiYgc2tpcHRvIC0gc3RhdGUudCA8IHJlZy5taW4pIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIC8vIHJlZHVjZSBpdCBiYWNrLCBpZiBpdCdzIHRvbyBsb25nXG4gIGlmIChyZWcubWF4ICE9PSB1bmRlZmluZWQgJiYgc2tpcHRvIC0gc3RhdGUudCA+IHJlZy5tYXgpIHtcbiAgICBzdGF0ZS50ID0gc3RhdGUudCArIHJlZy5tYXhcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vIHNldCB0aGUgZ3JvdXAgcmVzdWx0XG4gIGlmIChzdGF0ZS5oYXNHcm91cCA9PT0gdHJ1ZSkge1xuICAgIGNvbnN0IGcgPSBnZXRHcm91cChzdGF0ZSwgc3RhdGUudClcbiAgICBnLmxlbmd0aCA9IHNraXB0byAtIHN0YXRlLnRcbiAgfVxuICBzdGF0ZS50ID0gc2tpcHRvXG4gIC8vIGxvZyhgXHUyNzEzIHxncmVlZHl8YClcbiAgcmV0dXJuIHRydWVcbn1cbmV4cG9ydCBkZWZhdWx0IGRvQXN0cml4IiwgImltcG9ydCBkb2VzTWF0Y2ggZnJvbSAnLi4vLi4vdGVybS9kb2VzTWF0Y2guanMnXG5cbmNvbnN0IGlzQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xufVxuXG5leHBvcnQgY29uc3QgZG9PckJsb2NrID0gZnVuY3Rpb24gKHN0YXRlLCBza2lwTiA9IDApIHtcbiAgbGV0IGJsb2NrID0gc3RhdGUucmVnc1tzdGF0ZS5yXVxuICBsZXQgd2FzRm91bmQgPSBmYWxzZVxuICAvLyBkbyBlYWNoIG11bHRpd29yZCBzZXF1ZW5jZVxuICBmb3IgKGxldCBjID0gMDsgYyA8IGJsb2NrLmNob2ljZXMubGVuZ3RoOyBjICs9IDEpIHtcbiAgICAvLyB0cnkgdG8gbWF0Y2ggdGhpcyBsaXN0IG9mIHRva2Vuc1xuICAgIGxldCByZWdzID0gYmxvY2suY2hvaWNlc1tjXVxuICAgIGlmICghaXNBcnJheShyZWdzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHdhc0ZvdW5kID0gcmVncy5ldmVyeSgoY3IsIHdfaW5kZXgpID0+IHtcbiAgICAgIGxldCBleHRyYSA9IDBcbiAgICAgIGxldCB0ID0gc3RhdGUudCArIHdfaW5kZXggKyBza2lwTiArIGV4dHJhXG4gICAgICBpZiAoc3RhdGUudGVybXNbdF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGxldCBmb3VuZEJsb2NrID0gZG9lc01hdGNoKHN0YXRlLnRlcm1zW3RdLCBjciwgdCArIHN0YXRlLnN0YXJ0X2ksIHN0YXRlLnBocmFzZV9sZW5ndGgpXG4gICAgICAvLyB0aGlzIGNhbiBiZSBncmVlZHkgLSAnKGZvbysgYmFyKSdcbiAgICAgIGlmIChmb3VuZEJsb2NrID09PSB0cnVlICYmIGNyLmdyZWVkeSA9PT0gdHJ1ZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN0YXRlLnRlcm1zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgbGV0IHRlcm0gPSBzdGF0ZS50ZXJtc1t0ICsgaV1cbiAgICAgICAgICBpZiAodGVybSkge1xuICAgICAgICAgICAgbGV0IGtlZXBHb2luZyA9IGRvZXNNYXRjaCh0ZXJtLCBjciwgc3RhdGUuc3RhcnRfaSArIGksIHN0YXRlLnBocmFzZV9sZW5ndGgpXG4gICAgICAgICAgICBpZiAoa2VlcEdvaW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGV4dHJhICs9IDFcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBza2lwTiArPSBleHRyYVxuICAgICAgcmV0dXJuIGZvdW5kQmxvY2tcbiAgICB9KVxuICAgIGlmICh3YXNGb3VuZCkge1xuICAgICAgc2tpcE4gKz0gcmVncy5sZW5ndGhcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIC8vIHdlIGZvdW5kIGEgbWF0Y2ggLSAgaXMgaXQgZ3JlZWR5IHRob3VnaD9cbiAgaWYgKHdhc0ZvdW5kICYmIGJsb2NrLmdyZWVkeSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBkb09yQmxvY2soc3RhdGUsIHNraXBOKSAvLyB0cnkgaXQgYWdhaW4hXG4gIH1cbiAgcmV0dXJuIHNraXBOXG59XG5cbmNvbnN0IGRvQW5kQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgbGV0IGxvbmdlc3QgPSAwXG4gIC8vIGFsbCBibG9ja3MgbXVzdCBtYXRjaCwgYW5kIHdlIHJldHVybiB0aGUgZ3JlZWRpZXN0IG1hdGNoXG4gIGxldCByZWcgPSBzdGF0ZS5yZWdzW3N0YXRlLnJdXG4gIGxldCBhbGxEaWRNYXRjaCA9IHJlZy5jaG9pY2VzLmV2ZXJ5KGJsb2NrID0+IHtcbiAgICAvLyAgZm9yIG11bHRpLXdvcmQgYmxvY2tzLCBhbGwgbXVzdCBtYXRjaFxuICAgIGxldCBhbGxXb3JkcyA9IGJsb2NrLmV2ZXJ5KChjciwgd19pbmRleCkgPT4ge1xuICAgICAgbGV0IHRyeVRlcm0gPSBzdGF0ZS50ICsgd19pbmRleFxuICAgICAgaWYgKHN0YXRlLnRlcm1zW3RyeVRlcm1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICByZXR1cm4gZG9lc01hdGNoKHN0YXRlLnRlcm1zW3RyeVRlcm1dLCBjciwgdHJ5VGVybSwgc3RhdGUucGhyYXNlX2xlbmd0aClcbiAgICB9KVxuICAgIGlmIChhbGxXb3JkcyA9PT0gdHJ1ZSAmJiBibG9jay5sZW5ndGggPiBsb25nZXN0KSB7XG4gICAgICBsb25nZXN0ID0gYmxvY2subGVuZ3RoXG4gICAgfVxuICAgIHJldHVybiBhbGxXb3Jkc1xuICB9KVxuICBpZiAoYWxsRGlkTWF0Y2ggPT09IHRydWUpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhgZG9BbmRCbG9jayAke3N0YXRlLnRlcm1zW3N0YXRlLnRdLm5vcm1hbH1gKVxuICAgIHJldHVybiBsb25nZXN0XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5leHBvcnQgeyBkb0FuZEJsb2NrIH0iLCAiaW1wb3J0IHsgZG9PckJsb2NrIH0gZnJvbSAnLi9sb2dpYy9hbmQtb3IuanMnXG5pbXBvcnQgeyBnZXRHcm91cCB9IGZyb20gJy4uL19saWIuanMnXG5cbmNvbnN0IG9yQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY29uc3QgeyByZWdzIH0gPSBzdGF0ZVxuICBsZXQgcmVnID0gcmVnc1tzdGF0ZS5yXVxuICBsZXQgc2tpcE51bSA9IGRvT3JCbG9jayhzdGF0ZSlcbiAgLy8gZGlkIHdlIGZpbmQgYSBtYXRjaD9cbiAgaWYgKHNraXBOdW0pIHtcbiAgICAvLyBoYW5kbGUgJ25vdCcgbG9naWNcbiAgICBpZiAocmVnLm5lZ2F0aXZlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gbnVsbCAvLyBkaWVcbiAgICB9XG4gICAgLy8gdHVjayBpbiBhcyBuYW1lZC1ncm91cFxuICAgIGlmIChzdGF0ZS5oYXNHcm91cCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZyA9IGdldEdyb3VwKHN0YXRlLCBzdGF0ZS50KVxuICAgICAgZy5sZW5ndGggKz0gc2tpcE51bVxuICAgIH1cbiAgICAvLyBlbnN1cmUgd2UncmUgYXQgdGhlIGVuZFxuICAgIGlmIChyZWcuZW5kID09PSB0cnVlKSB7XG4gICAgICBsZXQgZW5kID0gc3RhdGUucGhyYXNlX2xlbmd0aFxuICAgICAgaWYgKHN0YXRlLnQgKyBzdGF0ZS5zdGFydF9pICsgc2tpcE51bSAhPT0gZW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnQgKz0gc2tpcE51bVxuICAgIC8vIGxvZyhgXHUyNzEzIHxmb3VuZC1vcnxgKVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoIXJlZy5vcHRpb25hbCkge1xuICAgIHJldHVybiBudWxsIC8vZGllXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cbmV4cG9ydCBkZWZhdWx0IG9yQmxvY2siLCAiaW1wb3J0IHsgZG9BbmRCbG9jayB9IGZyb20gJy4vbG9naWMvYW5kLW9yLmpzJ1xuaW1wb3J0IHsgZ2V0R3JvdXAgfSBmcm9tICcuLi9fbGliLmpzJ1xuXG4vLyAnKGZvbyAmJiAjTm91biknIC0gcmVxdWlyZSBhbGwgbWF0Y2hlcyBvbiB0aGUgdGVybVxuY29uc3QgYW5kQmxvY2sgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY29uc3QgeyByZWdzIH0gPSBzdGF0ZVxuICBsZXQgcmVnID0gcmVnc1tzdGF0ZS5yXVxuXG4gIGxldCBza2lwTnVtID0gZG9BbmRCbG9jayhzdGF0ZSlcbiAgaWYgKHNraXBOdW0pIHtcbiAgICAvLyBoYW5kbGUgJ25vdCcgbG9naWNcbiAgICBpZiAocmVnLm5lZ2F0aXZlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gbnVsbCAvLyBkaWVcbiAgICB9XG4gICAgaWYgKHN0YXRlLmhhc0dyb3VwID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBnID0gZ2V0R3JvdXAoc3RhdGUsIHN0YXRlLnQpXG4gICAgICBnLmxlbmd0aCArPSBza2lwTnVtXG4gICAgfVxuICAgIC8vIGVuc3VyZSB3ZSdyZSBhdCB0aGUgZW5kXG4gICAgaWYgKHJlZy5lbmQgPT09IHRydWUpIHtcbiAgICAgIGxldCBlbmQgPSBzdGF0ZS5waHJhc2VfbGVuZ3RoIC0gMVxuICAgICAgaWYgKHN0YXRlLnQgKyBzdGF0ZS5zdGFydF9pICE9PSBlbmQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUudCArPSBza2lwTnVtXG4gICAgLy8gbG9nKGBcdTI3MTMgfGZvdW5kLWFuZHxgKVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoIXJlZy5vcHRpb25hbCkge1xuICAgIHJldHVybiBudWxsIC8vZGllXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cbmV4cG9ydCBkZWZhdWx0IGFuZEJsb2NrIiwgImltcG9ydCBkb2VzTWF0Y2ggZnJvbSAnLi4vLi4vdGVybS9kb2VzTWF0Y2guanMnXG5cbmNvbnN0IG5lZ0dyZWVkeSA9IGZ1bmN0aW9uIChzdGF0ZSwgcmVnLCBuZXh0UmVnKSB7XG4gIGxldCBza2lwID0gMFxuICBmb3IgKGxldCB0ID0gc3RhdGUudDsgdCA8IHN0YXRlLnRlcm1zLmxlbmd0aDsgdCArPSAxKSB7XG4gICAgbGV0IGZvdW5kID0gZG9lc01hdGNoKHN0YXRlLnRlcm1zW3RdLCByZWcsIHN0YXRlLnN0YXJ0X2kgKyBzdGF0ZS50LCBzdGF0ZS5waHJhc2VfbGVuZ3RoKVxuICAgIC8vIHdlIGRvbid0IHdhbnQgYSBtYXRjaCwgaGVyZVxuICAgIGlmIChmb3VuZCkge1xuICAgICAgYnJlYWsvL3N0b3AgZ29pbmdcbiAgICB9XG4gICAgLy8gYXJlIHdlIGRvaW5nICdncmVlZHktdG8nP1xuICAgIC8vIC0gXCIhZm9vKyBhZnRlclwiICBzaG91bGQgc3RvcCBhdCAnYWZ0ZXInXG4gICAgaWYgKG5leHRSZWcpIHtcbiAgICAgIGZvdW5kID0gZG9lc01hdGNoKHN0YXRlLnRlcm1zW3RdLCBuZXh0UmVnLCBzdGF0ZS5zdGFydF9pICsgc3RhdGUudCwgc3RhdGUucGhyYXNlX2xlbmd0aClcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBza2lwICs9IDFcbiAgICAvLyBpcyBpdCBtYXgtbGVuZ3RoIG5vdz9cbiAgICBpZiAocmVnLm1heCAhPT0gdW5kZWZpbmVkICYmIHNraXAgPT09IHJlZy5tYXgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIGlmIChza2lwID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlIC8vZGVhZFxuICB9XG4gIC8vIGRpZCB3ZSBzYXRpc2Z5IG1pbiBmb3IgIWZvb3ttaW4sbWF4fVxuICBpZiAocmVnLm1pbiAmJiByZWcubWluID4gc2tpcCkge1xuICAgIHJldHVybiBmYWxzZS8vZGVhZFxuICB9XG4gIHN0YXRlLnQgKz0gc2tpcFxuICAvLyBzdGF0ZS5yICs9IDFcbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmVnR3JlZWR5IiwgImltcG9ydCBtYXRjaFRlcm0gZnJvbSAnLi4vdGVybS9kb2VzTWF0Y2guanMnXG5pbXBvcnQgbmVnR3JlZWR5IGZyb20gJy4vbG9naWMvbmVnYXRpdmUtZ3JlZWR5LmpzJ1xuXG4vLyAnIWZvbycgc2hvdWxkIG1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgJ2Zvbydcbi8vIGlmIGl0IG1hdGNoZXMsIHJldHVybiBmYWxzZVxuY29uc3QgZG9OZWdhdGl2ZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjb25zdCB7IHJlZ3MgfSA9IHN0YXRlXG4gIGxldCByZWcgPSByZWdzW3N0YXRlLnJdXG5cbiAgLy8gbWF0Y2ggKmFueXRoaW5nKiBidXQgdGhpcyB0ZXJtXG4gIGxldCB0bXBSZWcgPSBPYmplY3QuYXNzaWduKHt9LCByZWcpXG4gIHRtcFJlZy5uZWdhdGl2ZSA9IGZhbHNlIC8vIHRyeSByZW1vdmluZyBpdFxuXG4gIC8vIGZvdW5kIGl0PyBpZiBzbywgd2UgZGllIGhlcmVcbiAgbGV0IGZvdW5kID0gbWF0Y2hUZXJtKHN0YXRlLnRlcm1zW3N0YXRlLnRdLCB0bXBSZWcsIHN0YXRlLnN0YXJ0X2kgKyBzdGF0ZS50LCBzdGF0ZS5waHJhc2VfbGVuZ3RoKVxuICBpZiAoZm91bmQpIHtcbiAgICByZXR1cm4gZmFsc2UvL2J5ZVxuICB9XG4gIC8vIHNob3VsZCB3ZSBza2lwIHRoZSB0ZXJtIHRvbz9cbiAgaWYgKHJlZy5vcHRpb25hbCkge1xuICAgIC8vIFwiYmVmb3JlIGFmdGVyXCIgLSBcImJlZm9yZSAhZm9vPyBhZnRlclwiXG4gICAgLy8gZG9lcyB0aGUgbmV4dCByZWcgbWF0Y2ggdGhlIHRoaXMgdGVybT9cbiAgICBsZXQgbmV4dFJlZyA9IHJlZ3Nbc3RhdGUuciArIDFdXG4gICAgaWYgKG5leHRSZWcpIHtcbiAgICAgIGxldCBmTmV4dCA9IG1hdGNoVGVybShzdGF0ZS50ZXJtc1tzdGF0ZS50XSwgbmV4dFJlZywgc3RhdGUuc3RhcnRfaSArIHN0YXRlLnQsIHN0YXRlLnBocmFzZV9sZW5ndGgpXG4gICAgICBpZiAoZk5leHQpIHtcbiAgICAgICAgc3RhdGUuciArPSAxXG4gICAgICB9IGVsc2UgaWYgKG5leHRSZWcub3B0aW9uYWwgJiYgcmVnc1tzdGF0ZS5yICsgMl0pIHtcbiAgICAgICAgLy8gdWdoLiBvayxcbiAgICAgICAgLy8gc3VwcG9ydCBcIiFmb28/IGV4dHJhPyBuZWVkXCJcbiAgICAgICAgLy8gYnV0IGRvbid0IHNjYW4gYWhlYWQgbW9yZSB0aGFuIHRoYXQuXG4gICAgICAgIGxldCBmTmV4dDIgPSBtYXRjaFRlcm0oc3RhdGUudGVybXNbc3RhdGUudF0sIHJlZ3Nbc3RhdGUuciArIDJdLCBzdGF0ZS5zdGFydF9pICsgc3RhdGUudCwgc3RhdGUucGhyYXNlX2xlbmd0aClcbiAgICAgICAgaWYgKGZOZXh0Mikge1xuICAgICAgICAgIHN0YXRlLnIgKz0gMlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIG5lZ2F0aXZlIGdyZWVkeSAtICFmb28rICAtIHN1cGVyIGhhcmQhXG4gIGlmIChyZWcuZ3JlZWR5KSB7XG4gICAgcmV0dXJuIG5lZ0dyZWVkeShzdGF0ZSwgdG1wUmVnLCByZWdzW3N0YXRlLnIgKyAxXSlcbiAgfVxuICBzdGF0ZS50ICs9IDFcbiAgcmV0dXJuIHRydWVcbn1cbmV4cG9ydCBkZWZhdWx0IGRvTmVnYXRpdmUiLCAiaW1wb3J0IG1hdGNoVGVybSBmcm9tICcuLi90ZXJtL2RvZXNNYXRjaC5qcydcblxuLy8gJ2Zvbz8gZm9vJyBtYXRjaGVzIGFyZSB0cmlja3kuXG5jb25zdCBmb3VuZE9wdGlvbmFsID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNvbnN0IHsgcmVncyB9ID0gc3RhdGVcbiAgbGV0IHJlZyA9IHJlZ3Nbc3RhdGUucl1cbiAgbGV0IHRlcm0gPSBzdGF0ZS50ZXJtc1tzdGF0ZS50XVxuICAvLyBkb2VzIHRoZSBuZXh0IHJlZyBtYXRjaCBpdCB0b28/XG4gIGxldCBuZXh0UmVnTWF0Y2hlZCA9IG1hdGNoVGVybSh0ZXJtLCByZWdzW3N0YXRlLnIgKyAxXSwgc3RhdGUuc3RhcnRfaSArIHN0YXRlLnQsIHN0YXRlLnBocmFzZV9sZW5ndGgpXG4gIGlmIChyZWcubmVnYXRpdmUgfHwgbmV4dFJlZ01hdGNoZWQpIHtcbiAgICAvLyBidXQgZG9lcyB0aGUgbmV4dCByZWcgbWF0Y2ggdGhlIG5leHQgdGVybT8/XG4gICAgLy8gb25seSBza2lwIGlmIGl0IGRvZXNuJ3RcbiAgICBsZXQgbmV4dFRlcm0gPSBzdGF0ZS50ZXJtc1tzdGF0ZS50ICsgMV1cbiAgICBpZiAoIW5leHRUZXJtIHx8ICFtYXRjaFRlcm0obmV4dFRlcm0sIHJlZ3Nbc3RhdGUuciArIDFdLCBzdGF0ZS5zdGFydF9pICsgc3RhdGUudCwgc3RhdGUucGhyYXNlX2xlbmd0aCkpIHtcbiAgICAgIHN0YXRlLnIgKz0gMVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmb3VuZE9wdGlvbmFsIiwgImltcG9ydCB7IGdldEdyZWVkeSB9IGZyb20gJy4vbG9naWMvZ3JlZWR5LmpzJ1xuXG4vLyBrZWVwICdmb28rJyBvciAnZm9vKicgZ29pbmcuLlxuY29uc3QgZ3JlZWR5TWF0Y2ggPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY29uc3QgeyByZWdzLCBwaHJhc2VfbGVuZ3RoIH0gPSBzdGF0ZVxuICBsZXQgcmVnID0gcmVnc1tzdGF0ZS5yXVxuICBzdGF0ZS50ID0gZ2V0R3JlZWR5KHN0YXRlLCByZWdzW3N0YXRlLnIgKyAxXSlcbiAgaWYgKHN0YXRlLnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbCAvL2dyZWVkeSB3YXMgdG9vIHNob3J0XG4gIH1cbiAgLy8gZm9vezIsNH0gLSBoYXMgYSBncmVlZC1taW5pbXVtXG4gIGlmIChyZWcubWluICYmIHJlZy5taW4gPiBzdGF0ZS50KSB7XG4gICAgcmV0dXJuIG51bGwgLy9ncmVlZHkgd2FzIHRvbyBzaG9ydFxuICB9XG4gIC8vICdmb28rJCcgLSBpZiBhbHNvIGFuIGVuZC1hbmNob3IsIGVuc3VyZSB3ZSByZWFsbHkgcmVhY2hlZCB0aGUgZW5kXG4gIGlmIChyZWcuZW5kID09PSB0cnVlICYmIHN0YXRlLnN0YXJ0X2kgKyBzdGF0ZS50ICE9PSBwaHJhc2VfbGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGwgLy9ncmVlZHkgZGlkbid0IHJlYWNoIHRoZSBlbmRcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuZXhwb3J0IGRlZmF1bHQgZ3JlZWR5TWF0Y2giLCAiLy8gZm9yOiBbJ3dlJywgJ2hhdmUnXVxuLy8gYSBtYXRjaCBmb3IgXCJ3ZSBoYXZlXCIgc2hvdWxkIHdvcmsgYXMgbm9ybWFsXG4vLyBidXQgbWF0Y2hpbmcgXCJ3ZSd2ZVwiIHNob3VsZCBza2lwIG92ZXIgaW1wbGljdCB0ZXJtc1xuY29uc3QgY29udHJhY3Rpb25Ta2lwID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGxldCB0ZXJtID0gc3RhdGUudGVybXNbc3RhdGUudF1cbiAgbGV0IHJlZyA9IHN0YXRlLnJlZ3Nbc3RhdGUucl1cbiAgLy8gZGlkIHdlIG1hdGNoIHRoZSBmaXJzdCBwYXJ0IG9mIGEgY29udHJhY3Rpb24/XG4gIGlmICh0ZXJtLmltcGxpY2l0ICYmIHN0YXRlLnRlcm1zW3N0YXRlLnQgKyAxXSkge1xuICAgIGxldCBuZXh0VGVybSA9IHN0YXRlLnRlcm1zW3N0YXRlLnQgKyAxXVxuICAgIC8vIGVuc3VyZSBuZXh0IHdvcmQgaXMgaW1wbGljaXRcbiAgICBpZiAoIW5leHRUZXJtLmltcGxpY2l0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgLy8gd2UgbWF0Y2hlZCBcIndlJ3ZlXCIgLSBza2lwLW92ZXIgW3dlLCBoYXZlXVxuICAgIGlmIChyZWcud29yZCA9PT0gdGVybS5ub3JtYWwpIHtcbiAgICAgIHN0YXRlLnQgKz0gMVxuICAgIH1cbiAgICAvLyBhbHNvIHNraXAgZm9yIEBoYXNDb250cmFjdGlvblxuICAgIGlmIChyZWcubWV0aG9kID09PSAnaGFzQ29udHJhY3Rpb24nKSB7XG4gICAgICBzdGF0ZS50ICs9IDFcbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGNvbnRyYWN0aW9uU2tpcCIsICJpbXBvcnQgeyBnZXRHcm91cCB9IGZyb20gJy4uL19saWIuanMnXG5pbXBvcnQgZm91bmRPcHRpb25hbCBmcm9tICcuL29wdGlvbmFsLW1hdGNoLmpzJ1xuaW1wb3J0IGdyZWVkeU1hdGNoIGZyb20gJy4vZ3JlZWR5LW1hdGNoLmpzJ1xuaW1wb3J0IGNvbnRyYWN0aW9uU2tpcCBmcm9tICcuL2NvbnRyYWN0aW9uLXNraXAuanMnXG5cblxuLy8gJ1tmb29dJyBzaG91bGQgYWxzbyBiZSBsb2dnZWQgYXMgYSBncm91cFxuY29uc3Qgc2V0R3JvdXAgPSBmdW5jdGlvbiAoc3RhdGUsIHN0YXJ0QXQpIHtcbiAgbGV0IHJlZyA9IHN0YXRlLnJlZ3Nbc3RhdGUucl1cbiAgLy8gR2V0IG9yIGNyZWF0ZSBjYXB0dXJlIGdyb3VwXG4gIGNvbnN0IGcgPSBnZXRHcm91cChzdGF0ZSwgc3RhcnRBdClcbiAgLy8gVXBkYXRlIGdyb3VwIC0gYWRkIGdyZWVkeSBvciBpbmNyZW1lbnQgbGVuZ3RoXG4gIGlmIChzdGF0ZS50ID4gMSAmJiByZWcuZ3JlZWR5KSB7XG4gICAgZy5sZW5ndGggKz0gc3RhdGUudCAtIHN0YXJ0QXRcbiAgfSBlbHNlIHtcbiAgICBnLmxlbmd0aCsrXG4gIH1cbn1cblxuLy8gd2hlbiBhIHJlZyBtYXRjaGVzIGEgdGVybVxuY29uc3Qgc2ltcGxlTWF0Y2ggPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY29uc3QgeyByZWdzIH0gPSBzdGF0ZVxuICBsZXQgcmVnID0gcmVnc1tzdGF0ZS5yXVxuICBsZXQgdGVybSA9IHN0YXRlLnRlcm1zW3N0YXRlLnRdXG4gIGxldCBzdGFydEF0ID0gc3RhdGUudFxuICAvLyBpZiBpdCdzIGEgbmVnYXRpdmUgb3B0aW9uYWwgbWF0Y2guLi4gOjBcbiAgaWYgKHJlZy5vcHRpb25hbCAmJiByZWdzW3N0YXRlLnIgKyAxXSAmJiByZWcubmVnYXRpdmUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vIG9rYXksIGl0IHdhcyBhIG1hdGNoLCBidXQgaWYgaXQncyBvcHRpb25hbCB0b28sXG4gIC8vIHdlIHNob3VsZCBjaGVjayB0aGUgbmV4dCByZWcgdG9vLCB0byBza2lwIGl0P1xuICBpZiAocmVnLm9wdGlvbmFsICYmIHJlZ3Nbc3RhdGUuciArIDFdKSB7XG4gICAgZm91bmRPcHRpb25hbChzdGF0ZSlcbiAgfVxuICAvLyBDb250cmFjdGlvbiBza2lwOlxuICAvLyBkaWQgd2UgbWF0Y2ggdGhlIGZpcnN0IHBhcnQgb2YgYSBjb250cmFjdGlvbj9cbiAgaWYgKHRlcm0uaW1wbGljaXQgJiYgc3RhdGUudGVybXNbc3RhdGUudCArIDFdKSB7XG4gICAgY29udHJhY3Rpb25Ta2lwKHN0YXRlKVxuICB9XG4gIC8vYWR2YW5jZSB0byB0aGUgbmV4dCB0ZXJtIVxuICBzdGF0ZS50ICs9IDFcbiAgLy9jaGVjayBhbnkgZW5kaW5nICckJyBmbGFnc1xuICAvL2lmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgdGVybSwgcmVmdXNlIHRoZSBtYXRjaFxuICBpZiAocmVnLmVuZCA9PT0gdHJ1ZSAmJiBzdGF0ZS50ICE9PSBzdGF0ZS50ZXJtcy5sZW5ndGggJiYgcmVnLmdyZWVkeSAhPT0gdHJ1ZSkge1xuICAgIHJldHVybiBudWxsIC8vZGllXG4gIH1cbiAgLy8ga2VlcCAnZm9vKycgZ29pbmcuLi5cbiAgaWYgKHJlZy5ncmVlZHkgPT09IHRydWUpIHtcbiAgICBsZXQgYWxpdmUgPSBncmVlZHlNYXRjaChzdGF0ZSlcbiAgICBpZiAoIWFsaXZlKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuICAvLyBsb2cgJ1tmb29dJyBhcyBhIGdyb3VwXG4gIGlmIChzdGF0ZS5oYXNHcm91cCA9PT0gdHJ1ZSkge1xuICAgIHNldEdyb3VwKHN0YXRlLCBzdGFydEF0KVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5leHBvcnQgZGVmYXVsdCBzaW1wbGVNYXRjaCIsICJpbXBvcnQgZG9Bc3RyaXggZnJvbSAnLi9zdGVwcy9hc3RyaXguanMnXG5pbXBvcnQgZG9PckJsb2NrIGZyb20gJy4vc3RlcHMvb3ItYmxvY2suanMnXG5pbXBvcnQgZG9BbmRCbG9jayBmcm9tICcuL3N0ZXBzL2FuZC1ibG9jay5qcydcbmltcG9ydCBkb05lZ2F0aXZlIGZyb20gJy4vc3RlcHMvbmVnYXRpdmUuanMnXG5pbXBvcnQgc2ltcGxlTWF0Y2ggZnJvbSAnLi9zdGVwcy9zaW1wbGUtbWF0Y2guanMnXG5pbXBvcnQgeyBpc0VuZEdyZWVkeSB9IGZyb20gJy4vc3RlcHMvbG9naWMvZ3JlZWR5LmpzJ1xuaW1wb3J0IG1hdGNoVGVybSBmcm9tICcuL3Rlcm0vZG9lc01hdGNoLmpzJ1xuLy8gaSBmb3JtYWxseSBhcG9sb2dpemUgZm9yIGhvdyBjb21wbGljYXRlZCB0aGlzIGlzLlxuXG4vKiogXG4gKiB0cnkgYSBzZXF1ZW5jZSBvZiBtYXRjaCB0b2tlbnMgKCdyZWdzJykgXG4gKiBvbiBhIHNlcXVlbmNlIG9mIHRlcm1zLCBcbiAqIHN0YXJ0aW5nIGF0IHRoaXMgY2VydGFpbiB0ZXJtLlxuICovXG5jb25zdCB0cnlIZXJlID0gZnVuY3Rpb24gKHRlcm1zLCByZWdzLCBzdGFydF9pLCBwaHJhc2VfbGVuZ3RoKSB7XG4gIC8vIGNvbnNvbGUubG9nKGBcXG5cXG46c3RhcnQ6ICcke3Rlcm1zWzBdLnRleHR9JzpgKVxuICBpZiAodGVybXMubGVuZ3RoID09PSAwIHx8IHJlZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICAvLyBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IG1hdHRlclxuICBsZXQgc3RhdGUgPSB7XG4gICAgdDogMCxcbiAgICB0ZXJtczogdGVybXMsXG4gICAgcjogMCxcbiAgICByZWdzOiByZWdzLFxuICAgIGdyb3Vwczoge30sXG4gICAgc3RhcnRfaTogc3RhcnRfaSxcbiAgICBwaHJhc2VfbGVuZ3RoOiBwaHJhc2VfbGVuZ3RoLFxuICAgIGluR3JvdXA6IG51bGwsXG4gIH1cblxuICAvLyB3ZSBtdXN0IHNhdGlzZnkgZXZlcnkgdG9rZW4gaW4gJ3JlZ3MnXG4gIC8vIGlmIHdlIGdldCB0byB0aGUgZW5kLCB3ZSBoYXZlIGEgbWF0Y2guXG4gIGZvciAoOyBzdGF0ZS5yIDwgcmVncy5sZW5ndGg7IHN0YXRlLnIgKz0gMSkge1xuICAgIGxldCByZWcgPSByZWdzW3N0YXRlLnJdXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyByZWcgaGFzIGEgbmFtZWQgY2FwdHVyZSBncm91cFxuICAgIHN0YXRlLmhhc0dyb3VwID0gQm9vbGVhbihyZWcuZ3JvdXApXG4gICAgLy8gUmV1c2UgcHJldmlvdXMgY2FwdHVyZSBncm91cCBpZiBzYW1lXG4gICAgaWYgKHN0YXRlLmhhc0dyb3VwID09PSB0cnVlKSB7XG4gICAgICBzdGF0ZS5pbkdyb3VwID0gcmVnLmdyb3VwXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmluR3JvdXAgPSBudWxsXG4gICAgfVxuICAgIC8vaGF2ZSB3ZSBydW4tb3V0IG9mIHRlcm1zP1xuICAgIGlmICghc3RhdGUudGVybXNbc3RhdGUudF0pIHtcbiAgICAgIC8vYXJlIGFsbCByZW1haW5pbmcgcmVncyBvcHRpb25hbCBvciBuZWdhdGl2ZT9cbiAgICAgIGNvbnN0IGFsaXZlID0gcmVncy5zbGljZShzdGF0ZS5yKS5zb21lKHJlbWFpbiA9PiAhcmVtYWluLm9wdGlvbmFsKVxuICAgICAgaWYgKGFsaXZlID09PSBmYWxzZSkge1xuICAgICAgICBicmVhayAvL2RvbmUhXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbCAvLyBkaWVcbiAgICB9XG4gICAgLy8gc3VwcG9ydCAndW5zcGVjaWZpYyBncmVlZHknIC4qIHByb3Blcmx5XG4gICAgaWYgKHJlZy5hbnl0aGluZyA9PT0gdHJ1ZSAmJiByZWcuZ3JlZWR5ID09PSB0cnVlKSB7XG4gICAgICBsZXQgYWxpdmUgPSBkb0FzdHJpeChzdGF0ZSlcbiAgICAgIGlmICghYWxpdmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIC8vIHNsb3ctT1IgLSBtdWx0aS13b3JkIE9SIChhfGJ8Zm9vIGJhcilcbiAgICBpZiAocmVnLmNob2ljZXMgIT09IHVuZGVmaW5lZCAmJiByZWcub3BlcmF0b3IgPT09ICdvcicpIHtcbiAgICAgIGxldCBhbGl2ZSA9IGRvT3JCbG9jayhzdGF0ZSlcbiAgICAgIGlmICghYWxpdmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIC8vIHNsb3ctQU5EIC0gbXVsdGktd29yZCBBTkQgKCNOb3VuICYmIGZvbykgYmxvY2tzXG4gICAgaWYgKHJlZy5jaG9pY2VzICE9PSB1bmRlZmluZWQgJiYgcmVnLm9wZXJhdG9yID09PSAnYW5kJykge1xuICAgICAgbGV0IGFsaXZlID0gZG9BbmRCbG9jayhzdGF0ZSlcbiAgICAgIGlmICghYWxpdmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIC8vIHN1cHBvcnQgJy4nIGFzIGFueS1zaW5nbGVcbiAgICBpZiAocmVnLmFueXRoaW5nID09PSB0cnVlKSB7XG4gICAgICAvLyAnIS4nIG5lZ2F0aXZlIGFueXRoaW5nIHNob3VsZCBpbnN0YS1mYWlsXG4gICAgICBpZiAocmVnLm5lZ2F0aXZlICYmIHJlZy5hbnl0aGluZykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgbGV0IGFsaXZlID0gc2ltcGxlTWF0Y2goc3RhdGUpXG4gICAgICBpZiAoIWFsaXZlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICAvLyBzdXBwb3J0ICdmb28qJCcgdW50aWwgdGhlIGVuZFxuICAgIGlmIChpc0VuZEdyZWVkeShyZWcsIHN0YXRlKSA9PT0gdHJ1ZSkge1xuICAgICAgbGV0IGFsaXZlID0gc2ltcGxlTWF0Y2goc3RhdGUpXG4gICAgICBpZiAoIWFsaXZlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICAvLyBvaywgaXQgZG9lc24ndCBtYXRjaCAtIGJ1dCBtYXliZSBpdCB3YXNuJ3QgKnN1cHBvc2VkKiB0bz9cbiAgICBpZiAocmVnLm5lZ2F0aXZlKSB7XG4gICAgICAvLyB3ZSB3YW50ICphbnl0aGluZyogYnV0IHRoaXMgdGVybVxuICAgICAgbGV0IGFsaXZlID0gZG9OZWdhdGl2ZShzdGF0ZSlcbiAgICAgIGlmICghYWxpdmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIC8vIG9rLCBmaW5hbGx5IHRlc3QgdGhlIHRlcm0tcmVnXG4gICAgbGV0IGhhc01hdGNoID0gbWF0Y2hUZXJtKHN0YXRlLnRlcm1zW3N0YXRlLnRdLCByZWcsIHN0YXRlLnN0YXJ0X2kgKyBzdGF0ZS50LCBzdGF0ZS5waHJhc2VfbGVuZ3RoKVxuICAgIGlmIChoYXNNYXRjaCA9PT0gdHJ1ZSkge1xuICAgICAgbGV0IGFsaXZlID0gc2ltcGxlTWF0Y2goc3RhdGUpXG4gICAgICBpZiAoIWFsaXZlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICAvL29rIHdobyBjYXJlcywga2VlcCBnb2luZ1xuICAgIGlmIChyZWcub3B0aW9uYWwgPT09IHRydWUpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gZmluYWxseSwgd2UgZGllXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICAvL3JldHVybiBvdXIgcmVzdWx0cywgYXMgcG9pbnRlcnNcbiAgbGV0IHBudHIgPSBbbnVsbCwgc3RhcnRfaSwgc3RhdGUudCArIHN0YXJ0X2ldXG4gIGlmIChwbnRyWzFdID09PSBwbnRyWzJdKSB7XG4gICAgcmV0dXJuIG51bGwgLy9mb3VuZCAwIHRlcm1zXG4gIH1cbiAgbGV0IGdyb3VwcyA9IHt9XG4gIE9iamVjdC5rZXlzKHN0YXRlLmdyb3VwcykuZm9yRWFjaChrID0+IHtcbiAgICBsZXQgbyA9IHN0YXRlLmdyb3Vwc1trXVxuICAgIGxldCBzdGFydCA9IHN0YXJ0X2kgKyBvLnN0YXJ0XG4gICAgZ3JvdXBzW2tdID0gW251bGwsIHN0YXJ0LCBzdGFydCArIG8ubGVuZ3RoXVxuICB9KVxuICByZXR1cm4geyBwb2ludGVyOiBwbnRyLCBncm91cHM6IGdyb3VwcyB9XG59XG5leHBvcnQgZGVmYXVsdCB0cnlIZXJlXG4iLCAiLy8gc3VwcG9ydCByZXR1cm5pbmcgYSBzdWJzZXQgb2YgYSBtYXRjaFxuLy8gbGlrZSAnZm9vIFtiYXJdIGJheicgLT4gYmFyXG5jb25zdCBnZXRHcm91cCA9IGZ1bmN0aW9uIChyZXMsIGdyb3VwKSB7XG4gIGxldCBwdHJzID0gW11cbiAgbGV0IGJ5R3JvdXAgPSB7fVxuICBpZiAocmVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IHB0cnMsIGJ5R3JvdXAgfVxuICB9XG4gIGlmICh0eXBlb2YgZ3JvdXAgPT09ICdudW1iZXInKSB7XG4gICAgZ3JvdXAgPSBTdHJpbmcoZ3JvdXApXG4gIH1cbiAgaWYgKGdyb3VwKSB7XG4gICAgcmVzLmZvckVhY2gociA9PiB7XG4gICAgICBpZiAoci5ncm91cHNbZ3JvdXBdKSB7XG4gICAgICAgIHB0cnMucHVzaChyLmdyb3Vwc1tncm91cF0pXG4gICAgICB9XG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICByZXMuZm9yRWFjaChyID0+IHtcbiAgICAgIHB0cnMucHVzaChyLnBvaW50ZXIpXG4gICAgICBPYmplY3Qua2V5cyhyLmdyb3VwcykuZm9yRWFjaChrID0+IHtcbiAgICAgICAgYnlHcm91cFtrXSA9IGJ5R3JvdXBba10gfHwgW11cbiAgICAgICAgYnlHcm91cFtrXS5wdXNoKHIuZ3JvdXBzW2tdKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG4gIHJldHVybiB7IHB0cnMsIGJ5R3JvdXAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZ2V0R3JvdXBcbiIsICJpbXBvcnQgZnJvbUhlcmUgZnJvbSAnLi8wMi1mcm9tLWhlcmUuanMnXG5cbmNvbnN0IG5vdElmID0gZnVuY3Rpb24gKHJlc3VsdHMsIG5vdCwgZG9jcykge1xuICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIocmVzID0+IHtcbiAgICBsZXQgW24sIHN0YXJ0LCBlbmRdID0gcmVzLnBvaW50ZXJcbiAgICBsZXQgdGVybXMgPSBkb2NzW25dLnNsaWNlKHN0YXJ0LCBlbmQpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXJtcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgbGV0IHNsaWNlID0gdGVybXMuc2xpY2UoaSlcbiAgICAgIGxldCBmb3VuZCA9IGZyb21IZXJlKHNsaWNlLCBub3QsIGksIHRlcm1zLmxlbmd0aClcbiAgICAgIGlmIChmb3VuZCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfSlcbiAgcmV0dXJuIHJlc3VsdHNcbn1cblxuZXhwb3J0IGRlZmF1bHQgbm90SWYiLCAiaW1wb3J0IGZhaWxGYXN0IGZyb20gJy4vMDEtZmFpbEZhc3QuanMnXG5pbXBvcnQgZnJvbUhlcmUgZnJvbSAnLi8wMi1mcm9tLWhlcmUuanMnXG5pbXBvcnQgZ2V0R3JvdXAgZnJvbSAnLi8wMy1nZXRHcm91cC5qcydcbmltcG9ydCBub3RJZiBmcm9tICcuLzAzLW5vdElmLmpzJ1xuXG5cbi8vIG1ha2UgcHJvcGVyIHBvaW50ZXJzXG5jb25zdCBhZGRTZW50ZW5jZSA9IGZ1bmN0aW9uIChyZXMsIG4pIHtcbiAgcmVzLnBvaW50ZXJbMF0gPSBuXG4gIE9iamVjdC5rZXlzKHJlcy5ncm91cHMpLmZvckVhY2goayA9PiB7XG4gICAgcmVzLmdyb3Vwc1trXVswXSA9IG5cbiAgfSlcbiAgcmV0dXJuIHJlc1xufVxuXG5jb25zdCBoYW5kbGVTdGFydCA9IGZ1bmN0aW9uICh0ZXJtcywgcmVncywgbikge1xuICBsZXQgcmVzID0gZnJvbUhlcmUodGVybXMsIHJlZ3MsIDAsIHRlcm1zLmxlbmd0aClcbiAgaWYgKHJlcykge1xuICAgIHJlcyA9IGFkZFNlbnRlbmNlKHJlcywgbilcbiAgICByZXR1cm4gcmVzIC8vZ2V0R3JvdXAoW3Jlc10sIGdyb3VwKVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbi8vIG9rLCBoZXJlIHdlIGdvLlxuY29uc3QgcnVuTWF0Y2ggPSBmdW5jdGlvbiAoZG9jcywgdG9kbywgY2FjaGUpIHtcbiAgY2FjaGUgPSBjYWNoZSB8fCBbXVxuICBsZXQgeyByZWdzLCBncm91cCwganVzdE9uZSB9ID0gdG9kb1xuICBsZXQgcmVzdWx0cyA9IFtdXG4gIGlmICghcmVncyB8fCByZWdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IHB0cnM6IFtdLCBieUdyb3VwOiB7fSB9XG4gIH1cblxuICBjb25zdCBtaW5MZW5ndGggPSByZWdzLmZpbHRlcihyID0+IHIub3B0aW9uYWwgIT09IHRydWUgJiYgci5uZWdhdGl2ZSAhPT0gdHJ1ZSkubGVuZ3RoXG4gIGRvY3M6IGZvciAobGV0IG4gPSAwOyBuIDwgZG9jcy5sZW5ndGg7IG4gKz0gMSkge1xuICAgIGxldCB0ZXJtcyA9IGRvY3Nbbl1cbiAgICAvLyBsZXQgaW5kZXggPSB0ZXJtc1swXS5pbmRleCB8fCBbXVxuICAgIC8vIGNhbiB3ZSBza2lwIHRoaXMgc2VudGVuY2U/XG4gICAgaWYgKGNhY2hlW25dICYmIGZhaWxGYXN0KHJlZ3MsIGNhY2hlW25dKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgLy8gXnN0YXJ0IHJlZ3Mgb25seSBydW4gb25jZSwgcGVyIHBocmFzZVxuICAgIGlmIChyZWdzWzBdLnN0YXJ0ID09PSB0cnVlKSB7XG4gICAgICBsZXQgZm91bmRTdGFydCA9IGhhbmRsZVN0YXJ0KHRlcm1zLCByZWdzLCBuLCBncm91cClcbiAgICAgIGlmIChmb3VuZFN0YXJ0KSB7XG4gICAgICAgIHJlc3VsdHMucHVzaChmb3VuZFN0YXJ0KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgLy9vaywgdHJ5IHN0YXJ0aW5nIHRoZSBtYXRjaCBub3cgZnJvbSBldmVyeSB0ZXJtXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXJtcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgbGV0IHNsaWNlID0gdGVybXMuc2xpY2UoaSlcbiAgICAgIC8vIGVuc3VyZSBpdCdzIGxvbmctZW5vdWdoXG4gICAgICBpZiAoc2xpY2UubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBsZXQgcmVzID0gZnJvbUhlcmUoc2xpY2UsIHJlZ3MsIGksIHRlcm1zLmxlbmd0aClcbiAgICAgIC8vIGRpZCB3ZSBmaW5kIGEgcmVzdWx0P1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICAvLyByZXMgPSBhZGRTZW50ZW5jZShyZXMsIGluZGV4WzBdKVxuICAgICAgICByZXMgPSBhZGRTZW50ZW5jZShyZXMsIG4pXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXMpXG4gICAgICAgIC8vIHNob3VsZCB3ZSBzdG9wIGhlcmU/XG4gICAgICAgIGlmIChqdXN0T25lID09PSB0cnVlKSB7XG4gICAgICAgICAgYnJlYWsgZG9jc1xuICAgICAgICB9XG4gICAgICAgIC8vIHNraXAgYWhlYWQsIG92ZXIgdGhlc2UgcmVzdWx0c1xuICAgICAgICBsZXQgZW5kID0gcmVzLnBvaW50ZXJbMl1cbiAgICAgICAgaWYgKE1hdGguYWJzKGVuZCAtIDEpID4gaSkge1xuICAgICAgICAgIGkgPSBNYXRoLmFicyhlbmQgLSAxKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGVuc3VyZSBhbnkgZW5kLXJlc3VsdHMgKCQpIG1hdGNoIHVudGlsIHRoZSBsYXN0IHRlcm1cbiAgaWYgKHJlZ3NbcmVncy5sZW5ndGggLSAxXS5lbmQgPT09IHRydWUpIHtcbiAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIocmVzID0+IHtcbiAgICAgIGxldCBuID0gcmVzLnBvaW50ZXJbMF1cbiAgICAgIHJldHVybiBkb2NzW25dLmxlbmd0aCA9PT0gcmVzLnBvaW50ZXJbMl1cbiAgICB9KVxuICB9XG4gIGlmICh0b2RvLm5vdElmKSB7XG4gICAgcmVzdWx0cyA9IG5vdElmKHJlc3VsdHMsIHRvZG8ubm90SWYsIGRvY3MpXG4gIH1cbiAgLy8gZ3JhYiB0aGUgcmVxdWVzdGVkIGdyb3VwXG4gIHJlc3VsdHMgPSBnZXRHcm91cChyZXN1bHRzLCBncm91cClcbiAgLy8gYWRkIGlkcyB0byBwb2ludGVyc1xuICByZXN1bHRzLnB0cnMuZm9yRWFjaChwdHIgPT4ge1xuICAgIGxldCBbbiwgc3RhcnQsIGVuZF0gPSBwdHJcbiAgICBwdHJbM10gPSBkb2NzW25dW3N0YXJ0XS5pZC8vc3RhcnQtaWRcbiAgICBwdHJbNF0gPSBkb2NzW25dW2VuZCAtIDFdLmlkLy9lbmQtaWRcbiAgfSlcbiAgcmV0dXJuIHJlc3VsdHNcbn1cblxuZXhwb3J0IGRlZmF1bHQgcnVuTWF0Y2hcbiIsICJpbXBvcnQgcGFyc2VNYXRjaCBmcm9tICcuL3BhcnNlTWF0Y2gvaW5kZXguanMnXG5pbXBvcnQgbWF0Y2ggZnJvbSAnLi9tYXRjaC9pbmRleC5qcydcbmltcG9ydCB0ZXJtTWV0aG9kcyBmcm9tICcuL3Rlcm1NZXRob2RzLmpzJ1xuXG5jb25zdCBtZXRob2RzID0ge1xuICBvbmU6IHtcbiAgICB0ZXJtTWV0aG9kcyxcbiAgICBwYXJzZU1hdGNoLFxuICAgIG1hdGNoLFxuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBtZXRob2RzXG4iLCAiXG5leHBvcnQgZGVmYXVsdCB7XG4gIC8qKiBwcmUtcGFyc2UgYW55IG1hdGNoIHN0YXRlbWVudHMgKi9cbiAgcGFyc2VNYXRjaDogZnVuY3Rpb24gKHN0ciwgb3B0cykge1xuICAgIGNvbnN0IHdvcmxkID0gdGhpcy53b3JsZCgpXG4gICAgbGV0IGtpbGxVbmljb2RlID0gd29ybGQubWV0aG9kcy5vbmUua2lsbFVuaWNvZGVcbiAgICBpZiAoa2lsbFVuaWNvZGUpIHtcbiAgICAgIHN0ciA9IGtpbGxVbmljb2RlKHN0ciwgd29ybGQpXG4gICAgfVxuICAgIHJldHVybiB3b3JsZC5tZXRob2RzLm9uZS5wYXJzZU1hdGNoKHN0ciwgb3B0cywgd29ybGQpXG4gIH1cbn0iLCAiaW1wb3J0IGFwaSBmcm9tICcuL2FwaS9pbmRleC5qcydcbmltcG9ydCBtZXRob2RzIGZyb20gJy4vbWV0aG9kcy9pbmRleC5qcydcbmltcG9ydCBsaWIgZnJvbSAnLi9saWIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXBpLFxuICBtZXRob2RzLFxuICBsaWIsXG59XG4iLCAiY29uc3QgaXNDbGFzcyA9IC9eXFwuLi9cbmNvbnN0IGlzSWQgPSAvXiMuL1xuXG5jb25zdCBlc2NhcGVYbWwgPSBzdHIgPT4ge1xuICBzdHIgPSBzdHIucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICBzdHIgPSBzdHIucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICBzdHIgPSBzdHIucmVwbGFjZSgvJy9nLCAnJmFwb3M7JylcbiAgcmV0dXJuIHN0clxufVxuXG4vLyBpbnRlcnByZXQgLmNsYXNzLCAjaWQsIHRhZ05hbWVcbmNvbnN0IHRvVGFnID0gZnVuY3Rpb24gKGspIHtcbiAgbGV0IHN0YXJ0ID0gJydcbiAgbGV0IGVuZCA9ICc8L3NwYW4+J1xuICBrID0gZXNjYXBlWG1sKGspXG4gIGlmIChpc0NsYXNzLnRlc3QoaykpIHtcbiAgICBzdGFydCA9IGA8c3BhbiBjbGFzcz1cIiR7ay5yZXBsYWNlKC9eXFwuLywgJycpfVwiYFxuICB9IGVsc2UgaWYgKGlzSWQudGVzdChrKSkge1xuICAgIHN0YXJ0ID0gYDxzcGFuIGlkPVwiJHtrLnJlcGxhY2UoL14jLywgJycpfVwiYFxuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gYDwke2t9YFxuICAgIGVuZCA9IGA8LyR7a30+YFxuICB9XG4gIHN0YXJ0ICs9ICc+J1xuICByZXR1cm4geyBzdGFydCwgZW5kIH1cbn1cblxuY29uc3QgZ2V0SW5kZXggPSBmdW5jdGlvbiAoZG9jLCBvYmopIHtcbiAgbGV0IHN0YXJ0cyA9IHt9XG4gIGxldCBlbmRzID0ge31cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xuICAgIGxldCByZXMgPSBvYmpba11cbiAgICBsZXQgdGFnID0gdG9UYWcoaylcbiAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlcyA9IGRvYy5tYXRjaChyZXMpXG4gICAgfVxuICAgIHJlcy5kb2NzLmZvckVhY2godGVybXMgPT4ge1xuICAgICAgLy8gZG9uJ3QgaGlnaGxpZ2h0IGltcGxpY2l0IHRlcm1zXG4gICAgICBpZiAodGVybXMuZXZlcnkodCA9PiB0LmltcGxpY2l0KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGxldCBhID0gdGVybXNbMF0uaWRcbiAgICAgIHN0YXJ0c1thXSA9IHN0YXJ0c1thXSB8fCBbXVxuICAgICAgc3RhcnRzW2FdLnB1c2godGFnLnN0YXJ0KVxuICAgICAgbGV0IGIgPSB0ZXJtc1t0ZXJtcy5sZW5ndGggLSAxXS5pZFxuICAgICAgZW5kc1tiXSA9IGVuZHNbYl0gfHwgW11cbiAgICAgIGVuZHNbYl0ucHVzaCh0YWcuZW5kKVxuICAgIH0pXG4gIH0pXG4gIHJldHVybiB7IHN0YXJ0cywgZW5kcyB9XG59XG5cbmNvbnN0IGh0bWwgPSBmdW5jdGlvbiAob2JqKSB7XG4gIC8vIGluZGV4IGlkcyB0byBoaWdobGlnaHRcbiAgbGV0IHsgc3RhcnRzLCBlbmRzIH0gPSBnZXRJbmRleCh0aGlzLCBvYmopXG4gIC8vIGNyZWF0ZSB0aGUgdGV4dCBvdXRwdXRcbiAgbGV0IG91dCA9ICcnXG4gIHRoaXMuZG9jcy5mb3JFYWNoKHRlcm1zID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBsZXQgdCA9IHRlcm1zW2ldXG4gICAgICAvLyBkbyBhIHNwYW4gdGFnXG4gICAgICBpZiAoc3RhcnRzLmhhc093blByb3BlcnR5KHQuaWQpKSB7XG4gICAgICAgIG91dCArPSBzdGFydHNbdC5pZF0uam9pbignJylcbiAgICAgIH1cbiAgICAgIG91dCArPSB0LnByZSB8fCAnJ1xuICAgICAgb3V0ICs9IHQudGV4dCB8fCAnJ1xuICAgICAgaWYgKGVuZHMuaGFzT3duUHJvcGVydHkodC5pZCkpIHtcbiAgICAgICAgb3V0ICs9IGVuZHNbdC5pZF0uam9pbignJylcbiAgICAgIH1cbiAgICAgIG91dCArPSB0LnBvc3QgfHwgJydcbiAgICB9XG4gIH0pXG4gIHJldHVybiBvdXRcbn1cbmV4cG9ydCBkZWZhdWx0IHsgaHRtbCB9XG4iLCAiY29uc3QgdHJpbUVuZCA9IC9bLDo7KVxcXSouP34hXFx1MDAyMlxcdUZGMDJcXHUyMDFEXFx1MjAxOVxcdTAwQkJcXHUyMDNBXFx1MjAzMlxcdTIwMzNcXHUyMDM0XFx1MzAxRVxcdTAwQjRcdTIwMTQtXSskL1xuY29uc3QgdHJpbVN0YXJ0ID1cbiAgL15bKFsnXCIqflxcdUZGMDJcXHUyMDFDXFx1MjAxOFxcdTIwMUZcXHUyMDFCXFx1MjAxRVxcdTJFNDJcXHUyMDFBXFx1MDBBQlxcdTIwMzlcXHUyMDM1XFx1MjAzNlxcdTIwMzdcXHUzMDFEXFx1MDA2MFxcdTMwMUZdKy9cblxuY29uc3QgcHVuY3RUb0tpbGwgPSAvWyw6OykoJ1wiXFx1MjAxRFxcXV0vXG5jb25zdCBpc0h5cGhlbiA9IC9eWy1cdTIwMTNcdTIwMTRdJC9cbmNvbnN0IGhhc1NwYWNlID0gLyAvXG5cbmNvbnN0IHRleHRGcm9tVGVybXMgPSBmdW5jdGlvbiAodGVybXMsIG9wdHMsIGtlZXBTcGFjZSA9IHRydWUpIHtcbiAgbGV0IHR4dCA9ICcnXG4gIHRlcm1zLmZvckVhY2godCA9PiB7XG4gICAgbGV0IHByZSA9IHQucHJlIHx8ICcnXG4gICAgbGV0IHBvc3QgPSB0LnBvc3QgfHwgJydcbiAgICBpZiAob3B0cy5wdW5jdHVhdGlvbiA9PT0gJ3NvbWUnKSB7XG4gICAgICBwcmUgPSBwcmUucmVwbGFjZSh0cmltU3RhcnQsICcnKVxuICAgICAgLy8gcmVwbGFjZSBhIGh5cGhlbiB3aXRoIGEgc3BhY2VcbiAgICAgIGlmIChpc0h5cGhlbi50ZXN0KHBvc3QpKSB7XG4gICAgICAgIHBvc3QgPSAnICdcbiAgICAgIH1cbiAgICAgIHBvc3QgPSBwb3N0LnJlcGxhY2UocHVuY3RUb0tpbGwsICcnKVxuICAgICAgLy8gY2xlYW51cCBleGNsYW1hdGlvbnNcbiAgICAgIHBvc3QgPSBwb3N0LnJlcGxhY2UoL1xcPyErLywgJz8nKVxuICAgICAgcG9zdCA9IHBvc3QucmVwbGFjZSgvISsvLCAnIScpXG4gICAgICBwb3N0ID0gcG9zdC5yZXBsYWNlKC9cXD8rLywgJz8nKVxuICAgICAgLy8ga2lsbCBlbGlwc2VzXG4gICAgICBwb3N0ID0gcG9zdC5yZXBsYWNlKC9cXC57Mix9LywgJycpXG4gICAgICAvLyBraWxsIGFiYnJldmlhdGlvbiBwZXJpb2RzXG4gICAgICBpZiAodC50YWdzLmhhcygnQWJicmV2aWF0aW9uJykpIHtcbiAgICAgICAgcG9zdCA9IHBvc3QucmVwbGFjZSgvXFwuLywgJycpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRzLndoaXRlc3BhY2UgPT09ICdzb21lJykge1xuICAgICAgcHJlID0gcHJlLnJlcGxhY2UoL1xccy8sICcnKSAvL3JlbW92ZSBwcmUtd2hpdGVzcGFjZVxuICAgICAgcG9zdCA9IHBvc3QucmVwbGFjZSgvXFxzKy8sICcgJykgLy9yZXBsYWNlIHBvc3Qtd2hpdGVzcGFjZSB3aXRoIGEgc3BhY2VcbiAgICB9XG4gICAgaWYgKCFvcHRzLmtlZXBQdW5jdCkge1xuICAgICAgcHJlID0gcHJlLnJlcGxhY2UodHJpbVN0YXJ0LCAnJylcbiAgICAgIGlmIChwb3N0ID09PSAnLScpIHtcbiAgICAgICAgcG9zdCA9ICcgJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9zdCA9IHBvc3QucmVwbGFjZSh0cmltRW5kLCAnJylcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZ3JhYiB0aGUgY29ycmVjdCB3b3JkIGZvcm1hdFxuICAgIGxldCB3b3JkID0gdFtvcHRzLmZvcm0gfHwgJ3RleHQnXSB8fCB0Lm5vcm1hbCB8fCAnJ1xuICAgIGlmIChvcHRzLmZvcm0gPT09ICdpbXBsaWNpdCcpIHtcbiAgICAgIHdvcmQgPSB0LmltcGxpY2l0IHx8IHQudGV4dFxuICAgIH1cbiAgICBpZiAob3B0cy5mb3JtID09PSAncm9vdCcgJiYgdC5pbXBsaWNpdCkge1xuICAgICAgd29yZCA9IHQucm9vdCB8fCB0LmltcGxpY2l0IHx8IHQubm9ybWFsXG4gICAgfVxuICAgIC8vIGFkZCBhbiBpbXBsaWNpdCBzcGFjZSwgZm9yIGNvbnRyYWN0aW9uc1xuICAgIGlmICgob3B0cy5mb3JtID09PSAnbWFjaGluZScgfHwgb3B0cy5mb3JtID09PSAnaW1wbGljaXQnIHx8IG9wdHMuZm9ybSA9PT0gJ3Jvb3QnKSAmJiB0LmltcGxpY2l0KSB7XG4gICAgICBpZiAoIXBvc3QgfHwgIWhhc1NwYWNlLnRlc3QocG9zdCkpIHtcbiAgICAgICAgcG9zdCArPSAnICdcbiAgICAgIH1cbiAgICB9XG4gICAgdHh0ICs9IHByZSArIHdvcmQgKyBwb3N0XG4gIH0pXG4gIGlmIChrZWVwU3BhY2UgPT09IGZhbHNlKSB7XG4gICAgdHh0ID0gdHh0LnRyaW0oKVxuICB9XG4gIGlmIChvcHRzLmxvd2VyQ2FzZSA9PT0gdHJ1ZSkge1xuICAgIHR4dCA9IHR4dC50b0xvd2VyQ2FzZSgpXG4gIH1cbiAgcmV0dXJuIHR4dFxufVxuXG5jb25zdCB0ZXh0RnJvbURvYyA9IGZ1bmN0aW9uIChkb2NzLCBvcHRzKSB7XG4gIGxldCB0ZXh0ID0gJydcbiAgaWYgKCFkb2NzIHx8ICFkb2NzWzBdIHx8ICFkb2NzWzBdWzBdKSB7XG4gICAgcmV0dXJuIHRleHRcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAvLyBtaWRkbGVcbiAgICB0ZXh0ICs9IHRleHRGcm9tVGVybXMoZG9jc1tpXSwgb3B0cywgdHJ1ZSlcbiAgfVxuICBpZiAoIW9wdHMua2VlcFNwYWNlKSB7XG4gICAgdGV4dCA9IHRleHQudHJpbSgpXG4gIH1cbiAgaWYgKG9wdHMua2VlcEVuZFB1bmN0ID09PSBmYWxzZSkge1xuICAgIC8vIGRvbid0IHJlbW92ZSAnOiknIGV0Y1xuICAgIGlmICghZG9jc1swXVswXS50YWdzLmhhcygnRW1vdGljb24nKSkge1xuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSh0cmltU3RhcnQsICcnKVxuICAgIH1cbiAgICAvLyByZW1vdmUgZW5kaW5nIHBlcmlvZHNcbiAgICBsZXQgbGFzdCA9IGRvY3NbZG9jcy5sZW5ndGggLSAxXVxuICAgIGlmICghbGFzdFtsYXN0Lmxlbmd0aCAtIDFdLnRhZ3MuaGFzKCdFbW90aWNvbicpKSB7XG4gICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHRyaW1FbmQsICcnKVxuICAgIH1cbiAgICAvLyBraWxsIGVuZCBxdW90YXRpb25zXG4gICAgaWYgKHRleHQuZW5kc1dpdGgoYCdgKSAmJiAhdGV4dC5lbmRzV2l0aChgcydgKSkge1xuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvJy8sICcnKVxuICAgIH1cbiAgfVxuICBpZiAob3B0cy5jbGVhbldoaXRlc3BhY2UgPT09IHRydWUpIHtcbiAgICB0ZXh0ID0gdGV4dC50cmltKClcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuZXhwb3J0IHsgdGV4dEZyb21Eb2MsIHRleHRGcm9tVGVybXMgfVxuIiwgImNvbnN0IGZtdHMgPSB7XG4gIHRleHQ6IHtcbiAgICBmb3JtOiAndGV4dCcsXG4gIH0sXG4gIG5vcm1hbDoge1xuICAgIHdoaXRlc3BhY2U6ICdzb21lJyxcbiAgICBwdW5jdHVhdGlvbjogJ3NvbWUnLFxuICAgIGNhc2U6ICdzb21lJyxcbiAgICB1bmljb2RlOiAnc29tZScsXG4gICAgZm9ybTogJ25vcm1hbCcsXG4gIH0sXG4gIG1hY2hpbmU6IHtcbiAgICBrZWVwU3BhY2U6IGZhbHNlLFxuICAgIHdoaXRlc3BhY2U6ICdzb21lJyxcbiAgICBwdW5jdHVhdGlvbjogJ3NvbWUnLFxuICAgIGNhc2U6ICdub25lJyxcbiAgICB1bmljb2RlOiAnc29tZScsXG4gICAgZm9ybTogJ21hY2hpbmUnLFxuICB9LFxuICByb290OiB7XG4gICAga2VlcFNwYWNlOiBmYWxzZSxcbiAgICB3aGl0ZXNwYWNlOiAnc29tZScsXG4gICAgcHVuY3R1YXRpb246ICdzb21lJyxcbiAgICBjYXNlOiAnc29tZScsXG4gICAgdW5pY29kZTogJ3NvbWUnLFxuICAgIGZvcm06ICdyb290JyxcbiAgfSxcbiAgaW1wbGljaXQ6IHtcbiAgICBmb3JtOiAnaW1wbGljaXQnLFxuICB9XG59XG5mbXRzLmNsZWFuID0gZm10cy5ub3JtYWxcbmZtdHMucmVkdWNlZCA9IGZtdHMucm9vdFxuZXhwb3J0IGRlZmF1bHQgZm10cyIsICIvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLWFzc2lnbiAqL1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vamJ0L3RpbnktaGFzaGVzL1xubGV0IGsgPSBbXSxcbiAgaSA9IDBcbmZvciAoOyBpIDwgNjQ7ICkge1xuICBrW2ldID0gMCB8IChNYXRoLnNpbigrK2kgJSBNYXRoLlBJKSAqIDQyOTQ5NjcyOTYpXG59XG5cbmNvbnN0IG1kNSA9IGZ1bmN0aW9uIChzKSB7XG4gIGxldCBiLFxuICAgIGMsXG4gICAgZCxcbiAgICBoID0gWyhiID0gMHg2NzQ1MjMwMSksIChjID0gMHhlZmNkYWI4OSksIH5iLCB+Y10sXG4gICAgd29yZHMgPSBbXSxcbiAgICBqID0gZGVjb2RlVVJJKGVuY29kZVVSSShzKSkgKyAnXFx4ODAnLFxuICAgIGEgPSBqLmxlbmd0aFxuXG4gIHMgPSAoLS1hIC8gNCArIDIpIHwgMTVcblxuICB3b3Jkc1stLXNdID0gYSAqIDhcblxuICBmb3IgKDsgfmE7ICkge1xuICAgIHdvcmRzW2EgPj4gMl0gfD0gai5jaGFyQ29kZUF0KGEpIDw8ICg4ICogYS0tKVxuICB9XG5cbiAgZm9yIChpID0gaiA9IDA7IGkgPCBzOyBpICs9IDE2KSB7XG4gICAgYSA9IGhcblxuICAgIGZvciAoXG4gICAgICA7XG4gICAgICBqIDwgNjQ7XG4gICAgICBhID0gW1xuICAgICAgICAoZCA9IGFbM10pLFxuICAgICAgICBiICtcbiAgICAgICAgICAoKChkID1cbiAgICAgICAgICAgIGFbMF0gK1xuICAgICAgICAgICAgWyhiICYgYykgfCAofmIgJiBkKSwgKGQgJiBiKSB8ICh+ZCAmIGMpLCBiIF4gYyBeIGQsIGMgXiAoYiB8IH5kKV1bKGEgPSBqID4+IDQpXSArXG4gICAgICAgICAgICBrW2pdICtcbiAgICAgICAgICAgIH5+d29yZHNbaSB8IChbaiwgNSAqIGogKyAxLCAzICogaiArIDUsIDcgKiBqXVthXSAmIDE1KV0pIDw8XG4gICAgICAgICAgICAoYSA9IFs3LCAxMiwgMTcsIDIyLCA1LCA5LCAxNCwgMjAsIDQsIDExLCAxNiwgMjMsIDYsIDEwLCAxNSwgMjFdWzQgKiBhICsgKGorKyAlIDQpXSkpIHxcbiAgICAgICAgICAgIChkID4+PiAtYSkpLFxuICAgICAgICBiLFxuICAgICAgICBjLFxuICAgICAgXVxuICAgICkge1xuICAgICAgYiA9IGFbMV0gfCAwXG4gICAgICBjID0gYVsyXVxuICAgIH1cbiAgICBmb3IgKGogPSA0OyBqOyApIGhbLS1qXSArPSBhW2pdXG4gIH1cblxuICBmb3IgKHMgPSAnJzsgaiA8IDMyOyApIHtcbiAgICBzICs9ICgoaFtqID4+IDNdID4+ICgoMSBeIGorKykgKiA0KSkgJiAxNSkudG9TdHJpbmcoMTYpXG4gIH1cblxuICByZXR1cm4gc1xufVxuZXhwb3J0IGRlZmF1bHQgbWQ1XG4vLyBjb25zb2xlLmxvZyhtZDUoJ2Zvb2Qtc2FmZXR5JykpXG4iLCAiaW1wb3J0IHsgdGV4dEZyb21UZXJtcyB9IGZyb20gJy4vX3RleHQuanMnXG5pbXBvcnQgZm10cyBmcm9tICcuL19mbXRzLmpzJ1xuaW1wb3J0IGhhc2ggZnJvbSAnLi4vbWV0aG9kcy9oYXNoLmpzJ1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgdGV4dDogdHJ1ZSxcbiAgdGVybXM6IHRydWUsXG59XG5cbmxldCBvcHRzID0geyBjYXNlOiAnbm9uZScsIHVuaWNvZGU6ICdzb21lJywgZm9ybTogJ21hY2hpbmUnLCBwdW5jdHVhdGlvbjogJ3NvbWUnIH1cblxuY29uc3QgbWVyZ2UgPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYSwgYilcbn1cblxuY29uc3QgZm5zID0ge1xuICB0ZXh0OiB0ZXJtcyA9PiB0ZXh0RnJvbVRlcm1zKHRlcm1zLCB7IGtlZXBQdW5jdDogdHJ1ZSB9LCBmYWxzZSksXG4gIG5vcm1hbDogdGVybXMgPT4gdGV4dEZyb21UZXJtcyh0ZXJtcywgbWVyZ2UoZm10cy5ub3JtYWwsIHsga2VlcFB1bmN0OiB0cnVlIH0pLCBmYWxzZSksXG4gIGltcGxpY2l0OiB0ZXJtcyA9PiB0ZXh0RnJvbVRlcm1zKHRlcm1zLCBtZXJnZShmbXRzLmltcGxpY2l0LCB7IGtlZXBQdW5jdDogdHJ1ZSB9KSwgZmFsc2UpLFxuXG4gIG1hY2hpbmU6IHRlcm1zID0+IHRleHRGcm9tVGVybXModGVybXMsIG9wdHMsIGZhbHNlKSxcbiAgcm9vdDogdGVybXMgPT4gdGV4dEZyb21UZXJtcyh0ZXJtcywgbWVyZ2Uob3B0cywgeyBmb3JtOiAncm9vdCcgfSksIGZhbHNlKSxcblxuICBoYXNoOiB0ZXJtcyA9PiBoYXNoKHRleHRGcm9tVGVybXModGVybXMsIHsga2VlcFB1bmN0OiB0cnVlIH0sIGZhbHNlKSksXG5cbiAgb2Zmc2V0OiB0ZXJtcyA9PiB7XG4gICAgbGV0IGxlbiA9IGZucy50ZXh0KHRlcm1zKS5sZW5ndGhcbiAgICByZXR1cm4ge1xuICAgICAgaW5kZXg6IHRlcm1zWzBdLm9mZnNldC5pbmRleCxcbiAgICAgIHN0YXJ0OiB0ZXJtc1swXS5vZmZzZXQuc3RhcnQsXG4gICAgICBsZW5ndGg6IGxlbixcbiAgICB9XG4gIH0sXG4gIHRlcm1zOiB0ZXJtcyA9PiB7XG4gICAgcmV0dXJuIHRlcm1zLm1hcCh0ID0+IHtcbiAgICAgIGxldCB0ZXJtID0gT2JqZWN0LmFzc2lnbih7fSwgdClcbiAgICAgIHRlcm0udGFncyA9IEFycmF5LmZyb20odC50YWdzKVxuICAgICAgcmV0dXJuIHRlcm1cbiAgICB9KVxuICB9LFxuICBjb25maWRlbmNlOiAoX3Rlcm1zLCB2aWV3LCBpKSA9PiB2aWV3LmVxKGkpLmNvbmZpZGVuY2UoKSxcbiAgc3lsbGFibGVzOiAoX3Rlcm1zLCB2aWV3LCBpKSA9PiB2aWV3LmVxKGkpLnN5bGxhYmxlcygpLFxuICBzZW50ZW5jZTogKF90ZXJtcywgdmlldywgaSkgPT4gdmlldy5lcShpKS5mdWxsU2VudGVuY2UoKS50ZXh0KCksXG4gIGRpcnR5OiB0ZXJtcyA9PiB0ZXJtcy5zb21lKHQgPT4gdC5kaXJ0eSA9PT0gdHJ1ZSksXG59XG5mbnMuc2VudGVuY2VzID0gZm5zLnNlbnRlbmNlXG5mbnMuY2xlYW4gPSBmbnMubm9ybWFsXG5mbnMucmVkdWNlZCA9IGZucy5yb290XG5cbmNvbnN0IHRvSlNPTiA9IGZ1bmN0aW9uICh2aWV3LCBvcHRpb24pIHtcbiAgb3B0aW9uID0gb3B0aW9uIHx8IHt9XG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbiA9IHt9XG4gIH1cbiAgb3B0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9wdGlvbilcbiAgLy8gcnVuIGFueSBuZWNlc3NhcnkgdXBmcm9udCBzdGVwc1xuICBpZiAob3B0aW9uLm9mZnNldCkge1xuICAgIHZpZXcuY29tcHV0ZSgnb2Zmc2V0JylcbiAgfVxuICByZXR1cm4gdmlldy5kb2NzLm1hcCgodGVybXMsIGkpID0+IHtcbiAgICBsZXQgcmVzID0ge31cbiAgICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goayA9PiB7XG4gICAgICBpZiAob3B0aW9uW2tdICYmIGZuc1trXSkge1xuICAgICAgICByZXNba10gPSBmbnNba10odGVybXMsIHZpZXcsIGkpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gcmVzXG4gIH0pXG59XG5cbmNvbnN0IG1ldGhvZHMgPSB7XG4gIC8qKiByZXR1cm4gZGF0YSAqL1xuICBqc29uOiBmdW5jdGlvbiAobikge1xuICAgIGxldCByZXMgPSB0b0pTT04odGhpcywgbilcbiAgICBpZiAodHlwZW9mIG4gPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gcmVzW25dXG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfSxcbn1cbm1ldGhvZHMuZGF0YSA9IG1ldGhvZHMuanNvblxuZXhwb3J0IGRlZmF1bHQgbWV0aG9kc1xuIiwgImNvbnN0IGlzQ2xpZW50U2lkZSA9ICgpID0+IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudFxuXG4vL291dHB1dCBzb21lIGhlbHBmdWwgc3R1ZmYgdG8gdGhlIGNvbnNvbGVcbmNvbnN0IGRlYnVnID0gZnVuY3Rpb24gKGZtdCkge1xuICBsZXQgZGVidWdNZXRob2RzID0gdGhpcy5tZXRob2RzLm9uZS5kZWJ1ZyB8fCB7fVxuICAvLyBzZWUgaWYgbWV0aG9kIG5hbWUgZXhpc3RzXG4gIGlmIChmbXQgJiYgZGVidWdNZXRob2RzLmhhc093blByb3BlcnR5KGZtdCkpIHtcbiAgICBkZWJ1Z01ldGhvZHNbZm10XSh0aGlzKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgLy8gbG9nIGRlZmF1bHQgY2xpZW50LXNpZGUgdmlld1xuICBpZiAoaXNDbGllbnRTaWRlKCkpIHtcbiAgICBkZWJ1Z01ldGhvZHMuY2xpZW50U2lkZSh0aGlzKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgLy8gZWxzZSwgc2hvdyByZWd1bGFyIHNlcnZlci1zaWRlIHRhZ3Mgdmlld1xuICBkZWJ1Z01ldGhvZHMudGFncyh0aGlzKVxuICByZXR1cm4gdGhpc1xufVxuZXhwb3J0IGRlZmF1bHQgZGVidWdcbiIsICJjb25zdCB0b1RleHQgPSBmdW5jdGlvbiAodGVybSkge1xuICBsZXQgcHJlID0gdGVybS5wcmUgfHwgJydcbiAgbGV0IHBvc3QgPSB0ZXJtLnBvc3QgfHwgJydcbiAgcmV0dXJuIHByZSArIHRlcm0udGV4dCArIHBvc3Rcbn1cblxuY29uc3QgZmluZFN0YXJ0cyA9IGZ1bmN0aW9uIChkb2MsIG9iaikge1xuICBsZXQgc3RhcnRzID0ge31cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKHJlZyA9PiB7XG4gICAgbGV0IG0gPSBkb2MubWF0Y2gocmVnKVxuICAgIG0uZnVsbFBvaW50ZXIuZm9yRWFjaChhID0+IHtcbiAgICAgIHN0YXJ0c1thWzNdXSA9IHsgZm46IG9ialtyZWddLCBlbmQ6IGFbMl0gfVxuICAgIH0pXG4gIH0pXG4gIHJldHVybiBzdGFydHNcbn1cblxuY29uc3Qgd3JhcCA9IGZ1bmN0aW9uIChkb2MsIG9iaikge1xuICAvLyBpbmRleCBpZHMgdG8gaGlnaGxpZ2h0XG4gIGxldCBzdGFydHMgPSBmaW5kU3RhcnRzKGRvYywgb2JqKVxuICBsZXQgdGV4dCA9ICcnXG4gIGRvYy5kb2NzLmZvckVhY2goKHRlcm1zLCBuKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXJtcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgbGV0IHQgPSB0ZXJtc1tpXVxuICAgICAgLy8gZG8gYSBzcGFuIHRhZ1xuICAgICAgaWYgKHN0YXJ0cy5oYXNPd25Qcm9wZXJ0eSh0LmlkKSkge1xuICAgICAgICBsZXQgeyBmbiwgZW5kIH0gPSBzdGFydHNbdC5pZF1cbiAgICAgICAgbGV0IG0gPSBkb2MudXBkYXRlKFtbbiwgaSwgZW5kXV0pXG4gICAgICAgIHRleHQgKz0gdGVybXNbaV0ucHJlIHx8ICcnXG4gICAgICAgIHRleHQgKz0gZm4obSlcbiAgICAgICAgaSA9IGVuZCAtIDFcbiAgICAgICAgdGV4dCArPSB0ZXJtc1tpXS5wb3N0IHx8ICcnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ICs9IHRvVGV4dCh0KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHRleHRcbn1cbmV4cG9ydCBkZWZhdWx0IHdyYXAiLCAiaW1wb3J0IGRlYnVnIGZyb20gJy4vZGVidWcuanMnXG5pbXBvcnQgd3JhcCBmcm9tICcuL3dyYXAuanMnXG5pbXBvcnQgaGFzaCBmcm9tICcuLi9tZXRob2RzL2hhc2guanMnXG5cbmNvbnN0IGlzT2JqZWN0ID0gdmFsID0+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG4vLyBzb3J0IGJ5IGZyZXF1ZW5jeVxuY29uc3QgdG9wayA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgbGV0IG9iaiA9IHt9XG4gIGFyci5mb3JFYWNoKGEgPT4ge1xuICAgIG9ialthXSA9IG9ialthXSB8fCAwXG4gICAgb2JqW2FdICs9IDFcbiAgfSlcbiAgbGV0IHJlcyA9IE9iamVjdC5rZXlzKG9iaikubWFwKGsgPT4ge1xuICAgIHJldHVybiB7IG5vcm1hbDogaywgY291bnQ6IG9ialtrXSB9XG4gIH0pXG4gIHJldHVybiByZXMuc29ydCgoYSwgYikgPT4gKGEuY291bnQgPiBiLmNvdW50ID8gLTEgOiAwKSlcbn1cblxuLyoqIHNvbWUgbmFtZWQgb3V0cHV0IGZvcm1hdHMgKi9cbmNvbnN0IG91dCA9IGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgLy8gc3VwcG9ydCBjdXN0b20gb3V0cHV0c1xuICBpZiAoaXNPYmplY3QobWV0aG9kKSkge1xuICAgIHJldHVybiB3cmFwKHRoaXMsIG1ldGhvZClcbiAgfVxuICAvLyB0ZXh0IG91dCBmb3JtYXRzXG4gIGlmIChtZXRob2QgPT09ICd0ZXh0Jykge1xuICAgIHJldHVybiB0aGlzLnRleHQoKVxuICB9XG4gIGlmIChtZXRob2QgPT09ICdub3JtYWwnKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgnbm9ybWFsJylcbiAgfVxuICBpZiAobWV0aG9kID09PSAncm9vdCcpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCdyb290JylcbiAgfVxuICBpZiAobWV0aG9kID09PSAnbWFjaGluZScgfHwgbWV0aG9kID09PSAncmVkdWNlZCcpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCdtYWNoaW5lJylcbiAgfVxuICBpZiAobWV0aG9kID09PSAnaGFzaCcgfHwgbWV0aG9kID09PSAnbWQ1Jykge1xuICAgIHJldHVybiBoYXNoKHRoaXMudGV4dCgpKVxuICB9XG5cbiAgLy8ganNvbiBkYXRhIGZvcm1hdHNcbiAgaWYgKG1ldGhvZCA9PT0gJ2pzb24nKSB7XG4gICAgcmV0dXJuIHRoaXMuanNvbigpXG4gIH1cbiAgaWYgKG1ldGhvZCA9PT0gJ29mZnNldCcgfHwgbWV0aG9kID09PSAnb2Zmc2V0cycpIHtcbiAgICB0aGlzLmNvbXB1dGUoJ29mZnNldCcpXG4gICAgcmV0dXJuIHRoaXMuanNvbih7IG9mZnNldDogdHJ1ZSB9KVxuICB9XG4gIGlmIChtZXRob2QgPT09ICdhcnJheScpIHtcbiAgICBsZXQgYXJyID0gdGhpcy5kb2NzLm1hcCh0ZXJtcyA9PiB7XG4gICAgICByZXR1cm4gdGVybXNcbiAgICAgICAgLnJlZHVjZSgoc3RyLCB0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN0ciArIHQucHJlICsgdC50ZXh0ICsgdC5wb3N0XG4gICAgICAgIH0sICcnKVxuICAgICAgICAudHJpbSgpXG4gICAgfSlcbiAgICByZXR1cm4gYXJyLmZpbHRlcihzdHIgPT4gc3RyKVxuICB9XG4gIC8vIHJldHVybiB0ZXJtcyBzb3J0ZWQgYnkgZnJlcXVlbmN5XG4gIGlmIChtZXRob2QgPT09ICdmcmVxJyB8fCBtZXRob2QgPT09ICdmcmVxdWVuY3knIHx8IG1ldGhvZCA9PT0gJ3RvcGsnKSB7XG4gICAgcmV0dXJuIHRvcGsodGhpcy5qc29uKHsgbm9ybWFsOiB0cnVlIH0pLm1hcChvID0+IG8ubm9ybWFsKSlcbiAgfVxuXG4gIC8vIHNvbWUgaGFuZHkgYWQtaG9jIG91dHB1dHNcbiAgaWYgKG1ldGhvZCA9PT0gJ3Rlcm1zJykge1xuICAgIGxldCBsaXN0ID0gW11cbiAgICB0aGlzLmRvY3MuZm9yRWFjaCh0ZXJtcyA9PiB7XG4gICAgICBsZXQgd29yZHMgPSB0ZXJtcy5tYXAodCA9PiB0LnRleHQpXG4gICAgICB3b3JkcyA9IHdvcmRzLmZpbHRlcih0ID0+IHQpXG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQod29yZHMpXG4gICAgfSlcbiAgICByZXR1cm4gbGlzdFxuICB9XG4gIGlmIChtZXRob2QgPT09ICd0YWdzJykge1xuICAgIHJldHVybiB0aGlzLmRvY3MubWFwKHRlcm1zID0+IHtcbiAgICAgIHJldHVybiB0ZXJtcy5yZWR1Y2UoKGgsIHQpID0+IHtcbiAgICAgICAgaFt0LmltcGxpY2l0IHx8IHQubm9ybWFsXSA9IEFycmF5LmZyb20odC50YWdzKVxuICAgICAgICByZXR1cm4gaFxuICAgICAgfSwge30pXG4gICAgfSlcbiAgfVxuICBpZiAobWV0aG9kID09PSAnZGVidWcnKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVidWcoKSAvL2FsbG93XG4gIH1cbiAgcmV0dXJuIHRoaXMudGV4dCgpXG59XG5cbmNvbnN0IG1ldGhvZHMgPSB7XG4gIC8qKiAqL1xuICBkZWJ1ZzogZGVidWcsXG4gIC8qKiAqL1xuICBvdXQsXG4gIC8qKiAqL1xuICB3cmFwOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHdyYXAodGhpcywgb2JqKVxuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBtZXRob2RzXG4iLCAiaW1wb3J0IHsgdGV4dEZyb21Eb2MgfSBmcm9tICcuL190ZXh0LmpzJ1xuaW1wb3J0IGZtdHMgZnJvbSAnLi9fZm10cy5qcydcblxuY29uc3QgaXNPYmplY3QgPSB2YWwgPT4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLyoqICovXG4gIHRleHQ6IGZ1bmN0aW9uIChmbXQpIHtcbiAgICBsZXQgb3B0cyA9IHt9XG4gICAgaWYgKGZtdCAmJiB0eXBlb2YgZm10ID09PSAnc3RyaW5nJyAmJiBmbXRzLmhhc093blByb3BlcnR5KGZtdCkpIHtcbiAgICAgIG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBmbXRzW2ZtdF0pXG4gICAgfSBlbHNlIGlmIChmbXQgJiYgaXNPYmplY3QoZm10KSkge1xuICAgICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIGZtdCkgLy90b2RvOiBmaXhtZVxuICAgIH1cbiAgICAvLyBpcyBpdCBhIGZ1bGwgZG9jdW1lbnQ/XG4gICAgaWYgKG9wdHMua2VlcFNwYWNlID09PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNGdWxsKCkpIHtcbiAgICAgIC8vXG4gICAgICBvcHRzLmtlZXBTcGFjZSA9IGZhbHNlXG4gICAgfVxuICAgIGlmIChvcHRzLmtlZXBFbmRQdW5jdCA9PT0gdW5kZWZpbmVkICYmIHRoaXMucG9pbnRlcikge1xuICAgICAgbGV0IHB0ciA9IHRoaXMucG9pbnRlclswXVxuICAgICAgaWYgKHB0ciAmJiBwdHJbMV0pIHtcbiAgICAgICAgb3B0cy5rZWVwRW5kUHVuY3QgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0cy5rZWVwRW5kUHVuY3QgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHNldCBkZWZhdWx0c1xuICAgIGlmIChvcHRzLmtlZXBQdW5jdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRzLmtlZXBQdW5jdCA9IHRydWVcbiAgICB9XG4gICAgaWYgKG9wdHMua2VlcFNwYWNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdHMua2VlcFNwYWNlID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gdGV4dEZyb21Eb2ModGhpcy5kb2NzLCBvcHRzKVxuICB9LFxufVxuIiwgImltcG9ydCBodG1sIGZyb20gJy4vaHRtbC5qcydcbmltcG9ydCBqc29uIGZyb20gJy4vanNvbi5qcydcbmltcG9ydCBvdXQgZnJvbSAnLi9vdXQuanMnXG5pbXBvcnQgdGV4dCBmcm9tICcuL3RleHQuanMnXG5cbmNvbnN0IG1ldGhvZHMgPSBPYmplY3QuYXNzaWduKHt9LCBvdXQsIHRleHQsIGpzb24sIGh0bWwpXG5cbmNvbnN0IGFkZEFQSSA9IGZ1bmN0aW9uIChWaWV3KSB7XG4gIE9iamVjdC5hc3NpZ24oVmlldy5wcm90b3R5cGUsIG1ldGhvZHMpXG59XG5leHBvcnQgZGVmYXVsdCBhZGRBUElcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5jb25zdCBsb2dDbGllbnRTaWRlID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgY29uc29sZS5sb2coJyVjIC09LT0tICcsICdiYWNrZ3JvdW5kLWNvbG9yOiM2Njk5Y2M7JylcbiAgdmlldy5mb3JFYWNoKG0gPT4ge1xuICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQobS50ZXh0KCkpXG4gICAgbGV0IHRlcm1zID0gbS5kb2NzWzBdXG4gICAgbGV0IG91dCA9IHRlcm1zLm1hcCh0ID0+IHtcbiAgICAgIGxldCB0ZXh0ID0gdC50ZXh0IHx8ICctJ1xuICAgICAgaWYgKHQuaW1wbGljaXQpIHtcbiAgICAgICAgdGV4dCA9ICdbJyArIHQuaW1wbGljaXQgKyAnXSdcbiAgICAgIH1cbiAgICAgIGxldCB0YWdzID0gJ1snICsgQXJyYXkuZnJvbSh0LnRhZ3MpLmpvaW4oJywgJykgKyAnXSdcbiAgICAgIHJldHVybiB7IHRleHQsIHRhZ3MgfVxuICAgIH0pXG4gICAgY29uc29sZS50YWJsZShvdXQsIFsndGV4dCcsICd0YWdzJ10pXG4gICAgY29uc29sZS5ncm91cEVuZCgpXG4gIH0pXG59XG5leHBvcnQgZGVmYXVsdCBsb2dDbGllbnRTaWRlXG4iLCAiLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvOTc4MTIxOC9ob3ctdG8tY2hhbmdlLW5vZGUtanNzLWNvbnNvbGUtZm9udC1jb2xvclxuY29uc3QgcmVzZXQgPSAnXFx4MWJbMG0nXG5cbi8vY2hlYXBlciB0aGFuIHJlcXVpcmluZyBjaGFsa1xuY29uc3QgY2xpID0ge1xuICBncmVlbjogc3RyID0+ICdcXHgxYlszMm0nICsgc3RyICsgcmVzZXQsXG4gIHJlZDogc3RyID0+ICdcXHgxYlszMW0nICsgc3RyICsgcmVzZXQsXG4gIGJsdWU6IHN0ciA9PiAnXFx4MWJbMzRtJyArIHN0ciArIHJlc2V0LFxuICBtYWdlbnRhOiBzdHIgPT4gJ1xceDFiWzM1bScgKyBzdHIgKyByZXNldCxcbiAgY3lhbjogc3RyID0+ICdcXHgxYlszNm0nICsgc3RyICsgcmVzZXQsXG4gIHllbGxvdzogc3RyID0+ICdcXHgxYlszM20nICsgc3RyICsgcmVzZXQsXG4gIGJsYWNrOiBzdHIgPT4gJ1xceDFiWzMwbScgKyBzdHIgKyByZXNldCxcbiAgZGltOiBzdHIgPT4gJ1xceDFiWzJtJyArIHN0ciArIHJlc2V0LFxuICBpOiBzdHIgPT4gJ1xceDFiWzNtJyArIHN0ciArIHJlc2V0LFxufVxuZXhwb3J0IGRlZmF1bHQgY2xpXG4iLCAiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IGNsaSBmcm9tICcuL19jb2xvci5qcydcblxuY29uc3QgdGFnU3RyaW5nID0gZnVuY3Rpb24gKHRhZ3MsIG1vZGVsKSB7XG4gIGlmIChtb2RlbC5vbmUudGFnU2V0KSB7XG4gICAgdGFncyA9IHRhZ3MubWFwKHRhZyA9PiB7XG4gICAgICBpZiAoIW1vZGVsLm9uZS50YWdTZXQuaGFzT3duUHJvcGVydHkodGFnKSkge1xuICAgICAgICByZXR1cm4gdGFnXG4gICAgICB9XG4gICAgICBjb25zdCBjID0gbW9kZWwub25lLnRhZ1NldFt0YWddLmNvbG9yIHx8ICdibHVlJ1xuICAgICAgcmV0dXJuIGNsaVtjXSh0YWcpXG4gICAgfSlcbiAgfVxuICByZXR1cm4gdGFncy5qb2luKCcsICcpXG59XG5cbmNvbnN0IHNob3dUYWdzID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgbGV0IHsgZG9jcywgbW9kZWwgfSA9IHZpZXdcbiAgaWYgKGRvY3MubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coY2xpLmJsdWUoJ1xcbiAgICAgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwJykpXG4gIH1cbiAgZG9jcy5mb3JFYWNoKHRlcm1zID0+IHtcbiAgICBjb25zb2xlLmxvZyhjbGkuYmx1ZSgnXFxuICBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAnKSlcbiAgICB0ZXJtcy5mb3JFYWNoKHQgPT4ge1xuICAgICAgbGV0IHRhZ3MgPSBbLi4uKHQudGFncyB8fCBbXSldXG4gICAgICBsZXQgdGV4dCA9IHQudGV4dCB8fCAnLSdcbiAgICAgIGlmICh0LnNlbnNlKSB7XG4gICAgICAgIHRleHQgPSBgeyR7dC5ub3JtYWx9LyR7dC5zZW5zZX19YFxuICAgICAgfVxuICAgICAgaWYgKHQuaW1wbGljaXQpIHtcbiAgICAgICAgdGV4dCA9ICdbJyArIHQuaW1wbGljaXQgKyAnXSdcbiAgICAgIH1cbiAgICAgIHRleHQgPSBjbGkueWVsbG93KHRleHQpXG4gICAgICBsZXQgd29yZCA9IFwiJ1wiICsgdGV4dCArIFwiJ1wiXG4gICAgICBpZiAodC5yZWZlcmVuY2UpIHtcbiAgICAgICAgbGV0IHN0ciA9IHZpZXcudXBkYXRlKFt0LnJlZmVyZW5jZV0pLnRleHQoJ25vcm1hbCcpXG4gICAgICAgIHdvcmQgKz0gYCAtICR7Y2xpLmRpbShjbGkuaSgnWycgKyBzdHIgKyAnXScpKX1gXG4gICAgICB9XG4gICAgICB3b3JkID0gd29yZC5wYWRFbmQoMTgpXG4gICAgICBsZXQgc3RyID0gY2xpLmJsdWUoJyAgXHUyNTAyICcpICsgY2xpLmkod29yZCkgKyAnICAtICcgKyB0YWdTdHJpbmcodGFncywgbW9kZWwpXG4gICAgICBjb25zb2xlLmxvZyhzdHIpXG4gICAgfSlcbiAgfSlcbiAgY29uc29sZS5sb2coJ1xcbicpXG59XG5leHBvcnQgZGVmYXVsdCBzaG93VGFnc1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCBjbGkgZnJvbSAnLi9fY29sb3IuanMnXG5cbmNvbnN0IHNob3dDaHVua3MgPSBmdW5jdGlvbiAodmlldykge1xuICBsZXQgeyBkb2NzIH0gPSB2aWV3XG4gIGNvbnNvbGUubG9nKCcnKVxuICBkb2NzLmZvckVhY2godGVybXMgPT4ge1xuICAgIGxldCBvdXQgPSBbXVxuICAgIHRlcm1zLmZvckVhY2godGVybSA9PiB7XG4gICAgICBpZiAodGVybS5jaHVuayA9PT0gJ05vdW4nKSB7XG4gICAgICAgIG91dC5wdXNoKGNsaS5ibHVlKHRlcm0uaW1wbGljaXQgfHwgdGVybS5ub3JtYWwpKVxuICAgICAgfSBlbHNlIGlmICh0ZXJtLmNodW5rID09PSAnVmVyYicpIHtcbiAgICAgICAgb3V0LnB1c2goY2xpLmdyZWVuKHRlcm0uaW1wbGljaXQgfHwgdGVybS5ub3JtYWwpKVxuICAgICAgfSBlbHNlIGlmICh0ZXJtLmNodW5rID09PSAnQWRqZWN0aXZlJykge1xuICAgICAgICBvdXQucHVzaChjbGkueWVsbG93KHRlcm0uaW1wbGljaXQgfHwgdGVybS5ub3JtYWwpKVxuICAgICAgfSBlbHNlIGlmICh0ZXJtLmNodW5rID09PSAnUGl2b3QnKSB7XG4gICAgICAgIG91dC5wdXNoKGNsaS5yZWQodGVybS5pbXBsaWNpdCB8fCB0ZXJtLm5vcm1hbCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQucHVzaCh0ZXJtLmltcGxpY2l0IHx8IHRlcm0ubm9ybWFsKVxuICAgICAgfVxuICAgIH0pXG4gICAgY29uc29sZS5sb2cob3V0LmpvaW4oJyAnKSwgJ1xcbicpXG4gIH0pXG4gIGNvbnNvbGUubG9nKCdcXG4nKVxufVxuZXhwb3J0IGRlZmF1bHQgc2hvd0NodW5rc1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCBjbGkgZnJvbSAnLi9fY29sb3IuanMnXG5cbmNvbnN0IHNwbGl0ID0gKHR4dCwgb2Zmc2V0LCBpbmRleCkgPT4ge1xuICBsZXQgYnVmZiA9IGluZGV4ICogOSAvL3RoZXJlIGFyZSA5IG5ldyBjaGFycyBhZGRkZWQgdG8gZWFjaCBoaWdobGlnaHRcbiAgbGV0IHN0YXJ0ID0gb2Zmc2V0LnN0YXJ0ICsgYnVmZlxuICBsZXQgZW5kID0gc3RhcnQgKyBvZmZzZXQubGVuZ3RoXG4gIGxldCBwcmUgPSB0eHQuc3Vic3RyaW5nKDAsIHN0YXJ0KVxuICBsZXQgbWlkID0gdHh0LnN1YnN0cmluZyhzdGFydCwgZW5kKVxuICBsZXQgcG9zdCA9IHR4dC5zdWJzdHJpbmcoZW5kLCB0eHQubGVuZ3RoKVxuICByZXR1cm4gW3ByZSwgbWlkLCBwb3N0XVxufVxuXG5jb25zdCBzcGxpY2VJbiA9IGZ1bmN0aW9uICh0eHQsIG9mZnNldCwgaW5kZXgpIHtcbiAgbGV0IHBhcnRzID0gc3BsaXQodHh0LCBvZmZzZXQsIGluZGV4KVxuICByZXR1cm4gYCR7cGFydHNbMF19JHtjbGkuYmx1ZShwYXJ0c1sxXSl9JHtwYXJ0c1syXX1gXG59XG5cbmNvbnN0IHNob3dIaWdobGlnaHQgPSBmdW5jdGlvbiAoZG9jKSB7XG4gIGlmICghZG9jLmZvdW5kKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgbGV0IGJ5U2VudGVuY2UgPSB7fVxuICBkb2MuZnVsbFBvaW50ZXIuZm9yRWFjaChwdHIgPT4ge1xuICAgIGJ5U2VudGVuY2VbcHRyWzBdXSA9IGJ5U2VudGVuY2VbcHRyWzBdXSB8fCBbXVxuICAgIGJ5U2VudGVuY2VbcHRyWzBdXS5wdXNoKHB0cilcbiAgfSlcbiAgT2JqZWN0LmtleXMoYnlTZW50ZW5jZSkuZm9yRWFjaChrID0+IHtcbiAgICBsZXQgZnVsbCA9IGRvYy51cGRhdGUoW1tOdW1iZXIoayldXSlcbiAgICBsZXQgdHh0ID0gZnVsbC50ZXh0KClcbiAgICBsZXQgbWF0Y2hlcyA9IGRvYy51cGRhdGUoYnlTZW50ZW5jZVtrXSlcbiAgICBsZXQganNvbiA9IG1hdGNoZXMuanNvbih7IG9mZnNldDogdHJ1ZSB9KVxuICAgIGpzb24uZm9yRWFjaCgob2JqLCBpKSA9PiB7XG4gICAgICB0eHQgPSBzcGxpY2VJbih0eHQsIG9iai5vZmZzZXQsIGkpXG4gICAgfSlcbiAgICBjb25zb2xlLmxvZyh0eHQpXG4gIH0pXG4gIGNvbnNvbGUubG9nKCdcXG4nKVxufVxuZXhwb3J0IGRlZmF1bHQgc2hvd0hpZ2hsaWdodFxuIiwgImltcG9ydCBjbGllbnRTaWRlIGZyb20gJy4vY2xpZW50LXNpZGUuanMnXG5pbXBvcnQgdGFncyBmcm9tICcuL3RhZ3MuanMnXG5pbXBvcnQgY2h1bmtzIGZyb20gJy4vY2h1bmtzLmpzJ1xuaW1wb3J0IGhpZ2hsaWdodCBmcm9tICcuL2hpZ2hsaWdodC5qcydcblxuY29uc3QgZGVidWcgPSB7XG4gIHRhZ3MsXG4gIGNsaWVudFNpZGUsXG4gIGNodW5rcyxcbiAgaGlnaGxpZ2h0LFxufVxuZXhwb3J0IGRlZmF1bHQgZGVidWdcbiIsICJpbXBvcnQgYXBpIGZyb20gJy4vYXBpL2luZGV4LmpzJ1xuaW1wb3J0IHsgZGVidWcsIGhhc2ggfSBmcm9tICcuL21ldGhvZHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXBpLFxuICBtZXRob2RzOiB7XG4gICAgb25lOiB7XG4gICAgICBoYXNoLFxuICAgICAgZGVidWcsXG4gICAgfSxcbiAgfSxcbn1cbiIsICIvLyBkbyB0aGUgcG9pbnRlcnMgaW50ZXJzZWN0P1xuZXhwb3J0IGNvbnN0IGRvZXNPdmVybGFwID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgaWYgKGFbMF0gIT09IGJbMF0pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBsZXQgWywgc3RhcnRBLCBlbmRBXSA9IGFcbiAgbGV0IFssIHN0YXJ0QiwgZW5kQl0gPSBiXG4gIC8vIFthLGEsYSwtLC0sLSxdXG4gIC8vIFstLC0sYixiLGIsLSxdXG4gIGlmIChzdGFydEEgPD0gc3RhcnRCICYmIGVuZEEgPiBzdGFydEIpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vIFstLC0sLSxhLGEsLSxdXG4gIC8vIFstLC0sYixiLGIsLSxdXG4gIGlmIChzdGFydEIgPD0gc3RhcnRBICYmIGVuZEIgPiBzdGFydEEpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBnZXQgd2lkZXN0IG1pbi9tYXhcbmV4cG9ydCBjb25zdCBnZXRFeHRlbnQgPSBmdW5jdGlvbiAocHRycykge1xuICBsZXQgbWluID0gcHRyc1swXVsxXVxuICBsZXQgbWF4ID0gcHRyc1swXVsyXVxuICBwdHJzLmZvckVhY2gocHRyID0+IHtcbiAgICBpZiAocHRyWzFdIDwgbWluKSB7XG4gICAgICBtaW4gPSBwdHJbMV1cbiAgICB9XG4gICAgaWYgKHB0clsyXSA+IG1heCkge1xuICAgICAgbWF4ID0gcHRyWzJdXG4gICAgfVxuICB9KVxuICByZXR1cm4gW3B0cnNbMF1bMF0sIG1pbiwgbWF4XVxufVxuXG4vLyBjb2xsZWN0IHBvaW50ZXJzIGJ5IHNlbnRlbmNlIG51bWJlclxuZXhwb3J0IGNvbnN0IGluZGV4TiA9IGZ1bmN0aW9uIChwdHJzKSB7XG4gIGxldCBieU4gPSB7fVxuICBwdHJzLmZvckVhY2gocmVmID0+IHtcbiAgICBieU5bcmVmWzBdXSA9IGJ5TltyZWZbMF1dIHx8IFtdXG4gICAgYnlOW3JlZlswXV0ucHVzaChyZWYpXG4gIH0pXG4gIHJldHVybiBieU5cbn1cblxuLy8gcmVtb3ZlIGV4YWN0IGR1cGxpY2F0ZXNcbmV4cG9ydCBjb25zdCB1bmlxdWVQdHJzID0gZnVuY3Rpb24gKGFycikge1xuICBsZXQgb2JqID0ge31cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBvYmpbYXJyW2ldLmpvaW4oJywnKV0gPSBhcnJbaV1cbiAgfVxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhvYmopXG59XG5cbi8vIGEgYmVmb3JlIGJcbi8vIGNvbnNvbGUubG9nKGRvZXNPdmVybGFwKFswLCAwLCA0XSwgWzAsIDIsIDVdKSlcbi8vIC8vIGIgYmVmb3JlIGFcbi8vIGNvbnNvbGUubG9nKGRvZXNPdmVybGFwKFswLCAzLCA0XSwgWzAsIDEsIDVdKSlcbi8vIC8vIGRpc2pvaW50XG4vLyBjb25zb2xlLmxvZyhkb2VzT3ZlcmxhcChbMCwgMCwgM10sIFswLCA0LCA1XSkpXG4vLyBuZWlnaGJvdXJzXG4vLyBjb25zb2xlLmxvZyhkb2VzT3ZlcmxhcChbMCwgMSwgM10sIFswLCAzLCA1XSkpXG4vLyBjb25zb2xlLmxvZyhkb2VzT3ZlcmxhcChbMCwgMywgNV0sIFswLCAxLCAzXSkpXG5cbi8vIGNvbnNvbGUubG9nKFxuLy8gICBnZXRFeHRlbnQoW1xuLy8gICAgIFswLCAzLCA0XSxcbi8vICAgICBbMCwgNCwgNV0sXG4vLyAgICAgWzAsIDEsIDJdLFxuLy8gICBdKVxuLy8gKVxuIiwgImltcG9ydCB7IGluZGV4TiB9IGZyb20gJy4vX2xpYi5qcydcblxuLy8gc3BsaXQgYSBwb2ludGVyLCBieSBtYXRjaCBwb2ludGVyXG5jb25zdCBwaXZvdEJ5ID0gZnVuY3Rpb24gKGZ1bGwsIG0pIHtcbiAgbGV0IFtuLCBzdGFydF0gPSBmdWxsXG4gIGxldCBtU3RhcnQgPSBtWzFdXG4gIGxldCBtRW5kID0gbVsyXVxuICBsZXQgcmVzID0ge31cbiAgLy8gaXMgdGhlcmUgc3BhY2UgYmVmb3JlIHRoZSBtYXRjaD9cbiAgaWYgKHN0YXJ0IDwgbVN0YXJ0KSB7XG4gICAgbGV0IGVuZCA9IG1TdGFydCA8IGZ1bGxbMl0gPyBtU3RhcnQgOiBmdWxsWzJdIC8vIGZpbmQgY2xvc2VzdCBlbmQtcG9pbnRcbiAgICByZXMuYmVmb3JlID0gW24sIHN0YXJ0LCBlbmRdIC8vYmVmb3JlIHNlZ21lbnRcbiAgfVxuICByZXMubWF0Y2ggPSBtXG4gIC8vIGlzIHRoZXJlIHNwYWNlIGFmdGVyIHRoZSBtYXRjaD9cbiAgaWYgKGZ1bGxbMl0gPiBtRW5kKSB7XG4gICAgcmVzLmFmdGVyID0gW24sIG1FbmQsIGZ1bGxbMl1dIC8vYWZ0ZXIgc2VnbWVudFxuICB9XG4gIHJldHVybiByZXNcbn1cblxuY29uc3QgZG9lc01hdGNoID0gZnVuY3Rpb24gKGZ1bGwsIG0pIHtcbiAgcmV0dXJuIGZ1bGxbMV0gPD0gbVsxXSAmJiBtWzJdIDw9IGZ1bGxbMl1cbn1cblxuY29uc3Qgc3BsaXRBbGwgPSBmdW5jdGlvbiAoZnVsbCwgbSkge1xuICBsZXQgYnlOID0gaW5kZXhOKG0pXG4gIGxldCByZXMgPSBbXVxuICBmdWxsLmZvckVhY2gocHRyID0+IHtcbiAgICBsZXQgW25dID0gcHRyXG4gICAgbGV0IG1hdGNoZXMgPSBieU5bbl0gfHwgW11cbiAgICBtYXRjaGVzID0gbWF0Y2hlcy5maWx0ZXIocCA9PiBkb2VzTWF0Y2gocHRyLCBwKSlcbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlcy5wdXNoKHsgcGFzc3Rocm91Z2g6IHB0ciB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8vIGVuc3VyZSBtYXRjaGVzIGFyZSBpbi1vcmRlclxuICAgIG1hdGNoZXMgPSBtYXRjaGVzLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVxuICAgIC8vIHN0YXJ0IHNwbGl0dGluZyBvdXIgbGVmdC10by1yaWdodFxuICAgIGxldCBjYXJyeSA9IHB0clxuICAgIG1hdGNoZXMuZm9yRWFjaCgocCwgaSkgPT4ge1xuICAgICAgbGV0IGZvdW5kID0gcGl2b3RCeShjYXJyeSwgcClcbiAgICAgIC8vIGxhc3Qgb25lXG4gICAgICBpZiAoIW1hdGNoZXNbaSArIDFdKSB7XG4gICAgICAgIHJlcy5wdXNoKGZvdW5kKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnB1c2goeyBiZWZvcmU6IGZvdW5kLmJlZm9yZSwgbWF0Y2g6IGZvdW5kLm1hdGNoIH0pXG4gICAgICAgIGlmIChmb3VuZC5hZnRlcikge1xuICAgICAgICAgIGNhcnJ5ID0gZm91bmQuYWZ0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG4gIHJldHVybiByZXNcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3BsaXRBbGxcbiIsICJjb25zdCBtYXggPSAyMFxuXG4vLyBzd2VlcC1hcm91bmQgbG9va2luZyBmb3Igb3VyIHN0YXJ0IHRlcm0gdXVpZFxuY29uc3QgYmxpbmRTd2VlcCA9IGZ1bmN0aW9uIChpZCwgZG9jLCBuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4OyBpICs9IDEpIHtcbiAgICAvLyBsb29rIHVwIGEgc2VudGVuY2VcbiAgICBpZiAoZG9jW24gLSBpXSkge1xuICAgICAgbGV0IGluZGV4ID0gZG9jW24gLSBpXS5maW5kSW5kZXgodGVybSA9PiB0ZXJtLmlkID09PSBpZClcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIFtuIC0gaSwgaW5kZXhdXG4gICAgICB9XG4gICAgfVxuICAgIC8vIGxvb2sgZG93biBhIHNlbnRlbmNlXG4gICAgaWYgKGRvY1tuICsgaV0pIHtcbiAgICAgIGxldCBpbmRleCA9IGRvY1tuICsgaV0uZmluZEluZGV4KHRlcm0gPT4gdGVybS5pZCA9PT0gaWQpXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBbbiArIGksIGluZGV4XVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCByZXBhaXJFbmRpbmcgPSBmdW5jdGlvbiAocHRyLCBkb2N1bWVudCkge1xuICBsZXQgW24sIHN0YXJ0LCAsICwgZW5kSWRdID0gcHRyXG4gIGxldCB0ZXJtcyA9IGRvY3VtZW50W25dXG4gIC8vIGxvb2sgZm9yIGVuZC1pZFxuICBsZXQgbmV3RW5kID0gdGVybXMuZmluZEluZGV4KHQgPT4gdC5pZCA9PT0gZW5kSWQpXG4gIGlmIChuZXdFbmQgPT09IC0xKSB7XG4gICAgLy8gaWYgZW5kLXRlcm0gd2Fzbid0IGZvdW5kLCBzbyBnbyBhbGwgdGhlIHdheSB0byB0aGUgZW5kXG4gICAgcHRyWzJdID0gZG9jdW1lbnRbbl0ubGVuZ3RoXG4gICAgcHRyWzRdID0gdGVybXMubGVuZ3RoID8gdGVybXNbdGVybXMubGVuZ3RoIC0gMV0uaWQgOiBudWxsXG4gIH0gZWxzZSB7XG4gICAgcHRyWzJdID0gbmV3RW5kIC8vIHJlcGFpciBlbmRpbmcgcG9pbnRlclxuICB9XG4gIHJldHVybiBkb2N1bWVudFtuXS5zbGljZShzdGFydCwgcHRyWzJdICsgMSlcbn1cblxuLyoqIHJldHVybiBhIHN1YnNldCBvZiB0aGUgZG9jdW1lbnQsIGZyb20gYSBwb2ludGVyICovXG5jb25zdCBnZXREb2MgPSBmdW5jdGlvbiAocHRycywgZG9jdW1lbnQpIHtcbiAgbGV0IGRvYyA9IFtdXG4gIHB0cnMuZm9yRWFjaCgocHRyLCBpKSA9PiB7XG4gICAgaWYgKCFwdHIpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsZXQgW24sIHN0YXJ0LCBlbmQsIGlkLCBlbmRJZF0gPSBwdHIgLy9wYXJzZVBvaW50ZXIocHRyKVxuICAgIGxldCB0ZXJtcyA9IGRvY3VtZW50W25dIHx8IFtdXG4gICAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0YXJ0ID0gMFxuICAgIH1cbiAgICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZCA9IHRlcm1zLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoaWQgJiYgKCF0ZXJtc1tzdGFydF0gfHwgdGVybXNbc3RhcnRdLmlkICE9PSBpZCkpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCcgIHJlcGFpcmluZyBwb2ludGVyLi4uJylcbiAgICAgIGxldCB3aWxkID0gYmxpbmRTd2VlcChpZCwgZG9jdW1lbnQsIG4pXG4gICAgICBpZiAod2lsZCAhPT0gbnVsbCkge1xuICAgICAgICBsZXQgbGVuID0gZW5kIC0gc3RhcnRcbiAgICAgICAgdGVybXMgPSBkb2N1bWVudFt3aWxkWzBdXS5zbGljZSh3aWxkWzFdLCB3aWxkWzFdICsgbGVuKVxuICAgICAgICAvLyBhY3R1YWxseSBjaGFuZ2UgdGhlIHBvaW50ZXJcbiAgICAgICAgbGV0IHN0YXJ0SWQgPSB0ZXJtc1swXSA/IHRlcm1zWzBdLmlkIDogbnVsbFxuICAgICAgICBwdHJzW2ldID0gW3dpbGRbMF0sIHdpbGRbMV0sIHdpbGRbMV0gKyBsZW4sIHN0YXJ0SWRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlcm1zID0gdGVybXMuc2xpY2Uoc3RhcnQsIGVuZClcbiAgICB9XG4gICAgaWYgKHRlcm1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgLy8gdGVzdCBlbmQtaWQsIGlmIGl0IGV4aXN0c1xuICAgIGlmIChlbmRJZCAmJiB0ZXJtc1t0ZXJtcy5sZW5ndGggLSAxXS5pZCAhPT0gZW5kSWQpIHtcbiAgICAgIHRlcm1zID0gcmVwYWlyRW5kaW5nKHB0ciwgZG9jdW1lbnQpXG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSwgbG9va3MgZ29vZCFcbiAgICBkb2MucHVzaCh0ZXJtcylcbiAgfSlcbiAgZG9jID0gZG9jLmZpbHRlcihhID0+IGEubGVuZ3RoID4gMClcbiAgcmV0dXJuIGRvY1xufVxuZXhwb3J0IGRlZmF1bHQgZ2V0RG9jIiwgImltcG9ydCB7IGluZGV4TiB9IGZyb20gJy4uL2FwaS9saWIvX2xpYi5qcydcbmltcG9ydCBzcGxpdEFsbCBmcm9tICcuLi9hcGkvbGliL3NwbGl0LmpzJ1xuaW1wb3J0IGdldERvYyBmcm9tICcuL2dldERvYy5qcydcblxuLy8gZmxhdCBsaXN0IG9mIHRlcm1zIGZyb20gbmVzdGVkIGRvY3VtZW50XG5jb25zdCB0ZXJtTGlzdCA9IGZ1bmN0aW9uIChkb2NzKSB7XG4gIGxldCBhcnIgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IGRvY3NbaV0ubGVuZ3RoOyB0ICs9IDEpIHtcbiAgICAgIGFyci5wdXNoKGRvY3NbaV1bdF0pXG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvbmU6IHtcbiAgICB0ZXJtTGlzdCxcbiAgICBnZXREb2MsXG4gICAgcG9pbnRlcjoge1xuICAgICAgaW5kZXhOLFxuICAgICAgc3BsaXRBbGwsXG4gICAgfVxuICB9LFxufVxuIiwgImltcG9ydCB7IGRvZXNPdmVybGFwLCBnZXRFeHRlbnQsIGluZGV4TiwgdW5pcXVlUHRycyB9IGZyb20gJy4vX2xpYi5qcydcblxuLy8gYSB1bmlvbiBpcyBhICsgYiwgbWludXMgZHVwbGljYXRlc1xuY29uc3QgZ2V0VW5pb24gPSBmdW5jdGlvbiAoYSwgYikge1xuICBsZXQgYm90aCA9IGEuY29uY2F0KGIpXG4gIGxldCBieU4gPSBpbmRleE4oYm90aClcbiAgbGV0IHJlcyA9IFtdXG4gIGJvdGguZm9yRWFjaChwdHIgPT4ge1xuICAgIGxldCBbbl0gPSBwdHJcbiAgICBpZiAoYnlOW25dLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gd2UncmUgYWxvbmUgb24gdGhpcyBzZW50ZW5jZSwgc28gd2UncmUgZ29vZFxuICAgICAgcmVzLnB1c2gocHRyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8vIHRoZXJlIG1heSBiZSBvdmVybGFwc1xuICAgIGxldCBobW0gPSBieU5bbl0uZmlsdGVyKG0gPT4gZG9lc092ZXJsYXAocHRyLCBtKSlcbiAgICBobW0ucHVzaChwdHIpXG4gICAgbGV0IHJhbmdlID0gZ2V0RXh0ZW50KGhtbSlcbiAgICByZXMucHVzaChyYW5nZSlcbiAgfSlcbiAgcmVzID0gdW5pcXVlUHRycyhyZXMpXG4gIHJldHVybiByZXNcbn1cbmV4cG9ydCBkZWZhdWx0IGdldFVuaW9uXG5cbi8vIHR3byBkaXNqb2ludFxuLy8gY29uc29sZS5sb2coZ2V0VW5pb24oW1sxLCAzLCA0XV0sIFtbMCwgMSwgMl1dKSlcbi8vIHR3byBkaXNqb2ludFxuLy8gY29uc29sZS5sb2coZ2V0VW5pb24oW1swLCAzLCA0XV0sIFtbMCwgMSwgMl1dKSlcbi8vIG92ZXJsYXAtcGx1c1xuLy8gY29uc29sZS5sb2coZ2V0VW5pb24oW1swLCAxLCA0XV0sIFtbMCwgMiwgNl1dKSlcbi8vIG92ZXJsYXBcbi8vIGNvbnNvbGUubG9nKGdldFVuaW9uKFtbMCwgMSwgNF1dLCBbWzAsIDIsIDNdXSkpXG4vLyBuZWlnaGJvdXJzXG4vLyBjb25zb2xlLmxvZyhnZXRVbmlvbihbWzAsIDEsIDNdXSwgW1swLCAzLCA1XV0pKVxuIiwgImltcG9ydCBzcGxpdEFsbCBmcm9tICcuL3NwbGl0LmpzJ1xuXG5jb25zdCBzdWJ0cmFjdCA9IGZ1bmN0aW9uIChyZWZzLCBub3QpIHtcbiAgbGV0IHJlcyA9IFtdXG4gIGxldCBmb3VuZCA9IHNwbGl0QWxsKHJlZnMsIG5vdClcbiAgZm91bmQuZm9yRWFjaChvID0+IHtcbiAgICBpZiAoby5wYXNzdGhyb3VnaCkge1xuICAgICAgcmVzLnB1c2goby5wYXNzdGhyb3VnaClcbiAgICB9XG4gICAgaWYgKG8uYmVmb3JlKSB7XG4gICAgICByZXMucHVzaChvLmJlZm9yZSlcbiAgICB9XG4gICAgaWYgKG8uYWZ0ZXIpIHtcbiAgICAgIHJlcy5wdXNoKG8uYWZ0ZXIpXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzXG59XG5leHBvcnQgZGVmYXVsdCBzdWJ0cmFjdFxuXG4vLyBjb25zb2xlLmxvZyhzdWJ0cmFjdChbWzAsIDAsIDJdXSwgW1swLCAwLCAxXV0pKVxuLy8gY29uc29sZS5sb2coc3VidHJhY3QoW1swLCAwLCAyXV0sIFtbMCwgMSwgMl1dKSlcbiIsICJpbXBvcnQgeyBkb2VzT3ZlcmxhcCwgaW5kZXhOIH0gZnJvbSAnLi9fbGliLmpzJ1xuXG4vLyBbYSxhLGEsYSwtLC0sXVxuLy8gWy0sLSxiLGIsYiwtLF1cbi8vIFstLC0seCx4LC0sLSxdXG5jb25zdCBpbnRlcnNlY3Rpb24gPSBmdW5jdGlvbiAoYSwgYikge1xuICAvLyBmaW5kIHRoZSBsYXRlc3Qtc3RhcnRcbiAgbGV0IHN0YXJ0ID0gYVsxXSA8IGJbMV0gPyBiWzFdIDogYVsxXVxuICAvLyBmaW5kIHRoZSBlYXJsaWVzdC1lbmRcbiAgbGV0IGVuZCA9IGFbMl0gPiBiWzJdID8gYlsyXSA6IGFbMl1cbiAgLy8gZG9lcyBpdCBmb3JtIGEgdmFsaWQgcG9pbnRlcj9cbiAgaWYgKHN0YXJ0IDwgZW5kKSB7XG4gICAgcmV0dXJuIFthWzBdLCBzdGFydCwgZW5kXVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IGdldEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIGxldCBieU4gPSBpbmRleE4oYilcbiAgbGV0IHJlcyA9IFtdXG4gIGEuZm9yRWFjaChwdHIgPT4ge1xuICAgIGxldCBobW0gPSBieU5bcHRyWzBdXSB8fCBbXVxuICAgIGhtbSA9IGhtbS5maWx0ZXIocCA9PiBkb2VzT3ZlcmxhcChwdHIsIHApKVxuICAgIC8vIG5vIHNlbnRlbmNlLXBhaXJzLCBzbyBubyBpbnRlcnNlY3Rpb25cbiAgICBpZiAoaG1tLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGhtbS5mb3JFYWNoKGggPT4ge1xuICAgICAgbGV0IG92ZXJsYXAgPSBpbnRlcnNlY3Rpb24ocHRyLCBoKVxuICAgICAgaWYgKG92ZXJsYXApIHtcbiAgICAgICAgcmVzLnB1c2gob3ZlcmxhcClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuICByZXR1cm4gcmVzXG59XG5leHBvcnQgZGVmYXVsdCBnZXRJbnRlcnNlY3Rpb25cblxuLy8gY29uc29sZS5sb2coZ2V0SW50ZXJzZWN0aW9uKFtbMCwgMSwgM11dLCBbWzAsIDIsIDRdXSkpXG4iLCAiaW1wb3J0IGdldFVuaW9uIGZyb20gJy4vbGliL3VuaW9uLmpzJ1xuaW1wb3J0IGdldERpZmZlcmVuY2UgZnJvbSAnLi9saWIvZGlmZmVyZW5jZS5qcydcbmltcG9ydCBnZXRJbnRlcnNlY3Rpb24gZnJvbSAnLi9saWIvaW50ZXJzZWN0aW9uLmpzJ1xuXG5jb25zdCBpc0FycmF5ID0gZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycikgPT09ICdbb2JqZWN0IEFycmF5XSdcbn1cblxuY29uc3QgZ2V0RG9jID0gKG0sIHZpZXcpID0+IHtcbiAgaWYgKHR5cGVvZiBtID09PSAnc3RyaW5nJyB8fCBpc0FycmF5KG0pKSB7XG4gICAgcmV0dXJuIHZpZXcubWF0Y2gobSlcbiAgfVxuICBpZiAoIW0pIHtcbiAgICByZXR1cm4gdmlldy5ub25lKClcbiAgfVxuICAvLyBzdXBwb3J0IHByZS1wYXJzZWQgcmVnIG9iamVjdFxuICByZXR1cm4gbVxufVxuXG4vLyAnaGFyZGVuJyBvdXIganNvbiBwb2ludGVycywgYWdhaW5cbmNvbnN0IGFkZElkcyA9IGZ1bmN0aW9uIChwdHJzLCBkb2NzKSB7XG4gIHJldHVybiBwdHJzLm1hcChwdHIgPT4ge1xuICAgIGxldCBbbiwgc3RhcnRdID0gcHRyXG4gICAgaWYgKGRvY3Nbbl0gJiYgZG9jc1tuXVtzdGFydF0pIHtcbiAgICAgIHB0clszXSA9IGRvY3Nbbl1bc3RhcnRdLmlkXG4gICAgfVxuICAgIHJldHVybiBwdHJcbiAgfSlcbn1cblxuY29uc3QgbWV0aG9kcyA9IHt9XG5cbi8vIGFsbCBwYXJ0cywgbWludXMgZHVwbGljYXRlc1xubWV0aG9kcy51bmlvbiA9IGZ1bmN0aW9uIChtKSB7XG4gIG0gPSBnZXREb2MobSwgdGhpcylcbiAgbGV0IHB0cnMgPSBnZXRVbmlvbih0aGlzLmZ1bGxQb2ludGVyLCBtLmZ1bGxQb2ludGVyKVxuICBwdHJzID0gYWRkSWRzKHB0cnMsIHRoaXMuZG9jdW1lbnQpXG4gIHJldHVybiB0aGlzLnRvVmlldyhwdHJzKVxufVxubWV0aG9kcy5hbmQgPSBtZXRob2RzLnVuaW9uXG5cbi8vIG9ubHkgcGFydHMgdGhleSBib3RoIGhhdmVcbm1ldGhvZHMuaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKG0pIHtcbiAgbSA9IGdldERvYyhtLCB0aGlzKVxuICBsZXQgcHRycyA9IGdldEludGVyc2VjdGlvbih0aGlzLmZ1bGxQb2ludGVyLCBtLmZ1bGxQb2ludGVyKVxuICBwdHJzID0gYWRkSWRzKHB0cnMsIHRoaXMuZG9jdW1lbnQpXG4gIHJldHVybiB0aGlzLnRvVmlldyhwdHJzKVxufVxuXG4vLyBvbmx5IHBhcnRzIG9mIGEgdGhhdCBiIGRvZXMgbm90IGhhdmVcbm1ldGhvZHMubm90ID0gZnVuY3Rpb24gKG0pIHtcbiAgbSA9IGdldERvYyhtLCB0aGlzKVxuICBsZXQgcHRycyA9IGdldERpZmZlcmVuY2UodGhpcy5mdWxsUG9pbnRlciwgbS5mdWxsUG9pbnRlcilcbiAgcHRycyA9IGFkZElkcyhwdHJzLCB0aGlzLmRvY3VtZW50KVxuICByZXR1cm4gdGhpcy50b1ZpZXcocHRycylcbn1cbm1ldGhvZHMuZGlmZmVyZW5jZSA9IG1ldGhvZHMubm90XG5cbi8vIGdldCBvcHBvc2l0ZSBvZiBhIG1hdGNoXG5tZXRob2RzLmNvbXBsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBkb2MgPSB0aGlzLmFsbCgpXG4gIGxldCBwdHJzID0gZ2V0RGlmZmVyZW5jZShkb2MuZnVsbFBvaW50ZXIsIHRoaXMuZnVsbFBvaW50ZXIpXG4gIHB0cnMgPSBhZGRJZHMocHRycywgdGhpcy5kb2N1bWVudClcbiAgcmV0dXJuIHRoaXMudG9WaWV3KHB0cnMpXG59XG5cbi8vIHJlbW92ZSBvdmVybGFwc1xubWV0aG9kcy5zZXR0bGUgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBwdHJzID0gdGhpcy5mdWxsUG9pbnRlclxuICBwdHJzLmZvckVhY2gocHRyID0+IHtcbiAgICBwdHJzID0gZ2V0VW5pb24ocHRycywgW3B0cl0pXG4gIH0pXG4gIHB0cnMgPSBhZGRJZHMocHRycywgdGhpcy5kb2N1bWVudClcbiAgcmV0dXJuIHRoaXMudXBkYXRlKHB0cnMpXG59XG5cbmNvbnN0IGFkZEFQSSA9IGZ1bmN0aW9uIChWaWV3KSB7XG4gIC8vIGFkZCBzZXQvaW50ZXJzZWN0aW9uL3VuaW9uXG4gIE9iamVjdC5hc3NpZ24oVmlldy5wcm90b3R5cGUsIG1ldGhvZHMpXG59XG5leHBvcnQgZGVmYXVsdCBhZGRBUElcbiIsICJpbXBvcnQgbWV0aG9kcyBmcm9tICcuL21ldGhvZHMvaW5kZXguanMnXG5pbXBvcnQgYXBpIGZyb20gJy4vYXBpL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHMsXG4gIGFwaSxcbn1cbiIsICJleHBvcnQgZGVmYXVsdCB7XG4gIC8vIGNvbXBpbGUgYSBsaXN0IG9mIG1hdGNoZXMgaW50byBhIG1hdGNoLW5ldFxuICBidWlsZE5ldDogZnVuY3Rpb24gKG1hdGNoZXMpIHtcbiAgICBjb25zdCBtZXRob2RzID0gdGhpcy5tZXRob2RzKClcbiAgICBsZXQgbmV0ID0gbWV0aG9kcy5vbmUuYnVpbGROZXQobWF0Y2hlcywgdGhpcy53b3JsZCgpKVxuICAgIG5ldC5pc05ldCA9IHRydWVcbiAgICByZXR1cm4gbmV0XG4gIH1cbn0iLCAiY29uc3QgYXBpID0gZnVuY3Rpb24gKFZpZXcpIHtcblxuICAvKiogc3BlZWR5IG1hdGNoIGEgc2VxdWVuY2Ugb2YgbWF0Y2hlcyAqL1xuICBWaWV3LnByb3RvdHlwZS5zd2VlcCA9IGZ1bmN0aW9uIChuZXQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHsgd29ybGQsIGRvY3MgfSA9IHRoaXNcbiAgICBjb25zdCB7IG1ldGhvZHMgfSA9IHdvcmxkXG4gICAgbGV0IGZvdW5kID0gbWV0aG9kcy5vbmUuYnVsa01hdGNoKGRvY3MsIG5ldCwgdGhpcy5tZXRob2RzLCBvcHRzKVxuXG4gICAgLy8gYXBwbHkgYW55IGNoYW5nZXNcbiAgICBpZiAob3B0cy50YWdnZXIgIT09IGZhbHNlKSB7XG4gICAgICBtZXRob2RzLm9uZS5idWxrVGFnZ2VyKGZvdW5kLCBkb2NzLCB0aGlzLndvcmxkKVxuICAgIH1cbiAgICAvLyBmaXggdGhlIHBvaW50ZXJzXG4gICAgLy8gY29sbGVjdCBhbGwgZm91bmQgcmVzdWx0cyBpbnRvIGEgVmlld1xuICAgIGZvdW5kID0gZm91bmQubWFwKG8gPT4ge1xuICAgICAgbGV0IHB0ciA9IG8ucG9pbnRlclxuICAgICAgbGV0IHRlcm0gPSBkb2NzW3B0clswXV1bcHRyWzFdXVxuICAgICAgbGV0IGxlbiA9IHB0clsyXSAtIHB0clsxXVxuICAgICAgaWYgKHRlcm0uaW5kZXgpIHtcbiAgICAgICAgby5wb2ludGVyID0gW1xuICAgICAgICAgIHRlcm0uaW5kZXhbMF0sXG4gICAgICAgICAgdGVybS5pbmRleFsxXSxcbiAgICAgICAgICBwdHJbMV0gKyBsZW5cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9cbiAgICB9KVxuICAgIGxldCBwdHJzID0gZm91bmQubWFwKG8gPT4gby5wb2ludGVyKVxuICAgIC8vIGNsZWFudXAgcmVzdWx0cyBhIGJpdFxuICAgIGZvdW5kID0gZm91bmQubWFwKG9iaiA9PiB7XG4gICAgICBvYmoudmlldyA9IHRoaXMudXBkYXRlKFtvYmoucG9pbnRlcl0pXG4gICAgICBkZWxldGUgb2JqLnJlZ3NcbiAgICAgIGRlbGV0ZSBvYmoubmVlZHNcbiAgICAgIGRlbGV0ZSBvYmoucG9pbnRlclxuICAgICAgZGVsZXRlIG9iai5fZXhwYW5kZWRcbiAgICAgIHJldHVybiBvYmpcbiAgICB9KVxuICAgIHJldHVybiB7XG4gICAgICB2aWV3OiB0aGlzLnVwZGF0ZShwdHJzKSxcbiAgICAgIGZvdW5kXG4gICAgfVxuICB9XG5cbn1cbmV4cG9ydCBkZWZhdWx0IGFwaSIsICIvLyBleHRyYWN0IHRoZSBjbGVhciBuZWVkcyBmb3IgYW4gaW5kaXZpZHVhbCBtYXRjaCB0b2tlblxuY29uc3QgZ2V0VG9rZW5OZWVkcyA9IGZ1bmN0aW9uIChyZWcpIHtcbiAgLy8gbmVnYXRpdmVzIGNhbid0IGJlIGNhY2hlZFxuICBpZiAocmVnLm9wdGlvbmFsID09PSB0cnVlIHx8IHJlZy5uZWdhdGl2ZSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHJlZy50YWcpIHtcbiAgICByZXR1cm4gJyMnICsgcmVnLnRhZ1xuICB9XG4gIGlmIChyZWcud29yZCkge1xuICAgIHJldHVybiByZWcud29yZFxuICB9XG4gIGlmIChyZWcuc3dpdGNoKSB7XG4gICAgcmV0dXJuIGAlJHtyZWcuc3dpdGNofSVgXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgZ2V0TmVlZHMgPSBmdW5jdGlvbiAocmVncykge1xuICBsZXQgbmVlZHMgPSBbXVxuICByZWdzLmZvckVhY2gocmVnID0+IHtcbiAgICBuZWVkcy5wdXNoKGdldFRva2VuTmVlZHMocmVnKSlcbiAgICAvLyBzdXBwb3J0IEFORCAoZm9vICYmIHRhZylcbiAgICBpZiAocmVnLm9wZXJhdG9yID09PSAnYW5kJyAmJiByZWcuY2hvaWNlcykge1xuICAgICAgcmVnLmNob2ljZXMuZm9yRWFjaChvbmVTaWRlID0+IHtcbiAgICAgICAgb25lU2lkZS5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgIG5lZWRzLnB1c2goZ2V0VG9rZW5OZWVkcyhyKSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuICByZXR1cm4gbmVlZHMuZmlsdGVyKHN0ciA9PiBzdHIpXG59XG5cbmNvbnN0IGdldFdhbnRzID0gZnVuY3Rpb24gKHJlZ3MpIHtcbiAgbGV0IHdhbnRzID0gW11cbiAgbGV0IGNvdW50ID0gMFxuICByZWdzLmZvckVhY2gocmVnID0+IHtcbiAgICBpZiAocmVnLm9wZXJhdG9yID09PSAnb3InICYmICFyZWcub3B0aW9uYWwgJiYgIXJlZy5uZWdhdGl2ZSkge1xuICAgICAgLy8gYWRkIGZhc3Qtb3IgdGVybXNcbiAgICAgIGlmIChyZWcuZmFzdE9yKSB7XG4gICAgICAgIEFycmF5LmZyb20ocmVnLmZhc3RPcikuZm9yRWFjaCh3ID0+IHtcbiAgICAgICAgICB3YW50cy5wdXNoKHcpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBhZGQgc2xvdy1vclxuICAgICAgaWYgKHJlZy5jaG9pY2VzKSB7XG4gICAgICAgIHJlZy5jaG9pY2VzLmZvckVhY2gocnMgPT4ge1xuICAgICAgICAgIHJzLmZvckVhY2gociA9PiB7XG4gICAgICAgICAgICBsZXQgbiA9IGdldFRva2VuTmVlZHMocilcbiAgICAgICAgICAgIGlmIChuKSB7XG4gICAgICAgICAgICAgIHdhbnRzLnB1c2gobilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY291bnQgKz0gMVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHsgd2FudHMsIGNvdW50IH1cbn1cblxuY29uc3QgcGFyc2UgPSBmdW5jdGlvbiAobWF0Y2hlcywgd29ybGQpIHtcbiAgY29uc3QgcGFyc2VNYXRjaCA9IHdvcmxkLm1ldGhvZHMub25lLnBhcnNlTWF0Y2hcbiAgbWF0Y2hlcy5mb3JFYWNoKG9iaiA9PiB7XG4gICAgb2JqLnJlZ3MgPSBwYXJzZU1hdGNoKG9iai5tYXRjaCwge30sIHdvcmxkKVxuICAgIC8vIHdyYXAgdGhlc2UgaWZObyBwcm9wZXJ0aWVzIGludG8gYW4gYXJyYXlcbiAgICBpZiAodHlwZW9mIG9iai5pZk5vID09PSAnc3RyaW5nJykge1xuICAgICAgb2JqLmlmTm8gPSBbb2JqLmlmTm9dXG4gICAgfVxuICAgIGlmIChvYmoubm90SWYpIHtcbiAgICAgIG9iai5ub3RJZiA9IHBhcnNlTWF0Y2gob2JqLm5vdElmLCB7fSwgd29ybGQpXG4gICAgfVxuICAgIC8vIGNhY2hlIGFueSByZXF1aXJlbWVudHMgdXAtZnJvbnQgXG4gICAgb2JqLm5lZWRzID0gZ2V0TmVlZHMob2JqLnJlZ3MpXG4gICAgbGV0IHsgd2FudHMsIGNvdW50IH0gPSBnZXRXYW50cyhvYmoucmVncylcbiAgICBvYmoud2FudHMgPSB3YW50c1xuICAgIG9iai5taW5XYW50ID0gY291bnRcbiAgICAvLyBnZXQgcmlkIG9mIHRpbnkgc2VudGVuY2VzXG4gICAgb2JqLm1pbldvcmRzID0gb2JqLnJlZ3MuZmlsdGVyKG8gPT4gIW8ub3B0aW9uYWwpLmxlbmd0aFxuICB9KVxuICByZXR1cm4gbWF0Y2hlc1xufVxuXG5leHBvcnQgZGVmYXVsdCBwYXJzZVxuIiwgImltcG9ydCBwYXJzZSBmcm9tICcuLzAxLXBhcnNlLmpzJ1xuXG4vLyBkbyBzb21lIGluZGV4aW5nIG9uIHRoZSBsaXN0IG9mIG1hdGNoZXNcbmNvbnN0IGJ1aWxkTmV0ID0gZnVuY3Rpb24gKG1hdGNoZXMsIHdvcmxkKSB7XG4gIC8vIHR1cm4gbWF0Y2gtc3ludGF4IGludG8ganNvblxuICBtYXRjaGVzID0gcGFyc2UobWF0Y2hlcywgd29ybGQpXG5cbiAgLy8gY29sbGVjdCBieSB3YW50cyBhbmQgbmVlZHNcbiAgbGV0IGhvb2tzID0ge31cbiAgbWF0Y2hlcy5mb3JFYWNoKG9iaiA9PiB7XG4gICAgLy8gYWRkIG5lZWRzXG4gICAgb2JqLm5lZWRzLmZvckVhY2goc3RyID0+IHtcbiAgICAgIGhvb2tzW3N0cl0gPSBBcnJheS5pc0FycmF5KGhvb2tzW3N0cl0pID8gaG9va3Nbc3RyXSA6IFtdXG4gICAgICBob29rc1tzdHJdLnB1c2gob2JqKVxuICAgIH0pXG4gICAgLy8gYWRkIHdhbnRzXG4gICAgb2JqLndhbnRzLmZvckVhY2goc3RyID0+IHtcbiAgICAgIGhvb2tzW3N0cl0gPSBBcnJheS5pc0FycmF5KGhvb2tzW3N0cl0pID8gaG9va3Nbc3RyXSA6IFtdXG4gICAgICBob29rc1tzdHJdLnB1c2gob2JqKVxuICAgIH0pXG4gIH0pXG4gIC8vIHJlbW92ZSBkdXBsaWNhdGVzXG4gIE9iamVjdC5rZXlzKGhvb2tzKS5mb3JFYWNoKGsgPT4ge1xuICAgIGxldCBhbHJlYWR5ID0ge31cbiAgICBob29rc1trXSA9IGhvb2tzW2tdLmZpbHRlcihvYmogPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhbHJlYWR5W29iai5tYXRjaF0gPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGFscmVhZHlbb2JqLm1hdGNoXSA9IHRydWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgfSlcblxuICAvLyBrZWVwIGFsbCB1bi1jYWNoZWFibGUgbWF0Y2hlcyAodGhvc2Ugd2l0aCBubyBuZWVkcykgXG4gIGxldCBhbHdheXMgPSBtYXRjaGVzLmZpbHRlcihvID0+IG8ubmVlZHMubGVuZ3RoID09PSAwICYmIG8ud2FudHMubGVuZ3RoID09PSAwKVxuICByZXR1cm4ge1xuICAgIGhvb2tzLFxuICAgIGFsd2F5c1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkTmV0XG4iLCAiLy8gZm9yIGVhY2ggY2FjaGVkLXNlbnRlbmNlLCBmaW5kIGEgbGlzdCBvZiBwb3NzaWJsZSBtYXRjaGVzXG5jb25zdCBnZXRIb29rcyA9IGZ1bmN0aW9uIChkb2NDYWNoZXMsIGhvb2tzKSB7XG4gIHJldHVybiBkb2NDYWNoZXMubWFwKChzZXQsIGkpID0+IHtcbiAgICBsZXQgbWF5YmUgPSBbXVxuICAgIE9iamVjdC5rZXlzKGhvb2tzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGRvY0NhY2hlc1tpXS5oYXMoaykpIHtcbiAgICAgICAgbWF5YmUgPSBtYXliZS5jb25jYXQoaG9va3Nba10pXG4gICAgICB9XG4gICAgfSlcbiAgICAvLyByZW1vdmUgZHVwbGljYXRlc1xuICAgIGxldCBhbHJlYWR5ID0ge31cbiAgICBtYXliZSA9IG1heWJlLmZpbHRlcihtID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWxyZWFkeVttLm1hdGNoXSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgYWxyZWFkeVttLm1hdGNoXSA9IHRydWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgICByZXR1cm4gbWF5YmVcbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0SG9va3NcbiIsICIvLyBmaWx0ZXItZG93biBsaXN0IG9mIG1heWJlLW1hdGNoZXNcbmNvbnN0IGxvY2FsVHJpbSA9IGZ1bmN0aW9uIChtYXliZUxpc3QsIGRvY0NhY2hlKSB7XG4gIHJldHVybiBtYXliZUxpc3QubWFwKChsaXN0LCBuKSA9PiB7XG4gICAgbGV0IGhhdmVzID0gZG9jQ2FjaGVbbl1cbiAgICAvLyBlbnN1cmUgYWxsIHN0YXRlZC1uZWVkcyBvZiB0aGUgbWF0Y2ggYXJlIG1ldFxuICAgIGxpc3QgPSBsaXN0LmZpbHRlcihvYmogPT4ge1xuICAgICAgcmV0dXJuIG9iai5uZWVkcy5ldmVyeShuZWVkID0+IGhhdmVzLmhhcyhuZWVkKSlcbiAgICB9KVxuICAgIC8vIGVuc3VyZSBub3RoaW5nIG1hdGNoZXMgaW4gb3VyICdpZk5vJyBwcm9wZXJ0eVxuICAgIGxpc3QgPSBsaXN0LmZpbHRlcihvYmogPT4ge1xuICAgICAgaWYgKG9iai5pZk5vICE9PSB1bmRlZmluZWQgJiYgb2JqLmlmTm8uc29tZShubyA9PiBoYXZlcy5oYXMobm8pKSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgICAvLyBlbnN1cmUgYXRsZWFzdCBvbmUoPykgb2YgdGhlIHdhbnRzIGlzIGZvdW5kXG4gICAgbGlzdCA9IGxpc3QuZmlsdGVyKG9iaiA9PiB7XG4gICAgICBpZiAob2JqLndhbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHRoZXJlJ3Mgb25lIGNhY2hlLWhpdFxuICAgICAgbGV0IGZvdW5kID0gb2JqLndhbnRzLmZpbHRlcihzdHIgPT4gaGF2ZXMuaGFzKHN0cikpLmxlbmd0aFxuICAgICAgcmV0dXJuIGZvdW5kID49IG9iai5taW5XYW50XG4gICAgfSlcbiAgICByZXR1cm4gbGlzdFxuICB9KVxufVxuZXhwb3J0IGRlZmF1bHQgbG9jYWxUcmltXG4iLCAiLy8gZmluYWxseSxcbi8vIGFjdHVhbGx5IHJ1biB0aGVzZSBtYXRjaC1zdGF0ZW1lbnRzIG9uIHRoZSB0ZXJtc1xuY29uc3QgcnVuTWF0Y2ggPSBmdW5jdGlvbiAobWF5YmVMaXN0LCBkb2N1bWVudCwgZG9jQ2FjaGUsIG1ldGhvZHMsIG9wdHMpIHtcbiAgbGV0IHJlc3VsdHMgPSBbXVxuICBmb3IgKGxldCBuID0gMDsgbiA8IG1heWJlTGlzdC5sZW5ndGg7IG4gKz0gMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF5YmVMaXN0W25dLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBsZXQgbSA9IG1heWJlTGlzdFtuXVtpXVxuICAgICAgLy8gb2ssIGFjdHVhbGx5IGRvIHRoZSB3b3JrLlxuICAgICAgbGV0IHJlcyA9IG1ldGhvZHMub25lLm1hdGNoKFtkb2N1bWVudFtuXV0sIG0pXG4gICAgICAvLyBmb3VuZCBzb21ldGhpbmcuXG4gICAgICBpZiAocmVzLnB0cnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXMucHRycy5mb3JFYWNoKHB0ciA9PiB7XG4gICAgICAgICAgcHRyWzBdID0gbiAvLyBmaXggdGhlIHNlbnRlbmNlIHBvaW50ZXJcbiAgICAgICAgICAvLyBjaGVjayBpZk5vXG4gICAgICAgICAgLy8gaWYgKG0uaWZObyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gICBsZXQgdGVybXMgPSBkb2N1bWVudFtuXS5zbGljZShwdHJbMV0sIHB0clsyXSlcbiAgICAgICAgICAvLyAgIGZvciAobGV0IGsgPSAwOyBrIDwgbS5pZk5vLmxlbmd0aDsgayArPSAxKSB7XG4gICAgICAgICAgLy8gICAgIGNvbnN0IG5vID0gbS5pZk5vW2tdXG4gICAgICAgICAgLy8gICAgIC8vIHF1aWNrLWNoZWNrIGNhY2hlXG4gICAgICAgICAgLy8gICAgIGlmIChkb2NDYWNoZVtuXS5oYXMobm8pKSB7XG4gICAgICAgICAgLy8gICAgICAgaWYgKG5vLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgICAgIC8vICAgICAgICAgbGV0IHRhZyA9IG5vLnJlcGxhY2UoL14jLywgJycpXG4gICAgICAgICAgLy8gICAgICAgICBpZiAodGVybXMuZmluZCh0ID0+IHQudGFncy5oYXModGFnKSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgY29uc29sZS5sb2coJysnICsgdGFnKVxuICAgICAgICAgIC8vICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHRlcm1zLmZpbmQodCA9PiB0Lm5vcm1hbCA9PT0gbm8gfHwgdC50YWdzLmhhcyhubykpKSB7XG4gICAgICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZygnKycgKyBubylcbiAgICAgICAgICAvLyAgICAgICAgIHJldHVyblxuICAgICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vIH1cbiAgICAgICAgICBsZXQgdG9kbyA9IE9iamVjdC5hc3NpZ24oe30sIG0sIHsgcG9pbnRlcjogcHRyIH0pXG4gICAgICAgICAgaWYgKG0udW5UYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdG9kby51blRhZyA9IG0udW5UYWdcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKHRvZG8pXG4gICAgICAgIH0pXG4gICAgICAgIC8vb2sgY29vbCwgY2FuIHdlIHN0b3AgZWFybHk/XG4gICAgICAgIGlmIChvcHRzLm1hdGNoT25lID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIFtyZXN1bHRzWzBdXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRzXG59XG5leHBvcnQgZGVmYXVsdCBydW5NYXRjaFxuIiwgImltcG9ydCBnZXRIb29rcyBmcm9tICcuLzAxLWdldEhvb2tzLmpzJ1xuaW1wb3J0IHRyaW1Eb3duIGZyb20gJy4vMDItdHJpbS1kb3duLmpzJ1xuLy8gaW1wb3J0IGdldFdhbnRzIGZyb20gJy4vMDMtZ2V0LXdhbnRzLmpzJ1xuaW1wb3J0IHJ1bk1hdGNoIGZyb20gJy4vMDQtcnVuTWF0Y2guanMnXG5cblxuY29uc3QgdG9vU21hbGwgPSBmdW5jdGlvbiAobWF5YmVMaXN0LCBkb2N1bWVudCkge1xuICByZXR1cm4gbWF5YmVMaXN0Lm1hcCgoYXJyLCBpKSA9PiB7XG4gICAgbGV0IHRlcm1Db3VudCA9IGRvY3VtZW50W2ldLmxlbmd0aFxuICAgIGFyciA9IGFyci5maWx0ZXIobyA9PiB7XG4gICAgICByZXR1cm4gdGVybUNvdW50ID49IG8ubWluV29yZHNcbiAgICB9KVxuICAgIHJldHVybiBhcnJcbiAgfSlcbn1cblxuY29uc3Qgc3dlZXAgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIG5ldCwgbWV0aG9kcywgb3B0cyA9IHt9KSB7XG4gIC8vIGZpbmQgc3VpdGFibGUgbWF0Y2hlcyB0byBhdHRlbXB0LCBvbiBlYWNoIHNlbnRlbmNlXG4gIGxldCBkb2NDYWNoZSA9IG1ldGhvZHMub25lLmNhY2hlRG9jKGRvY3VtZW50KVxuICAvLyBjb2xsZWN0IHBvc3NpYmxlIG1hdGNoZXMgZm9yIHRoaXMgZG9jdW1lbnRcbiAgbGV0IG1heWJlTGlzdCA9IGdldEhvb2tzKGRvY0NhY2hlLCBuZXQuaG9va3MpXG4gIC8vIGVuc3VyZSBhbGwgZGVmaW5lZCBuZWVkcyBhcmUgbWV0IGZvciBlYWNoIG1hdGNoXG4gIG1heWJlTGlzdCA9IHRyaW1Eb3duKG1heWJlTGlzdCwgZG9jQ2FjaGUsIGRvY3VtZW50KVxuICAvLyBhZGQgdW5jaGFjaGVhYmxlIG1hdGNoZXMgdG8gZWFjaCBzZW50ZW5jZSdzIHRvZG8tbGlzdFxuICBpZiAobmV0LmFsd2F5cy5sZW5ndGggPiAwKSB7XG4gICAgbWF5YmVMaXN0ID0gbWF5YmVMaXN0Lm1hcChhcnIgPT4gYXJyLmNvbmNhdChuZXQuYWx3YXlzKSlcbiAgfVxuICAvLyBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCB3b3Jkc1xuICBtYXliZUxpc3QgPSB0b29TbWFsbChtYXliZUxpc3QsIGRvY3VtZW50KVxuXG4gIC8vIG5vdyBhY3R1YWxseSBydW4gdGhlIG1hdGNoZXNcbiAgbGV0IHJlc3VsdHMgPSBydW5NYXRjaChtYXliZUxpc3QsIGRvY3VtZW50LCBkb2NDYWNoZSwgbWV0aG9kcywgb3B0cylcbiAgLy8gY29uc29sZS5kaXIocmVzdWx0cywgeyBkZXB0aDogNSB9KVxuICByZXR1cm4gcmVzdWx0c1xufVxuZXhwb3J0IGRlZmF1bHQgc3dlZXBcbiIsICIvLyBpcyB0aGlzIHRhZyBjb25zaXN0ZW50IHdpdGggdGhlIHRhZ3MgdGhleSBhbHJlYWR5IGhhdmU/XG5jb25zdCBjYW5CZSA9IGZ1bmN0aW9uICh0ZXJtcywgdGFnLCBtb2RlbCkge1xuICBsZXQgdGFnU2V0ID0gbW9kZWwub25lLnRhZ1NldFxuICBpZiAoIXRhZ1NldC5oYXNPd25Qcm9wZXJ0eSh0YWcpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBsZXQgbm90ID0gdGFnU2V0W3RhZ10ubm90IHx8IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGVybXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBsZXQgdGVybSA9IHRlcm1zW2ldXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBub3QubGVuZ3RoOyBrICs9IDEpIHtcbiAgICAgIGlmICh0ZXJtLnRhZ3MuaGFzKG5vdFtrXSkgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlIC8vZm91bmQgYSB0YWcgY29uZmxpY3QgLSBiYWlsIVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuZXhwb3J0IGRlZmF1bHQgY2FuQmVcbiIsICJpbXBvcnQgY2FuQmUgZnJvbSAnLi9jYW5CZS5qcydcblxuY29uc3QgdGFnZ2VyID0gZnVuY3Rpb24gKGxpc3QsIGRvY3VtZW50LCB3b3JsZCkge1xuICBjb25zdCB7IG1vZGVsLCBtZXRob2RzIH0gPSB3b3JsZFxuICBjb25zdCB7IGdldERvYywgc2V0VGFnLCB1blRhZyB9ID0gbWV0aG9kcy5vbmVcbiAgY29uc3QgbG9va3NQbHVyYWwgPSBtZXRob2RzLnR3by5sb29rc1BsdXJhbFxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbGlzdFxuICB9XG4gIC8vIHNvbWUgbG9nZ2luZyBmb3IgZGVidWdnaW5nXG4gIGNvbnN0IGVudiA9IHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhcHJvY2Vzcy5lbnYgPyBzZWxmLmVudiB8fCB7fSA6IHByb2Nlc3MuZW52XG4gIGlmIChlbnYuREVCVUdfVEFHUykge1xuICAgIGNvbnNvbGUubG9nKGBcXG5cXG4gIFxceDFiWzMybVx1MjE5MiAke2xpc3QubGVuZ3RofSBwb3N0LXRhZ2dlcjpcXHgxYlswbWApIC8vZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG4gIHJldHVybiBsaXN0Lm1hcCh0b2RvID0+IHtcbiAgICBpZiAoIXRvZG8udGFnICYmICF0b2RvLmNodW5rICYmICF0b2RvLnVuVGFnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbGV0IHJlYXNvbiA9IHRvZG8ucmVhc29uIHx8IHRvZG8ubWF0Y2hcbiAgICBsZXQgdGVybXMgPSBnZXREb2MoW3RvZG8ucG9pbnRlcl0sIGRvY3VtZW50KVswXVxuICAgIC8vIGhhbmRsZSAnc2FmZScgdGFnXG4gICAgaWYgKHRvZG8uc2FmZSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gY2hlY2sgZm9yIGNvbmZsaWN0aW5nIHRhZ3NcbiAgICAgIGlmIChjYW5CZSh0ZXJtcywgdG9kby50YWcsIG1vZGVsKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBkb250IHRhZyBoYWxmIG9mIGEgaHlwaGVuYXRlZCB3b3JkXG4gICAgICBpZiAodGVybXNbdGVybXMubGVuZ3RoIC0gMV0ucG9zdCA9PT0gJy0nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodG9kby50YWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0VGFnKHRlcm1zLCB0b2RvLnRhZywgd29ybGQsIHRvZG8uc2FmZSwgYFtwb3N0XSAnJHtyZWFzb259J2ApXG4gICAgICAvLyBxdWljayBhbmQgZGlydHkgcGx1cmFsIHRhZ2dlciBcdUQ4M0RcdURFMTVcbiAgICAgIGlmICh0b2RvLnRhZyA9PT0gJ05vdW4nICYmIGxvb2tzUGx1cmFsKSB7XG4gICAgICAgIGxldCB0ZXJtID0gdGVybXNbdGVybXMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGxvb2tzUGx1cmFsKHRlcm0udGV4dCkpIHtcbiAgICAgICAgICBzZXRUYWcoW3Rlcm1dLCAnUGx1cmFsJywgd29ybGQsIHRvZG8uc2FmZSwgJ3F1aWNrLXBsdXJhbCcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGFnKFt0ZXJtXSwgJ1Npbmd1bGFyJywgd29ybGQsIHRvZG8uc2FmZSwgJ3F1aWNrLXNpbmd1bGFyJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gYWxsb3cgZnJlZXppbmcgdGhpcyBtYXRjaCwgdG9vXG4gICAgICBpZiAodG9kby5mcmVlemUgPT09IHRydWUpIHtcbiAgICAgICAgdGVybXMuZm9yRWFjaCh0ZXJtID0+ICh0ZXJtLmZyb3plbiA9IHRydWUpKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodG9kby51blRhZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1blRhZyh0ZXJtcywgdG9kby51blRhZywgd29ybGQsIHRvZG8uc2FmZSwgcmVhc29uKVxuICAgIH1cbiAgICAvLyBhbGxvdyBzZXR0aW5nIGNodW5rcywgdG9vXG4gICAgaWYgKHRvZG8uY2h1bmspIHtcbiAgICAgIHRlcm1zLmZvckVhY2godCA9PiAodC5jaHVuayA9IHRvZG8uY2h1bmspKVxuICAgIH1cbiAgfSlcbn1cbmV4cG9ydCBkZWZhdWx0IHRhZ2dlclxuIiwgImltcG9ydCBidWlsZE5ldCBmcm9tICcuL2J1aWxkTmV0L2luZGV4LmpzJ1xuaW1wb3J0IGJ1bGtNYXRjaCBmcm9tICcuL3N3ZWVwL2luZGV4LmpzJ1xuaW1wb3J0IGJ1bGtUYWdnZXIgZnJvbSAnLi90YWdnZXIvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYnVpbGROZXQsXG4gIGJ1bGtNYXRjaCxcbiAgYnVsa1RhZ2dlclxufSIsICJpbXBvcnQgbGliIGZyb20gJy4vbGliLmpzJ1xuaW1wb3J0IGFwaSBmcm9tICcuL2FwaS5qcydcbmltcG9ydCBtZXRob2RzIGZyb20gJy4vbWV0aG9kcy9pbmRleC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBsaWIsXG4gIGFwaSxcbiAgbWV0aG9kczoge1xuICAgIG9uZTogbWV0aG9kcyxcbiAgfVxufSIsICJjb25zdCBpc011bHRpID0gLyAvXG5cbmNvbnN0IGFkZENodW5rID0gZnVuY3Rpb24gKHRlcm0sIHRhZykge1xuICBpZiAodGFnID09PSAnTm91bicpIHtcbiAgICB0ZXJtLmNodW5rID0gdGFnXG4gIH1cbiAgaWYgKHRhZyA9PT0gJ1ZlcmInKSB7XG4gICAgdGVybS5jaHVuayA9IHRhZ1xuICB9XG59XG5cbmNvbnN0IHRhZ1Rlcm0gPSBmdW5jdGlvbiAodGVybSwgdGFnLCB0YWdTZXQsIGlzU2FmZSkge1xuICAvLyBkb2VzIGl0IGFscmVhZHkgaGF2ZSB0aGlzIHRhZz9cbiAgaWYgKHRlcm0udGFncy5oYXModGFnKSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgLy8gYWxsb3cgdGhpcyBzaG9ydGhhbmQgaW4gbXVsdGlwbGUtdGFnIHN0cmluZ3NcbiAgaWYgKHRhZyA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICAvLyBkb24ndCBvdmVyd3JpdGUgYW55IHRhZ3MsIGlmIHRlcm0gaXMgZnJvemVuXG4gIGlmICh0ZXJtLmZyb3plbiA9PT0gdHJ1ZSkge1xuICAgIGlzU2FmZSA9IHRydWVcbiAgfVxuICAvLyBmb3Iga25vd24gdGFncywgZG8gbG9naWNhbCBkZXBlbmRlbmNpZXMgZmlyc3RcbiAgbGV0IGtub3duID0gdGFnU2V0W3RhZ11cbiAgaWYgKGtub3duKSB7XG4gICAgLy8gZmlyc3QsIHdlIHJlbW92ZSBhbnkgY29uZmxpY3RpbmcgdGFnc1xuICAgIGlmIChrbm93bi5ub3QgJiYga25vd24ubm90Lmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IG8gPSAwOyBvIDwga25vd24ubm90Lmxlbmd0aDsgbyArPSAxKSB7XG4gICAgICAgIC8vIGlmIHdlJ3JlIGluIHRhZ1NhZmUsIHNraXAgdGhpcyB0ZXJtLlxuICAgICAgICBpZiAoaXNTYWZlID09PSB0cnVlICYmIHRlcm0udGFncy5oYXMoa25vd24ubm90W29dKSkge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgdGVybS50YWdzLmRlbGV0ZShrbm93bi5ub3Rbb10pXG4gICAgICB9XG4gICAgfVxuICAgIC8vIGFkZCBwYXJlbnQgdGFnc1xuICAgIGlmIChrbm93bi5wYXJlbnRzICYmIGtub3duLnBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgbyA9IDA7IG8gPCBrbm93bi5wYXJlbnRzLmxlbmd0aDsgbyArPSAxKSB7XG4gICAgICAgIHRlcm0udGFncy5hZGQoa25vd24ucGFyZW50c1tvXSlcbiAgICAgICAgYWRkQ2h1bmsodGVybSwga25vd24ucGFyZW50c1tvXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gZmluYWxseSwgYWRkIG91ciB0YWdcbiAgdGVybS50YWdzLmFkZCh0YWcpXG4gIC8vIG5vdyBpdCdzIGRpcnR5P1xuICB0ZXJtLmRpcnR5ID0gdHJ1ZVxuICAvLyBhZGQgYSBjaHVuayB0b28sIGlmIGl0J3MgZWFzeVxuICBhZGRDaHVuayh0ZXJtLCB0YWcpXG4gIHJldHVybiB0cnVlXG59XG5cbi8vIHN1cHBvcnQgJyNOb3VuIC4gI0FkamVjdGl2ZScgc3ludGF4XG5jb25zdCBtdWx0aVRhZyA9IGZ1bmN0aW9uICh0ZXJtcywgdGFnU3RyaW5nLCB0YWdTZXQsIGlzU2FmZSkge1xuICBsZXQgdGFncyA9IHRhZ1N0cmluZy5zcGxpdChpc011bHRpKVxuICB0ZXJtcy5mb3JFYWNoKCh0ZXJtLCBpKSA9PiB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV1cbiAgICBpZiAodGFnKSB7XG4gICAgICB0YWcgPSB0YWcucmVwbGFjZSgvXiMvLCAnJylcbiAgICAgIHRhZ1Rlcm0odGVybSwgdGFnLCB0YWdTZXQsIGlzU2FmZSlcbiAgICB9XG4gIH0pXG59XG5cbmNvbnN0IGlzQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xufVxuXG4vLyB2ZXJib3NlLW1vZGUgdGFnZ2VyIGRlYnVnaW5nXG5jb25zdCBsb2cgPSAodGVybXMsIHRhZywgcmVhc29uID0gJycpID0+IHtcbiAgY29uc3QgeWVsbG93ID0gc3RyID0+ICdcXHgxYlszM21cXHgxYlszbScgKyBzdHIgKyAnXFx4MWJbMG0nXG4gIGNvbnN0IGkgPSBzdHIgPT4gJ1xceDFiWzNtJyArIHN0ciArICdcXHgxYlswbSdcbiAgbGV0IHdvcmQgPSB0ZXJtc1xuICAgIC5tYXAodCA9PiB7XG4gICAgICByZXR1cm4gdC50ZXh0IHx8ICdbJyArIHQuaW1wbGljaXQgKyAnXSdcbiAgICB9KVxuICAgIC5qb2luKCcgJylcbiAgaWYgKHR5cGVvZiB0YWcgIT09ICdzdHJpbmcnICYmIHRhZy5sZW5ndGggPiAyKSB7XG4gICAgdGFnID0gdGFnLnNsaWNlKDAsIDIpLmpvaW4oJywgIycpICsgJyArJyAvL3RydW5jYXRlIHRoZSBsaXN0IG9mIHRhZ3NcbiAgfVxuICB0YWcgPSB0eXBlb2YgdGFnICE9PSAnc3RyaW5nJyA/IHRhZy5qb2luKCcsICMnKSA6IHRhZ1xuICBjb25zb2xlLmxvZyhgICR7eWVsbG93KHdvcmQpLnBhZEVuZCgyNCl9IFxceDFiWzMybVx1MjE5MlxceDFiWzBtICMke3RhZy5wYWRFbmQoMjIpfSAgJHtpKHJlYXNvbil9YCkgLy8gZXNsaW50LWRpc2FibGUtbGluZVxufVxuXG4vLyBhZGQgYSB0YWcgdG8gYWxsIHRoZXNlIHRlcm1zXG5jb25zdCBzZXRUYWcgPSBmdW5jdGlvbiAodGVybXMsIHRhZywgd29ybGQgPSB7fSwgaXNTYWZlLCByZWFzb24pIHtcbiAgY29uc3QgdGFnU2V0ID0gd29ybGQubW9kZWwub25lLnRhZ1NldCB8fCB7fVxuICBpZiAoIXRhZykge1xuICAgIHJldHVyblxuICB9XG4gIC8vIHNvbWUgbG9nZ2luZyBmb3IgZGVidWdnaW5nXG4gIGNvbnN0IGVudiA9IHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhcHJvY2Vzcy5lbnYgPyBzZWxmLmVudiB8fCB7fSA6IHByb2Nlc3MuZW52XG4gIGlmIChlbnYgJiYgZW52LkRFQlVHX1RBR1MpIHtcbiAgICBsb2codGVybXMsIHRhZywgcmVhc29uKVxuICB9XG4gIGlmIChpc0FycmF5KHRhZykgPT09IHRydWUpIHtcbiAgICB0YWcuZm9yRWFjaCh0ZyA9PiBzZXRUYWcodGVybXMsIHRnLCB3b3JsZCwgaXNTYWZlKSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZW9mIHRhZyAhPT0gJ3N0cmluZycpIHtcbiAgICBjb25zb2xlLndhcm4oYGNvbXByb21pc2U6IEludmFsaWQgdGFnICcke3RhZ30nYCkgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHJldHVyblxuICB9XG4gIHRhZyA9IHRhZy50cmltKClcbiAgLy8gc3VwcG9ydCAnI05vdW4gLiAjQWRqZWN0aXZlJyBzeW50YXhcbiAgaWYgKGlzTXVsdGkudGVzdCh0YWcpKSB7XG4gICAgbXVsdGlUYWcodGVybXMsIHRhZywgdGFnU2V0LCBpc1NhZmUpXG4gICAgcmV0dXJuXG4gIH1cbiAgdGFnID0gdGFnLnJlcGxhY2UoL14jLywgJycpXG4gIC8vIGxldCBzZXQgPSBmYWxzZVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGFnVGVybSh0ZXJtc1tpXSwgdGFnLCB0YWdTZXQsIGlzU2FmZSlcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgc2V0VGFnXG4iLCAiLy8gcmVtb3ZlIHRoaXMgdGFnLCBhbmQgaXRzIGNoaWxkcmVuLCBmcm9tIHRoZXNlIHRlcm1zXG5jb25zdCB1blRhZyA9IGZ1bmN0aW9uICh0ZXJtcywgdGFnLCB0YWdTZXQpIHtcbiAgdGFnID0gdGFnLnRyaW0oKS5yZXBsYWNlKC9eIy8sICcnKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgbGV0IHRlcm0gPSB0ZXJtc1tpXVxuICAgIC8vIGRvbid0IHVudGFnIGFueXRoaW5nIGlmIHRlcm0gaXMgZnJvemVuXG4gICAgaWYgKHRlcm0uZnJvemVuID09PSB0cnVlKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICAvLyBzdXBwb3J0IGNsZWFyaW5nIGFsbCB0YWdzLCB3aXRoICcqJ1xuICAgIGlmICh0YWcgPT09ICcqJykge1xuICAgICAgdGVybS50YWdzLmNsZWFyKClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIC8vIGZvciBrbm93biB0YWdzLCBkbyBsb2dpY2FsIGRlcGVuZGVuY2llcyBmaXJzdFxuICAgIGxldCBrbm93biA9IHRhZ1NldFt0YWddXG4gICAgLy8gcmVtb3ZpbmcgI1ZlcmIgc2hvdWxkIGFsc28gcmVtb3ZlICNQYXN0VGVuc2VcbiAgICBpZiAoa25vd24gJiYga25vd24uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgbyA9IDA7IG8gPCBrbm93bi5jaGlsZHJlbi5sZW5ndGg7IG8gKz0gMSkge1xuICAgICAgICB0ZXJtLnRhZ3MuZGVsZXRlKGtub3duLmNoaWxkcmVuW29dKVxuICAgICAgfVxuICAgIH1cbiAgICB0ZXJtLnRhZ3MuZGVsZXRlKHRhZylcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgdW5UYWdcbiIsICIvLyBxdWljayBjaGVjayBpZiB0aGlzIHRhZyB3aWxsIHJlcXVpcmUgYW55IHVudGFnZ2luZ1xuY29uc3QgY2FuQmUgPSBmdW5jdGlvbiAodGVybSwgdGFnLCB0YWdTZXQpIHtcbiAgaWYgKCF0YWdTZXQuaGFzT3duUHJvcGVydHkodGFnKSkge1xuICAgIHJldHVybiB0cnVlIC8vIGV2ZXJ5dGhpbmcgY2FuIGJlIGFuIHVua25vd24gdGFnXG4gIH1cbiAgbGV0IG5vdCA9IHRhZ1NldFt0YWddLm5vdCB8fCBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh0ZXJtLnRhZ3MuaGFzKG5vdFtpXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuZXhwb3J0IGRlZmF1bHQgY2FuQmVcbiIsICJjb25zdCBlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNoaWxkcmVuPWUuY2hpbGRyZW58fFtdLGUuX2NhY2hlPWUuX2NhY2hlfHx7fSxlLnByb3BzPWUucHJvcHN8fHt9LGUuX2NhY2hlLnBhcmVudHM9ZS5fY2FjaGUucGFyZW50c3x8W10sZS5fY2FjaGUuY2hpbGRyZW49ZS5fY2FjaGUuY2hpbGRyZW58fFtdLGV9LHQ9L14gKigjfFxcL1xcLykvLG49ZnVuY3Rpb24odCl7bGV0IG49dC50cmltKCkuc3BsaXQoLy0+Lykscj1bXTtuLmZvckVhY2goKHQ9PntyPXIuY29uY2F0KGZ1bmN0aW9uKHQpe2lmKCEodD10LnRyaW0oKSkpcmV0dXJuIG51bGw7aWYoL15cXFsvLnRlc3QodCkmJi9cXF0kLy50ZXN0KHQpKXtsZXQgbj0odD0odD10LnJlcGxhY2UoL15cXFsvLFwiXCIpKS5yZXBsYWNlKC9cXF0kLyxcIlwiKSkuc3BsaXQoLywvKTtyZXR1cm4gbj1uLm1hcCgoZT0+ZS50cmltKCkpKS5maWx0ZXIoKGU9PmUpKSxuPW4ubWFwKCh0PT5lKHtpZDp0fSkpKSxufXJldHVybltlKHtpZDp0fSldfSh0KSl9KSkscj1yLmZpbHRlcigoZT0+ZSkpO2xldCBpPXJbMF07Zm9yKGxldCBlPTE7ZTxyLmxlbmd0aDtlKz0xKWkuY2hpbGRyZW4ucHVzaChyW2VdKSxpPXJbZV07cmV0dXJuIHJbMF19LHI9KGUsdCk9PntsZXQgbj1bXSxyPVtlXTtmb3IoO3IubGVuZ3RoPjA7KXtsZXQgZT1yLnBvcCgpO24ucHVzaChlKSxlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLmZvckVhY2goKG49Pnt0JiZ0KGUsbiksci5wdXNoKG4pfSkpfXJldHVybiBufSxpPWU9PlwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSxjPWU9PihlPWV8fFwiXCIpLnRyaW0oKSxzPWZ1bmN0aW9uKGM9W10pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBjP2Z1bmN0aW9uKHIpe2xldCBpPXIuc3BsaXQoL1xccj9cXG4vKSxjPVtdO2kuZm9yRWFjaCgoZT0+e2lmKCFlLnRyaW0oKXx8dC50ZXN0KGUpKXJldHVybjtsZXQgcj0oZT0+e2NvbnN0IHQ9L14oIHsyfXxcXHQpLztsZXQgbj0wO2Zvcig7dC50ZXN0KGUpOyllPWUucmVwbGFjZSh0LFwiXCIpLG4rPTE7cmV0dXJuIG59KShlKTtjLnB1c2goe2luZGVudDpyLG5vZGU6bihlKX0pfSkpO2xldCBzPWZ1bmN0aW9uKGUpe2xldCB0PXtjaGlsZHJlbjpbXX07cmV0dXJuIGUuZm9yRWFjaCgoKG4scik9PnswPT09bi5pbmRlbnQ/dC5jaGlsZHJlbj10LmNoaWxkcmVuLmNvbmNhdChuLm5vZGUpOmVbci0xXSYmZnVuY3Rpb24oZSx0KXtsZXQgbj1lW3RdLmluZGVudDtmb3IoO3Q+PTA7dC09MSlpZihlW3RdLmluZGVudDxuKXJldHVybiBlW3RdO3JldHVybiBlWzBdfShlLHIpLm5vZGUuY2hpbGRyZW4ucHVzaChuLm5vZGUpfSkpLHR9KGMpO3JldHVybiBzPWUocyksc30oYyk6aShjKT9mdW5jdGlvbih0KXtsZXQgbj17fTt0LmZvckVhY2goKGU9PntuW2UuaWRdPWV9KSk7bGV0IHI9ZSh7fSk7cmV0dXJuIHQuZm9yRWFjaCgodD0+e2lmKCh0PWUodCkpLnBhcmVudClpZihuLmhhc093blByb3BlcnR5KHQucGFyZW50KSl7bGV0IGU9blt0LnBhcmVudF07ZGVsZXRlIHQucGFyZW50LGUuY2hpbGRyZW4ucHVzaCh0KX1lbHNlIGNvbnNvbGUud2FybihgW0dyYWRdIC0gbWlzc2luZyBub2RlICcke3QucGFyZW50fSdgKTtlbHNlIHIuY2hpbGRyZW4ucHVzaCh0KX0pKSxyfShjKToocihzPWMpLmZvckVhY2goZSkscyk7dmFyIHN9LGg9ZT0+XCJcdTAwMUJbMzFtXCIrZStcIlx1MDAxQlswbVwiLG89ZT0+XCJcdTAwMUJbMm1cIitlK1wiXHUwMDFCWzBtXCIsbD1mdW5jdGlvbihlLHQpe2xldCBuPVwiLT4gXCI7dCYmKG49byhcIlx1MjE5MiBcIikpO2xldCBpPVwiXCI7cmV0dXJuIHIoZSkuZm9yRWFjaCgoKGUscik9PntsZXQgYz1lLmlkfHxcIlwiO2lmKHQmJihjPWgoYykpLDA9PT1yJiYhZS5pZClyZXR1cm47bGV0IHM9ZS5fY2FjaGUucGFyZW50cy5sZW5ndGg7aSs9XCIgICAgXCIucmVwZWF0KHMpK24rYytcIlxcblwifSkpLGl9LGE9ZnVuY3Rpb24oZSl7bGV0IHQ9cihlKTt0LmZvckVhY2goKGU9PntkZWxldGUoZT1PYmplY3QuYXNzaWduKHt9LGUpKS5jaGlsZHJlbn0pKTtsZXQgbj10WzBdO3JldHVybiBuJiYhbi5pZCYmMD09PU9iamVjdC5rZXlzKG4ucHJvcHMpLmxlbmd0aCYmdC5zaGlmdCgpLHR9LHA9e3RleHQ6bCx0eHQ6bCxhcnJheTphLGZsYXQ6YX0sZD1mdW5jdGlvbihlLHQpe3JldHVyblwibmVzdGVkXCI9PT10fHxcImpzb25cIj09PXQ/ZTpcImRlYnVnXCI9PT10Pyhjb25zb2xlLmxvZyhsKGUsITApKSxudWxsKTpwLmhhc093blByb3BlcnR5KHQpP3BbdF0oZSk6ZX0sdT1lPT57cihlLCgoZSx0KT0+e2UuaWQmJihlLl9jYWNoZS5wYXJlbnRzPWUuX2NhY2hlLnBhcmVudHN8fFtdLHQuX2NhY2hlLnBhcmVudHM9ZS5fY2FjaGUucGFyZW50cy5jb25jYXQoW2UuaWRdKSl9KSl9LGY9KGUsdCk9PihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57aWYodFtuXWluc3RhbmNlb2YgU2V0KXtsZXQgcj1lW25dfHxuZXcgU2V0O2Vbbl09bmV3IFNldChbLi4uciwuLi50W25dXSl9ZWxzZXtpZigoZT0+ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJiFBcnJheS5pc0FycmF5KGUpKSh0W25dKSl7bGV0IHI9ZVtuXXx8e307ZVtuXT1PYmplY3QuYXNzaWduKHt9LHRbbl0scil9ZWxzZSBpKHRbbl0pP2Vbbl09dFtuXS5jb25jYXQoZVtuXXx8W10pOnZvaWQgMD09PWVbbl0mJihlW25dPXRbbl0pfX0pKSxlKSxqPS9cXC8vO2NsYXNzIGd7Y29uc3RydWN0b3IoZT17fSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJqc29uXCIse2VudW1lcmFibGU6ITEsdmFsdWU6ZSx3cml0YWJsZTohMH0pfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmpzb24uY2hpbGRyZW59Z2V0IGlkKCl7cmV0dXJuIHRoaXMuanNvbi5pZH1nZXQgZm91bmQoKXtyZXR1cm4gdGhpcy5qc29uLmlkfHx0aGlzLmpzb24uY2hpbGRyZW4ubGVuZ3RoPjB9cHJvcHMoZT17fSl7bGV0IHQ9dGhpcy5qc29uLnByb3BzfHx7fTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKHRbZV09ITApLHRoaXMuanNvbi5wcm9wcz1PYmplY3QuYXNzaWduKHQsZSksdGhpc31nZXQodCl7aWYodD1jKHQpLCFqLnRlc3QodCkpe2xldCBlPXRoaXMuanNvbi5jaGlsZHJlbi5maW5kKChlPT5lLmlkPT09dCkpO3JldHVybiBuZXcgZyhlKX1sZXQgbj0oKGUsdCk9PntsZXQgbj0oZT0+XCJzdHJpbmdcIiE9dHlwZW9mIGU/ZTooZT1lLnJlcGxhY2UoL15cXC8vLFwiXCIpKS5zcGxpdCgvXFwvLykpKHQ9dHx8XCJcIik7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kz0xKXtsZXQgcj1lLmNoaWxkcmVuLmZpbmQoKGU9PmUuaWQ9PT1uW3RdKSk7aWYoIXIpcmV0dXJuIG51bGw7ZT1yfXJldHVybiBlfSkodGhpcy5qc29uLHQpfHxlKHt9KTtyZXR1cm4gbmV3IGcobil9YWRkKHQsbj17fSl7aWYoaSh0KSlyZXR1cm4gdC5mb3JFYWNoKChlPT50aGlzLmFkZChjKGUpLG4pKSksdGhpczt0PWModCk7bGV0IHI9ZSh7aWQ6dCxwcm9wczpufSk7cmV0dXJuIHRoaXMuanNvbi5jaGlsZHJlbi5wdXNoKHIpLG5ldyBnKHIpfXJlbW92ZShlKXtyZXR1cm4gZT1jKGUpLHRoaXMuanNvbi5jaGlsZHJlbj10aGlzLmpzb24uY2hpbGRyZW4uZmlsdGVyKCh0PT50LmlkIT09ZSkpLHRoaXN9bm9kZXMoKXtyZXR1cm4gcih0aGlzLmpzb24pLm1hcCgoZT0+KGRlbGV0ZShlPU9iamVjdC5hc3NpZ24oe30sZSkpLmNoaWxkcmVuLGUpKSl9Y2FjaGUoKXtyZXR1cm4oZT0+e2xldCB0PXIoZSwoKGUsdCk9PntlLmlkJiYoZS5fY2FjaGUucGFyZW50cz1lLl9jYWNoZS5wYXJlbnRzfHxbXSxlLl9jYWNoZS5jaGlsZHJlbj1lLl9jYWNoZS5jaGlsZHJlbnx8W10sdC5fY2FjaGUucGFyZW50cz1lLl9jYWNoZS5wYXJlbnRzLmNvbmNhdChbZS5pZF0pKX0pKSxuPXt9O3QuZm9yRWFjaCgoZT0+e2UuaWQmJihuW2UuaWRdPWUpfSkpLHQuZm9yRWFjaCgoZT0+e2UuX2NhY2hlLnBhcmVudHMuZm9yRWFjaCgodD0+e24uaGFzT3duUHJvcGVydHkodCkmJm5bdF0uX2NhY2hlLmNoaWxkcmVuLnB1c2goZS5pZCl9KSl9KSksZS5fY2FjaGUuY2hpbGRyZW49T2JqZWN0LmtleXMobil9KSh0aGlzLmpzb24pLHRoaXN9bGlzdCgpe3JldHVybiByKHRoaXMuanNvbil9ZmlsbERvd24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmpzb24scihlLCgoZSx0KT0+e3QucHJvcHM9Zih0LnByb3BzLGUucHJvcHMpfSkpLHRoaXN9ZGVwdGgoKXt1KHRoaXMuanNvbik7bGV0IGU9cih0aGlzLmpzb24pLHQ9ZS5sZW5ndGg+MT8xOjA7cmV0dXJuIGUuZm9yRWFjaCgoZT0+e2lmKDA9PT1lLl9jYWNoZS5wYXJlbnRzLmxlbmd0aClyZXR1cm47bGV0IG49ZS5fY2FjaGUucGFyZW50cy5sZW5ndGgrMTtuPnQmJih0PW4pfSkpLHR9b3V0KGUpe3JldHVybiB1KHRoaXMuanNvbiksZCh0aGlzLmpzb24sZSl9ZGVidWcoKXtyZXR1cm4gdSh0aGlzLmpzb24pLGQodGhpcy5qc29uLFwiZGVidWdcIiksdGhpc319Y29uc3QgXz1mdW5jdGlvbihlKXtsZXQgdD1zKGUpO3JldHVybiBuZXcgZyh0KX07Xy5wcm90b3R5cGUucGx1Z2luPWZ1bmN0aW9uKGUpe2UodGhpcyl9O2V4cG9ydHtfIGFzIGRlZmF1bHR9O1xuIiwgIi8vIGkganVzdCBtYWRlIHRoZXNlIHVwXG5jb25zdCBjb2xvcnMgPSB7XG4gIE5vdW46ICdibHVlJyxcbiAgVmVyYjogJ2dyZWVuJyxcbiAgTmVnYXRpdmU6ICdncmVlbicsXG4gIERhdGU6ICdyZWQnLFxuICBWYWx1ZTogJ3JlZCcsXG4gIEFkamVjdGl2ZTogJ21hZ2VudGEnLFxuICBQcmVwb3NpdGlvbjogJ2N5YW4nLFxuICBDb25qdW5jdGlvbjogJ2N5YW4nLFxuICBEZXRlcm1pbmVyOiAnY3lhbicsXG4gIEh5cGhlbmF0ZWQ6ICdjeWFuJyxcbiAgQWR2ZXJiOiAnY3lhbicsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyIsICJpbXBvcnQgY29sb3JzIGZyb20gJy4vX2NvbG9ycy5qcydcblxuY29uc3QgZ2V0Q29sb3IgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAoY29sb3JzLmhhc093blByb3BlcnR5KG5vZGUuaWQpKSB7XG4gICAgcmV0dXJuIGNvbG9yc1tub2RlLmlkXVxuICB9XG4gIGlmIChjb2xvcnMuaGFzT3duUHJvcGVydHkobm9kZS5pcykpIHtcbiAgICByZXR1cm4gY29sb3JzW25vZGUuaXNdXG4gIH1cbiAgbGV0IGZvdW5kID0gbm9kZS5fY2FjaGUucGFyZW50cy5maW5kKGMgPT4gY29sb3JzW2NdKVxuICByZXR1cm4gY29sb3JzW2ZvdW5kXVxufVxuXG4vLyBjb252ZXJ0IHRhZ3MgdG8gb3VyIGZpbmFsIGZvcm1hdFxuY29uc3QgZm10ID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gIGNvbnN0IHJlcyA9IHt9XG4gIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgbGV0IHsgbm90LCBhbHNvLCBpcywgbm92ZWwgfSA9IG5vZGUucHJvcHNcbiAgICBsZXQgcGFyZW50cyA9IG5vZGUuX2NhY2hlLnBhcmVudHNcbiAgICBpZiAoYWxzbykge1xuICAgICAgcGFyZW50cyA9IHBhcmVudHMuY29uY2F0KGFsc28pXG4gICAgfVxuICAgIHJlc1tub2RlLmlkXSA9IHtcbiAgICAgIGlzLFxuICAgICAgbm90LFxuICAgICAgbm92ZWwsXG4gICAgICBhbHNvLFxuICAgICAgcGFyZW50cyxcbiAgICAgIGNoaWxkcmVuOiBub2RlLl9jYWNoZS5jaGlsZHJlbixcbiAgICAgIGNvbG9yOiBnZXRDb2xvcihub2RlKVxuICAgIH1cbiAgfSlcbiAgLy8gbGFzdGx5LCBhZGQgYWxsIGNoaWxkcmVuIG9mIGFsbCBub3RzXG4gIE9iamVjdC5rZXlzKHJlcykuZm9yRWFjaChrID0+IHtcbiAgICBsZXQgbm90cyA9IG5ldyBTZXQocmVzW2tdLm5vdClcbiAgICByZXNba10ubm90LmZvckVhY2gobm90ID0+IHtcbiAgICAgIGlmIChyZXNbbm90XSkge1xuICAgICAgICByZXNbbm90XS5jaGlsZHJlbi5mb3JFYWNoKHRhZyA9PiBub3RzLmFkZCh0YWcpKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmVzW2tdLm5vdCA9IEFycmF5LmZyb20obm90cylcbiAgfSlcbiAgcmV0dXJuIHJlc1xufVxuXG5leHBvcnQgZGVmYXVsdCBmbXQiLCAiXG5jb25zdCB0b0FyciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICBpZiAoIWlucHV0KSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gW2lucHV0XVxuICB9XG4gIHJldHVybiBpbnB1dFxufVxuXG5jb25zdCBhZGRJbXBsaWVkID0gZnVuY3Rpb24gKHRhZ3MsIGFscmVhZHkpIHtcbiAgT2JqZWN0LmtleXModGFncykuZm9yRWFjaChrID0+IHtcbiAgICAvLyBzdXBwb3J0IGRlcHJlY2F0ZWQgZm10c1xuICAgIGlmICh0YWdzW2tdLmlzQSkge1xuICAgICAgdGFnc1trXS5pcyA9IHRhZ3Nba10uaXNBXG4gICAgfVxuICAgIGlmICh0YWdzW2tdLm5vdEEpIHtcbiAgICAgIHRhZ3Nba10ubm90ID0gdGFnc1trXS5ub3RBXG4gICAgfVxuICAgIC8vIGFkZCBhbnkgaW1wbGljaXQgJ2lzJyB0YWdzXG4gICAgaWYgKHRhZ3Nba10uaXMgJiYgdHlwZW9mIHRhZ3Nba10uaXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIWFscmVhZHkuaGFzT3duUHJvcGVydHkodGFnc1trXS5pcykgJiYgIXRhZ3MuaGFzT3duUHJvcGVydHkodGFnc1trXS5pcykpIHtcbiAgICAgICAgdGFnc1t0YWdzW2tdLmlzXSA9IHt9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGFkZCBhbnkgaW1wbGljaXQgJ25vdCcgdGFnc1xuICAgIGlmICh0YWdzW2tdLm5vdCAmJiB0eXBlb2YgdGFnc1trXS5ub3QgPT09ICdzdHJpbmcnICYmICF0YWdzLmhhc093blByb3BlcnR5KHRhZ3Nba10ubm90KSkge1xuICAgICAgaWYgKCFhbHJlYWR5Lmhhc093blByb3BlcnR5KHRhZ3Nba10ubm90KSAmJiAhdGFncy5oYXNPd25Qcm9wZXJ0eSh0YWdzW2tdLm5vdCkpIHtcbiAgICAgICAgdGFnc1t0YWdzW2tdLm5vdF0gPSB7fVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHRhZ3Ncbn1cblxuXG5jb25zdCB2YWxpZGF0ZSA9IGZ1bmN0aW9uICh0YWdzLCBhbHJlYWR5KSB7XG5cbiAgdGFncyA9IGFkZEltcGxpZWQodGFncywgYWxyZWFkeSlcblxuICAvLyBwcm9wZXJ0eSB2YWxpZGF0aW9uXG4gIE9iamVjdC5rZXlzKHRhZ3MpLmZvckVhY2goayA9PiB7XG4gICAgdGFnc1trXS5jaGlsZHJlbiA9IHRvQXJyKHRhZ3Nba10uY2hpbGRyZW4pXG4gICAgdGFnc1trXS5ub3QgPSB0b0Fycih0YWdzW2tdLm5vdClcbiAgfSlcbiAgLy8gbm90IGxpbmtzIGFyZSBiaS1kaXJlY3Rpb25hbFxuICAvLyBhZGQgYW55IGluY29taW5nIG5vdCB0YWdzXG4gIE9iamVjdC5rZXlzKHRhZ3MpLmZvckVhY2goayA9PiB7XG4gICAgbGV0IG5vdHMgPSB0YWdzW2tdLm5vdCB8fCBbXVxuICAgIG5vdHMuZm9yRWFjaChubyA9PiB7XG4gICAgICBpZiAodGFnc1tub10gJiYgdGFnc1tub10ubm90KSB7XG4gICAgICAgIHRhZ3Nbbm9dLm5vdC5wdXNoKGspXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbiAgcmV0dXJuIHRhZ3Ncbn1cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlIiwgImltcG9ydCBncmFkIGZyb20gJ2dyYWQtc2Nob29sJ1xuaW1wb3J0IGZtdCBmcm9tICcuLzAyLWZtdC5qcydcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuLzAxLXZhbGlkYXRlLmpzJ1xuXG4vLyAnZmlsbC1kb3duJyBwYXJlbnQgbG9naWMgaW5mZXJlbmNlXG5jb25zdCBjb21wdXRlID0gZnVuY3Rpb24gKGFsbFRhZ3MpIHtcbiAgLy8gc2V0dXAgZ3JhcGgtbGliIGZvcm1hdFxuICBjb25zdCBmbGF0TGlzdCA9IE9iamVjdC5rZXlzKGFsbFRhZ3MpLm1hcChrID0+IHtcbiAgICBsZXQgbyA9IGFsbFRhZ3Nba11cbiAgICBjb25zdCBwcm9wcyA9IHsgbm90OiBuZXcgU2V0KG8ubm90KSwgYWxzbzogby5hbHNvLCBpczogby5pcywgbm92ZWw6IG8ubm92ZWwgfVxuICAgIHJldHVybiB7IGlkOiBrLCBwYXJlbnQ6IG8uaXMsIHByb3BzLCBjaGlsZHJlbjogW10gfVxuICB9KVxuICBjb25zdCBncmFwaCA9IGdyYWQoZmxhdExpc3QpLmNhY2hlKCkuZmlsbERvd24oKVxuICByZXR1cm4gZ3JhcGgub3V0KCdhcnJheScpXG59XG5cbmNvbnN0IGZyb21Vc2VyID0gZnVuY3Rpb24gKHRhZ3MpIHtcbiAgT2JqZWN0LmtleXModGFncykuZm9yRWFjaChrID0+IHtcbiAgICB0YWdzW2tdID0gT2JqZWN0LmFzc2lnbih7fSwgdGFnc1trXSlcbiAgICB0YWdzW2tdLm5vdmVsID0gdHJ1ZVxuICB9KVxuICByZXR1cm4gdGFnc1xufVxuXG5jb25zdCBhZGRUYWdzID0gZnVuY3Rpb24gKHRhZ3MsIGFscmVhZHkpIHtcbiAgLy8gYXJlIHRoZXNlIHRhZ3MgaW50ZXJuYWwgb25lcywgb3IgdXNlci1nZW5lcmF0ZWQ/XG4gIGlmIChPYmplY3Qua2V5cyhhbHJlYWR5KS5sZW5ndGggPiAwKSB7XG4gICAgdGFncyA9IGZyb21Vc2VyKHRhZ3MpXG4gIH1cbiAgdGFncyA9IHZhbGlkYXRlKHRhZ3MsIGFscmVhZHkpXG5cbiAgbGV0IGFsbFRhZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhbHJlYWR5LCB0YWdzKVxuICAvLyBkbyBzb21lIGJhc2ljIHNldHRpbmctdXBcbiAgLy8gJ2ZpbGwtZG93bicgcGFyZW50IGxvZ2ljXG4gIGNvbnN0IG5vZGVzID0gY29tcHV0ZShhbGxUYWdzKVxuICAvLyBjb252ZXJ0IGl0IHRvIG91ciBmaW5hbCBmb3JtYXRcbiAgY29uc3QgcmVzID0gZm10KG5vZGVzKVxuICByZXR1cm4gcmVzXG59XG5leHBvcnQgZGVmYXVsdCBhZGRUYWdzXG4iLCAiaW1wb3J0IHNldFRhZyBmcm9tICcuL3NldFRhZy5qcydcbmltcG9ydCB1blRhZyBmcm9tICcuL3VuVGFnLmpzJ1xuaW1wb3J0IGNhbkJlIGZyb20gJy4vY2FuQmUuanMnXG5pbXBvcnQgYWRkVGFncyBmcm9tICcuL2FkZFRhZ3MvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25lOiB7XG4gICAgc2V0VGFnLFxuICAgIHVuVGFnLFxuICAgIGFkZFRhZ3MsXG4gICAgY2FuQmUsXG4gIH0sXG59XG4iLCAiLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbmNvbnN0IGlzQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xufVxuY29uc3QgZm5zID0ge1xuICAvKiogYWRkIGEgZ2l2ZW4gdGFnLCB0byBhbGwgdGhlc2UgdGVybXMgKi9cbiAgdGFnOiBmdW5jdGlvbiAoaW5wdXQsIHJlYXNvbiA9ICcnLCBpc1NhZmUpIHtcbiAgICBpZiAoIXRoaXMuZm91bmQgfHwgIWlucHV0KSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICBsZXQgdGVybXMgPSB0aGlzLnRlcm1MaXN0KClcbiAgICBpZiAodGVybXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICBjb25zdCB7IG1ldGhvZHMsIHZlcmJvc2UsIHdvcmxkIH0gPSB0aGlzXG4gICAgLy8gbG9nZ2VyXG4gICAgaWYgKHZlcmJvc2UgPT09IHRydWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcgKyAgJywgaW5wdXQsIHJlYXNvbiB8fCAnJylcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICBpbnB1dC5mb3JFYWNoKHRhZyA9PiBtZXRob2RzLm9uZS5zZXRUYWcodGVybXMsIHRhZywgd29ybGQsIGlzU2FmZSwgcmVhc29uKSlcbiAgICB9IGVsc2Uge1xuICAgICAgbWV0aG9kcy5vbmUuc2V0VGFnKHRlcm1zLCBpbnB1dCwgd29ybGQsIGlzU2FmZSwgcmVhc29uKVxuICAgIH1cbiAgICAvLyB1bmNhY2hlXG4gICAgdGhpcy51bmNhY2hlKClcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuXG4gIC8qKiBhZGQgYSBnaXZlbiB0YWcsIG9ubHkgaWYgaXQgaXMgY29uc2lzdGVudCAqL1xuICB0YWdTYWZlOiBmdW5jdGlvbiAoaW5wdXQsIHJlYXNvbiA9ICcnKSB7XG4gICAgcmV0dXJuIHRoaXMudGFnKGlucHV0LCByZWFzb24sIHRydWUpXG4gIH0sXG5cbiAgLyoqIHJlbW92ZSBhIGdpdmVuIHRhZyBmcm9tIGFsbCB0aGVzZSB0ZXJtcyAqL1xuICB1blRhZzogZnVuY3Rpb24gKGlucHV0LCByZWFzb24pIHtcbiAgICBpZiAoIXRoaXMuZm91bmQgfHwgIWlucHV0KSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICBsZXQgdGVybXMgPSB0aGlzLnRlcm1MaXN0KClcbiAgICBpZiAodGVybXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICBjb25zdCB7IG1ldGhvZHMsIHZlcmJvc2UsIG1vZGVsIH0gPSB0aGlzXG4gICAgLy8gbG9nZ2VyXG4gICAgaWYgKHZlcmJvc2UgPT09IHRydWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcgLSAgJywgaW5wdXQsIHJlYXNvbiB8fCAnJylcbiAgICB9XG4gICAgbGV0IHRhZ1NldCA9IG1vZGVsLm9uZS50YWdTZXRcbiAgICBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgIGlucHV0LmZvckVhY2godGFnID0+IG1ldGhvZHMub25lLnVuVGFnKHRlcm1zLCB0YWcsIHRhZ1NldCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIG1ldGhvZHMub25lLnVuVGFnKHRlcm1zLCBpbnB1dCwgdGFnU2V0KVxuICAgIH1cbiAgICAvLyB1bmNhY2hlXG4gICAgdGhpcy51bmNhY2hlKClcbiAgICByZXR1cm4gdGhpc1xuICB9LFxuXG4gIC8qKiByZXR1cm4gb25seSB0aGUgdGVybXMgdGhhdCBjYW4gYmUgdGhpcyB0YWcgICovXG4gIGNhbkJlOiBmdW5jdGlvbiAodGFnKSB7XG4gICAgdGFnID0gdGFnLnJlcGxhY2UoL14jLywgJycpXG4gICAgbGV0IHRhZ1NldCA9IHRoaXMubW9kZWwub25lLnRhZ1NldFxuICAgIGxldCBjYW5CZSA9IHRoaXMubWV0aG9kcy5vbmUuY2FuQmVcbiAgICBsZXQgbm9wZSA9IFtdXG4gICAgdGhpcy5kb2N1bWVudC5mb3JFYWNoKCh0ZXJtcywgbikgPT4ge1xuICAgICAgdGVybXMuZm9yRWFjaCgodGVybSwgaSkgPT4ge1xuICAgICAgICBpZiAoIWNhbkJlKHRlcm0sIHRhZywgdGFnU2V0KSkge1xuICAgICAgICAgIG5vcGUucHVzaChbbiwgaSwgaSArIDFdKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gICAgbGV0IG5vRG9jID0gdGhpcy51cGRhdGUobm9wZSlcbiAgICByZXR1cm4gdGhpcy5kaWZmZXJlbmNlKG5vRG9jKVxuICB9LFxufVxuZXhwb3J0IGRlZmF1bHQgZm5zXG4iLCAiaW1wb3J0IHRhZyBmcm9tICcuL3RhZy5qcydcblxuY29uc3QgdGFnQVBJID0gZnVuY3Rpb24gKFZpZXcpIHtcbiAgT2JqZWN0LmFzc2lnbihWaWV3LnByb3RvdHlwZSwgdGFnKVxufVxuZXhwb3J0IGRlZmF1bHQgdGFnQVBJXG4iLCAiLy8gd2lyZS11cCBtb3JlIHBvcy10YWdzIHRvIG91ciBtb2RlbFxuY29uc3QgYWRkVGFncyA9IGZ1bmN0aW9uICh0YWdzKSB7XG4gIGNvbnN0IHsgbW9kZWwsIG1ldGhvZHMgfSA9IHRoaXMud29ybGQoKVxuICBjb25zdCB0YWdTZXQgPSBtb2RlbC5vbmUudGFnU2V0XG4gIGNvbnN0IGZuID0gbWV0aG9kcy5vbmUuYWRkVGFnc1xuICBsZXQgcmVzID0gZm4odGFncywgdGFnU2V0KVxuICBtb2RlbC5vbmUudGFnU2V0ID0gcmVzXG4gIHJldHVybiB0aGlzXG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgYWRkVGFncyB9IiwgImNvbnN0IGJvcmluZ1RhZ3MgPSBuZXcgU2V0KFsnQXV4aWxpYXJ5JywgJ1Bvc3Nlc3NpdmUnXSlcblxuY29uc3Qgc29ydEJ5S2lkcyA9IGZ1bmN0aW9uICh0YWdzLCB0YWdTZXQpIHtcbiAgdGFncyA9IHRhZ3Muc29ydCgoYSwgYikgPT4ge1xuICAgIC8vICh1bmtub3duIHRhZ3MgYXJlIGludGVyZXN0aW5nKVxuICAgIGlmIChib3JpbmdUYWdzLmhhcyhhKSB8fCAhdGFnU2V0Lmhhc093blByb3BlcnR5KGIpKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICBpZiAoYm9yaW5nVGFncy5oYXMoYikgfHwgIXRhZ1NldC5oYXNPd25Qcm9wZXJ0eShhKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGxldCBraWRzID0gdGFnU2V0W2FdLmNoaWxkcmVuIHx8IFtdXG4gICAgbGV0IGFLaWRzID0ga2lkcy5sZW5ndGhcbiAgICBraWRzID0gdGFnU2V0W2JdLmNoaWxkcmVuIHx8IFtdXG4gICAgbGV0IGJLaWRzID0ga2lkcy5sZW5ndGhcbiAgICByZXR1cm4gYUtpZHMgLSBiS2lkc1xuICB9KVxuICByZXR1cm4gdGFnc1xufVxuXG5jb25zdCB0YWdSYW5rID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgY29uc3QgeyBkb2N1bWVudCwgd29ybGQgfSA9IHZpZXdcbiAgY29uc3QgdGFnU2V0ID0gd29ybGQubW9kZWwub25lLnRhZ1NldFxuICBkb2N1bWVudC5mb3JFYWNoKHRlcm1zID0+IHtcbiAgICB0ZXJtcy5mb3JFYWNoKHRlcm0gPT4ge1xuICAgICAgbGV0IHRhZ3MgPSBBcnJheS5mcm9tKHRlcm0udGFncylcbiAgICAgIHRlcm0udGFnUmFuayA9IHNvcnRCeUtpZHModGFncywgdGFnU2V0KVxuICAgIH0pXG4gIH0pXG59XG5leHBvcnQgZGVmYXVsdCB0YWdSYW5rXG4iLCAiaW1wb3J0IG1ldGhvZHMgZnJvbSAnLi9tZXRob2RzL2luZGV4LmpzJ1xuaW1wb3J0IGFwaSBmcm9tICcuL2FwaS9pbmRleC5qcydcbmltcG9ydCBsaWIgZnJvbSAnLi9saWIuanMnXG5pbXBvcnQgdGFnUmFuayBmcm9tICcuL2NvbXB1dGUvdGFnUmFuay5qcydcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1vZGVsOiB7XG4gICAgb25lOiB7IHRhZ1NldDoge30gfVxuICB9LFxuICBjb21wdXRlOiB7XG4gICAgdGFnUmFua1xuICB9LFxuICBtZXRob2RzLFxuICBhcGksXG4gIGxpYlxufVxuIiwgIi8vIHNwbGl0IGJ5IHBlcmlvZHMsIHF1ZXN0aW9uIG1hcmtzLCB1bmljb2RlIFx1MjA0NywgZXRjXG5jb25zdCBpbml0U3BsaXQgPSAvKFsuIT9cXHUyMDNEXFx1MkUxOFxcdTIwM0NcXHUyMDQ3LVxcdTIwNDlcXHUzMDAyXStcXHMpL2dcbi8vIG1lcmdlIHRoZXNlIGJhY2sgaW50byBwcmV2IHNlbnRlbmNlXG5jb25zdCBzcGxpdHNPbmx5ID0gL15bLiE/XFx1MjAzRFxcdTJFMThcXHUyMDNDXFx1MjA0Ny1cXHUyMDQ5XFx1MzAwMl0rXFxzJC9cbmNvbnN0IG5ld0xpbmUgPSAvKCg/Olxccj9cXG58XFxyKSspLyAvLyBNYXRjaCBkaWZmZXJlbnQgbmV3LWxpbmUgZm9ybWF0c1xuXG4vLyBTdGFydCB3aXRoIGEgcmVnZXg6XG5jb25zdCBiYXNpY1NwbGl0ID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgbGV0IGFsbCA9IFtdXG4gIC8vZmlyc3QsIHNwbGl0IGJ5IG5ld2xpbmVcbiAgbGV0IGxpbmVzID0gdGV4dC5zcGxpdChuZXdMaW5lKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy9zcGxpdCBieSBwZXJpb2QsIHF1ZXN0aW9uLW1hcmssIGFuZCBleGNsYW1hdGlvbi1tYXJrXG4gICAgbGV0IGFyciA9IGxpbmVzW2ldLnNwbGl0KGluaXRTcGxpdClcbiAgICBmb3IgKGxldCBvID0gMDsgbyA8IGFyci5sZW5ndGg7IG8rKykge1xuICAgICAgLy8gbWVyZ2UgJ2ZvbycgKyAnLidcbiAgICAgIGlmIChhcnJbbyArIDFdICYmIHNwbGl0c09ubHkudGVzdChhcnJbbyArIDFdKSA9PT0gdHJ1ZSkge1xuICAgICAgICBhcnJbb10gKz0gYXJyW28gKyAxXVxuICAgICAgICBhcnJbbyArIDFdID0gJydcbiAgICAgIH1cbiAgICAgIGlmIChhcnJbb10gIT09ICcnKSB7XG4gICAgICAgIGFsbC5wdXNoKGFycltvXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsbFxufVxuZXhwb3J0IGRlZmF1bHQgYmFzaWNTcGxpdFxuIiwgImNvbnN0IGhhc0xldHRlciA9IC9bYS16MC05XFx1MDBDMC1cXHUwMEZGXFx1MDBhOVxcdTAwYWVcXHUyMDAwLVxcdTMzMDBcXHVkMDAwLVxcdWRmZmZdL2lcbmNvbnN0IGhhc1NvbWV0aGluZyA9IC9cXFMvXG5cbmNvbnN0IG5vdEVtcHR5ID0gZnVuY3Rpb24gKHNwbGl0cykge1xuICBsZXQgY2h1bmtzID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdHMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgcyA9IHNwbGl0c1tpXVxuICAgIGlmIChzID09PSB1bmRlZmluZWQgfHwgcyA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIC8vdGhpcyBpcyBtZWFuaW5nZnVsIHdoaXRlc3BhY2VcbiAgICBpZiAoaGFzU29tZXRoaW5nLnRlc3QocykgPT09IGZhbHNlIHx8IGhhc0xldHRlci50ZXN0KHMpID09PSBmYWxzZSkge1xuICAgICAgLy9hZGQgaXQgdG8gdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXSkge1xuICAgICAgICBjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdICs9IHNcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoc3BsaXRzW2kgKyAxXSkge1xuICAgICAgICAvL2FkZCBpdCB0byB0aGUgbmV4dCBvbmVcbiAgICAgICAgc3BsaXRzW2kgKyAxXSA9IHMgKyBzcGxpdHNbaSArIDFdXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuICAgIC8vZWxzZSwgb25seSB3aGl0ZXNwYWNlLCBubyB0ZXJtcywgbm8gc2VudGVuY2VcbiAgICBjaHVua3MucHVzaChzKVxuICB9XG4gIHJldHVybiBjaHVua3Ncbn1cbmV4cG9ydCBkZWZhdWx0IG5vdEVtcHR5IiwgIlxuLy9sb29wIHRocm91Z2ggdGhlc2UgY2h1bmtzLCBhbmQgam9pbiB0aGUgbm9uLXNlbnRlbmNlIGNodW5rcyBiYWNrIHRvZ2V0aGVyLi5cbmNvbnN0IHNtYXJ0TWVyZ2UgPSBmdW5jdGlvbiAoY2h1bmtzLCB3b3JsZCkge1xuICBjb25zdCBpc1NlbnRlbmNlID0gd29ybGQubWV0aG9kcy5vbmUudG9rZW5pemUuaXNTZW50ZW5jZVxuICBjb25zdCBhYmJyZXZzID0gd29ybGQubW9kZWwub25lLmFiYnJldmlhdGlvbnMgfHwgbmV3IFNldCgpXG5cbiAgbGV0IHNlbnRlbmNlcyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGMgPSBjaHVua3NbaV1cbiAgICAvL3Nob3VsZCB0aGlzIGNodW5rIGJlIGNvbWJpbmVkIHdpdGggdGhlIG5leHQgb25lP1xuICAgIGlmIChjaHVua3NbaSArIDFdICYmIGlzU2VudGVuY2UoYywgYWJicmV2cykgPT09IGZhbHNlKSB7XG4gICAgICBjaHVua3NbaSArIDFdID0gYyArIChjaHVua3NbaSArIDFdIHx8ICcnKVxuICAgIH0gZWxzZSBpZiAoYyAmJiBjLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vdGhpcyBjaHVuayBpcyBhIHByb3BlciBzZW50ZW5jZS4uXG4gICAgICBzZW50ZW5jZXMucHVzaChjKVxuICAgICAgY2h1bmtzW2ldID0gJydcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlbnRlbmNlc1xufVxuZXhwb3J0IGRlZmF1bHQgc21hcnRNZXJnZSIsICIvKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tZHVwZS1jaGFyYWN0ZXJzLWNoYXJhY3Rlci1jbGFzcyAqL1xuXG4vLyBtZXJnZSBlbWJlZGRlZCBxdW90ZXMgaW50byAxIHNlbnRlbmNlXG4vLyBsaWtlIC0gJ2hlIHNhaWQgXCJubyFcIiBhbmQgbGVmdC4nXG5jb25zdCBNQVhfUVVPVEUgPSAyODAvLyBcdTAwQUZcXF8oXHUzMEM0KV8vXHUwMEFGXG5cbi8vIGRvbid0IHN1cHBvcnQgc2luZ2xlLXF1b3RlcyBmb3IgbXVsdGktc2VudGVuY2VzXG5jb25zdCBwYWlycyA9IHtcbiAgJ1xcdTAwMjInOiAnXFx1MDAyMicsIC8vICdTdHJhaWdodERvdWJsZVF1b3RlcydcbiAgJ1xcdUZGMDInOiAnXFx1RkYwMicsIC8vICdTdHJhaWdodERvdWJsZVF1b3Rlc1dpZGUnXG4gIC8vICdcXHUwMDI3JzogJ1xcdTAwMjcnLCAvLyAnU3RyYWlnaHRTaW5nbGVRdW90ZXMnXG4gICdcXHUyMDFDJzogJ1xcdTIwMUQnLCAvLyAnQ29tbWFEb3VibGVRdW90ZXMnXG4gIC8vICdcXHUyMDE4JzogJ1xcdTIwMTknLCAvLyAnQ29tbWFTaW5nbGVRdW90ZXMnXG4gICdcXHUyMDFGJzogJ1xcdTIwMUQnLCAvLyAnQ3VybHlEb3VibGVRdW90ZXNSZXZlcnNlZCdcbiAgLy8gJ1xcdTIwMUInOiAnXFx1MjAxOScsIC8vICdDdXJseVNpbmdsZVF1b3Rlc1JldmVyc2VkJ1xuICAnXFx1MjAxRSc6ICdcXHUyMDFEJywgLy8gJ0xvd0N1cmx5RG91YmxlUXVvdGVzJ1xuICAnXFx1MkU0Mic6ICdcXHUyMDFEJywgLy8gJ0xvd0N1cmx5RG91YmxlUXVvdGVzUmV2ZXJzZWQnXG4gICdcXHUyMDFBJzogJ1xcdTIwMTknLCAvLyAnTG93Q3VybHlTaW5nbGVRdW90ZXMnXG4gICdcXHUwMEFCJzogJ1xcdTAwQkInLCAvLyAnQW5nbGVEb3VibGVRdW90ZXMnXG4gICdcXHUyMDM5JzogJ1xcdTIwM0EnLCAvLyAnQW5nbGVTaW5nbGVRdW90ZXMnXG4gICdcXHUyMDM1JzogJ1xcdTIwMzInLCAvLyAnUHJpbWVTaW5nbGVRdW90ZXMnXG4gICdcXHUyMDM2JzogJ1xcdTIwMzMnLCAvLyAnUHJpbWVEb3VibGVRdW90ZXMnXG4gICdcXHUyMDM3JzogJ1xcdTIwMzQnLCAvLyAnUHJpbWVUcmlwbGVRdW90ZXMnXG4gICdcXHUzMDFEJzogJ1xcdTMwMUUnLCAvLyAnUHJpbWVEb3VibGVRdW90ZXMnXG4gIC8vICdcXHUwMDYwJzogJ1xcdTAwQjQnLCAvLyAnUHJpbWVTaW5nbGVRdW90ZXMnXG4gICdcXHUzMDFGJzogJ1xcdTMwMUUnLCAvLyAnTG93UHJpbWVEb3VibGVRdW90ZXNSZXZlcnNlZCdcbn1cbmNvbnN0IG9wZW5RdW90ZSA9IFJlZ0V4cCgnWycgKyBPYmplY3Qua2V5cyhwYWlycykuam9pbignJykgKyAnXScsICdnJylcbmNvbnN0IGNsb3NlUXVvdGUgPSBSZWdFeHAoJ1snICsgT2JqZWN0LnZhbHVlcyhwYWlycykuam9pbignJykgKyAnXScsICdnJylcblxuY29uc3QgY2xvc2VzUXVvdGUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgbGV0IG0gPSBzdHIubWF0Y2goY2xvc2VRdW90ZSlcbiAgaWYgKG0gIT09IG51bGwgJiYgbS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBhbGxvdyBtaWNyby1zZW50ZW5jZXMgd2hlbiBpbnNpZGUgYSBxdW90YXRpb24sIGxpa2U6XG4vLyB0aGUgZG9jIHNhaWQgXCJubyBzaXIuIGkgd2lsbCBub3QgYmVnXCIgYW5kIHdhbGtlZCBhd2F5LlxuY29uc3QgcXVvdGVNZXJnZSA9IGZ1bmN0aW9uIChzcGxpdHMpIHtcbiAgbGV0IGFyciA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgbGV0IHNwbGl0ID0gc3BsaXRzW2ldXG4gICAgLy8gZG8gd2UgaGF2ZSBhbiBvcGVuLXF1b3RlIGFuZCBub3QgYSBjbG9zZWQgb25lP1xuICAgIGxldCBtID0gc3BsaXQubWF0Y2gob3BlblF1b3RlKVxuICAgIGlmIChtICE9PSBudWxsICYmIG0ubGVuZ3RoID09PSAxKSB7XG5cbiAgICAgIC8vIGxvb2sgYXQgdGhlIG5leHQgc2VudGVuY2UgZm9yIGEgY2xvc2luZyBxdW90ZSxcbiAgICAgIGlmIChjbG9zZXNRdW90ZShzcGxpdHNbaSArIDFdKSAmJiBzcGxpdHNbaSArIDFdLmxlbmd0aCA8IE1BWF9RVU9URSkge1xuICAgICAgICBzcGxpdHNbaV0gKz0gc3BsaXRzW2kgKyAxXS8vIG1lcmdlIHRoZW1cbiAgICAgICAgYXJyLnB1c2goc3BsaXRzW2ldKVxuICAgICAgICBzcGxpdHNbaSArIDFdID0gJydcbiAgICAgICAgaSArPSAxXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICAvLyBsb29rIGF0IG4rMiBmb3IgYSBjbG9zaW5nIHF1b3RlLFxuICAgICAgaWYgKGNsb3Nlc1F1b3RlKHNwbGl0c1tpICsgMl0pKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IHNwbGl0c1tpICsgMV0gKyBzcGxpdHNbaSArIDJdLy8gbWVyZ2UgdGhlbSBhbGxcbiAgICAgICAgLy9tYWtlIHN1cmUgaXQncyBub3QgdG9vLWxvbmdcbiAgICAgICAgaWYgKHRvQWRkLmxlbmd0aCA8IE1BWF9RVU9URSkge1xuICAgICAgICAgIHNwbGl0c1tpXSArPSB0b0FkZFxuICAgICAgICAgIGFyci5wdXNoKHNwbGl0c1tpXSlcbiAgICAgICAgICBzcGxpdHNbaSArIDFdID0gJydcbiAgICAgICAgICBzcGxpdHNbaSArIDJdID0gJydcbiAgICAgICAgICBpICs9IDJcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFyci5wdXNoKHNwbGl0c1tpXSlcbiAgfVxuICByZXR1cm4gYXJyXG59XG5leHBvcnQgZGVmYXVsdCBxdW90ZU1lcmdlXG4iLCAiY29uc3QgTUFYX0xFTiA9IDI1MC8vIFx1MDBBRlxcXyhcdTMwQzQpXy9cdTAwQUZcblxuLy8gc3VwcG9ydCB1bmljb2RlIHZhcmlhbnRzP1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTM1MzUxNzIvbGlzdC1vZi1hbGwtdW5pY29kZXMtb3Blbi1jbG9zZS1icmFja2V0c1xuY29uc3QgaGFzT3BlbiA9IC9cXCgvZ1xuY29uc3QgaGFzQ2xvc2VkID0gL1xcKS9nXG5jb25zdCBtZXJnZVBhcmVucyA9IGZ1bmN0aW9uIChzcGxpdHMpIHtcbiAgbGV0IGFyciA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgbGV0IHNwbGl0ID0gc3BsaXRzW2ldXG4gICAgbGV0IG0gPSBzcGxpdC5tYXRjaChoYXNPcGVuKVxuICAgIGlmIChtICE9PSBudWxsICYmIG0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBsb29rIGF0IG5leHQgc2VudGVuY2UsIGZvciBjbG9zaW5nIHBhcmVudGhlc2lzXG4gICAgICBpZiAoc3BsaXRzW2kgKyAxXSAmJiBzcGxpdHNbaSArIDFdLmxlbmd0aCA8IE1BWF9MRU4pIHtcbiAgICAgICAgbGV0IG0yID0gc3BsaXRzW2kgKyAxXS5tYXRjaChoYXNDbG9zZWQpXG4gICAgICAgIGlmIChtMiAhPT0gbnVsbCAmJiBtLmxlbmd0aCA9PT0gMSAmJiAhaGFzT3Blbi50ZXN0KHNwbGl0c1tpICsgMV0pKSB7XG4gICAgICAgICAgLy8gbWVyZ2UgaW4gMm5kIHNlbnRlbmNlXG4gICAgICAgICAgc3BsaXRzW2ldICs9IHNwbGl0c1tpICsgMV1cbiAgICAgICAgICBhcnIucHVzaChzcGxpdHNbaV0pXG4gICAgICAgICAgc3BsaXRzW2kgKyAxXSA9ICcnXG4gICAgICAgICAgaSArPSAxXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhcnIucHVzaChzcGxpdHNbaV0pXG4gIH1cbiAgcmV0dXJuIGFyclxufVxuZXhwb3J0IGRlZmF1bHQgbWVyZ2VQYXJlbnMiLCAiaW1wb3J0IHNpbXBsZVNwbGl0IGZyb20gJy4vMDEtc2ltcGxlLXNwbGl0LmpzJ1xuaW1wb3J0IHNpbXBsZU1lcmdlIGZyb20gJy4vMDItc2ltcGxlLW1lcmdlLmpzJ1xuaW1wb3J0IHNtYXJ0TWVyZ2UgZnJvbSAnLi8wMy1zbWFydC1tZXJnZS5qcydcbmltcG9ydCBxdW90ZU1lcmdlIGZyb20gJy4vMDQtcXVvdGUtbWVyZ2UuanMnXG5pbXBvcnQgcGFyZW5zTWVyZ2UgZnJvbSAnLi8wNS1wYXJlbnMtbWVyZ2UuanMnXG4vLyhSdWxlLWJhc2VkIHNlbnRlbmNlIGJvdW5kYXJ5IHNlZ21lbnRhdGlvbikgLSBjaG9wIGdpdmVuIHRleHQgaW50byBpdHMgcHJvcGVyIHNlbnRlbmNlcy5cbi8vIElnbm9yZSBwZXJpb2RzL3F1ZXN0aW9ucy9leGNsYW1hdGlvbnMgdXNlZCBpbiBhY3Jvbnltcy9hYmJyZXZpYXRpb25zL251bWJlcnMsIGV0Yy5cbi8vcmVncy1cbmNvbnN0IGhhc1NvbWV0aGluZyA9IC9cXFMvXG5jb25zdCBzdGFydFdoaXRlc3BhY2UgPSAvXlxccysvXG5cbmNvbnN0IHNwbGl0U2VudGVuY2VzID0gZnVuY3Rpb24gKHRleHQsIHdvcmxkKSB7XG4gIHRleHQgPSB0ZXh0IHx8ICcnXG4gIHRleHQgPSBTdHJpbmcodGV4dClcbiAgLy8gRW5zdXJlIGl0ICdzbWVsbHMgbGlrZScgYSBzZW50ZW5jZVxuICBpZiAoIXRleHQgfHwgdHlwZW9mIHRleHQgIT09ICdzdHJpbmcnIHx8IGhhc1NvbWV0aGluZy50ZXN0KHRleHQpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBbXVxuICB9XG4gIC8vIGNsZWFudXAgdW5pY29kZS1zcGFjZXNcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgnXFx4YTAnLCAnICcpXG4gIC8vIEZpcnN0IGRvIGEgZ3JlZWR5LXNwbGl0Li5cbiAgbGV0IHNwbGl0cyA9IHNpbXBsZVNwbGl0KHRleHQpXG4gIC8vIEZpbHRlci1vdXQgdGhlIGNyYXAgb25lc1xuICBsZXQgc2VudGVuY2VzID0gc2ltcGxlTWVyZ2Uoc3BsaXRzKVxuICAvL2RldGVjdGlvbiBvZiBub24tc2VudGVuY2UgY2h1bmtzOlxuICBzZW50ZW5jZXMgPSBzbWFydE1lcmdlKHNlbnRlbmNlcywgd29ybGQpXG4gIC8vIGFsbG93ICdoZSBzYWlkIFwibm8gc2lyLlwiIGFuZCBsZWZ0LidcbiAgc2VudGVuY2VzID0gcXVvdGVNZXJnZShzZW50ZW5jZXMpXG4gIC8vIGFsbG93ICdpIHRob3VnaHQgKG5vIHdheSEpIGFuZCBsZWZ0LidcbiAgc2VudGVuY2VzID0gcGFyZW5zTWVyZ2Uoc2VudGVuY2VzKVxuICAvL2lmIHdlIG5ldmVyIGdvdCBhIHNlbnRlbmNlLCByZXR1cm4gdGhlIGdpdmVuIHRleHRcbiAgaWYgKHNlbnRlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW3RleHRdXG4gIH1cbiAgLy9tb3ZlIHdoaXRlc3BhY2UgdG8gdGhlIGVuZHMgb2Ygc2VudGVuY2VzLCB3aGVuIHBvc3NpYmxlXG4gIC8vWydoZWxsbycsJyB3b3JsZCddIC0+IFsnaGVsbG8gJywnd29ybGQnXVxuICBmb3IgKGxldCBpID0gMTsgaSA8IHNlbnRlbmNlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGxldCB3cyA9IHNlbnRlbmNlc1tpXS5tYXRjaChzdGFydFdoaXRlc3BhY2UpXG4gICAgaWYgKHdzICE9PSBudWxsKSB7XG4gICAgICBzZW50ZW5jZXNbaSAtIDFdICs9IHdzWzBdXG4gICAgICBzZW50ZW5jZXNbaV0gPSBzZW50ZW5jZXNbaV0ucmVwbGFjZShzdGFydFdoaXRlc3BhY2UsICcnKVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2VudGVuY2VzXG59XG5leHBvcnQgZGVmYXVsdCBzcGxpdFNlbnRlbmNlc1xuIiwgImNvbnN0IGhhc0h5cGhlbiA9IGZ1bmN0aW9uIChzdHIsIG1vZGVsKSB7XG4gIGxldCBwYXJ0cyA9IHN0ci5zcGxpdCgvWy1cdTIwMTNcdTIwMTRdLylcbiAgaWYgKHBhcnRzLmxlbmd0aCA8PSAxKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgeyBwcmVmaXhlcywgc3VmZml4ZXMgfSA9IG1vZGVsLm9uZVxuXG4gIC8vIGwtdGhlYW5pbmUsIHgtcmF5XG4gIGlmIChwYXJ0c1swXS5sZW5ndGggPT09IDEgJiYgL1thLXpdL2kudGVzdChwYXJ0c1swXSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvL2RvbnQgc3BsaXQgJ3JlLWRvJ1xuICBpZiAocHJlZml4ZXMuaGFzT3duUHJvcGVydHkocGFydHNbMF0pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy9kb250IHNwbGl0ICdmbG93ZXItbGlrZSdcbiAgcGFydHNbMV0gPSBwYXJ0c1sxXS50cmltKCkucmVwbGFjZSgvWy4/IV0kLywgJycpXG4gIGlmIChzdWZmaXhlcy5oYXNPd25Qcm9wZXJ0eShwYXJ0c1sxXSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvL2xldHRlci1udW1iZXIgJ2F1Zy0yMCdcbiAgbGV0IHJlZyA9IC9eKFthLXpcXHUwMEMwLVxcdTAwRkZgXCInL10rKVstXHUyMDEzXHUyMDE0XShbYS16MC05XFx1MDBDMC1cXHUwMEZGXS4qKS9pXG4gIGlmIChyZWcudGVzdChzdHIpID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvL251bWJlci1sZXR0ZXIgJzIwLWF1ZydcbiAgbGV0IHJlZzIgPSAvXlsoJ1wiXT8oWzAtOV17MSw0fSlbLVx1MjAxM1x1MjAxNF0oW2EtelxcdTAwQzAtXFx1MDBGRmBcIicvLV0rWyknXCJdPyQpL2lcbiAgaWYgKHJlZzIudGVzdChzdHIpID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuY29uc3Qgc3BsaXRIeXBoZW5zID0gZnVuY3Rpb24gKHdvcmQpIHtcbiAgbGV0IGFyciA9IFtdXG4gIC8vc3VwcG9ydCBtdWx0aXBsZS1oeXBoZW5hdGVkLXRlcm1zXG4gIGNvbnN0IGh5cGhlbnMgPSB3b3JkLnNwbGl0KC9bLVx1MjAxM1x1MjAxNF0vKVxuICBsZXQgd2hpY2hEYXNoID0gJy0nXG4gIGxldCBmb3VuZCA9IHdvcmQubWF0Y2goL1stXHUyMDEzXHUyMDE0XS8pXG4gIGlmIChmb3VuZCAmJiBmb3VuZFswXSkge1xuICAgIHdoaWNoRGFzaCA9IGZvdW5kXG4gIH1cbiAgZm9yIChsZXQgbyA9IDA7IG8gPCBoeXBoZW5zLmxlbmd0aDsgbysrKSB7XG4gICAgaWYgKG8gPT09IGh5cGhlbnMubGVuZ3RoIC0gMSkge1xuICAgICAgYXJyLnB1c2goaHlwaGVuc1tvXSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyLnB1c2goaHlwaGVuc1tvXSArIHdoaWNoRGFzaClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFyclxufVxuXG5leHBvcnQgeyBzcGxpdEh5cGhlbnMsIGhhc0h5cGhlbiB9XG4iLCAiLy8gY29tYmluZSAnMiAtIDUnIGxpa2UgJzItNScgaXNcbi8vIDItNDogMiwgNFxuY29uc3QgY29tYmluZVJhbmdlcyA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgY29uc3Qgc3RhcnRSYW5nZSA9IC9eWzAtOV17MSw0fSg6WzAtOV1bMC05XSk/KFthLXpdezEsMn0pPyA/Wy1cdTIwMTNcdTIwMTRdID8kL1xuICBjb25zdCBlbmRSYW5nZSA9IC9eWzAtOV17MSw0fShbYS16XXsxLDJ9KT8gPyQvXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aCAtIDE7IGkgKz0gMSkge1xuICAgIGlmIChhcnJbaSArIDFdICYmIHN0YXJ0UmFuZ2UudGVzdChhcnJbaV0pICYmIGVuZFJhbmdlLnRlc3QoYXJyW2kgKyAxXSkpIHtcbiAgICAgIGFycltpXSA9IGFycltpXSArIGFycltpICsgMV1cbiAgICAgIGFycltpICsgMV0gPSBudWxsXG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJcbn1cbmV4cG9ydCBkZWZhdWx0IGNvbWJpbmVSYW5nZXNcbiIsICJjb25zdCBpc1NsYXNoID0gL1xccHtMfSA/XFwvID9cXHB7TH0rJC91XG5cbi8vICdoZSAvIHNoZScgc2hvdWxkIGJlIG9uZSB3b3JkXG5jb25zdCBjb21iaW5lU2xhc2hlcyA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcnIubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgaWYgKGlzU2xhc2gudGVzdChhcnJbaV0pKSB7XG4gICAgICBhcnJbaSAtIDFdICs9IGFycltpXSArIGFycltpICsgMV1cbiAgICAgIGFycltpXSA9IG51bGxcbiAgICAgIGFycltpICsgMV0gPSBudWxsXG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJcbn1cbmV4cG9ydCBkZWZhdWx0IGNvbWJpbmVTbGFzaGVzXG4iLCAiaW1wb3J0IHsgaGFzSHlwaGVuLCBzcGxpdEh5cGhlbnMgfSBmcm9tICcuLzAxLWh5cGhlbnMuanMnXG5pbXBvcnQgY29tYmluZVJhbmdlcyBmcm9tICcuLzAzLXJhbmdlcy5qcydcbmltcG9ydCBjb21iaW5lU2xhc2hlcyBmcm9tICcuLzAyLXNsYXNoZXMuanMnXG5cbmNvbnN0IHdvcmRsaWtlID0gL1xcUy9cbmNvbnN0IGlzQm91bmRhcnkgPSAvXlshPy5dKyQvXG5jb25zdCBuYWlpdmVTcGxpdCA9IC8oXFxTKykvXG5cbmxldCBub3RXb3JkID0gW1xuICAnLicsXG4gICc/JyxcbiAgJyEnLFxuICAnOicsXG4gICc7JyxcbiAgJy0nLFxuICAnXHUyMDEzJyxcbiAgJ1x1MjAxNCcsXG4gICctLScsXG4gICcuLi4nLFxuICAnKCcsXG4gICcpJyxcbiAgJ1snLFxuICAnXScsXG4gICdcIicsXG4gIFwiJ1wiLFxuICAnYCcsXG4gICdcdTAwQUInLFxuICAnXHUwMEJCJyxcbiAgJyonLFxuICAnXHUyMDIyJyxcbl1cbm5vdFdvcmQgPSBub3RXb3JkLnJlZHVjZSgoaCwgYykgPT4ge1xuICBoW2NdID0gdHJ1ZVxuICByZXR1cm4gaFxufSwge30pXG5cbmNvbnN0IGlzQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xufVxuXG4vL3R1cm4gYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBzdHJpbmdzIChuYWlpdmUgZm9yIG5vdywgbHVtcGVkIGxhdGVyKVxuY29uc3Qgc3BsaXRXb3JkcyA9IGZ1bmN0aW9uIChzdHIsIG1vZGVsKSB7XG4gIGxldCByZXN1bHQgPSBbXVxuICBsZXQgYXJyID0gW11cbiAgLy9zdGFydCB3aXRoIGEgbmFpaXZlIHNwbGl0XG4gIHN0ciA9IHN0ciB8fCAnJ1xuICBpZiAodHlwZW9mIHN0ciA9PT0gJ251bWJlcicpIHtcbiAgICBzdHIgPSBTdHJpbmcoc3RyKVxuICB9XG4gIGlmIChpc0FycmF5KHN0cikpIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cbiAgY29uc3Qgd29yZHMgPSBzdHIuc3BsaXQobmFpaXZlU3BsaXQpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAvL3NwbGl0ICdvbmUtdHdvJ1xuICAgIGlmIChoYXNIeXBoZW4od29yZHNbaV0sIG1vZGVsKSA9PT0gdHJ1ZSkge1xuICAgICAgYXJyID0gYXJyLmNvbmNhdChzcGxpdEh5cGhlbnMod29yZHNbaV0pKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgYXJyLnB1c2god29yZHNbaV0pXG4gIH1cbiAgLy9ncmVlZHkgbWVyZ2Ugd2hpdGVzcGFjZSthcnIgdG8gdGhlIHJpZ2h0XG4gIGxldCBjYXJyeSA9ICcnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHdvcmQgPSBhcnJbaV1cbiAgICAvL2lmIGl0J3MgbW9yZSB0aGFuIGEgd2hpdGVzcGFjZVxuICAgIGlmICh3b3JkbGlrZS50ZXN0KHdvcmQpID09PSB0cnVlICYmIG5vdFdvcmQuaGFzT3duUHJvcGVydHkod29yZCkgPT09IGZhbHNlICYmIGlzQm91bmRhcnkudGVzdCh3b3JkKSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vcHV0IHdoaXRlc3BhY2Ugb24gZW5kIG9mIHByZXZpb3VzIHRlcm0sIGlmIHBvc3NpYmxlXG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSArPSBjYXJyeVxuICAgICAgICByZXN1bHQucHVzaCh3b3JkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9vdGhlcndpc2UsIGJ1dCB3aGl0ZXNwYWNlIGJlZm9yZVxuICAgICAgICByZXN1bHQucHVzaChjYXJyeSArIHdvcmQpXG4gICAgICB9XG4gICAgICBjYXJyeSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhcnJ5ICs9IHdvcmRcbiAgICB9XG4gIH1cbiAgLy9oYW5kbGUgbGFzdCBvbmVcbiAgaWYgKGNhcnJ5KSB7XG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlc3VsdFswXSA9ICcnXG4gICAgfVxuICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gKz0gY2FycnkgLy9wdXQgaXQgb24gdGhlIGVuZFxuICB9XG4gIC8vIGNvbWJpbmUgJ29uZSAvIHR3bydcbiAgcmVzdWx0ID0gY29tYmluZVNsYXNoZXMocmVzdWx0KVxuICByZXN1bHQgPSBjb21iaW5lUmFuZ2VzKHJlc3VsdClcbiAgLy8gcmVtb3ZlIGVtcHR5IHJlc3VsdHNcbiAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihzID0+IHMpXG4gIHJldHVybiByZXN1bHRcbn1cbmV4cG9ydCBkZWZhdWx0IHNwbGl0V29yZHNcbiIsICIvL2FsbCBwdW5jdHVhdGlvbiBtYXJrcywgZnJvbSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QdW5jdHVhdGlvblxuXG4vL3dlIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHJ1bGVzIGZvciBzdGFydC9lbmQgLSBsaWtlICNoYXNodGFncy5cbmNvbnN0IGlzTGV0dGVyID0gL1xccHtMZXR0ZXJ9L3VcbmNvbnN0IGlzTnVtYmVyID0gL1tcXHB7TnVtYmVyfVxccHtDdXJyZW5jeV9TeW1ib2x9XS91XG5jb25zdCBoYXNBY3JvbnltID0gL15bYS16XVxcLihbYS16XVxcLikrL2lcbmNvbnN0IGNoaWxsaW4gPSAvW3NuXVsnXHUyMDE5XSQvXG5cbmNvbnN0IG5vcm1hbGl6ZVB1bmN0dWF0aW9uID0gZnVuY3Rpb24gKHN0ciwgbW9kZWwpIHtcbiAgLy8gcXVpY2sgbG9va3VwIGZvciBhbGxvd2VkIHByZS9wb3N0IHB1bmN0dWF0aW9uXG4gIGxldCB7IHByZVB1bmN0dWF0aW9uLCBwb3N0UHVuY3R1YXRpb24sIGVtb3RpY29ucyB9ID0gbW9kZWwub25lXG4gIGxldCBvcmlnaW5hbCA9IHN0clxuICBsZXQgcHJlID0gJydcbiAgbGV0IHBvc3QgPSAnJ1xuICBsZXQgY2hhcnMgPSBBcnJheS5mcm9tKHN0cilcblxuICAvLyBwdW5jdHVhdGlvbi1vbmx5IHdvcmRzLCBsaWtlICc8MydcbiAgaWYgKGVtb3RpY29ucy5oYXNPd25Qcm9wZXJ0eShzdHIudHJpbSgpKSkge1xuICAgIHJldHVybiB7IHN0cjogc3RyLnRyaW0oKSwgcHJlLCBwb3N0OiAnICcgfSAvL25vdCBncmVhdFxuICB9XG5cbiAgLy8gcG9wIGFueSBwdW5jdHVhdGlvbiBvZmYgb2YgdGhlIHN0YXJ0XG4gIGxldCBsZW4gPSBjaGFycy5sZW5ndGhcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgIGxldCBjID0gY2hhcnNbMF1cbiAgICAvLyBrZWVwIGFueSBkZWNsYXJlZCBjaGFyc1xuICAgIGlmIChwcmVQdW5jdHVhdGlvbltjXSA9PT0gdHJ1ZSkge1xuICAgICAgY29udGludWUvL2tlZXAgaXRcbiAgICB9XG4gICAgLy8ga2VlcCAnKycgb3IgJy0nIG9ubHkgYmVmb3JlIGEgbnVtYmVyXG4gICAgaWYgKChjID09PSAnKycgfHwgYyA9PT0gJy0nKSAmJiBpc051bWJlci50ZXN0KGNoYXJzWzFdKSkge1xuICAgICAgYnJlYWsvL2RvbmVcbiAgICB9XG4gICAgLy8gJzk3IC0geWVhciBzaG9ydC1mb3JtXG4gICAgaWYgKGMgPT09IFwiJ1wiICYmIGMubGVuZ3RoID09PSAzICYmIGlzTnVtYmVyLnRlc3QoY2hhcnNbMV0pKSB7XG4gICAgICBicmVhay8vZG9uZVxuICAgIH1cbiAgICAvLyBzdGFydCBvZiB3b3JkXG4gICAgaWYgKGlzTGV0dGVyLnRlc3QoYykgfHwgaXNOdW1iZXIudGVzdChjKSkge1xuICAgICAgYnJlYWsgLy9kb25lXG4gICAgfVxuICAgIC8vIHB1bmN0dWF0aW9uXG4gICAgcHJlICs9IGNoYXJzLnNoaWZ0KCkvL2tlZXAgZ29pbmdcbiAgfVxuXG4gIC8vIHBvcCBhbnkgcHVuY3R1YXRpb24gb2ZmIG9mIHRoZSBlbmRcbiAgbGVuID0gY2hhcnMubGVuZ3RoXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICBsZXQgYyA9IGNoYXJzW2NoYXJzLmxlbmd0aCAtIDFdXG4gICAgLy8ga2VlcCBhbnkgZGVjbGFyZWQgY2hhcnNcbiAgICBpZiAocG9zdFB1bmN0dWF0aW9uW2NdID09PSB0cnVlKSB7XG4gICAgICBjb250aW51ZS8va2VlcCBpdFxuICAgIH1cbiAgICAvLyBzdGFydCBvZiB3b3JkXG4gICAgaWYgKGlzTGV0dGVyLnRlc3QoYykgfHwgaXNOdW1iZXIudGVzdChjKSkge1xuICAgICAgYnJlYWsgLy9kb25lXG4gICAgfVxuICAgIC8vIEYuQi5JLlxuICAgIGlmIChjID09PSAnLicgJiYgaGFzQWNyb255bS50ZXN0KG9yaWdpbmFsKSA9PT0gdHJ1ZSkge1xuICAgICAgY29udGludWUvL2tlZXAgaXRcbiAgICB9XG4gICAgLy8gIGtlZXAgcy1hcG9zdHJvcGhlIC0gXCJmbGFuZGVycydcIiBvciBcImNoaWxsaW4nXCJcbiAgICBpZiAoYyA9PT0gXCInXCIgJiYgY2hpbGxpbi50ZXN0KG9yaWdpbmFsKSA9PT0gdHJ1ZSkge1xuICAgICAgY29udGludWUvL2tlZXAgaXRcbiAgICB9XG4gICAgLy8gcHVuY3R1YXRpb25cbiAgICBwb3N0ID0gY2hhcnMucG9wKCkgKyBwb3N0Ly9rZWVwIGdvaW5nXG4gIH1cbiAgc3RyID0gY2hhcnMuam9pbignJylcbiAgLy93ZSB3ZW50IHRvbyBmYXIuLlxuICBpZiAoc3RyID09PSAnJykge1xuICAgIC8vIGRvIGEgdmVyeSBtaWxkIHBhcnNlLCBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuXG4gICAgb3JpZ2luYWwgPSBvcmlnaW5hbC5yZXBsYWNlKC8gKiQvLCBhZnRlciA9PiB7XG4gICAgICBwb3N0ID0gYWZ0ZXIgfHwgJydcbiAgICAgIHJldHVybiAnJ1xuICAgIH0pXG4gICAgc3RyID0gb3JpZ2luYWxcbiAgICBwcmUgPSAnJ1xuICB9XG4gIHJldHVybiB7IHN0ciwgcHJlLCBwb3N0IH1cbn1cbmV4cG9ydCBkZWZhdWx0IG5vcm1hbGl6ZVB1bmN0dWF0aW9uXG4iLCAiaW1wb3J0IHRva2VuaXplIGZyb20gJy4vdG9rZW5pemUuanMnXG5cbmNvbnN0IHBhcnNlVGVybSA9ICh0eHQsIG1vZGVsKSA9PiB7XG4gIC8vIGNsZWFudXAgYW55IHB1bmN0dWF0aW9uIGFzIHdoaXRlc3BhY2VcbiAgbGV0IHsgc3RyLCBwcmUsIHBvc3QgfSA9IHRva2VuaXplKHR4dCwgbW9kZWwpXG4gIGNvbnN0IHBhcnNlZCA9IHtcbiAgICB0ZXh0OiBzdHIsXG4gICAgcHJlOiBwcmUsXG4gICAgcG9zdDogcG9zdCxcbiAgICB0YWdzOiBuZXcgU2V0KCksXG4gIH1cbiAgcmV0dXJuIHBhcnNlZFxufVxuZXhwb3J0IGRlZmF1bHQgcGFyc2VUZXJtXG4iLCAiLy8gJ0JqXHUwMEY2cmsnIHRvICdCam9yaycuXG5jb25zdCBraWxsVW5pY29kZSA9IGZ1bmN0aW9uIChzdHIsIHdvcmxkKSB7XG4gIGNvbnN0IHVuaWNvZGUgPSB3b3JsZC5tb2RlbC5vbmUudW5pY29kZSB8fCB7fVxuICBzdHIgPSBzdHIgfHwgJydcbiAgbGV0IGNoYXJzID0gc3RyLnNwbGl0KCcnKVxuICBjaGFycy5mb3JFYWNoKChzLCBpKSA9PiB7XG4gICAgaWYgKHVuaWNvZGVbc10pIHtcbiAgICAgIGNoYXJzW2ldID0gdW5pY29kZVtzXVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5leHBvcnQgZGVmYXVsdCBraWxsVW5pY29kZVxuIiwgIi8qKiBzb21lIGJhc2ljIG9wZXJhdGlvbnMgb24gYSBzdHJpbmcgdG8gcmVkdWNlIG5vaXNlICovXG5jb25zdCBjbGVhbiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgc3RyID0gc3RyIHx8ICcnXG4gIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpXG4gIHN0ciA9IHN0ci50cmltKClcbiAgbGV0IG9yaWdpbmFsID0gc3RyXG4gIC8vcHVuY3R1YXRpb25cbiAgc3RyID0gc3RyLnJlcGxhY2UoL1ssOy4hP10rJC8sICcnKVxuICAvL2NvZXJjZSBVbmljb2RlIGVsbGlwc2VzXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUyMDI2L2csICcuLi4nKVxuICAvL2VuLWRhc2hcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTIwMTMvZywgJy0nKVxuICAvL3N0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBncmFtbWF0aWNhbCBwdW5jdHVhdGlvblxuICBpZiAoL15bOjtdLy50ZXN0KHN0cikgPT09IGZhbHNlKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLnszLH0kL2csICcnKVxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9bXCIsLiE6Oz8pXSskL2csICcnKVxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eWydcIihdKy9nLCAnJylcbiAgfVxuICAvLyByZW1vdmUgemVyby13aWR0aCBjaGFyYWN0ZXJzXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXG4gIC8vZG8gdGhpcyBhZ2Fpbi4uXG4gIHN0ciA9IHN0ci50cmltKClcbiAgLy9vaCBzaHVja3MsXG4gIGlmIChzdHIgPT09ICcnKSB7XG4gICAgc3RyID0gb3JpZ2luYWxcbiAgfVxuICAvL25vLWNvbW1hcyBpbiBudW1iZXJzXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC8oWzAtOV0pLChbMC05XSkvZywgJyQxJDInKVxuICByZXR1cm4gc3RyXG59XG5leHBvcnQgZGVmYXVsdCBjbGVhblxuIiwgIi8vIGRvIGFjcm9ueW1zIG5lZWQgdG8gYmUgQVNDSUk/ICAuLi4ga2luZCBvZj9cbmNvbnN0IHBlcmlvZEFjcm9ueW0gPSAvKFtBLVpdXFwuKStbQS1aXT8sPyQvXG5jb25zdCBvbmVMZXR0ZXJBY3JvbnltID0gL15bQS1aXVxcLiw/JC9cbmNvbnN0IG5vUGVyaW9kQWNyb255bSA9IC9bQS1aXXsyLH0oJ3N8LCk/JC9cbmNvbnN0IGxvd2VyQ2FzZUFjcm9ueW0gPSAvKFthLXpdXFwuKStbYS16XVxcLj8kL1xuXG5jb25zdCBpc0Fjcm9ueW0gPSBmdW5jdGlvbiAoc3RyKSB7XG4gIC8vbGlrZSBOLkQuQVxuICBpZiAocGVyaW9kQWNyb255bS50ZXN0KHN0cikgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vbGlrZSBjLmUub1xuICBpZiAobG93ZXJDYXNlQWNyb255bS50ZXN0KHN0cikgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vbGlrZSAnRi4nXG4gIGlmIChvbmVMZXR0ZXJBY3JvbnltLnRlc3Qoc3RyKSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgLy9saWtlIE5EQVxuICBpZiAobm9QZXJpb2RBY3JvbnltLnRlc3Qoc3RyKSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmNvbnN0IGRvQWNyb255bSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgaWYgKGlzQWNyb255bShzdHIpKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLi9nLCAnJylcbiAgfVxuICByZXR1cm4gc3RyXG59XG5leHBvcnQgZGVmYXVsdCBkb0Fjcm9ueW1cbiIsICJpbXBvcnQgY2xlYW51cCBmcm9tICcuLzAxLWNsZWFudXAuanMnXG4vLyBpbXBvcnQgZG9Vbmljb2RlIGZyb20gJy4vMDItdW5pY29kZS5qcydcbmltcG9ydCBkb0Fjcm9ueW1zIGZyb20gJy4vMDItYWNyb255bXMuanMnXG5cbmNvbnN0IG5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh0ZXJtLCB3b3JsZCkge1xuICBjb25zdCBraWxsVW5pY29kZSA9IHdvcmxkLm1ldGhvZHMub25lLmtpbGxVbmljb2RlXG4gIC8vIGNvbnNvbGUubG9nKHdvcmxkLm1ldGhvZHMub25lKVxuICBsZXQgc3RyID0gdGVybS50ZXh0IHx8ICcnXG4gIHN0ciA9IGNsZWFudXAoc3RyKVxuICAvLyh2ZXJ5KSByb3VnaCBBU0NJSSB0cmFuc2xpdGVyYXRpb24gLSAgYmpcdTAxNEZyayAtPiBiam9ya1xuICBzdHIgPSBraWxsVW5pY29kZShzdHIsIHdvcmxkKVxuICBzdHIgPSBkb0Fjcm9ueW1zKHN0cilcbiAgdGVybS5ub3JtYWwgPSBzdHJcbn1cbmV4cG9ydCBkZWZhdWx0IG5vcm1hbGl6ZVxuIiwgImltcG9ydCBub3JtYWxpemUgZnJvbSAnLi4vY29tcHV0ZS9ub3JtYWwvaW5kZXguanMnXG5cbi8vIHR1cm4gYSBzdHJpbmcgaW5wdXQgaW50byBhICdkb2N1bWVudCcganNvbiBmb3JtYXRcbmNvbnN0IHBhcnNlID0gZnVuY3Rpb24gKGlucHV0LCB3b3JsZCkge1xuICBjb25zdCB7IG1ldGhvZHMsIG1vZGVsIH0gPSB3b3JsZFxuICBjb25zdCB7IHNwbGl0U2VudGVuY2VzLCBzcGxpdFRlcm1zLCBzcGxpdFdoaXRlc3BhY2UgfSA9IG1ldGhvZHMub25lLnRva2VuaXplXG4gIGlucHV0ID0gaW5wdXQgfHwgJydcbiAgLy8gc3BsaXQgaW50byBzZW50ZW5jZXNcbiAgbGV0IHNlbnRlbmNlcyA9IHNwbGl0U2VudGVuY2VzKGlucHV0LCB3b3JsZClcbiAgLy8gc3BsaXQgaW50byB3b3JkIG9iamVjdHNcbiAgaW5wdXQgPSBzZW50ZW5jZXMubWFwKCh0eHQpID0+IHtcbiAgICBsZXQgdGVybXMgPSBzcGxpdFRlcm1zKHR4dCwgbW9kZWwpXG4gICAgLy8gc3BsaXQgaW50byBbcHJlLXRleHQtcG9zdF1cbiAgICB0ZXJtcyA9IHRlcm1zLm1hcCh0ID0+IHNwbGl0V2hpdGVzcGFjZSh0LCBtb2RlbCkpXG4gICAgLy8gYWRkIG5vcm1hbGl6ZWQgdGVybSBmb3JtYXQsIGFsd2F5c1xuICAgIHRlcm1zLmZvckVhY2goKHQpID0+IHtcbiAgICAgIG5vcm1hbGl6ZSh0LCB3b3JsZClcbiAgICB9KVxuICAgIHJldHVybiB0ZXJtc1xuICB9KVxuICByZXR1cm4gaW5wdXRcbn1cbmV4cG9ydCBkZWZhdWx0IHBhcnNlIiwgImNvbnN0IGlzQWNyb255bSA9IC9bIC5dW0EtWl1cXC4/ICokL2kgLy9hc2NpIC0gJ24ucy5hLidcbmNvbnN0IGhhc0VsbGlwc2UgPSAvKD86XFx1MjAyNnxcXC57Mix9KSAqJC8gLy8gJy4uLidcbmNvbnN0IGhhc0xldHRlciA9IC9cXHB7TH0vdVxuY29uc3QgaGFzUGVyaW9kID0gL1xcLiAqJC9cbmNvbnN0IGxlYWRJbml0ID0gL15bQS1aXVxcLiAkLyAvLyBcIlcuIEtlbnNpbmd0b25cIlxuXG4vKiogZG9lcyB0aGlzIGxvb2sgbGlrZSBhIHNlbnRlbmNlPyAqL1xuY29uc3QgaXNTZW50ZW5jZSA9IGZ1bmN0aW9uIChzdHIsIGFiYnJldnMpIHtcbiAgLy8gbXVzdCBoYXZlIGEgbGV0dGVyXG4gIGlmIChoYXNMZXR0ZXIudGVzdChzdHIpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8vIGNoZWNrIGZvciAnRi5CLkkuJ1xuICBpZiAoaXNBY3JvbnltLnRlc3Qoc3RyKSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8vIGNoZWNrIGZvciBsZWFkaW5nIGluaXRpYWwgLSBcIlcuIEtlbnNpbmd0b25cIlxuICBpZiAoc3RyLmxlbmd0aCA9PT0gMyAmJiBsZWFkSW5pdC50ZXN0KHN0cikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvL2NoZWNrIGZvciAnLi4uJ1xuICBpZiAoaGFzRWxsaXBzZS50ZXN0KHN0cikgPT09IHRydWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBsZXQgdHh0ID0gc3RyLnJlcGxhY2UoL1suIT9cXHUyMDNEXFx1MkUxOFxcdTIwM0NcXHUyMDQ3LVxcdTIwNDldICokLywgJycpXG4gIGxldCB3b3JkcyA9IHR4dC5zcGxpdCgnICcpXG4gIGxldCBsYXN0V29yZCA9IHdvcmRzW3dvcmRzLmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKClcbiAgLy8gY2hlY2sgZm9yICdNci4nIChhbmQgbm90IG1yPylcbiAgaWYgKGFiYnJldnMuaGFzT3duUHJvcGVydHkobGFzdFdvcmQpID09PSB0cnVlICYmIGhhc1BlcmlvZC50ZXN0KHN0cikgPT09IHRydWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyAvL2NoZWNrIGZvciBqZW9wYXJkeSFcbiAgLy8gaWYgKGJsYWNrbGlzdC5oYXNPd25Qcm9wZXJ0eShsYXN0V29yZCkpIHtcbiAgLy8gICByZXR1cm4gZmFsc2VcbiAgLy8gfVxuICByZXR1cm4gdHJ1ZVxufVxuZXhwb3J0IGRlZmF1bHQgaXNTZW50ZW5jZVxuIiwgImltcG9ydCBzcGxpdFNlbnRlbmNlcyBmcm9tICcuLzAxLXNlbnRlbmNlcy9pbmRleC5qcydcbmltcG9ydCBzcGxpdFRlcm1zIGZyb20gJy4vMDItdGVybXMvaW5kZXguanMnXG5pbXBvcnQgc3BsaXRXaGl0ZXNwYWNlIGZyb20gJy4vMDMtd2hpdGVzcGFjZS9pbmRleC5qcydcbmltcG9ydCBraWxsVW5pY29kZSBmcm9tICcuL3VuaWNvZGUuanMnXG5pbXBvcnQgZnJvbVN0cmluZyBmcm9tICcuL3BhcnNlLmpzJ1xuaW1wb3J0IGlzU2VudGVuY2UgZnJvbSAnLi8wMS1zZW50ZW5jZXMvaXMtc2VudGVuY2UuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25lOiB7XG4gICAga2lsbFVuaWNvZGUsXG4gICAgdG9rZW5pemU6IHtcbiAgICAgIHNwbGl0U2VudGVuY2VzLFxuICAgICAgaXNTZW50ZW5jZSxcbiAgICAgIHNwbGl0VGVybXMsXG4gICAgICBzcGxpdFdoaXRlc3BhY2UsXG4gICAgICBmcm9tU3RyaW5nLFxuICAgIH0sXG4gIH0sXG59XG4iLCAiY29uc3QgYWxpYXNlcyA9IHtcbiAgJyYnOiAnYW5kJyxcbiAgJ0AnOiAnYXQnLFxuICAnJSc6ICdwZXJjZW50JyxcbiAgJ3Bseic6ICdwbGVhc2UnLFxuICAnYmVpbic6ICdiZWluZycsXG59XG5leHBvcnQgZGVmYXVsdCBhbGlhc2VzXG4iLCAiZXhwb3J0IGRlZmF1bHQgW1xuICAnYXBwcm94JyxcbiAgJ2FwdCcsXG4gICdiYycsXG4gICdjeW4nLFxuICAnZWcnLFxuICAnZXNwJyxcbiAgJ2VzdCcsXG4gICdldGMnLFxuICAnZXgnLFxuICAnZXhwJyxcbiAgJ3Byb2InLCAvL3Byb2JhYmx5XG4gICdwcm9uJywgLy8gUHJvbnVuY2lhdGlvblxuICAnZ2FsJywgLy9nYWxsb25cbiAgJ21pbicsXG4gICdwc2V1ZCcsXG4gICdmaWcnLCAvL2ZpZ3VyZVxuICAnamQnLFxuICAnbGF0JywgLy9sYXRpdHVkZVxuICAnbG5nJywgLy9sb25naXR1ZGVcbiAgJ3ZvbCcsIC8vdm9sdW1lXG4gICdmbScsIC8vbm90IGFtXG4gICdkZWYnLCAvL2RlZmluaXRpb25cbiAgJ21pc2MnLFxuICAncGx6JywgLy9wbGVhc2VcbiAgJ2VhJywgLy9lYWNoXG4gICdwcycsXG4gICdzZWMnLCAvL3NlY29uZFxuICAncHQnLFxuICAncHJlZicsIC8vcHJlZmFjZVxuICAncGwnLCAvL3BsdXJhbFxuICAncHAnLCAvL3BhZ2VzXG4gICdxdCcsIC8vcXVhcnRlclxuICAnZnInLCAvL2ZyZW5jaFxuICAnc3EnLFxuICAnbmVlJywgLy9naXZlbiBuYW1lIGF0IGJpcnRoXG4gICdzcycsIC8vc2hpcCwgb3Igc2VjdGlvbnNcbiAgJ3RlbCcsXG4gICd0ZW1wJyxcbiAgJ3ZldCcsXG4gICd2ZXInLCAvL3ZlcnNpb25cbiAgJ2ZlbScsIC8vZmVtaW5pbmVcbiAgJ21hc2MnLCAvL21hc2N1bGluZVxuICAnZW5nJywgLy9lbmdpbmVlcmluZy9lbmdsaXNoXG4gICdhZGonLCAvL2FkamVjdGl2ZVxuICAndmInLCAvL3ZlcmJcbiAgJ3JiJywgLy9hZHZlcmJcbiAgJ2luZicsIC8vaW5maW5pdGl2ZVxuICAnc2l0dScsIC8vIGluIHNpdHVcbiAgJ3Zpdm8nLFxuICAndml0cm8nLFxuICAnd3InLCAvL3dvcmxkIHJlY29yZFxuXVxuIiwgImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2FkaicsXG4gICdhZG0nLFxuICAnYWR2JyxcbiAgJ2Fzc3QnLFxuICAnYXR0eScsXG4gICdibGRnJyxcbiAgJ2JyaWcnLFxuICAnY2FwdCcsXG4gICdjbWRyJyxcbiAgJ2NvbWRyJyxcbiAgJ2NwbCcsXG4gICdkZXQnLFxuICAnZHInLFxuICAnZXNxJyxcbiAgJ2dlbicsXG4gICdnb3YnLFxuICAnaG9uJyxcbiAgJ2pyJyxcbiAgJ2xsYicsXG4gICdsdCcsXG4gICdtYWonLFxuICAnbWVzc3JzJyxcbiAgJ21sbGUnLFxuICAnbW1lJyxcbiAgJ21yJyxcbiAgJ21ycycsXG4gICdtcycsXG4gICdtc3RyJyxcbiAgJ3BoZCcsXG4gICdwcm9mJyxcbiAgJ3B2dCcsXG4gICdyZXAnLFxuICAncmVwcycsXG4gICdyZXMnLFxuICAncmV2JyxcbiAgJ3NlbicsXG4gICdzZW5zJyxcbiAgJ3NmYycsXG4gICdzZ3QnLFxuICAnc2lyJyxcbiAgJ3NyJyxcbiAgJ3N1cHQnLFxuICAnc3VyZydcbiAgLy9taXNzXG4gIC8vbWlzc2VzXG5dXG4iLCAiZXhwb3J0IGRlZmF1bHQgWydqYW4nLCAnZmViJywgJ21hcicsICdhcHInLCAnanVuJywgJ2p1bCcsICdhdWcnLCAnc2VwJywgJ3NlcHQnLCAnb2N0JywgJ25vdicsICdkZWMnXVxuIiwgImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2FkJyxcbiAgJ2FsJyxcbiAgJ2FyYycsXG4gICdiYScsXG4gICdibCcsXG4gICdjYScsXG4gICdjY2EnLFxuICAnY29sJyxcbiAgJ2NvcnAnLFxuICAnZnQnLFxuICAnZnknLFxuICAnaWUnLFxuICAnbGl0JyxcbiAgJ21hJyxcbiAgJ21kJyxcbiAgJ3BkJyxcbiAgJ3RjZScsXG5dXG4iLCAiZXhwb3J0IGRlZmF1bHQgWydkZXB0JywgJ3VuaXYnLCAnYXNzbicsICdicm9zJywgJ2luYycsICdsdGQnLCAnY28nXVxuIiwgImV4cG9ydCBkZWZhdWx0IFtcbiAgJ3JkJyxcbiAgJ3N0JyxcbiAgJ2Rpc3QnLFxuICAnbXQnLFxuICAnYXZlJyxcbiAgJ2JsdmQnLFxuICAnY2wnLFxuICAvLyAnY3QnLFxuICAnY3JlcycsXG4gICdod3knLFxuICAvL3N0YXRlc1xuICAnYXJpeicsXG4gICdjYWwnLFxuICAnY2FsaWYnLFxuICAnY29sbycsXG4gICdjb25uJyxcbiAgJ2ZsYScsXG4gICdmbCcsXG4gICdnYScsXG4gICdpZGEnLFxuICAnaWEnLFxuICAna2FuJyxcbiAgJ2thbnMnLFxuXG4gICdtaW5uJyxcbiAgJ25lYicsXG4gICduZWJyJyxcbiAgJ29rbGEnLFxuICAncGVubmEnLFxuICAncGVubicsXG4gICdwYScsXG4gICdkYWsnLFxuICAndGVubicsXG4gICd0ZXgnLFxuICAndXQnLFxuICAndnQnLFxuICAndmEnLFxuICAnd2lzJyxcbiAgJ3dpc2MnLFxuICAnd3knLFxuICAnd3lvJyxcbiAgJ3VzYWZhJyxcbiAgJ2FsdGEnLFxuICAnb250JyxcbiAgJ3F1ZScsXG4gICdzYXNrJyxcbl1cbiIsICIvLyB1bml0cyB0aGF0IGFyZSBhYmJyZXZpYXRpb25zIHRvb1xuZXhwb3J0IGRlZmF1bHQgW1xuICAnZGwnLFxuICAnbWwnLFxuICAnZ2FsJyxcbiAgLy8gJ2Z0JywgLy9hbWJpZ3VvdXNcbiAgJ3F0JyxcbiAgJ3B0JyxcbiAgJ3RibCcsXG4gICd0c3AnLFxuICAndGJzcCcsXG4gICdrbScsXG4gICdkbScsIC8vZGVjaW1ldGVyXG4gICdjbScsXG4gICdtbScsXG4gICdtaScsXG4gICd0ZCcsXG4gICdocicsIC8vaG91clxuICAnaHJzJywgLy9ob3VyXG4gICdrZycsXG4gICdoZycsXG4gICdkZycsIC8vZGVjaWdyYW1cbiAgJ2NnJywgLy9jZW50aWdyYW1cbiAgJ21nJywgLy9taWxsaWdyYW1cbiAgJ1x1MDBCNWcnLCAvL21pY3JvZ3JhbVxuICAnbGInLCAvL3BvdW5kXG4gICdveicsIC8vb3VuY2VcbiAgJ3NxIGZ0JyxcbiAgJ2h6JywgLy9oZXJ0elxuICAnbXBzJywgLy9tZXRlcnMgcGVyIHNlY29uZFxuICAnbXBoJyxcbiAgJ2ttcGgnLCAvL2tpbG9tZXRlcnMgcGVyIGhvdXJcbiAgJ2tiJywgLy9raWxvYnl0ZVxuICAnbWInLCAvL21lZ2FieXRlXG4gIC8vICdnYicsIC8vYW1iaWdcbiAgJ3RiJywgLy90ZXJhYnl0ZVxuICAnbHgnLCAvL2x1eFxuICAnbG0nLCAvL2x1bWVuXG4gIC8vICdwYScsIC8vYW1iaWdcbiAgJ2ZsIG96JywgLy9cbiAgJ3liJyxcbl1cbiIsICJpbXBvcnQgbWlzYyBmcm9tICcuL2FiYnJldmlhdGlvbnMvbWlzYy5qcydcbmltcG9ydCBob25vcmlmaWNzIGZyb20gJy4vYWJicmV2aWF0aW9ucy9ob25vcmlmaWNzLmpzJ1xuaW1wb3J0IG1vbnRocyBmcm9tICcuL2FiYnJldmlhdGlvbnMvbW9udGhzLmpzJ1xuaW1wb3J0IG5vdW5zIGZyb20gJy4vYWJicmV2aWF0aW9ucy9ub3Vucy5qcydcbmltcG9ydCBvcmdhbml6YXRpb25zIGZyb20gJy4vYWJicmV2aWF0aW9ucy9vcmdhbml6YXRpb25zLmpzJ1xuaW1wb3J0IHBsYWNlcyBmcm9tICcuL2FiYnJldmlhdGlvbnMvcGxhY2VzLmpzJ1xuaW1wb3J0IHVuaXRzIGZyb20gJy4vYWJicmV2aWF0aW9ucy91bml0cy5qcydcblxuLy8gYWRkIG91ciBhYmJyZXZpYXRpb24gbGlzdCB0byBvdXIgbGV4aWNvblxubGV0IGxpc3QgPSBbXG4gIFttaXNjXSxcbiAgW3VuaXRzLCAnVW5pdCddLFxuICBbbm91bnMsICdOb3VuJ10sXG4gIFtob25vcmlmaWNzLCAnSG9ub3JpZmljJ10sXG4gIFttb250aHMsICdNb250aCddLFxuICBbb3JnYW5pemF0aW9ucywgJ09yZ2FuaXphdGlvbiddLFxuICBbcGxhY2VzLCAnUGxhY2UnXSxcbl1cbi8vIGNyZWF0ZSBrZXktdmFsIGZvciBzZW50ZW5jZS10b2tlbml6ZXJcbmxldCBhYmJyZXZpYXRpb25zID0ge31cbi8vIGFkZCB0aGVtIHRvIGEgZnV0dXJlIGxleGljb25cbmxldCBsZXhpY29uID0ge31cblxubGlzdC5mb3JFYWNoKGEgPT4ge1xuICBhWzBdLmZvckVhY2godyA9PiB7XG4gICAgLy8gc2VudGVuY2UgYWJicmV2c1xuICAgIGFiYnJldmlhdGlvbnNbd10gPSB0cnVlXG4gICAgLy8gZnV0dXJlLWxleGljb25cbiAgICBsZXhpY29uW3ddID0gJ0FiYnJldmlhdGlvbidcbiAgICBpZiAoYVsxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXhpY29uW3ddID0gW2xleGljb25bd10sIGFbMV1dXG4gICAgfVxuICB9KVxufSlcblxuZXhwb3J0IHsgbGV4aWNvbiwgYWJicmV2aWF0aW9ucyB9XG4iLCAiLy8gZGFzaGVkIHByZWZpeGVzIHRoYXQgYXJlIG5vdCBpbmRlcGVuZGVudCB3b3Jkc1xuLy8gICdtaWQtY2VudHVyeScsICdwcmUtaGlzdG9yeSdcbmV4cG9ydCBkZWZhdWx0IFtcbiAgJ2FudGknLFxuICAnYmknLFxuICAnY28nLFxuICAnY29udHJhJyxcbiAgJ2RlJyxcbiAgJ2V4dHJhJyxcbiAgJ2luZnJhJyxcbiAgJ2ludGVyJyxcbiAgJ2ludHJhJyxcbiAgJ21hY3JvJyxcbiAgJ21pY3JvJyxcbiAgJ21pcycsXG4gICdtb25vJyxcbiAgJ211bHRpJyxcbiAgJ3BlcmknLFxuICAncHJlJyxcbiAgJ3BybycsXG4gICdwcm90bycsXG4gICdwc2V1ZG8nLFxuICAncmUnLFxuICAnc3ViJyxcbiAgJ3N1cHJhJyxcbiAgJ3RyYW5zJyxcbiAgJ3RyaScsXG4gICd1bicsXG4gICdvdXQnLCAvL291dC1saXZlZFxuICAnZXgnLC8vZXgtd2lmZVxuXG4gIC8vICdjb3VudGVyJyxcbiAgLy8gJ21pZCcsXG4gIC8vICdvdXQnLFxuICAvLyAnbm9uJyxcbiAgLy8gJ292ZXInLFxuICAvLyAncG9zdCcsXG4gIC8vICdzZW1pJyxcbiAgLy8gJ3N1cGVyJywgLy8nc3VwZXItY29vbCdcbiAgLy8gJ3VsdHJhJywgLy8ndWx0YS1jb29sJ1xuICAvLyAndW5kZXInLFxuICAvLyAnd2hvbGUnLFxuXS5yZWR1Y2UoKGgsIHN0cikgPT4ge1xuICBoW3N0cl0gPSB0cnVlXG4gIHJldHVybiBoXG59LCB7fSkiLCAiLy8gZGFzaGVkIHN1ZmZpeGVzIHRoYXQgYXJlIG5vdCBpbmRlcGVuZGVudCB3b3Jkc1xuLy8gICdmbG93ZXItbGlrZScsICdwcmVzaWRlbnQtZWxlY3QnXG5leHBvcnQgZGVmYXVsdCB7XG4gICdsaWtlJzogdHJ1ZSxcbiAgJ2lzaCc6IHRydWUsXG4gICdsZXNzJzogdHJ1ZSxcbiAgJ2FibGUnOiB0cnVlLFxuICAnZWxlY3QnOiB0cnVlLFxuICAndHlwZSc6IHRydWUsXG4gICdkZXNpZ25hdGUnOiB0cnVlLFxuICAvLyAnZm9sZCc6dHJ1ZSxcbn0iLCAiLy9hIGh1Z2VseS1pZ25vcmFudCwgYW5kIHdpZGVseSBzdWJqZWN0aXZlIHRyYW5zbGl0ZXJhdGlvbiBvZiBsYXRpbiwgY3J5bGxpYywgZ3JlZWsgdW5pY29kZSBjaGFyYWN0ZXJzIHRvIGVuZ2xpc2ggYXNjaWkuXG4vL2FwcHJveGltYXRlIHZpc3VhbCAobm90IHNlbWFudGljIG9yIHBob25ldGljKSByZWxhdGlvbnNoaXAgYmV0d2VlbiB1bmljb2RlIGFuZCBhc2NpaSBjaGFyYWN0ZXJzXG4vL2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9Vbmljb2RlX2NoYXJhY3RlcnNcbi8vaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXQvY2NjP2tleT0wQWg0Nno3NTVqN2NWZEZSRE0xQTJZVnB3YTFaWVdscEpNMnBRWjAwM00wRVxubGV0IGNvbXBhY3QgPSB7XG4gICchJzogJ1x1MDBBMScsXG4gICc/JzogJ1x1MDBCRlx1MDI0MScsXG4gICdcIic6ICdcdTIwMUNcdTIwMURcIlx1Mjc1RFx1Mjc1RScsXG4gIFwiJ1wiOiAnXHUyMDE4XHUyMDFCXHUyNzVCXHUyNzVDXHUyMDE5JyxcbiAgJy0nOiAnXHUyMDE0XHUyMDEzJyxcbiAgYTogJ1x1MDBBQVx1MDBDMFx1MDBDMVx1MDBDMlx1MDBDM1x1MDBDNFx1MDBDNVx1MDBFMFx1MDBFMVx1MDBFMlx1MDBFM1x1MDBFNFx1MDBFNVx1MDEwMFx1MDEwMVx1MDEwMlx1MDEwM1x1MDEwNFx1MDEwNVx1MDFDRFx1MDFDRVx1MDFERVx1MDFERlx1MDFFMFx1MDFFMVx1MDFGQVx1MDFGQlx1MDIwMFx1MDIwMVx1MDIwMlx1MDIwM1x1MDIyNlx1MDIyN1x1MDIzQVx1MDM4Nlx1MDM5MVx1MDM5NFx1MDM5Qlx1MDNBQ1x1MDNCMVx1MDNCQlx1MDQxMFx1MDQzMFx1MDQ2Nlx1MDQ2N1x1MDREMFx1MDREMVx1MDREMlx1MDREM1x1MDE5Qlx1MDBFNicsXG4gIGI6ICdcdTAwREZcdTAwRkVcdTAxODBcdTAxODFcdTAxODJcdTAxODNcdTAxODRcdTAxODVcdTAyNDNcdTAzOTJcdTAzQjJcdTAzRDBcdTAzRTZcdTA0MTFcdTA0MTJcdTA0MkFcdTA0MkNcdTA0MzJcdTA0NEFcdTA0NENcdTA0NjJcdTA0NjNcdTA0OENcdTA0OEQnLFxuICBjOiAnXHUwMEEyXHUwMEE5XHUwMEM3XHUwMEU3XHUwMTA2XHUwMTA3XHUwMTA4XHUwMTA5XHUwMTBBXHUwMTBCXHUwMTBDXHUwMTBEXHUwMTg2XHUwMTg3XHUwMTg4XHUwMjNCXHUwMjNDXHUwMzdCXHUwMzdDXHUwM0YyXHUwM0Y5XHUwM0ZEXHUwM0ZFXHUwNDIxXHUwNDQxXHUwNDU0XHUwNDgwXHUwNDgxXHUwNEFBXHUwNEFCJyxcbiAgZDogJ1x1MDBEMFx1MDEwRVx1MDEwRlx1MDExMFx1MDExMVx1MDE4OVx1MDE4QVx1MDIyMVx1MDE4Qlx1MDE4QycsXG4gIGU6ICdcdTAwQzhcdTAwQzlcdTAwQ0FcdTAwQ0JcdTAwRThcdTAwRTlcdTAwRUFcdTAwRUJcdTAxMTJcdTAxMTNcdTAxMTRcdTAxMTVcdTAxMTZcdTAxMTdcdTAxMThcdTAxMTlcdTAxMUFcdTAxMUJcdTAxOTBcdTAyMDRcdTAyMDVcdTAyMDZcdTAyMDdcdTAyMjhcdTAyMjlcdTAyNDZcdTAyNDdcdTAzODhcdTAzOTVcdTAzOUVcdTAzQTNcdTAzQURcdTAzQjVcdTAzQkVcdTAzRjVcdTA0MDBcdTA0MDFcdTA0MTVcdTA0MzVcdTA0NTBcdTA0NTFcdTA0QkNcdTA0QkRcdTA0QkVcdTA0QkZcdTA0RDZcdTA0RDdcdTFFQzUnLFxuICBmOiAnXHUwMTkxXHUwMTkyXHUwM0RDXHUwM0REXHUwNEZBXHUwNEZCXHUwNDkyXHUwNDkzXHUwMTdGJyxcbiAgZzogJ1x1MDExQ1x1MDExRFx1MDExRVx1MDExRlx1MDEyMFx1MDEyMVx1MDEyMlx1MDEyM1x1MDE5M1x1MDFFNFx1MDFFNVx1MDFFNlx1MDFFN1x1MDFGNFx1MDFGNScsXG4gIGg6ICdcdTAxMjRcdTAxMjVcdTAxMjZcdTAxMjdcdTAxOTVcdTAxRjZcdTAyMUVcdTAyMUZcdTAzODlcdTAzOTdcdTA0MDJcdTA0MEFcdTA0MEJcdTA0MURcdTA0M0RcdTA0NTJcdTA0NUJcdTA0QTJcdTA0QTNcdTA0QTRcdTA0QTVcdTA0QkFcdTA0QkJcdTA0QzlcdTA0Q0EnLFxuICBJOiAnXHUwMENDXHUwMENEXHUwMENFXHUwMENGJyxcbiAgaTogJ1x1MDBFQ1x1MDBFRFx1MDBFRVx1MDBFRlx1MDEyOFx1MDEyOVx1MDEyQVx1MDEyQlx1MDEyQ1x1MDEyRFx1MDEyRVx1MDEyRlx1MDEzMFx1MDEzMVx1MDE5Nlx1MDE5N1x1MDIwOFx1MDIwOVx1MDIwQVx1MDIwQlx1MDM4QVx1MDM5MFx1MDNBQVx1MDNBRlx1MDNCOVx1MDNDQVx1MDQwNlx1MDQwN1x1MDQ1Nlx1MDQ1N2lcdTAzMDcnLFxuICBqOiAnXHUwMTM0XHUwMTM1XHUwMUYwXHUwMjM3XHUwMjQ4XHUwMjQ5XHUwM0YzXHUwNDA4XHUwNDU4JyxcbiAgazogJ1x1MDEzNlx1MDEzN1x1MDEzOFx1MDE5OFx1MDE5OVx1MDFFOFx1MDFFOVx1MDM5QVx1MDNCQVx1MDQwQ1x1MDQxNlx1MDQxQVx1MDQzNlx1MDQzQVx1MDQ1Q1x1MDQ5QVx1MDQ5Qlx1MDQ5Q1x1MDQ5RFx1MDQ5RVx1MDQ5Rlx1MDRBMFx1MDRBMScsXG4gIGw6ICdcdTAxMzlcdTAxM0FcdTAxM0JcdTAxM0NcdTAxM0RcdTAxM0VcdTAxM0ZcdTAxNDBcdTAxNDFcdTAxNDJcdTAxOUFcdTAxQUFcdTAxQzBcdTAxQ0ZcdTAxRDBcdTAyMzRcdTAyM0RcdTAzOTlcdTA0QzBcdTA0Q0YnLFxuICBtOiAnXHUwMzlDXHUwM0ZBXHUwM0ZCXHUwNDFDXHUwNDNDXHUwNENEXHUwNENFJyxcbiAgbjogJ1x1MDBEMVx1MDBGMVx1MDE0M1x1MDE0NFx1MDE0NVx1MDE0Nlx1MDE0N1x1MDE0OFx1MDE0OVx1MDE0QVx1MDE0Qlx1MDE5RFx1MDE5RVx1MDFGOFx1MDFGOVx1MDIyMFx1MDIzNVx1MDM5RFx1MDNBMFx1MDNBRVx1MDNCN1x1MDNERVx1MDQwRFx1MDQxOFx1MDQxOVx1MDQxQlx1MDQxRlx1MDQzOFx1MDQzOVx1MDQzQlx1MDQzRlx1MDQ1RFx1MDQ4QVx1MDQ4Qlx1MDRDNVx1MDRDNlx1MDRFMlx1MDRFM1x1MDRFNFx1MDRFNVx1MDNDMCcsXG4gIG86ICdcdTAwRDJcdTAwRDNcdTAwRDRcdTAwRDVcdTAwRDZcdTAwRDhcdTAwRjBcdTAwRjJcdTAwRjNcdTAwRjRcdTAwRjVcdTAwRjZcdTAwRjhcdTAxNENcdTAxNERcdTAxNEVcdTAxNEZcdTAxNTBcdTAxNTFcdTAxOUZcdTAxQTBcdTAxQTFcdTAxRDFcdTAxRDJcdTAxRUFcdTAxRUJcdTAxRUNcdTAxRURcdTAxRkVcdTAxRkZcdTAyMENcdTAyMERcdTAyMEVcdTAyMEZcdTAyMkFcdTAyMkJcdTAyMkNcdTAyMkRcdTAyMkVcdTAyMkZcdTAyMzBcdTAyMzFcdTAzOENcdTAzOThcdTAzOUZcdTAzQjhcdTAzQkZcdTAzQzNcdTAzQ0NcdTAzRDVcdTAzRDhcdTAzRDlcdTAzRUNcdTAzRjRcdTA0MUVcdTA0MjRcdTA0M0VcdTA0NzJcdTA0NzNcdTA0RTZcdTA0RTdcdTA0RThcdTA0RTlcdTA0RUFcdTA0RUInLFxuICBwOiAnXHUwMUE0XHUwM0ExXHUwM0MxXHUwM0Y3XHUwM0Y4XHUwM0ZDXHUwNDIwXHUwNDQwXHUwNDhFXHUwNDhGXHUwMERFJyxcbiAgcTogJ1x1MDI0QVx1MDI0QicsXG4gIHI6ICdcdTAxNTRcdTAxNTVcdTAxNTZcdTAxNTdcdTAxNThcdTAxNTlcdTAxQTZcdTAyMTBcdTAyMTFcdTAyMTJcdTAyMTNcdTAyNENcdTAyNERcdTA0MDNcdTA0MTNcdTA0MkZcdTA0MzNcdTA0NEZcdTA0NTNcdTA0OTBcdTA0OTEnLFxuICBzOiAnXHUwMTVBXHUwMTVCXHUwMTVDXHUwMTVEXHUwMTVFXHUwMTVGXHUwMTYwXHUwMTYxXHUwMUE3XHUwMUE4XHUwMjE4XHUwMjE5XHUwMjNGXHUwNDA1XHUwNDU1JyxcbiAgdDogJ1x1MDE2Mlx1MDE2M1x1MDE2NFx1MDE2NVx1MDE2Nlx1MDE2N1x1MDFBQlx1MDFBQ1x1MDFBRFx1MDFBRVx1MDIxQVx1MDIxQlx1MDIzNlx1MDIzRVx1MDM5M1x1MDNBNFx1MDNDNFx1MDNFRVx1MDQyMlx1MDQ0MicsXG4gIHU6ICdcdTAwRDlcdTAwREFcdTAwREJcdTAwRENcdTAwRjlcdTAwRkFcdTAwRkJcdTAwRkNcdTAxNjhcdTAxNjlcdTAxNkFcdTAxNkJcdTAxNkNcdTAxNkRcdTAxNkVcdTAxNkZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNcdTAxQUZcdTAxQjBcdTAxQjFcdTAxQjJcdTAxRDNcdTAxRDRcdTAxRDVcdTAxRDZcdTAxRDdcdTAxRDhcdTAxRDlcdTAxREFcdTAxREJcdTAxRENcdTAyMTRcdTAyMTVcdTAyMTZcdTAyMTdcdTAyNDRcdTAzQjBcdTAzQzVcdTAzQ0JcdTAzQ0QnLFxuICB2OiAnXHUwM0JEXHUwNDc0XHUwNDc1XHUwNDc2XHUwNDc3JyxcbiAgdzogJ1x1MDE3NFx1MDE3NVx1MDE5Q1x1MDNDOVx1MDNDRVx1MDNENlx1MDNFMlx1MDNFM1x1MDQyOFx1MDQyOVx1MDQ0OFx1MDQ0OVx1MDQ2MVx1MDQ3RicsXG4gIHg6ICdcdTAwRDdcdTAzQTdcdTAzQzdcdTAzRDdcdTAzRjBcdTA0MjVcdTA0NDVcdTA0QjJcdTA0QjNcdTA0RkNcdTA0RkRcdTA0RkVcdTA0RkYnLFxuICB5OiAnXHUwMEREXHUwMEZEXHUwMEZGXHUwMTc2XHUwMTc3XHUwMTc4XHUwMUIzXHUwMUI0XHUwMjMyXHUwMjMzXHUwMjRFXHUwMjRGXHUwMzhFXHUwM0E1XHUwM0FCXHUwM0IzXHUwM0M4XHUwM0QyXHUwM0QzXHUwM0Q0XHUwNDBFXHUwNDIzXHUwNDQzXHUwNDQ3XHUwNDVFXHUwNDcwXHUwNDcxXHUwNEFFXHUwNEFGXHUwNEIwXHUwNEIxXHUwNEVFXHUwNEVGXHUwNEYwXHUwNEYxXHUwNEYyXHUwNEYzJyxcbiAgejogJ1x1MDE3OVx1MDE3QVx1MDE3Qlx1MDE3Q1x1MDE3RFx1MDE3RVx1MDFCNVx1MDFCNlx1MDIyNFx1MDIyNVx1MDI0MFx1MDM5NicsXG59XG4vL2RlY29tcHJlc3MgZGF0YSBpbnRvIHR3byBoYXNoZXNcbmxldCB1bmljb2RlID0ge31cbk9iamVjdC5rZXlzKGNvbXBhY3QpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgY29tcGFjdFtrXS5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAocykge1xuICAgIHVuaWNvZGVbc10gPSBrXG4gIH0pXG59KVxuZXhwb3J0IGRlZmF1bHQgdW5pY29kZVxuIiwgIi8vIGh0dHBzOi8vdXRpbC51bmljb2RlLm9yZy9Vbmljb2RlSnNwcy9saXN0LXVuaWNvZGVzZXQuanNwP2E9JTVDcCU3QnB1bmN0dWF0aW9uJTdEXG5cbi8vIHB1bmN0dWF0aW9uIHRvIGtlZXAgYXQgc3RhcnQgb2Ygd29yZFxuY29uc3QgcHJlUHVuY3R1YXRpb24gPSB7XG4gICcjJzogdHJ1ZSwgLy8jaGFzdGFnXG4gICdAJzogdHJ1ZSwgLy9AYXRtZW50aW9uXG4gICdfJzogdHJ1ZSwvL3VuZGVyc2NvcmVcbiAgJ1x1MDBCMCc6IHRydWUsXG4gIC8vICcrJzogdHJ1ZSwvLys0XG4gIC8vICdcXFxcLScsLy8tNCAgKGVzY2FwZSlcbiAgLy8gJy4nLC8vLjRcbiAgLy8gemVyby13aWR0aCBjaGFyc1xuICAnXFx1MjAwQic6IHRydWUsXG4gICdcXHUyMDBDJzogdHJ1ZSxcbiAgJ1xcdTIwMEQnOiB0cnVlLFxuICAnXFx1RkVGRic6IHRydWVcbn1cblxuLy8gcHVuY3R1YXRpb24gdG8ga2VlcCBhdCBlbmQgb2Ygd29yZFxuY29uc3QgcG9zdFB1bmN0dWF0aW9uID0ge1xuICAnJSc6IHRydWUsLy84OCVcbiAgJ18nOiB0cnVlLC8vdW5kZXJzY29yZVxuICAnXHUwMEIwJzogdHJ1ZSwvL2RlZ3JlZXMsIGl0YWxpYW4gb3JkaW5hbFxuICAvLyAnXFwnJywvLyBzb21ldGltZXNcbiAgLy8gemVyby13aWR0aCBjaGFyc1xuICAnXFx1MjAwQic6IHRydWUsXG4gICdcXHUyMDBDJzogdHJ1ZSxcbiAgJ1xcdTIwMEQnOiB0cnVlLFxuICAnXFx1RkVGRic6IHRydWVcbn1cblxuY29uc3QgZW1vdGljb25zID0ge1xuICAnPDMnOiB0cnVlLFxuICAnPC8zJzogdHJ1ZSxcbiAgJzxcXFxcMyc6IHRydWUsXG4gICc6XlAnOiB0cnVlLFxuICAnOl5wJzogdHJ1ZSxcbiAgJzpeTyc6IHRydWUsXG4gICc6XjMnOiB0cnVlLFxufVxuXG5leHBvcnQgeyBwcmVQdW5jdHVhdGlvbiwgcG9zdFB1bmN0dWF0aW9uLCBlbW90aWNvbnMgfSIsICJpbXBvcnQgYWxpYXNlcyBmcm9tICcuL2FsaWFzZXMuanMnXG5pbXBvcnQgeyBsZXhpY29uLCBhYmJyZXZpYXRpb25zIH0gZnJvbSAnLi9sZXhpY29uLmpzJ1xuaW1wb3J0IHByZWZpeGVzIGZyb20gJy4vcHJlZml4ZXMuanMnXG5pbXBvcnQgc3VmZml4ZXMgZnJvbSAnLi9zdWZmaXhlcy5qcydcbmltcG9ydCB1bmljb2RlIGZyb20gJy4vdW5pY29kZS5qcydcbmltcG9ydCB7IHByZVB1bmN0dWF0aW9uLCBwb3N0UHVuY3R1YXRpb24sIGVtb3RpY29ucyB9IGZyb20gJy4vcHVuY3R1YXRpb24uanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25lOiB7XG4gICAgYWxpYXNlcyxcbiAgICBhYmJyZXZpYXRpb25zLFxuICAgIHByZWZpeGVzLFxuICAgIHN1ZmZpeGVzLFxuICAgIHByZVB1bmN0dWF0aW9uLFxuICAgIHBvc3RQdW5jdHVhdGlvbixcbiAgICBsZXhpY29uLCAvL2dpdmUgdGhpcyBvbmUgZm9yd2FyZFxuICAgIHVuaWNvZGUsXG4gICAgZW1vdGljb25zXG4gIH0sXG59XG4iLCAiY29uc3QgaGFzU2xhc2ggPSAvXFwvL1xuY29uc3QgaGFzRG9tYWluID0gL1thLXpdXFwuW2Etel0vaVxuY29uc3QgaXNNYXRoID0gL1swLTldL1xuLy8gY29uc3QgaGFzU2xhc2ggPSAvW2EtelxcdTAwQzAtXFx1MDBGRl0gP1xcLyA/W2EtelxcdTAwQzAtXFx1MDBGRl0vXG4vLyBjb25zdCBoYXNBcG9zdHJvcGhlID0gL1snXHUyMDE5XXMkL1xuXG5jb25zdCBhZGRBbGlhc2VzID0gZnVuY3Rpb24gKHRlcm0sIHdvcmxkKSB7XG4gIGxldCBzdHIgPSB0ZXJtLm5vcm1hbCB8fCB0ZXJtLnRleHQgfHwgdGVybS5tYWNoaW5lXG4gIGNvbnN0IGFsaWFzZXMgPSB3b3JsZC5tb2RlbC5vbmUuYWxpYXNlc1xuICAvLyBsb29rdXAga25vd24gYWxpYXNlcyBsaWtlICcmJ1xuICBpZiAoYWxpYXNlcy5oYXNPd25Qcm9wZXJ0eShzdHIpKSB7XG4gICAgdGVybS5hbGlhcyA9IHRlcm0uYWxpYXMgfHwgW11cbiAgICB0ZXJtLmFsaWFzLnB1c2goYWxpYXNlc1tzdHJdKVxuICB9XG4gIC8vIHN1cHBvcnQgc2xhc2hlcyBhcyBhbGlhc2VzXG4gIGlmIChoYXNTbGFzaC50ZXN0KHN0cikgJiYgIWhhc0RvbWFpbi50ZXN0KHN0cikgJiYgIWlzTWF0aC50ZXN0KHN0cikpIHtcbiAgICBsZXQgYXJyID0gc3RyLnNwbGl0KGhhc1NsYXNoKVxuICAgIC8vIGRvbid0IHNwbGl0IHVybHMgYW5kIHRoaW5nc1xuICAgIGlmIChhcnIubGVuZ3RoIDw9IDMpIHtcbiAgICAgIGFyci5mb3JFYWNoKHdvcmQgPT4ge1xuICAgICAgICB3b3JkID0gd29yZC50cmltKClcbiAgICAgICAgaWYgKHdvcmQgIT09ICcnKSB7XG4gICAgICAgICAgdGVybS5hbGlhcyA9IHRlcm0uYWxpYXMgfHwgW11cbiAgICAgICAgICB0ZXJtLmFsaWFzLnB1c2god29yZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgLy8gYWxpYXNlcyBmb3IgYXBvc3Ryb3BoZS1zXG4gIC8vIGlmIChoYXNBcG9zdHJvcGhlLnRlc3Qoc3RyKSkge1xuICAvLyAgIGxldCBtYWluID0gc3RyLnJlcGxhY2UoaGFzQXBvc3Ryb3BoZSwgJycpLnRyaW0oKVxuICAvLyAgIHRlcm0uYWxpYXMgPSB0ZXJtLmFsaWFzIHx8IFtdXG4gIC8vICAgdGVybS5hbGlhcy5wdXNoKG1haW4pXG4gIC8vIH1cbiAgcmV0dXJuIHRlcm1cbn1cbmV4cG9ydCBkZWZhdWx0IGFkZEFsaWFzZXNcbiIsICJjb25zdCBoYXNEYXNoID0gL15cXHB7TGV0dGVyfSstXFxwe0xldHRlcn0rJC91XG4vLyAnbWFjaGluZScgaXMgYSBub3JtYWxpemVkIGZvcm0gdGhhdCBsb29zZXMgaHVtYW4tcmVhZGFiaWxpdHlcbmNvbnN0IGRvTWFjaGluZSA9IGZ1bmN0aW9uICh0ZXJtKSB7XG4gIGxldCBzdHIgPSB0ZXJtLmltcGxpY2l0IHx8IHRlcm0ubm9ybWFsIHx8IHRlcm0udGV4dFxuICAvLyByZW1vdmUgYXBvc3Ryb3BoZXNcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1snXHUyMDE5XXMkLywgJycpXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9zWydcdTIwMTldJC8sICdzJylcbiAgLy9sb29raW4nLT5sb29raW5nIChtYWtlIGl0IGVhc2llciBmb3IgY29uanVnYXRpb24pXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC8oW2FlaW91XVtrdHJwXSlpbickLywgJyQxaW5nJylcbiAgLy90dXJuIHJlLWVuYWN0bWVudCB0byByZWVuYWN0bWVudFxuICBpZiAoaGFzRGFzaC50ZXN0KHN0cikpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvLS9nLCAnJylcbiAgfVxuICAvLyN0YWdzLCBAbWVudGlvbnNcbiAgc3RyID0gc3RyLnJlcGxhY2UoL15bI0BdLywgJycpXG4gIGlmIChzdHIgIT09IHRlcm0ubm9ybWFsKSB7XG4gICAgdGVybS5tYWNoaW5lID0gc3RyXG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGRvTWFjaGluZVxuIiwgIi8vIHNvcnQgd29yZHMgYnkgZnJlcXVlbmN5XG5jb25zdCBmcmVxID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgbGV0IGRvY3MgPSB2aWV3LmRvY3NcbiAgbGV0IGNvdW50cyA9IHt9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgZG9jc1tpXS5sZW5ndGg7IHQgKz0gMSkge1xuICAgICAgbGV0IHRlcm0gPSBkb2NzW2ldW3RdXG4gICAgICBsZXQgd29yZCA9IHRlcm0ubWFjaGluZSB8fCB0ZXJtLm5vcm1hbFxuICAgICAgY291bnRzW3dvcmRdID0gY291bnRzW3dvcmRdIHx8IDBcbiAgICAgIGNvdW50c1t3b3JkXSArPSAxXG4gICAgfVxuICB9XG4gIC8vIGFkZCBjb3VudHMgb24gZWFjaCB0ZXJtXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgZG9jc1tpXS5sZW5ndGg7IHQgKz0gMSkge1xuICAgICAgbGV0IHRlcm0gPSBkb2NzW2ldW3RdXG4gICAgICBsZXQgd29yZCA9IHRlcm0ubWFjaGluZSB8fCB0ZXJtLm5vcm1hbFxuICAgICAgdGVybS5mcmVxID0gY291bnRzW3dvcmRdXG4gICAgfVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmcmVxXG4iLCAiLy8gZ2V0IGFsbCBjaGFyYWN0ZXIgc3RhcnRpbmdzIGluIGRvY1xuY29uc3Qgb2Zmc2V0ID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgbGV0IGVsYXBzZWQgPSAwXG4gIGxldCBpbmRleCA9IDBcbiAgbGV0IGRvY3MgPSB2aWV3LmRvY3VtZW50IC8vc3RhcnQgZnJvbSB0aGUgYWN0dWFsLXRvcFxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IGRvY3NbaV0ubGVuZ3RoOyB0ICs9IDEpIHtcbiAgICAgIGxldCB0ZXJtID0gZG9jc1tpXVt0XVxuICAgICAgdGVybS5vZmZzZXQgPSB7XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgc3RhcnQ6IGVsYXBzZWQgKyB0ZXJtLnByZS5sZW5ndGgsXG4gICAgICAgIGxlbmd0aDogdGVybS50ZXh0Lmxlbmd0aCxcbiAgICAgIH1cbiAgICAgIGVsYXBzZWQgKz0gdGVybS5wcmUubGVuZ3RoICsgdGVybS50ZXh0Lmxlbmd0aCArIHRlcm0ucG9zdC5sZW5ndGhcbiAgICAgIGluZGV4ICs9IDFcbiAgICB9XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBvZmZzZXRcbiIsICIvLyBjaGVhdC0gYWRkIHRoZSBkb2N1bWVudCdzIHBvaW50ZXIgdG8gdGhlIHRlcm1zXG5jb25zdCBpbmRleCA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gIC8vIGNvbnNvbGUubG9nKCdyZWluZGV4JylcbiAgbGV0IGRvY3VtZW50ID0gdmlldy5kb2N1bWVudFxuICBmb3IgKGxldCBuID0gMDsgbiA8IGRvY3VtZW50Lmxlbmd0aDsgbiArPSAxKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2N1bWVudFtuXS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgZG9jdW1lbnRbbl1baV0uaW5kZXggPSBbbiwgaV1cbiAgICB9XG4gIH1cbiAgLy8gbGV0IHB0cnMgPSBiLmZ1bGxQb2ludGVyXG4gIC8vIGNvbnNvbGUubG9nKHB0cnMpXG4gIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jcy5sZW5ndGg7IGkgKz0gMSkge1xuICAvLyAgIGNvbnN0IFtuLCBzdGFydF0gPSBwdHJzW2ldXG4gIC8vICAgZm9yIChsZXQgdCA9IDA7IHQgPCBkb2NzW2ldLmxlbmd0aDsgdCArPSAxKSB7XG4gIC8vICAgICBsZXQgdGVybSA9IGRvY3NbaV1bdF1cbiAgLy8gICAgIHRlcm0uaW5kZXggPSBbbiwgc3RhcnQgKyB0XVxuICAvLyAgIH1cbiAgLy8gfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbmRleCIsICJjb25zdCB3b3JkQ291bnQgPSBmdW5jdGlvbiAodmlldykge1xuICBsZXQgbiA9IDBcbiAgbGV0IGRvY3MgPSB2aWV3LmRvY3NcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2NzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCBkb2NzW2ldLmxlbmd0aDsgdCArPSAxKSB7XG4gICAgICBpZiAoZG9jc1tpXVt0XS5ub3JtYWwgPT09ICcnKSB7XG4gICAgICAgIGNvbnRpbnVlIC8vc2tpcCBpbXBsaWNpdCB3b3Jkc1xuICAgICAgfVxuICAgICAgbiArPSAxXG4gICAgICBkb2NzW2ldW3RdLndvcmRDb3VudCA9IG5cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd29yZENvdW50XG4iLCAiaW1wb3J0IGFsaWFzIGZyb20gJy4vYWxpYXMuanMnXG5pbXBvcnQgbm9ybWFsIGZyb20gJy4vbm9ybWFsL2luZGV4LmpzJ1xuaW1wb3J0IG1hY2hpbmUgZnJvbSAnLi9tYWNoaW5lLmpzJ1xuaW1wb3J0IGZyZXEgZnJvbSAnLi9mcmVxLmpzJ1xuaW1wb3J0IG9mZnNldCBmcm9tICcuL29mZnNldC5qcydcbmltcG9ydCBpbmRleCBmcm9tICcuL3JlaW5kZXguanMnXG5pbXBvcnQgd29yZENvdW50IGZyb20gJy4vd29yZENvdW50LmpzJ1xuXG4vLyBjaGVhdC1tZXRob2QgZm9yIGEgcXVpY2sgbG9vcFxuY29uc3QgdGVybUxvb3AgPSBmdW5jdGlvbiAodmlldywgZm4pIHtcbiAgbGV0IGRvY3MgPSB2aWV3LmRvY3NcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2NzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCBkb2NzW2ldLmxlbmd0aDsgdCArPSAxKSB7XG4gICAgICBmbihkb2NzW2ldW3RdLCB2aWV3LndvcmxkKVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBtZXRob2RzID0ge1xuICBhbGlhczogKHZpZXcpID0+IHRlcm1Mb29wKHZpZXcsIGFsaWFzKSxcbiAgbWFjaGluZTogKHZpZXcpID0+IHRlcm1Mb29wKHZpZXcsIG1hY2hpbmUpLFxuICBub3JtYWw6ICh2aWV3KSA9PiB0ZXJtTG9vcCh2aWV3LCBub3JtYWwpLFxuICBmcmVxLFxuICBvZmZzZXQsXG4gIGluZGV4LFxuICB3b3JkQ291bnQsXG59XG5leHBvcnQgZGVmYXVsdCBtZXRob2RzXG4iLCAiaW1wb3J0IG1ldGhvZHMgZnJvbSAnLi9tZXRob2RzL2luZGV4LmpzJ1xuaW1wb3J0IG1vZGVsIGZyb20gJy4vbW9kZWwvaW5kZXguanMnXG5pbXBvcnQgY29tcHV0ZSBmcm9tICcuL2NvbXB1dGUvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZSxcbiAgbWV0aG9kcyxcbiAgbW9kZWwsXG4gIGhvb2tzOiBbJ2FsaWFzJywgJ21hY2hpbmUnLCAnaW5kZXgnLCAnaWQnXSxcbn1cblxuLy8gY29uc3QgcGx1Z2luID0gZnVuY3Rpb24gKHdvcmxkKSB7XG4vLyAgIGxldCB7IG1ldGhvZHMsIG1vZGVsLCBwYXJzZXJzIH0gPSB3b3JsZFxuLy8gICBPYmplY3QuYXNzaWduKHt9LCBtZXRob2RzLCBfbWV0aG9kcylcbi8vICAgT2JqZWN0LmFzc2lnbihtb2RlbCwgX21vZGVsKVxuLy8gICBtZXRob2RzLm9uZS50b2tlbml6ZS5mcm9tU3RyaW5nID0gdG9rZW5pemVcbi8vICAgcGFyc2Vycy5wdXNoKCdub3JtYWwnKVxuLy8gICBwYXJzZXJzLnB1c2goJ2FsaWFzJylcbi8vICAgcGFyc2Vycy5wdXNoKCdtYWNoaW5lJylcbi8vICAgLy8gZXh0ZW5kIFZpZXcgY2xhc3Ncbi8vICAgLy8gYWRkTWV0aG9kcyhWaWV3KVxuLy8gfVxuLy8gZXhwb3J0IGRlZmF1bHQgcGx1Z2luXG4iLCAiLy8gbG9va3VwIGxhc3Qgd29yZCBpbiB0aGUgdHlwZS1haGVhZCBwcmVmaXhlc1xuY29uc3QgdHlwZWFoZWFkID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgY29uc3QgcHJlZml4ZXMgPSB2aWV3Lm1vZGVsLm9uZS50eXBlYWhlYWRcbiAgY29uc3QgZG9jcyA9IHZpZXcuZG9jc1xuICBpZiAoZG9jcy5sZW5ndGggPT09IDAgfHwgT2JqZWN0LmtleXMocHJlZml4ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVyblxuICB9XG4gIGxldCBsYXN0UGhyYXNlID0gZG9jc1tkb2NzLmxlbmd0aCAtIDFdIHx8IFtdXG4gIGxldCBsYXN0VGVybSA9IGxhc3RQaHJhc2VbbGFzdFBocmFzZS5sZW5ndGggLSAxXVxuICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHB1dCB3aGl0ZXNwYWNlLCBlbmQuXG4gIGlmIChsYXN0VGVybS5wb3N0KSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgLy8gaWYgd2UgZm91bmQgc29tZXRoaW5nXG4gIGlmIChwcmVmaXhlcy5oYXNPd25Qcm9wZXJ0eShsYXN0VGVybS5ub3JtYWwpKSB7XG4gICAgbGV0IGZvdW5kID0gcHJlZml4ZXNbbGFzdFRlcm0ubm9ybWFsXVxuICAgIC8vIGFkZCBmdWxsLXdvcmQgYXMgYW4gaW1wbGljaXQgcmVzdWx0XG4gICAgbGFzdFRlcm0uaW1wbGljaXQgPSBmb3VuZFxuICAgIGxhc3RUZXJtLm1hY2hpbmUgPSBmb3VuZFxuICAgIGxhc3RUZXJtLnR5cGVhaGVhZCA9IHRydWVcbiAgICAvLyB0YWcgaXQsIGFzIG91ciBhc3N1bWVkIHRlcm1cbiAgICBpZiAodmlldy5jb21wdXRlLnByZVRhZ2dlcikge1xuICAgICAgdmlldy5sYXN0KCkudW5UYWcoJyonKS5jb21wdXRlKFsnbGV4aWNvbicsICdwcmVUYWdnZXInXSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgeyB0eXBlYWhlYWQgfVxuIiwgIi8vIGFzc3VtZSBhbnkgZGlzY292ZXJlZCBwcmVmaXhlc1xuY29uc3QgYXV0b0ZpbGwgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRvY3MgPSB0aGlzLmRvY3NcbiAgaWYgKGRvY3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuICBsZXQgbGFzdFBocmFzZSA9IGRvY3NbZG9jcy5sZW5ndGggLSAxXSB8fCBbXVxuICBsZXQgdGVybSA9IGxhc3RQaHJhc2VbbGFzdFBocmFzZS5sZW5ndGggLSAxXVxuICBpZiAodGVybS50eXBlYWhlYWQgPT09IHRydWUgJiYgdGVybS5tYWNoaW5lKSB7XG4gICAgdGVybS50ZXh0ID0gdGVybS5tYWNoaW5lXG4gICAgdGVybS5ub3JtYWwgPSB0ZXJtLm1hY2hpbmVcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5jb25zdCBhcGkgPSBmdW5jdGlvbiAoVmlldykge1xuICBWaWV3LnByb3RvdHlwZS5hdXRvRmlsbCA9IGF1dG9GaWxsXG59XG5leHBvcnQgZGVmYXVsdCBhcGkiLCAiLy8gZ2VuZXJhdGUgYWxsIHRoZSBwb3NzaWJsZSBwcmVmaXhlcyB1cC1mcm9udFxuY29uc3QgZ2V0UHJlZml4ZXMgPSBmdW5jdGlvbiAoYXJyLCBvcHRzLCB3b3JsZCkge1xuICBsZXQgaW5kZXggPSB7fVxuICBsZXQgY29sbGlzaW9ucyA9IFtdXG4gIGxldCBleGlzdGluZyA9IHdvcmxkLnByZWZpeGVzIHx8IHt9XG4gIGFyci5mb3JFYWNoKChzdHIpID0+IHtcbiAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKS50cmltKClcbiAgICBsZXQgbWF4ID0gc3RyLmxlbmd0aFxuICAgIGlmIChvcHRzLm1heCAmJiBtYXggPiBvcHRzLm1heCkge1xuICAgICAgbWF4ID0gb3B0cy5tYXhcbiAgICB9XG4gICAgZm9yIChsZXQgc2l6ZSA9IG9wdHMubWluOyBzaXplIDwgbWF4OyBzaXplICs9IDEpIHtcbiAgICAgIGxldCBwcmVmaXggPSBzdHIuc3Vic3RyaW5nKDAsIHNpemUpXG4gICAgICAvLyBlbnN1cmUgcHJlZml4IGlzIG5vdCBhIHdvcmRcbiAgICAgIGlmIChvcHRzLnNhZmUgJiYgd29ybGQubW9kZWwub25lLmxleGljb24uaGFzT3duUHJvcGVydHkocHJlZml4KSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgLy8gZG9lcyBpdCBhbHJlYWR5IGV4aXN0P1xuICAgICAgaWYgKGV4aXN0aW5nLmhhc093blByb3BlcnR5KHByZWZpeCkgPT09IHRydWUpIHtcbiAgICAgICAgY29sbGlzaW9ucy5wdXNoKHByZWZpeClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleC5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID09PSB0cnVlKSB7XG4gICAgICAgIGNvbGxpc2lvbnMucHVzaChwcmVmaXgpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpbmRleFtwcmVmaXhdID0gc3RyXG4gICAgfVxuICB9KVxuICAvLyBtZXJnZSB3aXRoIGV4aXN0aW5nIHByZWZpeGVzXG4gIGluZGV4ID0gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGluZGV4KVxuICAvLyByZW1vdmUgYW1iaWd1b3VzLXByZWZpeGVzXG4gIGNvbGxpc2lvbnMuZm9yRWFjaCgoc3RyKSA9PiB7XG4gICAgZGVsZXRlIGluZGV4W3N0cl1cbiAgfSlcbiAgcmV0dXJuIGluZGV4XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFByZWZpeGVzXG4iLCAiaW1wb3J0IGFsbFByZWZpeGVzIGZyb20gJy4vYWxsUHJlZml4ZXMuanMnXG5cbmNvbnN0IGlzT2JqZWN0ID0gdmFsID0+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgc2FmZTogdHJ1ZSxcbiAgbWluOiAzLFxufVxuXG5jb25zdCBwcmVwYXJlID0gZnVuY3Rpb24gKHdvcmRzID0gW10sIG9wdHMgPSB7fSkge1xuICBsZXQgbW9kZWwgPSB0aGlzLm1vZGVsKClcbiAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLCBvcHRzKVxuICBpZiAoaXNPYmplY3Qod29yZHMpKSB7XG4gICAgT2JqZWN0LmFzc2lnbihtb2RlbC5vbmUubGV4aWNvbiwgd29yZHMpXG4gICAgd29yZHMgPSBPYmplY3Qua2V5cyh3b3JkcylcbiAgfVxuICBsZXQgcHJlZml4ZXMgPSBhbGxQcmVmaXhlcyh3b3Jkcywgb3B0cywgdGhpcy53b3JsZCgpKVxuICAvLyBtYW51YWxseSBjb21iaW5lIHRoZXNlIHdpdGggYW55IGV4aXN0aW5nIHByZWZpeGVzXG4gIE9iamVjdC5rZXlzKHByZWZpeGVzKS5mb3JFYWNoKHN0ciA9PiB7XG4gICAgLy8gZXhwbG9kZSBhbnkgb3ZlcmxhcHNcbiAgICBpZiAobW9kZWwub25lLnR5cGVhaGVhZC5oYXNPd25Qcm9wZXJ0eShzdHIpKSB7XG4gICAgICBkZWxldGUgbW9kZWwub25lLnR5cGVhaGVhZFtzdHJdXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbW9kZWwub25lLnR5cGVhaGVhZFtzdHJdID0gcHJlZml4ZXNbc3RyXVxuICB9KVxuICByZXR1cm4gdGhpc1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHR5cGVhaGVhZDogcHJlcGFyZVxufSIsICJpbXBvcnQgY29tcHV0ZSBmcm9tICcuL2NvbXB1dGUuanMnXG5pbXBvcnQgYXBpIGZyb20gJy4vYXBpLmpzJ1xuaW1wb3J0IGxpYiBmcm9tICcuL2xpYi9pbmRleC5qcydcblxuY29uc3QgbW9kZWwgPSB7XG4gIG9uZToge1xuICAgIHR5cGVhaGVhZDoge30gLy9zZXQgYSBibGFuayBrZXktdmFsXG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbW9kZWwsXG4gIGFwaSxcbiAgbGliLFxuICBjb21wdXRlLFxuICBob29rczogWyd0eXBlYWhlYWQnXVxufVxuXG4iLCAiaW1wb3J0IG5scCBmcm9tICcuL25scC5qcycgLy8gNWtiXG5pbXBvcnQgY2FjaGUgZnJvbSAnLi8xLW9uZS9jYWNoZS9wbHVnaW4uanMnXG5pbXBvcnQgY2hhbmdlIGZyb20gJy4vMS1vbmUvY2hhbmdlL3BsdWdpbi5qcydcbmltcG9ydCBjb250cmFjdGlvbnMgZnJvbSAnLi8xLW9uZS9jb250cmFjdGlvbi1vbmUvcGx1Z2luLmpzJ1xuaW1wb3J0IGZyZWV6ZSBmcm9tICcuLzEtb25lL2ZyZWV6ZS9wbHVnaW4uanMnXG5pbXBvcnQgbGV4aWNvbiBmcm9tICcuLzEtb25lL2xleGljb24vcGx1Z2luLmpzJ1xuaW1wb3J0IGxvb2t1cCBmcm9tICcuLzEtb25lL2xvb2t1cC9wbHVnaW4uanMnXG5pbXBvcnQgbWF0Y2ggZnJvbSAnLi8xLW9uZS9tYXRjaC9wbHVnaW4uanMnXG5pbXBvcnQgb3V0cHV0IGZyb20gJy4vMS1vbmUvb3V0cHV0L3BsdWdpbi5qcydcbmltcG9ydCBwb2ludGVycyBmcm9tICcuLzEtb25lL3BvaW50ZXJzL3BsdWdpbi5qcydcbmltcG9ydCBzd2VlcCBmcm9tICcuLzEtb25lL3N3ZWVwL3BsdWdpbi5qcydcbmltcG9ydCB0YWcgZnJvbSAnLi8xLW9uZS90YWcvcGx1Z2luLmpzJ1xuaW1wb3J0IHRva2VuaXplIGZyb20gJy4vMS1vbmUvdG9rZW5pemUvcGx1Z2luLmpzJ1xuaW1wb3J0IHR5cGVhaGVhZCBmcm9tICcuLzEtb25lL3R5cGVhaGVhZC9wbHVnaW4uanMnXG5cbi8vIG9yZGVyIGhlcmUgbWF0dGVyc1xubmxwLmV4dGVuZChjaGFuZ2UpIC8vMGtiXG5ubHAuZXh0ZW5kKG91dHB1dCkgLy8wa2Jcbm5scC5leHRlbmQobWF0Y2gpIC8vMTBrYlxubmxwLmV4dGVuZChwb2ludGVycykgLy8ya2Jcbm5scC5leHRlbmQodGFnKSAvLzJrYlxubmxwLnBsdWdpbihjb250cmFjdGlvbnMpIC8vfjZrYlxubmxwLmV4dGVuZCh0b2tlbml6ZSkgLy83a2Jcbm5scC5leHRlbmQoZnJlZXplKSAvL1xubmxwLnBsdWdpbihjYWNoZSkgLy9+MWtiXG5ubHAuZXh0ZW5kKGxvb2t1cCkgLy83a2Jcbm5scC5leHRlbmQodHlwZWFoZWFkKSAvLzFrYlxubmxwLmV4dGVuZChsZXhpY29uKSAvLzFrYlxubmxwLmV4dGVuZChzd2VlcCkgLy8xa2JcblxuZXhwb3J0IGRlZmF1bHQgbmxwIC8vIDQwa2JcbiIsICJpbXBvcnQgTXVzdGFjaGUgZnJvbSAnbXVzdGFjaGUnO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IG5scCBmcm9tICdjb21wcm9taXNlL29uZSdcblxuZXhwb3J0IGNvbnN0IFRFTVBMQVRFX1ZBUklBQkxFUyA9IGB7e3ByZV9jdXJzb3J9fVxcbnt7cG9zdF9jdXJzb3J9fSBcXG57e2FjdGl2ZV9zZW50ZW5jZX19IFxcbnt7bGFzdF9saW5lfX1gO1xuXG5pbnRlcmZhY2UgVGVtcGxhdGVBcmdzIHtcbiAgICBwcmVfY3Vyc29yOiBzdHJpbmc7XG4gICAgcG9zdF9jdXJzb3I6IHN0cmluZztcbiAgICBhY3RpdmVfc2VudGVuY2U6IHN0cmluZztcbiAgICBsYXN0X2xpbmU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJlcGFyZVByb21wdChlZGl0b3I6IEVkaXRvciwgdGVtcGxhdGU6IHN0cmluZyA9IFRFTVBMQVRFX1ZBUklBQkxFUyk6IHN0cmluZyB7XG4gICAgY29uc3QgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvcigpO1xuICAgIGNvbnN0IHByZUN1cnNvciA9IGVkaXRvci5nZXRSYW5nZSh7IGxpbmU6IDAsIGNoOiAwIH0sIGN1cnNvcik7XG4gICAgY29uc3QgcG9zdEN1cnNvciA9IGVkaXRvci5nZXRSYW5nZShjdXJzb3IsIHsgbGluZTogZWRpdG9yLmxhc3RMaW5lKCksIGNoOiBlZGl0b3IuZ2V0TGluZShlZGl0b3IubGFzdExpbmUoKSkubGVuZ3RoIH0pO1xuICAgIGNvbnN0IGFjdGl2ZVNlbnRlbmNlID0gbmxwKHByZUN1cnNvcikuZnVsbFNlbnRlbmNlcygpLmxhc3QoKS5vdXQoJ3RleHQnKTtcbiAgICBjb25zdCBsYXN0TGluZSA9IGVkaXRvci5nZXRMaW5lKGVkaXRvci5sYXN0TGluZSgpKTtcblxuICAgIHJldHVybiByZW5kZXJUZW1wbGF0ZSh0ZW1wbGF0ZSwge1xuICAgICAgICBwcmVfY3Vyc29yOiBwcmVDdXJzb3IsXG4gICAgICAgIHBvc3RfY3Vyc29yOiBwb3N0Q3Vyc29yLFxuICAgICAgICBhY3RpdmVfc2VudGVuY2U6IGFjdGl2ZVNlbnRlbmNlLFxuICAgICAgICBsYXN0X2xpbmU6IGxhc3RMaW5lXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcsIGFyZ3M6IFRlbXBsYXRlQXJncyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSwgYXJncyk7XG59IiwgImltcG9ydCB7IE1vZGVsUmVzcG9uc2UsIE9sbGFtYSB9IGZyb20gXCJvbGxhbWFcIjtcbmltcG9ydCB7IE9sbGFtYVNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCBwcmVwYXJlUHJvbXB0IGZyb20gXCJzcmMvcHJvbXB0L3Byb21wdFwiO1xuaW1wb3J0IHsgQ29tcGxldGlvbk9wdGlvbnMgfSBmcm9tIFwic3JjL3NldHRpbmdzL3NldHRpbmdzXCI7XG5cbmV4cG9ydCBjbGFzcyBPbGxhbWFQcm92aWRlciBpbXBsZW1lbnRzIFByb3ZpZGVyIHtcbiAgICBjbGllbnQ6IE9sbGFtYVxuICAgIHNldHRpbmdzOiBPbGxhbWFTZXR0aW5ncztcbiAgICBhYm9ydGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5zOiBPbGxhbWFTZXR0aW5ncykge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGlucztcbiAgICAgICAgdGhpcy5jbGllbnQgPSBuZXcgT2xsYW1hKHsgaG9zdDogdGhpcy5zZXR0aW5ncy5ob3N0IH0pO1xuICAgIH1cblxuICAgIGFzeW5jICpnZW5lcmF0ZShlZGl0b3I6IEVkaXRvciwgb3B0aW9uczogQ29tcGxldGlvbk9wdGlvbnMpOiBBc3luY0dlbmVyYXRvcjxzdHJpbmc+IHtcbiAgICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IHByZXBhcmVQcm9tcHQoZWRpdG9yLCBvcHRpb25zLnVzZXJQcm9tcHQpO1xuXG4gICAgICAgIGNvbnN0IGNvbXBsZXRpb25JdGVyYXRvciA9IGF3YWl0IHRoaXMuY2xpZW50LmdlbmVyYXRlKHtcbiAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgcHJvbXB0OiBwcm9tcHQsXG4gICAgICAgICAgICBzeXN0ZW06IG9wdGlvbnMuc3lzdGVtUHJvbXB0LFxuICAgICAgICAgICAgc3RyZWFtOiB0cnVlLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHRlbXBlcmF0dXJlOiBvcHRpb25zLnRlbXBlcmF0dXJlLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpbml0aWFsUG9zaXRpb24gPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG4gICAgICAgIGxldCBjb21wbGV0aW9uID0gXCJcIjtcbiAgICAgICAgZm9yIGF3YWl0IChsZXQgcmVzcG9uc2Ugb2YgY29tcGxldGlvbkl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3Vyc29yTW92ZWQoZWRpdG9yLCBpbml0aWFsUG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRpb24gKz0gcmVzcG9uc2UucmVzcG9uc2U7XG4gICAgICAgICAgICB5aWVsZCBjb21wbGV0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXJzb3JNb3ZlZChlZGl0b3I6IEVkaXRvciwgaW5pdGlhbFBvc2l0aW9uOiB7IGxpbmU6IG51bWJlciwgY2g6IG51bWJlciB9KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IGVkaXRvci5nZXRDdXJzb3IoKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbi5saW5lICE9PSBpbml0aWFsUG9zaXRpb24ubGluZSB8fCBjdXJyZW50UG9zaXRpb24uY2ggIT09IGluaXRpYWxQb3NpdGlvbi5jaDtcbiAgICB9XG5cbiAgICBhc3luYyBhYm9ydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmNsaWVudC5hYm9ydCgpO1xuICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZU1vZGVscygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQubGlzdCgpO1xuICAgICAgICB0aGlzLnNldHRpbmdzLm1vZGVscyA9IHJlc3BvbnNlLm1vZGVscy5tYXAoKG1vZGVsOiBNb2RlbFJlc3BvbnNlKSA9PiBtb2RlbC5uYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5tb2RlbHM7XG4gICAgfVxuXG4gICAgYXN5bmMgY29ubmVjdGlvblRlc3QoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNsaWVudC5saXN0KCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB0ZXN0aW5nIGNvbm5lY3Rpb246XCIsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG4iLCAiaW1wb3J0IHR5cGUgeyBGb3JtYXQgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRfZm9ybWF0OiBGb3JtYXQgPSAnUkZDMzk4Nic7XG5leHBvcnQgY29uc3QgZm9ybWF0dGVyczogUmVjb3JkPEZvcm1hdCwgKHN0cjogUHJvcGVydHlLZXkpID0+IHN0cmluZz4gPSB7XG4gIFJGQzE3Mzg6ICh2OiBQcm9wZXJ0eUtleSkgPT4gU3RyaW5nKHYpLnJlcGxhY2UoLyUyMC9nLCAnKycpLFxuICBSRkMzOTg2OiAodjogUHJvcGVydHlLZXkpID0+IFN0cmluZyh2KSxcbn07XG5leHBvcnQgY29uc3QgUkZDMTczOCA9ICdSRkMxNzM4JztcbmV4cG9ydCBjb25zdCBSRkMzOTg2ID0gJ1JGQzM5ODYnO1xuIiwgImltcG9ydCB7IFJGQzE3MzggfSBmcm9tICcuL2Zvcm1hdHMnO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0RW5jb2RlciwgRm9ybWF0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5jb25zdCBpc19hcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmNvbnN0IGhleF90YWJsZSA9ICgoKSA9PiB7XG4gIGNvbnN0IGFycmF5ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICBhcnJheS5wdXNoKCclJyArICgoaSA8IDE2ID8gJzAnIDogJycpICsgaS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufSkoKTtcblxuZnVuY3Rpb24gY29tcGFjdF9xdWV1ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ocXVldWU6IEFycmF5PHsgb2JqOiBUOyBwcm9wOiBzdHJpbmcgfT4pIHtcbiAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBpdGVtID0gcXVldWUucG9wKCk7XG4gICAgaWYgKCFpdGVtKSBjb250aW51ZTtcblxuICAgIGNvbnN0IG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICBpZiAoaXNfYXJyYXkob2JqKSkge1xuICAgICAgY29uc3QgY29tcGFjdGVkOiB1bmtub3duW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvYmoubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmpbal0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29tcGFjdGVkLnB1c2gob2JqW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpdGVtLm9ialtpdGVtLnByb3BdID0gY29tcGFjdGVkO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcnJheV90b19vYmplY3Qoc291cmNlOiBhbnlbXSwgb3B0aW9uczogeyBwbGFpbk9iamVjdHM6IGJvb2xlYW4gfSkge1xuICBjb25zdCBvYmogPSBvcHRpb25zICYmIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgb2JqW2ldID0gc291cmNlW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShcbiAgdGFyZ2V0OiBhbnksXG4gIHNvdXJjZTogYW55LFxuICBvcHRpb25zOiB7IHBsYWluT2JqZWN0cz86IGJvb2xlYW47IGFsbG93UHJvdG90eXBlcz86IGJvb2xlYW4gfSA9IHt9LFxuKSB7XG4gIGlmICghc291cmNlKSB7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xuICAgIGlmIChpc19hcnJheSh0YXJnZXQpKSB7XG4gICAgICB0YXJnZXQucHVzaChzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChvcHRpb25zICYmIChvcHRpb25zLnBsYWluT2JqZWN0cyB8fCBvcHRpb25zLmFsbG93UHJvdG90eXBlcykpIHx8XG4gICAgICAgICFoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzb3VyY2UpXG4gICAgICApIHtcbiAgICAgICAgdGFyZ2V0W3NvdXJjZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgaWYgKCF0YXJnZXQgfHwgdHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gW3RhcmdldF0uY29uY2F0KHNvdXJjZSk7XG4gIH1cblxuICBsZXQgbWVyZ2VUYXJnZXQgPSB0YXJnZXQ7XG4gIGlmIChpc19hcnJheSh0YXJnZXQpICYmICFpc19hcnJheShzb3VyY2UpKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG1lcmdlVGFyZ2V0ID0gYXJyYXlfdG9fb2JqZWN0KHRhcmdldCwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoaXNfYXJyYXkodGFyZ2V0KSAmJiBpc19hcnJheShzb3VyY2UpKSB7XG4gICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEl0ZW0gPSB0YXJnZXRbaV07XG4gICAgICAgIGlmICh0YXJnZXRJdGVtICYmIHR5cGVvZiB0YXJnZXRJdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRhcmdldFtpXSA9IG1lcmdlKHRhcmdldEl0ZW0sIGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbaV0gPSBpdGVtO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgIGlmIChoYXMuY2FsbChhY2MsIGtleSkpIHtcbiAgICAgIGFjY1trZXldID0gbWVyZ2UoYWNjW2tleV0sIHZhbHVlLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgbWVyZ2VUYXJnZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduX3NpbmdsZV9zb3VyY2UodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICBhY2Nba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHRhcmdldCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUoc3RyOiBzdHJpbmcsIF86IGFueSwgY2hhcnNldDogc3RyaW5nKSB7XG4gIGNvbnN0IHN0cldpdGhvdXRQbHVzID0gc3RyLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgLy8gdW5lc2NhcGUgbmV2ZXIgdGhyb3dzLCBubyB0cnkuLi5jYXRjaCBuZWVkZWQ6XG4gICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzLnJlcGxhY2UoLyVbMC05YS1mXXsyfS9naSwgdW5lc2NhcGUpO1xuICB9XG4gIC8vIHV0Zi04XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHJXaXRob3V0UGx1cyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gc3RyV2l0aG91dFBsdXM7XG4gIH1cbn1cblxuY29uc3QgbGltaXQgPSAxMDI0O1xuXG5leHBvcnQgY29uc3QgZW5jb2RlOiAoXG4gIHN0cjogYW55LFxuICBkZWZhdWx0RW5jb2RlcjogRGVmYXVsdEVuY29kZXIsXG4gIGNoYXJzZXQ6IHN0cmluZyxcbiAgdHlwZTogJ2tleScgfCAndmFsdWUnLFxuICBmb3JtYXQ6IEZvcm1hdCxcbikgPT4gc3RyaW5nID0gKHN0ciwgX2RlZmF1bHRFbmNvZGVyLCBjaGFyc2V0LCBfa2luZCwgZm9ybWF0OiBGb3JtYXQpID0+IHtcbiAgLy8gVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJpYW4gV2hpdGUgZm9yIHRoZSBpby5qcyBjb3JlIHF1ZXJ5c3RyaW5nIGxpYnJhcnkuXG4gIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGxldCBzdHJpbmcgPSBzdHI7XG4gIGlmICh0eXBlb2Ygc3RyID09PSAnc3ltYm9sJykge1xuICAgIHN0cmluZyA9IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdHIpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gU3RyaW5nKHN0cik7XG4gIH1cblxuICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgcmV0dXJuIGVzY2FwZShzdHJpbmcpLnJlcGxhY2UoLyV1WzAtOWEtZl17NH0vZ2ksIGZ1bmN0aW9uICgkMCkge1xuICAgICAgcmV0dXJuICclMjYlMjMnICsgcGFyc2VJbnQoJDAuc2xpY2UoMiksIDE2KSArICclM0InO1xuICAgIH0pO1xuICB9XG5cbiAgbGV0IG91dCA9ICcnO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IHN0cmluZy5sZW5ndGg7IGogKz0gbGltaXQpIHtcbiAgICBjb25zdCBzZWdtZW50ID0gc3RyaW5nLmxlbmd0aCA+PSBsaW1pdCA/IHN0cmluZy5zbGljZShqLCBqICsgbGltaXQpIDogc3RyaW5nO1xuICAgIGNvbnN0IGFyciA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZXQgYyA9IHNlZ21lbnQuY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChcbiAgICAgICAgYyA9PT0gMHgyZCB8fCAvLyAtXG4gICAgICAgIGMgPT09IDB4MmUgfHwgLy8gLlxuICAgICAgICBjID09PSAweDVmIHx8IC8vIF9cbiAgICAgICAgYyA9PT0gMHg3ZSB8fCAvLyB+XG4gICAgICAgIChjID49IDB4MzAgJiYgYyA8PSAweDM5KSB8fCAvLyAwLTlcbiAgICAgICAgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NWEpIHx8IC8vIGEtelxuICAgICAgICAoYyA+PSAweDYxICYmIGMgPD0gMHg3YSkgfHwgLy8gQS1aXG4gICAgICAgIChmb3JtYXQgPT09IFJGQzE3MzggJiYgKGMgPT09IDB4MjggfHwgYyA9PT0gMHgyOSkpIC8vICggKVxuICAgICAgKSB7XG4gICAgICAgIGFyclthcnIubGVuZ3RoXSA9IHNlZ21lbnQuY2hhckF0KGkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgIGFyclthcnIubGVuZ3RoXSA9IGhleF90YWJsZVtjXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgYXJyW2Fyci5sZW5ndGhdID0gaGV4X3RhYmxlWzB4YzAgfCAoYyA+PiA2KV0hICsgaGV4X3RhYmxlWzB4ODAgfCAoYyAmIDB4M2YpXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjIDwgMHhkODAwIHx8IGMgPj0gMHhlMDAwKSB7XG4gICAgICAgIGFyclthcnIubGVuZ3RoXSA9XG4gICAgICAgICAgaGV4X3RhYmxlWzB4ZTAgfCAoYyA+PiAxMildISArIGhleF90YWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzZildICsgaGV4X3RhYmxlWzB4ODAgfCAoYyAmIDB4M2YpXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGkgKz0gMTtcbiAgICAgIGMgPSAweDEwMDAwICsgKCgoYyAmIDB4M2ZmKSA8PCAxMCkgfCAoc2VnbWVudC5jaGFyQ29kZUF0KGkpICYgMHgzZmYpKTtcblxuICAgICAgYXJyW2Fyci5sZW5ndGhdID1cbiAgICAgICAgaGV4X3RhYmxlWzB4ZjAgfCAoYyA+PiAxOCldISArXG4gICAgICAgIGhleF90YWJsZVsweDgwIHwgKChjID4+IDEyKSAmIDB4M2YpXSArXG4gICAgICAgIGhleF90YWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzZildICtcbiAgICAgICAgaGV4X3RhYmxlWzB4ODAgfCAoYyAmIDB4M2YpXTtcbiAgICB9XG5cbiAgICBvdXQgKz0gYXJyLmpvaW4oJycpO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYWN0KHZhbHVlOiBhbnkpIHtcbiAgY29uc3QgcXVldWUgPSBbeyBvYmo6IHsgbzogdmFsdWUgfSwgcHJvcDogJ28nIH1dO1xuICBjb25zdCByZWZzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZVtpXTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3Qgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tqXSE7XG4gICAgICBjb25zdCB2YWwgPSBvYmpba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgJiYgcmVmcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goeyBvYmo6IG9iaiwgcHJvcDoga2V5IH0pO1xuICAgICAgICByZWZzLnB1c2godmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wYWN0X3F1ZXVlKHF1ZXVlKTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc19yZWdleHAob2JqOiBhbnkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzX2J1ZmZlcihvYmo6IGFueSkge1xuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAhIShvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUoYTogYW55LCBiOiBhbnkpIHtcbiAgcmV0dXJuIFtdLmNvbmNhdChhLCBiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1heWJlX21hcDxUPih2YWw6IFRbXSwgZm46ICh2OiBUKSA9PiBUKSB7XG4gIGlmIChpc19hcnJheSh2YWwpKSB7XG4gICAgY29uc3QgbWFwcGVkID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIG1hcHBlZC5wdXNoKGZuKHZhbFtpXSEpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcHBlZDtcbiAgfVxuICByZXR1cm4gZm4odmFsKTtcbn1cbiIsICJpbXBvcnQgeyBlbmNvZGUsIGlzX2J1ZmZlciwgbWF5YmVfbWFwIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBkZWZhdWx0X2Zvcm1hdCwgZm9ybWF0dGVycyB9IGZyb20gJy4vZm9ybWF0cyc7XG5pbXBvcnQgdHlwZSB7IE5vbk51bGxhYmxlUHJvcGVydGllcywgU3RyaW5naWZ5T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5jb25zdCBhcnJheV9wcmVmaXhfZ2VuZXJhdG9ycyA9IHtcbiAgYnJhY2tldHMocHJlZml4OiBQcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBTdHJpbmcocHJlZml4KSArICdbXSc7XG4gIH0sXG4gIGNvbW1hOiAnY29tbWEnLFxuICBpbmRpY2VzKHByZWZpeDogUHJvcGVydHlLZXksIGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFN0cmluZyhwcmVmaXgpICsgJ1snICsga2V5ICsgJ10nO1xuICB9LFxuICByZXBlYXQocHJlZml4OiBQcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBTdHJpbmcocHJlZml4KTtcbiAgfSxcbn07XG5cbmNvbnN0IGlzX2FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmNvbnN0IHB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbmNvbnN0IHB1c2hfdG9fYXJyYXkgPSBmdW5jdGlvbiAoYXJyOiBhbnlbXSwgdmFsdWVfb3JfYXJyYXk6IGFueSkge1xuICBwdXNoLmFwcGx5KGFyciwgaXNfYXJyYXkodmFsdWVfb3JfYXJyYXkpID8gdmFsdWVfb3JfYXJyYXkgOiBbdmFsdWVfb3JfYXJyYXldKTtcbn07XG5cbmNvbnN0IHRvX0lTTyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgYWRkUXVlcnlQcmVmaXg6IGZhbHNlLFxuICBhbGxvd0RvdHM6IGZhbHNlLFxuICBhbGxvd0VtcHR5QXJyYXlzOiBmYWxzZSxcbiAgYXJyYXlGb3JtYXQ6ICdpbmRpY2VzJyxcbiAgY2hhcnNldDogJ3V0Zi04JyxcbiAgY2hhcnNldFNlbnRpbmVsOiBmYWxzZSxcbiAgZGVsaW1pdGVyOiAnJicsXG4gIGVuY29kZTogdHJ1ZSxcbiAgZW5jb2RlRG90SW5LZXlzOiBmYWxzZSxcbiAgZW5jb2RlcjogZW5jb2RlLFxuICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgZm9ybWF0OiBkZWZhdWx0X2Zvcm1hdCxcbiAgZm9ybWF0dGVyOiBmb3JtYXR0ZXJzW2RlZmF1bHRfZm9ybWF0XSxcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIGluZGljZXM6IGZhbHNlLFxuICBzZXJpYWxpemVEYXRlKGRhdGUpIHtcbiAgICByZXR1cm4gdG9fSVNPLmNhbGwoZGF0ZSk7XG4gIH0sXG4gIHNraXBOdWxsczogZmFsc2UsXG4gIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2UsXG59IGFzIE5vbk51bGxhYmxlUHJvcGVydGllczxTdHJpbmdpZnlPcHRpb25zICYgeyBmb3JtYXR0ZXI6ICh0eXBlb2YgZm9ybWF0dGVycylbJ1JGQzE3MzgnXSB9PjtcblxuZnVuY3Rpb24gaXNfbm9uX251bGxpc2hfcHJpbWl0aXZlKHY6IHVua25vd24pOiB2IGlzIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBzeW1ib2wgfCBiaWdpbnQge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fFxuICAgIHR5cGVvZiB2ID09PSAnbnVtYmVyJyB8fFxuICAgIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgfHxcbiAgICB0eXBlb2YgdiA9PT0gJ3N5bWJvbCcgfHxcbiAgICB0eXBlb2YgdiA9PT0gJ2JpZ2ludCdcbiAgKTtcbn1cblxuY29uc3Qgc2VudGluZWwgPSB7fTtcblxuZnVuY3Rpb24gaW5uZXJfc3RyaW5naWZ5KFxuICBvYmplY3Q6IGFueSxcbiAgcHJlZml4OiBQcm9wZXJ0eUtleSxcbiAgZ2VuZXJhdGVBcnJheVByZWZpeDogU3RyaW5naWZ5T3B0aW9uc1snYXJyYXlGb3JtYXQnXSB8ICgocHJlZml4OiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiBzdHJpbmcpLFxuICBjb21tYVJvdW5kVHJpcDogYm9vbGVhbixcbiAgYWxsb3dFbXB0eUFycmF5czogYm9vbGVhbixcbiAgc3RyaWN0TnVsbEhhbmRsaW5nOiBib29sZWFuLFxuICBza2lwTnVsbHM6IGJvb2xlYW4sXG4gIGVuY29kZURvdEluS2V5czogYm9vbGVhbixcbiAgZW5jb2RlcjogU3RyaW5naWZ5T3B0aW9uc1snZW5jb2RlciddLFxuICBmaWx0ZXI6IFN0cmluZ2lmeU9wdGlvbnNbJ2ZpbHRlciddLFxuICBzb3J0OiBTdHJpbmdpZnlPcHRpb25zWydzb3J0J10sXG4gIGFsbG93RG90czogU3RyaW5naWZ5T3B0aW9uc1snYWxsb3dEb3RzJ10sXG4gIHNlcmlhbGl6ZURhdGU6IFN0cmluZ2lmeU9wdGlvbnNbJ3NlcmlhbGl6ZURhdGUnXSxcbiAgZm9ybWF0OiBTdHJpbmdpZnlPcHRpb25zWydmb3JtYXQnXSxcbiAgZm9ybWF0dGVyOiBTdHJpbmdpZnlPcHRpb25zWydmb3JtYXR0ZXInXSxcbiAgZW5jb2RlVmFsdWVzT25seTogYm9vbGVhbixcbiAgY2hhcnNldDogU3RyaW5naWZ5T3B0aW9uc1snY2hhcnNldCddLFxuICBzaWRlQ2hhbm5lbDogV2Vha01hcDxhbnksIGFueT4sXG4pIHtcbiAgbGV0IG9iaiA9IG9iamVjdDtcblxuICBsZXQgdG1wX3NjID0gc2lkZUNoYW5uZWw7XG4gIGxldCBzdGVwID0gMDtcbiAgbGV0IGZpbmRfZmxhZyA9IGZhbHNlO1xuICB3aGlsZSAoKHRtcF9zYyA9IHRtcF9zYy5nZXQoc2VudGluZWwpKSAhPT0gdm9pZCB1bmRlZmluZWQgJiYgIWZpbmRfZmxhZykge1xuICAgIC8vIFdoZXJlIG9iamVjdCBsYXN0IGFwcGVhcmVkIGluIHRoZSByZWYgdHJlZVxuICAgIGNvbnN0IHBvcyA9IHRtcF9zYy5nZXQob2JqZWN0KTtcbiAgICBzdGVwICs9IDE7XG4gICAgaWYgKHR5cGVvZiBwb3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAocG9zID09PSBzdGVwKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDeWNsaWMgb2JqZWN0IHZhbHVlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5kX2ZsYWcgPSB0cnVlOyAvLyBCcmVhayB3aGlsZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHRtcF9zYy5nZXQoc2VudGluZWwpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgc3RlcCA9IDA7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvYmogPSBmaWx0ZXIocHJlZml4LCBvYmopO1xuICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBvYmogPSBzZXJpYWxpemVEYXRlPy4ob2JqKTtcbiAgfSBlbHNlIGlmIChnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGlzX2FycmF5KG9iaikpIHtcbiAgICBvYmogPSBtYXliZV9tYXAob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGU/Lih2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgP1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ2tleScsIGZvcm1hdClcbiAgICAgICAgOiBwcmVmaXg7XG4gICAgfVxuXG4gICAgb2JqID0gJyc7XG4gIH1cblxuICBpZiAoaXNfbm9uX251bGxpc2hfcHJpbWl0aXZlKG9iaikgfHwgaXNfYnVmZmVyKG9iaikpIHtcbiAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgY29uc3Qga2V5X3ZhbHVlID1cbiAgICAgICAgZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgOiBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ2tleScsIGZvcm1hdCk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBmb3JtYXR0ZXI/LihrZXlfdmFsdWUpICtcbiAgICAgICAgICAnPScgK1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBmb3JtYXR0ZXI/LihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ3ZhbHVlJywgZm9ybWF0KSksXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW2Zvcm1hdHRlcj8uKHByZWZpeCkgKyAnPScgKyBmb3JtYXR0ZXI/LihTdHJpbmcob2JqKSldO1xuICB9XG5cbiAgY29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBsZXQgb2JqX2tleXM7XG4gIGlmIChnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGlzX2FycmF5KG9iaikpIHtcbiAgICAvLyB3ZSBuZWVkIHRvIGpvaW4gZWxlbWVudHMgaW5cbiAgICBpZiAoZW5jb2RlVmFsdWVzT25seSAmJiBlbmNvZGVyKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHZhbHVlcyBvbmx5XG4gICAgICBvYmogPSBtYXliZV9tYXAob2JqLCBlbmNvZGVyKTtcbiAgICB9XG4gICAgb2JqX2tleXMgPSBbeyB2YWx1ZTogb2JqLmxlbmd0aCA+IDAgPyBvYmouam9pbignLCcpIHx8IG51bGwgOiB2b2lkIHVuZGVmaW5lZCB9XTtcbiAgfSBlbHNlIGlmIChpc19hcnJheShmaWx0ZXIpKSB7XG4gICAgb2JqX2tleXMgPSBmaWx0ZXI7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgb2JqX2tleXMgPSBzb3J0ID8ga2V5cy5zb3J0KHNvcnQpIDoga2V5cztcbiAgfVxuXG4gIGNvbnN0IGVuY29kZWRfcHJlZml4ID0gZW5jb2RlRG90SW5LZXlzID8gU3RyaW5nKHByZWZpeCkucmVwbGFjZSgvXFwuL2csICclMkUnKSA6IFN0cmluZyhwcmVmaXgpO1xuXG4gIGNvbnN0IGFkanVzdGVkX3ByZWZpeCA9XG4gICAgY29tbWFSb3VuZFRyaXAgJiYgaXNfYXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoID09PSAxID8gZW5jb2RlZF9wcmVmaXggKyAnW10nIDogZW5jb2RlZF9wcmVmaXg7XG5cbiAgaWYgKGFsbG93RW1wdHlBcnJheXMgJiYgaXNfYXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGFkanVzdGVkX3ByZWZpeCArICdbXSc7XG4gIH1cblxuICBmb3IgKGxldCBqID0gMDsgaiA8IG9ial9rZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgY29uc3Qga2V5ID0gb2JqX2tleXNbal07XG4gICAgY29uc3QgdmFsdWUgPVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdHlwZW9mIGtleSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGtleS52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyBrZXkudmFsdWUgOiBvYmpba2V5IGFzIGFueV07XG5cbiAgICBpZiAoc2tpcE51bGxzICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgZW5jb2RlZF9rZXkgPSBhbGxvd0RvdHMgJiYgZW5jb2RlRG90SW5LZXlzID8gKGtleSBhcyBhbnkpLnJlcGxhY2UoL1xcLi9nLCAnJTJFJykgOiBrZXk7XG4gICAgY29uc3Qga2V5X3ByZWZpeCA9XG4gICAgICBpc19hcnJheShvYmopID9cbiAgICAgICAgdHlwZW9mIGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgoYWRqdXN0ZWRfcHJlZml4LCBlbmNvZGVkX2tleSlcbiAgICAgICAgOiBhZGp1c3RlZF9wcmVmaXhcbiAgICAgIDogYWRqdXN0ZWRfcHJlZml4ICsgKGFsbG93RG90cyA/ICcuJyArIGVuY29kZWRfa2V5IDogJ1snICsgZW5jb2RlZF9rZXkgKyAnXScpO1xuXG4gICAgc2lkZUNoYW5uZWwuc2V0KG9iamVjdCwgc3RlcCk7XG4gICAgY29uc3QgdmFsdWVTaWRlQ2hhbm5lbCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdmFsdWVTaWRlQ2hhbm5lbC5zZXQoc2VudGluZWwsIHNpZGVDaGFubmVsKTtcbiAgICBwdXNoX3RvX2FycmF5KFxuICAgICAgdmFsdWVzLFxuICAgICAgaW5uZXJfc3RyaW5naWZ5KFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAga2V5X3ByZWZpeCxcbiAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgY29tbWFSb3VuZFRyaXAsXG4gICAgICAgIGFsbG93RW1wdHlBcnJheXMsXG4gICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICBlbmNvZGVEb3RJbktleXMsXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBlbmNvZGVWYWx1ZXNPbmx5ICYmIGlzX2FycmF5KG9iaikgPyBudWxsIDogZW5jb2RlcixcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzb3J0LFxuICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgIGZvcm1hdCxcbiAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICBjaGFyc2V0LFxuICAgICAgICB2YWx1ZVNpZGVDaGFubmVsLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplX3N0cmluZ2lmeV9vcHRpb25zKFxuICBvcHRzOiBTdHJpbmdpZnlPcHRpb25zID0gZGVmYXVsdHMsXG4pOiBOb25OdWxsYWJsZVByb3BlcnRpZXM8T21pdDxTdHJpbmdpZnlPcHRpb25zLCAnaW5kaWNlcyc+PiAmIHsgaW5kaWNlcz86IGJvb2xlYW4gfSB7XG4gIGlmICh0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzICE9PSAnYm9vbGVhbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgYWxsb3dFbXB0eUFycmF5c2Agb3B0aW9uIGNhbiBvbmx5IGJlIGB0cnVlYCBvciBgZmFsc2VgLCB3aGVuIHByb3ZpZGVkJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdHMuZW5jb2RlRG90SW5LZXlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVEb3RJbktleXMgIT09ICdib29sZWFuJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BlbmNvZGVEb3RJbktleXNgIG9wdGlvbiBjYW4gb25seSBiZSBgdHJ1ZWAgb3IgYGZhbHNlYCwgd2hlbiBwcm92aWRlZCcpO1xuICB9XG5cbiAgaWYgKG9wdHMuZW5jb2RlciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIGNvbnN0IGNoYXJzZXQgPSBvcHRzLmNoYXJzZXQgfHwgZGVmYXVsdHMuY2hhcnNldDtcbiAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gIH1cblxuICBsZXQgZm9ybWF0ID0gZGVmYXVsdF9mb3JtYXQ7XG4gIGlmICh0eXBlb2Ygb3B0cy5mb3JtYXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKCFoYXMuY2FsbChmb3JtYXR0ZXJzLCBvcHRzLmZvcm1hdCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgZm9ybWF0ID0gb3B0cy5mb3JtYXQ7XG4gIH1cbiAgY29uc3QgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmb3JtYXRdO1xuXG4gIGxldCBmaWx0ZXIgPSBkZWZhdWx0cy5maWx0ZXI7XG4gIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicgfHwgaXNfYXJyYXkob3B0cy5maWx0ZXIpKSB7XG4gICAgZmlsdGVyID0gb3B0cy5maWx0ZXI7XG4gIH1cblxuICBsZXQgYXJyYXlGb3JtYXQ6IFN0cmluZ2lmeU9wdGlvbnNbJ2FycmF5Rm9ybWF0J107XG4gIGlmIChvcHRzLmFycmF5Rm9ybWF0ICYmIG9wdHMuYXJyYXlGb3JtYXQgaW4gYXJyYXlfcHJlZml4X2dlbmVyYXRvcnMpIHtcbiAgICBhcnJheUZvcm1hdCA9IG9wdHMuYXJyYXlGb3JtYXQ7XG4gIH0gZWxzZSBpZiAoJ2luZGljZXMnIGluIG9wdHMpIHtcbiAgICBhcnJheUZvcm1hdCA9IG9wdHMuaW5kaWNlcyA/ICdpbmRpY2VzJyA6ICdyZXBlYXQnO1xuICB9IGVsc2Uge1xuICAgIGFycmF5Rm9ybWF0ID0gZGVmYXVsdHMuYXJyYXlGb3JtYXQ7XG4gIH1cblxuICBpZiAoJ2NvbW1hUm91bmRUcmlwJyBpbiBvcHRzICYmIHR5cGVvZiBvcHRzLmNvbW1hUm91bmRUcmlwICE9PSAnYm9vbGVhbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgY29tbWFSb3VuZFRyaXBgIG11c3QgYmUgYSBib29sZWFuLCBvciBhYnNlbnQnKTtcbiAgfVxuXG4gIGNvbnN0IGFsbG93RG90cyA9XG4gICAgdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/XG4gICAgICAhIW9wdHMuZW5jb2RlRG90SW5LZXlzID09PSB0cnVlID9cbiAgICAgICAgdHJ1ZVxuICAgICAgOiBkZWZhdWx0cy5hbGxvd0RvdHNcbiAgICA6ICEhb3B0cy5hbGxvd0RvdHM7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRRdWVyeVByZWZpeDogdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgYWxsb3dEb3RzOiBhbGxvd0RvdHMsXG4gICAgYWxsb3dFbXB0eUFycmF5czpcbiAgICAgIHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgPT09ICdib29sZWFuJyA/ICEhb3B0cy5hbGxvd0VtcHR5QXJyYXlzIDogZGVmYXVsdHMuYWxsb3dFbXB0eUFycmF5cyxcbiAgICBhcnJheUZvcm1hdDogYXJyYXlGb3JtYXQsXG4gICAgY2hhcnNldDogY2hhcnNldCxcbiAgICBjaGFyc2V0U2VudGluZWw6XG4gICAgICB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgIGNvbW1hUm91bmRUcmlwOiAhIW9wdHMuY29tbWFSb3VuZFRyaXAsXG4gICAgZGVsaW1pdGVyOiB0eXBlb2Ygb3B0cy5kZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuZGVsaW1pdGVyIDogb3B0cy5kZWxpbWl0ZXIsXG4gICAgZW5jb2RlOiB0eXBlb2Ygb3B0cy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlLFxuICAgIGVuY29kZURvdEluS2V5czpcbiAgICAgIHR5cGVvZiBvcHRzLmVuY29kZURvdEluS2V5cyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVEb3RJbktleXMgOiBkZWZhdWx0cy5lbmNvZGVEb3RJbktleXMsXG4gICAgZW5jb2RlcjogdHlwZW9mIG9wdHMuZW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuZW5jb2RlciA6IGRlZmF1bHRzLmVuY29kZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seTpcbiAgICAgIHR5cGVvZiBvcHRzLmVuY29kZVZhbHVlc09ubHkgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlVmFsdWVzT25seSA6IGRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHksXG4gICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgc2VyaWFsaXplRGF0ZTogdHlwZW9mIG9wdHMuc2VyaWFsaXplRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuc2VyaWFsaXplRGF0ZSA6IGRlZmF1bHRzLnNlcmlhbGl6ZURhdGUsXG4gICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzb3J0OiB0eXBlb2Ygb3B0cy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5zb3J0IDogbnVsbCxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6XG4gICAgICB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5KG9iamVjdDogYW55LCBvcHRzOiBTdHJpbmdpZnlPcHRpb25zID0ge30pIHtcbiAgbGV0IG9iaiA9IG9iamVjdDtcbiAgY29uc3Qgb3B0aW9ucyA9IG5vcm1hbGl6ZV9zdHJpbmdpZnlfb3B0aW9ucyhvcHRzKTtcblxuICBsZXQgb2JqX2tleXM6IFByb3BlcnR5S2V5W10gfCB1bmRlZmluZWQ7XG4gIGxldCBmaWx0ZXI7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgfSBlbHNlIGlmIChpc19hcnJheShvcHRpb25zLmZpbHRlcikpIHtcbiAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcbiAgICBvYmpfa2V5cyA9IGZpbHRlcjtcbiAgfVxuXG4gIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGdlbmVyYXRlQXJyYXlQcmVmaXggPSBhcnJheV9wcmVmaXhfZ2VuZXJhdG9yc1tvcHRpb25zLmFycmF5Rm9ybWF0XTtcbiAgY29uc3QgY29tbWFSb3VuZFRyaXAgPSBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIG9wdGlvbnMuY29tbWFSb3VuZFRyaXA7XG5cbiAgaWYgKCFvYmpfa2V5cykge1xuICAgIG9ial9rZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICBvYmpfa2V5cy5zb3J0KG9wdGlvbnMuc29ydCk7XG4gIH1cblxuICBjb25zdCBzaWRlQ2hhbm5lbCA9IG5ldyBXZWFrTWFwKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqX2tleXMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBrZXkgPSBvYmpfa2V5c1tpXSE7XG5cbiAgICBpZiAob3B0aW9ucy5za2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwdXNoX3RvX2FycmF5KFxuICAgICAga2V5cyxcbiAgICAgIGlubmVyX3N0cmluZ2lmeShcbiAgICAgICAgb2JqW2tleV0sXG4gICAgICAgIGtleSxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICBjb21tYVJvdW5kVHJpcCxcbiAgICAgICAgb3B0aW9ucy5hbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgb3B0aW9ucy5za2lwTnVsbHMsXG4gICAgICAgIG9wdGlvbnMuZW5jb2RlRG90SW5LZXlzLFxuICAgICAgICBvcHRpb25zLmVuY29kZSA/IG9wdGlvbnMuZW5jb2RlciA6IG51bGwsXG4gICAgICAgIG9wdGlvbnMuZmlsdGVyLFxuICAgICAgICBvcHRpb25zLnNvcnQsXG4gICAgICAgIG9wdGlvbnMuYWxsb3dEb3RzLFxuICAgICAgICBvcHRpb25zLnNlcmlhbGl6ZURhdGUsXG4gICAgICAgIG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICBvcHRpb25zLmZvcm1hdHRlcixcbiAgICAgICAgb3B0aW9ucy5lbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICBvcHRpb25zLmNoYXJzZXQsXG4gICAgICAgIHNpZGVDaGFubmVsLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgam9pbmVkID0ga2V5cy5qb2luKG9wdGlvbnMuZGVsaW1pdGVyKTtcbiAgbGV0IHByZWZpeCA9IG9wdGlvbnMuYWRkUXVlcnlQcmVmaXggPT09IHRydWUgPyAnPycgOiAnJztcblxuICBpZiAob3B0aW9ucy5jaGFyc2V0U2VudGluZWwpIHtcbiAgICBpZiAob3B0aW9ucy5jaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKSwgdGhlIFwibnVtZXJpYyBlbnRpdHlcIiByZXByZXNlbnRhdGlvbiBvZiBhIGNoZWNrbWFya1xuICAgICAgcHJlZml4ICs9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJic7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgnXHUyNzEzJylcbiAgICAgIHByZWZpeCArPSAndXRmOD0lRTIlOUMlOTMmJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDAgPyBwcmVmaXggKyBqb2luZWQgOiAnJztcbn1cbiIsICJleHBvcnQgY29uc3QgVkVSU0lPTiA9ICc0Ljg5LjAnOyAvLyB4LXJlbGVhc2UtcGxlYXNlLXZlcnNpb25cbiIsICIvKipcbiAqIERpc2NsYWltZXI6IG1vZHVsZXMgaW4gX3NoaW1zIGFyZW4ndCBpbnRlbmRlZCB0byBiZSBpbXBvcnRlZCBieSBTREsgdXNlcnMuXG4gKi9cbmltcG9ydCB7IHR5cGUgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBTaGltcyB7XG4gIGtpbmQ6IHN0cmluZztcbiAgZmV0Y2g6IGFueTtcbiAgUmVxdWVzdDogYW55O1xuICBSZXNwb25zZTogYW55O1xuICBIZWFkZXJzOiBhbnk7XG4gIEZvcm1EYXRhOiBhbnk7XG4gIEJsb2I6IGFueTtcbiAgRmlsZTogYW55O1xuICBSZWFkYWJsZVN0cmVhbTogYW55O1xuICBnZXRNdWx0aXBhcnRSZXF1ZXN0T3B0aW9uczogPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgZm9ybTogU2hpbXNbJ0Zvcm1EYXRhJ10sXG4gICAgb3B0czogUmVxdWVzdE9wdGlvbnM8VD4sXG4gICkgPT4gUHJvbWlzZTxSZXF1ZXN0T3B0aW9uczxUPj47XG4gIGdldERlZmF1bHRBZ2VudDogKHVybDogc3RyaW5nKSA9PiBhbnk7XG4gIGZpbGVGcm9tUGF0aDpcbiAgICB8ICgocGF0aDogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZywgb3B0aW9ucz86IHt9KSA9PiBQcm9taXNlPFNoaW1zWydGaWxlJ10+KVxuICAgIHwgKChwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiB7fSkgPT4gUHJvbWlzZTxTaGltc1snRmlsZSddPik7XG4gIGlzRnNSZWFkU3RyZWFtOiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGxldCBhdXRvID0gZmFsc2U7XG5leHBvcnQgbGV0IGtpbmQ6IFNoaW1zWydraW5kJ10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IGZldGNoOiBTaGltc1snZmV0Y2gnXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbmV4cG9ydCBsZXQgUmVxdWVzdDogU2hpbXNbJ1JlcXVlc3QnXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbmV4cG9ydCBsZXQgUmVzcG9uc2U6IFNoaW1zWydSZXNwb25zZSddIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuZXhwb3J0IGxldCBIZWFkZXJzOiBTaGltc1snSGVhZGVycyddIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuZXhwb3J0IGxldCBGb3JtRGF0YTogU2hpbXNbJ0Zvcm1EYXRhJ10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IEJsb2I6IFNoaW1zWydCbG9iJ10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IEZpbGU6IFNoaW1zWydGaWxlJ10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IFJlYWRhYmxlU3RyZWFtOiBTaGltc1snUmVhZGFibGVTdHJlYW0nXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbmV4cG9ydCBsZXQgZ2V0TXVsdGlwYXJ0UmVxdWVzdE9wdGlvbnM6IFNoaW1zWydnZXRNdWx0aXBhcnRSZXF1ZXN0T3B0aW9ucyddIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuZXhwb3J0IGxldCBnZXREZWZhdWx0QWdlbnQ6IFNoaW1zWydnZXREZWZhdWx0QWdlbnQnXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbmV4cG9ydCBsZXQgZmlsZUZyb21QYXRoOiBTaGltc1snZmlsZUZyb21QYXRoJ10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5leHBvcnQgbGV0IGlzRnNSZWFkU3RyZWFtOiBTaGltc1snaXNGc1JlYWRTdHJlYW0nXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNoaW1zKHNoaW1zOiBTaGltcywgb3B0aW9uczogeyBhdXRvOiBib29sZWFuIH0gPSB7IGF1dG86IGZhbHNlIH0pIHtcbiAgaWYgKGF1dG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgeW91IG11c3QgXFxgaW1wb3J0ICdvcGVuYWkvc2hpbXMvJHtzaGltcy5raW5kfSdcXGAgYmVmb3JlIGltcG9ydGluZyBhbnl0aGluZyBlbHNlIGZyb20gb3BlbmFpYCxcbiAgICApO1xuICB9XG4gIGlmIChraW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBcXGBpbXBvcnQgJ29wZW5haS9zaGltcy8ke3NoaW1zLmtpbmR9J1xcYCBhZnRlciBcXGBpbXBvcnQgJ29wZW5haS9zaGltcy8ke2tpbmR9J1xcYGApO1xuICB9XG4gIGF1dG8gPSBvcHRpb25zLmF1dG87XG4gIGtpbmQgPSBzaGltcy5raW5kO1xuICBmZXRjaCA9IHNoaW1zLmZldGNoO1xuICBSZXF1ZXN0ID0gc2hpbXMuUmVxdWVzdDtcbiAgUmVzcG9uc2UgPSBzaGltcy5SZXNwb25zZTtcbiAgSGVhZGVycyA9IHNoaW1zLkhlYWRlcnM7XG4gIEZvcm1EYXRhID0gc2hpbXMuRm9ybURhdGE7XG4gIEJsb2IgPSBzaGltcy5CbG9iO1xuICBGaWxlID0gc2hpbXMuRmlsZTtcbiAgUmVhZGFibGVTdHJlYW0gPSBzaGltcy5SZWFkYWJsZVN0cmVhbTtcbiAgZ2V0TXVsdGlwYXJ0UmVxdWVzdE9wdGlvbnMgPSBzaGltcy5nZXRNdWx0aXBhcnRSZXF1ZXN0T3B0aW9ucztcbiAgZ2V0RGVmYXVsdEFnZW50ID0gc2hpbXMuZ2V0RGVmYXVsdEFnZW50O1xuICBmaWxlRnJvbVBhdGggPSBzaGltcy5maWxlRnJvbVBhdGg7XG4gIGlzRnNSZWFkU3RyZWFtID0gc2hpbXMuaXNGc1JlYWRTdHJlYW07XG59XG4iLCAiLyoqXG4gKiBEaXNjbGFpbWVyOiBtb2R1bGVzIGluIF9zaGltcyBhcmVuJ3QgaW50ZW5kZWQgdG8gYmUgaW1wb3J0ZWQgYnkgU0RLIHVzZXJzLlxuICovXG5pbXBvcnQgKiBhcyBuZiBmcm9tICdub2RlLWZldGNoJztcbmltcG9ydCAqIGFzIGZkIGZyb20gJ2Zvcm1kYXRhLW5vZGUnO1xuaW1wb3J0IHsgdHlwZSBGaWxlLCB0eXBlIEZpbGVQcm9wZXJ0eUJhZyB9IGZyb20gJ2Zvcm1kYXRhLW5vZGUnO1xuaW1wb3J0IEtlZXBBbGl2ZUFnZW50IGZyb20gJ2FnZW50a2VlcGFsaXZlJztcbmltcG9ydCB7IEFib3J0Q29udHJvbGxlciBhcyBBYm9ydENvbnRyb2xsZXJQb2x5ZmlsbCB9IGZyb20gJ2Fib3J0LWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgUmVhZFN0cmVhbSBhcyBGc1JlYWRTdHJlYW0gfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHR5cGUgQWdlbnQgfSBmcm9tICdub2RlOmh0dHAnO1xuaW1wb3J0IHsgRm9ybURhdGFFbmNvZGVyIH0gZnJvbSAnZm9ybS1kYXRhLWVuY29kZXInO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBNdWx0aXBhcnRCb2R5IH0gZnJvbSAnLi9NdWx0aXBhcnRCb2R5JztcbmltcG9ydCB7IHR5cGUgU2hpbXMgfSBmcm9tICcuL3JlZ2lzdHJ5JztcbmltcG9ydCB7IFJlYWRhYmxlU3RyZWFtIH0gZnJvbSAnbm9kZTpzdHJlYW0vd2ViJztcblxudHlwZSBGaWxlRnJvbVBhdGhPcHRpb25zID0gT21pdDxGaWxlUHJvcGVydHlCYWcsICdsYXN0TW9kaWZpZWQnPjtcblxubGV0IGZpbGVGcm9tUGF0aFdhcm5lZCA9IGZhbHNlO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBmcy5jcmVhdGVSZWFkU3RyZWFtKCcuL215L2ZpbGUudHh0JykgaW5zdGVhZFxuICovXG5hc3luYyBmdW5jdGlvbiBmaWxlRnJvbVBhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTxGaWxlPjtcbmFzeW5jIGZ1bmN0aW9uIGZpbGVGcm9tUGF0aChwYXRoOiBzdHJpbmcsIGZpbGVuYW1lPzogc3RyaW5nKTogUHJvbWlzZTxGaWxlPjtcbmFzeW5jIGZ1bmN0aW9uIGZpbGVGcm9tUGF0aChwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBGaWxlRnJvbVBhdGhPcHRpb25zKTogUHJvbWlzZTxGaWxlPjtcbmFzeW5jIGZ1bmN0aW9uIGZpbGVGcm9tUGF0aChwYXRoOiBzdHJpbmcsIGZpbGVuYW1lPzogc3RyaW5nLCBvcHRpb25zPzogRmlsZUZyb21QYXRoT3B0aW9ucyk6IFByb21pc2U8RmlsZT47XG5hc3luYyBmdW5jdGlvbiBmaWxlRnJvbVBhdGgocGF0aDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8RmlsZT4ge1xuICAvLyB0aGlzIGltcG9ydCBmYWlscyBpbiBlbnZpcm9ubWVudHMgdGhhdCBkb24ndCBoYW5kbGUgZXhwb3J0IG1hcHMgY29ycmVjdGx5LCBsaWtlIG9sZCB2ZXJzaW9ucyBvZiBKZXN0XG4gIGNvbnN0IHsgZmlsZUZyb21QYXRoOiBfZmlsZUZyb21QYXRoIH0gPSBhd2FpdCBpbXBvcnQoJ2Zvcm1kYXRhLW5vZGUvZmlsZS1mcm9tLXBhdGgnKTtcblxuICBpZiAoIWZpbGVGcm9tUGF0aFdhcm5lZCkge1xuICAgIGNvbnNvbGUud2FybihgZmlsZUZyb21QYXRoIGlzIGRlcHJlY2F0ZWQ7IHVzZSBmcy5jcmVhdGVSZWFkU3RyZWFtKCR7SlNPTi5zdHJpbmdpZnkocGF0aCl9KSBpbnN0ZWFkYCk7XG4gICAgZmlsZUZyb21QYXRoV2FybmVkID0gdHJ1ZTtcbiAgfVxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBhd2FpdCBfZmlsZUZyb21QYXRoKHBhdGgsIC4uLmFyZ3MpO1xufVxuXG5jb25zdCBkZWZhdWx0SHR0cEFnZW50OiBBZ2VudCA9IG5ldyBLZWVwQWxpdmVBZ2VudCh7IGtlZXBBbGl2ZTogdHJ1ZSwgdGltZW91dDogNSAqIDYwICogMTAwMCB9KTtcbmNvbnN0IGRlZmF1bHRIdHRwc0FnZW50OiBBZ2VudCA9IG5ldyBLZWVwQWxpdmVBZ2VudC5IdHRwc0FnZW50KHsga2VlcEFsaXZlOiB0cnVlLCB0aW1lb3V0OiA1ICogNjAgKiAxMDAwIH0pO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRNdWx0aXBhcnRSZXF1ZXN0T3B0aW9uczxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICBmb3JtOiBmZC5Gb3JtRGF0YSxcbiAgb3B0czogUmVxdWVzdE9wdGlvbnM8VD4sXG4pOiBQcm9taXNlPFJlcXVlc3RPcHRpb25zPFQ+PiB7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgRm9ybURhdGFFbmNvZGVyKGZvcm0pO1xuICBjb25zdCByZWFkYWJsZSA9IFJlYWRhYmxlLmZyb20oZW5jb2Rlcik7XG4gIGNvbnN0IGJvZHkgPSBuZXcgTXVsdGlwYXJ0Qm9keShyZWFkYWJsZSk7XG4gIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgLi4ub3B0cy5oZWFkZXJzLFxuICAgIC4uLmVuY29kZXIuaGVhZGVycyxcbiAgICAnQ29udGVudC1MZW5ndGgnOiBlbmNvZGVyLmNvbnRlbnRMZW5ndGgsXG4gIH07XG5cbiAgcmV0dXJuIHsgLi4ub3B0cywgYm9keTogYm9keSBhcyBhbnksIGhlYWRlcnMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bnRpbWUoKTogU2hpbXMge1xuICAvLyBQb2x5ZmlsbCBnbG9iYWwgb2JqZWN0IGlmIG5lZWRlZC5cbiAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAodGhlIHR5cGVzIGFyZSBzdWJ0bHkgZGlmZmVyZW50LCBidXQgY29tcGF0aWJsZSBpbiBwcmFjdGljZSlcbiAgICBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlciA9IEFib3J0Q29udHJvbGxlclBvbHlmaWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAga2luZDogJ25vZGUnLFxuICAgIGZldGNoOiBuZi5kZWZhdWx0LFxuICAgIFJlcXVlc3Q6IG5mLlJlcXVlc3QsXG4gICAgUmVzcG9uc2U6IG5mLlJlc3BvbnNlLFxuICAgIEhlYWRlcnM6IG5mLkhlYWRlcnMsXG4gICAgRm9ybURhdGE6IGZkLkZvcm1EYXRhLFxuICAgIEJsb2I6IGZkLkJsb2IsXG4gICAgRmlsZTogZmQuRmlsZSxcbiAgICBSZWFkYWJsZVN0cmVhbSxcbiAgICBnZXRNdWx0aXBhcnRSZXF1ZXN0T3B0aW9ucyxcbiAgICBnZXREZWZhdWx0QWdlbnQ6ICh1cmw6IHN0cmluZyk6IEFnZW50ID0+ICh1cmwuc3RhcnRzV2l0aCgnaHR0cHMnKSA/IGRlZmF1bHRIdHRwc0FnZW50IDogZGVmYXVsdEh0dHBBZ2VudCksXG4gICAgZmlsZUZyb21QYXRoLFxuICAgIGlzRnNSZWFkU3RyZWFtOiAodmFsdWU6IGFueSk6IHZhbHVlIGlzIEZzUmVhZFN0cmVhbSA9PiB2YWx1ZSBpbnN0YW5jZW9mIEZzUmVhZFN0cmVhbSxcbiAgfTtcbn1cbiIsICJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfRm9ybURhdGFfaW5zdGFuY2VzLCBfRm9ybURhdGFfZW50cmllcywgX0Zvcm1EYXRhX3NldEVudHJ5O1xuaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gXCJ1dGlsXCI7XG5pbXBvcnQgeyBGaWxlIH0gZnJvbSBcIi4vRmlsZS5qc1wiO1xuaW1wb3J0IHsgaXNGaWxlIH0gZnJvbSBcIi4vaXNGaWxlLmpzXCI7XG5pbXBvcnQgeyBpc0Jsb2IgfSBmcm9tIFwiLi9pc0Jsb2IuanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi9pc0Z1bmN0aW9uLmpzXCI7XG5pbXBvcnQgeyBkZXByZWNhdGVDb25zdHJ1Y3RvckVudHJpZXMgfSBmcm9tIFwiLi9kZXByZWNhdGVDb25zdHJ1Y3RvckVudHJpZXMuanNcIjtcbmV4cG9ydCBjbGFzcyBGb3JtRGF0YSB7XG4gICAgY29uc3RydWN0b3IoZW50cmllcykge1xuICAgICAgICBfRm9ybURhdGFfaW5zdGFuY2VzLmFkZCh0aGlzKTtcbiAgICAgICAgX0Zvcm1EYXRhX2VudHJpZXMuc2V0KHRoaXMsIG5ldyBNYXAoKSk7XG4gICAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgICAgICBkZXByZWNhdGVDb25zdHJ1Y3RvckVudHJpZXMoKTtcbiAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaCgoeyBuYW1lLCB2YWx1ZSwgZmlsZU5hbWUgfSkgPT4gdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUsIGZpbGVOYW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIFsoX0Zvcm1EYXRhX2VudHJpZXMgPSBuZXcgV2Vha01hcCgpLCBfRm9ybURhdGFfaW5zdGFuY2VzID0gbmV3IFdlYWtTZXQoKSwgU3ltYm9sLmhhc0luc3RhbmNlKV0odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odmFsdWVcbiAgICAgICAgICAgICYmIGlzRnVuY3Rpb24odmFsdWUuY29uc3RydWN0b3IpXG4gICAgICAgICAgICAmJiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSBcIkZvcm1EYXRhXCJcbiAgICAgICAgICAgICYmIGlzRnVuY3Rpb24odmFsdWUuYXBwZW5kKVxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5zZXQpXG4gICAgICAgICAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgICYmIGlzRnVuY3Rpb24odmFsdWUuZ2V0QWxsKVxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5oYXMpXG4gICAgICAgICAgICAmJiBpc0Z1bmN0aW9uKHZhbHVlLmRlbGV0ZSlcbiAgICAgICAgICAgICYmIGlzRnVuY3Rpb24odmFsdWUuZW50cmllcylcbiAgICAgICAgICAgICYmIGlzRnVuY3Rpb24odmFsdWUudmFsdWVzKVxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5rZXlzKVxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdKVxuICAgICAgICAgICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5mb3JFYWNoKSk7XG4gICAgfVxuICAgIGFwcGVuZChuYW1lLCB2YWx1ZSwgZmlsZU5hbWUpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFfaW5zdGFuY2VzLCBcIm1cIiwgX0Zvcm1EYXRhX3NldEVudHJ5KS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJhd1ZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGFyZ3NMZW5ndGg6IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNldChuYW1lLCB2YWx1ZSwgZmlsZU5hbWUpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFfaW5zdGFuY2VzLCBcIm1cIiwgX0Zvcm1EYXRhX3NldEVudHJ5KS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgIGFwcGVuZDogZmFsc2UsXG4gICAgICAgICAgICByYXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBhcmdzTGVuZ3RoOiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQobmFtZSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhX2VudHJpZXMsIFwiZlwiKS5nZXQoU3RyaW5nKG5hbWUpKTtcbiAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkWzBdO1xuICAgIH1cbiAgICBnZXRBbGwobmFtZSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhX2VudHJpZXMsIFwiZlwiKS5nZXQoU3RyaW5nKG5hbWUpKTtcbiAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWVsZC5zbGljZSgpO1xuICAgIH1cbiAgICBoYXMobmFtZSkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFfZW50cmllcywgXCJmXCIpLmhhcyhTdHJpbmcobmFtZSkpO1xuICAgIH1cbiAgICBkZWxldGUobmFtZSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YV9lbnRyaWVzLCBcImZcIikuZGVsZXRlKFN0cmluZyhuYW1lKSk7XG4gICAgfVxuICAgICprZXlzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YV9lbnRyaWVzLCBcImZcIikua2V5cygpKSB7XG4gICAgICAgICAgICB5aWVsZCBrZXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKmVudHJpZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLmtleXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRBbGwobmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHlpZWxkIFtuYW1lLCB2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnZhbHVlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgWyhfRm9ybURhdGFfc2V0RW50cnkgPSBmdW5jdGlvbiBfRm9ybURhdGFfc2V0RW50cnkoeyBuYW1lLCByYXdWYWx1ZSwgYXBwZW5kLCBmaWxlTmFtZSwgYXJnc0xlbmd0aCB9KSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBhcHBlbmQgPyBcImFwcGVuZFwiIDogXCJzZXRcIjtcbiAgICAgICAgaWYgKGFyZ3NMZW5ndGggPCAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBGYWlsZWQgdG8gZXhlY3V0ZSAnJHttZXRob2ROYW1lfScgb24gJ0Zvcm1EYXRhJzogYFxuICAgICAgICAgICAgICAgICsgYDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAke2FyZ3NMZW5ndGh9IHByZXNlbnQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKTtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBpZiAoaXNGaWxlKHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBmaWxlTmFtZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyByYXdWYWx1ZVxuICAgICAgICAgICAgICAgIDogbmV3IEZpbGUoW3Jhd1ZhbHVlXSwgZmlsZU5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcmF3VmFsdWUudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiByYXdWYWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0Jsb2IocmF3VmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBGaWxlKFtyYXdWYWx1ZV0sIGZpbGVOYW1lID09PSB1bmRlZmluZWQgPyBcImJsb2JcIiA6IGZpbGVOYW1lLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogcmF3VmFsdWUudHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlICcke21ldGhvZE5hbWV9JyBvbiAnRm9ybURhdGEnOiBgXG4gICAgICAgICAgICAgICAgKyBcInBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFN0cmluZyhyYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFfZW50cmllcywgXCJmXCIpLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB2b2lkIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhX2VudHJpZXMsIFwiZlwiKS5zZXQobmFtZSwgW3ZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcHBlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiB2b2lkIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhX2VudHJpZXMsIFwiZlwiKS5zZXQobmFtZSwgW3ZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH0sIFN5bWJvbC5pdGVyYXRvcildKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XG4gICAgfVxuICAgIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWUsIG5hbWUsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiRm9ybURhdGFcIjtcbiAgICB9XG4gICAgW2luc3BlY3QuY3VzdG9tXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQmxvYiB9IGZyb20gXCIuL0Jsb2IuanNcIjtcbmV4cG9ydCBjb25zdCBpc0Jsb2IgPSAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgQmxvYjtcbiIsICJpbXBvcnQgeyBkZXByZWNhdGUgfSBmcm9tIFwidXRpbFwiO1xuZXhwb3J0IGNvbnN0IGRlcHJlY2F0ZUNvbnN0cnVjdG9yRW50cmllcyA9IGRlcHJlY2F0ZSgoKSA9PiB7IH0sIFwiQ29uc3RydWN0b3IgXFxcImVudHJpZXNcXFwiIGFyZ3VtZW50IGlzIG5vdCBzcGVjLWNvbXBsaWFudCBcIlxuICAgICsgXCJhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cIik7XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vRm9ybURhdGEuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0Jsb2IuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0ZpbGUuanNcIjtcbiIsICJjb25zdCBhbHBoYWJldCA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCI7XG5mdW5jdGlvbiBjcmVhdGVCb3VuZGFyeSgpIHtcbiAgICBsZXQgc2l6ZSA9IDE2O1xuICAgIGxldCByZXMgPSBcIlwiO1xuICAgIHdoaWxlIChzaXplLS0pIHtcbiAgICAgICAgcmVzICs9IGFscGhhYmV0WyhNYXRoLnJhbmRvbSgpICogYWxwaGFiZXQubGVuZ3RoKSA8PCAwXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUJvdW5kYXJ5O1xuIiwgImNvbnN0IGdldFR5cGUgPSAodmFsdWUpID0+IChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwcCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgaWYgKHBwID09PSBudWxsIHx8IHBwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IEN0b3IgPSBwcC5jb25zdHJ1Y3RvciAmJiBwcC5jb25zdHJ1Y3Rvci50b1N0cmluZygpO1xuICAgIHJldHVybiBDdG9yID09PSBPYmplY3QudG9TdHJpbmcoKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGlzUGxhaW5PYmplY3Q7XG4iLCAiY29uc3Qgbm9ybWFsaXplVmFsdWUgPSAodmFsdWUpID0+IFN0cmluZyh2YWx1ZSlcbiAgICAucmVwbGFjZSgvXFxyfFxcbi9nLCAobWF0Y2gsIGksIHN0cikgPT4ge1xuICAgIGlmICgobWF0Y2ggPT09IFwiXFxyXCIgJiYgc3RyW2kgKyAxXSAhPT0gXCJcXG5cIilcbiAgICAgICAgfHwgKG1hdGNoID09PSBcIlxcblwiICYmIHN0cltpIC0gMV0gIT09IFwiXFxyXCIpKSB7XG4gICAgICAgIHJldHVybiBcIlxcclxcblwiO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59KTtcbmV4cG9ydCBkZWZhdWx0IG5vcm1hbGl6ZVZhbHVlO1xuIiwgImNvbnN0IGVzY2FwZU5hbWUgPSAobmFtZSkgPT4gU3RyaW5nKG5hbWUpXG4gICAgLnJlcGxhY2UoL1xcci9nLCBcIiUwRFwiKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIlMEFcIilcbiAgICAucmVwbGFjZSgvXCIvZywgXCIlMjJcIik7XG5leHBvcnQgZGVmYXVsdCBlc2NhcGVOYW1lO1xuIiwgImNvbnN0IGlzRnVuY3Rpb24gPSAodmFsdWUpID0+ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIik7XG5leHBvcnQgZGVmYXVsdCBpc0Z1bmN0aW9uO1xuIiwgImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gXCIuL2lzRnVuY3Rpb24uanNcIjtcbmV4cG9ydCBjb25zdCBpc0ZpbGVMaWtlID0gKHZhbHVlKSA9PiBCb29sZWFuKHZhbHVlXG4gICAgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiXG4gICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb25zdHJ1Y3RvcilcbiAgICAmJiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSBcIkZpbGVcIlxuICAgICYmIGlzRnVuY3Rpb24odmFsdWUuc3RyZWFtKVxuICAgICYmIHZhbHVlLm5hbWUgIT0gbnVsbFxuICAgICYmIHZhbHVlLnNpemUgIT0gbnVsbFxuICAgICYmIHZhbHVlLmxhc3RNb2RpZmllZCAhPSBudWxsKTtcbiIsICJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tIFwiLi9pc0Z1bmN0aW9uLmpzXCI7XG5leHBvcnQgY29uc3QgaXNGb3JtRGF0YSA9ICh2YWx1ZSkgPT4gQm9vbGVhbih2YWx1ZVxuICAgICYmIGlzRnVuY3Rpb24odmFsdWUuY29uc3RydWN0b3IpXG4gICAgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gXCJGb3JtRGF0YVwiXG4gICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5hcHBlbmQpXG4gICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5nZXRBbGwpXG4gICAgJiYgaXNGdW5jdGlvbih2YWx1ZS5lbnRyaWVzKVxuICAgICYmIGlzRnVuY3Rpb24odmFsdWVbU3ltYm9sLml0ZXJhdG9yXSkpO1xuZXhwb3J0IGNvbnN0IGlzRm9ybURhdGFMaWtlID0gaXNGb3JtRGF0YTtcbiIsICJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX0Zvcm1EYXRhRW5jb2Rlcl9pbnN0YW5jZXMsIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRiwgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGX0JZVEVTLCBfRm9ybURhdGFFbmNvZGVyX0NSTEZfQllURVNfTEVOR1RILCBfRm9ybURhdGFFbmNvZGVyX0RBU0hFUywgX0Zvcm1EYXRhRW5jb2Rlcl9lbmNvZGVyLCBfRm9ybURhdGFFbmNvZGVyX2Zvb3RlciwgX0Zvcm1EYXRhRW5jb2Rlcl9mb3JtLCBfRm9ybURhdGFFbmNvZGVyX29wdGlvbnMsIF9Gb3JtRGF0YUVuY29kZXJfZ2V0RmllbGRIZWFkZXI7XG5pbXBvcnQgY3JlYXRlQm91bmRhcnkgZnJvbSBcIi4vdXRpbC9jcmVhdGVCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSBcIi4vdXRpbC9pc1BsYWluT2JqZWN0LmpzXCI7XG5pbXBvcnQgbm9ybWFsaXplIGZyb20gXCIuL3V0aWwvbm9ybWFsaXplVmFsdWUuanNcIjtcbmltcG9ydCBlc2NhcGUgZnJvbSBcIi4vdXRpbC9lc2NhcGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0ZpbGVMaWtlIH0gZnJvbSBcIi4vdXRpbC9pc0ZpbGVMaWtlLmpzXCI7XG5pbXBvcnQgeyBpc0Zvcm1EYXRhIH0gZnJvbSBcIi4vdXRpbC9pc0Zvcm1EYXRhLmpzXCI7XG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBlbmFibGVBZGRpdGlvbmFsSGVhZGVyczogZmFsc2Vcbn07XG5leHBvcnQgY2xhc3MgRm9ybURhdGFFbmNvZGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihmb3JtLCBib3VuZGFyeU9yT3B0aW9ucywgb3B0aW9ucykge1xuICAgICAgICBfRm9ybURhdGFFbmNvZGVyX2luc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRi5zZXQodGhpcywgXCJcXHJcXG5cIik7XG4gICAgICAgIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRl9CWVRFUy5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGX0JZVEVTX0xFTkdUSC5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0Zvcm1EYXRhRW5jb2Rlcl9EQVNIRVMuc2V0KHRoaXMsIFwiLVwiLnJlcGVhdCgyKSk7XG4gICAgICAgIF9Gb3JtRGF0YUVuY29kZXJfZW5jb2Rlci5zZXQodGhpcywgbmV3IFRleHRFbmNvZGVyKCkpO1xuICAgICAgICBfRm9ybURhdGFFbmNvZGVyX2Zvb3Rlci5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0Zvcm1EYXRhRW5jb2Rlcl9mb3JtLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfRm9ybURhdGFFbmNvZGVyX29wdGlvbnMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIGlmICghaXNGb3JtRGF0YShmb3JtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgRm9ybURhdGEgaW5zdGFuY2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBib3VuZGFyeTtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoYm91bmRhcnlPck9wdGlvbnMpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gYm91bmRhcnlPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBib3VuZGFyeSA9IGJvdW5kYXJ5T3JPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYm91bmRhcnkpIHtcbiAgICAgICAgICAgIGJvdW5kYXJ5ID0gY3JlYXRlQm91bmRhcnkoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGJvdW5kYXJ5ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYm91bmRhcnkgYXJndW1lbnQgdG8gYmUgYSBzdHJpbmcuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zICYmICFpc1BsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgb3B0aW9ucyBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QuXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9mb3JtLCBmb3JtLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9vcHRpb25zLCB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH0sIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX0NSTEZfQllURVMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9lbmNvZGVyLCBcImZcIikuZW5jb2RlKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGLCBcImZcIikpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGX0JZVEVTX0xFTkdUSCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX0NSTEZfQllURVMsIFwiZlwiKS5ieXRlTGVuZ3RoLCBcImZcIik7XG4gICAgICAgIHRoaXMuYm91bmRhcnkgPSBgZm9ybS1kYXRhLWJvdW5kYXJ5LSR7Ym91bmRhcnl9YDtcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke3RoaXMuYm91bmRhcnl9YDtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX2Zvb3RlciwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX2VuY29kZXIsIFwiZlwiKS5lbmNvZGUoYCR7X19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX0RBU0hFUywgXCJmXCIpfSR7dGhpcy5ib3VuZGFyeX0ke19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9EQVNIRVMsIFwiZlwiKX0ke19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGLCBcImZcIikucmVwZWF0KDIpfWApLCBcImZcIik7XG4gICAgICAgIHRoaXMuY29udGVudExlbmd0aCA9IFN0cmluZyh0aGlzLmdldENvbnRlbnRMZW5ndGgoKSk7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogdGhpcy5jb250ZW50VHlwZSxcbiAgICAgICAgICAgIFwiQ29udGVudC1MZW5ndGhcIjogdGhpcy5jb250ZW50TGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG4gICAgICAgICAgICBib3VuZGFyeTogeyB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2UgfSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7IHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZSB9LFxuICAgICAgICAgICAgY29udGVudExlbmd0aDogeyB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2UgfSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldENvbnRlbnRMZW5ndGgoKSB7XG4gICAgICAgIGxldCBsZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCByYXddIG9mIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9mb3JtLCBcImZcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXNGaWxlTGlrZShyYXcpID8gcmF3IDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX2VuY29kZXIsIFwiZlwiKS5lbmNvZGUobm9ybWFsaXplKHJhdykpO1xuICAgICAgICAgICAgbGVuZ3RoICs9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9pbnN0YW5jZXMsIFwibVwiLCBfRm9ybURhdGFFbmNvZGVyX2dldEZpZWxkSGVhZGVyKS5jYWxsKHRoaXMsIG5hbWUsIHZhbHVlKS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgbGVuZ3RoICs9IGlzRmlsZUxpa2UodmFsdWUpID8gdmFsdWUuc2l6ZSA6IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBsZW5ndGggKz0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX0NSTEZfQllURVNfTEVOR1RILCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxlbmd0aCArIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9mb290ZXIsIFwiZlwiKS5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgICAqdmFsdWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCByYXddIG9mIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9mb3JtLCBcImZcIikuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRmlsZUxpa2UocmF3KSA/IHJhdyA6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9lbmNvZGVyLCBcImZcIikuZW5jb2RlKG5vcm1hbGl6ZShyYXcpKTtcbiAgICAgICAgICAgIHlpZWxkIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9pbnN0YW5jZXMsIFwibVwiLCBfRm9ybURhdGFFbmNvZGVyX2dldEZpZWxkSGVhZGVyKS5jYWxsKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgICAgICAgeWllbGQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX0NSTEZfQllURVMsIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfZm9vdGVyLCBcImZcIik7XG4gICAgfVxuICAgIGFzeW5jICplbmNvZGUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAoaXNGaWxlTGlrZShwYXJ0KSkge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBwYXJ0LnN0cmVhbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWllbGQgcGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBbKF9Gb3JtRGF0YUVuY29kZXJfQ1JMRiA9IG5ldyBXZWFrTWFwKCksIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRl9CWVRFUyA9IG5ldyBXZWFrTWFwKCksIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRl9CWVRFU19MRU5HVEggPSBuZXcgV2Vha01hcCgpLCBfRm9ybURhdGFFbmNvZGVyX0RBU0hFUyA9IG5ldyBXZWFrTWFwKCksIF9Gb3JtRGF0YUVuY29kZXJfZW5jb2RlciA9IG5ldyBXZWFrTWFwKCksIF9Gb3JtRGF0YUVuY29kZXJfZm9vdGVyID0gbmV3IFdlYWtNYXAoKSwgX0Zvcm1EYXRhRW5jb2Rlcl9mb3JtID0gbmV3IFdlYWtNYXAoKSwgX0Zvcm1EYXRhRW5jb2Rlcl9vcHRpb25zID0gbmV3IFdlYWtNYXAoKSwgX0Zvcm1EYXRhRW5jb2Rlcl9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfRm9ybURhdGFFbmNvZGVyX2dldEZpZWxkSGVhZGVyID0gZnVuY3Rpb24gX0Zvcm1EYXRhRW5jb2Rlcl9nZXRGaWVsZEhlYWRlcihuYW1lLCB2YWx1ZSkge1xuICAgICAgICBsZXQgaGVhZGVyID0gXCJcIjtcbiAgICAgICAgaGVhZGVyICs9IGAke19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9EQVNIRVMsIFwiZlwiKX0ke3RoaXMuYm91bmRhcnl9JHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRiwgXCJmXCIpfWA7XG4gICAgICAgIGhlYWRlciArPSBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiJHtlc2NhcGUobmFtZSl9XCJgO1xuICAgICAgICBpZiAoaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGhlYWRlciArPSBgOyBmaWxlbmFtZT1cIiR7ZXNjYXBlKHZhbHVlLm5hbWUpfVwiJHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRiwgXCJmXCIpfWA7XG4gICAgICAgICAgICBoZWFkZXIgKz0gYENvbnRlbnQtVHlwZTogJHt2YWx1ZS50eXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJ9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9ybURhdGFFbmNvZGVyX29wdGlvbnMsIFwiZlwiKS5lbmFibGVBZGRpdGlvbmFsSGVhZGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaGVhZGVyICs9IGAke19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Zvcm1EYXRhRW5jb2Rlcl9DUkxGLCBcImZcIil9Q29udGVudC1MZW5ndGg6ICR7aXNGaWxlTGlrZSh2YWx1ZSkgPyB2YWx1ZS5zaXplIDogdmFsdWUuYnl0ZUxlbmd0aH1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfZW5jb2RlciwgXCJmXCIpLmVuY29kZShgJHtoZWFkZXJ9JHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Gb3JtRGF0YUVuY29kZXJfQ1JMRiwgXCJmXCIpLnJlcGVhdCgyKX1gKTtcbiAgICB9LCBTeW1ib2wuaXRlcmF0b3IpXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuY29kZSgpO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBFbmNvZGVyID0gRm9ybURhdGFFbmNvZGVyO1xuIiwgIi8qKlxuICogRGlzY2xhaW1lcjogbW9kdWxlcyBpbiBfc2hpbXMgYXJlbid0IGludGVuZGVkIHRvIGJlIGltcG9ydGVkIGJ5IFNESyB1c2Vycy5cbiAqL1xuZXhwb3J0IGNsYXNzIE11bHRpcGFydEJvZHkge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgYm9keTogYW55KSB7fVxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ011bHRpcGFydEJvZHknO1xuICB9XG59XG4iLCAiLyoqXG4gKiBEaXNjbGFpbWVyOiBtb2R1bGVzIGluIF9zaGltcyBhcmVuJ3QgaW50ZW5kZWQgdG8gYmUgaW1wb3J0ZWQgYnkgU0RLIHVzZXJzLlxuICovXG5pbXBvcnQgKiBhcyBzaGltcyBmcm9tICcuL3JlZ2lzdHJ5Lm1qcyc7XG5pbXBvcnQgKiBhcyBhdXRvIGZyb20gJ29wZW5haS9fc2hpbXMvYXV0by9ydW50aW1lJztcbmlmICghc2hpbXMua2luZCkgc2hpbXMuc2V0U2hpbXMoYXV0by5nZXRSdW50aW1lKCksIHsgYXV0bzogdHJ1ZSB9KTtcbmV4cG9ydCAqIGZyb20gJy4vcmVnaXN0cnkubWpzJztcbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBjYXN0VG9FcnJvciwgSGVhZGVycyB9IGZyb20gJy4vY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBPcGVuQUlFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBBUElFcnJvcjxcbiAgVFN0YXR1cyBleHRlbmRzIG51bWJlciB8IHVuZGVmaW5lZCA9IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgVEhlYWRlcnMgZXh0ZW5kcyBIZWFkZXJzIHwgdW5kZWZpbmVkID0gSGVhZGVycyB8IHVuZGVmaW5lZCxcbiAgVEVycm9yIGV4dGVuZHMgT2JqZWN0IHwgdW5kZWZpbmVkID0gT2JqZWN0IHwgdW5kZWZpbmVkLFxuPiBleHRlbmRzIE9wZW5BSUVycm9yIHtcbiAgLyoqIEhUVFAgc3RhdHVzIGZvciB0aGUgcmVzcG9uc2UgdGhhdCBjYXVzZWQgdGhlIGVycm9yICovXG4gIHJlYWRvbmx5IHN0YXR1czogVFN0YXR1cztcbiAgLyoqIEhUVFAgaGVhZGVycyBmb3IgdGhlIHJlc3BvbnNlIHRoYXQgY2F1c2VkIHRoZSBlcnJvciAqL1xuICByZWFkb25seSBoZWFkZXJzOiBUSGVhZGVycztcbiAgLyoqIEpTT04gYm9keSBvZiB0aGUgcmVzcG9uc2UgdGhhdCBjYXVzZWQgdGhlIGVycm9yICovXG4gIHJlYWRvbmx5IGVycm9yOiBURXJyb3I7XG5cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcGFyYW06IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICByZWFkb25seSByZXF1ZXN0X2lkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXR1czogVFN0YXR1cywgZXJyb3I6IFRFcnJvciwgbWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBUSGVhZGVycykge1xuICAgIHN1cGVyKGAke0FQSUVycm9yLm1ha2VNZXNzYWdlKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UpfWApO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXF1ZXN0X2lkID0gaGVhZGVycz8uWyd4LXJlcXVlc3QtaWQnXTtcbiAgICB0aGlzLmVycm9yID0gZXJyb3I7XG5cbiAgICBjb25zdCBkYXRhID0gZXJyb3IgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB0aGlzLmNvZGUgPSBkYXRhPy5bJ2NvZGUnXTtcbiAgICB0aGlzLnBhcmFtID0gZGF0YT8uWydwYXJhbSddO1xuICAgIHRoaXMudHlwZSA9IGRhdGE/LlsndHlwZSddO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbWFrZU1lc3NhZ2Uoc3RhdHVzOiBudW1iZXIgfCB1bmRlZmluZWQsIGVycm9yOiBhbnksIG1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG1zZyA9XG4gICAgICBlcnJvcj8ubWVzc2FnZSA/XG4gICAgICAgIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgZXJyb3IubWVzc2FnZVxuICAgICAgICA6IEpTT04uc3RyaW5naWZ5KGVycm9yLm1lc3NhZ2UpXG4gICAgICA6IGVycm9yID8gSlNPTi5zdHJpbmdpZnkoZXJyb3IpXG4gICAgICA6IG1lc3NhZ2U7XG5cbiAgICBpZiAoc3RhdHVzICYmIG1zZykge1xuICAgICAgcmV0dXJuIGAke3N0YXR1c30gJHttc2d9YDtcbiAgICB9XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgcmV0dXJuIGAke3N0YXR1c30gc3RhdHVzIGNvZGUgKG5vIGJvZHkpYDtcbiAgICB9XG4gICAgaWYgKG1zZykge1xuICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG4gICAgcmV0dXJuICcobm8gc3RhdHVzIGNvZGUgb3IgYm9keSknO1xuICB9XG5cbiAgc3RhdGljIGdlbmVyYXRlKFxuICAgIHN0YXR1czogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIGVycm9yUmVzcG9uc2U6IE9iamVjdCB8IHVuZGVmaW5lZCxcbiAgICBtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgaGVhZGVyczogSGVhZGVycyB8IHVuZGVmaW5lZCxcbiAgKTogQVBJRXJyb3Ige1xuICAgIGlmICghc3RhdHVzIHx8ICFoZWFkZXJzKSB7XG4gICAgICByZXR1cm4gbmV3IEFQSUNvbm5lY3Rpb25FcnJvcih7IG1lc3NhZ2UsIGNhdXNlOiBjYXN0VG9FcnJvcihlcnJvclJlc3BvbnNlKSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IChlcnJvclJlc3BvbnNlIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pPy5bJ2Vycm9yJ107XG5cbiAgICBpZiAoc3RhdHVzID09PSA0MDApIHtcbiAgICAgIHJldHVybiBuZXcgQmFkUmVxdWVzdEVycm9yKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UsIGhlYWRlcnMpO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgcmV0dXJuIG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UsIGhlYWRlcnMpO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPT09IDQwMykge1xuICAgICAgcmV0dXJuIG5ldyBQZXJtaXNzaW9uRGVuaWVkRXJyb3Ioc3RhdHVzLCBlcnJvciwgbWVzc2FnZSwgaGVhZGVycyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3Ioc3RhdHVzLCBlcnJvciwgbWVzc2FnZSwgaGVhZGVycyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDA5KSB7XG4gICAgICByZXR1cm4gbmV3IENvbmZsaWN0RXJyb3Ioc3RhdHVzLCBlcnJvciwgbWVzc2FnZSwgaGVhZGVycyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDIyKSB7XG4gICAgICByZXR1cm4gbmV3IFVucHJvY2Vzc2FibGVFbnRpdHlFcnJvcihzdGF0dXMsIGVycm9yLCBtZXNzYWdlLCBoZWFkZXJzKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSA0MjkpIHtcbiAgICAgIHJldHVybiBuZXcgUmF0ZUxpbWl0RXJyb3Ioc3RhdHVzLCBlcnJvciwgbWVzc2FnZSwgaGVhZGVycyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA+PSA1MDApIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxTZXJ2ZXJFcnJvcihzdGF0dXMsIGVycm9yLCBtZXNzYWdlLCBoZWFkZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFQSUVycm9yKHN0YXR1cywgZXJyb3IsIG1lc3NhZ2UsIGhlYWRlcnMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBUElVc2VyQWJvcnRFcnJvciBleHRlbmRzIEFQSUVycm9yPHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQ+IHtcbiAgY29uc3RydWN0b3IoeyBtZXNzYWdlIH06IHsgbWVzc2FnZT86IHN0cmluZyB9ID0ge30pIHtcbiAgICBzdXBlcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgbWVzc2FnZSB8fCAnUmVxdWVzdCB3YXMgYWJvcnRlZC4nLCB1bmRlZmluZWQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBUElDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBBUElFcnJvcjx1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0cnVjdG9yKHsgbWVzc2FnZSwgY2F1c2UgfTogeyBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOyBjYXVzZT86IEVycm9yIHwgdW5kZWZpbmVkIH0pIHtcbiAgICBzdXBlcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgbWVzc2FnZSB8fCAnQ29ubmVjdGlvbiBlcnJvci4nLCB1bmRlZmluZWQpO1xuICAgIC8vIGluIHNvbWUgZW52aXJvbm1lbnRzIHRoZSAnY2F1c2UnIHByb3BlcnR5IGlzIGFscmVhZHkgZGVjbGFyZWRcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKGNhdXNlKSB0aGlzLmNhdXNlID0gY2F1c2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFQSUNvbm5lY3Rpb25UaW1lb3V0RXJyb3IgZXh0ZW5kcyBBUElDb25uZWN0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih7IG1lc3NhZ2UgfTogeyBtZXNzYWdlPzogc3RyaW5nIH0gPSB7fSkge1xuICAgIHN1cGVyKHsgbWVzc2FnZTogbWVzc2FnZSA/PyAnUmVxdWVzdCB0aW1lZCBvdXQuJyB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmFkUmVxdWVzdEVycm9yIGV4dGVuZHMgQVBJRXJyb3I8NDAwLCBIZWFkZXJzPiB7fVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25FcnJvciBleHRlbmRzIEFQSUVycm9yPDQwMSwgSGVhZGVycz4ge31cblxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25EZW5pZWRFcnJvciBleHRlbmRzIEFQSUVycm9yPDQwMywgSGVhZGVycz4ge31cblxuZXhwb3J0IGNsYXNzIE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBBUElFcnJvcjw0MDQsIEhlYWRlcnM+IHt9XG5cbmV4cG9ydCBjbGFzcyBDb25mbGljdEVycm9yIGV4dGVuZHMgQVBJRXJyb3I8NDA5LCBIZWFkZXJzPiB7fVxuXG5leHBvcnQgY2xhc3MgVW5wcm9jZXNzYWJsZUVudGl0eUVycm9yIGV4dGVuZHMgQVBJRXJyb3I8NDIyLCBIZWFkZXJzPiB7fVxuXG5leHBvcnQgY2xhc3MgUmF0ZUxpbWl0RXJyb3IgZXh0ZW5kcyBBUElFcnJvcjw0MjksIEhlYWRlcnM+IHt9XG5cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yIGV4dGVuZHMgQVBJRXJyb3I8bnVtYmVyLCBIZWFkZXJzPiB7fVxuXG5leHBvcnQgY2xhc3MgTGVuZ3RoRmluaXNoUmVhc29uRXJyb3IgZXh0ZW5kcyBPcGVuQUlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKGBDb3VsZCBub3QgcGFyc2UgcmVzcG9uc2UgY29udGVudCBhcyB0aGUgbGVuZ3RoIGxpbWl0IHdhcyByZWFjaGVkYCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnRlbnRGaWx0ZXJGaW5pc2hSZWFzb25FcnJvciBleHRlbmRzIE9wZW5BSUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoYENvdWxkIG5vdCBwYXJzZSByZXNwb25zZSBjb250ZW50IGFzIHRoZSByZXF1ZXN0IHdhcyByZWplY3RlZCBieSB0aGUgY29udGVudCBmaWx0ZXJgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IE9wZW5BSUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3InO1xuXG5leHBvcnQgdHlwZSBCeXRlcyA9IHN0cmluZyB8IEFycmF5QnVmZmVyIHwgVWludDhBcnJheSB8IEJ1ZmZlciB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSByZS1pbXBsZW1lbnRhdGlvbiBvZiBodHRweCdzIGBMaW5lRGVjb2RlcmAgaW4gUHl0aG9uIHRoYXQgaGFuZGxlcyBpbmNyZW1lbnRhbGx5XG4gKiByZWFkaW5nIGxpbmVzIGZyb20gdGV4dC5cbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZW5jb2RlL2h0dHB4L2Jsb2IvOTIwMzMzZWE5ODExOGU5Y2Y2MTdmMjQ2OTA1ZDdiMjAyNTEwOTQxYy9odHRweC9fZGVjb2RlcnMucHkjTDI1OFxuICovXG5leHBvcnQgY2xhc3MgTGluZURlY29kZXIge1xuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgc3RhdGljIE5FV0xJTkVfQ0hBUlMgPSBuZXcgU2V0KFsnXFxuJywgJ1xcciddKTtcbiAgc3RhdGljIE5FV0xJTkVfUkVHRVhQID0gL1xcclxcbnxbXFxuXFxyXS9nO1xuXG4gIGJ1ZmZlcjogVWludDhBcnJheTtcbiAgI2NhcnJpYWdlUmV0dXJuSW5kZXg6IG51bWJlciB8IG51bGw7XG4gIHRleHREZWNvZGVyOiBhbnk7IC8vIFRleHREZWNvZGVyIGZvdW5kIGluIGJyb3dzZXJzOyBub3QgdHlwZWQgdG8gYXZvaWQgcHVsbGluZyBpbiBlaXRoZXIgXCJkb21cIiBvciBcIm5vZGVcIiB0eXBlcy5cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KCk7XG4gICAgdGhpcy4jY2FycmlhZ2VSZXR1cm5JbmRleCA9IG51bGw7XG4gIH1cblxuICBkZWNvZGUoY2h1bms6IEJ5dGVzKTogc3RyaW5nW10ge1xuICAgIGlmIChjaHVuayA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgYmluYXJ5Q2h1bmsgPVxuICAgICAgY2h1bmsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGNodW5rKVxuICAgICAgOiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGNodW5rKVxuICAgICAgOiBjaHVuaztcblxuICAgIGxldCBuZXdEYXRhID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIubGVuZ3RoICsgYmluYXJ5Q2h1bmsubGVuZ3RoKTtcbiAgICBuZXdEYXRhLnNldCh0aGlzLmJ1ZmZlcik7XG4gICAgbmV3RGF0YS5zZXQoYmluYXJ5Q2h1bmssIHRoaXMuYnVmZmVyLmxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIgPSBuZXdEYXRhO1xuXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHBhdHRlcm5JbmRleDtcbiAgICB3aGlsZSAoKHBhdHRlcm5JbmRleCA9IGZpbmROZXdsaW5lSW5kZXgodGhpcy5idWZmZXIsIHRoaXMuI2NhcnJpYWdlUmV0dXJuSW5kZXgpKSAhPSBudWxsKSB7XG4gICAgICBpZiAocGF0dGVybkluZGV4LmNhcnJpYWdlICYmIHRoaXMuI2NhcnJpYWdlUmV0dXJuSW5kZXggPT0gbnVsbCkge1xuICAgICAgICAvLyBza2lwIHVudGlsIHdlIGVpdGhlciBnZXQgYSBjb3JyZXNwb25kaW5nIGBcXG5gLCBhIG5ldyBgXFxyYCBvciBub3RoaW5nXG4gICAgICAgIHRoaXMuI2NhcnJpYWdlUmV0dXJuSW5kZXggPSBwYXR0ZXJuSW5kZXguaW5kZXg7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSBnb3QgZG91YmxlIFxcciBvciBcXHJ0ZXh0XFxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuI2NhcnJpYWdlUmV0dXJuSW5kZXggIT0gbnVsbCAmJlxuICAgICAgICAocGF0dGVybkluZGV4LmluZGV4ICE9PSB0aGlzLiNjYXJyaWFnZVJldHVybkluZGV4ICsgMSB8fCBwYXR0ZXJuSW5kZXguY2FycmlhZ2UpXG4gICAgICApIHtcbiAgICAgICAgbGluZXMucHVzaCh0aGlzLmRlY29kZVRleHQodGhpcy5idWZmZXIuc2xpY2UoMCwgdGhpcy4jY2FycmlhZ2VSZXR1cm5JbmRleCAtIDEpKSk7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc2xpY2UodGhpcy4jY2FycmlhZ2VSZXR1cm5JbmRleCk7XG4gICAgICAgIHRoaXMuI2NhcnJpYWdlUmV0dXJuSW5kZXggPSBudWxsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW5kSW5kZXggPVxuICAgICAgICB0aGlzLiNjYXJyaWFnZVJldHVybkluZGV4ICE9PSBudWxsID8gcGF0dGVybkluZGV4LnByZWNlZGluZyAtIDEgOiBwYXR0ZXJuSW5kZXgucHJlY2VkaW5nO1xuXG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5kZWNvZGVUZXh0KHRoaXMuYnVmZmVyLnNsaWNlKDAsIGVuZEluZGV4KSk7XG4gICAgICBsaW5lcy5wdXNoKGxpbmUpO1xuXG4gICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnNsaWNlKHBhdHRlcm5JbmRleC5pbmRleCk7XG4gICAgICB0aGlzLiNjYXJyaWFnZVJldHVybkluZGV4ID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICBkZWNvZGVUZXh0KGJ5dGVzOiBCeXRlcyk6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzID09IG51bGwpIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykgcmV0dXJuIGJ5dGVzO1xuXG4gICAgLy8gTm9kZTpcbiAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChieXRlcyBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gYnl0ZXMudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmIChieXRlcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoXG4gICAgICAgIGBVbmV4cGVjdGVkOiByZWNlaXZlZCBub24tVWludDhBcnJheSAoJHtieXRlcy5jb25zdHJ1Y3Rvci5uYW1lfSkgc3RyZWFtIGNodW5rIGluIGFuIGVudmlyb25tZW50IHdpdGggYSBnbG9iYWwgXCJCdWZmZXJcIiBkZWZpbmVkLCB3aGljaCB0aGlzIGxpYnJhcnkgYXNzdW1lcyB0byBiZSBOb2RlLiBQbGVhc2UgcmVwb3J0IHRoaXMgZXJyb3IuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQnJvd3NlclxuICAgIGlmICh0eXBlb2YgVGV4dERlY29kZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoYnl0ZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGJ5dGVzIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdGhpcy50ZXh0RGVjb2RlciA/Pz0gbmV3IFRleHREZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHREZWNvZGVyLmRlY29kZShieXRlcyk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihcbiAgICAgICAgYFVuZXhwZWN0ZWQ6IHJlY2VpdmVkIG5vbi1VaW50OEFycmF5L0FycmF5QnVmZmVyICgke1xuICAgICAgICAgIChieXRlcyBhcyBhbnkpLmNvbnN0cnVjdG9yLm5hbWVcbiAgICAgICAgfSkgaW4gYSB3ZWIgcGxhdGZvcm0uIFBsZWFzZSByZXBvcnQgdGhpcyBlcnJvci5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoXG4gICAgICBgVW5leHBlY3RlZDogbmVpdGhlciBCdWZmZXIgbm9yIFRleHREZWNvZGVyIGFyZSBhdmFpbGFibGUgYXMgZ2xvYmFscy4gUGxlYXNlIHJlcG9ydCB0aGlzIGVycm9yLmAsXG4gICAgKTtcbiAgfVxuXG4gIGZsdXNoKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWNvZGUoJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyB0aGUgYnVmZmVyIGZvciB0aGUgZW5kIHBhdHRlcm5zLCAoXFxyIG9yIFxcbilcbiAqIGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRoZSBpbmRleCBwcmVjZWRpbmcgdGhlIG1hdGNoZWQgbmV3bGluZSBhbmQgdGhlXG4gKiBpbmRleCBhZnRlciB0aGUgbmV3bGluZSBjaGFyLiBgbnVsbGAgaXMgcmV0dXJuZWQgaWYgbm8gbmV3IGxpbmUgaXMgZm91bmQuXG4gKlxuICogYGBgdHNcbiAqIGZpbmROZXdMaW5lSW5kZXgoJ2FiY1xcbmRlZicpIC0+IHsgcHJlY2VkaW5nOiAyLCBpbmRleDogMyB9XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZmluZE5ld2xpbmVJbmRleChcbiAgYnVmZmVyOiBVaW50OEFycmF5LFxuICBzdGFydEluZGV4OiBudW1iZXIgfCBudWxsLFxuKTogeyBwcmVjZWRpbmc6IG51bWJlcjsgaW5kZXg6IG51bWJlcjsgY2FycmlhZ2U6IGJvb2xlYW4gfSB8IG51bGwge1xuICBjb25zdCBuZXdsaW5lID0gMHgwYTsgLy8gXFxuXG4gIGNvbnN0IGNhcnJpYWdlID0gMHgwZDsgLy8gXFxyXG5cbiAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXggPz8gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChidWZmZXJbaV0gPT09IG5ld2xpbmUpIHtcbiAgICAgIHJldHVybiB7IHByZWNlZGluZzogaSwgaW5kZXg6IGkgKyAxLCBjYXJyaWFnZTogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyW2ldID09PSBjYXJyaWFnZSkge1xuICAgICAgcmV0dXJuIHsgcHJlY2VkaW5nOiBpLCBpbmRleDogaSArIDEsIGNhcnJpYWdlOiB0cnVlIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRG91YmxlTmV3bGluZUluZGV4KGJ1ZmZlcjogVWludDhBcnJheSk6IG51bWJlciB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGVuZCBwYXR0ZXJucyAoXFxyXFxyLCBcXG5cXG4sIFxcclxcblxcclxcbilcbiAgLy8gYW5kIHJldHVybnMgdGhlIGluZGV4IHJpZ2h0IGFmdGVyIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFueSBwYXR0ZXJuLFxuICAvLyBvciAtMSBpZiBub25lIG9mIHRoZSBwYXR0ZXJucyBhcmUgZm91bmQuXG4gIGNvbnN0IG5ld2xpbmUgPSAweDBhOyAvLyBcXG5cbiAgY29uc3QgY2FycmlhZ2UgPSAweDBkOyAvLyBcXHJcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBpZiAoYnVmZmVyW2ldID09PSBuZXdsaW5lICYmIGJ1ZmZlcltpICsgMV0gPT09IG5ld2xpbmUpIHtcbiAgICAgIC8vIFxcblxcblxuICAgICAgcmV0dXJuIGkgKyAyO1xuICAgIH1cbiAgICBpZiAoYnVmZmVyW2ldID09PSBjYXJyaWFnZSAmJiBidWZmZXJbaSArIDFdID09PSBjYXJyaWFnZSkge1xuICAgICAgLy8gXFxyXFxyXG4gICAgICByZXR1cm4gaSArIDI7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGJ1ZmZlcltpXSA9PT0gY2FycmlhZ2UgJiZcbiAgICAgIGJ1ZmZlcltpICsgMV0gPT09IG5ld2xpbmUgJiZcbiAgICAgIGkgKyAzIDwgYnVmZmVyLmxlbmd0aCAmJlxuICAgICAgYnVmZmVyW2kgKyAyXSA9PT0gY2FycmlhZ2UgJiZcbiAgICAgIGJ1ZmZlcltpICsgM10gPT09IG5ld2xpbmVcbiAgICApIHtcbiAgICAgIC8vIFxcclxcblxcclxcblxuICAgICAgcmV0dXJuIGkgKyA0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cbiIsICIvKipcbiAqIE1vc3QgYnJvd3NlcnMgZG9uJ3QgeWV0IGhhdmUgYXN5bmMgaXRlcmFibGUgc3VwcG9ydCBmb3IgUmVhZGFibGVTdHJlYW0sXG4gKiBhbmQgTm9kZSBoYXMgYSB2ZXJ5IGRpZmZlcmVudCB3YXkgb2YgcmVhZGluZyBieXRlcyBmcm9tIGl0cyBcIlJlYWRhYmxlU3RyZWFtXCIuXG4gKlxuICogVGhpcyBwb2x5ZmlsbCB3YXMgcHVsbGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL01hdHRpYXNCdWVsZW5zL3dlYi1zdHJlYW1zLXBvbHlmaWxsL3B1bGwvMTIyI2lzc3VlY29tbWVudC0xNjI3MzU0NDkwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbVRvQXN5bmNJdGVyYWJsZTxUPihzdHJlYW06IGFueSk6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxUPiB7XG4gIGlmIChzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSByZXR1cm4gc3RyZWFtO1xuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBhc3luYyBuZXh0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgaWYgKHJlc3VsdD8uZG9uZSkgcmVhZGVyLnJlbGVhc2VMb2NrKCk7IC8vIHJlbGVhc2UgbG9jayB3aGVuIHN0cmVhbSBiZWNvbWVzIGNsb3NlZFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTsgLy8gcmVsZWFzZSBsb2NrIHdoZW4gc3RyZWFtIGJlY29tZXMgZXJyb3JlZFxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgcmV0dXJuKCkge1xuICAgICAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IHJlYWRlci5jYW5jZWwoKTtcbiAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgYXdhaXQgY2FuY2VsUHJvbWlzZTtcbiAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICB9LFxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IFJlYWRhYmxlU3RyZWFtLCB0eXBlIFJlc3BvbnNlIH0gZnJvbSAnLi9fc2hpbXMvaW5kZXgnO1xuaW1wb3J0IHsgT3BlbkFJRXJyb3IgfSBmcm9tICcuL2Vycm9yJztcbmltcG9ydCB7IGZpbmREb3VibGVOZXdsaW5lSW5kZXgsIExpbmVEZWNvZGVyIH0gZnJvbSAnLi9pbnRlcm5hbC9kZWNvZGVycy9saW5lJztcbmltcG9ydCB7IFJlYWRhYmxlU3RyZWFtVG9Bc3luY0l0ZXJhYmxlIH0gZnJvbSAnLi9pbnRlcm5hbC9zdHJlYW0tdXRpbHMnO1xuXG5pbXBvcnQgeyBBUElFcnJvciB9IGZyb20gJy4vZXJyb3InO1xuXG50eXBlIEJ5dGVzID0gc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBVaW50OEFycmF5IHwgQnVmZmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgU2VydmVyU2VudEV2ZW50ID0ge1xuICBldmVudDogc3RyaW5nIHwgbnVsbDtcbiAgZGF0YTogc3RyaW5nO1xuICByYXc6IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IGNsYXNzIFN0cmVhbTxJdGVtPiBpbXBsZW1lbnRzIEFzeW5jSXRlcmFibGU8SXRlbT4ge1xuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpdGVyYXRvcjogKCkgPT4gQXN5bmNJdGVyYXRvcjxJdGVtPixcbiAgICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXG4gICkge1xuICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNTRVJlc3BvbnNlPEl0ZW0+KHJlc3BvbnNlOiBSZXNwb25zZSwgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyKTogU3RyZWFtPEl0ZW0+IHtcbiAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBpdGVyYXRvcigpOiBBc3luY0l0ZXJhdG9yPEl0ZW0sIGFueSwgdW5kZWZpbmVkPiB7XG4gICAgICBpZiAoY29uc3VtZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaXRlcmF0ZSBvdmVyIGEgY29uc3VtZWQgc3RyZWFtLCB1c2UgYC50ZWUoKWAgdG8gc3BsaXQgdGhlIHN0cmVhbS4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHNzZSBvZiBfaXRlclNTRU1lc3NhZ2VzKHJlc3BvbnNlLCBjb250cm9sbGVyKSkge1xuICAgICAgICAgIGlmIChkb25lKSBjb250aW51ZTtcblxuICAgICAgICAgIGlmIChzc2UuZGF0YS5zdGFydHNXaXRoKCdbRE9ORV0nKSkge1xuICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3NlLmV2ZW50ID09PSBudWxsIHx8IHNzZS5ldmVudC5zdGFydHNXaXRoKCdyZXNwb25zZS4nKSkge1xuICAgICAgICAgICAgbGV0IGRhdGE7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHNzZS5kYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IHBhcnNlIG1lc3NhZ2UgaW50byBKU09OOmAsIHNzZS5kYXRhKTtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRnJvbSBjaHVuazpgLCBzc2UucmF3KTtcbiAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IodW5kZWZpbmVkLCBkYXRhLmVycm9yLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHlpZWxkIGRhdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2Uoc3NlLmRhdGEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDb3VsZCBub3QgcGFyc2UgbWVzc2FnZSBpbnRvIEpTT046YCwgc3NlLmRhdGEpO1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGcm9tIGNodW5rOmAsIHNzZS5yYXcpO1xuICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB3aGVyZSB0aGUgZXJyb3Igc2hvdWxkIGJlIHRocm93bj9cbiAgICAgICAgICAgIGlmIChzc2UuZXZlbnQgPT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IodW5kZWZpbmVkLCBkYXRhLmVycm9yLCBkYXRhLm1lc3NhZ2UsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCB7IGV2ZW50OiBzc2UuZXZlbnQsIGRhdGE6IGRhdGEgfSBhcyBhbnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZiB0aGUgdXNlciBjYWxscyBgc3RyZWFtLmNvbnRyb2xsZXIuYWJvcnQoKWAsIHdlIHNob3VsZCBleGl0IHdpdGhvdXQgdGhyb3dpbmcuXG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHJldHVybjtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGBicmVha2BzLCBhYm9ydCB0aGUgb25nb2luZyByZXF1ZXN0LlxuICAgICAgICBpZiAoIWRvbmUpIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFN0cmVhbShpdGVyYXRvciwgY29udHJvbGxlcik7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgU3RyZWFtIGZyb20gYSBuZXdsaW5lLXNlcGFyYXRlZCBSZWFkYWJsZVN0cmVhbVxuICAgKiB3aGVyZSBlYWNoIGl0ZW0gaXMgYSBKU09OIHZhbHVlLlxuICAgKi9cbiAgc3RhdGljIGZyb21SZWFkYWJsZVN0cmVhbTxJdGVtPihyZWFkYWJsZVN0cmVhbTogUmVhZGFibGVTdHJlYW0sIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcik6IFN0cmVhbTxJdGVtPiB7XG4gICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogaXRlckxpbmVzKCk6IEFzeW5jR2VuZXJhdG9yPHN0cmluZywgdm9pZCwgdW5rbm93bj4ge1xuICAgICAgY29uc3QgbGluZURlY29kZXIgPSBuZXcgTGluZURlY29kZXIoKTtcblxuICAgICAgY29uc3QgaXRlciA9IFJlYWRhYmxlU3RyZWFtVG9Bc3luY0l0ZXJhYmxlPEJ5dGVzPihyZWFkYWJsZVN0cmVhbSk7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXIpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVEZWNvZGVyLmRlY29kZShjaHVuaykpIHtcbiAgICAgICAgICB5aWVsZCBsaW5lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lRGVjb2Rlci5mbHVzaCgpKSB7XG4gICAgICAgIHlpZWxkIGxpbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24qIGl0ZXJhdG9yKCk6IEFzeW5jSXRlcmF0b3I8SXRlbSwgYW55LCB1bmRlZmluZWQ+IHtcbiAgICAgIGlmIChjb25zdW1lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpdGVyYXRlIG92ZXIgYSBjb25zdW1lZCBzdHJlYW0sIHVzZSBgLnRlZSgpYCB0byBzcGxpdCB0aGUgc3RyZWFtLicpO1xuICAgICAgfVxuICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgbGluZSBvZiBpdGVyTGluZXMoKSkge1xuICAgICAgICAgIGlmIChkb25lKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAobGluZSkgeWllbGQgSlNPTi5wYXJzZShsaW5lKTtcbiAgICAgICAgfVxuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FsbHMgYHN0cmVhbS5jb250cm9sbGVyLmFib3J0KClgLCB3ZSBzaG91bGQgZXhpdCB3aXRob3V0IHRocm93aW5nLlxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSByZXR1cm47XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAvLyBJZiB0aGUgdXNlciBgYnJlYWtgcywgYWJvcnQgdGhlIG9uZ29pbmcgcmVxdWVzdC5cbiAgICAgICAgaWYgKCFkb25lKSBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTdHJlYW0oaXRlcmF0b3IsIGNvbnRyb2xsZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpOiBBc3luY0l0ZXJhdG9yPEl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVyYXRvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyB0aGUgc3RyZWFtIGludG8gdHdvIHN0cmVhbXMgd2hpY2ggY2FuIGJlXG4gICAqIGluZGVwZW5kZW50bHkgcmVhZCBmcm9tIGF0IGRpZmZlcmVudCBzcGVlZHMuXG4gICAqL1xuICB0ZWUoKTogW1N0cmVhbTxJdGVtPiwgU3RyZWFtPEl0ZW0+XSB7XG4gICAgY29uc3QgbGVmdDogQXJyYXk8UHJvbWlzZTxJdGVyYXRvclJlc3VsdDxJdGVtPj4+ID0gW107XG4gICAgY29uc3QgcmlnaHQ6IEFycmF5PFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8SXRlbT4+PiA9IFtdO1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcigpO1xuXG4gICAgY29uc3QgdGVlSXRlcmF0b3IgPSAocXVldWU6IEFycmF5PFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8SXRlbT4+Pik6IEFzeW5jSXRlcmF0b3I8SXRlbT4gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIGxlZnQucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgcmlnaHQucHVzaChyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcXVldWUuc2hpZnQoKSE7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IFN0cmVhbSgoKSA9PiB0ZWVJdGVyYXRvcihsZWZ0KSwgdGhpcy5jb250cm9sbGVyKSxcbiAgICAgIG5ldyBTdHJlYW0oKCkgPT4gdGVlSXRlcmF0b3IocmlnaHQpLCB0aGlzLmNvbnRyb2xsZXIpLFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhpcyBzdHJlYW0gdG8gYSBuZXdsaW5lLXNlcGFyYXRlZCBSZWFkYWJsZVN0cmVhbSBvZlxuICAgKiBKU09OIHN0cmluZ2lmaWVkIHZhbHVlcyBpbiB0aGUgc3RyZWFtXG4gICAqIHdoaWNoIGNhbiBiZSB0dXJuZWQgYmFjayBpbnRvIGEgU3RyZWFtIHdpdGggYFN0cmVhbS5mcm9tUmVhZGFibGVTdHJlYW0oKWAuXG4gICAqL1xuICB0b1JlYWRhYmxlU3RyZWFtKCk6IFJlYWRhYmxlU3RyZWFtIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgaXRlcjogQXN5bmNJdGVyYXRvcjxJdGVtPjtcbiAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5cbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgICBpdGVyID0gc2VsZltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsKGN0cmw6IGFueSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAgICAgIGlmIChkb25lKSByZXR1cm4gY3RybC5jbG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnXFxuJyk7XG5cbiAgICAgICAgICBjdHJsLmVucXVldWUoYnl0ZXMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjdHJsLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICAgIGF3YWl0IGl0ZXIucmV0dXJuPy4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBfaXRlclNTRU1lc3NhZ2VzKFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcbik6IEFzeW5jR2VuZXJhdG9yPFNlcnZlclNlbnRFdmVudCwgdm9pZCwgdW5rbm93bj4ge1xuICBpZiAoIXJlc3BvbnNlLmJvZHkpIHtcbiAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBBdHRlbXB0ZWQgdG8gaXRlcmF0ZSBvdmVyIGEgcmVzcG9uc2Ugd2l0aCBubyBib2R5YCk7XG4gIH1cblxuICBjb25zdCBzc2VEZWNvZGVyID0gbmV3IFNTRURlY29kZXIoKTtcbiAgY29uc3QgbGluZURlY29kZXIgPSBuZXcgTGluZURlY29kZXIoKTtcblxuICBjb25zdCBpdGVyID0gUmVhZGFibGVTdHJlYW1Ub0FzeW5jSXRlcmFibGU8Qnl0ZXM+KHJlc3BvbnNlLmJvZHkpO1xuICBmb3IgYXdhaXQgKGNvbnN0IHNzZUNodW5rIG9mIGl0ZXJTU0VDaHVua3MoaXRlcikpIHtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZURlY29kZXIuZGVjb2RlKHNzZUNodW5rKSkge1xuICAgICAgY29uc3Qgc3NlID0gc3NlRGVjb2Rlci5kZWNvZGUobGluZSk7XG4gICAgICBpZiAoc3NlKSB5aWVsZCBzc2U7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVEZWNvZGVyLmZsdXNoKCkpIHtcbiAgICBjb25zdCBzc2UgPSBzc2VEZWNvZGVyLmRlY29kZShsaW5lKTtcbiAgICBpZiAoc3NlKSB5aWVsZCBzc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciwgaXRlcmF0ZXMgb3ZlciBpdCBhbmQgeWllbGRzIGZ1bGxcbiAqIFNTRSBjaHVua3MsIGkuZS4geWllbGRzIHdoZW4gYSBkb3VibGUgbmV3LWxpbmUgaXMgZW5jb3VudGVyZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uKiBpdGVyU1NFQ2h1bmtzKGl0ZXJhdG9yOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8Qnl0ZXM+KTogQXN5bmNHZW5lcmF0b3I8VWludDhBcnJheT4ge1xuICBsZXQgZGF0YSA9IG5ldyBVaW50OEFycmF5KCk7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYXRvcikge1xuICAgIGlmIChjaHVuayA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBiaW5hcnlDaHVuayA9XG4gICAgICBjaHVuayBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoY2h1bmspXG4gICAgICA6IHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoY2h1bmspXG4gICAgICA6IGNodW5rO1xuXG4gICAgbGV0IG5ld0RhdGEgPSBuZXcgVWludDhBcnJheShkYXRhLmxlbmd0aCArIGJpbmFyeUNodW5rLmxlbmd0aCk7XG4gICAgbmV3RGF0YS5zZXQoZGF0YSk7XG4gICAgbmV3RGF0YS5zZXQoYmluYXJ5Q2h1bmssIGRhdGEubGVuZ3RoKTtcbiAgICBkYXRhID0gbmV3RGF0YTtcblxuICAgIGxldCBwYXR0ZXJuSW5kZXg7XG4gICAgd2hpbGUgKChwYXR0ZXJuSW5kZXggPSBmaW5kRG91YmxlTmV3bGluZUluZGV4KGRhdGEpKSAhPT0gLTEpIHtcbiAgICAgIHlpZWxkIGRhdGEuc2xpY2UoMCwgcGF0dGVybkluZGV4KTtcbiAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKHBhdHRlcm5JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xuICAgIHlpZWxkIGRhdGE7XG4gIH1cbn1cblxuY2xhc3MgU1NFRGVjb2RlciB7XG4gIHByaXZhdGUgZGF0YTogc3RyaW5nW107XG4gIHByaXZhdGUgZXZlbnQ6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgY2h1bmtzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmV2ZW50ID0gbnVsbDtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICB0aGlzLmNodW5rcyA9IFtdO1xuICB9XG5cbiAgZGVjb2RlKGxpbmU6IHN0cmluZykge1xuICAgIGlmIChsaW5lLmVuZHNXaXRoKCdcXHInKSkge1xuICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKDAsIGxpbmUubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgaWYgKCFsaW5lKSB7XG4gICAgICAvLyBlbXB0eSBsaW5lIGFuZCB3ZSBkaWRuJ3QgcHJldmlvdXNseSBlbmNvdW50ZXIgYW55IG1lc3NhZ2VzXG4gICAgICBpZiAoIXRoaXMuZXZlbnQgJiYgIXRoaXMuZGF0YS5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBzc2U6IFNlcnZlclNlbnRFdmVudCA9IHtcbiAgICAgICAgZXZlbnQ6IHRoaXMuZXZlbnQsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YS5qb2luKCdcXG4nKSxcbiAgICAgICAgcmF3OiB0aGlzLmNodW5rcyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZXZlbnQgPSBudWxsO1xuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICB0aGlzLmNodW5rcyA9IFtdO1xuXG4gICAgICByZXR1cm4gc3NlO1xuICAgIH1cblxuICAgIHRoaXMuY2h1bmtzLnB1c2gobGluZSk7XG5cbiAgICBpZiAobGluZS5zdGFydHNXaXRoKCc6JykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBbZmllbGRuYW1lLCBfLCB2YWx1ZV0gPSBwYXJ0aXRpb24obGluZSwgJzonKTtcblxuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcgJykpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZG5hbWUgPT09ICdldmVudCcpIHtcbiAgICAgIHRoaXMuZXZlbnQgPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkbmFtZSA9PT0gJ2RhdGEnKSB7XG4gICAgICB0aGlzLmRhdGEucHVzaCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFydGl0aW9uKHN0cjogc3RyaW5nLCBkZWxpbWl0ZXI6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSB7XG4gIGNvbnN0IGluZGV4ID0gc3RyLmluZGV4T2YoZGVsaW1pdGVyKTtcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIHJldHVybiBbc3RyLnN1YnN0cmluZygwLCBpbmRleCksIGRlbGltaXRlciwgc3RyLnN1YnN0cmluZyhpbmRleCArIGRlbGltaXRlci5sZW5ndGgpXTtcbiAgfVxuXG4gIHJldHVybiBbc3RyLCAnJywgJyddO1xufVxuIiwgImltcG9ydCB7IHR5cGUgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2NvcmUnO1xuaW1wb3J0IHtcbiAgRm9ybURhdGEsXG4gIEZpbGUsXG4gIHR5cGUgQmxvYixcbiAgdHlwZSBGaWxlUHJvcGVydHlCYWcsXG4gIGdldE11bHRpcGFydFJlcXVlc3RPcHRpb25zLFxuICB0eXBlIEZzUmVhZFN0cmVhbSxcbiAgaXNGc1JlYWRTdHJlYW0sXG59IGZyb20gJy4vX3NoaW1zL2luZGV4JztcbmltcG9ydCB7IE11bHRpcGFydEJvZHkgfSBmcm9tICcuL19zaGltcy9NdWx0aXBhcnRCb2R5JztcbmV4cG9ydCB7IGZpbGVGcm9tUGF0aCB9IGZyb20gJy4vX3NoaW1zL2luZGV4JztcblxudHlwZSBCbG9iTGlrZVBhcnQgPSBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IEFycmF5QnVmZmVyVmlldyB8IEJsb2JMaWtlIHwgVWludDhBcnJheSB8IERhdGFWaWV3O1xuZXhwb3J0IHR5cGUgQmxvYlBhcnQgPSBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IEFycmF5QnVmZmVyVmlldyB8IEJsb2IgfCBVaW50OEFycmF5IHwgRGF0YVZpZXc7XG5cbi8qKlxuICogVHlwaWNhbGx5LCB0aGlzIGlzIGEgbmF0aXZlIFwiRmlsZVwiIGNsYXNzLlxuICpcbiAqIFdlIHByb3ZpZGUgdGhlIHtAbGluayB0b0ZpbGV9IHV0aWxpdHkgdG8gY29udmVydCBhIHZhcmlldHkgb2Ygb2JqZWN0c1xuICogaW50byB0aGUgRmlsZSBjbGFzcy5cbiAqXG4gKiBGb3IgY29udmVuaWVuY2UsIHlvdSBjYW4gYWxzbyBwYXNzIGEgZmV0Y2ggUmVzcG9uc2UsIG9yIGluIE5vZGUsXG4gKiB0aGUgcmVzdWx0IG9mIGZzLmNyZWF0ZVJlYWRTdHJlYW0oKS5cbiAqL1xuZXhwb3J0IHR5cGUgVXBsb2FkYWJsZSA9IEZpbGVMaWtlIHwgUmVzcG9uc2VMaWtlIHwgRnNSZWFkU3RyZWFtO1xuXG4vKipcbiAqIEludGVuZGVkIHRvIG1hdGNoIHdlYi5CbG9iLCBub2RlLkJsb2IsIG5vZGUtZmV0Y2guQmxvYiwgZXRjLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJsb2JMaWtlIHtcbiAgLyoqIFtNRE4gUmVmZXJlbmNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvQmxvYi9zaXplKSAqL1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG4gIC8qKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0Jsb2IvdHlwZSkgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuICAvKiogW01ETiBSZWZlcmVuY2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9CbG9iL3RleHQpICovXG4gIHRleHQoKTogUHJvbWlzZTxzdHJpbmc+O1xuICAvKiogW01ETiBSZWZlcmVuY2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9CbG9iL3NsaWNlKSAqL1xuICBzbGljZShzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyKTogQmxvYkxpa2U7XG4gIC8vIHVuZm9ydHVuYXRlbHkgQHR5cGVzL25vZGUtZmV0Y2hAXjIuNi40IGRvZXNuJ3QgdHlwZSB0aGUgYXJyYXlCdWZmZXIgbWV0aG9kXG59XG5cbi8qKlxuICogSW50ZW5kZWQgdG8gbWF0Y2ggd2ViLkZpbGUsIG5vZGUuRmlsZSwgbm9kZS1mZXRjaC5GaWxlLCBldGMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUxpa2UgZXh0ZW5kcyBCbG9iTGlrZSB7XG4gIC8qKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0ZpbGUvbGFzdE1vZGlmaWVkKSAqL1xuICByZWFkb25seSBsYXN0TW9kaWZpZWQ6IG51bWJlcjtcbiAgLyoqIFtNRE4gUmVmZXJlbmNlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRmlsZS9uYW1lKSAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZW5kZWQgdG8gbWF0Y2ggd2ViLlJlc3BvbnNlLCBub2RlLlJlc3BvbnNlLCBub2RlLWZldGNoLlJlc3BvbnNlLCBldGMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VMaWtlIHtcbiAgdXJsOiBzdHJpbmc7XG4gIGJsb2IoKTogUHJvbWlzZTxCbG9iTGlrZT47XG59XG5cbmV4cG9ydCBjb25zdCBpc1Jlc3BvbnNlTGlrZSA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgUmVzcG9uc2VMaWtlID0+XG4gIHZhbHVlICE9IG51bGwgJiZcbiAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICB0eXBlb2YgdmFsdWUudXJsID09PSAnc3RyaW5nJyAmJlxuICB0eXBlb2YgdmFsdWUuYmxvYiA9PT0gJ2Z1bmN0aW9uJztcblxuZXhwb3J0IGNvbnN0IGlzRmlsZUxpa2UgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIEZpbGVMaWtlID0+XG4gIHZhbHVlICE9IG51bGwgJiZcbiAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICB0eXBlb2YgdmFsdWUubmFtZSA9PT0gJ3N0cmluZycgJiZcbiAgdHlwZW9mIHZhbHVlLmxhc3RNb2RpZmllZCA9PT0gJ251bWJlcicgJiZcbiAgaXNCbG9iTGlrZSh2YWx1ZSk7XG5cbi8qKlxuICogVGhlIEJsb2JMaWtlIHR5cGUgb21pdHMgYXJyYXlCdWZmZXIoKSBiZWNhdXNlIEB0eXBlcy9ub2RlLWZldGNoQF4yLjYuNCBsYWNrcyBpdDsgYnV0IHRoaXMgY2hlY2tcbiAqIGFkZHMgdGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHR5cGUgYmVjYXVzZSBpdCBpcyBhdmFpbGFibGUgYW5kIHVzZWQgYXQgcnVudGltZVxuICovXG5leHBvcnQgY29uc3QgaXNCbG9iTGlrZSA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgQmxvYkxpa2UgJiB7IGFycmF5QnVmZmVyKCk6IFByb21pc2U8QXJyYXlCdWZmZXI+IH0gPT5cbiAgdmFsdWUgIT0gbnVsbCAmJlxuICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gIHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyAmJlxuICB0eXBlb2YgdmFsdWUudHlwZSA9PT0gJ3N0cmluZycgJiZcbiAgdHlwZW9mIHZhbHVlLnRleHQgPT09ICdmdW5jdGlvbicgJiZcbiAgdHlwZW9mIHZhbHVlLnNsaWNlID09PSAnZnVuY3Rpb24nICYmXG4gIHR5cGVvZiB2YWx1ZS5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJztcblxuZXhwb3J0IGNvbnN0IGlzVXBsb2FkYWJsZSA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgVXBsb2FkYWJsZSA9PiB7XG4gIHJldHVybiBpc0ZpbGVMaWtlKHZhbHVlKSB8fCBpc1Jlc3BvbnNlTGlrZSh2YWx1ZSkgfHwgaXNGc1JlYWRTdHJlYW0odmFsdWUpO1xufTtcblxuZXhwb3J0IHR5cGUgVG9GaWxlSW5wdXQgPSBVcGxvYWRhYmxlIHwgRXhjbHVkZTxCbG9iTGlrZVBhcnQsIHN0cmluZz4gfCBBc3luY0l0ZXJhYmxlPEJsb2JMaWtlUGFydD47XG5cbi8qKlxuICogSGVscGVyIGZvciBjcmVhdGluZyBhIHtAbGluayBGaWxlfSB0byBwYXNzIHRvIGFuIFNESyB1cGxvYWQgbWV0aG9kIGZyb20gYSB2YXJpZXR5IG9mIGRpZmZlcmVudCBkYXRhIGZvcm1hdHNcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgcmF3IGNvbnRlbnQgb2YgdGhlIGZpbGUuICBDYW4gYmUgYW4ge0BsaW5rIFVwbG9hZGFibGV9LCB7QGxpbmsgQmxvYkxpa2VQYXJ0fSwgb3Ige0BsaW5rIEFzeW5jSXRlcmFibGV9IG9mIHtAbGluayBCbG9iTGlrZVBhcnR9c1xuICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxlLiBJZiBvbWl0dGVkLCB0b0ZpbGUgd2lsbCB0cnkgdG8gZGV0ZXJtaW5lIGEgZmlsZSBuYW1lIGZyb20gYml0cyBpZiBwb3NzaWJsZVxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLnR5cGUgdGhlIE1JTUUgdHlwZSBvZiB0aGUgY29udGVudFxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRpb25zLmxhc3RNb2RpZmllZCB0aGUgbGFzdCBtb2RpZmllZCB0aW1lc3RhbXBcbiAqIEByZXR1cm5zIGEge0BsaW5rIEZpbGV9IHdpdGggdGhlIGdpdmVuIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvRmlsZShcbiAgdmFsdWU6IFRvRmlsZUlucHV0IHwgUHJvbWlzZUxpa2U8VG9GaWxlSW5wdXQ+LFxuICBuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb3B0aW9ucz86IEZpbGVQcm9wZXJ0eUJhZyB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8RmlsZUxpa2U+IHtcbiAgLy8gSWYgaXQncyBhIHByb21pc2UsIHJlc29sdmUgaXQuXG4gIHZhbHVlID0gYXdhaXQgdmFsdWU7XG5cbiAgLy8gSWYgd2UndmUgYmVlbiBnaXZlbiBhIGBGaWxlYCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nXG4gIGlmIChpc0ZpbGVMaWtlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChpc1Jlc3BvbnNlTGlrZSh2YWx1ZSkpIHtcbiAgICBjb25zdCBibG9iID0gYXdhaXQgdmFsdWUuYmxvYigpO1xuICAgIG5hbWUgfHw9IG5ldyBVUkwodmFsdWUudXJsKS5wYXRobmFtZS5zcGxpdCgvW1xcXFwvXS8pLnBvcCgpID8/ICd1bmtub3duX2ZpbGUnO1xuXG4gICAgLy8gd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBgQmxvYmAgaW50byBhbiBhcnJheSBidWZmZXIgYmVjYXVzZSB0aGUgYEJsb2JgIGNsYXNzXG4gICAgLy8gdGhhdCBgbm9kZS1mZXRjaGAgZGVmaW5lcyBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgd2ViIHN0YW5kYXJkIHdoaWNoIHJlc3VsdHNcbiAgICAvLyBpbiBgbmV3IEZpbGVgIGludGVycHJldGluZyBpdCBhcyBhIHN0cmluZyBpbnN0ZWFkIG9mIGJpbmFyeSBkYXRhLlxuICAgIGNvbnN0IGRhdGEgPSBpc0Jsb2JMaWtlKGJsb2IpID8gWyhhd2FpdCBibG9iLmFycmF5QnVmZmVyKCkpIGFzIGFueV0gOiBbYmxvYl07XG5cbiAgICByZXR1cm4gbmV3IEZpbGUoZGF0YSwgbmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBjb25zdCBiaXRzID0gYXdhaXQgZ2V0Qnl0ZXModmFsdWUpO1xuXG4gIG5hbWUgfHw9IGdldE5hbWUodmFsdWUpID8/ICd1bmtub3duX2ZpbGUnO1xuXG4gIGlmICghb3B0aW9ucz8udHlwZSkge1xuICAgIGNvbnN0IHR5cGUgPSAoYml0c1swXSBhcyBhbnkpPy50eXBlO1xuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIHR5cGUgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IEZpbGUoYml0cywgbmFtZSwgb3B0aW9ucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJ5dGVzKHZhbHVlOiBUb0ZpbGVJbnB1dCk6IFByb21pc2U8QXJyYXk8QmxvYlBhcnQ+PiB7XG4gIGxldCBwYXJ0czogQXJyYXk8QmxvYlBhcnQ+ID0gW107XG4gIGlmIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSB8fCAvLyBpbmNsdWRlcyBVaW50OEFycmF5LCBCdWZmZXIsIGV0Yy5cbiAgICB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyXG4gICkge1xuICAgIHBhcnRzLnB1c2godmFsdWUpO1xuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgcGFydHMucHVzaChhd2FpdCB2YWx1ZS5hcnJheUJ1ZmZlcigpKTtcbiAgfSBlbHNlIGlmIChcbiAgICBpc0FzeW5jSXRlcmFibGVJdGVyYXRvcih2YWx1ZSkgLy8gaW5jbHVkZXMgUmVhZGFibGUsIFJlYWRhYmxlU3RyZWFtLCBldGMuXG4gICkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgdmFsdWUpIHtcbiAgICAgIHBhcnRzLnB1c2goY2h1bmsgYXMgQmxvYlBhcnQpOyAvLyBUT0RPLCBjb25zaWRlciB2YWxpZGF0aW5nP1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5leHBlY3RlZCBkYXRhIHR5cGU6ICR7dHlwZW9mIHZhbHVlfTsgY29uc3RydWN0b3I6ICR7dmFsdWU/LmNvbnN0cnVjdG9yXG4gICAgICAgID8ubmFtZX07IHByb3BzOiAke3Byb3BzRm9yRXJyb3IodmFsdWUpfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuZnVuY3Rpb24gcHJvcHNGb3JFcnJvcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIHJldHVybiBgWyR7cHJvcHMubWFwKChwKSA9PiBgXCIke3B9XCJgKS5qb2luKCcsICcpfV1gO1xufVxuXG5mdW5jdGlvbiBnZXROYW1lKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKFxuICAgIGdldFN0cmluZ0Zyb21NYXliZUJ1ZmZlcih2YWx1ZS5uYW1lKSB8fFxuICAgIGdldFN0cmluZ0Zyb21NYXliZUJ1ZmZlcih2YWx1ZS5maWxlbmFtZSkgfHxcbiAgICAvLyBGb3IgZnMuUmVhZFN0cmVhbVxuICAgIGdldFN0cmluZ0Zyb21NYXliZUJ1ZmZlcih2YWx1ZS5wYXRoKT8uc3BsaXQoL1tcXFxcL10vKS5wb3AoKVxuICApO1xufVxuXG5jb25zdCBnZXRTdHJpbmdGcm9tTWF5YmVCdWZmZXIgPSAoeDogc3RyaW5nIHwgQnVmZmVyIHwgdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHJldHVybiB4O1xuICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgeCBpbnN0YW5jZW9mIEJ1ZmZlcikgcmV0dXJuIFN0cmluZyh4KTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGlzQXN5bmNJdGVyYWJsZUl0ZXJhdG9yID0gKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8dW5rbm93bj4gPT5cbiAgdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG5cbmV4cG9ydCBjb25zdCBpc011bHRpcGFydEJvZHkgPSAoYm9keTogYW55KTogYm9keSBpcyBNdWx0aXBhcnRCb2R5ID0+XG4gIGJvZHkgJiYgdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnICYmIGJvZHkuYm9keSAmJiBib2R5W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNdWx0aXBhcnRCb2R5JztcblxuLyoqXG4gKiBSZXR1cm5zIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSByZXF1ZXN0IGlmIGFueSBwYXJ0IG9mIHRoZSBnaXZlbiByZXF1ZXN0IGJvZHkgY29udGFpbnMgYSBGaWxlIC8gQmxvYiB2YWx1ZS5cbiAqIE90aGVyd2lzZSByZXR1cm5zIHRoZSByZXF1ZXN0IGFzIGlzLlxuICovXG5leHBvcnQgY29uc3QgbWF5YmVNdWx0aXBhcnRGb3JtUmVxdWVzdE9wdGlvbnMgPSBhc3luYyA8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgb3B0czogUmVxdWVzdE9wdGlvbnM8VD4sXG4pOiBQcm9taXNlPFJlcXVlc3RPcHRpb25zPFQgfCBNdWx0aXBhcnRCb2R5Pj4gPT4ge1xuICBpZiAoIWhhc1VwbG9hZGFibGVWYWx1ZShvcHRzLmJvZHkpKSByZXR1cm4gb3B0cztcblxuICBjb25zdCBmb3JtID0gYXdhaXQgY3JlYXRlRm9ybShvcHRzLmJvZHkpO1xuICByZXR1cm4gZ2V0TXVsdGlwYXJ0UmVxdWVzdE9wdGlvbnMoZm9ybSwgb3B0cyk7XG59O1xuXG5leHBvcnQgY29uc3QgbXVsdGlwYXJ0Rm9ybVJlcXVlc3RPcHRpb25zID0gYXN5bmMgPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIG9wdHM6IFJlcXVlc3RPcHRpb25zPFQ+LFxuKTogUHJvbWlzZTxSZXF1ZXN0T3B0aW9uczxUIHwgTXVsdGlwYXJ0Qm9keT4+ID0+IHtcbiAgY29uc3QgZm9ybSA9IGF3YWl0IGNyZWF0ZUZvcm0ob3B0cy5ib2R5KTtcbiAgcmV0dXJuIGdldE11bHRpcGFydFJlcXVlc3RPcHRpb25zKGZvcm0sIG9wdHMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUZvcm0gPSBhc3luYyA8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pihib2R5OiBUIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxGb3JtRGF0YT4gPT4ge1xuICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKGJvZHkgfHwge30pLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBhZGRGb3JtVmFsdWUoZm9ybSwga2V5LCB2YWx1ZSkpKTtcbiAgcmV0dXJuIGZvcm07XG59O1xuXG5jb25zdCBoYXNVcGxvYWRhYmxlVmFsdWUgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgaWYgKGlzVXBsb2FkYWJsZSh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5zb21lKGhhc1VwbG9hZGFibGVWYWx1ZSk7XG4gIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrIGluIHZhbHVlKSB7XG4gICAgICBpZiAoaGFzVXBsb2FkYWJsZVZhbHVlKCh2YWx1ZSBhcyBhbnkpW2tdKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGFkZEZvcm1WYWx1ZSA9IGFzeW5jIChmb3JtOiBGb3JtRGF0YSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBSZWNlaXZlZCBudWxsIGZvciBcIiR7a2V5fVwiOyB0byBwYXNzIG51bGwgaW4gRm9ybURhdGEsIHlvdSBtdXN0IHVzZSB0aGUgc3RyaW5nICdudWxsJ2AsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRPRE86IG1ha2UgbmVzdGVkIGZvcm1hdHMgY29uZmlndXJhYmxlXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICBmb3JtLmFwcGVuZChrZXksIFN0cmluZyh2YWx1ZSkpO1xuICB9IGVsc2UgaWYgKGlzVXBsb2FkYWJsZSh2YWx1ZSkpIHtcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdG9GaWxlKHZhbHVlKTtcbiAgICBmb3JtLmFwcGVuZChrZXksIGZpbGUgYXMgRmlsZSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh2YWx1ZS5tYXAoKGVudHJ5KSA9PiBhZGRGb3JtVmFsdWUoZm9ybSwga2V5ICsgJ1tdJywgZW50cnkpKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW25hbWUsIHByb3BdKSA9PiBhZGRGb3JtVmFsdWUoZm9ybSwgYCR7a2V5fVske25hbWV9XWAsIHByb3ApKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgSW52YWxpZCB2YWx1ZSBnaXZlbiB0byBmb3JtLCBleHBlY3RlZCBhIHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBvYmplY3QsIEFycmF5LCBGaWxlIG9yIEJsb2IgYnV0IGdvdCAke3ZhbHVlfSBpbnN0ZWFkYCxcbiAgICApO1xuICB9XG59O1xuIiwgImltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nO1xuaW1wb3J0IHsgU3RyZWFtIH0gZnJvbSAnLi9zdHJlYW1pbmcnO1xuaW1wb3J0IHtcbiAgT3BlbkFJRXJyb3IsXG4gIEFQSUVycm9yLFxuICBBUElDb25uZWN0aW9uRXJyb3IsXG4gIEFQSUNvbm5lY3Rpb25UaW1lb3V0RXJyb3IsXG4gIEFQSVVzZXJBYm9ydEVycm9yLFxufSBmcm9tICcuL2Vycm9yJztcbmltcG9ydCB7XG4gIGtpbmQgYXMgc2hpbXNLaW5kLFxuICB0eXBlIFJlYWRhYmxlLFxuICBnZXREZWZhdWx0QWdlbnQsXG4gIHR5cGUgQWdlbnQsXG4gIGZldGNoLFxuICB0eXBlIFJlcXVlc3RJbmZvLFxuICB0eXBlIFJlcXVlc3RJbml0LFxuICB0eXBlIFJlc3BvbnNlLFxuICB0eXBlIEhlYWRlcnNJbml0LFxufSBmcm9tICcuL19zaGltcy9pbmRleCc7XG5leHBvcnQgeyB0eXBlIFJlc3BvbnNlIH07XG5pbXBvcnQgeyBCbG9iTGlrZSwgaXNCbG9iTGlrZSwgaXNNdWx0aXBhcnRCb2R5IH0gZnJvbSAnLi91cGxvYWRzJztcbmV4cG9ydCB7XG4gIG1heWJlTXVsdGlwYXJ0Rm9ybVJlcXVlc3RPcHRpb25zLFxuICBtdWx0aXBhcnRGb3JtUmVxdWVzdE9wdGlvbnMsXG4gIGNyZWF0ZUZvcm0sXG4gIHR5cGUgVXBsb2FkYWJsZSxcbn0gZnJvbSAnLi91cGxvYWRzJztcblxuZXhwb3J0IHR5cGUgRmV0Y2ggPSAodXJsOiBSZXF1ZXN0SW5mbywgaW5pdD86IFJlcXVlc3RJbml0KSA9PiBQcm9taXNlPFJlc3BvbnNlPjtcblxudHlwZSBQcm9taXNlT3JWYWx1ZTxUPiA9IFQgfCBQcm9taXNlPFQ+O1xuXG50eXBlIEFQSVJlc3BvbnNlUHJvcHMgPSB7XG4gIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgb3B0aW9uczogRmluYWxSZXF1ZXN0T3B0aW9ucztcbiAgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFBhcnNlUmVzcG9uc2U8VD4ocHJvcHM6IEFQSVJlc3BvbnNlUHJvcHMpOiBQcm9taXNlPFdpdGhSZXF1ZXN0SUQ8VD4+IHtcbiAgY29uc3QgeyByZXNwb25zZSB9ID0gcHJvcHM7XG4gIGlmIChwcm9wcy5vcHRpb25zLnN0cmVhbSkge1xuICAgIGRlYnVnKCdyZXNwb25zZScsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UudXJsLCByZXNwb25zZS5oZWFkZXJzLCByZXNwb25zZS5ib2R5KTtcblxuICAgIC8vIE5vdGU6IHRoZXJlIGlzIGFuIGludmFyaWFudCBoZXJlIHRoYXQgaXNuJ3QgcmVwcmVzZW50ZWQgaW4gdGhlIHR5cGUgc3lzdGVtXG4gICAgLy8gdGhhdCBpZiB5b3Ugc2V0IGBzdHJlYW06IHRydWVgIHRoZSByZXNwb25zZSB0eXBlIG11c3QgYWxzbyBiZSBgU3RyZWFtPFQ+YFxuXG4gICAgaWYgKHByb3BzLm9wdGlvbnMuX19zdHJlYW1DbGFzcykge1xuICAgICAgcmV0dXJuIHByb3BzLm9wdGlvbnMuX19zdHJlYW1DbGFzcy5mcm9tU1NFUmVzcG9uc2UocmVzcG9uc2UsIHByb3BzLmNvbnRyb2xsZXIpIGFzIGFueTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyZWFtLmZyb21TU0VSZXNwb25zZShyZXNwb25zZSwgcHJvcHMuY29udHJvbGxlcikgYXMgYW55O1xuICB9XG5cbiAgLy8gZmV0Y2ggcmVmdXNlcyB0byByZWFkIHRoZSBib2R5IHdoZW4gdGhlIHN0YXR1cyBjb2RlIGlzIDIwNC5cbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XG4gICAgcmV0dXJuIG51bGwgYXMgV2l0aFJlcXVlc3RJRDxUPjtcbiAgfVxuXG4gIGlmIChwcm9wcy5vcHRpb25zLl9fYmluYXJ5UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgdW5rbm93biBhcyBXaXRoUmVxdWVzdElEPFQ+O1xuICB9XG5cbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG4gIGNvbnN0IG1lZGlhVHlwZSA9IGNvbnRlbnRUeXBlPy5zcGxpdCgnOycpWzBdPy50cmltKCk7XG4gIGNvbnN0IGlzSlNPTiA9IG1lZGlhVHlwZT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSB8fCBtZWRpYVR5cGU/LmVuZHNXaXRoKCcranNvbicpO1xuICBpZiAoaXNKU09OKSB7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGRlYnVnKCdyZXNwb25zZScsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UudXJsLCByZXNwb25zZS5oZWFkZXJzLCBqc29uKTtcblxuICAgIHJldHVybiBfYWRkUmVxdWVzdElEKGpzb24sIHJlc3BvbnNlKTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gIGRlYnVnKCdyZXNwb25zZScsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UudXJsLCByZXNwb25zZS5oZWFkZXJzLCB0ZXh0KTtcblxuICAvLyBUT0RPIGhhbmRsZSBibG9iLCBhcnJheWJ1ZmZlciwgb3RoZXIgY29udGVudCB0eXBlcywgZXRjLlxuICByZXR1cm4gdGV4dCBhcyB1bmtub3duIGFzIFdpdGhSZXF1ZXN0SUQ8VD47XG59XG5cbnR5cGUgV2l0aFJlcXVlc3RJRDxUPiA9XG4gIFQgZXh0ZW5kcyBBcnJheTxhbnk+IHwgUmVzcG9uc2UgfCBBYnN0cmFjdFBhZ2U8YW55PiA/IFRcbiAgOiBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA/IFQgJiB7IF9yZXF1ZXN0X2lkPzogc3RyaW5nIHwgbnVsbCB9XG4gIDogVDtcblxuZnVuY3Rpb24gX2FkZFJlcXVlc3RJRDxUPih2YWx1ZTogVCwgcmVzcG9uc2U6IFJlc3BvbnNlKTogV2l0aFJlcXVlc3RJRDxUPiB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSBhcyBXaXRoUmVxdWVzdElEPFQ+O1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ19yZXF1ZXN0X2lkJywge1xuICAgIHZhbHVlOiByZXNwb25zZS5oZWFkZXJzLmdldCgneC1yZXF1ZXN0LWlkJyksXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pIGFzIFdpdGhSZXF1ZXN0SUQ8VD47XG59XG5cbi8qKlxuICogQSBzdWJjbGFzcyBvZiBgUHJvbWlzZWAgcHJvdmlkaW5nIGFkZGl0aW9uYWwgaGVscGVyIG1ldGhvZHNcbiAqIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBTREsuXG4gKi9cbmV4cG9ydCBjbGFzcyBBUElQcm9taXNlPFQ+IGV4dGVuZHMgUHJvbWlzZTxXaXRoUmVxdWVzdElEPFQ+PiB7XG4gIHByaXZhdGUgcGFyc2VkUHJvbWlzZTogUHJvbWlzZTxXaXRoUmVxdWVzdElEPFQ+PiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlc3BvbnNlUHJvbWlzZTogUHJvbWlzZTxBUElSZXNwb25zZVByb3BzPixcbiAgICBwcml2YXRlIHBhcnNlUmVzcG9uc2U6IChcbiAgICAgIHByb3BzOiBBUElSZXNwb25zZVByb3BzLFxuICAgICkgPT4gUHJvbWlzZU9yVmFsdWU8V2l0aFJlcXVlc3RJRDxUPj4gPSBkZWZhdWx0UGFyc2VSZXNwb25zZSxcbiAgKSB7XG4gICAgc3VwZXIoKHJlc29sdmUpID0+IHtcbiAgICAgIC8vIHRoaXMgaXMgbWF5YmUgYSBiaXQgd2VpcmQgYnV0IHRoaXMgaGFzIHRvIGJlIGEgbm8tb3AgdG8gbm90IGltcGxpY2l0bHlcbiAgICAgIC8vIHBhcnNlIHRoZSByZXNwb25zZSBib2R5OyBpbnN0ZWFkIC50aGVuLCAuY2F0Y2gsIC5maW5hbGx5IGFyZSBvdmVycmlkZGVuXG4gICAgICAvLyB0byBwYXJzZSB0aGUgcmVzcG9uc2VcbiAgICAgIHJlc29sdmUobnVsbCBhcyBhbnkpO1xuICAgIH0pO1xuICB9XG5cbiAgX3RoZW5VbndyYXA8VT4odHJhbnNmb3JtOiAoZGF0YTogVCwgcHJvcHM6IEFQSVJlc3BvbnNlUHJvcHMpID0+IFUpOiBBUElQcm9taXNlPFU+IHtcbiAgICByZXR1cm4gbmV3IEFQSVByb21pc2UodGhpcy5yZXNwb25zZVByb21pc2UsIGFzeW5jIChwcm9wcykgPT5cbiAgICAgIF9hZGRSZXF1ZXN0SUQodHJhbnNmb3JtKGF3YWl0IHRoaXMucGFyc2VSZXNwb25zZShwcm9wcyksIHByb3BzKSwgcHJvcHMucmVzcG9uc2UpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcmF3IGBSZXNwb25zZWAgaW5zdGFuY2UgaW5zdGVhZCBvZiBwYXJzaW5nIHRoZSByZXNwb25zZVxuICAgKiBkYXRhLlxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBwYXJzZSB0aGUgcmVzcG9uc2UgYm9keSBidXQgc3RpbGwgZ2V0IHRoZSBgUmVzcG9uc2VgXG4gICAqIGluc3RhbmNlLCB5b3UgY2FuIHVzZSB7QGxpbmsgd2l0aFJlc3BvbnNlKCl9LlxuICAgKlxuICAgKiBcdUQ4M0RcdURDNEIgR2V0dGluZyB0aGUgd3JvbmcgVHlwZVNjcmlwdCB0eXBlIGZvciBgUmVzcG9uc2VgP1xuICAgKiBUcnkgc2V0dGluZyBgXCJtb2R1bGVSZXNvbHV0aW9uXCI6IFwiTm9kZU5leHRcImAgaWYgeW91IGNhbixcbiAgICogb3IgYWRkIG9uZSBvZiB0aGVzZSBpbXBvcnRzIGJlZm9yZSB5b3VyIGZpcnN0IGBpbXBvcnQgXHUyMDI2IGZyb20gJ29wZW5haSdgOlxuICAgKiAtIGBpbXBvcnQgJ29wZW5haS9zaGltcy9ub2RlJ2AgKGlmIHlvdSdyZSBydW5uaW5nIG9uIE5vZGUpXG4gICAqIC0gYGltcG9ydCAnb3BlbmFpL3NoaW1zL3dlYidgIChvdGhlcndpc2UpXG4gICAqL1xuICBhc1Jlc3BvbnNlKCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZVByb21pc2UudGhlbigocCkgPT4gcC5yZXNwb25zZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcGFyc2VkIHJlc3BvbnNlIGRhdGEsIHRoZSByYXcgYFJlc3BvbnNlYCBpbnN0YW5jZSBhbmQgdGhlIElEIG9mIHRoZSByZXF1ZXN0LFxuICAgKiByZXR1cm5lZCB2aWEgdGhlIFgtUmVxdWVzdC1JRCBoZWFkZXIgd2hpY2ggaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcmVxdWVzdHMgYW5kIHJlcG9ydGluZ1xuICAgKiBpc3N1ZXMgdG8gT3BlbkFJLlxuICAgKlxuICAgKiBJZiB5b3UganVzdCB3YW50IHRvIGdldCB0aGUgcmF3IGBSZXNwb25zZWAgaW5zdGFuY2Ugd2l0aG91dCBwYXJzaW5nIGl0LFxuICAgKiB5b3UgY2FuIHVzZSB7QGxpbmsgYXNSZXNwb25zZSgpfS5cbiAgICpcbiAgICpcbiAgICogXHVEODNEXHVEQzRCIEdldHRpbmcgdGhlIHdyb25nIFR5cGVTY3JpcHQgdHlwZSBmb3IgYFJlc3BvbnNlYD9cbiAgICogVHJ5IHNldHRpbmcgYFwibW9kdWxlUmVzb2x1dGlvblwiOiBcIk5vZGVOZXh0XCJgIGlmIHlvdSBjYW4sXG4gICAqIG9yIGFkZCBvbmUgb2YgdGhlc2UgaW1wb3J0cyBiZWZvcmUgeW91ciBmaXJzdCBgaW1wb3J0IFx1MjAyNiBmcm9tICdvcGVuYWknYDpcbiAgICogLSBgaW1wb3J0ICdvcGVuYWkvc2hpbXMvbm9kZSdgIChpZiB5b3UncmUgcnVubmluZyBvbiBOb2RlKVxuICAgKiAtIGBpbXBvcnQgJ29wZW5haS9zaGltcy93ZWInYCAob3RoZXJ3aXNlKVxuICAgKi9cbiAgYXN5bmMgd2l0aFJlc3BvbnNlKCk6IFByb21pc2U8eyBkYXRhOiBUOyByZXNwb25zZTogUmVzcG9uc2U7IHJlcXVlc3RfaWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfT4ge1xuICAgIGNvbnN0IFtkYXRhLCByZXNwb25zZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5wYXJzZSgpLCB0aGlzLmFzUmVzcG9uc2UoKV0pO1xuICAgIHJldHVybiB7IGRhdGEsIHJlc3BvbnNlLCByZXF1ZXN0X2lkOiByZXNwb25zZS5oZWFkZXJzLmdldCgneC1yZXF1ZXN0LWlkJykgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2UoKTogUHJvbWlzZTxXaXRoUmVxdWVzdElEPFQ+PiB7XG4gICAgaWYgKCF0aGlzLnBhcnNlZFByb21pc2UpIHtcbiAgICAgIHRoaXMucGFyc2VkUHJvbWlzZSA9IHRoaXMucmVzcG9uc2VQcm9taXNlLnRoZW4odGhpcy5wYXJzZVJlc3BvbnNlKSBhcyBhbnkgYXMgUHJvbWlzZTxXaXRoUmVxdWVzdElEPFQ+PjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyc2VkUHJvbWlzZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRoZW48VFJlc3VsdDEgPSBXaXRoUmVxdWVzdElEPFQ+LCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFdpdGhSZXF1ZXN0SUQ8VD4pID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IHVuZGVmaW5lZCB8IG51bGwsXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IHVuZGVmaW5lZCB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgIHJldHVybiB0aGlzLnBhcnNlKCkudGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCk7XG4gIH1cblxuICBvdmVycmlkZSBjYXRjaDxUUmVzdWx0ID0gbmV2ZXI+KFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0IHwgUHJvbWlzZUxpa2U8VFJlc3VsdD4pIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxXaXRoUmVxdWVzdElEPFQ+IHwgVFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnBhcnNlKCkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cblxuICBvdmVycmlkZSBmaW5hbGx5KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB8IG51bGwpOiBQcm9taXNlPFdpdGhSZXF1ZXN0SUQ8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZSgpLmZpbmFsbHkob25maW5hbGx5KTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVBJQ2xpZW50IHtcbiAgYmFzZVVSTDogc3RyaW5nO1xuICBtYXhSZXRyaWVzOiBudW1iZXI7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgaHR0cEFnZW50OiBBZ2VudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGZldGNoOiBGZXRjaDtcbiAgcHJvdGVjdGVkIGlkZW1wb3RlbmN5SGVhZGVyPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBiYXNlVVJMLFxuICAgIG1heFJldHJpZXMgPSAyLFxuICAgIHRpbWVvdXQgPSA2MDAwMDAsIC8vIDEwIG1pbnV0ZXNcbiAgICBodHRwQWdlbnQsXG4gICAgZmV0Y2g6IG92ZXJyaWRkZW5GZXRjaCxcbiAgfToge1xuICAgIGJhc2VVUkw6IHN0cmluZztcbiAgICBtYXhSZXRyaWVzPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBodHRwQWdlbnQ6IEFnZW50IHwgdW5kZWZpbmVkO1xuICAgIGZldGNoOiBGZXRjaCB8IHVuZGVmaW5lZDtcbiAgfSkge1xuICAgIHRoaXMuYmFzZVVSTCA9IGJhc2VVUkw7XG4gICAgdGhpcy5tYXhSZXRyaWVzID0gdmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoJ21heFJldHJpZXMnLCBtYXhSZXRyaWVzKTtcbiAgICB0aGlzLnRpbWVvdXQgPSB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcigndGltZW91dCcsIHRpbWVvdXQpO1xuICAgIHRoaXMuaHR0cEFnZW50ID0gaHR0cEFnZW50O1xuXG4gICAgdGhpcy5mZXRjaCA9IG92ZXJyaWRkZW5GZXRjaCA/PyBmZXRjaDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdXRoSGVhZGVycyhvcHRzOiBGaW5hbFJlcXVlc3RPcHRpb25zKTogSGVhZGVycyB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoaXMgdG8gYWRkIHlvdXIgb3duIGRlZmF1bHQgaGVhZGVycywgZm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB7XG4gICAqICAgIC4uLnN1cGVyLmRlZmF1bHRIZWFkZXJzKCksXG4gICAqICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgMTIzJyxcbiAgICogIH1cbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0SGVhZGVycyhvcHRzOiBGaW5hbFJlcXVlc3RPcHRpb25zKTogSGVhZGVycyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdVc2VyLUFnZW50JzogdGhpcy5nZXRVc2VyQWdlbnQoKSxcbiAgICAgIC4uLmdldFBsYXRmb3JtSGVhZGVycygpLFxuICAgICAgLi4udGhpcy5hdXRoSGVhZGVycyhvcHRzKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGRlZmF1bHRRdWVyeSgpOiBEZWZhdWx0UXVlcnkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoaXMgdG8gYWRkIHlvdXIgb3duIGhlYWRlcnMgdmFsaWRhdGlvbjpcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUhlYWRlcnMoaGVhZGVyczogSGVhZGVycywgY3VzdG9tSGVhZGVyczogSGVhZGVycykge31cblxuICBwcm90ZWN0ZWQgZGVmYXVsdElkZW1wb3RlbmN5S2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBzdGFpbmxlc3Mtbm9kZS1yZXRyeS0ke3V1aWQ0KCl9YDtcbiAgfVxuXG4gIGdldDxSZXEsIFJzcD4ocGF0aDogc3RyaW5nLCBvcHRzPzogUHJvbWlzZU9yVmFsdWU8UmVxdWVzdE9wdGlvbnM8UmVxPj4pOiBBUElQcm9taXNlPFJzcD4ge1xuICAgIHJldHVybiB0aGlzLm1ldGhvZFJlcXVlc3QoJ2dldCcsIHBhdGgsIG9wdHMpO1xuICB9XG5cbiAgcG9zdDxSZXEsIFJzcD4ocGF0aDogc3RyaW5nLCBvcHRzPzogUHJvbWlzZU9yVmFsdWU8UmVxdWVzdE9wdGlvbnM8UmVxPj4pOiBBUElQcm9taXNlPFJzcD4ge1xuICAgIHJldHVybiB0aGlzLm1ldGhvZFJlcXVlc3QoJ3Bvc3QnLCBwYXRoLCBvcHRzKTtcbiAgfVxuXG4gIHBhdGNoPFJlcSwgUnNwPihwYXRoOiBzdHJpbmcsIG9wdHM/OiBQcm9taXNlT3JWYWx1ZTxSZXF1ZXN0T3B0aW9uczxSZXE+Pik6IEFQSVByb21pc2U8UnNwPiB7XG4gICAgcmV0dXJuIHRoaXMubWV0aG9kUmVxdWVzdCgncGF0Y2gnLCBwYXRoLCBvcHRzKTtcbiAgfVxuXG4gIHB1dDxSZXEsIFJzcD4ocGF0aDogc3RyaW5nLCBvcHRzPzogUHJvbWlzZU9yVmFsdWU8UmVxdWVzdE9wdGlvbnM8UmVxPj4pOiBBUElQcm9taXNlPFJzcD4ge1xuICAgIHJldHVybiB0aGlzLm1ldGhvZFJlcXVlc3QoJ3B1dCcsIHBhdGgsIG9wdHMpO1xuICB9XG5cbiAgZGVsZXRlPFJlcSwgUnNwPihwYXRoOiBzdHJpbmcsIG9wdHM/OiBQcm9taXNlT3JWYWx1ZTxSZXF1ZXN0T3B0aW9uczxSZXE+Pik6IEFQSVByb21pc2U8UnNwPiB7XG4gICAgcmV0dXJuIHRoaXMubWV0aG9kUmVxdWVzdCgnZGVsZXRlJywgcGF0aCwgb3B0cyk7XG4gIH1cblxuICBwcml2YXRlIG1ldGhvZFJlcXVlc3Q8UmVxLCBSc3A+KFxuICAgIG1ldGhvZDogSFRUUE1ldGhvZCxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IFByb21pc2VPclZhbHVlPFJlcXVlc3RPcHRpb25zPFJlcT4+LFxuICApOiBBUElQcm9taXNlPFJzcD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICBQcm9taXNlLnJlc29sdmUob3B0cykudGhlbihhc3luYyAob3B0cykgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID1cbiAgICAgICAgICBvcHRzICYmIGlzQmxvYkxpa2Uob3B0cz8uYm9keSkgPyBuZXcgRGF0YVZpZXcoYXdhaXQgb3B0cy5ib2R5LmFycmF5QnVmZmVyKCkpXG4gICAgICAgICAgOiBvcHRzPy5ib2R5IGluc3RhbmNlb2YgRGF0YVZpZXcgPyBvcHRzLmJvZHlcbiAgICAgICAgICA6IG9wdHM/LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBEYXRhVmlldyhvcHRzLmJvZHkpXG4gICAgICAgICAgOiBvcHRzICYmIEFycmF5QnVmZmVyLmlzVmlldyhvcHRzPy5ib2R5KSA/IG5ldyBEYXRhVmlldyhvcHRzLmJvZHkuYnVmZmVyKVxuICAgICAgICAgIDogb3B0cz8uYm9keTtcbiAgICAgICAgcmV0dXJuIHsgbWV0aG9kLCBwYXRoLCAuLi5vcHRzLCBib2R5IH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJTGlzdDxJdGVtLCBQYWdlQ2xhc3MgZXh0ZW5kcyBBYnN0cmFjdFBhZ2U8SXRlbT4gPSBBYnN0cmFjdFBhZ2U8SXRlbT4+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBQYWdlOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBQYWdlQ2xhc3MsXG4gICAgb3B0cz86IFJlcXVlc3RPcHRpb25zPGFueT4sXG4gICk6IFBhZ2VQcm9taXNlPFBhZ2VDbGFzcywgSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RBUElMaXN0KFBhZ2UsIHsgbWV0aG9kOiAnZ2V0JywgcGF0aCwgLi4ub3B0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlQ29udGVudExlbmd0aChib2R5OiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuYnl0ZUxlbmd0aChib2R5LCAndXRmOCcpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgVGV4dEVuY29kZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZXIuZW5jb2RlKGJvZHkpO1xuICAgICAgICByZXR1cm4gZW5jb2RlZC5sZW5ndGgudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuICAgICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYnVpbGRSZXF1ZXN0PFJlcT4oXG4gICAgb3B0aW9uczogRmluYWxSZXF1ZXN0T3B0aW9uczxSZXE+LFxuICAgIHsgcmV0cnlDb3VudCA9IDAgfTogeyByZXRyeUNvdW50PzogbnVtYmVyIH0gPSB7fSxcbiAgKTogeyByZXE6IFJlcXVlc3RJbml0OyB1cmw6IHN0cmluZzsgdGltZW91dDogbnVtYmVyIH0ge1xuICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTtcbiAgICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgcXVlcnksIGhlYWRlcnM6IGhlYWRlcnMgPSB7fSB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IGJvZHkgPVxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KG9wdGlvbnMuYm9keSkgfHwgKG9wdGlvbnMuX19iaW5hcnlSZXF1ZXN0ICYmIHR5cGVvZiBvcHRpb25zLmJvZHkgPT09ICdzdHJpbmcnKSA/XG4gICAgICAgIG9wdGlvbnMuYm9keVxuICAgICAgOiBpc011bHRpcGFydEJvZHkob3B0aW9ucy5ib2R5KSA/IG9wdGlvbnMuYm9keS5ib2R5XG4gICAgICA6IG9wdGlvbnMuYm9keSA/IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuYm9keSwgbnVsbCwgMilcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpcy5jYWxjdWxhdGVDb250ZW50TGVuZ3RoKGJvZHkpO1xuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVSTChwYXRoISwgcXVlcnkpO1xuICAgIGlmICgndGltZW91dCcgaW4gb3B0aW9ucykgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoJ3RpbWVvdXQnLCBvcHRpb25zLnRpbWVvdXQpO1xuICAgIG9wdGlvbnMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyB0aGlzLnRpbWVvdXQ7XG4gICAgY29uc3QgaHR0cEFnZW50ID0gb3B0aW9ucy5odHRwQWdlbnQgPz8gdGhpcy5odHRwQWdlbnQgPz8gZ2V0RGVmYXVsdEFnZW50KHVybCk7XG4gICAgY29uc3QgbWluQWdlbnRUaW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ICsgMTAwMDtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgKGh0dHBBZ2VudCBhcyBhbnkpPy5vcHRpb25zPy50aW1lb3V0ID09PSAnbnVtYmVyJyAmJlxuICAgICAgbWluQWdlbnRUaW1lb3V0ID4gKChodHRwQWdlbnQgYXMgYW55KS5vcHRpb25zLnRpbWVvdXQgPz8gMClcbiAgICApIHtcbiAgICAgIC8vIEFsbG93IGFueSBnaXZlbiByZXF1ZXN0IHRvIGJ1bXAgb3VyIGFnZW50IGFjdGl2ZSBzb2NrZXQgdGltZW91dC5cbiAgICAgIC8vIFRoaXMgbWF5IHNlZW0gc3RyYW5nZSwgYnV0IGxlYWtpbmcgYWN0aXZlIHNvY2tldHMgc2hvdWxkIGJlIHJhcmUgYW5kIG5vdCBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMsXG4gICAgICAvLyBhbmQgd2l0aG91dCBtdXRhdGluZyBhZ2VudCB3ZSB3b3VsZCBuZWVkIHRvIGNyZWF0ZSBtb3JlIG9mIHRoZW0uXG4gICAgICAvLyBUaGlzIHRyYWRlb2ZmIG9wdGltaXplcyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgICAoaHR0cEFnZW50IGFzIGFueSkub3B0aW9ucy50aW1lb3V0ID0gbWluQWdlbnRUaW1lb3V0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlkZW1wb3RlbmN5SGVhZGVyICYmIG1ldGhvZCAhPT0gJ2dldCcpIHtcbiAgICAgIGlmICghb3B0aW9ucy5pZGVtcG90ZW5jeUtleSkgb3B0aW9ucy5pZGVtcG90ZW5jeUtleSA9IHRoaXMuZGVmYXVsdElkZW1wb3RlbmN5S2V5KCk7XG4gICAgICBoZWFkZXJzW3RoaXMuaWRlbXBvdGVuY3lIZWFkZXJdID0gb3B0aW9ucy5pZGVtcG90ZW5jeUtleTtcbiAgICB9XG5cbiAgICBjb25zdCByZXFIZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMoeyBvcHRpb25zLCBoZWFkZXJzLCBjb250ZW50TGVuZ3RoLCByZXRyeUNvdW50IH0pO1xuXG4gICAgY29uc3QgcmVxOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIC4uLihib2R5ICYmIHsgYm9keTogYm9keSBhcyBhbnkgfSksXG4gICAgICBoZWFkZXJzOiByZXFIZWFkZXJzLFxuICAgICAgLi4uKGh0dHBBZ2VudCAmJiB7IGFnZW50OiBodHRwQWdlbnQgfSksXG4gICAgICAvLyBAdHMtaWdub3JlIG5vZGUtZmV0Y2ggdXNlcyBhIGN1c3RvbSBBYm9ydFNpZ25hbCB0eXBlIHRoYXQgaXNcbiAgICAgIC8vIG5vdCBjb21wYXRpYmxlIHdpdGggc3RhbmRhcmQgd2ViIHR5cGVzXG4gICAgICBzaWduYWw6IG9wdGlvbnMuc2lnbmFsID8/IG51bGwsXG4gICAgfTtcblxuICAgIHJldHVybiB7IHJlcSwgdXJsLCB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXQgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzKHtcbiAgICBvcHRpb25zLFxuICAgIGhlYWRlcnMsXG4gICAgY29udGVudExlbmd0aCxcbiAgICByZXRyeUNvdW50LFxuICB9OiB7XG4gICAgb3B0aW9uczogRmluYWxSZXF1ZXN0T3B0aW9ucztcbiAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPjtcbiAgICBjb250ZW50TGVuZ3RoOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIHJldHJ5Q291bnQ6IG51bWJlcjtcbiAgfSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHJlcUhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBpZiAoY29udGVudExlbmd0aCkge1xuICAgICAgcmVxSGVhZGVyc1snY29udGVudC1sZW5ndGgnXSA9IGNvbnRlbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdEhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzKG9wdGlvbnMpO1xuICAgIGFwcGx5SGVhZGVyc011dChyZXFIZWFkZXJzLCBkZWZhdWx0SGVhZGVycyk7XG4gICAgYXBwbHlIZWFkZXJzTXV0KHJlcUhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gbGV0IGJ1aWx0aW4gZmV0Y2ggc2V0IHRoZSBDb250ZW50LVR5cGUgZm9yIG11bHRpcGFydCBib2RpZXNcbiAgICBpZiAoaXNNdWx0aXBhcnRCb2R5KG9wdGlvbnMuYm9keSkgJiYgc2hpbXNLaW5kICE9PSAnbm9kZScpIHtcbiAgICAgIGRlbGV0ZSByZXFIZWFkZXJzWydjb250ZW50LXR5cGUnXTtcbiAgICB9XG5cbiAgICAvLyBEb24ndCBzZXQgdGhlc2VzIGhlYWRlcnMgaWYgdGhleSB3ZXJlIGFscmVhZHkgc2V0IG9yIHJlbW92ZWQgdGhyb3VnaCBkZWZhdWx0IGhlYWRlcnMgb3IgYnkgdGhlIGNhbGxlci5cbiAgICAvLyBXZSBjaGVjayBgZGVmYXVsdEhlYWRlcnNgIGFuZCBgaGVhZGVyc2AsIHdoaWNoIGNhbiBjb250YWluIG51bGxzLCBpbnN0ZWFkIG9mIGByZXFIZWFkZXJzYCB0byBhY2NvdW50XG4gICAgLy8gZm9yIHRoZSByZW1vdmFsIGNhc2UuXG4gICAgaWYgKFxuICAgICAgZ2V0SGVhZGVyKGRlZmF1bHRIZWFkZXJzLCAneC1zdGFpbmxlc3MtcmV0cnktY291bnQnKSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBnZXRIZWFkZXIoaGVhZGVycywgJ3gtc3RhaW5sZXNzLXJldHJ5LWNvdW50JykgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcmVxSGVhZGVyc1sneC1zdGFpbmxlc3MtcmV0cnktY291bnQnXSA9IFN0cmluZyhyZXRyeUNvdW50KTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZ2V0SGVhZGVyKGRlZmF1bHRIZWFkZXJzLCAneC1zdGFpbmxlc3MtdGltZW91dCcpID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGdldEhlYWRlcihoZWFkZXJzLCAneC1zdGFpbmxlc3MtdGltZW91dCcpID09PSB1bmRlZmluZWQgJiZcbiAgICAgIG9wdGlvbnMudGltZW91dFxuICAgICkge1xuICAgICAgcmVxSGVhZGVyc1sneC1zdGFpbmxlc3MtdGltZW91dCddID0gU3RyaW5nKG9wdGlvbnMudGltZW91dCk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZUhlYWRlcnMocmVxSGVhZGVycywgaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVxSGVhZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGFzIGEgY2FsbGJhY2sgZm9yIG11dGF0aW5nIHRoZSBnaXZlbiBgRmluYWxSZXF1ZXN0T3B0aW9uc2Agb2JqZWN0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHByZXBhcmVPcHRpb25zKG9wdGlvbnM6IEZpbmFsUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgLyoqXG4gICAqIFVzZWQgYXMgYSBjYWxsYmFjayBmb3IgbXV0YXRpbmcgdGhlIGdpdmVuIGBSZXF1ZXN0SW5pdGAgb2JqZWN0LlxuICAgKlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgeW91IHdhbnQgdG8gYWRkIGNlcnRhaW4gaGVhZGVycyBiYXNlZCBvZmYgb2ZcbiAgICogdGhlIHJlcXVlc3QgcHJvcGVydGllcywgZS5nLiBgbWV0aG9kYCBvciBgdXJsYC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBwcmVwYXJlUmVxdWVzdChcbiAgICByZXF1ZXN0OiBSZXF1ZXN0SW5pdCxcbiAgICB7IHVybCwgb3B0aW9ucyB9OiB7IHVybDogc3RyaW5nOyBvcHRpb25zOiBGaW5hbFJlcXVlc3RPcHRpb25zIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge31cblxuICBwcm90ZWN0ZWQgcGFyc2VIZWFkZXJzKGhlYWRlcnM6IEhlYWRlcnNJbml0IHwgbnVsbCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiAoXG4gICAgICAhaGVhZGVycyA/IHt9XG4gICAgICA6IFN5bWJvbC5pdGVyYXRvciBpbiBoZWFkZXJzID9cbiAgICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKEFycmF5LmZyb20oaGVhZGVycyBhcyBJdGVyYWJsZTxzdHJpbmdbXT4pLm1hcCgoaGVhZGVyKSA9PiBbLi4uaGVhZGVyXSkpXG4gICAgICA6IHsgLi4uaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYWtlU3RhdHVzRXJyb3IoXG4gICAgc3RhdHVzOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgZXJyb3I6IE9iamVjdCB8IHVuZGVmaW5lZCxcbiAgICBtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgaGVhZGVyczogSGVhZGVycyB8IHVuZGVmaW5lZCxcbiAgKTogQVBJRXJyb3Ige1xuICAgIHJldHVybiBBUElFcnJvci5nZW5lcmF0ZShzdGF0dXMsIGVycm9yLCBtZXNzYWdlLCBoZWFkZXJzKTtcbiAgfVxuXG4gIHJlcXVlc3Q8UmVxLCBSc3A+KFxuICAgIG9wdGlvbnM6IFByb21pc2VPclZhbHVlPEZpbmFsUmVxdWVzdE9wdGlvbnM8UmVxPj4sXG4gICAgcmVtYWluaW5nUmV0cmllczogbnVtYmVyIHwgbnVsbCA9IG51bGwsXG4gICk6IEFQSVByb21pc2U8UnNwPiB7XG4gICAgcmV0dXJuIG5ldyBBUElQcm9taXNlKHRoaXMubWFrZVJlcXVlc3Qob3B0aW9ucywgcmVtYWluaW5nUmV0cmllcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtYWtlUmVxdWVzdDxSZXE+KFxuICAgIG9wdGlvbnNJbnB1dDogUHJvbWlzZU9yVmFsdWU8RmluYWxSZXF1ZXN0T3B0aW9uczxSZXE+PixcbiAgICByZXRyaWVzUmVtYWluaW5nOiBudW1iZXIgfCBudWxsLFxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlUHJvcHM+IHtcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgb3B0aW9uc0lucHV0O1xuICAgIGNvbnN0IG1heFJldHJpZXMgPSBvcHRpb25zLm1heFJldHJpZXMgPz8gdGhpcy5tYXhSZXRyaWVzO1xuICAgIGlmIChyZXRyaWVzUmVtYWluaW5nID09IG51bGwpIHtcbiAgICAgIHJldHJpZXNSZW1haW5pbmcgPSBtYXhSZXRyaWVzO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJlcGFyZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBjb25zdCB7IHJlcSwgdXJsLCB0aW1lb3V0IH0gPSB0aGlzLmJ1aWxkUmVxdWVzdChvcHRpb25zLCB7IHJldHJ5Q291bnQ6IG1heFJldHJpZXMgLSByZXRyaWVzUmVtYWluaW5nIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5wcmVwYXJlUmVxdWVzdChyZXEsIHsgdXJsLCBvcHRpb25zIH0pO1xuXG4gICAgZGVidWcoJ3JlcXVlc3QnLCB1cmwsIG9wdGlvbnMsIHJlcS5oZWFkZXJzKTtcblxuICAgIGlmIChvcHRpb25zLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEFQSVVzZXJBYm9ydEVycm9yKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoVGltZW91dCh1cmwsIHJlcSwgdGltZW91dCwgY29udHJvbGxlcikuY2F0Y2goY2FzdFRvRXJyb3IpO1xuXG4gICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChvcHRpb25zLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgQVBJVXNlckFib3J0RXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXRyaWVzUmVtYWluaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHJ5UmVxdWVzdChvcHRpb25zLCByZXRyaWVzUmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXNwb25zZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSUNvbm5lY3Rpb25UaW1lb3V0RXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBBUElDb25uZWN0aW9uRXJyb3IoeyBjYXVzZTogcmVzcG9uc2UgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gY3JlYXRlUmVzcG9uc2VIZWFkZXJzKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgaWYgKHJldHJpZXNSZW1haW5pbmcgJiYgdGhpcy5zaG91bGRSZXRyeShyZXNwb25zZSkpIHtcbiAgICAgICAgY29uc3QgcmV0cnlNZXNzYWdlID0gYHJldHJ5aW5nLCAke3JldHJpZXNSZW1haW5pbmd9IGF0dGVtcHRzIHJlbWFpbmluZ2A7XG4gICAgICAgIGRlYnVnKGByZXNwb25zZSAoZXJyb3I7ICR7cmV0cnlNZXNzYWdlfSlgLCByZXNwb25zZS5zdGF0dXMsIHVybCwgcmVzcG9uc2VIZWFkZXJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0cnlSZXF1ZXN0KG9wdGlvbnMsIHJldHJpZXNSZW1haW5pbmcsIHJlc3BvbnNlSGVhZGVycyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVyclRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCkuY2F0Y2goKGUpID0+IGNhc3RUb0Vycm9yKGUpLm1lc3NhZ2UpO1xuICAgICAgY29uc3QgZXJySlNPTiA9IHNhZmVKU09OKGVyclRleHQpO1xuICAgICAgY29uc3QgZXJyTWVzc2FnZSA9IGVyckpTT04gPyB1bmRlZmluZWQgOiBlcnJUZXh0O1xuICAgICAgY29uc3QgcmV0cnlNZXNzYWdlID0gcmV0cmllc1JlbWFpbmluZyA/IGAoZXJyb3I7IG5vIG1vcmUgcmV0cmllcyBsZWZ0KWAgOiBgKGVycm9yOyBub3QgcmV0cnlhYmxlKWA7XG5cbiAgICAgIGRlYnVnKGByZXNwb25zZSAoZXJyb3I7ICR7cmV0cnlNZXNzYWdlfSlgLCByZXNwb25zZS5zdGF0dXMsIHVybCwgcmVzcG9uc2VIZWFkZXJzLCBlcnJNZXNzYWdlKTtcblxuICAgICAgY29uc3QgZXJyID0gdGhpcy5tYWtlU3RhdHVzRXJyb3IocmVzcG9uc2Uuc3RhdHVzLCBlcnJKU09OLCBlcnJNZXNzYWdlLCByZXNwb25zZUhlYWRlcnMpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHJldHVybiB7IHJlc3BvbnNlLCBvcHRpb25zLCBjb250cm9sbGVyIH07XG4gIH1cblxuICByZXF1ZXN0QVBJTGlzdDxJdGVtID0gdW5rbm93biwgUGFnZUNsYXNzIGV4dGVuZHMgQWJzdHJhY3RQYWdlPEl0ZW0+ID0gQWJzdHJhY3RQYWdlPEl0ZW0+PihcbiAgICBQYWdlOiBuZXcgKC4uLmFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgQWJzdHJhY3RQYWdlPikgPT4gUGFnZUNsYXNzLFxuICAgIG9wdGlvbnM6IEZpbmFsUmVxdWVzdE9wdGlvbnMsXG4gICk6IFBhZ2VQcm9taXNlPFBhZ2VDbGFzcywgSXRlbT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLm1ha2VSZXF1ZXN0KG9wdGlvbnMsIG51bGwpO1xuICAgIHJldHVybiBuZXcgUGFnZVByb21pc2U8UGFnZUNsYXNzLCBJdGVtPih0aGlzLCByZXF1ZXN0LCBQYWdlKTtcbiAgfVxuXG4gIGJ1aWxkVVJMPFJlcT4ocGF0aDogc3RyaW5nLCBxdWVyeTogUmVxIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIGlzQWJzb2x1dGVVUkwocGF0aCkgP1xuICAgICAgICBuZXcgVVJMKHBhdGgpXG4gICAgICA6IG5ldyBVUkwodGhpcy5iYXNlVVJMICsgKHRoaXMuYmFzZVVSTC5lbmRzV2l0aCgnLycpICYmIHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aC5zbGljZSgxKSA6IHBhdGgpKTtcblxuICAgIGNvbnN0IGRlZmF1bHRRdWVyeSA9IHRoaXMuZGVmYXVsdFF1ZXJ5KCk7XG4gICAgaWYgKCFpc0VtcHR5T2JqKGRlZmF1bHRRdWVyeSkpIHtcbiAgICAgIHF1ZXJ5ID0geyAuLi5kZWZhdWx0UXVlcnksIC4uLnF1ZXJ5IH0gYXMgUmVxO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09ICdvYmplY3QnICYmIHF1ZXJ5ICYmICFBcnJheS5pc0FycmF5KHF1ZXJ5KSkge1xuICAgICAgdXJsLnNlYXJjaCA9IHRoaXMuc3RyaW5naWZ5UXVlcnkocXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdHJpbmdpZnlRdWVyeShxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgIHJldHVybiBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT1gO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IHN0cmluZ2lmeSB0eXBlICR7dHlwZW9mIHZhbHVlfTsgRXhwZWN0ZWQgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG9yIG51bGwuIElmIHlvdSBuZWVkIHRvIHBhc3MgbmVzdGVkIHF1ZXJ5IHBhcmFtZXRlcnMsIHlvdSBjYW4gbWFudWFsbHkgZW5jb2RlIHRoZW0sIGUuZy4geyBxdWVyeTogeyAnZm9vW2tleTFdJzogdmFsdWUxLCAnZm9vW2tleTJdJzogdmFsdWUyIH0gfSwgYW5kIHBsZWFzZSBvcGVuIGEgR2l0SHViIGlzc3VlIHJlcXVlc3RpbmcgYmV0dGVyIHN1cHBvcnQgZm9yIHlvdXIgdXNlIGNhc2UuYCxcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuam9pbignJicpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hXaXRoVGltZW91dChcbiAgICB1cmw6IFJlcXVlc3RJbmZvLFxuICAgIGluaXQ6IFJlcXVlc3RJbml0IHwgdW5kZWZpbmVkLFxuICAgIG1zOiBudW1iZXIsXG4gICAgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyLFxuICApOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgeyBzaWduYWwsIC4uLm9wdGlvbnMgfSA9IGluaXQgfHwge307XG4gICAgaWYgKHNpZ25hbCkgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gY29udHJvbGxlci5hYm9ydCgpKTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgbXMpO1xuXG4gICAgY29uc3QgZmV0Y2hPcHRpb25zID0ge1xuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCBhcyBhbnksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gICAgaWYgKGZldGNoT3B0aW9ucy5tZXRob2QpIHtcbiAgICAgIC8vIEN1c3RvbSBtZXRob2RzIGxpa2UgJ3BhdGNoJyBuZWVkIHRvIGJlIHVwcGVyY2FzZWRcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjI5NFxuICAgICAgZmV0Y2hPcHRpb25zLm1ldGhvZCA9IGZldGNoT3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgLy8gdXNlIHVuZGVmaW5lZCB0aGlzIGJpbmRpbmc7IGZldGNoIGVycm9ycyBpZiBib3VuZCB0byBzb21ldGhpbmcgZWxzZSBpbiBicm93c2VyL2Nsb3VkZmxhcmVcbiAgICAgIHRoaXMuZmV0Y2guY2FsbCh1bmRlZmluZWQsIHVybCwgZmV0Y2hPcHRpb25zKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRSZXRyeShyZXNwb25zZTogUmVzcG9uc2UpOiBib29sZWFuIHtcbiAgICAvLyBOb3RlIHRoaXMgaXMgbm90IGEgc3RhbmRhcmQgaGVhZGVyLlxuICAgIGNvbnN0IHNob3VsZFJldHJ5SGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtc2hvdWxkLXJldHJ5Jyk7XG5cbiAgICAvLyBJZiB0aGUgc2VydmVyIGV4cGxpY2l0bHkgc2F5cyB3aGV0aGVyIG9yIG5vdCB0byByZXRyeSwgb2JleS5cbiAgICBpZiAoc2hvdWxkUmV0cnlIZWFkZXIgPT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gICAgaWYgKHNob3VsZFJldHJ5SGVhZGVyID09PSAnZmFsc2UnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBSZXRyeSBvbiByZXF1ZXN0IHRpbWVvdXRzLlxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwOCkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBSZXRyeSBvbiBsb2NrIHRpbWVvdXRzLlxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwOSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBSZXRyeSBvbiByYXRlIGxpbWl0cy5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MjkpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gUmV0cnkgaW50ZXJuYWwgZXJyb3JzLlxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gNTAwKSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmV0cnlSZXF1ZXN0KFxuICAgIG9wdGlvbnM6IEZpbmFsUmVxdWVzdE9wdGlvbnMsXG4gICAgcmV0cmllc1JlbWFpbmluZzogbnVtYmVyLFxuICAgIHJlc3BvbnNlSGVhZGVycz86IEhlYWRlcnMgfCB1bmRlZmluZWQsXG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2VQcm9wcz4ge1xuICAgIGxldCB0aW1lb3V0TWlsbGlzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBOb3RlIHRoZSBgcmV0cnktYWZ0ZXItbXNgIGhlYWRlciBtYXkgbm90IGJlIHN0YW5kYXJkLCBidXQgaXMgYSBnb29kIGlkZWEgYW5kIHdlJ2QgbGlrZSBwcm9hY3RpdmUgc3VwcG9ydCBmb3IgaXQuXG4gICAgY29uc3QgcmV0cnlBZnRlck1pbGxpc0hlYWRlciA9IHJlc3BvbnNlSGVhZGVycz8uWydyZXRyeS1hZnRlci1tcyddO1xuICAgIGlmIChyZXRyeUFmdGVyTWlsbGlzSGVhZGVyKSB7XG4gICAgICBjb25zdCB0aW1lb3V0TXMgPSBwYXJzZUZsb2F0KHJldHJ5QWZ0ZXJNaWxsaXNIZWFkZXIpO1xuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odGltZW91dE1zKSkge1xuICAgICAgICB0aW1lb3V0TWlsbGlzID0gdGltZW91dE1zO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFib3V0IHRoZSBSZXRyeS1BZnRlciBoZWFkZXI6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZXRyeS1BZnRlclxuICAgIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSByZXNwb25zZUhlYWRlcnM/LlsncmV0cnktYWZ0ZXInXTtcbiAgICBpZiAocmV0cnlBZnRlckhlYWRlciAmJiAhdGltZW91dE1pbGxpcykge1xuICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSBwYXJzZUZsb2F0KHJldHJ5QWZ0ZXJIZWFkZXIpO1xuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odGltZW91dFNlY29uZHMpKSB7XG4gICAgICAgIHRpbWVvdXRNaWxsaXMgPSB0aW1lb3V0U2Vjb25kcyAqIDEwMDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0TWlsbGlzID0gRGF0ZS5wYXJzZShyZXRyeUFmdGVySGVhZGVyKSAtIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIEFQSSBhc2tzIHVzIHRvIHdhaXQgYSBjZXJ0YWluIGFtb3VudCBvZiB0aW1lIChhbmQgaXQncyBhIHJlYXNvbmFibGUgYW1vdW50KSxcbiAgICAvLyBqdXN0IGRvIHdoYXQgaXQgc2F5cywgYnV0IG90aGVyd2lzZSBjYWxjdWxhdGUgYSBkZWZhdWx0XG4gICAgaWYgKCEodGltZW91dE1pbGxpcyAmJiAwIDw9IHRpbWVvdXRNaWxsaXMgJiYgdGltZW91dE1pbGxpcyA8IDYwICogMTAwMCkpIHtcbiAgICAgIGNvbnN0IG1heFJldHJpZXMgPSBvcHRpb25zLm1heFJldHJpZXMgPz8gdGhpcy5tYXhSZXRyaWVzO1xuICAgICAgdGltZW91dE1pbGxpcyA9IHRoaXMuY2FsY3VsYXRlRGVmYXVsdFJldHJ5VGltZW91dE1pbGxpcyhyZXRyaWVzUmVtYWluaW5nLCBtYXhSZXRyaWVzKTtcbiAgICB9XG4gICAgYXdhaXQgc2xlZXAodGltZW91dE1pbGxpcyk7XG5cbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChvcHRpb25zLCByZXRyaWVzUmVtYWluaW5nIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZURlZmF1bHRSZXRyeVRpbWVvdXRNaWxsaXMocmV0cmllc1JlbWFpbmluZzogbnVtYmVyLCBtYXhSZXRyaWVzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGluaXRpYWxSZXRyeURlbGF5ID0gMC41O1xuICAgIGNvbnN0IG1heFJldHJ5RGVsYXkgPSA4LjA7XG5cbiAgICBjb25zdCBudW1SZXRyaWVzID0gbWF4UmV0cmllcyAtIHJldHJpZXNSZW1haW5pbmc7XG5cbiAgICAvLyBBcHBseSBleHBvbmVudGlhbCBiYWNrb2ZmLCBidXQgbm90IG1vcmUgdGhhbiB0aGUgbWF4LlxuICAgIGNvbnN0IHNsZWVwU2Vjb25kcyA9IE1hdGgubWluKGluaXRpYWxSZXRyeURlbGF5ICogTWF0aC5wb3coMiwgbnVtUmV0cmllcyksIG1heFJldHJ5RGVsYXkpO1xuXG4gICAgLy8gQXBwbHkgc29tZSBqaXR0ZXIsIHRha2UgdXAgdG8gYXQgbW9zdCAyNSBwZXJjZW50IG9mIHRoZSByZXRyeSB0aW1lLlxuICAgIGNvbnN0IGppdHRlciA9IDEgLSBNYXRoLnJhbmRvbSgpICogMC4yNTtcblxuICAgIHJldHVybiBzbGVlcFNlY29uZHMgKiBqaXR0ZXIgKiAxMDAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVc2VyQWdlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfS9KUyAke1ZFUlNJT059YDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBQYWdlSW5mbyA9IHsgdXJsOiBVUkwgfSB8IHsgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UGFnZTxJdGVtPiBpbXBsZW1lbnRzIEFzeW5jSXRlcmFibGU8SXRlbT4ge1xuICAjY2xpZW50OiBBUElDbGllbnQ7XG4gIHByb3RlY3RlZCBvcHRpb25zOiBGaW5hbFJlcXVlc3RPcHRpb25zO1xuXG4gIHByb3RlY3RlZCByZXNwb25zZTogUmVzcG9uc2U7XG4gIHByb3RlY3RlZCBib2R5OiB1bmtub3duO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogQVBJQ2xpZW50LCByZXNwb25zZTogUmVzcG9uc2UsIGJvZHk6IHVua25vd24sIG9wdGlvbnM6IEZpbmFsUmVxdWVzdE9wdGlvbnMpIHtcbiAgICB0aGlzLiNjbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgbmV4dFBhZ2VJbmZvIGluc3RlYWRcbiAgICovXG4gIGFic3RyYWN0IG5leHRQYWdlUGFyYW1zKCk6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgbnVsbDtcbiAgYWJzdHJhY3QgbmV4dFBhZ2VJbmZvKCk6IFBhZ2VJbmZvIHwgbnVsbDtcblxuICBhYnN0cmFjdCBnZXRQYWdpbmF0ZWRJdGVtcygpOiBJdGVtW107XG5cbiAgaGFzTmV4dFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldFBhZ2luYXRlZEl0ZW1zKCk7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5uZXh0UGFnZUluZm8oKSAhPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0TmV4dFBhZ2UoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgY29uc3QgbmV4dEluZm8gPSB0aGlzLm5leHRQYWdlSW5mbygpO1xuICAgIGlmICghbmV4dEluZm8pIHtcbiAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihcbiAgICAgICAgJ05vIG5leHQgcGFnZSBleHBlY3RlZDsgcGxlYXNlIGNoZWNrIGAuaGFzTmV4dFBhZ2UoKWAgYmVmb3JlIGNhbGxpbmcgYC5nZXROZXh0UGFnZSgpYC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgbmV4dE9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucyB9O1xuICAgIGlmICgncGFyYW1zJyBpbiBuZXh0SW5mbyAmJiB0eXBlb2YgbmV4dE9wdGlvbnMucXVlcnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBuZXh0T3B0aW9ucy5xdWVyeSA9IHsgLi4ubmV4dE9wdGlvbnMucXVlcnksIC4uLm5leHRJbmZvLnBhcmFtcyB9O1xuICAgIH0gZWxzZSBpZiAoJ3VybCcgaW4gbmV4dEluZm8pIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IFsuLi5PYmplY3QuZW50cmllcyhuZXh0T3B0aW9ucy5xdWVyeSB8fCB7fSksIC4uLm5leHRJbmZvLnVybC5zZWFyY2hQYXJhbXMuZW50cmllcygpXTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhcmFtcykge1xuICAgICAgICBuZXh0SW5mby51cmwuc2VhcmNoUGFyYW1zLnNldChrZXksIHZhbHVlIGFzIGFueSk7XG4gICAgICB9XG4gICAgICBuZXh0T3B0aW9ucy5xdWVyeSA9IHVuZGVmaW5lZDtcbiAgICAgIG5leHRPcHRpb25zLnBhdGggPSBuZXh0SW5mby51cmwudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuI2NsaWVudC5yZXF1ZXN0QVBJTGlzdCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSwgbmV4dE9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgKml0ZXJQYWdlcygpOiBBc3luY0dlbmVyYXRvcjx0aGlzPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgbGV0IHBhZ2U6IHRoaXMgPSB0aGlzO1xuICAgIHlpZWxkIHBhZ2U7XG4gICAgd2hpbGUgKHBhZ2UuaGFzTmV4dFBhZ2UoKSkge1xuICAgICAgcGFnZSA9IGF3YWl0IHBhZ2UuZ2V0TmV4dFBhZ2UoKTtcbiAgICAgIHlpZWxkIHBhZ2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTogQXN5bmNHZW5lcmF0b3I8SXRlbT4ge1xuICAgIGZvciBhd2FpdCAoY29uc3QgcGFnZSBvZiB0aGlzLml0ZXJQYWdlcygpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFnZS5nZXRQYWdpbmF0ZWRJdGVtcygpKSB7XG4gICAgICAgIHlpZWxkIGl0ZW07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBzdWJjbGFzcyBvZiBQcm9taXNlIHdpbGwgcmVzb2x2ZSB0byBhbiBpbnN0YW50aWF0ZWQgUGFnZSBvbmNlIHRoZSByZXF1ZXN0IGNvbXBsZXRlcy5cbiAqXG4gKiBJdCBhbHNvIGltcGxlbWVudHMgQXN5bmNJdGVyYWJsZSB0byBhbGxvdyBhdXRvLXBhZ2luYXRpbmcgaXRlcmF0aW9uIG9uIGFuIHVuYXdhaXRlZCBsaXN0IGNhbGwsIGVnOlxuICpcbiAqICAgIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBjbGllbnQuaXRlbXMubGlzdCgpKSB7XG4gKiAgICAgIGNvbnNvbGUubG9nKGl0ZW0pXG4gKiAgICB9XG4gKi9cbmV4cG9ydCBjbGFzcyBQYWdlUHJvbWlzZTxcbiAgICBQYWdlQ2xhc3MgZXh0ZW5kcyBBYnN0cmFjdFBhZ2U8SXRlbT4sXG4gICAgSXRlbSA9IFJldHVyblR5cGU8UGFnZUNsYXNzWydnZXRQYWdpbmF0ZWRJdGVtcyddPltudW1iZXJdLFxuICA+XG4gIGV4dGVuZHMgQVBJUHJvbWlzZTxQYWdlQ2xhc3M+XG4gIGltcGxlbWVudHMgQXN5bmNJdGVyYWJsZTxJdGVtPlxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IEFQSUNsaWVudCxcbiAgICByZXF1ZXN0OiBQcm9taXNlPEFQSVJlc3BvbnNlUHJvcHM+LFxuICAgIFBhZ2U6IG5ldyAoLi4uYXJnczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBBYnN0cmFjdFBhZ2U+KSA9PiBQYWdlQ2xhc3MsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgcmVxdWVzdCxcbiAgICAgIGFzeW5jIChwcm9wcykgPT5cbiAgICAgICAgbmV3IFBhZ2UoXG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHByb3BzLnJlc3BvbnNlLFxuICAgICAgICAgIGF3YWl0IGRlZmF1bHRQYXJzZVJlc3BvbnNlKHByb3BzKSxcbiAgICAgICAgICBwcm9wcy5vcHRpb25zLFxuICAgICAgICApIGFzIFdpdGhSZXF1ZXN0SUQ8UGFnZUNsYXNzPixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGF1dG8tcGFnaW5hdGluZyBpdGVyYXRpb24gb24gYW4gdW5hd2FpdGVkIGxpc3QgY2FsbCwgZWc6XG4gICAqXG4gICAqICAgIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBjbGllbnQuaXRlbXMubGlzdCgpKSB7XG4gICAqICAgICAgY29uc29sZS5sb2coaXRlbSlcbiAgICogICAgfVxuICAgKi9cbiAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTogQXN5bmNHZW5lcmF0b3I8SXRlbT4ge1xuICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzO1xuICAgIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBwYWdlKSB7XG4gICAgICB5aWVsZCBpdGVtO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVzcG9uc2VIZWFkZXJzID0gKFxuICBoZWFkZXJzOiBBd2FpdGVkPFJldHVyblR5cGU8RmV0Y2g+PlsnaGVhZGVycyddLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gIHJldHVybiBuZXcgUHJveHkoXG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaGVhZGVycy5lbnRyaWVzKCksXG4gICAgKSxcbiAgICB7XG4gICAgICBnZXQodGFyZ2V0LCBuYW1lKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5hbWUudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldFtrZXkudG9Mb3dlckNhc2UoKV0gfHwgdGFyZ2V0W2tleV07XG4gICAgICB9LFxuICAgIH0sXG4gICk7XG59O1xuXG50eXBlIEhUVFBNZXRob2QgPSAnZ2V0JyB8ICdwb3N0JyB8ICdwdXQnIHwgJ3BhdGNoJyB8ICdkZWxldGUnO1xuXG5leHBvcnQgdHlwZSBSZXF1ZXN0Q2xpZW50ID0geyBmZXRjaDogRmV0Y2ggfTtcbmV4cG9ydCB0eXBlIEhlYWRlcnMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPjtcbmV4cG9ydCB0eXBlIERlZmF1bHRRdWVyeSA9IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG5leHBvcnQgdHlwZSBLZXlzRW51bTxUPiA9IHsgW1AgaW4ga2V5b2YgUmVxdWlyZWQ8VD5dOiB0cnVlIH07XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RPcHRpb25zPFxuICBSZXEgPSB1bmtub3duIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBSZWFkYWJsZSB8IEJsb2JMaWtlIHwgQXJyYXlCdWZmZXJWaWV3IHwgQXJyYXlCdWZmZXIsXG4+ID0ge1xuICBtZXRob2Q/OiBIVFRQTWV0aG9kO1xuICBwYXRoPzogc3RyaW5nO1xuICBxdWVyeT86IFJlcSB8IHVuZGVmaW5lZDtcbiAgYm9keT86IFJlcSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGhlYWRlcnM/OiBIZWFkZXJzIHwgdW5kZWZpbmVkO1xuXG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG4gIHN0cmVhbT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGh0dHBBZ2VudD86IEFnZW50O1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCB8IG51bGw7XG4gIGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuXG4gIF9fbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgX19iaW5hcnlSZXF1ZXN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgX19iaW5hcnlSZXNwb25zZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIF9fc3RyZWFtQ2xhc3M/OiB0eXBlb2YgU3RyZWFtO1xufTtcblxuLy8gVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgaWYgYSBnaXZlbiBvYmplY3QgbWF0Y2hlcyB0aGUgUmVxdWVzdE9wdGlvbnNcbi8vIHR5cGUgYXQgcnVudGltZS4gV2hpbGUgdGhpcyByZXF1aXJlcyBkdXBsaWNhdGlvbiwgaXQgaXMgZW5mb3JjZWQgYnkgdGhlIFR5cGVTY3JpcHRcbi8vIGNvbXBpbGVyIHN1Y2ggdGhhdCBhbnkgbWlzc2luZyAvIGV4dHJhbmVvdXMga2V5cyB3aWxsIGNhdXNlIGFuIGVycm9yLlxuY29uc3QgcmVxdWVzdE9wdGlvbnNLZXlzOiBLZXlzRW51bTxSZXF1ZXN0T3B0aW9ucz4gPSB7XG4gIG1ldGhvZDogdHJ1ZSxcbiAgcGF0aDogdHJ1ZSxcbiAgcXVlcnk6IHRydWUsXG4gIGJvZHk6IHRydWUsXG4gIGhlYWRlcnM6IHRydWUsXG5cbiAgbWF4UmV0cmllczogdHJ1ZSxcbiAgc3RyZWFtOiB0cnVlLFxuICB0aW1lb3V0OiB0cnVlLFxuICBodHRwQWdlbnQ6IHRydWUsXG4gIHNpZ25hbDogdHJ1ZSxcbiAgaWRlbXBvdGVuY3lLZXk6IHRydWUsXG5cbiAgX19tZXRhZGF0YTogdHJ1ZSxcbiAgX19iaW5hcnlSZXF1ZXN0OiB0cnVlLFxuICBfX2JpbmFyeVJlc3BvbnNlOiB0cnVlLFxuICBfX3N0cmVhbUNsYXNzOiB0cnVlLFxufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVxdWVzdE9wdGlvbnMgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIFJlcXVlc3RPcHRpb25zID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJlxuICAgIG9iaiAhPT0gbnVsbCAmJlxuICAgICFpc0VtcHR5T2JqKG9iaikgJiZcbiAgICBPYmplY3Qua2V5cyhvYmopLmV2ZXJ5KChrKSA9PiBoYXNPd24ocmVxdWVzdE9wdGlvbnNLZXlzLCBrKSlcbiAgKTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbmFsUmVxdWVzdE9wdGlvbnM8UmVxID0gdW5rbm93biB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVhZGFibGUgfCBEYXRhVmlldz4gPVxuICBSZXF1ZXN0T3B0aW9uczxSZXE+ICYge1xuICAgIG1ldGhvZDogSFRUUE1ldGhvZDtcbiAgICBwYXRoOiBzdHJpbmc7XG4gIH07XG5cbmRlY2xhcmUgY29uc3QgRGVubzogYW55O1xuZGVjbGFyZSBjb25zdCBFZGdlUnVudGltZTogYW55O1xudHlwZSBBcmNoID0gJ3gzMicgfCAneDY0JyB8ICdhcm0nIHwgJ2FybTY0JyB8IGBvdGhlcjoke3N0cmluZ31gIHwgJ3Vua25vd24nO1xudHlwZSBQbGF0Zm9ybU5hbWUgPVxuICB8ICdNYWNPUydcbiAgfCAnTGludXgnXG4gIHwgJ1dpbmRvd3MnXG4gIHwgJ0ZyZWVCU0QnXG4gIHwgJ09wZW5CU0QnXG4gIHwgJ2lPUydcbiAgfCAnQW5kcm9pZCdcbiAgfCBgT3RoZXI6JHtzdHJpbmd9YFxuICB8ICdVbmtub3duJztcbnR5cGUgQnJvd3NlciA9ICdpZScgfCAnZWRnZScgfCAnY2hyb21lJyB8ICdmaXJlZm94JyB8ICdzYWZhcmknO1xudHlwZSBQbGF0Zm9ybVByb3BlcnRpZXMgPSB7XG4gICdYLVN0YWlubGVzcy1MYW5nJzogJ2pzJztcbiAgJ1gtU3RhaW5sZXNzLVBhY2thZ2UtVmVyc2lvbic6IHN0cmluZztcbiAgJ1gtU3RhaW5sZXNzLU9TJzogUGxhdGZvcm1OYW1lO1xuICAnWC1TdGFpbmxlc3MtQXJjaCc6IEFyY2g7XG4gICdYLVN0YWlubGVzcy1SdW50aW1lJzogJ25vZGUnIHwgJ2Rlbm8nIHwgJ2VkZ2UnIHwgYGJyb3dzZXI6JHtCcm93c2VyfWAgfCAndW5rbm93bic7XG4gICdYLVN0YWlubGVzcy1SdW50aW1lLVZlcnNpb24nOiBzdHJpbmc7XG59O1xuY29uc3QgZ2V0UGxhdGZvcm1Qcm9wZXJ0aWVzID0gKCk6IFBsYXRmb3JtUHJvcGVydGllcyA9PiB7XG4gIGlmICh0eXBlb2YgRGVubyAhPT0gJ3VuZGVmaW5lZCcgJiYgRGVuby5idWlsZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdYLVN0YWlubGVzcy1MYW5nJzogJ2pzJyxcbiAgICAgICdYLVN0YWlubGVzcy1QYWNrYWdlLVZlcnNpb24nOiBWRVJTSU9OLFxuICAgICAgJ1gtU3RhaW5sZXNzLU9TJzogbm9ybWFsaXplUGxhdGZvcm0oRGVuby5idWlsZC5vcyksXG4gICAgICAnWC1TdGFpbmxlc3MtQXJjaCc6IG5vcm1hbGl6ZUFyY2goRGVuby5idWlsZC5hcmNoKSxcbiAgICAgICdYLVN0YWlubGVzcy1SdW50aW1lJzogJ2Rlbm8nLFxuICAgICAgJ1gtU3RhaW5sZXNzLVJ1bnRpbWUtVmVyc2lvbic6XG4gICAgICAgIHR5cGVvZiBEZW5vLnZlcnNpb24gPT09ICdzdHJpbmcnID8gRGVuby52ZXJzaW9uIDogRGVuby52ZXJzaW9uPy5kZW5vID8/ICd1bmtub3duJyxcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlb2YgRWRnZVJ1bnRpbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdYLVN0YWlubGVzcy1MYW5nJzogJ2pzJyxcbiAgICAgICdYLVN0YWlubGVzcy1QYWNrYWdlLVZlcnNpb24nOiBWRVJTSU9OLFxuICAgICAgJ1gtU3RhaW5sZXNzLU9TJzogJ1Vua25vd24nLFxuICAgICAgJ1gtU3RhaW5sZXNzLUFyY2gnOiBgb3RoZXI6JHtFZGdlUnVudGltZX1gLFxuICAgICAgJ1gtU3RhaW5sZXNzLVJ1bnRpbWUnOiAnZWRnZScsXG4gICAgICAnWC1TdGFpbmxlc3MtUnVudGltZS1WZXJzaW9uJzogcHJvY2Vzcy52ZXJzaW9uLFxuICAgIH07XG4gIH1cbiAgLy8gQ2hlY2sgaWYgTm9kZS5qc1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyA/IHByb2Nlc3MgOiAwKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdYLVN0YWlubGVzcy1MYW5nJzogJ2pzJyxcbiAgICAgICdYLVN0YWlubGVzcy1QYWNrYWdlLVZlcnNpb24nOiBWRVJTSU9OLFxuICAgICAgJ1gtU3RhaW5sZXNzLU9TJzogbm9ybWFsaXplUGxhdGZvcm0ocHJvY2Vzcy5wbGF0Zm9ybSksXG4gICAgICAnWC1TdGFpbmxlc3MtQXJjaCc6IG5vcm1hbGl6ZUFyY2gocHJvY2Vzcy5hcmNoKSxcbiAgICAgICdYLVN0YWlubGVzcy1SdW50aW1lJzogJ25vZGUnLFxuICAgICAgJ1gtU3RhaW5sZXNzLVJ1bnRpbWUtVmVyc2lvbic6IHByb2Nlc3MudmVyc2lvbixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYnJvd3NlckluZm8gPSBnZXRCcm93c2VySW5mbygpO1xuICBpZiAoYnJvd3NlckluZm8pIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ1gtU3RhaW5sZXNzLUxhbmcnOiAnanMnLFxuICAgICAgJ1gtU3RhaW5sZXNzLVBhY2thZ2UtVmVyc2lvbic6IFZFUlNJT04sXG4gICAgICAnWC1TdGFpbmxlc3MtT1MnOiAnVW5rbm93bicsXG4gICAgICAnWC1TdGFpbmxlc3MtQXJjaCc6ICd1bmtub3duJyxcbiAgICAgICdYLVN0YWlubGVzcy1SdW50aW1lJzogYGJyb3dzZXI6JHticm93c2VySW5mby5icm93c2VyfWAsXG4gICAgICAnWC1TdGFpbmxlc3MtUnVudGltZS1WZXJzaW9uJzogYnJvd3NlckluZm8udmVyc2lvbixcbiAgICB9O1xuICB9XG5cbiAgLy8gVE9ETyBhZGQgc3VwcG9ydCBmb3IgQ2xvdWRmbGFyZSB3b3JrZXJzLCBldGMuXG4gIHJldHVybiB7XG4gICAgJ1gtU3RhaW5sZXNzLUxhbmcnOiAnanMnLFxuICAgICdYLVN0YWlubGVzcy1QYWNrYWdlLVZlcnNpb24nOiBWRVJTSU9OLFxuICAgICdYLVN0YWlubGVzcy1PUyc6ICdVbmtub3duJyxcbiAgICAnWC1TdGFpbmxlc3MtQXJjaCc6ICd1bmtub3duJyxcbiAgICAnWC1TdGFpbmxlc3MtUnVudGltZSc6ICd1bmtub3duJyxcbiAgICAnWC1TdGFpbmxlc3MtUnVudGltZS1WZXJzaW9uJzogJ3Vua25vd24nLFxuICB9O1xufTtcblxudHlwZSBCcm93c2VySW5mbyA9IHtcbiAgYnJvd3NlcjogQnJvd3NlcjtcbiAgdmVyc2lvbjogc3RyaW5nO1xufTtcblxuZGVjbGFyZSBjb25zdCBuYXZpZ2F0b3I6IHsgdXNlckFnZW50OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblxuLy8gTm90ZTogbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vSlMtRGV2VG9vbHMvaG9zdC1lbnZpcm9ubWVudC9ibG9iL2IxYWI3OWVjZGUzN2RiNWQ2ZTE2M2MwNTBlNTRmZTdkMjg3ZDdjOTIvc3JjL2lzb21vcnBoaWMuYnJvd3Nlci50c1xuZnVuY3Rpb24gZ2V0QnJvd3NlckluZm8oKTogQnJvd3NlckluZm8gfCBudWxsIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8ICFuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE5PVEU6IFRoZSBvcmRlciBtYXR0ZXJzIGhlcmUhXG4gIGNvbnN0IGJyb3dzZXJQYXR0ZXJucyA9IFtcbiAgICB7IGtleTogJ2VkZ2UnIGFzIGNvbnN0LCBwYXR0ZXJuOiAvRWRnZSg/OlxcVysoXFxkKylcXC4oXFxkKykoPzpcXC4oXFxkKykpPyk/LyB9LFxuICAgIHsga2V5OiAnaWUnIGFzIGNvbnN0LCBwYXR0ZXJuOiAvTVNJRSg/OlxcVysoXFxkKylcXC4oXFxkKykoPzpcXC4oXFxkKykpPyk/LyB9LFxuICAgIHsga2V5OiAnaWUnIGFzIGNvbnN0LCBwYXR0ZXJuOiAvVHJpZGVudCg/Oi4qcnZcXDooXFxkKylcXC4oXFxkKykoPzpcXC4oXFxkKykpPyk/LyB9LFxuICAgIHsga2V5OiAnY2hyb21lJyBhcyBjb25zdCwgcGF0dGVybjogL0Nocm9tZSg/OlxcVysoXFxkKylcXC4oXFxkKykoPzpcXC4oXFxkKykpPyk/LyB9LFxuICAgIHsga2V5OiAnZmlyZWZveCcgYXMgY29uc3QsIHBhdHRlcm46IC9GaXJlZm94KD86XFxXKyhcXGQrKVxcLihcXGQrKSg/OlxcLihcXGQrKSk/KT8vIH0sXG4gICAgeyBrZXk6ICdzYWZhcmknIGFzIGNvbnN0LCBwYXR0ZXJuOiAvKD86VmVyc2lvblxcVysoXFxkKylcXC4oXFxkKykoPzpcXC4oXFxkKykpPyk/KD86XFxXK01vYmlsZVxcUyopP1xcVytTYWZhcmkvIH0sXG4gIF07XG5cbiAgLy8gRmluZCB0aGUgRklSU1QgbWF0Y2hpbmcgYnJvd3NlclxuICBmb3IgKGNvbnN0IHsga2V5LCBwYXR0ZXJuIH0gb2YgYnJvd3NlclBhdHRlcm5zKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBtYWpvciA9IG1hdGNoWzFdIHx8IDA7XG4gICAgICBjb25zdCBtaW5vciA9IG1hdGNoWzJdIHx8IDA7XG4gICAgICBjb25zdCBwYXRjaCA9IG1hdGNoWzNdIHx8IDA7XG5cbiAgICAgIHJldHVybiB7IGJyb3dzZXI6IGtleSwgdmVyc2lvbjogYCR7bWFqb3J9LiR7bWlub3J9LiR7cGF0Y2h9YCB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBub3JtYWxpemVBcmNoID0gKGFyY2g6IHN0cmluZyk6IEFyY2ggPT4ge1xuICAvLyBOb2RlIGRvY3M6XG4gIC8vIC0gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc2FyY2hcbiAgLy8gRGVubyBkb2NzOlxuICAvLyAtIGh0dHBzOi8vZG9jLmRlbm8ubGFuZC9kZW5vL3N0YWJsZS9+L0Rlbm8uYnVpbGRcbiAgaWYgKGFyY2ggPT09ICd4MzInKSByZXR1cm4gJ3gzMic7XG4gIGlmIChhcmNoID09PSAneDg2XzY0JyB8fCBhcmNoID09PSAneDY0JykgcmV0dXJuICd4NjQnO1xuICBpZiAoYXJjaCA9PT0gJ2FybScpIHJldHVybiAnYXJtJztcbiAgaWYgKGFyY2ggPT09ICdhYXJjaDY0JyB8fCBhcmNoID09PSAnYXJtNjQnKSByZXR1cm4gJ2FybTY0JztcbiAgaWYgKGFyY2gpIHJldHVybiBgb3RoZXI6JHthcmNofWA7XG4gIHJldHVybiAndW5rbm93bic7XG59O1xuXG5jb25zdCBub3JtYWxpemVQbGF0Zm9ybSA9IChwbGF0Zm9ybTogc3RyaW5nKTogUGxhdGZvcm1OYW1lID0+IHtcbiAgLy8gTm9kZSBwbGF0Zm9ybXM6XG4gIC8vIC0gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc3BsYXRmb3JtXG4gIC8vIERlbm8gcGxhdGZvcm1zOlxuICAvLyAtIGh0dHBzOi8vZG9jLmRlbm8ubGFuZC9kZW5vL3N0YWJsZS9+L0Rlbm8uYnVpbGRcbiAgLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTQ3OTlcblxuICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gTk9URTogdGhpcyBpT1MgY2hlY2sgaXMgdW50ZXN0ZWQgYW5kIG1heSBub3Qgd29ya1xuICAvLyBOb2RlIGRvZXMgbm90IHdvcmsgbmF0aXZlbHkgb24gSU9TLCB0aGVyZSBpcyBhIGZvcmsgYXRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy1tb2JpbGUvbm9kZWpzLW1vYmlsZVxuICAvLyBob3dldmVyIGl0IGlzIHVua25vd24gYXQgdGhlIHRpbWUgb2Ygd3JpdGluZyBob3cgdG8gZGV0ZWN0IGlmIGl0IGlzIHJ1bm5pbmdcbiAgaWYgKHBsYXRmb3JtLmluY2x1ZGVzKCdpb3MnKSkgcmV0dXJuICdpT1MnO1xuICBpZiAocGxhdGZvcm0gPT09ICdhbmRyb2lkJykgcmV0dXJuICdBbmRyb2lkJztcbiAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykgcmV0dXJuICdNYWNPUyc7XG4gIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykgcmV0dXJuICdXaW5kb3dzJztcbiAgaWYgKHBsYXRmb3JtID09PSAnZnJlZWJzZCcpIHJldHVybiAnRnJlZUJTRCc7XG4gIGlmIChwbGF0Zm9ybSA9PT0gJ29wZW5ic2QnKSByZXR1cm4gJ09wZW5CU0QnO1xuICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHJldHVybiAnTGludXgnO1xuICBpZiAocGxhdGZvcm0pIHJldHVybiBgT3RoZXI6JHtwbGF0Zm9ybX1gO1xuICByZXR1cm4gJ1Vua25vd24nO1xufTtcblxubGV0IF9wbGF0Zm9ybUhlYWRlcnM6IFBsYXRmb3JtUHJvcGVydGllcztcbmNvbnN0IGdldFBsYXRmb3JtSGVhZGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIChfcGxhdGZvcm1IZWFkZXJzID8/PSBnZXRQbGF0Zm9ybVByb3BlcnRpZXMoKSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2FmZUpTT04gPSAodGV4dDogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLXNjaGVtZS1zdHJpbmdcbmNvbnN0IHN0YXJ0c1dpdGhTY2hlbWVSZWdleHAgPSAvXlthLXpdW2EtejAtOSsuLV0qOi9pO1xuY29uc3QgaXNBYnNvbHV0ZVVSTCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gc3RhcnRzV2l0aFNjaGVtZVJlZ2V4cC50ZXN0KHVybCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcblxuY29uc3QgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXIgPSAobmFtZTogc3RyaW5nLCBuOiB1bmtub3duKTogbnVtYmVyID0+IHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSkge1xuICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGFuIGludGVnZXJgKTtcbiAgfVxuICBpZiAobiA8IDApIHtcbiAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJgKTtcbiAgfVxuICByZXR1cm4gbjtcbn07XG5cbmV4cG9ydCBjb25zdCBjYXN0VG9FcnJvciA9IChlcnI6IGFueSk6IEVycm9yID0+IHtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gZXJyO1xuICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcgJiYgZXJyICE9PSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyKSk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG4gIHJldHVybiBuZXcgRXJyb3IoZXJyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlbnN1cmVQcmVzZW50ID0gPFQ+KHZhbHVlOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFQgPT4ge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBFeHBlY3RlZCBhIHZhbHVlIHRvIGJlIGdpdmVuIGJ1dCByZWNlaXZlZCAke3ZhbHVlfSBpbnN0ZWFkLmApO1xuICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogVHJpbXMgYmVnaW5uaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLlxuICpcbiAqIFdpbGwgcmV0dXJuIHVuZGVmaW5lZCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgZG9lc24ndCBleGlzdCBvciBjYW5ub3QgYmUgYWNjZXNzZWQuXG4gKi9cbmV4cG9ydCBjb25zdCByZWFkRW52ID0gKGVudjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBwcm9jZXNzLmVudj8uW2Vudl0/LnRyaW0oKSA/PyB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBEZW5vICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBEZW5vLmVudj8uZ2V0Py4oZW52KT8udHJpbSgpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgY29lcmNlSW50ZWdlciA9ICh2YWx1ZTogdW5rbm93bik6IG51bWJlciA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcblxuICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoYENvdWxkIG5vdCBjb2VyY2UgJHt2YWx1ZX0gKHR5cGU6ICR7dHlwZW9mIHZhbHVlfSkgaW50byBhIG51bWJlcmApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvZXJjZUZsb2F0ID0gKHZhbHVlOiB1bmtub3duKTogbnVtYmVyID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcblxuICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoYENvdWxkIG5vdCBjb2VyY2UgJHt2YWx1ZX0gKHR5cGU6ICR7dHlwZW9mIHZhbHVlfSkgaW50byBhIG51bWJlcmApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvZXJjZUJvb2xlYW4gPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUgPT09ICd0cnVlJztcbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IG1heWJlQ29lcmNlSW50ZWdlciA9ICh2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gY29lcmNlSW50ZWdlcih2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWF5YmVDb2VyY2VGbG9hdCA9ICh2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gY29lcmNlRmxvYXQodmFsdWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IG1heWJlQ29lcmNlQm9vbGVhbiA9ICh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGNvZXJjZUJvb2xlYW4odmFsdWUpO1xufTtcblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM0NDkxMjg3XG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eU9iaihvYmo6IE9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCFvYmopIHJldHVybiB0cnVlO1xuICBmb3IgKGNvbnN0IF9rIGluIG9iaikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gaHR0cHM6Ly9lc2xpbnQub3JnL2RvY3MvbGF0ZXN0L3J1bGVzL25vLXByb3RvdHlwZS1idWlsdGluc1xuZXhwb3J0IGZ1bmN0aW9uIGhhc093bihvYmo6IE9iamVjdCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG5cbi8qKlxuICogQ29waWVzIGhlYWRlcnMgZnJvbSBcIm5ld0hlYWRlcnNcIiBvbnRvIFwidGFyZ2V0SGVhZGVyc1wiLFxuICogdXNpbmcgbG93ZXItY2FzZSBmb3IgYWxsIHByb3BlcnRpZXMsXG4gKiBpZ25vcmluZyBhbnkga2V5cyB3aXRoIHVuZGVmaW5lZCB2YWx1ZXMsXG4gKiBhbmQgZGVsZXRpbmcgYW55IGtleXMgd2l0aCBudWxsIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYXBwbHlIZWFkZXJzTXV0KHRhcmdldEhlYWRlcnM6IEhlYWRlcnMsIG5ld0hlYWRlcnM6IEhlYWRlcnMpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBrIGluIG5ld0hlYWRlcnMpIHtcbiAgICBpZiAoIWhhc093bihuZXdIZWFkZXJzLCBrKSkgY29udGludWU7XG4gICAgY29uc3QgbG93ZXJLZXkgPSBrLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFsb3dlcktleSkgY29udGludWU7XG5cbiAgICBjb25zdCB2YWwgPSBuZXdIZWFkZXJzW2tdO1xuXG4gICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgZGVsZXRlIHRhcmdldEhlYWRlcnNbbG93ZXJLZXldO1xuICAgIH0gZWxzZSBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldEhlYWRlcnNbbG93ZXJLZXldID0gdmFsO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBTRU5TSVRJVkVfSEVBREVSUyA9IG5ldyBTZXQoWydhdXRob3JpemF0aW9uJywgJ2FwaS1rZXknXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJ1ZyhhY3Rpb246IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzPy5lbnY/LlsnREVCVUcnXSA9PT0gJ3RydWUnKSB7XG4gICAgY29uc3QgbW9kaWZpZWRBcmdzID0gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgICAgaWYgKCFhcmcpIHtcbiAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHNlbnNpdGl2ZSBoZWFkZXJzIGluIHJlcXVlc3QgYm9keSAnaGVhZGVycycgb2JqZWN0XG4gICAgICBpZiAoYXJnWydoZWFkZXJzJ10pIHtcbiAgICAgICAgLy8gY2xvbmUgc28gd2UgZG9uJ3QgbXV0YXRlXG4gICAgICAgIGNvbnN0IG1vZGlmaWVkQXJnID0geyAuLi5hcmcsIGhlYWRlcnM6IHsgLi4uYXJnWydoZWFkZXJzJ10gfSB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyIGluIGFyZ1snaGVhZGVycyddKSB7XG4gICAgICAgICAgaWYgKFNFTlNJVElWRV9IRUFERVJTLmhhcyhoZWFkZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkQXJnWydoZWFkZXJzJ11baGVhZGVyXSA9ICdSRURBQ1RFRCc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vZGlmaWVkQXJnO1xuICAgICAgfVxuXG4gICAgICBsZXQgbW9kaWZpZWRBcmcgPSBudWxsO1xuXG4gICAgICAvLyBDaGVjayBmb3Igc2Vuc2l0aXZlIGhlYWRlcnMgaW4gaGVhZGVycyBvYmplY3RcbiAgICAgIGZvciAoY29uc3QgaGVhZGVyIGluIGFyZykge1xuICAgICAgICBpZiAoU0VOU0lUSVZFX0hFQURFUlMuaGFzKGhlYWRlci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIC8vIGF2b2lkIG1ha2luZyBhIGNvcHkgdW50aWwgd2UgbmVlZCB0b1xuICAgICAgICAgIG1vZGlmaWVkQXJnID8/PSB7IC4uLmFyZyB9O1xuICAgICAgICAgIG1vZGlmaWVkQXJnW2hlYWRlcl0gPSAnUkVEQUNURUQnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtb2RpZmllZEFyZyA/PyBhcmc7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYE9wZW5BSTpERUJVRzoke2FjdGlvbn1gLCAuLi5tb2RpZmllZEFyZ3MpO1xuICB9XG59XG5cbi8qKlxuICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxMTc1MjNcbiAqL1xuY29uc3QgdXVpZDQgPSAoKSA9PiB7XG4gIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIChjKSA9PiB7XG4gICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMDtcbiAgICBjb25zdCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcbiAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luQnJvd3NlciA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyc1Byb3RvY29sIHtcbiAgZ2V0OiAoaGVhZGVyOiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG59XG5leHBvcnQgdHlwZSBIZWFkZXJzTGlrZSA9IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPiB8IEhlYWRlcnNQcm90b2NvbDtcblxuZXhwb3J0IGNvbnN0IGlzSGVhZGVyc1Byb3RvY29sID0gKGhlYWRlcnM6IGFueSk6IGhlYWRlcnMgaXMgSGVhZGVyc1Byb3RvY29sID0+IHtcbiAgcmV0dXJuIHR5cGVvZiBoZWFkZXJzPy5nZXQgPT09ICdmdW5jdGlvbic7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRIZWFkZXIgPSAoaGVhZGVyczogSGVhZGVyc0xpa2UgfCBIZWFkZXJzLCBoZWFkZXI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGZvdW5kSGVhZGVyID0gZ2V0SGVhZGVyKGhlYWRlcnMsIGhlYWRlcik7XG4gIGlmIChmb3VuZEhlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAke2hlYWRlcn0gaGVhZGVyYCk7XG4gIH1cbiAgcmV0dXJuIGZvdW5kSGVhZGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhlYWRlciA9IChoZWFkZXJzOiBIZWFkZXJzTGlrZSB8IEhlYWRlcnMsIGhlYWRlcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgbG93ZXJDYXNlZEhlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICBpZiAoaXNIZWFkZXJzUHJvdG9jb2woaGVhZGVycykpIHtcbiAgICAvLyB0byBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIGhlYWRlciBsb29rcyBsaWtlIFN0YWlubGVzcy1FdmVudC1JZFxuICAgIGNvbnN0IGludGVyY2Fwc0hlYWRlciA9XG4gICAgICBoZWFkZXJbMF0/LnRvVXBwZXJDYXNlKCkgK1xuICAgICAgaGVhZGVyLnN1YnN0cmluZygxKS5yZXBsYWNlKC8oW15cXHddKShcXHcpL2csIChfbSwgZzEsIGcyKSA9PiBnMSArIGcyLnRvVXBwZXJDYXNlKCkpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFtoZWFkZXIsIGxvd2VyQ2FzZWRIZWFkZXIsIGhlYWRlci50b1VwcGVyQ2FzZSgpLCBpbnRlcmNhcHNIZWFkZXJdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlcnMuZ2V0KGtleSk7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBsb3dlckNhc2VkSGVhZGVyKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8PSAxKSByZXR1cm4gdmFsdWVbMF07XG4gICAgICAgIGNvbnNvbGUud2FybihgUmVjZWl2ZWQgJHt2YWx1ZS5sZW5ndGh9IGVudHJpZXMgZm9yIHRoZSAke2hlYWRlcn0gaGVhZGVyLCB1c2luZyB0aGUgZmlyc3QgZW50cnkuYCk7XG4gICAgICAgIHJldHVybiB2YWx1ZVswXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBFbmNvZGVzIGEgc3RyaW5nIHRvIEJhc2U2NCBmb3JtYXQuXG4gKi9cbmV4cG9ydCBjb25zdCB0b0Jhc2U2NCA9IChzdHI6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICBpZiAoIXN0cikgcmV0dXJuICcnO1xuICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGJ0b2Eoc3RyKTtcbiAgfVxuXG4gIHRocm93IG5ldyBPcGVuQUlFcnJvcignQ2Fubm90IGdlbmVyYXRlIGI2NCBzdHJpbmc7IEV4cGVjdGVkIGBCdWZmZXJgIG9yIGBidG9hYCB0byBiZSBkZWZpbmVkJyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmoob2JqOiB1bmtub3duKTogb2JqIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iaik7XG59XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQWJzdHJhY3RQYWdlLCBSZXNwb25zZSwgQVBJQ2xpZW50LCBGaW5hbFJlcXVlc3RPcHRpb25zLCBQYWdlSW5mbyB9IGZyb20gJy4vY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVJlc3BvbnNlPEl0ZW0+IHtcbiAgZGF0YTogQXJyYXk8SXRlbT47XG5cbiAgb2JqZWN0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTm90ZTogbm8gcGFnaW5hdGlvbiBhY3R1YWxseSBvY2N1cnMgeWV0LCB0aGlzIGlzIGZvciBmb3J3YXJkcy1jb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgY2xhc3MgUGFnZTxJdGVtPiBleHRlbmRzIEFic3RyYWN0UGFnZTxJdGVtPiBpbXBsZW1lbnRzIFBhZ2VSZXNwb25zZTxJdGVtPiB7XG4gIGRhdGE6IEFycmF5PEl0ZW0+O1xuXG4gIG9iamVjdDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogQVBJQ2xpZW50LCByZXNwb25zZTogUmVzcG9uc2UsIGJvZHk6IFBhZ2VSZXNwb25zZTxJdGVtPiwgb3B0aW9uczogRmluYWxSZXF1ZXN0T3B0aW9ucykge1xuICAgIHN1cGVyKGNsaWVudCwgcmVzcG9uc2UsIGJvZHksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5kYXRhID0gYm9keS5kYXRhIHx8IFtdO1xuICAgIHRoaXMub2JqZWN0ID0gYm9keS5vYmplY3Q7XG4gIH1cblxuICBnZXRQYWdpbmF0ZWRJdGVtcygpOiBJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPz8gW107XG4gIH1cblxuICAvLyBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGBuZXh0UGFnZUluZm8oKWAgaW5zdGVhZFxuICAvKipcbiAgICogVGhpcyBwYWdlIHJlcHJlc2VudHMgYSByZXNwb25zZSB0aGF0IGlzbid0IGFjdHVhbGx5IHBhZ2luYXRlZCBhdCB0aGUgQVBJIGxldmVsXG4gICAqIHNvIHRoZXJlIHdpbGwgbmV2ZXIgYmUgYW55IG5leHQgcGFnZSBwYXJhbXMuXG4gICAqL1xuICBuZXh0UGFnZVBhcmFtcygpOiBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG5leHRQYWdlSW5mbygpOiBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnNvclBhZ2VSZXNwb25zZTxJdGVtPiB7XG4gIGRhdGE6IEFycmF5PEl0ZW0+O1xuXG4gIGhhc19tb3JlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnNvclBhZ2VQYXJhbXMge1xuICBhZnRlcj86IHN0cmluZztcblxuICBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEN1cnNvclBhZ2U8SXRlbSBleHRlbmRzIHsgaWQ6IHN0cmluZyB9PlxuICBleHRlbmRzIEFic3RyYWN0UGFnZTxJdGVtPlxuICBpbXBsZW1lbnRzIEN1cnNvclBhZ2VSZXNwb25zZTxJdGVtPlxue1xuICBkYXRhOiBBcnJheTxJdGVtPjtcblxuICBoYXNfbW9yZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IEFQSUNsaWVudCxcbiAgICByZXNwb25zZTogUmVzcG9uc2UsXG4gICAgYm9keTogQ3Vyc29yUGFnZVJlc3BvbnNlPEl0ZW0+LFxuICAgIG9wdGlvbnM6IEZpbmFsUmVxdWVzdE9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKGNsaWVudCwgcmVzcG9uc2UsIGJvZHksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5kYXRhID0gYm9keS5kYXRhIHx8IFtdO1xuICAgIHRoaXMuaGFzX21vcmUgPSBib2R5Lmhhc19tb3JlIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0UGFnaW5hdGVkSXRlbXMoKTogSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8/IFtdO1xuICB9XG5cbiAgb3ZlcnJpZGUgaGFzTmV4dFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaGFzX21vcmUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmhhc05leHRQYWdlKCk7XG4gIH1cblxuICAvLyBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGBuZXh0UGFnZUluZm8oKWAgaW5zdGVhZFxuICBuZXh0UGFnZVBhcmFtcygpOiBQYXJ0aWFsPEN1cnNvclBhZ2VQYXJhbXM+IHwgbnVsbCB7XG4gICAgY29uc3QgaW5mbyA9IHRoaXMubmV4dFBhZ2VJbmZvKCk7XG4gICAgaWYgKCFpbmZvKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoJ3BhcmFtcycgaW4gaW5mbykgcmV0dXJuIGluZm8ucGFyYW1zO1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhpbmZvLnVybC5zZWFyY2hQYXJhbXMpO1xuICAgIGlmICghT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBuZXh0UGFnZUluZm8oKTogUGFnZUluZm8gfCBudWxsIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYWdpbmF0ZWRJdGVtcygpO1xuICAgIGlmICghZGF0YS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdPy5pZDtcbiAgICBpZiAoIWlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBwYXJhbXM6IHsgYWZ0ZXI6IGlkIH0gfTtcbiAgfVxufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB0eXBlIHsgT3BlbkFJIH0gZnJvbSAnLi9pbmRleCc7XG5cbmV4cG9ydCBjbGFzcyBBUElSZXNvdXJjZSB7XG4gIHByb3RlY3RlZCBfY2xpZW50OiBPcGVuQUk7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBPcGVuQUkpIHtcbiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7XG4gIH1cbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCB7IGlzUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBDb21wbGV0aW9uc0FQSSBmcm9tICcuL2NvbXBsZXRpb25zJztcbmltcG9ydCB7IENoYXRDb21wbGV0aW9uU3RvcmVNZXNzYWdlc1BhZ2UgfSBmcm9tICcuL2NvbXBsZXRpb25zJztcbmltcG9ydCB7IHR5cGUgQ3Vyc29yUGFnZVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3BhZ2luYXRpb24nO1xuXG5leHBvcnQgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1lc3NhZ2VzIGluIGEgc3RvcmVkIGNoYXQgY29tcGxldGlvbi4gT25seSBDaGF0IENvbXBsZXRpb25zIHRoYXQgaGF2ZVxuICAgKiBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUgYHN0b3JlYCBwYXJhbWV0ZXIgc2V0IHRvIGB0cnVlYCB3aWxsIGJlIHJldHVybmVkLlxuICAgKi9cbiAgbGlzdChcbiAgICBjb21wbGV0aW9uSWQ6IHN0cmluZyxcbiAgICBxdWVyeT86IE1lc3NhZ2VMaXN0UGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPENoYXRDb21wbGV0aW9uU3RvcmVNZXNzYWdlc1BhZ2UsIENvbXBsZXRpb25zQVBJLkNoYXRDb21wbGV0aW9uU3RvcmVNZXNzYWdlPjtcbiAgbGlzdChcbiAgICBjb21wbGV0aW9uSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxDaGF0Q29tcGxldGlvblN0b3JlTWVzc2FnZXNQYWdlLCBDb21wbGV0aW9uc0FQSS5DaGF0Q29tcGxldGlvblN0b3JlTWVzc2FnZT47XG4gIGxpc3QoXG4gICAgY29tcGxldGlvbklkOiBzdHJpbmcsXG4gICAgcXVlcnk6IE1lc3NhZ2VMaXN0UGFyYW1zIHwgQ29yZS5SZXF1ZXN0T3B0aW9ucyA9IHt9LFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPENoYXRDb21wbGV0aW9uU3RvcmVNZXNzYWdlc1BhZ2UsIENvbXBsZXRpb25zQVBJLkNoYXRDb21wbGV0aW9uU3RvcmVNZXNzYWdlPiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0KGNvbXBsZXRpb25JZCwge30sIHF1ZXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRBUElMaXN0KFxuICAgICAgYC9jaGF0L2NvbXBsZXRpb25zLyR7Y29tcGxldGlvbklkfS9tZXNzYWdlc2AsXG4gICAgICBDaGF0Q29tcGxldGlvblN0b3JlTWVzc2FnZXNQYWdlLFxuICAgICAgeyBxdWVyeSwgLi4ub3B0aW9ucyB9LFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlTGlzdFBhcmFtcyBleHRlbmRzIEN1cnNvclBhZ2VQYXJhbXMge1xuICAvKipcbiAgICogU29ydCBvcmRlciBmb3IgbWVzc2FnZXMgYnkgdGltZXN0YW1wLiBVc2UgYGFzY2AgZm9yIGFzY2VuZGluZyBvcmRlciBvciBgZGVzY2BcbiAgICogZm9yIGRlc2NlbmRpbmcgb3JkZXIuIERlZmF1bHRzIHRvIGBhc2NgLlxuICAgKi9cbiAgb3JkZXI/OiAnYXNjJyB8ICdkZXNjJztcbn1cblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIE1lc3NhZ2VzIHtcbiAgZXhwb3J0IHsgdHlwZSBNZXNzYWdlTGlzdFBhcmFtcyBhcyBNZXNzYWdlTGlzdFBhcmFtcyB9O1xufVxuXG5leHBvcnQgeyBDaGF0Q29tcGxldGlvblN0b3JlTWVzc2FnZXNQYWdlIH07XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBpc1JlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBUElQcm9taXNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgQ29tcGxldGlvbnNDb21wbGV0aW9uc0FQSSBmcm9tICcuL2NvbXBsZXRpb25zJztcbmltcG9ydCAqIGFzIENvbXBsZXRpb25zQVBJIGZyb20gJy4uLy4uL2NvbXBsZXRpb25zJztcbmltcG9ydCAqIGFzIFNoYXJlZCBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0ICogYXMgTWVzc2FnZXNBUEkgZnJvbSAnLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBNZXNzYWdlTGlzdFBhcmFtcywgTWVzc2FnZXMgfSBmcm9tICcuL21lc3NhZ2VzJztcbmltcG9ydCB7IEN1cnNvclBhZ2UsIHR5cGUgQ3Vyc29yUGFnZVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgU3RyZWFtIH0gZnJvbSAnLi4vLi4vLi4vc3RyZWFtaW5nJztcblxuZXhwb3J0IGNsYXNzIENvbXBsZXRpb25zIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICBtZXNzYWdlczogTWVzc2FnZXNBUEkuTWVzc2FnZXMgPSBuZXcgTWVzc2FnZXNBUEkuTWVzc2FnZXModGhpcy5fY2xpZW50KTtcblxuICAvKipcbiAgICogKipTdGFydGluZyBhIG5ldyBwcm9qZWN0PyoqIFdlIHJlY29tbWVuZCB0cnlpbmdcbiAgICogW1Jlc3BvbnNlc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9yZXNwb25zZXMpIHRvIHRha2VcbiAgICogYWR2YW50YWdlIG9mIHRoZSBsYXRlc3QgT3BlbkFJIHBsYXRmb3JtIGZlYXR1cmVzLiBDb21wYXJlXG4gICAqIFtDaGF0IENvbXBsZXRpb25zIHdpdGggUmVzcG9uc2VzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvcmVzcG9uc2VzLXZzLWNoYXQtY29tcGxldGlvbnM/YXBpLW1vZGU9cmVzcG9uc2VzKS5cbiAgICpcbiAgICogLS0tXG4gICAqXG4gICAqIENyZWF0ZXMgYSBtb2RlbCByZXNwb25zZSBmb3IgdGhlIGdpdmVuIGNoYXQgY29udmVyc2F0aW9uLiBMZWFybiBtb3JlIGluIHRoZVxuICAgKiBbdGV4dCBnZW5lcmF0aW9uXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdGV4dC1nZW5lcmF0aW9uKSxcbiAgICogW3Zpc2lvbl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3Zpc2lvbiksIGFuZFxuICAgKiBbYXVkaW9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9hdWRpbykgZ3VpZGVzLlxuICAgKlxuICAgKiBQYXJhbWV0ZXIgc3VwcG9ydCBjYW4gZGlmZmVyIGRlcGVuZGluZyBvbiB0aGUgbW9kZWwgdXNlZCB0byBnZW5lcmF0ZSB0aGVcbiAgICogcmVzcG9uc2UsIHBhcnRpY3VsYXJseSBmb3IgbmV3ZXIgcmVhc29uaW5nIG1vZGVscy4gUGFyYW1ldGVycyB0aGF0IGFyZSBvbmx5XG4gICAqIHN1cHBvcnRlZCBmb3IgcmVhc29uaW5nIG1vZGVscyBhcmUgbm90ZWQgYmVsb3cuIEZvciB0aGUgY3VycmVudCBzdGF0ZSBvZlxuICAgKiB1bnN1cHBvcnRlZCBwYXJhbWV0ZXJzIGluIHJlYXNvbmluZyBtb2RlbHMsXG4gICAqIFtyZWZlciB0byB0aGUgcmVhc29uaW5nIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvcmVhc29uaW5nKS5cbiAgICovXG4gIGNyZWF0ZShcbiAgICBib2R5OiBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQVBJUHJvbWlzZTxDaGF0Q29tcGxldGlvbj47XG4gIGNyZWF0ZShcbiAgICBib2R5OiBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQVBJUHJvbWlzZTxTdHJlYW08Q2hhdENvbXBsZXRpb25DaHVuaz4+O1xuICBjcmVhdGUoXG4gICAgYm9keTogQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNCYXNlLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBBUElQcm9taXNlPFN0cmVhbTxDaGF0Q29tcGxldGlvbkNodW5rPiB8IENoYXRDb21wbGV0aW9uPjtcbiAgY3JlYXRlKFxuICAgIGJvZHk6IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBBUElQcm9taXNlPENoYXRDb21wbGV0aW9uPiB8IEFQSVByb21pc2U8U3RyZWFtPENoYXRDb21wbGV0aW9uQ2h1bms+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvY2hhdC9jb21wbGV0aW9ucycsIHsgYm9keSwgLi4ub3B0aW9ucywgc3RyZWFtOiBib2R5LnN0cmVhbSA/PyBmYWxzZSB9KSBhc1xuICAgICAgfCBBUElQcm9taXNlPENoYXRDb21wbGV0aW9uPlxuICAgICAgfCBBUElQcm9taXNlPFN0cmVhbTxDaGF0Q29tcGxldGlvbkNodW5rPj47XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3RvcmVkIGNoYXQgY29tcGxldGlvbi4gT25seSBDaGF0IENvbXBsZXRpb25zIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aFxuICAgKiB0aGUgYHN0b3JlYCBwYXJhbWV0ZXIgc2V0IHRvIGB0cnVlYCB3aWxsIGJlIHJldHVybmVkLlxuICAgKi9cbiAgcmV0cmlldmUoY29tcGxldGlvbklkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPENoYXRDb21wbGV0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXQoYC9jaGF0L2NvbXBsZXRpb25zLyR7Y29tcGxldGlvbklkfWAsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmeSBhIHN0b3JlZCBjaGF0IGNvbXBsZXRpb24uIE9ubHkgQ2hhdCBDb21wbGV0aW9ucyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkXG4gICAqIHdpdGggdGhlIGBzdG9yZWAgcGFyYW1ldGVyIHNldCB0byBgdHJ1ZWAgY2FuIGJlIG1vZGlmaWVkLiBDdXJyZW50bHksIHRoZSBvbmx5XG4gICAqIHN1cHBvcnRlZCBtb2RpZmljYXRpb24gaXMgdG8gdXBkYXRlIHRoZSBgbWV0YWRhdGFgIGZpZWxkLlxuICAgKi9cbiAgdXBkYXRlKFxuICAgIGNvbXBsZXRpb25JZDogc3RyaW5nLFxuICAgIGJvZHk6IENoYXRDb21wbGV0aW9uVXBkYXRlUGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLkFQSVByb21pc2U8Q2hhdENvbXBsZXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoYC9jaGF0L2NvbXBsZXRpb25zLyR7Y29tcGxldGlvbklkfWAsIHsgYm9keSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IHN0b3JlZCBDaGF0IENvbXBsZXRpb25zLiBPbmx5IENoYXQgQ29tcGxldGlvbnMgdGhhdCBoYXZlIGJlZW4gc3RvcmVkIHdpdGhcbiAgICogdGhlIGBzdG9yZWAgcGFyYW1ldGVyIHNldCB0byBgdHJ1ZWAgd2lsbCBiZSByZXR1cm5lZC5cbiAgICovXG4gIGxpc3QoXG4gICAgcXVlcnk/OiBDaGF0Q29tcGxldGlvbkxpc3RQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8Q2hhdENvbXBsZXRpb25zUGFnZSwgQ2hhdENvbXBsZXRpb24+O1xuICBsaXN0KG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5QYWdlUHJvbWlzZTxDaGF0Q29tcGxldGlvbnNQYWdlLCBDaGF0Q29tcGxldGlvbj47XG4gIGxpc3QoXG4gICAgcXVlcnk6IENoYXRDb21wbGV0aW9uTGlzdFBhcmFtcyB8IENvcmUuUmVxdWVzdE9wdGlvbnMgPSB7fSxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxDaGF0Q29tcGxldGlvbnNQYWdlLCBDaGF0Q29tcGxldGlvbj4ge1xuICAgIGlmIChpc1JlcXVlc3RPcHRpb25zKHF1ZXJ5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdCh7fSwgcXVlcnkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldEFQSUxpc3QoJy9jaGF0L2NvbXBsZXRpb25zJywgQ2hhdENvbXBsZXRpb25zUGFnZSwgeyBxdWVyeSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSBzdG9yZWQgY2hhdCBjb21wbGV0aW9uLiBPbmx5IENoYXQgQ29tcGxldGlvbnMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZFxuICAgKiB3aXRoIHRoZSBgc3RvcmVgIHBhcmFtZXRlciBzZXQgdG8gYHRydWVgIGNhbiBiZSBkZWxldGVkLlxuICAgKi9cbiAgZGVsKGNvbXBsZXRpb25JZDogc3RyaW5nLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxDaGF0Q29tcGxldGlvbkRlbGV0ZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmRlbGV0ZShgL2NoYXQvY29tcGxldGlvbnMvJHtjb21wbGV0aW9uSWR9YCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoYXRDb21wbGV0aW9uc1BhZ2UgZXh0ZW5kcyBDdXJzb3JQYWdlPENoYXRDb21wbGV0aW9uPiB7fVxuXG5leHBvcnQgY2xhc3MgQ2hhdENvbXBsZXRpb25TdG9yZU1lc3NhZ2VzUGFnZSBleHRlbmRzIEN1cnNvclBhZ2U8Q2hhdENvbXBsZXRpb25TdG9yZU1lc3NhZ2U+IHt9XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNoYXQgY29tcGxldGlvbiByZXNwb25zZSByZXR1cm5lZCBieSBtb2RlbCwgYmFzZWQgb24gdGhlIHByb3ZpZGVkXG4gKiBpbnB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvbiB7XG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY2hhdCBjb21wbGV0aW9uLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGNoYXQgY29tcGxldGlvbiBjaG9pY2VzLiBDYW4gYmUgbW9yZSB0aGFuIG9uZSBpZiBgbmAgaXMgZ3JlYXRlclxuICAgKiB0aGFuIDEuXG4gICAqL1xuICBjaG9pY2VzOiBBcnJheTxDaGF0Q29tcGxldGlvbi5DaG9pY2U+O1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIG9mIHdoZW4gdGhlIGNoYXQgY29tcGxldGlvbiB3YXMgY3JlYXRlZC5cbiAgICovXG4gIGNyZWF0ZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1vZGVsIHVzZWQgZm9yIHRoZSBjaGF0IGNvbXBsZXRpb24uXG4gICAqL1xuICBtb2RlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHR5cGUsIHdoaWNoIGlzIGFsd2F5cyBgY2hhdC5jb21wbGV0aW9uYC5cbiAgICovXG4gIG9iamVjdDogJ2NoYXQuY29tcGxldGlvbic7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlIHRpZXIgdXNlZCBmb3IgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHNlcnZpY2VfdGllcj86ICdzY2FsZScgfCAnZGVmYXVsdCcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZpbmdlcnByaW50IHJlcHJlc2VudHMgdGhlIGJhY2tlbmQgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBtb2RlbCBydW5zIHdpdGguXG4gICAqXG4gICAqIENhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGBzZWVkYCByZXF1ZXN0IHBhcmFtZXRlciB0byB1bmRlcnN0YW5kIHdoZW5cbiAgICogYmFja2VuZCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRoYXQgbWlnaHQgaW1wYWN0IGRldGVybWluaXNtLlxuICAgKi9cbiAgc3lzdGVtX2ZpbmdlcnByaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2FnZSBzdGF0aXN0aWNzIGZvciB0aGUgY29tcGxldGlvbiByZXF1ZXN0LlxuICAgKi9cbiAgdXNhZ2U/OiBDb21wbGV0aW9uc0FQSS5Db21wbGV0aW9uVXNhZ2U7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2hhdENvbXBsZXRpb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIENob2ljZSB7XG4gICAgLyoqXG4gICAgICogVGhlIHJlYXNvbiB0aGUgbW9kZWwgc3RvcHBlZCBnZW5lcmF0aW5nIHRva2Vucy4gVGhpcyB3aWxsIGJlIGBzdG9wYCBpZiB0aGUgbW9kZWxcbiAgICAgKiBoaXQgYSBuYXR1cmFsIHN0b3AgcG9pbnQgb3IgYSBwcm92aWRlZCBzdG9wIHNlcXVlbmNlLCBgbGVuZ3RoYCBpZiB0aGUgbWF4aW11bVxuICAgICAqIG51bWJlciBvZiB0b2tlbnMgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyByZWFjaGVkLCBgY29udGVudF9maWx0ZXJgIGlmXG4gICAgICogY29udGVudCB3YXMgb21pdHRlZCBkdWUgdG8gYSBmbGFnIGZyb20gb3VyIGNvbnRlbnQgZmlsdGVycywgYHRvb2xfY2FsbHNgIGlmIHRoZVxuICAgICAqIG1vZGVsIGNhbGxlZCBhIHRvb2wsIG9yIGBmdW5jdGlvbl9jYWxsYCAoZGVwcmVjYXRlZCkgaWYgdGhlIG1vZGVsIGNhbGxlZCBhXG4gICAgICogZnVuY3Rpb24uXG4gICAgICovXG4gICAgZmluaXNoX3JlYXNvbjogJ3N0b3AnIHwgJ2xlbmd0aCcgfCAndG9vbF9jYWxscycgfCAnY29udGVudF9maWx0ZXInIHwgJ2Z1bmN0aW9uX2NhbGwnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBjaG9pY2UgaW4gdGhlIGxpc3Qgb2YgY2hvaWNlcy5cbiAgICAgKi9cbiAgICBpbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogTG9nIHByb2JhYmlsaXR5IGluZm9ybWF0aW9uIGZvciB0aGUgY2hvaWNlLlxuICAgICAqL1xuICAgIGxvZ3Byb2JzOiBDaG9pY2UuTG9ncHJvYnMgfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQSBjaGF0IGNvbXBsZXRpb24gbWVzc2FnZSBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsLlxuICAgICAqL1xuICAgIG1lc3NhZ2U6IENvbXBsZXRpb25zQ29tcGxldGlvbnNBUEkuQ2hhdENvbXBsZXRpb25NZXNzYWdlO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBDaG9pY2Uge1xuICAgIC8qKlxuICAgICAqIExvZyBwcm9iYWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgdGhlIGNob2ljZS5cbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIExvZ3Byb2JzIHtcbiAgICAgIC8qKlxuICAgICAgICogQSBsaXN0IG9mIG1lc3NhZ2UgY29udGVudCB0b2tlbnMgd2l0aCBsb2cgcHJvYmFiaWxpdHkgaW5mb3JtYXRpb24uXG4gICAgICAgKi9cbiAgICAgIGNvbnRlbnQ6IEFycmF5PENvbXBsZXRpb25zQ29tcGxldGlvbnNBUEkuQ2hhdENvbXBsZXRpb25Ub2tlbkxvZ3Byb2I+IHwgbnVsbDtcblxuICAgICAgLyoqXG4gICAgICAgKiBBIGxpc3Qgb2YgbWVzc2FnZSByZWZ1c2FsIHRva2VucyB3aXRoIGxvZyBwcm9iYWJpbGl0eSBpbmZvcm1hdGlvbi5cbiAgICAgICAqL1xuICAgICAgcmVmdXNhbDogQXJyYXk8Q29tcGxldGlvbnNDb21wbGV0aW9uc0FQSS5DaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYj4gfCBudWxsO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2VzIHNlbnQgYnkgdGhlIG1vZGVsIGluIHJlc3BvbnNlIHRvIHVzZXIgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25Bc3Npc3RhbnRNZXNzYWdlUGFyYW0ge1xuICAvKipcbiAgICogVGhlIHJvbGUgb2YgdGhlIG1lc3NhZ2VzIGF1dGhvciwgaW4gdGhpcyBjYXNlIGBhc3Npc3RhbnRgLlxuICAgKi9cbiAgcm9sZTogJ2Fzc2lzdGFudCc7XG5cbiAgLyoqXG4gICAqIERhdGEgYWJvdXQgYSBwcmV2aW91cyBhdWRpbyByZXNwb25zZSBmcm9tIHRoZSBtb2RlbC5cbiAgICogW0xlYXJuIG1vcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9hdWRpbykuXG4gICAqL1xuICBhdWRpbz86IENoYXRDb21wbGV0aW9uQXNzaXN0YW50TWVzc2FnZVBhcmFtLkF1ZGlvIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSBhc3Npc3RhbnQgbWVzc2FnZS4gUmVxdWlyZWQgdW5sZXNzIGB0b29sX2NhbGxzYCBvclxuICAgKiBgZnVuY3Rpb25fY2FsbGAgaXMgc3BlY2lmaWVkLlxuICAgKi9cbiAgY29udGVudD86IHN0cmluZyB8IEFycmF5PENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRUZXh0IHwgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydFJlZnVzYWw+IHwgbnVsbDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQgYnkgYHRvb2xfY2FsbHNgLiBUaGUgbmFtZSBhbmQgYXJndW1lbnRzIG9mIGFcbiAgICogZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkLCBhcyBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsLlxuICAgKi9cbiAgZnVuY3Rpb25fY2FsbD86IENoYXRDb21wbGV0aW9uQXNzaXN0YW50TWVzc2FnZVBhcmFtLkZ1bmN0aW9uQ2FsbCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG5hbWUgZm9yIHRoZSBwYXJ0aWNpcGFudC4gUHJvdmlkZXMgdGhlIG1vZGVsIGluZm9ybWF0aW9uIHRvXG4gICAqIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBwYXJ0aWNpcGFudHMgb2YgdGhlIHNhbWUgcm9sZS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZ1c2FsIG1lc3NhZ2UgYnkgdGhlIGFzc2lzdGFudC5cbiAgICovXG4gIHJlZnVzYWw/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbCBjYWxscyBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsLCBzdWNoIGFzIGZ1bmN0aW9uIGNhbGxzLlxuICAgKi9cbiAgdG9vbF9jYWxscz86IEFycmF5PENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsPjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDaGF0Q29tcGxldGlvbkFzc2lzdGFudE1lc3NhZ2VQYXJhbSB7XG4gIC8qKlxuICAgKiBEYXRhIGFib3V0IGEgcHJldmlvdXMgYXVkaW8gcmVzcG9uc2UgZnJvbSB0aGUgbW9kZWwuXG4gICAqIFtMZWFybiBtb3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvYXVkaW8pLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBdWRpbyB7XG4gICAgLyoqXG4gICAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgcHJldmlvdXMgYXVkaW8gcmVzcG9uc2UgZnJvbSB0aGUgbW9kZWwuXG4gICAgICovXG4gICAgaWQ6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIGFuZCByZXBsYWNlZCBieSBgdG9vbF9jYWxsc2AuIFRoZSBuYW1lIGFuZCBhcmd1bWVudHMgb2YgYVxuICAgKiBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQsIGFzIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQ2FsbCB7XG4gICAgLyoqXG4gICAgICogVGhlIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoLCBhcyBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsIGluIEpTT05cbiAgICAgKiBmb3JtYXQuIE5vdGUgdGhhdCB0aGUgbW9kZWwgZG9lcyBub3QgYWx3YXlzIGdlbmVyYXRlIHZhbGlkIEpTT04sIGFuZCBtYXlcbiAgICAgKiBoYWxsdWNpbmF0ZSBwYXJhbWV0ZXJzIG5vdCBkZWZpbmVkIGJ5IHlvdXIgZnVuY3Rpb24gc2NoZW1hLiBWYWxpZGF0ZSB0aGVcbiAgICAgKiBhcmd1bWVudHMgaW4geW91ciBjb2RlIGJlZm9yZSBjYWxsaW5nIHlvdXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgYXJndW1lbnRzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBJZiB0aGUgYXVkaW8gb3V0cHV0IG1vZGFsaXR5IGlzIHJlcXVlc3RlZCwgdGhpcyBvYmplY3QgY29udGFpbnMgZGF0YSBhYm91dCB0aGVcbiAqIGF1ZGlvIHJlc3BvbnNlIGZyb20gdGhlIG1vZGVsLlxuICogW0xlYXJuIG1vcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9hdWRpbykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25BdWRpbyB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBhdWRpbyByZXNwb25zZS5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJhc2U2NCBlbmNvZGVkIGF1ZGlvIGJ5dGVzIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwsIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluXG4gICAqIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgZGF0YTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoaXMgYXVkaW8gcmVzcG9uc2Ugd2lsbCBubyBsb25nZXIgYmVcbiAgICogYWNjZXNzaWJsZSBvbiB0aGUgc2VydmVyIGZvciB1c2UgaW4gbXVsdGktdHVybiBjb252ZXJzYXRpb25zLlxuICAgKi9cbiAgZXhwaXJlc19hdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUcmFuc2NyaXB0IG9mIHRoZSBhdWRpbyBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsLlxuICAgKi9cbiAgdHJhbnNjcmlwdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGF1ZGlvIG91dHB1dC4gUmVxdWlyZWQgd2hlbiBhdWRpbyBvdXRwdXQgaXMgcmVxdWVzdGVkIHdpdGhcbiAqIGBtb2RhbGl0aWVzOiBbXCJhdWRpb1wiXWAuXG4gKiBbTGVhcm4gbW9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2F1ZGlvKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvbkF1ZGlvUGFyYW0ge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvdXRwdXQgYXVkaW8gZm9ybWF0LiBNdXN0IGJlIG9uZSBvZiBgd2F2YCwgYG1wM2AsIGBmbGFjYCwgYG9wdXNgLFxuICAgKiBvciBgcGNtMTZgLlxuICAgKi9cbiAgZm9ybWF0OiAnd2F2JyB8ICdtcDMnIHwgJ2ZsYWMnIHwgJ29wdXMnIHwgJ3BjbTE2JztcblxuICAvKipcbiAgICogVGhlIHZvaWNlIHRoZSBtb2RlbCB1c2VzIHRvIHJlc3BvbmQuIFN1cHBvcnRlZCB2b2ljZXMgYXJlIGBhbGxveWAsIGBhc2hgLFxuICAgKiBgYmFsbGFkYCwgYGNvcmFsYCwgYGVjaG9gLCBgc2FnZWAsIGFuZCBgc2hpbW1lcmAuXG4gICAqL1xuICB2b2ljZTogJ2FsbG95JyB8ICdhc2gnIHwgJ2JhbGxhZCcgfCAnY29yYWwnIHwgJ2VjaG8nIHwgJ3NhZ2UnIHwgJ3NoaW1tZXInIHwgJ3ZlcnNlJztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3RyZWFtZWQgY2h1bmsgb2YgYSBjaGF0IGNvbXBsZXRpb24gcmVzcG9uc2UgcmV0dXJuZWQgYnkgdGhlIG1vZGVsLFxuICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIGlucHV0LlxuICogW0xlYXJuIG1vcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zdHJlYW1pbmctcmVzcG9uc2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvbkNodW5rIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjaGF0IGNvbXBsZXRpb24uIEVhY2ggY2h1bmsgaGFzIHRoZSBzYW1lIElELlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGNoYXQgY29tcGxldGlvbiBjaG9pY2VzLiBDYW4gY29udGFpbiBtb3JlIHRoYW4gb25lIGVsZW1lbnRzIGlmIGBuYCBpc1xuICAgKiBncmVhdGVyIHRoYW4gMS4gQ2FuIGFsc28gYmUgZW1wdHkgZm9yIHRoZSBsYXN0IGNodW5rIGlmIHlvdSBzZXRcbiAgICogYHN0cmVhbV9vcHRpb25zOiB7XCJpbmNsdWRlX3VzYWdlXCI6IHRydWV9YC5cbiAgICovXG4gIGNob2ljZXM6IEFycmF5PENoYXRDb21wbGV0aW9uQ2h1bmsuQ2hvaWNlPjtcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBvZiB3aGVuIHRoZSBjaGF0IGNvbXBsZXRpb24gd2FzIGNyZWF0ZWQuIEVhY2hcbiAgICogY2h1bmsgaGFzIHRoZSBzYW1lIHRpbWVzdGFtcC5cbiAgICovXG4gIGNyZWF0ZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIGdlbmVyYXRlIHRoZSBjb21wbGV0aW9uLlxuICAgKi9cbiAgbW9kZWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0eXBlLCB3aGljaCBpcyBhbHdheXMgYGNoYXQuY29tcGxldGlvbi5jaHVua2AuXG4gICAqL1xuICBvYmplY3Q6ICdjaGF0LmNvbXBsZXRpb24uY2h1bmsnO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSB0aWVyIHVzZWQgZm9yIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QuXG4gICAqL1xuICBzZXJ2aWNlX3RpZXI/OiAnc2NhbGUnIHwgJ2RlZmF1bHQnIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhpcyBmaW5nZXJwcmludCByZXByZXNlbnRzIHRoZSBiYWNrZW5kIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgbW9kZWwgcnVucyB3aXRoLlxuICAgKiBDYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgc2VlZGAgcmVxdWVzdCBwYXJhbWV0ZXIgdG8gdW5kZXJzdGFuZCB3aGVuXG4gICAqIGJhY2tlbmQgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0aGF0IG1pZ2h0IGltcGFjdCBkZXRlcm1pbmlzbS5cbiAgICovXG4gIHN5c3RlbV9maW5nZXJwcmludD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZmllbGQgdGhhdCB3aWxsIG9ubHkgYmUgcHJlc2VudCB3aGVuIHlvdSBzZXRcbiAgICogYHN0cmVhbV9vcHRpb25zOiB7XCJpbmNsdWRlX3VzYWdlXCI6IHRydWV9YCBpbiB5b3VyIHJlcXVlc3QuIFdoZW4gcHJlc2VudCwgaXRcbiAgICogY29udGFpbnMgYSBudWxsIHZhbHVlICoqZXhjZXB0IGZvciB0aGUgbGFzdCBjaHVuayoqIHdoaWNoIGNvbnRhaW5zIHRoZSB0b2tlblxuICAgKiB1c2FnZSBzdGF0aXN0aWNzIGZvciB0aGUgZW50aXJlIHJlcXVlc3QuXG4gICAqXG4gICAqICoqTk9URToqKiBJZiB0aGUgc3RyZWFtIGlzIGludGVycnVwdGVkIG9yIGNhbmNlbGxlZCwgeW91IG1heSBub3QgcmVjZWl2ZSB0aGVcbiAgICogZmluYWwgdXNhZ2UgY2h1bmsgd2hpY2ggY29udGFpbnMgdGhlIHRvdGFsIHRva2VuIHVzYWdlIGZvciB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHVzYWdlPzogQ29tcGxldGlvbnNBUEkuQ29tcGxldGlvblVzYWdlIHwgbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDaGF0Q29tcGxldGlvbkNodW5rIHtcbiAgZXhwb3J0IGludGVyZmFjZSBDaG9pY2Uge1xuICAgIC8qKlxuICAgICAqIEEgY2hhdCBjb21wbGV0aW9uIGRlbHRhIGdlbmVyYXRlZCBieSBzdHJlYW1lZCBtb2RlbCByZXNwb25zZXMuXG4gICAgICovXG4gICAgZGVsdGE6IENob2ljZS5EZWx0YTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFzb24gdGhlIG1vZGVsIHN0b3BwZWQgZ2VuZXJhdGluZyB0b2tlbnMuIFRoaXMgd2lsbCBiZSBgc3RvcGAgaWYgdGhlIG1vZGVsXG4gICAgICogaGl0IGEgbmF0dXJhbCBzdG9wIHBvaW50IG9yIGEgcHJvdmlkZWQgc3RvcCBzZXF1ZW5jZSwgYGxlbmd0aGAgaWYgdGhlIG1heGltdW1cbiAgICAgKiBudW1iZXIgb2YgdG9rZW5zIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdCB3YXMgcmVhY2hlZCwgYGNvbnRlbnRfZmlsdGVyYCBpZlxuICAgICAqIGNvbnRlbnQgd2FzIG9taXR0ZWQgZHVlIHRvIGEgZmxhZyBmcm9tIG91ciBjb250ZW50IGZpbHRlcnMsIGB0b29sX2NhbGxzYCBpZiB0aGVcbiAgICAgKiBtb2RlbCBjYWxsZWQgYSB0b29sLCBvciBgZnVuY3Rpb25fY2FsbGAgKGRlcHJlY2F0ZWQpIGlmIHRoZSBtb2RlbCBjYWxsZWQgYVxuICAgICAqIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZpbmlzaF9yZWFzb246ICdzdG9wJyB8ICdsZW5ndGgnIHwgJ3Rvb2xfY2FsbHMnIHwgJ2NvbnRlbnRfZmlsdGVyJyB8ICdmdW5jdGlvbl9jYWxsJyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGNob2ljZSBpbiB0aGUgbGlzdCBvZiBjaG9pY2VzLlxuICAgICAqL1xuICAgIGluZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBMb2cgcHJvYmFiaWxpdHkgaW5mb3JtYXRpb24gZm9yIHRoZSBjaG9pY2UuXG4gICAgICovXG4gICAgbG9ncHJvYnM/OiBDaG9pY2UuTG9ncHJvYnMgfCBudWxsO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBDaG9pY2Uge1xuICAgIC8qKlxuICAgICAqIEEgY2hhdCBjb21wbGV0aW9uIGRlbHRhIGdlbmVyYXRlZCBieSBzdHJlYW1lZCBtb2RlbCByZXNwb25zZXMuXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBEZWx0YSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgY2h1bmsgbWVzc2FnZS5cbiAgICAgICAqL1xuICAgICAgY29udGVudD86IHN0cmluZyB8IG51bGw7XG5cbiAgICAgIC8qKlxuICAgICAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQgYnkgYHRvb2xfY2FsbHNgLiBUaGUgbmFtZSBhbmQgYXJndW1lbnRzIG9mIGFcbiAgICAgICAqIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCwgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbC5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb25fY2FsbD86IERlbHRhLkZ1bmN0aW9uQ2FsbDtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgcmVmdXNhbCBtZXNzYWdlIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwuXG4gICAgICAgKi9cbiAgICAgIHJlZnVzYWw/OiBzdHJpbmcgfCBudWxsO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSByb2xlIG9mIHRoZSBhdXRob3Igb2YgdGhpcyBtZXNzYWdlLlxuICAgICAgICovXG4gICAgICByb2xlPzogJ2RldmVsb3BlcicgfCAnc3lzdGVtJyB8ICd1c2VyJyB8ICdhc3Npc3RhbnQnIHwgJ3Rvb2wnO1xuXG4gICAgICB0b29sX2NhbGxzPzogQXJyYXk8RGVsdGEuVG9vbENhbGw+O1xuICAgIH1cblxuICAgIGV4cG9ydCBuYW1lc3BhY2UgRGVsdGEge1xuICAgICAgLyoqXG4gICAgICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIGFuZCByZXBsYWNlZCBieSBgdG9vbF9jYWxsc2AuIFRoZSBuYW1lIGFuZCBhcmd1bWVudHMgb2YgYVxuICAgICAgICogZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkLCBhcyBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsLlxuICAgICAgICovXG4gICAgICBleHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQ2FsbCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYXJndW1lbnRzIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGgsIGFzIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwgaW4gSlNPTlxuICAgICAgICAgKiBmb3JtYXQuIE5vdGUgdGhhdCB0aGUgbW9kZWwgZG9lcyBub3QgYWx3YXlzIGdlbmVyYXRlIHZhbGlkIEpTT04sIGFuZCBtYXlcbiAgICAgICAgICogaGFsbHVjaW5hdGUgcGFyYW1ldGVycyBub3QgZGVmaW5lZCBieSB5b3VyIGZ1bmN0aW9uIHNjaGVtYS4gVmFsaWRhdGUgdGhlXG4gICAgICAgICAqIGFyZ3VtZW50cyBpbiB5b3VyIGNvZGUgYmVmb3JlIGNhbGxpbmcgeW91ciBmdW5jdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIGFyZ3VtZW50cz86IHN0cmluZztcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICAgICAqL1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgaW50ZXJmYWNlIFRvb2xDYWxsIHtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIElEIG9mIHRoZSB0b29sIGNhbGwuXG4gICAgICAgICAqL1xuICAgICAgICBpZD86IHN0cmluZztcblxuICAgICAgICBmdW5jdGlvbj86IFRvb2xDYWxsLkZ1bmN0aW9uO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdHlwZSBvZiB0aGUgdG9vbC4gQ3VycmVudGx5LCBvbmx5IGBmdW5jdGlvbmAgaXMgc3VwcG9ydGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdHlwZT86ICdmdW5jdGlvbic7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBuYW1lc3BhY2UgVG9vbENhbGwge1xuICAgICAgICBleHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBUaGUgYXJndW1lbnRzIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGgsIGFzIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwgaW4gSlNPTlxuICAgICAgICAgICAqIGZvcm1hdC4gTm90ZSB0aGF0IHRoZSBtb2RlbCBkb2VzIG5vdCBhbHdheXMgZ2VuZXJhdGUgdmFsaWQgSlNPTiwgYW5kIG1heVxuICAgICAgICAgICAqIGhhbGx1Y2luYXRlIHBhcmFtZXRlcnMgbm90IGRlZmluZWQgYnkgeW91ciBmdW5jdGlvbiBzY2hlbWEuIFZhbGlkYXRlIHRoZVxuICAgICAgICAgICAqIGFyZ3VtZW50cyBpbiB5b3VyIGNvZGUgYmVmb3JlIGNhbGxpbmcgeW91ciBmdW5jdGlvbi5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBhcmd1bWVudHM/OiBzdHJpbmc7XG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9nIHByb2JhYmlsaXR5IGluZm9ybWF0aW9uIGZvciB0aGUgY2hvaWNlLlxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgTG9ncHJvYnMge1xuICAgICAgLyoqXG4gICAgICAgKiBBIGxpc3Qgb2YgbWVzc2FnZSBjb250ZW50IHRva2VucyB3aXRoIGxvZyBwcm9iYWJpbGl0eSBpbmZvcm1hdGlvbi5cbiAgICAgICAqL1xuICAgICAgY29udGVudDogQXJyYXk8Q29tcGxldGlvbnNDb21wbGV0aW9uc0FQSS5DaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYj4gfCBudWxsO1xuXG4gICAgICAvKipcbiAgICAgICAqIEEgbGlzdCBvZiBtZXNzYWdlIHJlZnVzYWwgdG9rZW5zIHdpdGggbG9nIHByb2JhYmlsaXR5IGluZm9ybWF0aW9uLlxuICAgICAgICovXG4gICAgICByZWZ1c2FsOiBBcnJheTxDb21wbGV0aW9uc0NvbXBsZXRpb25zQVBJLkNoYXRDb21wbGV0aW9uVG9rZW5Mb2dwcm9iPiB8IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTGVhcm4gYWJvdXRcbiAqIFt0ZXh0IGlucHV0c10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3RleHQtZ2VuZXJhdGlvbikuXG4gKi9cbmV4cG9ydCB0eXBlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnQgPVxuICB8IENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRUZXh0XG4gIHwgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydEltYWdlXG4gIHwgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydElucHV0QXVkaW9cbiAgfCBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0LkZpbGU7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydCB7XG4gIC8qKlxuICAgKiBMZWFybiBhYm91dCBbZmlsZSBpbnB1dHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90ZXh0KSBmb3IgdGV4dFxuICAgKiBnZW5lcmF0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBGaWxlIHtcbiAgICBmaWxlOiBGaWxlLkZpbGU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgY29udGVudCBwYXJ0LiBBbHdheXMgYGZpbGVgLlxuICAgICAqL1xuICAgIHR5cGU6ICdmaWxlJztcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgRmlsZSB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBGaWxlIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGJhc2U2NCBlbmNvZGVkIGZpbGUgZGF0YSwgdXNlZCB3aGVuIHBhc3NpbmcgdGhlIGZpbGUgdG8gdGhlIG1vZGVsIGFzIGFcbiAgICAgICAqIHN0cmluZy5cbiAgICAgICAqL1xuICAgICAgZmlsZV9kYXRhPzogc3RyaW5nO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBJRCBvZiBhbiB1cGxvYWRlZCBmaWxlIHRvIHVzZSBhcyBpbnB1dC5cbiAgICAgICAqL1xuICAgICAgZmlsZV9pZD86IHN0cmluZztcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSwgdXNlZCB3aGVuIHBhc3NpbmcgdGhlIGZpbGUgdG8gdGhlIG1vZGVsIGFzIGEgc3RyaW5nLlxuICAgICAgICovXG4gICAgICBmaWxlbmFtZT86IHN0cmluZztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBMZWFybiBhYm91dCBbaW1hZ2UgaW5wdXRzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdmlzaW9uKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW1hZ2Uge1xuICBpbWFnZV91cmw6IENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRJbWFnZS5JbWFnZVVSTDtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbnRlbnQgcGFydC5cbiAgICovXG4gIHR5cGU6ICdpbWFnZV91cmwnO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRJbWFnZSB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VVUkwge1xuICAgIC8qKlxuICAgICAqIEVpdGhlciBhIFVSTCBvZiB0aGUgaW1hZ2Ugb3IgdGhlIGJhc2U2NCBlbmNvZGVkIGltYWdlIGRhdGEuXG4gICAgICovXG4gICAgdXJsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGRldGFpbCBsZXZlbCBvZiB0aGUgaW1hZ2UuIExlYXJuIG1vcmUgaW4gdGhlXG4gICAgICogW1Zpc2lvbiBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3Zpc2lvbiNsb3ctb3ItaGlnaC1maWRlbGl0eS1pbWFnZS11bmRlcnN0YW5kaW5nKS5cbiAgICAgKi9cbiAgICBkZXRhaWw/OiAnYXV0bycgfCAnbG93JyB8ICdoaWdoJztcbiAgfVxufVxuXG4vKipcbiAqIExlYXJuIGFib3V0IFthdWRpbyBpbnB1dHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9hdWRpbykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydElucHV0QXVkaW8ge1xuICBpbnB1dF9hdWRpbzogQ2hhdENvbXBsZXRpb25Db250ZW50UGFydElucHV0QXVkaW8uSW5wdXRBdWRpbztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbnRlbnQgcGFydC4gQWx3YXlzIGBpbnB1dF9hdWRpb2AuXG4gICAqL1xuICB0eXBlOiAnaW5wdXRfYXVkaW8nO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRJbnB1dEF1ZGlvIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dEF1ZGlvIHtcbiAgICAvKipcbiAgICAgKiBCYXNlNjQgZW5jb2RlZCBhdWRpbyBkYXRhLlxuICAgICAqL1xuICAgIGRhdGE6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtYXQgb2YgdGhlIGVuY29kZWQgYXVkaW8gZGF0YS4gQ3VycmVudGx5IHN1cHBvcnRzIFwid2F2XCIgYW5kIFwibXAzXCIuXG4gICAgICovXG4gICAgZm9ybWF0OiAnd2F2JyB8ICdtcDMnO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydFJlZnVzYWwge1xuICAvKipcbiAgICogVGhlIHJlZnVzYWwgbWVzc2FnZSBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsLlxuICAgKi9cbiAgcmVmdXNhbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgY29udGVudCBwYXJ0LlxuICAgKi9cbiAgdHlwZTogJ3JlZnVzYWwnO1xufVxuXG4vKipcbiAqIExlYXJuIGFib3V0XG4gKiBbdGV4dCBpbnB1dHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90ZXh0LWdlbmVyYXRpb24pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRUZXh0IHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGNvbnRlbnQuXG4gICAqL1xuICB0ZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBjb250ZW50IHBhcnQuXG4gICAqL1xuICB0eXBlOiAndGV4dCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25EZWxldGVkIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgY2hhdCBjb21wbGV0aW9uIHRoYXQgd2FzIGRlbGV0ZWQuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjaGF0IGNvbXBsZXRpb24gd2FzIGRlbGV0ZWQuXG4gICAqL1xuICBkZWxldGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBvYmplY3QgYmVpbmcgZGVsZXRlZC5cbiAgICovXG4gIG9iamVjdDogJ2NoYXQuY29tcGxldGlvbi5kZWxldGVkJztcbn1cblxuLyoqXG4gKiBEZXZlbG9wZXItcHJvdmlkZWQgaW5zdHJ1Y3Rpb25zIHRoYXQgdGhlIG1vZGVsIHNob3VsZCBmb2xsb3csIHJlZ2FyZGxlc3Mgb2ZcbiAqIG1lc3NhZ2VzIHNlbnQgYnkgdGhlIHVzZXIuIFdpdGggbzEgbW9kZWxzIGFuZCBuZXdlciwgYGRldmVsb3BlcmAgbWVzc2FnZXNcbiAqIHJlcGxhY2UgdGhlIHByZXZpb3VzIGBzeXN0ZW1gIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wbGV0aW9uRGV2ZWxvcGVyTWVzc2FnZVBhcmFtIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50cyBvZiB0aGUgZGV2ZWxvcGVyIG1lc3NhZ2UuXG4gICAqL1xuICBjb250ZW50OiBzdHJpbmcgfCBBcnJheTxDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0VGV4dD47XG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIG9mIHRoZSBtZXNzYWdlcyBhdXRob3IsIGluIHRoaXMgY2FzZSBgZGV2ZWxvcGVyYC5cbiAgICovXG4gIHJvbGU6ICdkZXZlbG9wZXInO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBuYW1lIGZvciB0aGUgcGFydGljaXBhbnQuIFByb3ZpZGVzIHRoZSBtb2RlbCBpbmZvcm1hdGlvbiB0b1xuICAgKiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcGFydGljaXBhbnRzIG9mIHRoZSBzYW1lIHJvbGUuXG4gICAqL1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNwZWNpZnlpbmcgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIHZpYSBge1wibmFtZVwiOiBcIm15X2Z1bmN0aW9uXCJ9YCBmb3JjZXMgdGhlIG1vZGVsXG4gKiB0byBjYWxsIHRoYXQgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25GdW5jdGlvbkNhbGxPcHRpb24ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uTWVzc2FnZVBhcmFtIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50cyBvZiB0aGUgZnVuY3Rpb24gbWVzc2FnZS5cbiAgICovXG4gIGNvbnRlbnQ6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBvZiB0aGUgbWVzc2FnZXMgYXV0aG9yLCBpbiB0aGlzIGNhc2UgYGZ1bmN0aW9uYC5cbiAgICovXG4gIHJvbGU6ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQSBjaGF0IGNvbXBsZXRpb24gbWVzc2FnZSBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wbGV0aW9uTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICBjb250ZW50OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVmdXNhbCBtZXNzYWdlIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwuXG4gICAqL1xuICByZWZ1c2FsOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBvZiB0aGUgYXV0aG9yIG9mIHRoaXMgbWVzc2FnZS5cbiAgICovXG4gIHJvbGU6ICdhc3Npc3RhbnQnO1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyBmb3IgdGhlIG1lc3NhZ2UsIHdoZW4gYXBwbGljYWJsZSwgYXMgd2hlbiB1c2luZyB0aGVcbiAgICogW3dlYiBzZWFyY2ggdG9vbF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3Rvb2xzLXdlYi1zZWFyY2g/YXBpLW1vZGU9Y2hhdCkuXG4gICAqL1xuICBhbm5vdGF0aW9ucz86IEFycmF5PENoYXRDb21wbGV0aW9uTWVzc2FnZS5Bbm5vdGF0aW9uPjtcblxuICAvKipcbiAgICogSWYgdGhlIGF1ZGlvIG91dHB1dCBtb2RhbGl0eSBpcyByZXF1ZXN0ZWQsIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGRhdGEgYWJvdXQgdGhlXG4gICAqIGF1ZGlvIHJlc3BvbnNlIGZyb20gdGhlIG1vZGVsLlxuICAgKiBbTGVhcm4gbW9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2F1ZGlvKS5cbiAgICovXG4gIGF1ZGlvPzogQ2hhdENvbXBsZXRpb25BdWRpbyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIERlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkIGJ5IGB0b29sX2NhbGxzYC4gVGhlIG5hbWUgYW5kIGFyZ3VtZW50cyBvZiBhXG4gICAqIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCwgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbC5cbiAgICovXG4gIGZ1bmN0aW9uX2NhbGw/OiBDaGF0Q29tcGxldGlvbk1lc3NhZ2UuRnVuY3Rpb25DYWxsIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHRvb2wgY2FsbHMgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbCwgc3VjaCBhcyBmdW5jdGlvbiBjYWxscy5cbiAgICovXG4gIHRvb2xfY2FsbHM/OiBBcnJheTxDaGF0Q29tcGxldGlvbk1lc3NhZ2VUb29sQ2FsbD47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2hhdENvbXBsZXRpb25NZXNzYWdlIHtcbiAgLyoqXG4gICAqIEEgVVJMIGNpdGF0aW9uIHdoZW4gdXNpbmcgd2ViIHNlYXJjaC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQW5ub3RhdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIFVSTCBjaXRhdGlvbi4gQWx3YXlzIGB1cmxfY2l0YXRpb25gLlxuICAgICAqL1xuICAgIHR5cGU6ICd1cmxfY2l0YXRpb24nO1xuXG4gICAgLyoqXG4gICAgICogQSBVUkwgY2l0YXRpb24gd2hlbiB1c2luZyB3ZWIgc2VhcmNoLlxuICAgICAqL1xuICAgIHVybF9jaXRhdGlvbjogQW5ub3RhdGlvbi5VUkxDaXRhdGlvbjtcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgQW5ub3RhdGlvbiB7XG4gICAgLyoqXG4gICAgICogQSBVUkwgY2l0YXRpb24gd2hlbiB1c2luZyB3ZWIgc2VhcmNoLlxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgVVJMQ2l0YXRpb24ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBVUkwgY2l0YXRpb24gaW4gdGhlIG1lc3NhZ2UuXG4gICAgICAgKi9cbiAgICAgIGVuZF9pbmRleDogbnVtYmVyO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBVUkwgY2l0YXRpb24gaW4gdGhlIG1lc3NhZ2UuXG4gICAgICAgKi9cbiAgICAgIHN0YXJ0X2luZGV4OiBudW1iZXI7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHRpdGxlIG9mIHRoZSB3ZWIgcmVzb3VyY2UuXG4gICAgICAgKi9cbiAgICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIFVSTCBvZiB0aGUgd2ViIHJlc291cmNlLlxuICAgICAgICovXG4gICAgICB1cmw6IHN0cmluZztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQgYnkgYHRvb2xfY2FsbHNgLiBUaGUgbmFtZSBhbmQgYXJndW1lbnRzIG9mIGFcbiAgICogZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkLCBhcyBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkNhbGwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhcmd1bWVudHMgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCwgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbCBpbiBKU09OXG4gICAgICogZm9ybWF0LiBOb3RlIHRoYXQgdGhlIG1vZGVsIGRvZXMgbm90IGFsd2F5cyBnZW5lcmF0ZSB2YWxpZCBKU09OLCBhbmQgbWF5XG4gICAgICogaGFsbHVjaW5hdGUgcGFyYW1ldGVycyBub3QgZGVmaW5lZCBieSB5b3VyIGZ1bmN0aW9uIHNjaGVtYS4gVmFsaWRhdGUgdGhlXG4gICAgICogYXJndW1lbnRzIGluIHlvdXIgY29kZSBiZWZvcmUgY2FsbGluZyB5b3VyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGFyZ3VtZW50czogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICovXG4gICAgbmFtZTogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogRGV2ZWxvcGVyLXByb3ZpZGVkIGluc3RydWN0aW9ucyB0aGF0IHRoZSBtb2RlbCBzaG91bGQgZm9sbG93LCByZWdhcmRsZXNzIG9mXG4gKiBtZXNzYWdlcyBzZW50IGJ5IHRoZSB1c2VyLiBXaXRoIG8xIG1vZGVscyBhbmQgbmV3ZXIsIGBkZXZlbG9wZXJgIG1lc3NhZ2VzXG4gKiByZXBsYWNlIHRoZSBwcmV2aW91cyBgc3lzdGVtYCBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0gPVxuICB8IENoYXRDb21wbGV0aW9uRGV2ZWxvcGVyTWVzc2FnZVBhcmFtXG4gIHwgQ2hhdENvbXBsZXRpb25TeXN0ZW1NZXNzYWdlUGFyYW1cbiAgfCBDaGF0Q29tcGxldGlvblVzZXJNZXNzYWdlUGFyYW1cbiAgfCBDaGF0Q29tcGxldGlvbkFzc2lzdGFudE1lc3NhZ2VQYXJhbVxuICB8IENoYXRDb21wbGV0aW9uVG9vbE1lc3NhZ2VQYXJhbVxuICB8IENoYXRDb21wbGV0aW9uRnVuY3Rpb25NZXNzYWdlUGFyYW07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25NZXNzYWdlVG9vbENhbGwge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSB0b29sIGNhbGwuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdGhhdCB0aGUgbW9kZWwgY2FsbGVkLlxuICAgKi9cbiAgZnVuY3Rpb246IENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsLkZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgdG9vbC4gQ3VycmVudGx5LCBvbmx5IGBmdW5jdGlvbmAgaXMgc3VwcG9ydGVkLlxuICAgKi9cbiAgdHlwZTogJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDaGF0Q29tcGxldGlvbk1lc3NhZ2VUb29sQ2FsbCB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdGhhdCB0aGUgbW9kZWwgY2FsbGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoLCBhcyBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsIGluIEpTT05cbiAgICAgKiBmb3JtYXQuIE5vdGUgdGhhdCB0aGUgbW9kZWwgZG9lcyBub3QgYWx3YXlzIGdlbmVyYXRlIHZhbGlkIEpTT04sIGFuZCBtYXlcbiAgICAgKiBoYWxsdWNpbmF0ZSBwYXJhbWV0ZXJzIG5vdCBkZWZpbmVkIGJ5IHlvdXIgZnVuY3Rpb24gc2NoZW1hLiBWYWxpZGF0ZSB0aGVcbiAgICAgKiBhcmd1bWVudHMgaW4geW91ciBjb2RlIGJlZm9yZSBjYWxsaW5nIHlvdXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgYXJndW1lbnRzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQ2hhdENvbXBsZXRpb25Nb2RhbGl0eSA9ICd0ZXh0JyB8ICdhdWRpbyc7XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgdG9vbCB0aGUgbW9kZWwgc2hvdWxkIHVzZS4gVXNlIHRvIGZvcmNlIHRoZSBtb2RlbCB0byBjYWxsIGEgc3BlY2lmaWNcbiAqIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wbGV0aW9uTmFtZWRUb29sQ2hvaWNlIHtcbiAgZnVuY3Rpb246IENoYXRDb21wbGV0aW9uTmFtZWRUb29sQ2hvaWNlLkZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgdG9vbC4gQ3VycmVudGx5LCBvbmx5IGBmdW5jdGlvbmAgaXMgc3VwcG9ydGVkLlxuICAgKi9cbiAgdHlwZTogJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDaGF0Q29tcGxldGlvbk5hbWVkVG9vbENob2ljZSB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICAgICAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIFN0YXRpYyBwcmVkaWN0ZWQgb3V0cHV0IGNvbnRlbnQsIHN1Y2ggYXMgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0IGZpbGUgdGhhdCBpc1xuICogYmVpbmcgcmVnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25QcmVkaWN0aW9uQ29udGVudCB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0aGF0IHNob3VsZCBiZSBtYXRjaGVkIHdoZW4gZ2VuZXJhdGluZyBhIG1vZGVsIHJlc3BvbnNlLiBJZlxuICAgKiBnZW5lcmF0ZWQgdG9rZW5zIHdvdWxkIG1hdGNoIHRoaXMgY29udGVudCwgdGhlIGVudGlyZSBtb2RlbCByZXNwb25zZSBjYW4gYmVcbiAgICogcmV0dXJuZWQgbXVjaCBtb3JlIHF1aWNrbHkuXG4gICAqL1xuICBjb250ZW50OiBzdHJpbmcgfCBBcnJheTxDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0VGV4dD47XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBwcmVkaWN0ZWQgY29udGVudCB5b3Ugd2FudCB0byBwcm92aWRlLiBUaGlzIHR5cGUgaXMgY3VycmVudGx5XG4gICAqIGFsd2F5cyBgY29udGVudGAuXG4gICAqL1xuICB0eXBlOiAnY29udGVudCc7XG59XG5cbi8qKlxuICogVGhlIHJvbGUgb2YgdGhlIGF1dGhvciBvZiBhIG1lc3NhZ2VcbiAqL1xuZXhwb3J0IHR5cGUgQ2hhdENvbXBsZXRpb25Sb2xlID0gJ2RldmVsb3BlcicgfCAnc3lzdGVtJyB8ICd1c2VyJyB8ICdhc3Npc3RhbnQnIHwgJ3Rvb2wnIHwgJ2Z1bmN0aW9uJztcblxuLyoqXG4gKiBBIGNoYXQgY29tcGxldGlvbiBtZXNzYWdlIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25TdG9yZU1lc3NhZ2UgZXh0ZW5kcyBDaGF0Q29tcGxldGlvbk1lc3NhZ2Uge1xuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGNoYXQgbWVzc2FnZS5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlLiBPbmx5IHNldCB0aGlzIHdoZW4geW91IHNldCBgc3RyZWFtOiB0cnVlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvblN0cmVhbU9wdGlvbnMge1xuICAvKipcbiAgICogSWYgc2V0LCBhbiBhZGRpdGlvbmFsIGNodW5rIHdpbGwgYmUgc3RyZWFtZWQgYmVmb3JlIHRoZSBgZGF0YTogW0RPTkVdYCBtZXNzYWdlLlxuICAgKiBUaGUgYHVzYWdlYCBmaWVsZCBvbiB0aGlzIGNodW5rIHNob3dzIHRoZSB0b2tlbiB1c2FnZSBzdGF0aXN0aWNzIGZvciB0aGUgZW50aXJlXG4gICAqIHJlcXVlc3QsIGFuZCB0aGUgYGNob2ljZXNgIGZpZWxkIHdpbGwgYWx3YXlzIGJlIGFuIGVtcHR5IGFycmF5LlxuICAgKlxuICAgKiBBbGwgb3RoZXIgY2h1bmtzIHdpbGwgYWxzbyBpbmNsdWRlIGEgYHVzYWdlYCBmaWVsZCwgYnV0IHdpdGggYSBudWxsIHZhbHVlLlxuICAgKiAqKk5PVEU6KiogSWYgdGhlIHN0cmVhbSBpcyBpbnRlcnJ1cHRlZCwgeW91IG1heSBub3QgcmVjZWl2ZSB0aGUgZmluYWwgdXNhZ2VcbiAgICogY2h1bmsgd2hpY2ggY29udGFpbnMgdGhlIHRvdGFsIHRva2VuIHVzYWdlIGZvciB0aGUgcmVxdWVzdC5cbiAgICovXG4gIGluY2x1ZGVfdXNhZ2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERldmVsb3Blci1wcm92aWRlZCBpbnN0cnVjdGlvbnMgdGhhdCB0aGUgbW9kZWwgc2hvdWxkIGZvbGxvdywgcmVnYXJkbGVzcyBvZlxuICogbWVzc2FnZXMgc2VudCBieSB0aGUgdXNlci4gV2l0aCBvMSBtb2RlbHMgYW5kIG5ld2VyLCB1c2UgYGRldmVsb3BlcmAgbWVzc2FnZXNcbiAqIGZvciB0aGlzIHB1cnBvc2UgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvblN5c3RlbU1lc3NhZ2VQYXJhbSB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudHMgb2YgdGhlIHN5c3RlbSBtZXNzYWdlLlxuICAgKi9cbiAgY29udGVudDogc3RyaW5nIHwgQXJyYXk8Q2hhdENvbXBsZXRpb25Db250ZW50UGFydFRleHQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBvZiB0aGUgbWVzc2FnZXMgYXV0aG9yLCBpbiB0aGlzIGNhc2UgYHN5c3RlbWAuXG4gICAqL1xuICByb2xlOiAnc3lzdGVtJztcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbmFtZSBmb3IgdGhlIHBhcnRpY2lwYW50LiBQcm92aWRlcyB0aGUgbW9kZWwgaW5mb3JtYXRpb24gdG9cbiAgICogZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHBhcnRpY2lwYW50cyBvZiB0aGUgc2FtZSByb2xlLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYiB7XG4gIC8qKlxuICAgKiBUaGUgdG9rZW4uXG4gICAqL1xuICB0b2tlbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgaW50ZWdlcnMgcmVwcmVzZW50aW5nIHRoZSBVVEYtOCBieXRlcyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdG9rZW4uXG4gICAqIFVzZWZ1bCBpbiBpbnN0YW5jZXMgd2hlcmUgY2hhcmFjdGVycyBhcmUgcmVwcmVzZW50ZWQgYnkgbXVsdGlwbGUgdG9rZW5zIGFuZFxuICAgKiB0aGVpciBieXRlIHJlcHJlc2VudGF0aW9ucyBtdXN0IGJlIGNvbWJpbmVkIHRvIGdlbmVyYXRlIHRoZSBjb3JyZWN0IHRleHRcbiAgICogcmVwcmVzZW50YXRpb24uIENhbiBiZSBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gYnl0ZXMgcmVwcmVzZW50YXRpb24gZm9yIHRoZSB0b2tlbi5cbiAgICovXG4gIGJ5dGVzOiBBcnJheTxudW1iZXI+IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGxvZyBwcm9iYWJpbGl0eSBvZiB0aGlzIHRva2VuLCBpZiBpdCBpcyB3aXRoaW4gdGhlIHRvcCAyMCBtb3N0IGxpa2VseVxuICAgKiB0b2tlbnMuIE90aGVyd2lzZSwgdGhlIHZhbHVlIGAtOTk5OS4wYCBpcyB1c2VkIHRvIHNpZ25pZnkgdGhhdCB0aGUgdG9rZW4gaXMgdmVyeVxuICAgKiB1bmxpa2VseS5cbiAgICovXG4gIGxvZ3Byb2I6IG51bWJlcjtcblxuICAvKipcbiAgICogTGlzdCBvZiB0aGUgbW9zdCBsaWtlbHkgdG9rZW5zIGFuZCB0aGVpciBsb2cgcHJvYmFiaWxpdHksIGF0IHRoaXMgdG9rZW5cbiAgICogcG9zaXRpb24uIEluIHJhcmUgY2FzZXMsIHRoZXJlIG1heSBiZSBmZXdlciB0aGFuIHRoZSBudW1iZXIgb2YgcmVxdWVzdGVkXG4gICAqIGB0b3BfbG9ncHJvYnNgIHJldHVybmVkLlxuICAgKi9cbiAgdG9wX2xvZ3Byb2JzOiBBcnJheTxDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYi5Ub3BMb2dwcm9iPjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgVG9wTG9ncHJvYiB7XG4gICAgLyoqXG4gICAgICogVGhlIHRva2VuLlxuICAgICAqL1xuICAgIHRva2VuOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgaW50ZWdlcnMgcmVwcmVzZW50aW5nIHRoZSBVVEYtOCBieXRlcyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdG9rZW4uXG4gICAgICogVXNlZnVsIGluIGluc3RhbmNlcyB3aGVyZSBjaGFyYWN0ZXJzIGFyZSByZXByZXNlbnRlZCBieSBtdWx0aXBsZSB0b2tlbnMgYW5kXG4gICAgICogdGhlaXIgYnl0ZSByZXByZXNlbnRhdGlvbnMgbXVzdCBiZSBjb21iaW5lZCB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCB0ZXh0XG4gICAgICogcmVwcmVzZW50YXRpb24uIENhbiBiZSBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gYnl0ZXMgcmVwcmVzZW50YXRpb24gZm9yIHRoZSB0b2tlbi5cbiAgICAgKi9cbiAgICBieXRlczogQXJyYXk8bnVtYmVyPiB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbG9nIHByb2JhYmlsaXR5IG9mIHRoaXMgdG9rZW4sIGlmIGl0IGlzIHdpdGhpbiB0aGUgdG9wIDIwIG1vc3QgbGlrZWx5XG4gICAgICogdG9rZW5zLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBgLTk5OTkuMGAgaXMgdXNlZCB0byBzaWduaWZ5IHRoYXQgdGhlIHRva2VuIGlzIHZlcnlcbiAgICAgKiB1bmxpa2VseS5cbiAgICAgKi9cbiAgICBsb2dwcm9iOiBudW1iZXI7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvblRvb2wge1xuICBmdW5jdGlvbjogU2hhcmVkLkZ1bmN0aW9uRGVmaW5pdGlvbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHRvb2wuIEN1cnJlbnRseSwgb25seSBgZnVuY3Rpb25gIGlzIHN1cHBvcnRlZC5cbiAgICovXG4gIHR5cGU6ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQ29udHJvbHMgd2hpY2ggKGlmIGFueSkgdG9vbCBpcyBjYWxsZWQgYnkgdGhlIG1vZGVsLiBgbm9uZWAgbWVhbnMgdGhlIG1vZGVsIHdpbGxcbiAqIG5vdCBjYWxsIGFueSB0b29sIGFuZCBpbnN0ZWFkIGdlbmVyYXRlcyBhIG1lc3NhZ2UuIGBhdXRvYCBtZWFucyB0aGUgbW9kZWwgY2FuXG4gKiBwaWNrIGJldHdlZW4gZ2VuZXJhdGluZyBhIG1lc3NhZ2Ugb3IgY2FsbGluZyBvbmUgb3IgbW9yZSB0b29scy4gYHJlcXVpcmVkYCBtZWFuc1xuICogdGhlIG1vZGVsIG11c3QgY2FsbCBvbmUgb3IgbW9yZSB0b29scy4gU3BlY2lmeWluZyBhIHBhcnRpY3VsYXIgdG9vbCB2aWFcbiAqIGB7XCJ0eXBlXCI6IFwiZnVuY3Rpb25cIiwgXCJmdW5jdGlvblwiOiB7XCJuYW1lXCI6IFwibXlfZnVuY3Rpb25cIn19YCBmb3JjZXMgdGhlIG1vZGVsIHRvXG4gKiBjYWxsIHRoYXQgdG9vbC5cbiAqXG4gKiBgbm9uZWAgaXMgdGhlIGRlZmF1bHQgd2hlbiBubyB0b29scyBhcmUgcHJlc2VudC4gYGF1dG9gIGlzIHRoZSBkZWZhdWx0IGlmIHRvb2xzXG4gKiBhcmUgcHJlc2VudC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2hhdENvbXBsZXRpb25Ub29sQ2hvaWNlT3B0aW9uID0gJ25vbmUnIHwgJ2F1dG8nIHwgJ3JlcXVpcmVkJyB8IENoYXRDb21wbGV0aW9uTmFtZWRUb29sQ2hvaWNlO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wbGV0aW9uVG9vbE1lc3NhZ2VQYXJhbSB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudHMgb2YgdGhlIHRvb2wgbWVzc2FnZS5cbiAgICovXG4gIGNvbnRlbnQ6IHN0cmluZyB8IEFycmF5PENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRUZXh0PjtcblxuICAvKipcbiAgICogVGhlIHJvbGUgb2YgdGhlIG1lc3NhZ2VzIGF1dGhvciwgaW4gdGhpcyBjYXNlIGB0b29sYC5cbiAgICovXG4gIHJvbGU6ICd0b29sJztcblxuICAvKipcbiAgICogVG9vbCBjYWxsIHRoYXQgdGhpcyBtZXNzYWdlIGlzIHJlc3BvbmRpbmcgdG8uXG4gICAqL1xuICB0b29sX2NhbGxfaWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBNZXNzYWdlcyBzZW50IGJ5IGFuIGVuZCB1c2VyLCBjb250YWluaW5nIHByb21wdHMgb3IgYWRkaXRpb25hbCBjb250ZXh0XG4gKiBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvblVzZXJNZXNzYWdlUGFyYW0ge1xuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSB1c2VyIG1lc3NhZ2UuXG4gICAqL1xuICBjb250ZW50OiBzdHJpbmcgfCBBcnJheTxDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0PjtcblxuICAvKipcbiAgICogVGhlIHJvbGUgb2YgdGhlIG1lc3NhZ2VzIGF1dGhvciwgaW4gdGhpcyBjYXNlIGB1c2VyYC5cbiAgICovXG4gIHJvbGU6ICd1c2VyJztcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbmFtZSBmb3IgdGhlIHBhcnRpY2lwYW50LiBQcm92aWRlcyB0aGUgbW9kZWwgaW5mb3JtYXRpb24gdG9cbiAgICogZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHBhcnRpY2lwYW50cyBvZiB0aGUgc2FtZSByb2xlLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUNoYXRDb21wbGV0aW9uUmVxdWVzdE1lc3NhZ2UgPSBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbTtcblxuZXhwb3J0IHR5cGUgQ2hhdENvbXBsZXRpb25SZWFzb25pbmdFZmZvcnQgPSBTaGFyZWQuUmVhc29uaW5nRWZmb3J0IHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXMgPVxuICB8IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nXG4gIHwgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNCYXNlIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBtZXNzYWdlcyBjb21wcmlzaW5nIHRoZSBjb252ZXJzYXRpb24gc28gZmFyLiBEZXBlbmRpbmcgb24gdGhlXG4gICAqIFttb2RlbF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvbW9kZWxzKSB5b3UgdXNlLCBkaWZmZXJlbnQgbWVzc2FnZVxuICAgKiB0eXBlcyAobW9kYWxpdGllcykgYXJlIHN1cHBvcnRlZCwgbGlrZVxuICAgKiBbdGV4dF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3RleHQtZ2VuZXJhdGlvbiksXG4gICAqIFtpbWFnZXNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy92aXNpb24pLCBhbmRcbiAgICogW2F1ZGlvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvYXVkaW8pLlxuICAgKi9cbiAgbWVzc2FnZXM6IEFycmF5PENoYXRDb21wbGV0aW9uTWVzc2FnZVBhcmFtPjtcblxuICAvKipcbiAgICogTW9kZWwgSUQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVzcG9uc2UsIGxpa2UgYGdwdC00b2Agb3IgYG8xYC4gT3BlbkFJIG9mZmVycyBhXG4gICAqIHdpZGUgcmFuZ2Ugb2YgbW9kZWxzIHdpdGggZGlmZmVyZW50IGNhcGFiaWxpdGllcywgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLFxuICAgKiBhbmQgcHJpY2UgcG9pbnRzLiBSZWZlciB0byB0aGVcbiAgICogW21vZGVsIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMpIHRvIGJyb3dzZSBhbmQgY29tcGFyZVxuICAgKiBhdmFpbGFibGUgbW9kZWxzLlxuICAgKi9cbiAgbW9kZWw6IChzdHJpbmcgJiB7fSkgfCBTaGFyZWQuQ2hhdE1vZGVsO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciBhdWRpbyBvdXRwdXQuIFJlcXVpcmVkIHdoZW4gYXVkaW8gb3V0cHV0IGlzIHJlcXVlc3RlZCB3aXRoXG4gICAqIGBtb2RhbGl0aWVzOiBbXCJhdWRpb1wiXWAuXG4gICAqIFtMZWFybiBtb3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvYXVkaW8pLlxuICAgKi9cbiAgYXVkaW8/OiBDaGF0Q29tcGxldGlvbkF1ZGlvUGFyYW0gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgYmV0d2VlbiAtMi4wIGFuZCAyLjAuIFBvc2l0aXZlIHZhbHVlcyBwZW5hbGl6ZSBuZXcgdG9rZW5zIGJhc2VkIG9uIHRoZWlyXG4gICAqIGV4aXN0aW5nIGZyZXF1ZW5jeSBpbiB0aGUgdGV4dCBzbyBmYXIsIGRlY3JlYXNpbmcgdGhlIG1vZGVsJ3MgbGlrZWxpaG9vZCB0b1xuICAgKiByZXBlYXQgdGhlIHNhbWUgbGluZSB2ZXJiYXRpbS5cbiAgICovXG4gIGZyZXF1ZW5jeV9wZW5hbHR5PzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgdG9vbF9jaG9pY2VgLlxuICAgKlxuICAgKiBDb250cm9scyB3aGljaCAoaWYgYW55KSBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIG1vZGVsLlxuICAgKlxuICAgKiBgbm9uZWAgbWVhbnMgdGhlIG1vZGVsIHdpbGwgbm90IGNhbGwgYSBmdW5jdGlvbiBhbmQgaW5zdGVhZCBnZW5lcmF0ZXMgYSBtZXNzYWdlLlxuICAgKlxuICAgKiBgYXV0b2AgbWVhbnMgdGhlIG1vZGVsIGNhbiBwaWNrIGJldHdlZW4gZ2VuZXJhdGluZyBhIG1lc3NhZ2Ugb3IgY2FsbGluZyBhXG4gICAqIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBTcGVjaWZ5aW5nIGEgcGFydGljdWxhciBmdW5jdGlvbiB2aWEgYHtcIm5hbWVcIjogXCJteV9mdW5jdGlvblwifWAgZm9yY2VzIHRoZSBtb2RlbFxuICAgKiB0byBjYWxsIHRoYXQgZnVuY3Rpb24uXG4gICAqXG4gICAqIGBub25lYCBpcyB0aGUgZGVmYXVsdCB3aGVuIG5vIGZ1bmN0aW9ucyBhcmUgcHJlc2VudC4gYGF1dG9gIGlzIHRoZSBkZWZhdWx0IGlmXG4gICAqIGZ1bmN0aW9ucyBhcmUgcHJlc2VudC5cbiAgICovXG4gIGZ1bmN0aW9uX2NhbGw/OiAnbm9uZScgfCAnYXV0bycgfCBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uQ2FsbE9wdGlvbjtcblxuICAvKipcbiAgICogRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgdG9vbHNgLlxuICAgKlxuICAgKiBBIGxpc3Qgb2YgZnVuY3Rpb25zIHRoZSBtb2RlbCBtYXkgZ2VuZXJhdGUgSlNPTiBpbnB1dHMgZm9yLlxuICAgKi9cbiAgZnVuY3Rpb25zPzogQXJyYXk8Q2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXMuRnVuY3Rpb24+O1xuXG4gIC8qKlxuICAgKiBNb2RpZnkgdGhlIGxpa2VsaWhvb2Qgb2Ygc3BlY2lmaWVkIHRva2VucyBhcHBlYXJpbmcgaW4gdGhlIGNvbXBsZXRpb24uXG4gICAqXG4gICAqIEFjY2VwdHMgYSBKU09OIG9iamVjdCB0aGF0IG1hcHMgdG9rZW5zIChzcGVjaWZpZWQgYnkgdGhlaXIgdG9rZW4gSUQgaW4gdGhlXG4gICAqIHRva2VuaXplcikgdG8gYW4gYXNzb2NpYXRlZCBiaWFzIHZhbHVlIGZyb20gLTEwMCB0byAxMDAuIE1hdGhlbWF0aWNhbGx5LCB0aGVcbiAgICogYmlhcyBpcyBhZGRlZCB0byB0aGUgbG9naXRzIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwgcHJpb3IgdG8gc2FtcGxpbmcuIFRoZSBleGFjdFxuICAgKiBlZmZlY3Qgd2lsbCB2YXJ5IHBlciBtb2RlbCwgYnV0IHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxIHNob3VsZCBkZWNyZWFzZSBvclxuICAgKiBpbmNyZWFzZSBsaWtlbGlob29kIG9mIHNlbGVjdGlvbjsgdmFsdWVzIGxpa2UgLTEwMCBvciAxMDAgc2hvdWxkIHJlc3VsdCBpbiBhIGJhblxuICAgKiBvciBleGNsdXNpdmUgc2VsZWN0aW9uIG9mIHRoZSByZWxldmFudCB0b2tlbi5cbiAgICovXG4gIGxvZ2l0X2JpYXM/OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXR1cm4gbG9nIHByb2JhYmlsaXRpZXMgb2YgdGhlIG91dHB1dCB0b2tlbnMgb3Igbm90LiBJZiB0cnVlLFxuICAgKiByZXR1cm5zIHRoZSBsb2cgcHJvYmFiaWxpdGllcyBvZiBlYWNoIG91dHB1dCB0b2tlbiByZXR1cm5lZCBpbiB0aGUgYGNvbnRlbnRgIG9mXG4gICAqIGBtZXNzYWdlYC5cbiAgICovXG4gIGxvZ3Byb2JzPzogYm9vbGVhbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIHVwcGVyIGJvdW5kIGZvciB0aGUgbnVtYmVyIG9mIHRva2VucyB0aGF0IGNhbiBiZSBnZW5lcmF0ZWQgZm9yIGEgY29tcGxldGlvbixcbiAgICogaW5jbHVkaW5nIHZpc2libGUgb3V0cHV0IHRva2VucyBhbmRcbiAgICogW3JlYXNvbmluZyB0b2tlbnNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9yZWFzb25pbmcpLlxuICAgKi9cbiAgbWF4X2NvbXBsZXRpb25fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIFt0b2tlbnNdKC90b2tlbml6ZXIpIHRoYXQgY2FuIGJlIGdlbmVyYXRlZCBpbiB0aGUgY2hhdFxuICAgKiBjb21wbGV0aW9uLiBUaGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2xcbiAgICogW2Nvc3RzXShodHRwczovL29wZW5haS5jb20vYXBpL3ByaWNpbmcvKSBmb3IgdGV4dCBnZW5lcmF0ZWQgdmlhIEFQSS5cbiAgICpcbiAgICogVGhpcyB2YWx1ZSBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgbWF4X2NvbXBsZXRpb25fdG9rZW5zYCwgYW5kIGlzIG5vdFxuICAgKiBjb21wYXRpYmxlIHdpdGhcbiAgICogW28xIHNlcmllcyBtb2RlbHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9yZWFzb25pbmcpLlxuICAgKi9cbiAgbWF4X3Rva2Vucz86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAqXG4gICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBtZXRhZGF0YT86IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIE91dHB1dCB0eXBlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBtb2RlbCB0byBnZW5lcmF0ZS4gTW9zdCBtb2RlbHMgYXJlIGNhcGFibGVcbiAgICogb2YgZ2VuZXJhdGluZyB0ZXh0LCB3aGljaCBpcyB0aGUgZGVmYXVsdDpcbiAgICpcbiAgICogYFtcInRleHRcIl1gXG4gICAqXG4gICAqIFRoZSBgZ3B0LTRvLWF1ZGlvLXByZXZpZXdgIG1vZGVsIGNhbiBhbHNvIGJlIHVzZWQgdG9cbiAgICogW2dlbmVyYXRlIGF1ZGlvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvYXVkaW8pLiBUbyByZXF1ZXN0IHRoYXRcbiAgICogdGhpcyBtb2RlbCBnZW5lcmF0ZSBib3RoIHRleHQgYW5kIGF1ZGlvIHJlc3BvbnNlcywgeW91IGNhbiB1c2U6XG4gICAqXG4gICAqIGBbXCJ0ZXh0XCIsIFwiYXVkaW9cIl1gXG4gICAqL1xuICBtb2RhbGl0aWVzPzogQXJyYXk8J3RleHQnIHwgJ2F1ZGlvJz4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSBjaGF0IGNvbXBsZXRpb24gY2hvaWNlcyB0byBnZW5lcmF0ZSBmb3IgZWFjaCBpbnB1dCBtZXNzYWdlLiBOb3RlIHRoYXRcbiAgICogeW91IHdpbGwgYmUgY2hhcmdlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGdlbmVyYXRlZCB0b2tlbnMgYWNyb3NzIGFsbCBvZiB0aGVcbiAgICogY2hvaWNlcy4gS2VlcCBgbmAgYXMgYDFgIHRvIG1pbmltaXplIGNvc3RzLlxuICAgKi9cbiAgbj86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlXG4gICAqIFtwYXJhbGxlbCBmdW5jdGlvbiBjYWxsaW5nXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvZnVuY3Rpb24tY2FsbGluZyNjb25maWd1cmluZy1wYXJhbGxlbC1mdW5jdGlvbi1jYWxsaW5nKVxuICAgKiBkdXJpbmcgdG9vbCB1c2UuXG4gICAqL1xuICBwYXJhbGxlbF90b29sX2NhbGxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3RhdGljIHByZWRpY3RlZCBvdXRwdXQgY29udGVudCwgc3VjaCBhcyB0aGUgY29udGVudCBvZiBhIHRleHQgZmlsZSB0aGF0IGlzXG4gICAqIGJlaW5nIHJlZ2VuZXJhdGVkLlxuICAgKi9cbiAgcHJlZGljdGlvbj86IENoYXRDb21wbGV0aW9uUHJlZGljdGlvbkNvbnRlbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgYmV0d2VlbiAtMi4wIGFuZCAyLjAuIFBvc2l0aXZlIHZhbHVlcyBwZW5hbGl6ZSBuZXcgdG9rZW5zIGJhc2VkIG9uXG4gICAqIHdoZXRoZXIgdGhleSBhcHBlYXIgaW4gdGhlIHRleHQgc28gZmFyLCBpbmNyZWFzaW5nIHRoZSBtb2RlbCdzIGxpa2VsaWhvb2QgdG9cbiAgICogdGFsayBhYm91dCBuZXcgdG9waWNzLlxuICAgKi9cbiAgcHJlc2VuY2VfcGVuYWx0eT86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqICoqby1zZXJpZXMgbW9kZWxzIG9ubHkqKlxuICAgKlxuICAgKiBDb25zdHJhaW5zIGVmZm9ydCBvbiByZWFzb25pbmcgZm9yXG4gICAqIFtyZWFzb25pbmcgbW9kZWxzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvcmVhc29uaW5nKS4gQ3VycmVudGx5XG4gICAqIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGBsb3dgLCBgbWVkaXVtYCwgYW5kIGBoaWdoYC4gUmVkdWNpbmcgcmVhc29uaW5nIGVmZm9ydCBjYW5cbiAgICogcmVzdWx0IGluIGZhc3RlciByZXNwb25zZXMgYW5kIGZld2VyIHRva2VucyB1c2VkIG9uIHJlYXNvbmluZyBpbiBhIHJlc3BvbnNlLlxuICAgKi9cbiAgcmVhc29uaW5nX2VmZm9ydD86IFNoYXJlZC5SZWFzb25pbmdFZmZvcnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgc3BlY2lmeWluZyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZGVsIG11c3Qgb3V0cHV0LlxuICAgKlxuICAgKiBTZXR0aW5nIHRvIGB7IFwidHlwZVwiOiBcImpzb25fc2NoZW1hXCIsIFwianNvbl9zY2hlbWFcIjogey4uLn0gfWAgZW5hYmxlcyBTdHJ1Y3R1cmVkXG4gICAqIE91dHB1dHMgd2hpY2ggZW5zdXJlcyB0aGUgbW9kZWwgd2lsbCBtYXRjaCB5b3VyIHN1cHBsaWVkIEpTT04gc2NoZW1hLiBMZWFybiBtb3JlXG4gICAqIGluIHRoZVxuICAgKiBbU3RydWN0dXJlZCBPdXRwdXRzIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3RydWN0dXJlZC1vdXRwdXRzKS5cbiAgICpcbiAgICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX29iamVjdFwiIH1gIGVuYWJsZXMgdGhlIG9sZGVyIEpTT04gbW9kZSwgd2hpY2hcbiAgICogZW5zdXJlcyB0aGUgbWVzc2FnZSB0aGUgbW9kZWwgZ2VuZXJhdGVzIGlzIHZhbGlkIEpTT04uIFVzaW5nIGBqc29uX3NjaGVtYWAgaXNcbiAgICogcHJlZmVycmVkIGZvciBtb2RlbHMgdGhhdCBzdXBwb3J0IGl0LlxuICAgKi9cbiAgcmVzcG9uc2VfZm9ybWF0PzpcbiAgICB8IFNoYXJlZC5SZXNwb25zZUZvcm1hdFRleHRcbiAgICB8IFNoYXJlZC5SZXNwb25zZUZvcm1hdEpTT05TY2hlbWFcbiAgICB8IFNoYXJlZC5SZXNwb25zZUZvcm1hdEpTT05PYmplY3Q7XG5cbiAgLyoqXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBpbiBCZXRhLiBJZiBzcGVjaWZpZWQsIG91ciBzeXN0ZW0gd2lsbCBtYWtlIGEgYmVzdCBlZmZvcnQgdG9cbiAgICogc2FtcGxlIGRldGVybWluaXN0aWNhbGx5LCBzdWNoIHRoYXQgcmVwZWF0ZWQgcmVxdWVzdHMgd2l0aCB0aGUgc2FtZSBgc2VlZGAgYW5kXG4gICAqIHBhcmFtZXRlcnMgc2hvdWxkIHJldHVybiB0aGUgc2FtZSByZXN1bHQuIERldGVybWluaXNtIGlzIG5vdCBndWFyYW50ZWVkLCBhbmQgeW91XG4gICAqIHNob3VsZCByZWZlciB0byB0aGUgYHN5c3RlbV9maW5nZXJwcmludGAgcmVzcG9uc2UgcGFyYW1ldGVyIHRvIG1vbml0b3IgY2hhbmdlc1xuICAgKiBpbiB0aGUgYmFja2VuZC5cbiAgICovXG4gIHNlZWQ/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGxhdGVuY3kgdGllciB0byB1c2UgZm9yIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QuIFRoaXMgcGFyYW1ldGVyIGlzXG4gICAqIHJlbGV2YW50IGZvciBjdXN0b21lcnMgc3Vic2NyaWJlZCB0byB0aGUgc2NhbGUgdGllciBzZXJ2aWNlOlxuICAgKlxuICAgKiAtIElmIHNldCB0byAnYXV0bycsIGFuZCB0aGUgUHJvamVjdCBpcyBTY2FsZSB0aWVyIGVuYWJsZWQsIHRoZSBzeXN0ZW0gd2lsbFxuICAgKiAgIHV0aWxpemUgc2NhbGUgdGllciBjcmVkaXRzIHVudGlsIHRoZXkgYXJlIGV4aGF1c3RlZC5cbiAgICogLSBJZiBzZXQgdG8gJ2F1dG8nLCBhbmQgdGhlIFByb2plY3QgaXMgbm90IFNjYWxlIHRpZXIgZW5hYmxlZCwgdGhlIHJlcXVlc3Qgd2lsbFxuICAgKiAgIGJlIHByb2Nlc3NlZCB1c2luZyB0aGUgZGVmYXVsdCBzZXJ2aWNlIHRpZXIgd2l0aCBhIGxvd2VyIHVwdGltZSBTTEEgYW5kIG5vXG4gICAqICAgbGF0ZW5jeSBndWFyZW50ZWUuXG4gICAqIC0gSWYgc2V0IHRvICdkZWZhdWx0JywgdGhlIHJlcXVlc3Qgd2lsbCBiZSBwcm9jZXNzZWQgdXNpbmcgdGhlIGRlZmF1bHQgc2VydmljZVxuICAgKiAgIHRpZXIgd2l0aCBhIGxvd2VyIHVwdGltZSBTTEEgYW5kIG5vIGxhdGVuY3kgZ3VhcmVudGVlLlxuICAgKiAtIFdoZW4gbm90IHNldCwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgJ2F1dG8nLlxuICAgKlxuICAgKiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIHNldCwgdGhlIHJlc3BvbnNlIGJvZHkgd2lsbCBpbmNsdWRlIHRoZSBgc2VydmljZV90aWVyYFxuICAgKiB1dGlsaXplZC5cbiAgICovXG4gIHNlcnZpY2VfdGllcj86ICdhdXRvJyB8ICdkZWZhdWx0JyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFVwIHRvIDQgc2VxdWVuY2VzIHdoZXJlIHRoZSBBUEkgd2lsbCBzdG9wIGdlbmVyYXRpbmcgZnVydGhlciB0b2tlbnMuIFRoZVxuICAgKiByZXR1cm5lZCB0ZXh0IHdpbGwgbm90IGNvbnRhaW4gdGhlIHN0b3Agc2VxdWVuY2UuXG4gICAqL1xuICBzdG9wPzogc3RyaW5nIHwgbnVsbCB8IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHN0b3JlIHRoZSBvdXRwdXQgb2YgdGhpcyBjaGF0IGNvbXBsZXRpb24gcmVxdWVzdCBmb3IgdXNlIGluXG4gICAqIG91ciBbbW9kZWwgZGlzdGlsbGF0aW9uXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvZGlzdGlsbGF0aW9uKVxuICAgKiBvciBbZXZhbHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9ldmFscykgcHJvZHVjdHMuXG4gICAqL1xuICBzdG9yZT86IGJvb2xlYW4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIG1vZGVsIHJlc3BvbnNlIGRhdGEgd2lsbCBiZSBzdHJlYW1lZCB0byB0aGUgY2xpZW50IGFzIGl0IGlzXG4gICAqIGdlbmVyYXRlZCB1c2luZ1xuICAgKiBbc2VydmVyLXNlbnQgZXZlbnRzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2VydmVyLXNlbnRfZXZlbnRzL1VzaW5nX3NlcnZlci1zZW50X2V2ZW50cyNFdmVudF9zdHJlYW1fZm9ybWF0KS5cbiAgICogU2VlIHRoZVxuICAgKiBbU3RyZWFtaW5nIHNlY3Rpb24gYmVsb3ddKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvY2hhdC9zdHJlYW1pbmcpXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLCBhbG9uZyB3aXRoIHRoZVxuICAgKiBbc3RyZWFtaW5nIHJlc3BvbnNlc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3N0cmVhbWluZy1yZXNwb25zZXMpXG4gICAqIGd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBoYW5kbGUgdGhlIHN0cmVhbWluZyBldmVudHMuXG4gICAqL1xuICBzdHJlYW0/OiBib29sZWFuIHwgbnVsbDtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlLiBPbmx5IHNldCB0aGlzIHdoZW4geW91IHNldCBgc3RyZWFtOiB0cnVlYC5cbiAgICovXG4gIHN0cmVhbV9vcHRpb25zPzogQ2hhdENvbXBsZXRpb25TdHJlYW1PcHRpb25zIHwgbnVsbDtcblxuICAvKipcbiAgICogV2hhdCBzYW1wbGluZyB0ZW1wZXJhdHVyZSB0byB1c2UsIGJldHdlZW4gMCBhbmQgMi4gSGlnaGVyIHZhbHVlcyBsaWtlIDAuOCB3aWxsXG4gICAqIG1ha2UgdGhlIG91dHB1dCBtb3JlIHJhbmRvbSwgd2hpbGUgbG93ZXIgdmFsdWVzIGxpa2UgMC4yIHdpbGwgbWFrZSBpdCBtb3JlXG4gICAqIGZvY3VzZWQgYW5kIGRldGVybWluaXN0aWMuIFdlIGdlbmVyYWxseSByZWNvbW1lbmQgYWx0ZXJpbmcgdGhpcyBvciBgdG9wX3BgIGJ1dFxuICAgKiBub3QgYm90aC5cbiAgICovXG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hpY2ggKGlmIGFueSkgdG9vbCBpcyBjYWxsZWQgYnkgdGhlIG1vZGVsLiBgbm9uZWAgbWVhbnMgdGhlIG1vZGVsIHdpbGxcbiAgICogbm90IGNhbGwgYW55IHRvb2wgYW5kIGluc3RlYWQgZ2VuZXJhdGVzIGEgbWVzc2FnZS4gYGF1dG9gIG1lYW5zIHRoZSBtb2RlbCBjYW5cbiAgICogcGljayBiZXR3ZWVuIGdlbmVyYXRpbmcgYSBtZXNzYWdlIG9yIGNhbGxpbmcgb25lIG9yIG1vcmUgdG9vbHMuIGByZXF1aXJlZGAgbWVhbnNcbiAgICogdGhlIG1vZGVsIG11c3QgY2FsbCBvbmUgb3IgbW9yZSB0b29scy4gU3BlY2lmeWluZyBhIHBhcnRpY3VsYXIgdG9vbCB2aWFcbiAgICogYHtcInR5cGVcIjogXCJmdW5jdGlvblwiLCBcImZ1bmN0aW9uXCI6IHtcIm5hbWVcIjogXCJteV9mdW5jdGlvblwifX1gIGZvcmNlcyB0aGUgbW9kZWwgdG9cbiAgICogY2FsbCB0aGF0IHRvb2wuXG4gICAqXG4gICAqIGBub25lYCBpcyB0aGUgZGVmYXVsdCB3aGVuIG5vIHRvb2xzIGFyZSBwcmVzZW50LiBgYXV0b2AgaXMgdGhlIGRlZmF1bHQgaWYgdG9vbHNcbiAgICogYXJlIHByZXNlbnQuXG4gICAqL1xuICB0b29sX2Nob2ljZT86IENoYXRDb21wbGV0aW9uVG9vbENob2ljZU9wdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHRvb2xzIHRoZSBtb2RlbCBtYXkgY2FsbC4gQ3VycmVudGx5LCBvbmx5IGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIGFzIGFcbiAgICogdG9vbC4gVXNlIHRoaXMgdG8gcHJvdmlkZSBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoZSBtb2RlbCBtYXkgZ2VuZXJhdGUgSlNPTiBpbnB1dHNcbiAgICogZm9yLiBBIG1heCBvZiAxMjggZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQuXG4gICAqL1xuICB0b29scz86IEFycmF5PENoYXRDb21wbGV0aW9uVG9vbD47XG5cbiAgLyoqXG4gICAqIEFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyMCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgbW9zdCBsaWtlbHkgdG9rZW5zIHRvXG4gICAqIHJldHVybiBhdCBlYWNoIHRva2VuIHBvc2l0aW9uLCBlYWNoIHdpdGggYW4gYXNzb2NpYXRlZCBsb2cgcHJvYmFiaWxpdHkuXG4gICAqIGBsb2dwcm9ic2AgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGlmIHRoaXMgcGFyYW1ldGVyIGlzIHVzZWQuXG4gICAqL1xuICB0b3BfbG9ncHJvYnM/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBzYW1wbGluZyB3aXRoIHRlbXBlcmF0dXJlLCBjYWxsZWQgbnVjbGV1cyBzYW1wbGluZywgd2hlcmUgdGhlXG4gICAqIG1vZGVsIGNvbnNpZGVycyB0aGUgcmVzdWx0cyBvZiB0aGUgdG9rZW5zIHdpdGggdG9wX3AgcHJvYmFiaWxpdHkgbWFzcy4gU28gMC4xXG4gICAqIG1lYW5zIG9ubHkgdGhlIHRva2VucyBjb21wcmlzaW5nIHRoZSB0b3AgMTAlIHByb2JhYmlsaXR5IG1hc3MgYXJlIGNvbnNpZGVyZWQuXG4gICAqXG4gICAqIFdlIGdlbmVyYWxseSByZWNvbW1lbmQgYWx0ZXJpbmcgdGhpcyBvciBgdGVtcGVyYXR1cmVgIGJ1dCBub3QgYm90aC5cbiAgICovXG4gIHRvcF9wPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQSB1bmlxdWUgaWRlbnRpZmllciByZXByZXNlbnRpbmcgeW91ciBlbmQtdXNlciwgd2hpY2ggY2FuIGhlbHAgT3BlbkFJIHRvIG1vbml0b3JcbiAgICogYW5kIGRldGVjdCBhYnVzZS5cbiAgICogW0xlYXJuIG1vcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zYWZldHktYmVzdC1wcmFjdGljZXMjZW5kLXVzZXItaWRzKS5cbiAgICovXG4gIHVzZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgdG9vbCBzZWFyY2hlcyB0aGUgd2ViIGZvciByZWxldmFudCByZXN1bHRzIHRvIHVzZSBpbiBhIHJlc3BvbnNlLiBMZWFybiBtb3JlXG4gICAqIGFib3V0IHRoZVxuICAgKiBbd2ViIHNlYXJjaCB0b29sXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdG9vbHMtd2ViLXNlYXJjaD9hcGktbW9kZT1jaGF0KS5cbiAgICovXG4gIHdlYl9zZWFyY2hfb3B0aW9ucz86IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLldlYlNlYXJjaE9wdGlvbnM7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXMge1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQuIE11c3QgYmUgYS16LCBBLVosIDAtOSwgb3IgY29udGFpblxuICAgICAqIHVuZGVyc2NvcmVzIGFuZCBkYXNoZXMsIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NC5cbiAgICAgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMsIHVzZWQgYnkgdGhlIG1vZGVsIHRvIGNob29zZSB3aGVuIGFuZFxuICAgICAqIGhvdyB0byBjYWxsIHRoZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBwYXJhbWV0ZXJzIHRoZSBmdW5jdGlvbnMgYWNjZXB0cywgZGVzY3JpYmVkIGFzIGEgSlNPTiBTY2hlbWEgb2JqZWN0LiBTZWUgdGhlXG4gICAgICogW2d1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvZnVuY3Rpb24tY2FsbGluZykgZm9yIGV4YW1wbGVzLFxuICAgICAqIGFuZCB0aGVcbiAgICAgKiBbSlNPTiBTY2hlbWEgcmVmZXJlbmNlXShodHRwczovL2pzb24tc2NoZW1hLm9yZy91bmRlcnN0YW5kaW5nLWpzb24tc2NoZW1hLykgZm9yXG4gICAgICogZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgZm9ybWF0LlxuICAgICAqXG4gICAgICogT21pdHRpbmcgYHBhcmFtZXRlcnNgIGRlZmluZXMgYSBmdW5jdGlvbiB3aXRoIGFuIGVtcHR5IHBhcmFtZXRlciBsaXN0LlxuICAgICAqL1xuICAgIHBhcmFtZXRlcnM/OiBTaGFyZWQuRnVuY3Rpb25QYXJhbWV0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgdG9vbCBzZWFyY2hlcyB0aGUgd2ViIGZvciByZWxldmFudCByZXN1bHRzIHRvIHVzZSBpbiBhIHJlc3BvbnNlLiBMZWFybiBtb3JlXG4gICAqIGFib3V0IHRoZVxuICAgKiBbd2ViIHNlYXJjaCB0b29sXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdG9vbHMtd2ViLXNlYXJjaD9hcGktbW9kZT1jaGF0KS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogSGlnaCBsZXZlbCBndWlkYW5jZSBmb3IgdGhlIGFtb3VudCBvZiBjb250ZXh0IHdpbmRvdyBzcGFjZSB0byB1c2UgZm9yIHRoZVxuICAgICAqIHNlYXJjaC4gT25lIG9mIGBsb3dgLCBgbWVkaXVtYCwgb3IgYGhpZ2hgLiBgbWVkaXVtYCBpcyB0aGUgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBzZWFyY2hfY29udGV4dF9zaXplPzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcblxuICAgIC8qKlxuICAgICAqIEFwcHJveGltYXRlIGxvY2F0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBzZWFyY2guXG4gICAgICovXG4gICAgdXNlcl9sb2NhdGlvbj86IFdlYlNlYXJjaE9wdGlvbnMuVXNlckxvY2F0aW9uIHwgbnVsbDtcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgV2ViU2VhcmNoT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQXBwcm94aW1hdGUgbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIHNlYXJjaC5cbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIFVzZXJMb2NhdGlvbiB7XG4gICAgICAvKipcbiAgICAgICAqIEFwcHJveGltYXRlIGxvY2F0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBzZWFyY2guXG4gICAgICAgKi9cbiAgICAgIGFwcHJveGltYXRlOiBVc2VyTG9jYXRpb24uQXBwcm94aW1hdGU7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHR5cGUgb2YgbG9jYXRpb24gYXBwcm94aW1hdGlvbi4gQWx3YXlzIGBhcHByb3hpbWF0ZWAuXG4gICAgICAgKi9cbiAgICAgIHR5cGU6ICdhcHByb3hpbWF0ZSc7XG4gICAgfVxuXG4gICAgZXhwb3J0IG5hbWVzcGFjZSBVc2VyTG9jYXRpb24ge1xuICAgICAgLyoqXG4gICAgICAgKiBBcHByb3hpbWF0ZSBsb2NhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgc2VhcmNoLlxuICAgICAgICovXG4gICAgICBleHBvcnQgaW50ZXJmYWNlIEFwcHJveGltYXRlIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZyZWUgdGV4dCBpbnB1dCBmb3IgdGhlIGNpdHkgb2YgdGhlIHVzZXIsIGUuZy4gYFNhbiBGcmFuY2lzY29gLlxuICAgICAgICAgKi9cbiAgICAgICAgY2l0eT86IHN0cmluZztcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHR3by1sZXR0ZXIgW0lTTyBjb3VudHJ5IGNvZGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT18zMTY2LTEpIG9mXG4gICAgICAgICAqIHRoZSB1c2VyLCBlLmcuIGBVU2AuXG4gICAgICAgICAqL1xuICAgICAgICBjb3VudHJ5Pzogc3RyaW5nO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGcmVlIHRleHQgaW5wdXQgZm9yIHRoZSByZWdpb24gb2YgdGhlIHVzZXIsIGUuZy4gYENhbGlmb3JuaWFgLlxuICAgICAgICAgKi9cbiAgICAgICAgcmVnaW9uPzogc3RyaW5nO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgW0lBTkEgdGltZXpvbmVdKGh0dHBzOi8vdGltZWFwaS5pby9kb2N1bWVudGF0aW9uL2lhbmEtdGltZXpvbmVzKSBvZiB0aGVcbiAgICAgICAgICogdXNlciwgZS5nLiBgQW1lcmljYS9Mb3NfQW5nZWxlc2AuXG4gICAgICAgICAqL1xuICAgICAgICB0aW1lem9uZT86IHN0cmluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleHBvcnQgdHlwZSBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyA9XG4gICAgQ29tcGxldGlvbnNDb21wbGV0aW9uc0FQSS5DaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZztcbiAgZXhwb3J0IHR5cGUgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcgPVxuICAgIENvbXBsZXRpb25zQ29tcGxldGlvbnNBUEkuQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmc7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zIGluc3RlYWRcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcGxldGlvbkNyZWF0ZVBhcmFtcyA9IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nIGV4dGVuZHMgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNCYXNlIHtcbiAgLyoqXG4gICAqIElmIHNldCB0byB0cnVlLCB0aGUgbW9kZWwgcmVzcG9uc2UgZGF0YSB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBjbGllbnQgYXMgaXQgaXNcbiAgICogZ2VuZXJhdGVkIHVzaW5nXG4gICAqIFtzZXJ2ZXItc2VudCBldmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2ZXItc2VudF9ldmVudHMvVXNpbmdfc2VydmVyLXNlbnRfZXZlbnRzI0V2ZW50X3N0cmVhbV9mb3JtYXQpLlxuICAgKiBTZWUgdGhlXG4gICAqIFtTdHJlYW1pbmcgc2VjdGlvbiBiZWxvd10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9jaGF0L3N0cmVhbWluZylcbiAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24sIGFsb25nIHdpdGggdGhlXG4gICAqIFtzdHJlYW1pbmcgcmVzcG9uc2VzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3RyZWFtaW5nLXJlc3BvbnNlcylcbiAgICogZ3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGhhbmRsZSB0aGUgc3RyZWFtaW5nIGV2ZW50cy5cbiAgICovXG4gIHN0cmVhbT86IGZhbHNlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcgaW5zdGVhZFxuICovXG5leHBvcnQgdHlwZSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nID0gQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcgZXh0ZW5kcyBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBtb2RlbCByZXNwb25zZSBkYXRhIHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGNsaWVudCBhcyBpdCBpc1xuICAgKiBnZW5lcmF0ZWQgdXNpbmdcbiAgICogW3NlcnZlci1zZW50IGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHMjRXZlbnRfc3RyZWFtX2Zvcm1hdCkuXG4gICAqIFNlZSB0aGVcbiAgICogW1N0cmVhbWluZyBzZWN0aW9uIGJlbG93XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2NoYXQvc3RyZWFtaW5nKVxuICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgYWxvbmcgd2l0aCB0aGVcbiAgICogW3N0cmVhbWluZyByZXNwb25zZXNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zdHJlYW1pbmctcmVzcG9uc2VzKVxuICAgKiBndWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaGFuZGxlIHRoZSBzdHJlYW1pbmcgZXZlbnRzLlxuICAgKi9cbiAgc3RyZWFtOiB0cnVlO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyBpbnN0ZWFkXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcgPSBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZztcblxuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvblVwZGF0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgKlxuICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbWV0YWRhdGE6IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIENoYXRDb21wbGV0aW9uVXBkYXRlUGFyYW1zIGluc3RlYWRcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcGxldGlvblVwZGF0ZVBhcmFtcyA9IENoYXRDb21wbGV0aW9uVXBkYXRlUGFyYW1zO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wbGV0aW9uTGlzdFBhcmFtcyBleHRlbmRzIEN1cnNvclBhZ2VQYXJhbXMge1xuICAvKipcbiAgICogQSBsaXN0IG9mIG1ldGFkYXRhIGtleXMgdG8gZmlsdGVyIHRoZSBDaGF0IENvbXBsZXRpb25zIGJ5LiBFeGFtcGxlOlxuICAgKlxuICAgKiBgbWV0YWRhdGFba2V5MV09dmFsdWUxJm1ldGFkYXRhW2tleTJdPXZhbHVlMmBcbiAgICovXG4gIG1ldGFkYXRhPzogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1vZGVsIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIENoYXQgQ29tcGxldGlvbnMuXG4gICAqL1xuICBtb2RlbD86IHN0cmluZztcblxuICAvKipcbiAgICogU29ydCBvcmRlciBmb3IgQ2hhdCBDb21wbGV0aW9ucyBieSB0aW1lc3RhbXAuIFVzZSBgYXNjYCBmb3IgYXNjZW5kaW5nIG9yZGVyIG9yXG4gICAqIGBkZXNjYCBmb3IgZGVzY2VuZGluZyBvcmRlci4gRGVmYXVsdHMgdG8gYGFzY2AuXG4gICAqL1xuICBvcmRlcj86ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBDaGF0Q29tcGxldGlvbkxpc3RQYXJhbXMgaW5zdGVhZFxuICovXG5leHBvcnQgdHlwZSBDb21wbGV0aW9uTGlzdFBhcmFtcyA9IENoYXRDb21wbGV0aW9uTGlzdFBhcmFtcztcblxuQ29tcGxldGlvbnMuQ2hhdENvbXBsZXRpb25zUGFnZSA9IENoYXRDb21wbGV0aW9uc1BhZ2U7XG5Db21wbGV0aW9ucy5NZXNzYWdlcyA9IE1lc3NhZ2VzO1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgQ29tcGxldGlvbnMge1xuICBleHBvcnQge1xuICAgIHR5cGUgQ2hhdENvbXBsZXRpb24gYXMgQ2hhdENvbXBsZXRpb24sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkFzc2lzdGFudE1lc3NhZ2VQYXJhbSBhcyBDaGF0Q29tcGxldGlvbkFzc2lzdGFudE1lc3NhZ2VQYXJhbSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQXVkaW8gYXMgQ2hhdENvbXBsZXRpb25BdWRpbyxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQXVkaW9QYXJhbSBhcyBDaGF0Q29tcGxldGlvbkF1ZGlvUGFyYW0sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkNodW5rIGFzIENoYXRDb21wbGV0aW9uQ2h1bmssXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0IGFzIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnQsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW1hZ2UgYXMgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydEltYWdlLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydElucHV0QXVkaW8gYXMgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydElucHV0QXVkaW8sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0UmVmdXNhbCBhcyBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0UmVmdXNhbCxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRUZXh0IGFzIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRUZXh0LFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25EZWxldGVkIGFzIENoYXRDb21wbGV0aW9uRGVsZXRlZCxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uRGV2ZWxvcGVyTWVzc2FnZVBhcmFtIGFzIENoYXRDb21wbGV0aW9uRGV2ZWxvcGVyTWVzc2FnZVBhcmFtLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25GdW5jdGlvbkNhbGxPcHRpb24gYXMgQ2hhdENvbXBsZXRpb25GdW5jdGlvbkNhbGxPcHRpb24sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uTWVzc2FnZVBhcmFtIGFzIENoYXRDb21wbGV0aW9uRnVuY3Rpb25NZXNzYWdlUGFyYW0sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbk1lc3NhZ2UgYXMgQ2hhdENvbXBsZXRpb25NZXNzYWdlLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0gYXMgQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbk1lc3NhZ2VUb29sQ2FsbCBhcyBDaGF0Q29tcGxldGlvbk1lc3NhZ2VUb29sQ2FsbCxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uTW9kYWxpdHkgYXMgQ2hhdENvbXBsZXRpb25Nb2RhbGl0eSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uTmFtZWRUb29sQ2hvaWNlIGFzIENoYXRDb21wbGV0aW9uTmFtZWRUb29sQ2hvaWNlLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25QcmVkaWN0aW9uQ29udGVudCBhcyBDaGF0Q29tcGxldGlvblByZWRpY3Rpb25Db250ZW50LFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Sb2xlIGFzIENoYXRDb21wbGV0aW9uUm9sZSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uU3RvcmVNZXNzYWdlIGFzIENoYXRDb21wbGV0aW9uU3RvcmVNZXNzYWdlLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25TdHJlYW1PcHRpb25zIGFzIENoYXRDb21wbGV0aW9uU3RyZWFtT3B0aW9ucyxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uU3lzdGVtTWVzc2FnZVBhcmFtIGFzIENoYXRDb21wbGV0aW9uU3lzdGVtTWVzc2FnZVBhcmFtLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Ub2tlbkxvZ3Byb2IgYXMgQ2hhdENvbXBsZXRpb25Ub2tlbkxvZ3Byb2IsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblRvb2wgYXMgQ2hhdENvbXBsZXRpb25Ub29sLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Ub29sQ2hvaWNlT3B0aW9uIGFzIENoYXRDb21wbGV0aW9uVG9vbENob2ljZU9wdGlvbixcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uVG9vbE1lc3NhZ2VQYXJhbSBhcyBDaGF0Q29tcGxldGlvblRvb2xNZXNzYWdlUGFyYW0sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblVzZXJNZXNzYWdlUGFyYW0gYXMgQ2hhdENvbXBsZXRpb25Vc2VyTWVzc2FnZVBhcmFtLFxuICAgIHR5cGUgQ3JlYXRlQ2hhdENvbXBsZXRpb25SZXF1ZXN0TWVzc2FnZSBhcyBDcmVhdGVDaGF0Q29tcGxldGlvblJlcXVlc3RNZXNzYWdlLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25SZWFzb25pbmdFZmZvcnQgYXMgQ2hhdENvbXBsZXRpb25SZWFzb25pbmdFZmZvcnQsXG4gICAgQ2hhdENvbXBsZXRpb25zUGFnZSBhcyBDaGF0Q29tcGxldGlvbnNQYWdlLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXMgYXMgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zIGFzIENvbXBsZXRpb25DcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyBhcyBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgICB0eXBlIENvbXBsZXRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcgYXMgQ29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nIGFzIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICAgIHR5cGUgQ29tcGxldGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyBhcyBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25VcGRhdGVQYXJhbXMgYXMgQ2hhdENvbXBsZXRpb25VcGRhdGVQYXJhbXMsXG4gICAgdHlwZSBDb21wbGV0aW9uVXBkYXRlUGFyYW1zIGFzIENvbXBsZXRpb25VcGRhdGVQYXJhbXMsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkxpc3RQYXJhbXMgYXMgQ2hhdENvbXBsZXRpb25MaXN0UGFyYW1zLFxuICAgIHR5cGUgQ29tcGxldGlvbkxpc3RQYXJhbXMgYXMgQ29tcGxldGlvbkxpc3RQYXJhbXMsXG4gIH07XG5cbiAgZXhwb3J0IHsgTWVzc2FnZXMgYXMgTWVzc2FnZXMsIHR5cGUgTWVzc2FnZUxpc3RQYXJhbXMgYXMgTWVzc2FnZUxpc3RQYXJhbXMgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCAqIGFzIFNoYXJlZCBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0ICogYXMgQ29tcGxldGlvbnNBUEkgZnJvbSAnLi9jb21wbGV0aW9ucy9jb21wbGV0aW9ucyc7XG5pbXBvcnQge1xuICBDaGF0Q29tcGxldGlvbixcbiAgQ2hhdENvbXBsZXRpb25Bc3Npc3RhbnRNZXNzYWdlUGFyYW0sXG4gIENoYXRDb21wbGV0aW9uQXVkaW8sXG4gIENoYXRDb21wbGV0aW9uQXVkaW9QYXJhbSxcbiAgQ2hhdENvbXBsZXRpb25DaHVuayxcbiAgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydCxcbiAgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydEltYWdlLFxuICBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW5wdXRBdWRpbyxcbiAgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydFJlZnVzYWwsXG4gIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRUZXh0LFxuICBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcyxcbiAgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcsXG4gIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICBDaGF0Q29tcGxldGlvbkRlbGV0ZWQsXG4gIENoYXRDb21wbGV0aW9uRGV2ZWxvcGVyTWVzc2FnZVBhcmFtLFxuICBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uQ2FsbE9wdGlvbixcbiAgQ2hhdENvbXBsZXRpb25GdW5jdGlvbk1lc3NhZ2VQYXJhbSxcbiAgQ2hhdENvbXBsZXRpb25MaXN0UGFyYW1zLFxuICBDaGF0Q29tcGxldGlvbk1lc3NhZ2UsXG4gIENoYXRDb21wbGV0aW9uTWVzc2FnZVBhcmFtLFxuICBDaGF0Q29tcGxldGlvbk1lc3NhZ2VUb29sQ2FsbCxcbiAgQ2hhdENvbXBsZXRpb25Nb2RhbGl0eSxcbiAgQ2hhdENvbXBsZXRpb25OYW1lZFRvb2xDaG9pY2UsXG4gIENoYXRDb21wbGV0aW9uUHJlZGljdGlvbkNvbnRlbnQsXG4gIENoYXRDb21wbGV0aW9uUmVhc29uaW5nRWZmb3J0LFxuICBDaGF0Q29tcGxldGlvblJvbGUsXG4gIENoYXRDb21wbGV0aW9uU3RvcmVNZXNzYWdlLFxuICBDaGF0Q29tcGxldGlvblN0cmVhbU9wdGlvbnMsXG4gIENoYXRDb21wbGV0aW9uU3lzdGVtTWVzc2FnZVBhcmFtLFxuICBDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYixcbiAgQ2hhdENvbXBsZXRpb25Ub29sLFxuICBDaGF0Q29tcGxldGlvblRvb2xDaG9pY2VPcHRpb24sXG4gIENoYXRDb21wbGV0aW9uVG9vbE1lc3NhZ2VQYXJhbSxcbiAgQ2hhdENvbXBsZXRpb25VcGRhdGVQYXJhbXMsXG4gIENoYXRDb21wbGV0aW9uVXNlck1lc3NhZ2VQYXJhbSxcbiAgQ2hhdENvbXBsZXRpb25zUGFnZSxcbiAgQ29tcGxldGlvbkNyZWF0ZVBhcmFtcyxcbiAgQ29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgQ29tcGxldGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyxcbiAgQ29tcGxldGlvbkxpc3RQYXJhbXMsXG4gIENvbXBsZXRpb25VcGRhdGVQYXJhbXMsXG4gIENvbXBsZXRpb25zLFxuICBDcmVhdGVDaGF0Q29tcGxldGlvblJlcXVlc3RNZXNzYWdlLFxufSBmcm9tICcuL2NvbXBsZXRpb25zL2NvbXBsZXRpb25zJztcblxuZXhwb3J0IGNsYXNzIENoYXQgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIGNvbXBsZXRpb25zOiBDb21wbGV0aW9uc0FQSS5Db21wbGV0aW9ucyA9IG5ldyBDb21wbGV0aW9uc0FQSS5Db21wbGV0aW9ucyh0aGlzLl9jbGllbnQpO1xufVxuXG5leHBvcnQgdHlwZSBDaGF0TW9kZWwgPSBTaGFyZWQuQ2hhdE1vZGVsO1xuXG5DaGF0LkNvbXBsZXRpb25zID0gQ29tcGxldGlvbnM7XG5DaGF0LkNoYXRDb21wbGV0aW9uc1BhZ2UgPSBDaGF0Q29tcGxldGlvbnNQYWdlO1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgQ2hhdCB7XG4gIGV4cG9ydCB7IHR5cGUgQ2hhdE1vZGVsIGFzIENoYXRNb2RlbCB9O1xuXG4gIGV4cG9ydCB7XG4gICAgQ29tcGxldGlvbnMgYXMgQ29tcGxldGlvbnMsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbiBhcyBDaGF0Q29tcGxldGlvbixcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQXNzaXN0YW50TWVzc2FnZVBhcmFtIGFzIENoYXRDb21wbGV0aW9uQXNzaXN0YW50TWVzc2FnZVBhcmFtLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25BdWRpbyBhcyBDaGF0Q29tcGxldGlvbkF1ZGlvLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25BdWRpb1BhcmFtIGFzIENoYXRDb21wbGV0aW9uQXVkaW9QYXJhbSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ2h1bmsgYXMgQ2hhdENvbXBsZXRpb25DaHVuayxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnQgYXMgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydCxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRJbWFnZSBhcyBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW1hZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW5wdXRBdWRpbyBhcyBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW5wdXRBdWRpbyxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRSZWZ1c2FsIGFzIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRSZWZ1c2FsLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydFRleHQgYXMgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydFRleHQsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkRlbGV0ZWQgYXMgQ2hhdENvbXBsZXRpb25EZWxldGVkLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25EZXZlbG9wZXJNZXNzYWdlUGFyYW0gYXMgQ2hhdENvbXBsZXRpb25EZXZlbG9wZXJNZXNzYWdlUGFyYW0sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uQ2FsbE9wdGlvbiBhcyBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uQ2FsbE9wdGlvbixcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uRnVuY3Rpb25NZXNzYWdlUGFyYW0gYXMgQ2hhdENvbXBsZXRpb25GdW5jdGlvbk1lc3NhZ2VQYXJhbSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uTWVzc2FnZSBhcyBDaGF0Q29tcGxldGlvbk1lc3NhZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSBhcyBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsIGFzIENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Nb2RhbGl0eSBhcyBDaGF0Q29tcGxldGlvbk1vZGFsaXR5LFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25OYW1lZFRvb2xDaG9pY2UgYXMgQ2hhdENvbXBsZXRpb25OYW1lZFRvb2xDaG9pY2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblByZWRpY3Rpb25Db250ZW50IGFzIENoYXRDb21wbGV0aW9uUHJlZGljdGlvbkNvbnRlbnQsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblJvbGUgYXMgQ2hhdENvbXBsZXRpb25Sb2xlLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25TdG9yZU1lc3NhZ2UgYXMgQ2hhdENvbXBsZXRpb25TdG9yZU1lc3NhZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblN0cmVhbU9wdGlvbnMgYXMgQ2hhdENvbXBsZXRpb25TdHJlYW1PcHRpb25zLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25TeXN0ZW1NZXNzYWdlUGFyYW0gYXMgQ2hhdENvbXBsZXRpb25TeXN0ZW1NZXNzYWdlUGFyYW0sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYiBhcyBDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYixcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uVG9vbCBhcyBDaGF0Q29tcGxldGlvblRvb2wsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblRvb2xDaG9pY2VPcHRpb24gYXMgQ2hhdENvbXBsZXRpb25Ub29sQ2hvaWNlT3B0aW9uLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Ub29sTWVzc2FnZVBhcmFtIGFzIENoYXRDb21wbGV0aW9uVG9vbE1lc3NhZ2VQYXJhbSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uVXNlck1lc3NhZ2VQYXJhbSBhcyBDaGF0Q29tcGxldGlvblVzZXJNZXNzYWdlUGFyYW0sXG4gICAgdHlwZSBDcmVhdGVDaGF0Q29tcGxldGlvblJlcXVlc3RNZXNzYWdlIGFzIENyZWF0ZUNoYXRDb21wbGV0aW9uUmVxdWVzdE1lc3NhZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblJlYXNvbmluZ0VmZm9ydCBhcyBDaGF0Q29tcGxldGlvblJlYXNvbmluZ0VmZm9ydCxcbiAgICBDaGF0Q29tcGxldGlvbnNQYWdlIGFzIENoYXRDb21wbGV0aW9uc1BhZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcyBhcyBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIENvbXBsZXRpb25DcmVhdGVQYXJhbXMgYXMgQ29tcGxldGlvbkNyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nIGFzIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICAgIHR5cGUgQ29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyBhcyBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcgYXMgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gICAgdHlwZSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nIGFzIENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblVwZGF0ZVBhcmFtcyBhcyBDaGF0Q29tcGxldGlvblVwZGF0ZVBhcmFtcyxcbiAgICB0eXBlIENvbXBsZXRpb25VcGRhdGVQYXJhbXMgYXMgQ29tcGxldGlvblVwZGF0ZVBhcmFtcyxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uTGlzdFBhcmFtcyBhcyBDaGF0Q29tcGxldGlvbkxpc3RQYXJhbXMsXG4gICAgdHlwZSBDb21wbGV0aW9uTGlzdFBhcmFtcyBhcyBDb21wbGV0aW9uTGlzdFBhcmFtcyxcbiAgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyB0eXBlIFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vX3NoaW1zL2luZGV4JztcblxuZXhwb3J0IGNsYXNzIFNwZWVjaCBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhdWRpbyBmcm9tIHRoZSBpbnB1dCB0ZXh0LlxuICAgKi9cbiAgY3JlYXRlKGJvZHk6IFNwZWVjaENyZWF0ZVBhcmFtcywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkFQSVByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoJy9hdWRpby9zcGVlY2gnLCB7XG4gICAgICBib2R5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgICAgX19iaW5hcnlSZXNwb25zZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTcGVlY2hNb2RlbCA9ICd0dHMtMScgfCAndHRzLTEtaGQnIHwgJ2dwdC00by1taW5pLXR0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlZWNoQ3JlYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGdlbmVyYXRlIGF1ZGlvIGZvci4gVGhlIG1heGltdW0gbGVuZ3RoIGlzIDQwOTYgY2hhcmFjdGVycy5cbiAgICovXG4gIGlucHV0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9uZSBvZiB0aGUgYXZhaWxhYmxlIFtUVFMgbW9kZWxzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMjdHRzKTpcbiAgICogYHR0cy0xYCwgYHR0cy0xLWhkYCBvciBgZ3B0LTRvLW1pbmktdHRzYC5cbiAgICovXG4gIG1vZGVsOiAoc3RyaW5nICYge30pIHwgU3BlZWNoTW9kZWw7XG5cbiAgLyoqXG4gICAqIFRoZSB2b2ljZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIHRoZSBhdWRpby4gU3VwcG9ydGVkIHZvaWNlcyBhcmUgYGFsbG95YCwgYGFzaGAsXG4gICAqIGBjb3JhbGAsIGBlY2hvYCwgYGZhYmxlYCwgYG9ueXhgLCBgbm92YWAsIGBzYWdlYCBhbmQgYHNoaW1tZXJgLiBQcmV2aWV3cyBvZiB0aGVcbiAgICogdm9pY2VzIGFyZSBhdmFpbGFibGUgaW4gdGhlXG4gICAqIFtUZXh0IHRvIHNwZWVjaCBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3RleHQtdG8tc3BlZWNoI3ZvaWNlLW9wdGlvbnMpLlxuICAgKi9cbiAgdm9pY2U6ICdhbGxveScgfCAnYXNoJyB8ICdjb3JhbCcgfCAnZWNobycgfCAnZmFibGUnIHwgJ29ueXgnIHwgJ25vdmEnIHwgJ3NhZ2UnIHwgJ3NoaW1tZXInO1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSB2b2ljZSBvZiB5b3VyIGdlbmVyYXRlZCBhdWRpbyB3aXRoIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zLiBEb2VzIG5vdFxuICAgKiB3b3JrIHdpdGggYHR0cy0xYCBvciBgdHRzLTEtaGRgLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybWF0IHRvIGF1ZGlvIGluLiBTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgYG1wM2AsIGBvcHVzYCwgYGFhY2AsIGBmbGFjYCxcbiAgICogYHdhdmAsIGFuZCBgcGNtYC5cbiAgICovXG4gIHJlc3BvbnNlX2Zvcm1hdD86ICdtcDMnIHwgJ29wdXMnIHwgJ2FhYycgfCAnZmxhYycgfCAnd2F2JyB8ICdwY20nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3BlZWQgb2YgdGhlIGdlbmVyYXRlZCBhdWRpby4gU2VsZWN0IGEgdmFsdWUgZnJvbSBgMC4yNWAgdG8gYDQuMGAuIGAxLjBgIGlzXG4gICAqIHRoZSBkZWZhdWx0LlxuICAgKi9cbiAgc3BlZWQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBTcGVlY2gge1xuICBleHBvcnQgeyB0eXBlIFNwZWVjaE1vZGVsIGFzIFNwZWVjaE1vZGVsLCB0eXBlIFNwZWVjaENyZWF0ZVBhcmFtcyBhcyBTcGVlY2hDcmVhdGVQYXJhbXMgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBUcmFuc2NyaXB0aW9uc0FQSSBmcm9tICcuL3RyYW5zY3JpcHRpb25zJztcbmltcG9ydCAqIGFzIEF1ZGlvQVBJIGZyb20gJy4vYXVkaW8nO1xuaW1wb3J0IHsgU3RyZWFtIH0gZnJvbSAnLi4vLi4vc3RyZWFtaW5nJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zY3JpcHRpb25zIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVHJhbnNjcmliZXMgYXVkaW8gaW50byB0aGUgaW5wdXQgbGFuZ3VhZ2UuXG4gICAqL1xuICBjcmVhdGUoXG4gICAgYm9keTogVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZzwnanNvbicgfCB1bmRlZmluZWQ+LFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLkFQSVByb21pc2U8VHJhbnNjcmlwdGlvbj47XG4gIGNyZWF0ZShcbiAgICBib2R5OiBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nPCd2ZXJib3NlX2pzb24nPixcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFRyYW5zY3JpcHRpb25WZXJib3NlPjtcbiAgY3JlYXRlKFxuICAgIGJvZHk6IFRyYW5zY3JpcHRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmc8J3NydCcgfCAndnR0JyB8ICd0ZXh0Jz4sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxzdHJpbmc+O1xuICBjcmVhdGUoXG4gICAgYm9keTogVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFRyYW5zY3JpcHRpb24+O1xuICBjcmVhdGUoXG4gICAgYm9keTogVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFN0cmVhbTxUcmFuc2NyaXB0aW9uU3RyZWFtRXZlbnQ+PjtcbiAgY3JlYXRlKFxuICAgIGJvZHk6IFRyYW5zY3JpcHRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxUcmFuc2NyaXB0aW9uQ3JlYXRlUmVzcG9uc2UgfCBzdHJpbmcgfCBTdHJlYW08VHJhbnNjcmlwdGlvblN0cmVhbUV2ZW50Pj47XG4gIGNyZWF0ZShcbiAgICBib2R5OiBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLkFQSVByb21pc2U8VHJhbnNjcmlwdGlvbkNyZWF0ZVJlc3BvbnNlIHwgc3RyaW5nIHwgU3RyZWFtPFRyYW5zY3JpcHRpb25TdHJlYW1FdmVudD4+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoXG4gICAgICAnL2F1ZGlvL3RyYW5zY3JpcHRpb25zJyxcbiAgICAgIENvcmUubXVsdGlwYXJ0Rm9ybVJlcXVlc3RPcHRpb25zKHsgYm9keSwgLi4ub3B0aW9ucywgX19tZXRhZGF0YTogeyBtb2RlbDogYm9keS5tb2RlbCB9IH0pLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdHJhbnNjcmlwdGlvbiByZXNwb25zZSByZXR1cm5lZCBieSBtb2RlbCwgYmFzZWQgb24gdGhlIHByb3ZpZGVkXG4gKiBpbnB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2NyaXB0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0cmFuc2NyaWJlZCB0ZXh0LlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIHByb2JhYmlsaXRpZXMgb2YgdGhlIHRva2VucyBpbiB0aGUgdHJhbnNjcmlwdGlvbi4gT25seSByZXR1cm5lZCB3aXRoIHRoZVxuICAgKiBtb2RlbHMgYGdwdC00by10cmFuc2NyaWJlYCBhbmQgYGdwdC00by1taW5pLXRyYW5zY3JpYmVgIGlmIGBsb2dwcm9ic2AgaXMgYWRkZWRcbiAgICogdG8gdGhlIGBpbmNsdWRlYCBhcnJheS5cbiAgICovXG4gIGxvZ3Byb2JzPzogQXJyYXk8VHJhbnNjcmlwdGlvbi5Mb2dwcm9iPjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUcmFuc2NyaXB0aW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBMb2dwcm9iIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdG9rZW4gaW4gdGhlIHRyYW5zY3JpcHRpb24uXG4gICAgICovXG4gICAgdG9rZW4/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYnl0ZXMgb2YgdGhlIHRva2VuLlxuICAgICAqL1xuICAgIGJ5dGVzPzogQXJyYXk8bnVtYmVyPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBsb2cgcHJvYmFiaWxpdHkgb2YgdGhlIHRva2VuLlxuICAgICAqL1xuICAgIGxvZ3Byb2I/OiBudW1iZXI7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNjcmlwdGlvbkluY2x1ZGUgPSAnbG9ncHJvYnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zY3JpcHRpb25TZWdtZW50IHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBzZWdtZW50LlxuICAgKi9cbiAgaWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQXZlcmFnZSBsb2dwcm9iIG9mIHRoZSBzZWdtZW50LiBJZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiAtMSwgY29uc2lkZXIgdGhlXG4gICAqIGxvZ3Byb2JzIGZhaWxlZC5cbiAgICovXG4gIGF2Z19sb2dwcm9iOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbXByZXNzaW9uIHJhdGlvIG9mIHRoZSBzZWdtZW50LiBJZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDIuNCwgY29uc2lkZXIgdGhlXG4gICAqIGNvbXByZXNzaW9uIGZhaWxlZC5cbiAgICovXG4gIGNvbXByZXNzaW9uX3JhdGlvOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuZCB0aW1lIG9mIHRoZSBzZWdtZW50IGluIHNlY29uZHMuXG4gICAqL1xuICBlbmQ6IG51bWJlcjtcblxuICAvKipcbiAgICogUHJvYmFiaWxpdHkgb2Ygbm8gc3BlZWNoIGluIHRoZSBzZWdtZW50LiBJZiB0aGUgdmFsdWUgaXMgaGlnaGVyIHRoYW4gMS4wIGFuZCB0aGVcbiAgICogYGF2Z19sb2dwcm9iYCBpcyBiZWxvdyAtMSwgY29uc2lkZXIgdGhpcyBzZWdtZW50IHNpbGVudC5cbiAgICovXG4gIG5vX3NwZWVjaF9wcm9iOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNlZWsgb2Zmc2V0IG9mIHRoZSBzZWdtZW50LlxuICAgKi9cbiAgc2VlazogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdGFydCB0aW1lIG9mIHRoZSBzZWdtZW50IGluIHNlY29uZHMuXG4gICAqL1xuICBzdGFydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUZW1wZXJhdHVyZSBwYXJhbWV0ZXIgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgc2VnbWVudC5cbiAgICovXG4gIHRlbXBlcmF0dXJlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRleHQgY29udGVudCBvZiB0aGUgc2VnbWVudC5cbiAgICovXG4gIHRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgdG9rZW4gSURzIGZvciB0aGUgdGV4dCBjb250ZW50LlxuICAgKi9cbiAgdG9rZW5zOiBBcnJheTxudW1iZXI+O1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiB0aGVyZSBpcyBhbiBhZGRpdGlvbmFsIHRleHQgZGVsdGEuIFRoaXMgaXMgYWxzbyB0aGUgZmlyc3QgZXZlbnRcbiAqIGVtaXR0ZWQgd2hlbiB0aGUgdHJhbnNjcmlwdGlvbiBzdGFydHMuIE9ubHkgZW1pdHRlZCB3aGVuIHlvdVxuICogW2NyZWF0ZSBhIHRyYW5zY3JpcHRpb25dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYXVkaW8vY3JlYXRlLXRyYW5zY3JpcHRpb24pXG4gKiB3aXRoIHRoZSBgU3RyZWFtYCBwYXJhbWV0ZXIgc2V0IHRvIGB0cnVlYC5cbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNjcmlwdGlvblN0cmVhbUV2ZW50ID0gVHJhbnNjcmlwdGlvblRleHREZWx0YUV2ZW50IHwgVHJhbnNjcmlwdGlvblRleHREb25lRXZlbnQ7XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgdGV4dCBkZWx0YS4gVGhpcyBpcyBhbHNvIHRoZSBmaXJzdCBldmVudFxuICogZW1pdHRlZCB3aGVuIHRoZSB0cmFuc2NyaXB0aW9uIHN0YXJ0cy4gT25seSBlbWl0dGVkIHdoZW4geW91XG4gKiBbY3JlYXRlIGEgdHJhbnNjcmlwdGlvbl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9hdWRpby9jcmVhdGUtdHJhbnNjcmlwdGlvbilcbiAqIHdpdGggdGhlIGBTdHJlYW1gIHBhcmFtZXRlciBzZXQgdG8gYHRydWVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zY3JpcHRpb25UZXh0RGVsdGFFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgdGV4dCBkZWx0YSB0aGF0IHdhcyBhZGRpdGlvbmFsbHkgdHJhbnNjcmliZWQuXG4gICAqL1xuICBkZWx0YTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuIEFsd2F5cyBgdHJhbnNjcmlwdC50ZXh0LmRlbHRhYC5cbiAgICovXG4gIHR5cGU6ICd0cmFuc2NyaXB0LnRleHQuZGVsdGEnO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIHByb2JhYmlsaXRpZXMgb2YgdGhlIGRlbHRhLiBPbmx5IGluY2x1ZGVkIGlmIHlvdVxuICAgKiBbY3JlYXRlIGEgdHJhbnNjcmlwdGlvbl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9hdWRpby9jcmVhdGUtdHJhbnNjcmlwdGlvbilcbiAgICogd2l0aCB0aGUgYGluY2x1ZGVbXWAgcGFyYW1ldGVyIHNldCB0byBgbG9ncHJvYnNgLlxuICAgKi9cbiAgbG9ncHJvYnM/OiBBcnJheTxUcmFuc2NyaXB0aW9uVGV4dERlbHRhRXZlbnQuTG9ncHJvYj47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgVHJhbnNjcmlwdGlvblRleHREZWx0YUV2ZW50IHtcbiAgZXhwb3J0IGludGVyZmFjZSBMb2dwcm9iIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdG9rZW4gdGhhdCB3YXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbG9nIHByb2JhYmlsaXR5LlxuICAgICAqL1xuICAgIHRva2VuPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJ5dGVzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBsb2cgcHJvYmFiaWxpdHkuXG4gICAgICovXG4gICAgYnl0ZXM/OiBBcnJheTx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBsb2cgcHJvYmFiaWxpdHkgb2YgdGhlIHRva2VuLlxuICAgICAqL1xuICAgIGxvZ3Byb2I/OiBudW1iZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gdGhlIHRyYW5zY3JpcHRpb24gaXMgY29tcGxldGUuIENvbnRhaW5zIHRoZSBjb21wbGV0ZSB0cmFuc2NyaXB0aW9uXG4gKiB0ZXh0LiBPbmx5IGVtaXR0ZWQgd2hlbiB5b3VcbiAqIFtjcmVhdGUgYSB0cmFuc2NyaXB0aW9uXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2F1ZGlvL2NyZWF0ZS10cmFuc2NyaXB0aW9uKVxuICogd2l0aCB0aGUgYFN0cmVhbWAgcGFyYW1ldGVyIHNldCB0byBgdHJ1ZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdGlvblRleHREb25lRXZlbnQge1xuICAvKipcbiAgICogVGhlIHRleHQgdGhhdCB3YXMgdHJhbnNjcmliZWQuXG4gICAqL1xuICB0ZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGB0cmFuc2NyaXB0LnRleHQuZG9uZWAuXG4gICAqL1xuICB0eXBlOiAndHJhbnNjcmlwdC50ZXh0LmRvbmUnO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIHByb2JhYmlsaXRpZXMgb2YgdGhlIGluZGl2aWR1YWwgdG9rZW5zIGluIHRoZSB0cmFuc2NyaXB0aW9uLiBPbmx5XG4gICAqIGluY2x1ZGVkIGlmIHlvdVxuICAgKiBbY3JlYXRlIGEgdHJhbnNjcmlwdGlvbl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9hdWRpby9jcmVhdGUtdHJhbnNjcmlwdGlvbilcbiAgICogd2l0aCB0aGUgYGluY2x1ZGVbXWAgcGFyYW1ldGVyIHNldCB0byBgbG9ncHJvYnNgLlxuICAgKi9cbiAgbG9ncHJvYnM/OiBBcnJheTxUcmFuc2NyaXB0aW9uVGV4dERvbmVFdmVudC5Mb2dwcm9iPjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUcmFuc2NyaXB0aW9uVGV4dERvbmVFdmVudCB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTG9ncHJvYiB7XG4gICAgLyoqXG4gICAgICogVGhlIHRva2VuIHRoYXQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGxvZyBwcm9iYWJpbGl0eS5cbiAgICAgKi9cbiAgICB0b2tlbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBieXRlcyB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbG9nIHByb2JhYmlsaXR5LlxuICAgICAqL1xuICAgIGJ5dGVzPzogQXJyYXk8dW5rbm93bj47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbG9nIHByb2JhYmlsaXR5IG9mIHRoZSB0b2tlbi5cbiAgICAgKi9cbiAgICBsb2dwcm9iPzogbnVtYmVyO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHZlcmJvc2UganNvbiB0cmFuc2NyaXB0aW9uIHJlc3BvbnNlIHJldHVybmVkIGJ5IG1vZGVsLCBiYXNlZCBvbiB0aGVcbiAqIHByb3ZpZGVkIGlucHV0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zY3JpcHRpb25WZXJib3NlIHtcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgaW5wdXQgYXVkaW8uXG4gICAqL1xuICBkdXJhdGlvbjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0IGF1ZGlvLlxuICAgKi9cbiAgbGFuZ3VhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRyYW5zY3JpYmVkIHRleHQuXG4gICAqL1xuICB0ZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZ21lbnRzIG9mIHRoZSB0cmFuc2NyaWJlZCB0ZXh0IGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGRldGFpbHMuXG4gICAqL1xuICBzZWdtZW50cz86IEFycmF5PFRyYW5zY3JpcHRpb25TZWdtZW50PjtcblxuICAvKipcbiAgICogRXh0cmFjdGVkIHdvcmRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcHMuXG4gICAqL1xuICB3b3Jkcz86IEFycmF5PFRyYW5zY3JpcHRpb25Xb3JkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2NyaXB0aW9uV29yZCB7XG4gIC8qKlxuICAgKiBFbmQgdGltZSBvZiB0aGUgd29yZCBpbiBzZWNvbmRzLlxuICAgKi9cbiAgZW5kOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRpbWUgb2YgdGhlIHdvcmQgaW4gc2Vjb25kcy5cbiAgICovXG4gIHN0YXJ0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHdvcmQuXG4gICAqL1xuICB3b3JkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHRyYW5zY3JpcHRpb24gcmVzcG9uc2UgcmV0dXJuZWQgYnkgbW9kZWwsIGJhc2VkIG9uIHRoZSBwcm92aWRlZFxuICogaW5wdXQuXG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zY3JpcHRpb25DcmVhdGVSZXNwb25zZSA9IFRyYW5zY3JpcHRpb24gfCBUcmFuc2NyaXB0aW9uVmVyYm9zZTtcblxuZXhwb3J0IHR5cGUgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtczxcbiAgUmVzcG9uc2VGb3JtYXQgZXh0ZW5kcyBBdWRpb0FQSS5BdWRpb1Jlc3BvbnNlRm9ybWF0IHwgdW5kZWZpbmVkID0gQXVkaW9BUEkuQXVkaW9SZXNwb25zZUZvcm1hdCB8IHVuZGVmaW5lZCxcbj4gPSBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nPFJlc3BvbnNlRm9ybWF0PiB8IFRyYW5zY3JpcHRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc0Jhc2U8XG4gIFJlc3BvbnNlRm9ybWF0IGV4dGVuZHMgQXVkaW9BUEkuQXVkaW9SZXNwb25zZUZvcm1hdCB8IHVuZGVmaW5lZCA9IEF1ZGlvQVBJLkF1ZGlvUmVzcG9uc2VGb3JtYXQgfCB1bmRlZmluZWQsXG4+IHtcbiAgLyoqXG4gICAqIFRoZSBhdWRpbyBmaWxlIG9iamVjdCAobm90IGZpbGUgbmFtZSkgdG8gdHJhbnNjcmliZSwgaW4gb25lIG9mIHRoZXNlIGZvcm1hdHM6XG4gICAqIGZsYWMsIG1wMywgbXA0LCBtcGVnLCBtcGdhLCBtNGEsIG9nZywgd2F2LCBvciB3ZWJtLlxuICAgKi9cbiAgZmlsZTogQ29yZS5VcGxvYWRhYmxlO1xuXG4gIC8qKlxuICAgKiBJRCBvZiB0aGUgbW9kZWwgdG8gdXNlLiBUaGUgb3B0aW9ucyBhcmUgYGdwdC00by10cmFuc2NyaWJlYCxcbiAgICogYGdwdC00by1taW5pLXRyYW5zY3JpYmVgLCBhbmQgYHdoaXNwZXItMWAgKHdoaWNoIGlzIHBvd2VyZWQgYnkgb3VyIG9wZW4gc291cmNlXG4gICAqIFdoaXNwZXIgVjIgbW9kZWwpLlxuICAgKi9cbiAgbW9kZWw6IChzdHJpbmcgJiB7fSkgfCBBdWRpb0FQSS5BdWRpb01vZGVsO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGluY2x1ZGUgaW4gdGhlIHRyYW5zY3JpcHRpb24gcmVzcG9uc2UuIGBsb2dwcm9ic2Agd2lsbFxuICAgKiByZXR1cm4gdGhlIGxvZyBwcm9iYWJpbGl0aWVzIG9mIHRoZSB0b2tlbnMgaW4gdGhlIHJlc3BvbnNlIHRvIHVuZGVyc3RhbmQgdGhlXG4gICAqIG1vZGVsJ3MgY29uZmlkZW5jZSBpbiB0aGUgdHJhbnNjcmlwdGlvbi4gYGxvZ3Byb2JzYCBvbmx5IHdvcmtzIHdpdGhcbiAgICogcmVzcG9uc2VfZm9ybWF0IHNldCB0byBganNvbmAgYW5kIG9ubHkgd2l0aCB0aGUgbW9kZWxzIGBncHQtNG8tdHJhbnNjcmliZWAgYW5kXG4gICAqIGBncHQtNG8tbWluaS10cmFuc2NyaWJlYC5cbiAgICovXG4gIGluY2x1ZGU/OiBBcnJheTxUcmFuc2NyaXB0aW9uSW5jbHVkZT47XG5cbiAgLyoqXG4gICAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgaW5wdXQgYXVkaW8uIFN1cHBseWluZyB0aGUgaW5wdXQgbGFuZ3VhZ2UgaW5cbiAgICogW0lTTy02MzktMV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9JU09fNjM5LTFfY29kZXMpIChlLmcuIGBlbmApXG4gICAqIGZvcm1hdCB3aWxsIGltcHJvdmUgYWNjdXJhY3kgYW5kIGxhdGVuY3kuXG4gICAqL1xuICBsYW5ndWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdGV4dCB0byBndWlkZSB0aGUgbW9kZWwncyBzdHlsZSBvciBjb250aW51ZSBhIHByZXZpb3VzIGF1ZGlvXG4gICAqIHNlZ21lbnQuIFRoZVxuICAgKiBbcHJvbXB0XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3BlZWNoLXRvLXRleHQjcHJvbXB0aW5nKVxuICAgKiBzaG91bGQgbWF0Y2ggdGhlIGF1ZGlvIGxhbmd1YWdlLlxuICAgKi9cbiAgcHJvbXB0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybWF0IG9mIHRoZSBvdXRwdXQsIGluIG9uZSBvZiB0aGVzZSBvcHRpb25zOiBganNvbmAsIGB0ZXh0YCwgYHNydGAsXG4gICAqIGB2ZXJib3NlX2pzb25gLCBvciBgdnR0YC4gRm9yIGBncHQtNG8tdHJhbnNjcmliZWAgYW5kIGBncHQtNG8tbWluaS10cmFuc2NyaWJlYCxcbiAgICogdGhlIG9ubHkgc3VwcG9ydGVkIGZvcm1hdCBpcyBganNvbmAuXG4gICAqL1xuICByZXNwb25zZV9mb3JtYXQ/OiBSZXNwb25zZUZvcm1hdDtcblxuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBtb2RlbCByZXNwb25zZSBkYXRhIHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGNsaWVudCBhcyBpdCBpc1xuICAgKiBnZW5lcmF0ZWQgdXNpbmdcbiAgICogW3NlcnZlci1zZW50IGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHMjRXZlbnRfc3RyZWFtX2Zvcm1hdCkuXG4gICAqIFNlZSB0aGVcbiAgICogW1N0cmVhbWluZyBzZWN0aW9uIG9mIHRoZSBTcGVlY2gtdG8tVGV4dCBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3NwZWVjaC10by10ZXh0P2xhbmc9Y3VybCNzdHJlYW1pbmctdHJhbnNjcmlwdGlvbnMpXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBOb3RlOiBTdHJlYW1pbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIGB3aGlzcGVyLTFgIG1vZGVsIGFuZCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqL1xuICBzdHJlYW0/OiBib29sZWFuIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHNhbXBsaW5nIHRlbXBlcmF0dXJlLCBiZXR3ZWVuIDAgYW5kIDEuIEhpZ2hlciB2YWx1ZXMgbGlrZSAwLjggd2lsbCBtYWtlIHRoZVxuICAgKiBvdXRwdXQgbW9yZSByYW5kb20sIHdoaWxlIGxvd2VyIHZhbHVlcyBsaWtlIDAuMiB3aWxsIG1ha2UgaXQgbW9yZSBmb2N1c2VkIGFuZFxuICAgKiBkZXRlcm1pbmlzdGljLiBJZiBzZXQgdG8gMCwgdGhlIG1vZGVsIHdpbGwgdXNlXG4gICAqIFtsb2cgcHJvYmFiaWxpdHldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xvZ19wcm9iYWJpbGl0eSkgdG9cbiAgICogYXV0b21hdGljYWxseSBpbmNyZWFzZSB0aGUgdGVtcGVyYXR1cmUgdW50aWwgY2VydGFpbiB0aHJlc2hvbGRzIGFyZSBoaXQuXG4gICAqL1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCBncmFudWxhcml0aWVzIHRvIHBvcHVsYXRlIGZvciB0aGlzIHRyYW5zY3JpcHRpb24uXG4gICAqIGByZXNwb25zZV9mb3JtYXRgIG11c3QgYmUgc2V0IGB2ZXJib3NlX2pzb25gIHRvIHVzZSB0aW1lc3RhbXAgZ3JhbnVsYXJpdGllcy5cbiAgICogRWl0aGVyIG9yIGJvdGggb2YgdGhlc2Ugb3B0aW9ucyBhcmUgc3VwcG9ydGVkOiBgd29yZGAsIG9yIGBzZWdtZW50YC4gTm90ZTogVGhlcmVcbiAgICogaXMgbm8gYWRkaXRpb25hbCBsYXRlbmN5IGZvciBzZWdtZW50IHRpbWVzdGFtcHMsIGJ1dCBnZW5lcmF0aW5nIHdvcmQgdGltZXN0YW1wc1xuICAgKiBpbmN1cnMgYWRkaXRpb25hbCBsYXRlbmN5LlxuICAgKi9cbiAgdGltZXN0YW1wX2dyYW51bGFyaXRpZXM/OiBBcnJheTwnd29yZCcgfCAnc2VnbWVudCc+O1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFRyYW5zY3JpcHRpb25DcmVhdGVQYXJhbXMge1xuICBleHBvcnQgdHlwZSBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nID0gVHJhbnNjcmlwdGlvbnNBUEkuVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZztcbiAgZXhwb3J0IHR5cGUgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyA9IFRyYW5zY3JpcHRpb25zQVBJLlRyYW5zY3JpcHRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZzxcbiAgUmVzcG9uc2VGb3JtYXQgZXh0ZW5kcyBBdWRpb0FQSS5BdWRpb1Jlc3BvbnNlRm9ybWF0IHwgdW5kZWZpbmVkID0gQXVkaW9BUEkuQXVkaW9SZXNwb25zZUZvcm1hdCB8IHVuZGVmaW5lZCxcbj4gZXh0ZW5kcyBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zQmFzZTxSZXNwb25zZUZvcm1hdD4ge1xuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBtb2RlbCByZXNwb25zZSBkYXRhIHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGNsaWVudCBhcyBpdCBpc1xuICAgKiBnZW5lcmF0ZWQgdXNpbmdcbiAgICogW3NlcnZlci1zZW50IGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHMjRXZlbnRfc3RyZWFtX2Zvcm1hdCkuXG4gICAqIFNlZSB0aGVcbiAgICogW1N0cmVhbWluZyBzZWN0aW9uIG9mIHRoZSBTcGVlY2gtdG8tVGV4dCBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3NwZWVjaC10by10ZXh0P2xhbmc9Y3VybCNzdHJlYW1pbmctdHJhbnNjcmlwdGlvbnMpXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBOb3RlOiBTdHJlYW1pbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIGB3aGlzcGVyLTFgIG1vZGVsIGFuZCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqL1xuICBzdHJlYW0/OiBmYWxzZSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyBleHRlbmRzIFRyYW5zY3JpcHRpb25DcmVhdGVQYXJhbXNCYXNlIHtcbiAgLyoqXG4gICAqIElmIHNldCB0byB0cnVlLCB0aGUgbW9kZWwgcmVzcG9uc2UgZGF0YSB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBjbGllbnQgYXMgaXQgaXNcbiAgICogZ2VuZXJhdGVkIHVzaW5nXG4gICAqIFtzZXJ2ZXItc2VudCBldmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2ZXItc2VudF9ldmVudHMvVXNpbmdfc2VydmVyLXNlbnRfZXZlbnRzI0V2ZW50X3N0cmVhbV9mb3JtYXQpLlxuICAgKiBTZWUgdGhlXG4gICAqIFtTdHJlYW1pbmcgc2VjdGlvbiBvZiB0aGUgU3BlZWNoLXRvLVRleHQgZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zcGVlY2gtdG8tdGV4dD9sYW5nPWN1cmwjc3RyZWFtaW5nLXRyYW5zY3JpcHRpb25zKVxuICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogTm90ZTogU3RyZWFtaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBgd2hpc3Blci0xYCBtb2RlbCBhbmQgd2lsbCBiZSBpZ25vcmVkLlxuICAgKi9cbiAgc3RyZWFtOiB0cnVlO1xufVxuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgVHJhbnNjcmlwdGlvbnMge1xuICBleHBvcnQge1xuICAgIHR5cGUgVHJhbnNjcmlwdGlvbiBhcyBUcmFuc2NyaXB0aW9uLFxuICAgIHR5cGUgVHJhbnNjcmlwdGlvbkluY2x1ZGUgYXMgVHJhbnNjcmlwdGlvbkluY2x1ZGUsXG4gICAgdHlwZSBUcmFuc2NyaXB0aW9uU2VnbWVudCBhcyBUcmFuc2NyaXB0aW9uU2VnbWVudCxcbiAgICB0eXBlIFRyYW5zY3JpcHRpb25TdHJlYW1FdmVudCBhcyBUcmFuc2NyaXB0aW9uU3RyZWFtRXZlbnQsXG4gICAgdHlwZSBUcmFuc2NyaXB0aW9uVGV4dERlbHRhRXZlbnQgYXMgVHJhbnNjcmlwdGlvblRleHREZWx0YUV2ZW50LFxuICAgIHR5cGUgVHJhbnNjcmlwdGlvblRleHREb25lRXZlbnQgYXMgVHJhbnNjcmlwdGlvblRleHREb25lRXZlbnQsXG4gICAgdHlwZSBUcmFuc2NyaXB0aW9uVmVyYm9zZSBhcyBUcmFuc2NyaXB0aW9uVmVyYm9zZSxcbiAgICB0eXBlIFRyYW5zY3JpcHRpb25Xb3JkIGFzIFRyYW5zY3JpcHRpb25Xb3JkLFxuICAgIHR5cGUgVHJhbnNjcmlwdGlvbkNyZWF0ZVJlc3BvbnNlIGFzIFRyYW5zY3JpcHRpb25DcmVhdGVSZXNwb25zZSxcbiAgICB0eXBlIFRyYW5zY3JpcHRpb25DcmVhdGVQYXJhbXMgYXMgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIFRyYW5zY3JpcHRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcgYXMgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgICB0eXBlIFRyYW5zY3JpcHRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcgYXMgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyxcbiAgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBBdWRpb0FQSSBmcm9tICcuL2F1ZGlvJztcbmltcG9ydCAqIGFzIFRyYW5zY3JpcHRpb25zQVBJIGZyb20gJy4vdHJhbnNjcmlwdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25zIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVHJhbnNsYXRlcyBhdWRpbyBpbnRvIEVuZ2xpc2guXG4gICAqL1xuICBjcmVhdGUoXG4gICAgYm9keTogVHJhbnNsYXRpb25DcmVhdGVQYXJhbXM8J2pzb24nIHwgdW5kZWZpbmVkPixcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFRyYW5zbGF0aW9uPjtcbiAgY3JlYXRlKFxuICAgIGJvZHk6IFRyYW5zbGF0aW9uQ3JlYXRlUGFyYW1zPCd2ZXJib3NlX2pzb24nPixcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFRyYW5zbGF0aW9uVmVyYm9zZT47XG4gIGNyZWF0ZShcbiAgICBib2R5OiBUcmFuc2xhdGlvbkNyZWF0ZVBhcmFtczwndGV4dCcgfCAnc3J0JyB8ICd2dHQnPixcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPHN0cmluZz47XG4gIGNyZWF0ZShib2R5OiBUcmFuc2xhdGlvbkNyZWF0ZVBhcmFtcywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkFQSVByb21pc2U8VHJhbnNsYXRpb24+O1xuICBjcmVhdGUoXG4gICAgYm9keTogVHJhbnNsYXRpb25DcmVhdGVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxUcmFuc2xhdGlvbkNyZWF0ZVJlc3BvbnNlIHwgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KFxuICAgICAgJy9hdWRpby90cmFuc2xhdGlvbnMnLFxuICAgICAgQ29yZS5tdWx0aXBhcnRGb3JtUmVxdWVzdE9wdGlvbnMoeyBib2R5LCAuLi5vcHRpb25zLCBfX21ldGFkYXRhOiB7IG1vZGVsOiBib2R5Lm1vZGVsIH0gfSksXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uIHtcbiAgdGV4dDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uVmVyYm9zZSB7XG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIGlucHV0IGF1ZGlvLlxuICAgKi9cbiAgZHVyYXRpb246IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxhbmd1YWdlIG9mIHRoZSBvdXRwdXQgdHJhbnNsYXRpb24gKGFsd2F5cyBgZW5nbGlzaGApLlxuICAgKi9cbiAgbGFuZ3VhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRyYW5zbGF0ZWQgdGV4dC5cbiAgICovXG4gIHRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogU2VnbWVudHMgb2YgdGhlIHRyYW5zbGF0ZWQgdGV4dCBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBkZXRhaWxzLlxuICAgKi9cbiAgc2VnbWVudHM/OiBBcnJheTxUcmFuc2NyaXB0aW9uc0FQSS5UcmFuc2NyaXB0aW9uU2VnbWVudD47XG59XG5cbmV4cG9ydCB0eXBlIFRyYW5zbGF0aW9uQ3JlYXRlUmVzcG9uc2UgPSBUcmFuc2xhdGlvbiB8IFRyYW5zbGF0aW9uVmVyYm9zZTtcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGlvbkNyZWF0ZVBhcmFtczxcbiAgUmVzcG9uc2VGb3JtYXQgZXh0ZW5kcyBBdWRpb0FQSS5BdWRpb1Jlc3BvbnNlRm9ybWF0IHwgdW5kZWZpbmVkID0gQXVkaW9BUEkuQXVkaW9SZXNwb25zZUZvcm1hdCB8IHVuZGVmaW5lZCxcbj4ge1xuICAvKipcbiAgICogVGhlIGF1ZGlvIGZpbGUgb2JqZWN0IChub3QgZmlsZSBuYW1lKSB0cmFuc2xhdGUsIGluIG9uZSBvZiB0aGVzZSBmb3JtYXRzOiBmbGFjLFxuICAgKiBtcDMsIG1wNCwgbXBlZywgbXBnYSwgbTRhLCBvZ2csIHdhdiwgb3Igd2VibS5cbiAgICovXG4gIGZpbGU6IENvcmUuVXBsb2FkYWJsZTtcblxuICAvKipcbiAgICogSUQgb2YgdGhlIG1vZGVsIHRvIHVzZS4gT25seSBgd2hpc3Blci0xYCAod2hpY2ggaXMgcG93ZXJlZCBieSBvdXIgb3BlbiBzb3VyY2VcbiAgICogV2hpc3BlciBWMiBtb2RlbCkgaXMgY3VycmVudGx5IGF2YWlsYWJsZS5cbiAgICovXG4gIG1vZGVsOiAoc3RyaW5nICYge30pIHwgQXVkaW9BUEkuQXVkaW9Nb2RlbDtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdGV4dCB0byBndWlkZSB0aGUgbW9kZWwncyBzdHlsZSBvciBjb250aW51ZSBhIHByZXZpb3VzIGF1ZGlvXG4gICAqIHNlZ21lbnQuIFRoZVxuICAgKiBbcHJvbXB0XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3BlZWNoLXRvLXRleHQjcHJvbXB0aW5nKVxuICAgKiBzaG91bGQgYmUgaW4gRW5nbGlzaC5cbiAgICovXG4gIHByb21wdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0LCBpbiBvbmUgb2YgdGhlc2Ugb3B0aW9uczogYGpzb25gLCBgdGV4dGAsIGBzcnRgLFxuICAgKiBgdmVyYm9zZV9qc29uYCwgb3IgYHZ0dGAuXG4gICAqL1xuICByZXNwb25zZV9mb3JtYXQ/OiAnanNvbicgfCAndGV4dCcgfCAnc3J0JyB8ICd2ZXJib3NlX2pzb24nIHwgJ3Z0dCc7XG5cbiAgLyoqXG4gICAqIFRoZSBzYW1wbGluZyB0ZW1wZXJhdHVyZSwgYmV0d2VlbiAwIGFuZCAxLiBIaWdoZXIgdmFsdWVzIGxpa2UgMC44IHdpbGwgbWFrZSB0aGVcbiAgICogb3V0cHV0IG1vcmUgcmFuZG9tLCB3aGlsZSBsb3dlciB2YWx1ZXMgbGlrZSAwLjIgd2lsbCBtYWtlIGl0IG1vcmUgZm9jdXNlZCBhbmRcbiAgICogZGV0ZXJtaW5pc3RpYy4gSWYgc2V0IHRvIDAsIHRoZSBtb2RlbCB3aWxsIHVzZVxuICAgKiBbbG9nIHByb2JhYmlsaXR5XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Mb2dfcHJvYmFiaWxpdHkpIHRvXG4gICAqIGF1dG9tYXRpY2FsbHkgaW5jcmVhc2UgdGhlIHRlbXBlcmF0dXJlIHVudGlsIGNlcnRhaW4gdGhyZXNob2xkcyBhcmUgaGl0LlxuICAgKi9cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBUcmFuc2xhdGlvbnMge1xuICBleHBvcnQge1xuICAgIHR5cGUgVHJhbnNsYXRpb24gYXMgVHJhbnNsYXRpb24sXG4gICAgdHlwZSBUcmFuc2xhdGlvblZlcmJvc2UgYXMgVHJhbnNsYXRpb25WZXJib3NlLFxuICAgIHR5cGUgVHJhbnNsYXRpb25DcmVhdGVSZXNwb25zZSBhcyBUcmFuc2xhdGlvbkNyZWF0ZVJlc3BvbnNlLFxuICAgIHR5cGUgVHJhbnNsYXRpb25DcmVhdGVQYXJhbXMgYXMgVHJhbnNsYXRpb25DcmVhdGVQYXJhbXMsXG4gIH07XG59XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9yZXNvdXJjZSc7XG5pbXBvcnQgKiBhcyBTcGVlY2hBUEkgZnJvbSAnLi9zcGVlY2gnO1xuaW1wb3J0IHsgU3BlZWNoLCBTcGVlY2hDcmVhdGVQYXJhbXMsIFNwZWVjaE1vZGVsIH0gZnJvbSAnLi9zcGVlY2gnO1xuaW1wb3J0ICogYXMgVHJhbnNjcmlwdGlvbnNBUEkgZnJvbSAnLi90cmFuc2NyaXB0aW9ucyc7XG5pbXBvcnQge1xuICBUcmFuc2NyaXB0aW9uLFxuICBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zLFxuICBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICBUcmFuc2NyaXB0aW9uQ3JlYXRlUmVzcG9uc2UsXG4gIFRyYW5zY3JpcHRpb25JbmNsdWRlLFxuICBUcmFuc2NyaXB0aW9uU2VnbWVudCxcbiAgVHJhbnNjcmlwdGlvblN0cmVhbUV2ZW50LFxuICBUcmFuc2NyaXB0aW9uVGV4dERlbHRhRXZlbnQsXG4gIFRyYW5zY3JpcHRpb25UZXh0RG9uZUV2ZW50LFxuICBUcmFuc2NyaXB0aW9uVmVyYm9zZSxcbiAgVHJhbnNjcmlwdGlvbldvcmQsXG4gIFRyYW5zY3JpcHRpb25zLFxufSBmcm9tICcuL3RyYW5zY3JpcHRpb25zJztcbmltcG9ydCAqIGFzIFRyYW5zbGF0aW9uc0FQSSBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5pbXBvcnQge1xuICBUcmFuc2xhdGlvbixcbiAgVHJhbnNsYXRpb25DcmVhdGVQYXJhbXMsXG4gIFRyYW5zbGF0aW9uQ3JlYXRlUmVzcG9uc2UsXG4gIFRyYW5zbGF0aW9uVmVyYm9zZSxcbiAgVHJhbnNsYXRpb25zLFxufSBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBBdWRpbyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgdHJhbnNjcmlwdGlvbnM6IFRyYW5zY3JpcHRpb25zQVBJLlRyYW5zY3JpcHRpb25zID0gbmV3IFRyYW5zY3JpcHRpb25zQVBJLlRyYW5zY3JpcHRpb25zKHRoaXMuX2NsaWVudCk7XG4gIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zQVBJLlRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbnNBUEkuVHJhbnNsYXRpb25zKHRoaXMuX2NsaWVudCk7XG4gIHNwZWVjaDogU3BlZWNoQVBJLlNwZWVjaCA9IG5ldyBTcGVlY2hBUEkuU3BlZWNoKHRoaXMuX2NsaWVudCk7XG59XG5cbmV4cG9ydCB0eXBlIEF1ZGlvTW9kZWwgPSAnd2hpc3Blci0xJyB8ICdncHQtNG8tdHJhbnNjcmliZScgfCAnZ3B0LTRvLW1pbmktdHJhbnNjcmliZSc7XG5cbi8qKlxuICogVGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0LCBpbiBvbmUgb2YgdGhlc2Ugb3B0aW9uczogYGpzb25gLCBgdGV4dGAsIGBzcnRgLFxuICogYHZlcmJvc2VfanNvbmAsIG9yIGB2dHRgLiBGb3IgYGdwdC00by10cmFuc2NyaWJlYCBhbmQgYGdwdC00by1taW5pLXRyYW5zY3JpYmVgLFxuICogdGhlIG9ubHkgc3VwcG9ydGVkIGZvcm1hdCBpcyBganNvbmAuXG4gKi9cbmV4cG9ydCB0eXBlIEF1ZGlvUmVzcG9uc2VGb3JtYXQgPSAnanNvbicgfCAndGV4dCcgfCAnc3J0JyB8ICd2ZXJib3NlX2pzb24nIHwgJ3Z0dCc7XG5cbkF1ZGlvLlRyYW5zY3JpcHRpb25zID0gVHJhbnNjcmlwdGlvbnM7XG5BdWRpby5UcmFuc2xhdGlvbnMgPSBUcmFuc2xhdGlvbnM7XG5BdWRpby5TcGVlY2ggPSBTcGVlY2g7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBBdWRpbyB7XG4gIGV4cG9ydCB7IHR5cGUgQXVkaW9Nb2RlbCBhcyBBdWRpb01vZGVsLCB0eXBlIEF1ZGlvUmVzcG9uc2VGb3JtYXQgYXMgQXVkaW9SZXNwb25zZUZvcm1hdCB9O1xuXG4gIGV4cG9ydCB7XG4gICAgVHJhbnNjcmlwdGlvbnMgYXMgVHJhbnNjcmlwdGlvbnMsXG4gICAgdHlwZSBUcmFuc2NyaXB0aW9uIGFzIFRyYW5zY3JpcHRpb24sXG4gICAgdHlwZSBUcmFuc2NyaXB0aW9uSW5jbHVkZSBhcyBUcmFuc2NyaXB0aW9uSW5jbHVkZSxcbiAgICB0eXBlIFRyYW5zY3JpcHRpb25TZWdtZW50IGFzIFRyYW5zY3JpcHRpb25TZWdtZW50LFxuICAgIHR5cGUgVHJhbnNjcmlwdGlvblN0cmVhbUV2ZW50IGFzIFRyYW5zY3JpcHRpb25TdHJlYW1FdmVudCxcbiAgICB0eXBlIFRyYW5zY3JpcHRpb25UZXh0RGVsdGFFdmVudCBhcyBUcmFuc2NyaXB0aW9uVGV4dERlbHRhRXZlbnQsXG4gICAgdHlwZSBUcmFuc2NyaXB0aW9uVGV4dERvbmVFdmVudCBhcyBUcmFuc2NyaXB0aW9uVGV4dERvbmVFdmVudCxcbiAgICB0eXBlIFRyYW5zY3JpcHRpb25WZXJib3NlIGFzIFRyYW5zY3JpcHRpb25WZXJib3NlLFxuICAgIHR5cGUgVHJhbnNjcmlwdGlvbldvcmQgYXMgVHJhbnNjcmlwdGlvbldvcmQsXG4gICAgdHlwZSBUcmFuc2NyaXB0aW9uQ3JlYXRlUmVzcG9uc2UgYXMgVHJhbnNjcmlwdGlvbkNyZWF0ZVJlc3BvbnNlLFxuICAgIHR5cGUgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtcyBhcyBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zLFxuICAgIHR5cGUgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyBhcyBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICAgIHR5cGUgVHJhbnNjcmlwdGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyBhcyBUcmFuc2NyaXB0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICB9O1xuXG4gIGV4cG9ydCB7XG4gICAgVHJhbnNsYXRpb25zIGFzIFRyYW5zbGF0aW9ucyxcbiAgICB0eXBlIFRyYW5zbGF0aW9uIGFzIFRyYW5zbGF0aW9uLFxuICAgIHR5cGUgVHJhbnNsYXRpb25WZXJib3NlIGFzIFRyYW5zbGF0aW9uVmVyYm9zZSxcbiAgICB0eXBlIFRyYW5zbGF0aW9uQ3JlYXRlUmVzcG9uc2UgYXMgVHJhbnNsYXRpb25DcmVhdGVSZXNwb25zZSxcbiAgICB0eXBlIFRyYW5zbGF0aW9uQ3JlYXRlUGFyYW1zIGFzIFRyYW5zbGF0aW9uQ3JlYXRlUGFyYW1zLFxuICB9O1xuXG4gIGV4cG9ydCB7IFNwZWVjaCBhcyBTcGVlY2gsIHR5cGUgU3BlZWNoTW9kZWwgYXMgU3BlZWNoTW9kZWwsIHR5cGUgU3BlZWNoQ3JlYXRlUGFyYW1zIGFzIFNwZWVjaENyZWF0ZVBhcmFtcyB9O1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgaXNSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCAqIGFzIEJhdGNoZXNBUEkgZnJvbSAnLi9iYXRjaGVzJztcbmltcG9ydCAqIGFzIFNoYXJlZCBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyBDdXJzb3JQYWdlLCB0eXBlIEN1cnNvclBhZ2VQYXJhbXMgfSBmcm9tICcuLi9wYWdpbmF0aW9uJztcblxuZXhwb3J0IGNsYXNzIEJhdGNoZXMgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBleGVjdXRlcyBhIGJhdGNoIGZyb20gYW4gdXBsb2FkZWQgZmlsZSBvZiByZXF1ZXN0c1xuICAgKi9cbiAgY3JlYXRlKGJvZHk6IEJhdGNoQ3JlYXRlUGFyYW1zLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxCYXRjaD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdCgnL2JhdGNoZXMnLCB7IGJvZHksIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgYmF0Y2guXG4gICAqL1xuICByZXRyaWV2ZShiYXRjaElkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEJhdGNoPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXQoYC9iYXRjaGVzLyR7YmF0Y2hJZH1gLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IHlvdXIgb3JnYW5pemF0aW9uJ3MgYmF0Y2hlcy5cbiAgICovXG4gIGxpc3QocXVlcnk/OiBCYXRjaExpc3RQYXJhbXMsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5QYWdlUHJvbWlzZTxCYXRjaGVzUGFnZSwgQmF0Y2g+O1xuICBsaXN0KG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5QYWdlUHJvbWlzZTxCYXRjaGVzUGFnZSwgQmF0Y2g+O1xuICBsaXN0KFxuICAgIHF1ZXJ5OiBCYXRjaExpc3RQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8QmF0Y2hlc1BhZ2UsIEJhdGNoPiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0KHt9LCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdCgnL2JhdGNoZXMnLCBCYXRjaGVzUGFnZSwgeyBxdWVyeSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIGFuIGluLXByb2dyZXNzIGJhdGNoLiBUaGUgYmF0Y2ggd2lsbCBiZSBpbiBzdGF0dXMgYGNhbmNlbGxpbmdgIGZvciB1cCB0b1xuICAgKiAxMCBtaW51dGVzLCBiZWZvcmUgY2hhbmdpbmcgdG8gYGNhbmNlbGxlZGAsIHdoZXJlIGl0IHdpbGwgaGF2ZSBwYXJ0aWFsIHJlc3VsdHNcbiAgICogKGlmIGFueSkgYXZhaWxhYmxlIGluIHRoZSBvdXRwdXQgZmlsZS5cbiAgICovXG4gIGNhbmNlbChiYXRjaElkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEJhdGNoPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KGAvYmF0Y2hlcy8ke2JhdGNoSWR9L2NhbmNlbGAsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCYXRjaGVzUGFnZSBleHRlbmRzIEN1cnNvclBhZ2U8QmF0Y2g+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2gge1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBmcmFtZSB3aXRoaW4gd2hpY2ggdGhlIGJhdGNoIHNob3VsZCBiZSBwcm9jZXNzZWQuXG4gICAqL1xuICBjb21wbGV0aW9uX3dpbmRvdzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSBiYXRjaCB3YXMgY3JlYXRlZC5cbiAgICovXG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIE9wZW5BSSBBUEkgZW5kcG9pbnQgdXNlZCBieSB0aGUgYmF0Y2guXG4gICAqL1xuICBlbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGlucHV0IGZpbGUgZm9yIHRoZSBiYXRjaC5cbiAgICovXG4gIGlucHV0X2ZpbGVfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0eXBlLCB3aGljaCBpcyBhbHdheXMgYGJhdGNoYC5cbiAgICovXG4gIG9iamVjdDogJ2JhdGNoJztcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBiYXRjaC5cbiAgICovXG4gIHN0YXR1czpcbiAgICB8ICd2YWxpZGF0aW5nJ1xuICAgIHwgJ2ZhaWxlZCdcbiAgICB8ICdpbl9wcm9ncmVzcydcbiAgICB8ICdmaW5hbGl6aW5nJ1xuICAgIHwgJ2NvbXBsZXRlZCdcbiAgICB8ICdleHBpcmVkJ1xuICAgIHwgJ2NhbmNlbGxpbmcnXG4gICAgfCAnY2FuY2VsbGVkJztcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgYmF0Y2ggd2FzIGNhbmNlbGxlZC5cbiAgICovXG4gIGNhbmNlbGxlZF9hdD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgYmF0Y2ggc3RhcnRlZCBjYW5jZWxsaW5nLlxuICAgKi9cbiAgY2FuY2VsbGluZ19hdD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgYmF0Y2ggd2FzIGNvbXBsZXRlZC5cbiAgICovXG4gIGNvbXBsZXRlZF9hdD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIG91dHB1dHMgb2YgcmVxdWVzdHMgd2l0aCBlcnJvcnMuXG4gICAqL1xuICBlcnJvcl9maWxlX2lkPzogc3RyaW5nO1xuXG4gIGVycm9ycz86IEJhdGNoLkVycm9ycztcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgYmF0Y2ggZXhwaXJlZC5cbiAgICovXG4gIGV4cGlyZWRfYXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIGJhdGNoIHdpbGwgZXhwaXJlLlxuICAgKi9cbiAgZXhwaXJlc19hdD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgYmF0Y2ggZmFpbGVkLlxuICAgKi9cbiAgZmFpbGVkX2F0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSBiYXRjaCBzdGFydGVkIGZpbmFsaXppbmcuXG4gICAqL1xuICBmaW5hbGl6aW5nX2F0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSBiYXRjaCBzdGFydGVkIHByb2Nlc3NpbmcuXG4gICAqL1xuICBpbl9wcm9ncmVzc19hdD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kXG4gICAqIHF1ZXJ5aW5nIGZvciBvYmplY3RzIHZpYSBBUEkgb3IgdGhlIGRhc2hib2FyZC5cbiAgICpcbiAgICogS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGhcbiAgICogYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTIgY2hhcmFjdGVycy5cbiAgICovXG4gIG1ldGFkYXRhPzogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIG91dHB1dHMgb2Ygc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkIHJlcXVlc3RzLlxuICAgKi9cbiAgb3V0cHV0X2ZpbGVfaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IGNvdW50cyBmb3IgZGlmZmVyZW50IHN0YXR1c2VzIHdpdGhpbiB0aGUgYmF0Y2guXG4gICAqL1xuICByZXF1ZXN0X2NvdW50cz86IEJhdGNoUmVxdWVzdENvdW50cztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBCYXRjaCB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgRXJyb3JzIHtcbiAgICBkYXRhPzogQXJyYXk8QmF0Y2hlc0FQSS5CYXRjaEVycm9yPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvYmplY3QgdHlwZSwgd2hpY2ggaXMgYWx3YXlzIGBsaXN0YC5cbiAgICAgKi9cbiAgICBvYmplY3Q/OiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXRjaEVycm9yIHtcbiAgLyoqXG4gICAqIEFuIGVycm9yIGNvZGUgaWRlbnRpZnlpbmcgdGhlIGVycm9yIHR5cGUuXG4gICAqL1xuICBjb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSBudW1iZXIgb2YgdGhlIGlucHV0IGZpbGUgd2hlcmUgdGhlIGVycm9yIG9jY3VycmVkLCBpZiBhcHBsaWNhYmxlLlxuICAgKi9cbiAgbGluZT86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBwcm92aWRpbmcgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBlcnJvci5cbiAgICovXG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgdGhhdCBjYXVzZWQgdGhlIGVycm9yLCBpZiBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcGFyYW0/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGNvdW50cyBmb3IgZGlmZmVyZW50IHN0YXR1c2VzIHdpdGhpbiB0aGUgYmF0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2hSZXF1ZXN0Q291bnRzIHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGhhdmUgYmVlbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgY29tcGxldGVkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGhhdmUgZmFpbGVkLlxuICAgKi9cbiAgZmFpbGVkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRvdGFsIG51bWJlciBvZiByZXF1ZXN0cyBpbiB0aGUgYmF0Y2guXG4gICAqL1xuICB0b3RhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhdGNoQ3JlYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB0aW1lIGZyYW1lIHdpdGhpbiB3aGljaCB0aGUgYmF0Y2ggc2hvdWxkIGJlIHByb2Nlc3NlZC4gQ3VycmVudGx5IG9ubHkgYDI0aGBcbiAgICogaXMgc3VwcG9ydGVkLlxuICAgKi9cbiAgY29tcGxldGlvbl93aW5kb3c6ICcyNGgnO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kcG9pbnQgdG8gYmUgdXNlZCBmb3IgYWxsIHJlcXVlc3RzIGluIHRoZSBiYXRjaC4gQ3VycmVudGx5XG4gICAqIGAvdjEvcmVzcG9uc2VzYCwgYC92MS9jaGF0L2NvbXBsZXRpb25zYCwgYC92MS9lbWJlZGRpbmdzYCwgYW5kIGAvdjEvY29tcGxldGlvbnNgXG4gICAqIGFyZSBzdXBwb3J0ZWQuIE5vdGUgdGhhdCBgL3YxL2VtYmVkZGluZ3NgIGJhdGNoZXMgYXJlIGFsc28gcmVzdHJpY3RlZCB0byBhXG4gICAqIG1heGltdW0gb2YgNTAsMDAwIGVtYmVkZGluZyBpbnB1dHMgYWNyb3NzIGFsbCByZXF1ZXN0cyBpbiB0aGUgYmF0Y2guXG4gICAqL1xuICBlbmRwb2ludDogJy92MS9yZXNwb25zZXMnIHwgJy92MS9jaGF0L2NvbXBsZXRpb25zJyB8ICcvdjEvZW1iZWRkaW5ncycgfCAnL3YxL2NvbXBsZXRpb25zJztcblxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIHVwbG9hZGVkIGZpbGUgdGhhdCBjb250YWlucyByZXF1ZXN0cyBmb3IgdGhlIG5ldyBiYXRjaC5cbiAgICpcbiAgICogU2VlIFt1cGxvYWQgZmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcy9jcmVhdGUpXG4gICAqIGZvciBob3cgdG8gdXBsb2FkIGEgZmlsZS5cbiAgICpcbiAgICogWW91ciBpbnB1dCBmaWxlIG11c3QgYmUgZm9ybWF0dGVkIGFzIGFcbiAgICogW0pTT05MIGZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYmF0Y2gvcmVxdWVzdC1pbnB1dCksXG4gICAqIGFuZCBtdXN0IGJlIHVwbG9hZGVkIHdpdGggdGhlIHB1cnBvc2UgYGJhdGNoYC4gVGhlIGZpbGUgY2FuIGNvbnRhaW4gdXAgdG8gNTAsMDAwXG4gICAqIHJlcXVlc3RzLCBhbmQgY2FuIGJlIHVwIHRvIDIwMCBNQiBpbiBzaXplLlxuICAgKi9cbiAgaW5wdXRfZmlsZV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgKlxuICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbWV0YWRhdGE/OiBTaGFyZWQuTWV0YWRhdGEgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhdGNoTGlzdFBhcmFtcyBleHRlbmRzIEN1cnNvclBhZ2VQYXJhbXMge31cblxuQmF0Y2hlcy5CYXRjaGVzUGFnZSA9IEJhdGNoZXNQYWdlO1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgQmF0Y2hlcyB7XG4gIGV4cG9ydCB7XG4gICAgdHlwZSBCYXRjaCBhcyBCYXRjaCxcbiAgICB0eXBlIEJhdGNoRXJyb3IgYXMgQmF0Y2hFcnJvcixcbiAgICB0eXBlIEJhdGNoUmVxdWVzdENvdW50cyBhcyBCYXRjaFJlcXVlc3RDb3VudHMsXG4gICAgQmF0Y2hlc1BhZ2UgYXMgQmF0Y2hlc1BhZ2UsXG4gICAgdHlwZSBCYXRjaENyZWF0ZVBhcmFtcyBhcyBCYXRjaENyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIEJhdGNoTGlzdFBhcmFtcyBhcyBCYXRjaExpc3RQYXJhbXMsXG4gIH07XG59XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBpc1JlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgU2hhcmVkIGZyb20gJy4uL3NoYXJlZCc7XG5pbXBvcnQgKiBhcyBNZXNzYWdlc0FQSSBmcm9tICcuL3RocmVhZHMvbWVzc2FnZXMnO1xuaW1wb3J0ICogYXMgVGhyZWFkc0FQSSBmcm9tICcuL3RocmVhZHMvdGhyZWFkcyc7XG5pbXBvcnQgKiBhcyBSdW5zQVBJIGZyb20gJy4vdGhyZWFkcy9ydW5zL3J1bnMnO1xuaW1wb3J0ICogYXMgU3RlcHNBUEkgZnJvbSAnLi90aHJlYWRzL3J1bnMvc3RlcHMnO1xuaW1wb3J0IHsgQ3Vyc29yUGFnZSwgdHlwZSBDdXJzb3JQYWdlUGFyYW1zIH0gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBBc3Npc3RhbnRzIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGFzc2lzdGFudCB3aXRoIGEgbW9kZWwgYW5kIGluc3RydWN0aW9ucy5cbiAgICovXG4gIGNyZWF0ZShib2R5OiBBc3Npc3RhbnRDcmVhdGVQYXJhbXMsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEFzc2lzdGFudD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdCgnL2Fzc2lzdGFudHMnLCB7XG4gICAgICBib2R5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFuIGFzc2lzdGFudC5cbiAgICovXG4gIHJldHJpZXZlKGFzc2lzdGFudElkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEFzc2lzdGFudD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0KGAvYXNzaXN0YW50cy8ke2Fzc2lzdGFudElkfWAsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIGFuIGFzc2lzdGFudC5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBhc3Npc3RhbnRJZDogc3RyaW5nLFxuICAgIGJvZHk6IEFzc2lzdGFudFVwZGF0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPEFzc2lzdGFudD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdChgL2Fzc2lzdGFudHMvJHthc3Npc3RhbnRJZH1gLCB7XG4gICAgICBib2R5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYXNzaXN0YW50cy5cbiAgICovXG4gIGxpc3QoXG4gICAgcXVlcnk/OiBBc3Npc3RhbnRMaXN0UGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPEFzc2lzdGFudHNQYWdlLCBBc3Npc3RhbnQ+O1xuICBsaXN0KG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5QYWdlUHJvbWlzZTxBc3Npc3RhbnRzUGFnZSwgQXNzaXN0YW50PjtcbiAgbGlzdChcbiAgICBxdWVyeTogQXNzaXN0YW50TGlzdFBhcmFtcyB8IENvcmUuUmVxdWVzdE9wdGlvbnMgPSB7fSxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxBc3Npc3RhbnRzUGFnZSwgQXNzaXN0YW50PiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0KHt9LCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdCgnL2Fzc2lzdGFudHMnLCBBc3Npc3RhbnRzUGFnZSwge1xuICAgICAgcXVlcnksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYW4gYXNzaXN0YW50LlxuICAgKi9cbiAgZGVsKGFzc2lzdGFudElkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEFzc2lzdGFudERlbGV0ZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmRlbGV0ZShgL2Fzc2lzdGFudHMvJHthc3Npc3RhbnRJZH1gLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXNzaXN0YW50c1BhZ2UgZXh0ZW5kcyBDdXJzb3JQYWdlPEFzc2lzdGFudD4ge31cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGBhc3Npc3RhbnRgIHRoYXQgY2FuIGNhbGwgdGhlIG1vZGVsIGFuZCB1c2UgdG9vbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzaXN0YW50IHtcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyLCB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBpbiBBUEkgZW5kcG9pbnRzLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgYXNzaXN0YW50IHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgY3JlYXRlZF9hdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGFzc2lzdGFudC4gVGhlIG1heGltdW0gbGVuZ3RoIGlzIDUxMiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIHRoYXQgdGhlIGFzc2lzdGFudCB1c2VzLiBUaGUgbWF4aW11bSBsZW5ndGggaXMgMjU2LDAwMFxuICAgKiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgKlxuICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbWV0YWRhdGE6IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElEIG9mIHRoZSBtb2RlbCB0byB1c2UuIFlvdSBjYW4gdXNlIHRoZVxuICAgKiBbTGlzdCBtb2RlbHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbW9kZWxzL2xpc3QpIEFQSSB0b1xuICAgKiBzZWUgYWxsIG9mIHlvdXIgYXZhaWxhYmxlIG1vZGVscywgb3Igc2VlIG91clxuICAgKiBbTW9kZWwgb3ZlcnZpZXddKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscykgZm9yIGRlc2NyaXB0aW9ucyBvZlxuICAgKiB0aGVtLlxuICAgKi9cbiAgbW9kZWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFzc2lzdGFudC4gVGhlIG1heGltdW0gbGVuZ3RoIGlzIDI1NiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0eXBlLCB3aGljaCBpcyBhbHdheXMgYGFzc2lzdGFudGAuXG4gICAqL1xuICBvYmplY3Q6ICdhc3Npc3RhbnQnO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdG9vbCBlbmFibGVkIG9uIHRoZSBhc3Npc3RhbnQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMTI4IHRvb2xzIHBlclxuICAgKiBhc3Npc3RhbnQuIFRvb2xzIGNhbiBiZSBvZiB0eXBlcyBgY29kZV9pbnRlcnByZXRlcmAsIGBmaWxlX3NlYXJjaGAsIG9yXG4gICAqIGBmdW5jdGlvbmAuXG4gICAqL1xuICB0b29sczogQXJyYXk8QXNzaXN0YW50VG9vbD47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZGVsIG11c3Qgb3V0cHV0LiBDb21wYXRpYmxlIHdpdGhcbiAgICogW0dQVC00b10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvbW9kZWxzI2dwdC00byksXG4gICAqIFtHUFQtNCBUdXJib10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvbW9kZWxzI2dwdC00LXR1cmJvLWFuZC1ncHQtNCksXG4gICAqIGFuZCBhbGwgR1BULTMuNSBUdXJibyBtb2RlbHMgc2luY2UgYGdwdC0zLjUtdHVyYm8tMTEwNmAuXG4gICAqXG4gICAqIFNldHRpbmcgdG8gYHsgXCJ0eXBlXCI6IFwianNvbl9zY2hlbWFcIiwgXCJqc29uX3NjaGVtYVwiOiB7Li4ufSB9YCBlbmFibGVzIFN0cnVjdHVyZWRcbiAgICogT3V0cHV0cyB3aGljaCBlbnN1cmVzIHRoZSBtb2RlbCB3aWxsIG1hdGNoIHlvdXIgc3VwcGxpZWQgSlNPTiBzY2hlbWEuIExlYXJuIG1vcmVcbiAgICogaW4gdGhlXG4gICAqIFtTdHJ1Y3R1cmVkIE91dHB1dHMgZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zdHJ1Y3R1cmVkLW91dHB1dHMpLlxuICAgKlxuICAgKiBTZXR0aW5nIHRvIGB7IFwidHlwZVwiOiBcImpzb25fb2JqZWN0XCIgfWAgZW5hYmxlcyBKU09OIG1vZGUsIHdoaWNoIGVuc3VyZXMgdGhlXG4gICAqIG1lc3NhZ2UgdGhlIG1vZGVsIGdlbmVyYXRlcyBpcyB2YWxpZCBKU09OLlxuICAgKlxuICAgKiAqKkltcG9ydGFudDoqKiB3aGVuIHVzaW5nIEpTT04gbW9kZSwgeW91ICoqbXVzdCoqIGFsc28gaW5zdHJ1Y3QgdGhlIG1vZGVsIHRvXG4gICAqIHByb2R1Y2UgSlNPTiB5b3Vyc2VsZiB2aWEgYSBzeXN0ZW0gb3IgdXNlciBtZXNzYWdlLiBXaXRob3V0IHRoaXMsIHRoZSBtb2RlbCBtYXlcbiAgICogZ2VuZXJhdGUgYW4gdW5lbmRpbmcgc3RyZWFtIG9mIHdoaXRlc3BhY2UgdW50aWwgdGhlIGdlbmVyYXRpb24gcmVhY2hlcyB0aGUgdG9rZW5cbiAgICogbGltaXQsIHJlc3VsdGluZyBpbiBhIGxvbmctcnVubmluZyBhbmQgc2VlbWluZ2x5IFwic3R1Y2tcIiByZXF1ZXN0LiBBbHNvIG5vdGUgdGhhdFxuICAgKiB0aGUgbWVzc2FnZSBjb250ZW50IG1heSBiZSBwYXJ0aWFsbHkgY3V0IG9mZiBpZiBgZmluaXNoX3JlYXNvbj1cImxlbmd0aFwiYCwgd2hpY2hcbiAgICogaW5kaWNhdGVzIHRoZSBnZW5lcmF0aW9uIGV4Y2VlZGVkIGBtYXhfdG9rZW5zYCBvciB0aGUgY29udmVyc2F0aW9uIGV4Y2VlZGVkIHRoZVxuICAgKiBtYXggY29udGV4dCBsZW5ndGguXG4gICAqL1xuICByZXNwb25zZV9mb3JtYXQ/OiBUaHJlYWRzQVBJLkFzc2lzdGFudFJlc3BvbnNlRm9ybWF0T3B0aW9uIHwgbnVsbDtcblxuICAvKipcbiAgICogV2hhdCBzYW1wbGluZyB0ZW1wZXJhdHVyZSB0byB1c2UsIGJldHdlZW4gMCBhbmQgMi4gSGlnaGVyIHZhbHVlcyBsaWtlIDAuOCB3aWxsXG4gICAqIG1ha2UgdGhlIG91dHB1dCBtb3JlIHJhbmRvbSwgd2hpbGUgbG93ZXIgdmFsdWVzIGxpa2UgMC4yIHdpbGwgbWFrZSBpdCBtb3JlXG4gICAqIGZvY3VzZWQgYW5kIGRldGVybWluaXN0aWMuXG4gICAqL1xuICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIHJlc291cmNlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBhc3Npc3RhbnQncyB0b29scy4gVGhlIHJlc291cmNlcyBhcmVcbiAgICogc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgdG9vbC4gRm9yIGV4YW1wbGUsIHRoZSBgY29kZV9pbnRlcnByZXRlcmAgdG9vbCByZXF1aXJlc1xuICAgKiBhIGxpc3Qgb2YgZmlsZSBJRHMsIHdoaWxlIHRoZSBgZmlsZV9zZWFyY2hgIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZVxuICAgKiBJRHMuXG4gICAqL1xuICB0b29sX3Jlc291cmNlcz86IEFzc2lzdGFudC5Ub29sUmVzb3VyY2VzIHwgbnVsbDtcblxuICAvKipcbiAgICogQW4gYWx0ZXJuYXRpdmUgdG8gc2FtcGxpbmcgd2l0aCB0ZW1wZXJhdHVyZSwgY2FsbGVkIG51Y2xldXMgc2FtcGxpbmcsIHdoZXJlIHRoZVxuICAgKiBtb2RlbCBjb25zaWRlcnMgdGhlIHJlc3VsdHMgb2YgdGhlIHRva2VucyB3aXRoIHRvcF9wIHByb2JhYmlsaXR5IG1hc3MuIFNvIDAuMVxuICAgKiBtZWFucyBvbmx5IHRoZSB0b2tlbnMgY29tcHJpc2luZyB0aGUgdG9wIDEwJSBwcm9iYWJpbGl0eSBtYXNzIGFyZSBjb25zaWRlcmVkLlxuICAgKlxuICAgKiBXZSBnZW5lcmFsbHkgcmVjb21tZW5kIGFsdGVyaW5nIHRoaXMgb3IgdGVtcGVyYXR1cmUgYnV0IG5vdCBib3RoLlxuICAgKi9cbiAgdG9wX3A/OiBudW1iZXIgfCBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEFzc2lzdGFudCB7XG4gIC8qKlxuICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXNzaXN0YW50J3MgdG9vbHMuIFRoZSByZXNvdXJjZXMgYXJlXG4gICAqIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHRvb2wuIEZvciBleGFtcGxlLCB0aGUgYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgcmVxdWlyZXNcbiAgICogYSBsaXN0IG9mIGZpbGUgSURzLCB3aGlsZSB0aGUgYGZpbGVfc2VhcmNoYCB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiB2ZWN0b3Igc3RvcmVcbiAgICogSURzLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICBjb2RlX2ludGVycHJldGVyPzogVG9vbFJlc291cmNlcy5Db2RlSW50ZXJwcmV0ZXI7XG5cbiAgICBmaWxlX3NlYXJjaD86IFRvb2xSZXNvdXJjZXMuRmlsZVNlYXJjaDtcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgVG9vbFJlc291cmNlcyB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBDb2RlSW50ZXJwcmV0ZXIge1xuICAgICAgLyoqXG4gICAgICAgKiBBIGxpc3Qgb2YgW2ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIElEcyBtYWRlXG4gICAgICAgKiBhdmFpbGFibGUgdG8gdGhlIGBjb2RlX2ludGVycHJldGVyYGAgdG9vbC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAyMCBmaWxlc1xuICAgICAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSB0b29sLlxuICAgICAgICovXG4gICAgICBmaWxlX2lkcz86IEFycmF5PHN0cmluZz47XG4gICAgfVxuXG4gICAgZXhwb3J0IGludGVyZmFjZSBGaWxlU2VhcmNoIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIElEIG9mIHRoZVxuICAgICAgICogW3ZlY3RvciBzdG9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS92ZWN0b3Itc3RvcmVzL29iamVjdClcbiAgICAgICAqIGF0dGFjaGVkIHRvIHRoaXMgYXNzaXN0YW50LiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDEgdmVjdG9yIHN0b3JlIGF0dGFjaGVkIHRvXG4gICAgICAgKiB0aGUgYXNzaXN0YW50LlxuICAgICAgICovXG4gICAgICB2ZWN0b3Jfc3RvcmVfaWRzPzogQXJyYXk8c3RyaW5nPjtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3Npc3RhbnREZWxldGVkIHtcbiAgaWQ6IHN0cmluZztcblxuICBkZWxldGVkOiBib29sZWFuO1xuXG4gIG9iamVjdDogJ2Fzc2lzdGFudC5kZWxldGVkJztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGV2ZW50IGVtaXR0ZWQgd2hlbiBzdHJlYW1pbmcgYSBSdW4uXG4gKlxuICogRWFjaCBldmVudCBpbiBhIHNlcnZlci1zZW50IGV2ZW50cyBzdHJlYW0gaGFzIGFuIGBldmVudGAgYW5kIGBkYXRhYCBwcm9wZXJ0eTpcbiAqXG4gKiBgYGBcbiAqIGV2ZW50OiB0aHJlYWQuY3JlYXRlZFxuICogZGF0YToge1wiaWRcIjogXCJ0aHJlYWRfMTIzXCIsIFwib2JqZWN0XCI6IFwidGhyZWFkXCIsIC4uLn1cbiAqIGBgYFxuICpcbiAqIFdlIGVtaXQgZXZlbnRzIHdoZW5ldmVyIGEgbmV3IG9iamVjdCBpcyBjcmVhdGVkLCB0cmFuc2l0aW9ucyB0byBhIG5ldyBzdGF0ZSwgb3JcbiAqIGlzIGJlaW5nIHN0cmVhbWVkIGluIHBhcnRzIChkZWx0YXMpLiBGb3IgZXhhbXBsZSwgd2UgZW1pdCBgdGhyZWFkLnJ1bi5jcmVhdGVkYFxuICogd2hlbiBhIG5ldyBydW4gaXMgY3JlYXRlZCwgYHRocmVhZC5ydW4uY29tcGxldGVkYCB3aGVuIGEgcnVuIGNvbXBsZXRlcywgYW5kIHNvXG4gKiBvbi4gV2hlbiBhbiBBc3Npc3RhbnQgY2hvb3NlcyB0byBjcmVhdGUgYSBtZXNzYWdlIGR1cmluZyBhIHJ1biwgd2UgZW1pdCBhXG4gKiBgdGhyZWFkLm1lc3NhZ2UuY3JlYXRlZCBldmVudGAsIGEgYHRocmVhZC5tZXNzYWdlLmluX3Byb2dyZXNzYCBldmVudCwgbWFueVxuICogYHRocmVhZC5tZXNzYWdlLmRlbHRhYCBldmVudHMsIGFuZCBmaW5hbGx5IGEgYHRocmVhZC5tZXNzYWdlLmNvbXBsZXRlZGAgZXZlbnQuXG4gKlxuICogV2UgbWF5IGFkZCBhZGRpdGlvbmFsIGV2ZW50cyBvdmVyIHRpbWUsIHNvIHdlIHJlY29tbWVuZCBoYW5kbGluZyB1bmtub3duIGV2ZW50c1xuICogZ3JhY2VmdWxseSBpbiB5b3VyIGNvZGUuIFNlZSB0aGVcbiAqIFtBc3Npc3RhbnRzIEFQSSBxdWlja3N0YXJ0XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hc3Npc3RhbnRzL292ZXJ2aWV3KVxuICogdG8gbGVhcm4gaG93IHRvIGludGVncmF0ZSB0aGUgQXNzaXN0YW50cyBBUEkgd2l0aCBzdHJlYW1pbmcuXG4gKi9cbmV4cG9ydCB0eXBlIEFzc2lzdGFudFN0cmVhbUV2ZW50ID1cbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5UaHJlYWRDcmVhdGVkXG4gIHwgQXNzaXN0YW50U3RyZWFtRXZlbnQuVGhyZWFkUnVuQ3JlYXRlZFxuICB8IEFzc2lzdGFudFN0cmVhbUV2ZW50LlRocmVhZFJ1blF1ZXVlZFxuICB8IEFzc2lzdGFudFN0cmVhbUV2ZW50LlRocmVhZFJ1bkluUHJvZ3Jlc3NcbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5UaHJlYWRSdW5SZXF1aXJlc0FjdGlvblxuICB8IEFzc2lzdGFudFN0cmVhbUV2ZW50LlRocmVhZFJ1bkNvbXBsZXRlZFxuICB8IEFzc2lzdGFudFN0cmVhbUV2ZW50LlRocmVhZFJ1bkluY29tcGxldGVcbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5UaHJlYWRSdW5GYWlsZWRcbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5UaHJlYWRSdW5DYW5jZWxsaW5nXG4gIHwgQXNzaXN0YW50U3RyZWFtRXZlbnQuVGhyZWFkUnVuQ2FuY2VsbGVkXG4gIHwgQXNzaXN0YW50U3RyZWFtRXZlbnQuVGhyZWFkUnVuRXhwaXJlZFxuICB8IEFzc2lzdGFudFN0cmVhbUV2ZW50LlRocmVhZFJ1blN0ZXBDcmVhdGVkXG4gIHwgQXNzaXN0YW50U3RyZWFtRXZlbnQuVGhyZWFkUnVuU3RlcEluUHJvZ3Jlc3NcbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5UaHJlYWRSdW5TdGVwRGVsdGFcbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5UaHJlYWRSdW5TdGVwQ29tcGxldGVkXG4gIHwgQXNzaXN0YW50U3RyZWFtRXZlbnQuVGhyZWFkUnVuU3RlcEZhaWxlZFxuICB8IEFzc2lzdGFudFN0cmVhbUV2ZW50LlRocmVhZFJ1blN0ZXBDYW5jZWxsZWRcbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5UaHJlYWRSdW5TdGVwRXhwaXJlZFxuICB8IEFzc2lzdGFudFN0cmVhbUV2ZW50LlRocmVhZE1lc3NhZ2VDcmVhdGVkXG4gIHwgQXNzaXN0YW50U3RyZWFtRXZlbnQuVGhyZWFkTWVzc2FnZUluUHJvZ3Jlc3NcbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5UaHJlYWRNZXNzYWdlRGVsdGFcbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5UaHJlYWRNZXNzYWdlQ29tcGxldGVkXG4gIHwgQXNzaXN0YW50U3RyZWFtRXZlbnQuVGhyZWFkTWVzc2FnZUluY29tcGxldGVcbiAgfCBBc3Npc3RhbnRTdHJlYW1FdmVudC5FcnJvckV2ZW50O1xuXG5leHBvcnQgbmFtZXNwYWNlIEFzc2lzdGFudFN0cmVhbUV2ZW50IHtcbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGEgbmV3XG4gICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcy9vYmplY3QpIGlzXG4gICAqIGNyZWF0ZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZENyZWF0ZWQge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSB0aHJlYWQgdGhhdCBjb250YWluc1xuICAgICAqIFttZXNzYWdlc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tZXNzYWdlcykuXG4gICAgICovXG4gICAgZGF0YTogVGhyZWFkc0FQSS5UaHJlYWQ7XG5cbiAgICBldmVudDogJ3RocmVhZC5jcmVhdGVkJztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIGlucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24uXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYSBuZXdcbiAgICogW3J1bl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW5zL29iamVjdCkgaXMgY3JlYXRlZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuQ3JlYXRlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBleGVjdXRpb24gcnVuIG9uIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IFJ1bnNBUEkuUnVuO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLmNyZWF0ZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGEgW3J1bl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW5zL29iamVjdClcbiAgICogbW92ZXMgdG8gYSBgcXVldWVkYCBzdGF0dXMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZFJ1blF1ZXVlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBleGVjdXRpb24gcnVuIG9uIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IFJ1bnNBUEkuUnVuO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLnF1ZXVlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYSBbcnVuXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMvb2JqZWN0KVxuICAgKiBtb3ZlcyB0byBhbiBgaW5fcHJvZ3Jlc3NgIHN0YXR1cy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuSW5Qcm9ncmVzcyB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBleGVjdXRpb24gcnVuIG9uIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IFJ1bnNBUEkuUnVuO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLmluX3Byb2dyZXNzJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhIFtydW5dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVucy9vYmplY3QpXG4gICAqIG1vdmVzIHRvIGEgYHJlcXVpcmVzX2FjdGlvbmAgc3RhdHVzLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5SZXF1aXJlc0FjdGlvbiB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBleGVjdXRpb24gcnVuIG9uIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IFJ1bnNBUEkuUnVuO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLnJlcXVpcmVzX2FjdGlvbic7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYSBbcnVuXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMvb2JqZWN0KVxuICAgKiBpcyBjb21wbGV0ZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZFJ1bkNvbXBsZXRlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBleGVjdXRpb24gcnVuIG9uIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IFJ1bnNBUEkuUnVuO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLmNvbXBsZXRlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYSBbcnVuXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMvb2JqZWN0KVxuICAgKiBlbmRzIHdpdGggc3RhdHVzIGBpbmNvbXBsZXRlYC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuSW5jb21wbGV0ZSB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBleGVjdXRpb24gcnVuIG9uIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IFJ1bnNBUEkuUnVuO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLmluY29tcGxldGUnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGEgW3J1bl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW5zL29iamVjdClcbiAgICogZmFpbHMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZFJ1bkZhaWxlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBleGVjdXRpb24gcnVuIG9uIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IFJ1bnNBUEkuUnVuO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLmZhaWxlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYSBbcnVuXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMvb2JqZWN0KVxuICAgKiBtb3ZlcyB0byBhIGBjYW5jZWxsaW5nYCBzdGF0dXMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZFJ1bkNhbmNlbGxpbmcge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYW4gZXhlY3V0aW9uIHJ1biBvbiBhXG4gICAgICogW3RocmVhZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS90aHJlYWRzKS5cbiAgICAgKi9cbiAgICBkYXRhOiBSdW5zQVBJLlJ1bjtcblxuICAgIGV2ZW50OiAndGhyZWFkLnJ1bi5jYW5jZWxsaW5nJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhIFtydW5dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVucy9vYmplY3QpXG4gICAqIGlzIGNhbmNlbGxlZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuQ2FuY2VsbGVkIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGV4ZWN1dGlvbiBydW4gb24gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogUnVuc0FQSS5SdW47XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uY2FuY2VsbGVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhIFtydW5dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVucy9vYmplY3QpXG4gICAqIGV4cGlyZXMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZFJ1bkV4cGlyZWQge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYW4gZXhlY3V0aW9uIHJ1biBvbiBhXG4gICAgICogW3RocmVhZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS90aHJlYWRzKS5cbiAgICAgKi9cbiAgICBkYXRhOiBSdW5zQVBJLlJ1bjtcblxuICAgIGV2ZW50OiAndGhyZWFkLnJ1bi5leHBpcmVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhXG4gICAqIFtydW4gc3RlcF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW4tc3RlcHMvc3RlcC1vYmplY3QpXG4gICAqIGlzIGNyZWF0ZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZFJ1blN0ZXBDcmVhdGVkIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgc3RlcCBpbiBleGVjdXRpb24gb2YgYSBydW4uXG4gICAgICovXG4gICAgZGF0YTogU3RlcHNBUEkuUnVuU3RlcDtcblxuICAgIGV2ZW50OiAndGhyZWFkLnJ1bi5zdGVwLmNyZWF0ZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGFcbiAgICogW3J1biBzdGVwXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bi1zdGVwcy9zdGVwLW9iamVjdClcbiAgICogbW92ZXMgdG8gYW4gYGluX3Byb2dyZXNzYCBzdGF0ZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuU3RlcEluUHJvZ3Jlc3Mge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzdGVwIGluIGV4ZWN1dGlvbiBvZiBhIHJ1bi5cbiAgICAgKi9cbiAgICBkYXRhOiBTdGVwc0FQSS5SdW5TdGVwO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLnN0ZXAuaW5fcHJvZ3Jlc3MnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHBhcnRzIG9mIGFcbiAgICogW3J1biBzdGVwXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bi1zdGVwcy9zdGVwLW9iamVjdClcbiAgICogYXJlIGJlaW5nIHN0cmVhbWVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5TdGVwRGVsdGEge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBydW4gc3RlcCBkZWx0YSBpLmUuIGFueSBjaGFuZ2VkIGZpZWxkcyBvbiBhIHJ1biBzdGVwIGR1cmluZ1xuICAgICAqIHN0cmVhbWluZy5cbiAgICAgKi9cbiAgICBkYXRhOiBTdGVwc0FQSS5SdW5TdGVwRGVsdGFFdmVudDtcblxuICAgIGV2ZW50OiAndGhyZWFkLnJ1bi5zdGVwLmRlbHRhJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhXG4gICAqIFtydW4gc3RlcF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW4tc3RlcHMvc3RlcC1vYmplY3QpXG4gICAqIGlzIGNvbXBsZXRlZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuU3RlcENvbXBsZXRlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHN0ZXAgaW4gZXhlY3V0aW9uIG9mIGEgcnVuLlxuICAgICAqL1xuICAgIGRhdGE6IFN0ZXBzQVBJLlJ1blN0ZXA7XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uc3RlcC5jb21wbGV0ZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGFcbiAgICogW3J1biBzdGVwXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bi1zdGVwcy9zdGVwLW9iamVjdClcbiAgICogZmFpbHMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZFJ1blN0ZXBGYWlsZWQge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzdGVwIGluIGV4ZWN1dGlvbiBvZiBhIHJ1bi5cbiAgICAgKi9cbiAgICBkYXRhOiBTdGVwc0FQSS5SdW5TdGVwO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLnN0ZXAuZmFpbGVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhXG4gICAqIFtydW4gc3RlcF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW4tc3RlcHMvc3RlcC1vYmplY3QpXG4gICAqIGlzIGNhbmNlbGxlZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuU3RlcENhbmNlbGxlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHN0ZXAgaW4gZXhlY3V0aW9uIG9mIGEgcnVuLlxuICAgICAqL1xuICAgIGRhdGE6IFN0ZXBzQVBJLlJ1blN0ZXA7XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uc3RlcC5jYW5jZWxsZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGFcbiAgICogW3J1biBzdGVwXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bi1zdGVwcy9zdGVwLW9iamVjdClcbiAgICogZXhwaXJlcy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuU3RlcEV4cGlyZWQge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzdGVwIGluIGV4ZWN1dGlvbiBvZiBhIHJ1bi5cbiAgICAgKi9cbiAgICBkYXRhOiBTdGVwc0FQSS5SdW5TdGVwO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLnN0ZXAuZXhwaXJlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYVxuICAgKiBbbWVzc2FnZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tZXNzYWdlcy9vYmplY3QpIGlzXG4gICAqIGNyZWF0ZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZE1lc3NhZ2VDcmVhdGVkIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgbWVzc2FnZSB3aXRoaW4gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogTWVzc2FnZXNBUEkuTWVzc2FnZTtcblxuICAgIGV2ZW50OiAndGhyZWFkLm1lc3NhZ2UuY3JlYXRlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYVxuICAgKiBbbWVzc2FnZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tZXNzYWdlcy9vYmplY3QpIG1vdmVzXG4gICAqIHRvIGFuIGBpbl9wcm9ncmVzc2Agc3RhdGUuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZE1lc3NhZ2VJblByb2dyZXNzIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgbWVzc2FnZSB3aXRoaW4gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogTWVzc2FnZXNBUEkuTWVzc2FnZTtcblxuICAgIGV2ZW50OiAndGhyZWFkLm1lc3NhZ2UuaW5fcHJvZ3Jlc3MnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHBhcnRzIG9mIGFcbiAgICogW01lc3NhZ2VdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbWVzc2FnZXMvb2JqZWN0KSBhcmVcbiAgICogYmVpbmcgc3RyZWFtZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZE1lc3NhZ2VEZWx0YSB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIG1lc3NhZ2UgZGVsdGEgaS5lLiBhbnkgY2hhbmdlZCBmaWVsZHMgb24gYSBtZXNzYWdlIGR1cmluZ1xuICAgICAqIHN0cmVhbWluZy5cbiAgICAgKi9cbiAgICBkYXRhOiBNZXNzYWdlc0FQSS5NZXNzYWdlRGVsdGFFdmVudDtcblxuICAgIGV2ZW50OiAndGhyZWFkLm1lc3NhZ2UuZGVsdGEnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGFcbiAgICogW21lc3NhZ2VdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbWVzc2FnZXMvb2JqZWN0KSBpc1xuICAgKiBjb21wbGV0ZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZE1lc3NhZ2VDb21wbGV0ZWQge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBtZXNzYWdlIHdpdGhpbiBhXG4gICAgICogW3RocmVhZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS90aHJlYWRzKS5cbiAgICAgKi9cbiAgICBkYXRhOiBNZXNzYWdlc0FQSS5NZXNzYWdlO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQubWVzc2FnZS5jb21wbGV0ZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGFcbiAgICogW21lc3NhZ2VdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbWVzc2FnZXMvb2JqZWN0KSBlbmRzXG4gICAqIGJlZm9yZSBpdCBpcyBjb21wbGV0ZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZE1lc3NhZ2VJbmNvbXBsZXRlIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgbWVzc2FnZSB3aXRoaW4gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogTWVzc2FnZXNBUEkuTWVzc2FnZTtcblxuICAgIGV2ZW50OiAndGhyZWFkLm1lc3NhZ2UuaW5jb21wbGV0ZSc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYW5cbiAgICogW2Vycm9yXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvZXJyb3ItY29kZXMjYXBpLWVycm9ycykgb2NjdXJzLlxuICAgKiBUaGlzIGNhbiBoYXBwZW4gZHVlIHRvIGFuIGludGVybmFsIHNlcnZlciBlcnJvciBvciBhIHRpbWVvdXQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEVycm9yRXZlbnQge1xuICAgIGRhdGE6IFNoYXJlZC5FcnJvck9iamVjdDtcblxuICAgIGV2ZW50OiAnZXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEFzc2lzdGFudFRvb2wgPSBDb2RlSW50ZXJwcmV0ZXJUb29sIHwgRmlsZVNlYXJjaFRvb2wgfCBGdW5jdGlvblRvb2w7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUludGVycHJldGVyVG9vbCB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0b29sIGJlaW5nIGRlZmluZWQ6IGBjb2RlX2ludGVycHJldGVyYFxuICAgKi9cbiAgdHlwZTogJ2NvZGVfaW50ZXJwcmV0ZXInO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVTZWFyY2hUb29sIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRvb2wgYmVpbmcgZGVmaW5lZDogYGZpbGVfc2VhcmNoYFxuICAgKi9cbiAgdHlwZTogJ2ZpbGVfc2VhcmNoJztcblxuICAvKipcbiAgICogT3ZlcnJpZGVzIGZvciB0aGUgZmlsZSBzZWFyY2ggdG9vbC5cbiAgICovXG4gIGZpbGVfc2VhcmNoPzogRmlsZVNlYXJjaFRvb2wuRmlsZVNlYXJjaDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGaWxlU2VhcmNoVG9vbCB7XG4gIC8qKlxuICAgKiBPdmVycmlkZXMgZm9yIHRoZSBmaWxlIHNlYXJjaCB0b29sLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBGaWxlU2VhcmNoIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyB0aGUgZmlsZSBzZWFyY2ggdG9vbCBzaG91bGQgb3V0cHV0LiBUaGUgZGVmYXVsdCBpc1xuICAgICAqIDIwIGZvciBgZ3B0LTQqYCBtb2RlbHMgYW5kIDUgZm9yIGBncHQtMy41LXR1cmJvYC4gVGhpcyBudW1iZXIgc2hvdWxkIGJlIGJldHdlZW5cbiAgICAgKiAxIGFuZCA1MCBpbmNsdXNpdmUuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbGUgc2VhcmNoIHRvb2wgbWF5IG91dHB1dCBmZXdlciB0aGFuIGBtYXhfbnVtX3Jlc3VsdHNgIHJlc3VsdHMuXG4gICAgICogU2VlIHRoZVxuICAgICAqIFtmaWxlIHNlYXJjaCB0b29sIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2Fzc2lzdGFudHMvdG9vbHMvZmlsZS1zZWFyY2gjY3VzdG9taXppbmctZmlsZS1zZWFyY2gtc2V0dGluZ3MpXG4gICAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgbWF4X251bV9yZXN1bHRzPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJhbmtpbmcgb3B0aW9ucyBmb3IgdGhlIGZpbGUgc2VhcmNoLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZmlsZSBzZWFyY2ggdG9vbFxuICAgICAqIHdpbGwgdXNlIHRoZSBgYXV0b2AgcmFua2VyIGFuZCBhIHNjb3JlX3RocmVzaG9sZCBvZiAwLlxuICAgICAqXG4gICAgICogU2VlIHRoZVxuICAgICAqIFtmaWxlIHNlYXJjaCB0b29sIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2Fzc2lzdGFudHMvdG9vbHMvZmlsZS1zZWFyY2gjY3VzdG9taXppbmctZmlsZS1zZWFyY2gtc2V0dGluZ3MpXG4gICAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcmFua2luZ19vcHRpb25zPzogRmlsZVNlYXJjaC5SYW5raW5nT3B0aW9ucztcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgRmlsZVNlYXJjaCB7XG4gICAgLyoqXG4gICAgICogVGhlIHJhbmtpbmcgb3B0aW9ucyBmb3IgdGhlIGZpbGUgc2VhcmNoLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZmlsZSBzZWFyY2ggdG9vbFxuICAgICAqIHdpbGwgdXNlIHRoZSBgYXV0b2AgcmFua2VyIGFuZCBhIHNjb3JlX3RocmVzaG9sZCBvZiAwLlxuICAgICAqXG4gICAgICogU2VlIHRoZVxuICAgICAqIFtmaWxlIHNlYXJjaCB0b29sIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2Fzc2lzdGFudHMvdG9vbHMvZmlsZS1zZWFyY2gjY3VzdG9taXppbmctZmlsZS1zZWFyY2gtc2V0dGluZ3MpXG4gICAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBSYW5raW5nT3B0aW9ucyB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBzY29yZSB0aHJlc2hvbGQgZm9yIHRoZSBmaWxlIHNlYXJjaC4gQWxsIHZhbHVlcyBtdXN0IGJlIGEgZmxvYXRpbmcgcG9pbnRcbiAgICAgICAqIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEuXG4gICAgICAgKi9cbiAgICAgIHNjb3JlX3RocmVzaG9sZDogbnVtYmVyO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSByYW5rZXIgdG8gdXNlIGZvciB0aGUgZmlsZSBzZWFyY2guIElmIG5vdCBzcGVjaWZpZWQgd2lsbCB1c2UgdGhlIGBhdXRvYFxuICAgICAgICogcmFua2VyLlxuICAgICAgICovXG4gICAgICByYW5rZXI/OiAnYXV0bycgfCAnZGVmYXVsdF8yMDI0XzA4XzIxJztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblRvb2wge1xuICBmdW5jdGlvbjogU2hhcmVkLkZ1bmN0aW9uRGVmaW5pdGlvbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdG9vbCBiZWluZyBkZWZpbmVkOiBgZnVuY3Rpb25gXG4gICAqL1xuICB0eXBlOiAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIE9jY3VycyB3aGVuIGFcbiAqIFttZXNzYWdlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL21lc3NhZ2VzL29iamVjdCkgaXNcbiAqIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2VTdHJlYW1FdmVudCA9XG4gIHwgTWVzc2FnZVN0cmVhbUV2ZW50LlRocmVhZE1lc3NhZ2VDcmVhdGVkXG4gIHwgTWVzc2FnZVN0cmVhbUV2ZW50LlRocmVhZE1lc3NhZ2VJblByb2dyZXNzXG4gIHwgTWVzc2FnZVN0cmVhbUV2ZW50LlRocmVhZE1lc3NhZ2VEZWx0YVxuICB8IE1lc3NhZ2VTdHJlYW1FdmVudC5UaHJlYWRNZXNzYWdlQ29tcGxldGVkXG4gIHwgTWVzc2FnZVN0cmVhbUV2ZW50LlRocmVhZE1lc3NhZ2VJbmNvbXBsZXRlO1xuXG5leHBvcnQgbmFtZXNwYWNlIE1lc3NhZ2VTdHJlYW1FdmVudCB7XG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhXG4gICAqIFttZXNzYWdlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL21lc3NhZ2VzL29iamVjdCkgaXNcbiAgICogY3JlYXRlZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkTWVzc2FnZUNyZWF0ZWQge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBtZXNzYWdlIHdpdGhpbiBhXG4gICAgICogW3RocmVhZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS90aHJlYWRzKS5cbiAgICAgKi9cbiAgICBkYXRhOiBNZXNzYWdlc0FQSS5NZXNzYWdlO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQubWVzc2FnZS5jcmVhdGVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhXG4gICAqIFttZXNzYWdlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL21lc3NhZ2VzL29iamVjdCkgbW92ZXNcbiAgICogdG8gYW4gYGluX3Byb2dyZXNzYCBzdGF0ZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkTWVzc2FnZUluUHJvZ3Jlc3Mge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBtZXNzYWdlIHdpdGhpbiBhXG4gICAgICogW3RocmVhZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS90aHJlYWRzKS5cbiAgICAgKi9cbiAgICBkYXRhOiBNZXNzYWdlc0FQSS5NZXNzYWdlO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQubWVzc2FnZS5pbl9wcm9ncmVzcyc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gcGFydHMgb2YgYVxuICAgKiBbTWVzc2FnZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tZXNzYWdlcy9vYmplY3QpIGFyZVxuICAgKiBiZWluZyBzdHJlYW1lZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkTWVzc2FnZURlbHRhIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgbWVzc2FnZSBkZWx0YSBpLmUuIGFueSBjaGFuZ2VkIGZpZWxkcyBvbiBhIG1lc3NhZ2UgZHVyaW5nXG4gICAgICogc3RyZWFtaW5nLlxuICAgICAqL1xuICAgIGRhdGE6IE1lc3NhZ2VzQVBJLk1lc3NhZ2VEZWx0YUV2ZW50O1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQubWVzc2FnZS5kZWx0YSc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYVxuICAgKiBbbWVzc2FnZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tZXNzYWdlcy9vYmplY3QpIGlzXG4gICAqIGNvbXBsZXRlZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkTWVzc2FnZUNvbXBsZXRlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIG1lc3NhZ2Ugd2l0aGluIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IE1lc3NhZ2VzQVBJLk1lc3NhZ2U7XG5cbiAgICBldmVudDogJ3RocmVhZC5tZXNzYWdlLmNvbXBsZXRlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYVxuICAgKiBbbWVzc2FnZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tZXNzYWdlcy9vYmplY3QpIGVuZHNcbiAgICogYmVmb3JlIGl0IGlzIGNvbXBsZXRlZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkTWVzc2FnZUluY29tcGxldGUge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBtZXNzYWdlIHdpdGhpbiBhXG4gICAgICogW3RocmVhZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS90aHJlYWRzKS5cbiAgICAgKi9cbiAgICBkYXRhOiBNZXNzYWdlc0FQSS5NZXNzYWdlO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQubWVzc2FnZS5pbmNvbXBsZXRlJztcbiAgfVxufVxuXG4vKipcbiAqIE9jY3VycyB3aGVuIGFcbiAqIFtydW4gc3RlcF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW4tc3RlcHMvc3RlcC1vYmplY3QpXG4gKiBpcyBjcmVhdGVkLlxuICovXG5leHBvcnQgdHlwZSBSdW5TdGVwU3RyZWFtRXZlbnQgPVxuICB8IFJ1blN0ZXBTdHJlYW1FdmVudC5UaHJlYWRSdW5TdGVwQ3JlYXRlZFxuICB8IFJ1blN0ZXBTdHJlYW1FdmVudC5UaHJlYWRSdW5TdGVwSW5Qcm9ncmVzc1xuICB8IFJ1blN0ZXBTdHJlYW1FdmVudC5UaHJlYWRSdW5TdGVwRGVsdGFcbiAgfCBSdW5TdGVwU3RyZWFtRXZlbnQuVGhyZWFkUnVuU3RlcENvbXBsZXRlZFxuICB8IFJ1blN0ZXBTdHJlYW1FdmVudC5UaHJlYWRSdW5TdGVwRmFpbGVkXG4gIHwgUnVuU3RlcFN0cmVhbUV2ZW50LlRocmVhZFJ1blN0ZXBDYW5jZWxsZWRcbiAgfCBSdW5TdGVwU3RyZWFtRXZlbnQuVGhyZWFkUnVuU3RlcEV4cGlyZWQ7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUnVuU3RlcFN0cmVhbUV2ZW50IHtcbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGFcbiAgICogW3J1biBzdGVwXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bi1zdGVwcy9zdGVwLW9iamVjdClcbiAgICogaXMgY3JlYXRlZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuU3RlcENyZWF0ZWQge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzdGVwIGluIGV4ZWN1dGlvbiBvZiBhIHJ1bi5cbiAgICAgKi9cbiAgICBkYXRhOiBTdGVwc0FQSS5SdW5TdGVwO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLnN0ZXAuY3JlYXRlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYVxuICAgKiBbcnVuIHN0ZXBdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVuLXN0ZXBzL3N0ZXAtb2JqZWN0KVxuICAgKiBtb3ZlcyB0byBhbiBgaW5fcHJvZ3Jlc3NgIHN0YXRlLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5TdGVwSW5Qcm9ncmVzcyB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHN0ZXAgaW4gZXhlY3V0aW9uIG9mIGEgcnVuLlxuICAgICAqL1xuICAgIGRhdGE6IFN0ZXBzQVBJLlJ1blN0ZXA7XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uc3RlcC5pbl9wcm9ncmVzcyc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gcGFydHMgb2YgYVxuICAgKiBbcnVuIHN0ZXBdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVuLXN0ZXBzL3N0ZXAtb2JqZWN0KVxuICAgKiBhcmUgYmVpbmcgc3RyZWFtZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZFJ1blN0ZXBEZWx0YSB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHJ1biBzdGVwIGRlbHRhIGkuZS4gYW55IGNoYW5nZWQgZmllbGRzIG9uIGEgcnVuIHN0ZXAgZHVyaW5nXG4gICAgICogc3RyZWFtaW5nLlxuICAgICAqL1xuICAgIGRhdGE6IFN0ZXBzQVBJLlJ1blN0ZXBEZWx0YUV2ZW50O1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLnN0ZXAuZGVsdGEnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGFcbiAgICogW3J1biBzdGVwXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bi1zdGVwcy9zdGVwLW9iamVjdClcbiAgICogaXMgY29tcGxldGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5TdGVwQ29tcGxldGVkIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgc3RlcCBpbiBleGVjdXRpb24gb2YgYSBydW4uXG4gICAgICovXG4gICAgZGF0YTogU3RlcHNBUEkuUnVuU3RlcDtcblxuICAgIGV2ZW50OiAndGhyZWFkLnJ1bi5zdGVwLmNvbXBsZXRlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYVxuICAgKiBbcnVuIHN0ZXBdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVuLXN0ZXBzL3N0ZXAtb2JqZWN0KVxuICAgKiBmYWlscy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuU3RlcEZhaWxlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHN0ZXAgaW4gZXhlY3V0aW9uIG9mIGEgcnVuLlxuICAgICAqL1xuICAgIGRhdGE6IFN0ZXBzQVBJLlJ1blN0ZXA7XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uc3RlcC5mYWlsZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGFcbiAgICogW3J1biBzdGVwXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bi1zdGVwcy9zdGVwLW9iamVjdClcbiAgICogaXMgY2FuY2VsbGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5TdGVwQ2FuY2VsbGVkIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgc3RlcCBpbiBleGVjdXRpb24gb2YgYSBydW4uXG4gICAgICovXG4gICAgZGF0YTogU3RlcHNBUEkuUnVuU3RlcDtcblxuICAgIGV2ZW50OiAndGhyZWFkLnJ1bi5zdGVwLmNhbmNlbGxlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYVxuICAgKiBbcnVuIHN0ZXBdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVuLXN0ZXBzL3N0ZXAtb2JqZWN0KVxuICAgKiBleHBpcmVzLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5TdGVwRXhwaXJlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHN0ZXAgaW4gZXhlY3V0aW9uIG9mIGEgcnVuLlxuICAgICAqL1xuICAgIGRhdGE6IFN0ZXBzQVBJLlJ1blN0ZXA7XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uc3RlcC5leHBpcmVkJztcbiAgfVxufVxuXG4vKipcbiAqIE9jY3VycyB3aGVuIGEgbmV3XG4gKiBbcnVuXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMvb2JqZWN0KSBpcyBjcmVhdGVkLlxuICovXG5leHBvcnQgdHlwZSBSdW5TdHJlYW1FdmVudCA9XG4gIHwgUnVuU3RyZWFtRXZlbnQuVGhyZWFkUnVuQ3JlYXRlZFxuICB8IFJ1blN0cmVhbUV2ZW50LlRocmVhZFJ1blF1ZXVlZFxuICB8IFJ1blN0cmVhbUV2ZW50LlRocmVhZFJ1bkluUHJvZ3Jlc3NcbiAgfCBSdW5TdHJlYW1FdmVudC5UaHJlYWRSdW5SZXF1aXJlc0FjdGlvblxuICB8IFJ1blN0cmVhbUV2ZW50LlRocmVhZFJ1bkNvbXBsZXRlZFxuICB8IFJ1blN0cmVhbUV2ZW50LlRocmVhZFJ1bkluY29tcGxldGVcbiAgfCBSdW5TdHJlYW1FdmVudC5UaHJlYWRSdW5GYWlsZWRcbiAgfCBSdW5TdHJlYW1FdmVudC5UaHJlYWRSdW5DYW5jZWxsaW5nXG4gIHwgUnVuU3RyZWFtRXZlbnQuVGhyZWFkUnVuQ2FuY2VsbGVkXG4gIHwgUnVuU3RyZWFtRXZlbnQuVGhyZWFkUnVuRXhwaXJlZDtcblxuZXhwb3J0IG5hbWVzcGFjZSBSdW5TdHJlYW1FdmVudCB7XG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhIG5ld1xuICAgKiBbcnVuXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMvb2JqZWN0KSBpcyBjcmVhdGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5DcmVhdGVkIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGV4ZWN1dGlvbiBydW4gb24gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogUnVuc0FQSS5SdW47XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uY3JlYXRlZCc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYSBbcnVuXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMvb2JqZWN0KVxuICAgKiBtb3ZlcyB0byBhIGBxdWV1ZWRgIHN0YXR1cy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuUXVldWVkIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGV4ZWN1dGlvbiBydW4gb24gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogUnVuc0FQSS5SdW47XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4ucXVldWVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhIFtydW5dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVucy9vYmplY3QpXG4gICAqIG1vdmVzIHRvIGFuIGBpbl9wcm9ncmVzc2Agc3RhdHVzLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5JblByb2dyZXNzIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGV4ZWN1dGlvbiBydW4gb24gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogUnVuc0FQSS5SdW47XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uaW5fcHJvZ3Jlc3MnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGEgW3J1bl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW5zL29iamVjdClcbiAgICogbW92ZXMgdG8gYSBgcmVxdWlyZXNfYWN0aW9uYCBzdGF0dXMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZFJ1blJlcXVpcmVzQWN0aW9uIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGV4ZWN1dGlvbiBydW4gb24gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogUnVuc0FQSS5SdW47XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4ucmVxdWlyZXNfYWN0aW9uJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhIFtydW5dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVucy9vYmplY3QpXG4gICAqIGlzIGNvbXBsZXRlZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuQ29tcGxldGVkIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGV4ZWN1dGlvbiBydW4gb24gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogUnVuc0FQSS5SdW47XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uY29tcGxldGVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhIFtydW5dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVucy9vYmplY3QpXG4gICAqIGVuZHMgd2l0aCBzdGF0dXMgYGluY29tcGxldGVgLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5JbmNvbXBsZXRlIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGV4ZWN1dGlvbiBydW4gb24gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogUnVuc0FQSS5SdW47XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uaW5jb21wbGV0ZSc7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYSBbcnVuXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMvb2JqZWN0KVxuICAgKiBmYWlscy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuRmFpbGVkIHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGV4ZWN1dGlvbiBydW4gb24gYVxuICAgICAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcykuXG4gICAgICovXG4gICAgZGF0YTogUnVuc0FQSS5SdW47XG5cbiAgICBldmVudDogJ3RocmVhZC5ydW4uZmFpbGVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhIFtydW5dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVucy9vYmplY3QpXG4gICAqIG1vdmVzIHRvIGEgYGNhbmNlbGxpbmdgIHN0YXR1cy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuQ2FuY2VsbGluZyB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBleGVjdXRpb24gcnVuIG9uIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IFJ1bnNBUEkuUnVuO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLmNhbmNlbGxpbmcnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGEgW3J1bl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW5zL29iamVjdClcbiAgICogaXMgY2FuY2VsbGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWRSdW5DYW5jZWxsZWQge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYW4gZXhlY3V0aW9uIHJ1biBvbiBhXG4gICAgICogW3RocmVhZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS90aHJlYWRzKS5cbiAgICAgKi9cbiAgICBkYXRhOiBSdW5zQVBJLlJ1bjtcblxuICAgIGV2ZW50OiAndGhyZWFkLnJ1bi5jYW5jZWxsZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGEgW3J1bl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW5zL29iamVjdClcbiAgICogZXhwaXJlcy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkUnVuRXhwaXJlZCB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBleGVjdXRpb24gcnVuIG9uIGFcbiAgICAgKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICAgICAqL1xuICAgIGRhdGE6IFJ1bnNBUEkuUnVuO1xuXG4gICAgZXZlbnQ6ICd0aHJlYWQucnVuLmV4cGlyZWQnO1xuICB9XG59XG5cbi8qKlxuICogT2NjdXJzIHdoZW4gYSBuZXdcbiAqIFt0aHJlYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdGhyZWFkcy9vYmplY3QpIGlzXG4gKiBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRocmVhZFN0cmVhbUV2ZW50IHtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSB0aHJlYWQgdGhhdCBjb250YWluc1xuICAgKiBbbWVzc2FnZXNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbWVzc2FnZXMpLlxuICAgKi9cbiAgZGF0YTogVGhyZWFkc0FQSS5UaHJlYWQ7XG5cbiAgZXZlbnQ6ICd0aHJlYWQuY3JlYXRlZCc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGlucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24uXG4gICAqL1xuICBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3Npc3RhbnRDcmVhdGVQYXJhbXMge1xuICAvKipcbiAgICogSUQgb2YgdGhlIG1vZGVsIHRvIHVzZS4gWW91IGNhbiB1c2UgdGhlXG4gICAqIFtMaXN0IG1vZGVsc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tb2RlbHMvbGlzdCkgQVBJIHRvXG4gICAqIHNlZSBhbGwgb2YgeW91ciBhdmFpbGFibGUgbW9kZWxzLCBvciBzZWUgb3VyXG4gICAqIFtNb2RlbCBvdmVydmlld10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvbW9kZWxzKSBmb3IgZGVzY3JpcHRpb25zIG9mXG4gICAqIHRoZW0uXG4gICAqL1xuICBtb2RlbDogKHN0cmluZyAmIHt9KSB8IFNoYXJlZC5DaGF0TW9kZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYXNzaXN0YW50LiBUaGUgbWF4aW11bSBsZW5ndGggaXMgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIHRoYXQgdGhlIGFzc2lzdGFudCB1c2VzLiBUaGUgbWF4aW11bSBsZW5ndGggaXMgMjU2LDAwMFxuICAgKiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kXG4gICAqIHF1ZXJ5aW5nIGZvciBvYmplY3RzIHZpYSBBUEkgb3IgdGhlIGRhc2hib2FyZC5cbiAgICpcbiAgICogS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGhcbiAgICogYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTIgY2hhcmFjdGVycy5cbiAgICovXG4gIG1ldGFkYXRhPzogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFzc2lzdGFudC4gVGhlIG1heGltdW0gbGVuZ3RoIGlzIDI1NiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqICoqby1zZXJpZXMgbW9kZWxzIG9ubHkqKlxuICAgKlxuICAgKiBDb25zdHJhaW5zIGVmZm9ydCBvbiByZWFzb25pbmcgZm9yXG4gICAqIFtyZWFzb25pbmcgbW9kZWxzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvcmVhc29uaW5nKS4gQ3VycmVudGx5XG4gICAqIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGBsb3dgLCBgbWVkaXVtYCwgYW5kIGBoaWdoYC4gUmVkdWNpbmcgcmVhc29uaW5nIGVmZm9ydCBjYW5cbiAgICogcmVzdWx0IGluIGZhc3RlciByZXNwb25zZXMgYW5kIGZld2VyIHRva2VucyB1c2VkIG9uIHJlYXNvbmluZyBpbiBhIHJlc3BvbnNlLlxuICAgKi9cbiAgcmVhc29uaW5nX2VmZm9ydD86IFNoYXJlZC5SZWFzb25pbmdFZmZvcnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2RlbCBtdXN0IG91dHB1dC4gQ29tcGF0aWJsZSB3aXRoXG4gICAqIFtHUFQtNG9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscyNncHQtNG8pLFxuICAgKiBbR1BULTQgVHVyYm9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscyNncHQtNC10dXJiby1hbmQtZ3B0LTQpLFxuICAgKiBhbmQgYWxsIEdQVC0zLjUgVHVyYm8gbW9kZWxzIHNpbmNlIGBncHQtMy41LXR1cmJvLTExMDZgLlxuICAgKlxuICAgKiBTZXR0aW5nIHRvIGB7IFwidHlwZVwiOiBcImpzb25fc2NoZW1hXCIsIFwianNvbl9zY2hlbWFcIjogey4uLn0gfWAgZW5hYmxlcyBTdHJ1Y3R1cmVkXG4gICAqIE91dHB1dHMgd2hpY2ggZW5zdXJlcyB0aGUgbW9kZWwgd2lsbCBtYXRjaCB5b3VyIHN1cHBsaWVkIEpTT04gc2NoZW1hLiBMZWFybiBtb3JlXG4gICAqIGluIHRoZVxuICAgKiBbU3RydWN0dXJlZCBPdXRwdXRzIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3RydWN0dXJlZC1vdXRwdXRzKS5cbiAgICpcbiAgICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX29iamVjdFwiIH1gIGVuYWJsZXMgSlNPTiBtb2RlLCB3aGljaCBlbnN1cmVzIHRoZVxuICAgKiBtZXNzYWdlIHRoZSBtb2RlbCBnZW5lcmF0ZXMgaXMgdmFsaWQgSlNPTi5cbiAgICpcbiAgICogKipJbXBvcnRhbnQ6Kiogd2hlbiB1c2luZyBKU09OIG1vZGUsIHlvdSAqKm11c3QqKiBhbHNvIGluc3RydWN0IHRoZSBtb2RlbCB0b1xuICAgKiBwcm9kdWNlIEpTT04geW91cnNlbGYgdmlhIGEgc3lzdGVtIG9yIHVzZXIgbWVzc2FnZS4gV2l0aG91dCB0aGlzLCB0aGUgbW9kZWwgbWF5XG4gICAqIGdlbmVyYXRlIGFuIHVuZW5kaW5nIHN0cmVhbSBvZiB3aGl0ZXNwYWNlIHVudGlsIHRoZSBnZW5lcmF0aW9uIHJlYWNoZXMgdGhlIHRva2VuXG4gICAqIGxpbWl0LCByZXN1bHRpbmcgaW4gYSBsb25nLXJ1bm5pbmcgYW5kIHNlZW1pbmdseSBcInN0dWNrXCIgcmVxdWVzdC4gQWxzbyBub3RlIHRoYXRcbiAgICogdGhlIG1lc3NhZ2UgY29udGVudCBtYXkgYmUgcGFydGlhbGx5IGN1dCBvZmYgaWYgYGZpbmlzaF9yZWFzb249XCJsZW5ndGhcImAsIHdoaWNoXG4gICAqIGluZGljYXRlcyB0aGUgZ2VuZXJhdGlvbiBleGNlZWRlZCBgbWF4X3Rva2Vuc2Agb3IgdGhlIGNvbnZlcnNhdGlvbiBleGNlZWRlZCB0aGVcbiAgICogbWF4IGNvbnRleHQgbGVuZ3RoLlxuICAgKi9cbiAgcmVzcG9uc2VfZm9ybWF0PzogVGhyZWFkc0FQSS5Bc3Npc3RhbnRSZXNwb25zZUZvcm1hdE9wdGlvbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoYXQgc2FtcGxpbmcgdGVtcGVyYXR1cmUgdG8gdXNlLCBiZXR3ZWVuIDAgYW5kIDIuIEhpZ2hlciB2YWx1ZXMgbGlrZSAwLjggd2lsbFxuICAgKiBtYWtlIHRoZSBvdXRwdXQgbW9yZSByYW5kb20sIHdoaWxlIGxvd2VyIHZhbHVlcyBsaWtlIDAuMiB3aWxsIG1ha2UgaXQgbW9yZVxuICAgKiBmb2N1c2VkIGFuZCBkZXRlcm1pbmlzdGljLlxuICAgKi9cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXNzaXN0YW50J3MgdG9vbHMuIFRoZSByZXNvdXJjZXMgYXJlXG4gICAqIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHRvb2wuIEZvciBleGFtcGxlLCB0aGUgYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgcmVxdWlyZXNcbiAgICogYSBsaXN0IG9mIGZpbGUgSURzLCB3aGlsZSB0aGUgYGZpbGVfc2VhcmNoYCB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiB2ZWN0b3Igc3RvcmVcbiAgICogSURzLlxuICAgKi9cbiAgdG9vbF9yZXNvdXJjZXM/OiBBc3Npc3RhbnRDcmVhdGVQYXJhbXMuVG9vbFJlc291cmNlcyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiB0b29sIGVuYWJsZWQgb24gdGhlIGFzc2lzdGFudC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAxMjggdG9vbHMgcGVyXG4gICAqIGFzc2lzdGFudC4gVG9vbHMgY2FuIGJlIG9mIHR5cGVzIGBjb2RlX2ludGVycHJldGVyYCwgYGZpbGVfc2VhcmNoYCwgb3JcbiAgICogYGZ1bmN0aW9uYC5cbiAgICovXG4gIHRvb2xzPzogQXJyYXk8QXNzaXN0YW50VG9vbD47XG5cbiAgLyoqXG4gICAqIEFuIGFsdGVybmF0aXZlIHRvIHNhbXBsaW5nIHdpdGggdGVtcGVyYXR1cmUsIGNhbGxlZCBudWNsZXVzIHNhbXBsaW5nLCB3aGVyZSB0aGVcbiAgICogbW9kZWwgY29uc2lkZXJzIHRoZSByZXN1bHRzIG9mIHRoZSB0b2tlbnMgd2l0aCB0b3BfcCBwcm9iYWJpbGl0eSBtYXNzLiBTbyAwLjFcbiAgICogbWVhbnMgb25seSB0aGUgdG9rZW5zIGNvbXByaXNpbmcgdGhlIHRvcCAxMCUgcHJvYmFiaWxpdHkgbWFzcyBhcmUgY29uc2lkZXJlZC5cbiAgICpcbiAgICogV2UgZ2VuZXJhbGx5IHJlY29tbWVuZCBhbHRlcmluZyB0aGlzIG9yIHRlbXBlcmF0dXJlIGJ1dCBub3QgYm90aC5cbiAgICovXG4gIHRvcF9wPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBc3Npc3RhbnRDcmVhdGVQYXJhbXMge1xuICAvKipcbiAgICogQSBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGFzc2lzdGFudCdzIHRvb2xzLiBUaGUgcmVzb3VyY2VzIGFyZVxuICAgKiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB0b29sLiBGb3IgZXhhbXBsZSwgdGhlIGBjb2RlX2ludGVycHJldGVyYCB0b29sIHJlcXVpcmVzXG4gICAqIGEgbGlzdCBvZiBmaWxlIElEcywgd2hpbGUgdGhlIGBmaWxlX3NlYXJjaGAgdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgdmVjdG9yIHN0b3JlXG4gICAqIElEcy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVG9vbFJlc291cmNlcyB7XG4gICAgY29kZV9pbnRlcnByZXRlcj86IFRvb2xSZXNvdXJjZXMuQ29kZUludGVycHJldGVyO1xuXG4gICAgZmlsZV9zZWFyY2g/OiBUb29sUmVzb3VyY2VzLkZpbGVTZWFyY2g7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIFRvb2xSZXNvdXJjZXMge1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQ29kZUludGVycHJldGVyIHtcbiAgICAgIC8qKlxuICAgICAgICogQSBsaXN0IG9mIFtmaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzKSBJRHMgbWFkZVxuICAgICAgICogYXZhaWxhYmxlIHRvIHRoZSBgY29kZV9pbnRlcnByZXRlcmAgdG9vbC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAyMCBmaWxlc1xuICAgICAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSB0b29sLlxuICAgICAgICovXG4gICAgICBmaWxlX2lkcz86IEFycmF5PHN0cmluZz47XG4gICAgfVxuXG4gICAgZXhwb3J0IGludGVyZmFjZSBGaWxlU2VhcmNoIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlXG4gICAgICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgICAgICogYXR0YWNoZWQgdG8gdGhpcyBhc3Npc3RhbnQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMSB2ZWN0b3Igc3RvcmUgYXR0YWNoZWQgdG9cbiAgICAgICAqIHRoZSBhc3Npc3RhbnQuXG4gICAgICAgKi9cbiAgICAgIHZlY3Rvcl9zdG9yZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgICAvKipcbiAgICAgICAqIEEgaGVscGVyIHRvIGNyZWF0ZSBhXG4gICAgICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgICAgICogd2l0aCBmaWxlX2lkcyBhbmQgYXR0YWNoIGl0IHRvIHRoaXMgYXNzaXN0YW50LiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDFcbiAgICAgICAqIHZlY3RvciBzdG9yZSBhdHRhY2hlZCB0byB0aGUgYXNzaXN0YW50LlxuICAgICAgICovXG4gICAgICB2ZWN0b3Jfc3RvcmVzPzogQXJyYXk8RmlsZVNlYXJjaC5WZWN0b3JTdG9yZT47XG4gICAgfVxuXG4gICAgZXhwb3J0IG5hbWVzcGFjZSBGaWxlU2VhcmNoIHtcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yU3RvcmUge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGNodW5raW5nIHN0cmF0ZWd5IHVzZWQgdG8gY2h1bmsgdGhlIGZpbGUocykuIElmIG5vdCBzZXQsIHdpbGwgdXNlIHRoZSBgYXV0b2BcbiAgICAgICAgICogc3RyYXRlZ3kuXG4gICAgICAgICAqL1xuICAgICAgICBjaHVua2luZ19zdHJhdGVneT86IFZlY3RvclN0b3JlLkF1dG8gfCBWZWN0b3JTdG9yZS5TdGF0aWM7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbGlzdCBvZiBbZmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgSURzIHRvXG4gICAgICAgICAqIGFkZCB0byB0aGUgdmVjdG9yIHN0b3JlLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDEwMDAwIGZpbGVzIGluIGEgdmVjdG9yXG4gICAgICAgICAqIHN0b3JlLlxuICAgICAgICAgKi9cbiAgICAgICAgZmlsZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAgICAgICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICAgICAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgICAgICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgICAgICAgKi9cbiAgICAgICAgbWV0YWRhdGE/OiBTaGFyZWQuTWV0YWRhdGEgfCBudWxsO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgbmFtZXNwYWNlIFZlY3RvclN0b3JlIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IHN0cmF0ZWd5LiBUaGlzIHN0cmF0ZWd5IGN1cnJlbnRseSB1c2VzIGEgYG1heF9jaHVua19zaXplX3Rva2Vuc2Agb2ZcbiAgICAgICAgICogYDgwMGAgYW5kIGBjaHVua19vdmVybGFwX3Rva2Vuc2Agb2YgYDQwMGAuXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnQgaW50ZXJmYWNlIEF1dG8ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEFsd2F5cyBgYXV0b2AuXG4gICAgICAgICAgICovXG4gICAgICAgICAgdHlwZTogJ2F1dG8nO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwb3J0IGludGVyZmFjZSBTdGF0aWMge1xuICAgICAgICAgIHN0YXRpYzogU3RhdGljLlN0YXRpYztcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEFsd2F5cyBgc3RhdGljYC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0eXBlOiAnc3RhdGljJztcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cG9ydCBuYW1lc3BhY2UgU3RhdGljIHtcbiAgICAgICAgICBleHBvcnQgaW50ZXJmYWNlIFN0YXRpYyB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBudW1iZXIgb2YgdG9rZW5zIHRoYXQgb3ZlcmxhcCBiZXR3ZWVuIGNodW5rcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDQwMGAuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogTm90ZSB0aGF0IHRoZSBvdmVybGFwIG11c3Qgbm90IGV4Y2VlZCBoYWxmIG9mIGBtYXhfY2h1bmtfc2l6ZV90b2tlbnNgLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjaHVua19vdmVybGFwX3Rva2VuczogbnVtYmVyO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0b2tlbnMgaW4gZWFjaCBjaHVuay4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDgwMGAuIFRoZVxuICAgICAgICAgICAgICogbWluaW11bSB2YWx1ZSBpcyBgMTAwYCBhbmQgdGhlIG1heGltdW0gdmFsdWUgaXMgYDQwOTZgLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBtYXhfY2h1bmtfc2l6ZV90b2tlbnM6IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3Npc3RhbnRVcGRhdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBhc3Npc3RhbnQuIFRoZSBtYXhpbXVtIGxlbmd0aCBpcyA1MTIgY2hhcmFjdGVycy5cbiAgICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBpbnN0cnVjdGlvbnMgdGhhdCB0aGUgYXNzaXN0YW50IHVzZXMuIFRoZSBtYXhpbXVtIGxlbmd0aCBpcyAyNTYsMDAwXG4gICAqIGNoYXJhY3RlcnMuXG4gICAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgKlxuICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbWV0YWRhdGE/OiBTaGFyZWQuTWV0YWRhdGEgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJRCBvZiB0aGUgbW9kZWwgdG8gdXNlLiBZb3UgY2FuIHVzZSB0aGVcbiAgICogW0xpc3QgbW9kZWxzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL21vZGVscy9saXN0KSBBUEkgdG9cbiAgICogc2VlIGFsbCBvZiB5b3VyIGF2YWlsYWJsZSBtb2RlbHMsIG9yIHNlZSBvdXJcbiAgICogW01vZGVsIG92ZXJ2aWV3XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMpIGZvciBkZXNjcmlwdGlvbnMgb2ZcbiAgICogdGhlbS5cbiAgICovXG4gIG1vZGVsPzpcbiAgICB8IChzdHJpbmcgJiB7fSlcbiAgICB8ICdvMy1taW5pJ1xuICAgIHwgJ28zLW1pbmktMjAyNS0wMS0zMSdcbiAgICB8ICdvMSdcbiAgICB8ICdvMS0yMDI0LTEyLTE3J1xuICAgIHwgJ2dwdC00bydcbiAgICB8ICdncHQtNG8tMjAyNC0xMS0yMCdcbiAgICB8ICdncHQtNG8tMjAyNC0wOC0wNidcbiAgICB8ICdncHQtNG8tMjAyNC0wNS0xMydcbiAgICB8ICdncHQtNG8tbWluaSdcbiAgICB8ICdncHQtNG8tbWluaS0yMDI0LTA3LTE4J1xuICAgIHwgJ2dwdC00LjUtcHJldmlldydcbiAgICB8ICdncHQtNC41LXByZXZpZXctMjAyNS0wMi0yNydcbiAgICB8ICdncHQtNC10dXJibydcbiAgICB8ICdncHQtNC10dXJiby0yMDI0LTA0LTA5J1xuICAgIHwgJ2dwdC00LTAxMjUtcHJldmlldydcbiAgICB8ICdncHQtNC10dXJiby1wcmV2aWV3J1xuICAgIHwgJ2dwdC00LTExMDYtcHJldmlldydcbiAgICB8ICdncHQtNC12aXNpb24tcHJldmlldydcbiAgICB8ICdncHQtNCdcbiAgICB8ICdncHQtNC0wMzE0J1xuICAgIHwgJ2dwdC00LTA2MTMnXG4gICAgfCAnZ3B0LTQtMzJrJ1xuICAgIHwgJ2dwdC00LTMyay0wMzE0J1xuICAgIHwgJ2dwdC00LTMyay0wNjEzJ1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8nXG4gICAgfCAnZ3B0LTMuNS10dXJiby0xNmsnXG4gICAgfCAnZ3B0LTMuNS10dXJiby0wNjEzJ1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8tMTEwNidcbiAgICB8ICdncHQtMy41LXR1cmJvLTAxMjUnXG4gICAgfCAnZ3B0LTMuNS10dXJiby0xNmstMDYxMyc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhc3Npc3RhbnQuIFRoZSBtYXhpbXVtIGxlbmd0aCBpcyAyNTYgY2hhcmFjdGVycy5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiAqKm8tc2VyaWVzIG1vZGVscyBvbmx5KipcbiAgICpcbiAgICogQ29uc3RyYWlucyBlZmZvcnQgb24gcmVhc29uaW5nIGZvclxuICAgKiBbcmVhc29uaW5nIG1vZGVsc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3JlYXNvbmluZykuIEN1cnJlbnRseVxuICAgKiBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBgbG93YCwgYG1lZGl1bWAsIGFuZCBgaGlnaGAuIFJlZHVjaW5nIHJlYXNvbmluZyBlZmZvcnQgY2FuXG4gICAqIHJlc3VsdCBpbiBmYXN0ZXIgcmVzcG9uc2VzIGFuZCBmZXdlciB0b2tlbnMgdXNlZCBvbiByZWFzb25pbmcgaW4gYSByZXNwb25zZS5cbiAgICovXG4gIHJlYXNvbmluZ19lZmZvcnQ/OiBTaGFyZWQuUmVhc29uaW5nRWZmb3J0IHwgbnVsbDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBmb3JtYXQgdGhhdCB0aGUgbW9kZWwgbXVzdCBvdXRwdXQuIENvbXBhdGlibGUgd2l0aFxuICAgKiBbR1BULTRvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMjZ3B0LTRvKSxcbiAgICogW0dQVC00IFR1cmJvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMjZ3B0LTQtdHVyYm8tYW5kLWdwdC00KSxcbiAgICogYW5kIGFsbCBHUFQtMy41IFR1cmJvIG1vZGVscyBzaW5jZSBgZ3B0LTMuNS10dXJiby0xMTA2YC5cbiAgICpcbiAgICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX3NjaGVtYVwiLCBcImpzb25fc2NoZW1hXCI6IHsuLi59IH1gIGVuYWJsZXMgU3RydWN0dXJlZFxuICAgKiBPdXRwdXRzIHdoaWNoIGVuc3VyZXMgdGhlIG1vZGVsIHdpbGwgbWF0Y2ggeW91ciBzdXBwbGllZCBKU09OIHNjaGVtYS4gTGVhcm4gbW9yZVxuICAgKiBpbiB0aGVcbiAgICogW1N0cnVjdHVyZWQgT3V0cHV0cyBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3N0cnVjdHVyZWQtb3V0cHV0cykuXG4gICAqXG4gICAqIFNldHRpbmcgdG8gYHsgXCJ0eXBlXCI6IFwianNvbl9vYmplY3RcIiB9YCBlbmFibGVzIEpTT04gbW9kZSwgd2hpY2ggZW5zdXJlcyB0aGVcbiAgICogbWVzc2FnZSB0aGUgbW9kZWwgZ2VuZXJhdGVzIGlzIHZhbGlkIEpTT04uXG4gICAqXG4gICAqICoqSW1wb3J0YW50OioqIHdoZW4gdXNpbmcgSlNPTiBtb2RlLCB5b3UgKiptdXN0KiogYWxzbyBpbnN0cnVjdCB0aGUgbW9kZWwgdG9cbiAgICogcHJvZHVjZSBKU09OIHlvdXJzZWxmIHZpYSBhIHN5c3RlbSBvciB1c2VyIG1lc3NhZ2UuIFdpdGhvdXQgdGhpcywgdGhlIG1vZGVsIG1heVxuICAgKiBnZW5lcmF0ZSBhbiB1bmVuZGluZyBzdHJlYW0gb2Ygd2hpdGVzcGFjZSB1bnRpbCB0aGUgZ2VuZXJhdGlvbiByZWFjaGVzIHRoZSB0b2tlblxuICAgKiBsaW1pdCwgcmVzdWx0aW5nIGluIGEgbG9uZy1ydW5uaW5nIGFuZCBzZWVtaW5nbHkgXCJzdHVja1wiIHJlcXVlc3QuIEFsc28gbm90ZSB0aGF0XG4gICAqIHRoZSBtZXNzYWdlIGNvbnRlbnQgbWF5IGJlIHBhcnRpYWxseSBjdXQgb2ZmIGlmIGBmaW5pc2hfcmVhc29uPVwibGVuZ3RoXCJgLCB3aGljaFxuICAgKiBpbmRpY2F0ZXMgdGhlIGdlbmVyYXRpb24gZXhjZWVkZWQgYG1heF90b2tlbnNgIG9yIHRoZSBjb252ZXJzYXRpb24gZXhjZWVkZWQgdGhlXG4gICAqIG1heCBjb250ZXh0IGxlbmd0aC5cbiAgICovXG4gIHJlc3BvbnNlX2Zvcm1hdD86IFRocmVhZHNBUEkuQXNzaXN0YW50UmVzcG9uc2VGb3JtYXRPcHRpb24gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGF0IHNhbXBsaW5nIHRlbXBlcmF0dXJlIHRvIHVzZSwgYmV0d2VlbiAwIGFuZCAyLiBIaWdoZXIgdmFsdWVzIGxpa2UgMC44IHdpbGxcbiAgICogbWFrZSB0aGUgb3V0cHV0IG1vcmUgcmFuZG9tLCB3aGlsZSBsb3dlciB2YWx1ZXMgbGlrZSAwLjIgd2lsbCBtYWtlIGl0IG1vcmVcbiAgICogZm9jdXNlZCBhbmQgZGV0ZXJtaW5pc3RpYy5cbiAgICovXG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGFzc2lzdGFudCdzIHRvb2xzLiBUaGUgcmVzb3VyY2VzIGFyZVxuICAgKiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB0b29sLiBGb3IgZXhhbXBsZSwgdGhlIGBjb2RlX2ludGVycHJldGVyYCB0b29sIHJlcXVpcmVzXG4gICAqIGEgbGlzdCBvZiBmaWxlIElEcywgd2hpbGUgdGhlIGBmaWxlX3NlYXJjaGAgdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgdmVjdG9yIHN0b3JlXG4gICAqIElEcy5cbiAgICovXG4gIHRvb2xfcmVzb3VyY2VzPzogQXNzaXN0YW50VXBkYXRlUGFyYW1zLlRvb2xSZXNvdXJjZXMgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdG9vbCBlbmFibGVkIG9uIHRoZSBhc3Npc3RhbnQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMTI4IHRvb2xzIHBlclxuICAgKiBhc3Npc3RhbnQuIFRvb2xzIGNhbiBiZSBvZiB0eXBlcyBgY29kZV9pbnRlcnByZXRlcmAsIGBmaWxlX3NlYXJjaGAsIG9yXG4gICAqIGBmdW5jdGlvbmAuXG4gICAqL1xuICB0b29scz86IEFycmF5PEFzc2lzdGFudFRvb2w+O1xuXG4gIC8qKlxuICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBzYW1wbGluZyB3aXRoIHRlbXBlcmF0dXJlLCBjYWxsZWQgbnVjbGV1cyBzYW1wbGluZywgd2hlcmUgdGhlXG4gICAqIG1vZGVsIGNvbnNpZGVycyB0aGUgcmVzdWx0cyBvZiB0aGUgdG9rZW5zIHdpdGggdG9wX3AgcHJvYmFiaWxpdHkgbWFzcy4gU28gMC4xXG4gICAqIG1lYW5zIG9ubHkgdGhlIHRva2VucyBjb21wcmlzaW5nIHRoZSB0b3AgMTAlIHByb2JhYmlsaXR5IG1hc3MgYXJlIGNvbnNpZGVyZWQuXG4gICAqXG4gICAqIFdlIGdlbmVyYWxseSByZWNvbW1lbmQgYWx0ZXJpbmcgdGhpcyBvciB0ZW1wZXJhdHVyZSBidXQgbm90IGJvdGguXG4gICAqL1xuICB0b3BfcD86IG51bWJlciB8IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQXNzaXN0YW50VXBkYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgc2V0IG9mIHJlc291cmNlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBhc3Npc3RhbnQncyB0b29scy4gVGhlIHJlc291cmNlcyBhcmVcbiAgICogc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgdG9vbC4gRm9yIGV4YW1wbGUsIHRoZSBgY29kZV9pbnRlcnByZXRlcmAgdG9vbCByZXF1aXJlc1xuICAgKiBhIGxpc3Qgb2YgZmlsZSBJRHMsIHdoaWxlIHRoZSBgZmlsZV9zZWFyY2hgIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZVxuICAgKiBJRHMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRvb2xSZXNvdXJjZXMge1xuICAgIGNvZGVfaW50ZXJwcmV0ZXI/OiBUb29sUmVzb3VyY2VzLkNvZGVJbnRlcnByZXRlcjtcblxuICAgIGZpbGVfc2VhcmNoPzogVG9vbFJlc291cmNlcy5GaWxlU2VhcmNoO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIENvZGVJbnRlcnByZXRlciB7XG4gICAgICAvKipcbiAgICAgICAqIE92ZXJyaWRlcyB0aGUgbGlzdCBvZlxuICAgICAgICogW2ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIElEcyBtYWRlIGF2YWlsYWJsZVxuICAgICAgICogdG8gdGhlIGBjb2RlX2ludGVycHJldGVyYCB0b29sLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDIwIGZpbGVzIGFzc29jaWF0ZWRcbiAgICAgICAqIHdpdGggdGhlIHRvb2wuXG4gICAgICAgKi9cbiAgICAgIGZpbGVfaWRzPzogQXJyYXk8c3RyaW5nPjtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIEZpbGVTZWFyY2gge1xuICAgICAgLyoqXG4gICAgICAgKiBPdmVycmlkZXMgdGhlXG4gICAgICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgICAgICogYXR0YWNoZWQgdG8gdGhpcyBhc3Npc3RhbnQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMSB2ZWN0b3Igc3RvcmUgYXR0YWNoZWQgdG9cbiAgICAgICAqIHRoZSBhc3Npc3RhbnQuXG4gICAgICAgKi9cbiAgICAgIHZlY3Rvcl9zdG9yZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2lzdGFudExpc3RQYXJhbXMgZXh0ZW5kcyBDdXJzb3JQYWdlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgY3Vyc29yIGZvciB1c2UgaW4gcGFnaW5hdGlvbi4gYGJlZm9yZWAgaXMgYW4gb2JqZWN0IElEIHRoYXQgZGVmaW5lcyB5b3VyIHBsYWNlXG4gICAqIGluIHRoZSBsaXN0LiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBtYWtlIGEgbGlzdCByZXF1ZXN0IGFuZCByZWNlaXZlIDEwMCBvYmplY3RzLFxuICAgKiBzdGFydGluZyB3aXRoIG9ial9mb28sIHlvdXIgc3Vic2VxdWVudCBjYWxsIGNhbiBpbmNsdWRlIGJlZm9yZT1vYmpfZm9vIGluIG9yZGVyXG4gICAqIHRvIGZldGNoIHRoZSBwcmV2aW91cyBwYWdlIG9mIHRoZSBsaXN0LlxuICAgKi9cbiAgYmVmb3JlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTb3J0IG9yZGVyIGJ5IHRoZSBgY3JlYXRlZF9hdGAgdGltZXN0YW1wIG9mIHRoZSBvYmplY3RzLiBgYXNjYCBmb3IgYXNjZW5kaW5nXG4gICAqIG9yZGVyIGFuZCBgZGVzY2AgZm9yIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqL1xuICBvcmRlcj86ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG5Bc3Npc3RhbnRzLkFzc2lzdGFudHNQYWdlID0gQXNzaXN0YW50c1BhZ2U7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBBc3Npc3RhbnRzIHtcbiAgZXhwb3J0IHtcbiAgICB0eXBlIEFzc2lzdGFudCBhcyBBc3Npc3RhbnQsXG4gICAgdHlwZSBBc3Npc3RhbnREZWxldGVkIGFzIEFzc2lzdGFudERlbGV0ZWQsXG4gICAgdHlwZSBBc3Npc3RhbnRTdHJlYW1FdmVudCBhcyBBc3Npc3RhbnRTdHJlYW1FdmVudCxcbiAgICB0eXBlIEFzc2lzdGFudFRvb2wgYXMgQXNzaXN0YW50VG9vbCxcbiAgICB0eXBlIENvZGVJbnRlcnByZXRlclRvb2wgYXMgQ29kZUludGVycHJldGVyVG9vbCxcbiAgICB0eXBlIEZpbGVTZWFyY2hUb29sIGFzIEZpbGVTZWFyY2hUb29sLFxuICAgIHR5cGUgRnVuY3Rpb25Ub29sIGFzIEZ1bmN0aW9uVG9vbCxcbiAgICB0eXBlIE1lc3NhZ2VTdHJlYW1FdmVudCBhcyBNZXNzYWdlU3RyZWFtRXZlbnQsXG4gICAgdHlwZSBSdW5TdGVwU3RyZWFtRXZlbnQgYXMgUnVuU3RlcFN0cmVhbUV2ZW50LFxuICAgIHR5cGUgUnVuU3RyZWFtRXZlbnQgYXMgUnVuU3RyZWFtRXZlbnQsXG4gICAgdHlwZSBUaHJlYWRTdHJlYW1FdmVudCBhcyBUaHJlYWRTdHJlYW1FdmVudCxcbiAgICBBc3Npc3RhbnRzUGFnZSBhcyBBc3Npc3RhbnRzUGFnZSxcbiAgICB0eXBlIEFzc2lzdGFudENyZWF0ZVBhcmFtcyBhcyBBc3Npc3RhbnRDcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBBc3Npc3RhbnRVcGRhdGVQYXJhbXMgYXMgQXNzaXN0YW50VXBkYXRlUGFyYW1zLFxuICAgIHR5cGUgQXNzaXN0YW50TGlzdFBhcmFtcyBhcyBBc3Npc3RhbnRMaXN0UGFyYW1zLFxuICB9O1xufVxuIiwgImltcG9ydCB7IHR5cGUgQ2hhdENvbXBsZXRpb25SdW5uZXIgfSBmcm9tICcuL0NoYXRDb21wbGV0aW9uUnVubmVyJztcbmltcG9ydCB7IHR5cGUgQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdSdW5uZXIgfSBmcm9tICcuL0NoYXRDb21wbGV0aW9uU3RyZWFtaW5nUnVubmVyJztcbmltcG9ydCB7IEpTT05TY2hlbWEgfSBmcm9tICcuL2pzb25zY2hlbWEnO1xuXG50eXBlIFByb21pc2VPclZhbHVlPFQ+ID0gVCB8IFByb21pc2U8VD47XG5cbmV4cG9ydCB0eXBlIFJ1bm5hYmxlRnVuY3Rpb25XaXRoUGFyc2U8QXJncyBleHRlbmRzIG9iamVjdD4gPSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gYXJncyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYHBhcnNlYC5cbiAgICogQHBhcmFtIHJ1bm5lciB0aGUgcnVubmVyIGV2YWx1YXRpbmcgdGhpcyBjYWxsYmFjay5cbiAgICogQHJldHVybnMgYSBzdHJpbmcgdG8gc2VuZCBiYWNrIHRvIE9wZW5BSS5cbiAgICovXG4gIGZ1bmN0aW9uOiAoXG4gICAgYXJnczogQXJncyxcbiAgICBydW5uZXI6IENoYXRDb21wbGV0aW9uUnVubmVyPHVua25vd24+IHwgQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdSdW5uZXI8dW5rbm93bj4sXG4gICkgPT4gUHJvbWlzZU9yVmFsdWU8dW5rbm93bj47XG4gIC8qKlxuICAgKiBAcGFyYW0gaW5wdXQgdGhlIHJhdyBhcmdzIGZyb20gdGhlIE9wZW5BSSBmdW5jdGlvbiBjYWxsLlxuICAgKiBAcmV0dXJucyB0aGUgcGFyc2VkIGFyZ3VtZW50cyB0byBwYXNzIHRvIGBmdW5jdGlvbmBcbiAgICovXG4gIHBhcnNlOiAoaW5wdXQ6IHN0cmluZykgPT4gUHJvbWlzZU9yVmFsdWU8QXJncz47XG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVycyB0aGUgZnVuY3Rpb24gYWNjZXB0cywgZGVzY3JpYmVzIGFzIGEgSlNPTiBTY2hlbWEgb2JqZWN0LlxuICAgKi9cbiAgcGFyYW1ldGVyczogSlNPTlNjaGVtYTtcbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgZnVuY3Rpb24gZG9lcywgdXNlZCBieSB0aGUgbW9kZWwgdG8gY2hvb3NlIHdoZW4gYW5kIGhvdyB0byBjYWxsIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLiBXaWxsIGRlZmF1bHQgdG8gZnVuY3Rpb24ubmFtZSBpZiBvbWl0dGVkLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc3RyaWN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1bm5hYmxlRnVuY3Rpb25XaXRob3V0UGFyc2UgPSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gYXJncyB0aGUgcmF3IGFyZ3MgZnJvbSB0aGUgT3BlbkFJIGZ1bmN0aW9uIGNhbGwuXG4gICAqIEByZXR1cm5zIGEgc3RyaW5nIHRvIHNlbmQgYmFjayB0byBPcGVuQUlcbiAgICovXG4gIGZ1bmN0aW9uOiAoXG4gICAgYXJnczogc3RyaW5nLFxuICAgIHJ1bm5lcjogQ2hhdENvbXBsZXRpb25SdW5uZXI8dW5rbm93bj4gfCBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1J1bm5lcjx1bmtub3duPixcbiAgKSA9PiBQcm9taXNlT3JWYWx1ZTx1bmtub3duPjtcbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXJzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLCBkZXNjcmliZXMgYXMgYSBKU09OIFNjaGVtYSBvYmplY3QuXG4gICAqL1xuICBwYXJhbWV0ZXJzOiBKU09OU2NoZW1hO1xuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzLCB1c2VkIGJ5IHRoZSBtb2RlbCB0byBjaG9vc2Ugd2hlbiBhbmQgaG93IHRvIGNhbGwgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQuIFdpbGwgZGVmYXVsdCB0byBmdW5jdGlvbi5uYW1lIGlmIG9taXR0ZWQuXG4gICAqL1xuICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzdHJpY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUnVubmFibGVGdW5jdGlvbjxBcmdzIGV4dGVuZHMgb2JqZWN0IHwgc3RyaW5nPiA9XG4gIEFyZ3MgZXh0ZW5kcyBzdHJpbmcgPyBSdW5uYWJsZUZ1bmN0aW9uV2l0aG91dFBhcnNlXG4gIDogQXJncyBleHRlbmRzIG9iamVjdCA/IFJ1bm5hYmxlRnVuY3Rpb25XaXRoUGFyc2U8QXJncz5cbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgUnVubmFibGVUb29sRnVuY3Rpb248QXJncyBleHRlbmRzIG9iamVjdCB8IHN0cmluZz4gPVxuICBBcmdzIGV4dGVuZHMgc3RyaW5nID8gUnVubmFibGVUb29sRnVuY3Rpb25XaXRob3V0UGFyc2VcbiAgOiBBcmdzIGV4dGVuZHMgb2JqZWN0ID8gUnVubmFibGVUb29sRnVuY3Rpb25XaXRoUGFyc2U8QXJncz5cbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgUnVubmFibGVUb29sRnVuY3Rpb25XaXRob3V0UGFyc2UgPSB7XG4gIHR5cGU6ICdmdW5jdGlvbic7XG4gIGZ1bmN0aW9uOiBSdW5uYWJsZUZ1bmN0aW9uV2l0aG91dFBhcnNlO1xufTtcbmV4cG9ydCB0eXBlIFJ1bm5hYmxlVG9vbEZ1bmN0aW9uV2l0aFBhcnNlPEFyZ3MgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICB0eXBlOiAnZnVuY3Rpb24nO1xuICBmdW5jdGlvbjogUnVubmFibGVGdW5jdGlvbldpdGhQYXJzZTxBcmdzPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1J1bm5hYmxlRnVuY3Rpb25XaXRoUGFyc2U8QXJncyBleHRlbmRzIG9iamVjdD4oXG4gIGZuOiBhbnksXG4pOiBmbiBpcyBSdW5uYWJsZUZ1bmN0aW9uV2l0aFBhcnNlPEFyZ3M+IHtcbiAgcmV0dXJuIHR5cGVvZiAoZm4gYXMgYW55KS5wYXJzZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IHR5cGUgQmFzZUZ1bmN0aW9uc0FyZ3MgPSByZWFkb25seSAob2JqZWN0IHwgc3RyaW5nKVtdO1xuXG5leHBvcnQgdHlwZSBSdW5uYWJsZUZ1bmN0aW9uczxGdW5jdGlvbnNBcmdzIGV4dGVuZHMgQmFzZUZ1bmN0aW9uc0FyZ3M+ID1cbiAgW2FueVtdXSBleHRlbmRzIFtGdW5jdGlvbnNBcmdzXSA/IHJlYWRvbmx5IFJ1bm5hYmxlRnVuY3Rpb248YW55PltdXG4gIDoge1xuICAgICAgW0luZGV4IGluIGtleW9mIEZ1bmN0aW9uc0FyZ3NdOiBJbmRleCBleHRlbmRzIG51bWJlciA/IFJ1bm5hYmxlRnVuY3Rpb248RnVuY3Rpb25zQXJnc1tJbmRleF0+XG4gICAgICA6IEZ1bmN0aW9uc0FyZ3NbSW5kZXhdO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIFJ1bm5hYmxlVG9vbHM8RnVuY3Rpb25zQXJncyBleHRlbmRzIEJhc2VGdW5jdGlvbnNBcmdzPiA9XG4gIFthbnlbXV0gZXh0ZW5kcyBbRnVuY3Rpb25zQXJnc10gPyByZWFkb25seSBSdW5uYWJsZVRvb2xGdW5jdGlvbjxhbnk+W11cbiAgOiB7XG4gICAgICBbSW5kZXggaW4ga2V5b2YgRnVuY3Rpb25zQXJnc106IEluZGV4IGV4dGVuZHMgbnVtYmVyID8gUnVubmFibGVUb29sRnVuY3Rpb248RnVuY3Rpb25zQXJnc1tJbmRleF0+XG4gICAgICA6IEZ1bmN0aW9uc0FyZ3NbSW5kZXhdO1xuICAgIH07XG5cbi8qKlxuICogVGhpcyBpcyBoZWxwZXIgY2xhc3MgZm9yIHBhc3NpbmcgYSBgZnVuY3Rpb25gIGFuZCBgcGFyc2VgIHdoZXJlIHRoZSBgZnVuY3Rpb25gXG4gKiBhcmd1bWVudCB0eXBlIG1hdGNoZXMgdGhlIGBwYXJzZWAgcmV0dXJuIHR5cGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgLSBwbGVhc2UgdXNlIFBhcnNpbmdUb29sRnVuY3Rpb24gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcnNpbmdGdW5jdGlvbjxBcmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIGZ1bmN0aW9uOiBSdW5uYWJsZUZ1bmN0aW9uV2l0aFBhcnNlPEFyZ3M+WydmdW5jdGlvbiddO1xuICBwYXJzZTogUnVubmFibGVGdW5jdGlvbldpdGhQYXJzZTxBcmdzPlsncGFyc2UnXTtcbiAgcGFyYW1ldGVyczogUnVubmFibGVGdW5jdGlvbldpdGhQYXJzZTxBcmdzPlsncGFyYW1ldGVycyddO1xuICBkZXNjcmlwdGlvbjogUnVubmFibGVGdW5jdGlvbldpdGhQYXJzZTxBcmdzPlsnZGVzY3JpcHRpb24nXTtcbiAgbmFtZT86IFJ1bm5hYmxlRnVuY3Rpb25XaXRoUGFyc2U8QXJncz5bJ25hbWUnXTtcblxuICBjb25zdHJ1Y3RvcihpbnB1dDogUnVubmFibGVGdW5jdGlvbldpdGhQYXJzZTxBcmdzPikge1xuICAgIHRoaXMuZnVuY3Rpb24gPSBpbnB1dC5mdW5jdGlvbjtcbiAgICB0aGlzLnBhcnNlID0gaW5wdXQucGFyc2U7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gaW5wdXQucGFyYW1ldGVycztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gaW5wdXQuZGVzY3JpcHRpb247XG4gICAgdGhpcy5uYW1lID0gaW5wdXQubmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgaGVscGVyIGNsYXNzIGZvciBwYXNzaW5nIGEgYGZ1bmN0aW9uYCBhbmQgYHBhcnNlYCB3aGVyZSB0aGUgYGZ1bmN0aW9uYFxuICogYXJndW1lbnQgdHlwZSBtYXRjaGVzIHRoZSBgcGFyc2VgIHJldHVybiB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgUGFyc2luZ1Rvb2xGdW5jdGlvbjxBcmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIHR5cGU6ICdmdW5jdGlvbic7XG4gIGZ1bmN0aW9uOiBSdW5uYWJsZUZ1bmN0aW9uV2l0aFBhcnNlPEFyZ3M+O1xuXG4gIGNvbnN0cnVjdG9yKGlucHV0OiBSdW5uYWJsZUZ1bmN0aW9uV2l0aFBhcnNlPEFyZ3M+KSB7XG4gICAgdGhpcy50eXBlID0gJ2Z1bmN0aW9uJztcbiAgICB0aGlzLmZ1bmN0aW9uID0gaW5wdXQ7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICB0eXBlIENoYXRDb21wbGV0aW9uQXNzaXN0YW50TWVzc2FnZVBhcmFtLFxuICB0eXBlIENoYXRDb21wbGV0aW9uRnVuY3Rpb25NZXNzYWdlUGFyYW0sXG4gIHR5cGUgQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0sXG4gIHR5cGUgQ2hhdENvbXBsZXRpb25Ub29sTWVzc2FnZVBhcmFtLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5leHBvcnQgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gKFxuICBtZXNzYWdlOiBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBtZXNzYWdlIGlzIENoYXRDb21wbGV0aW9uQXNzaXN0YW50TWVzc2FnZVBhcmFtID0+IHtcbiAgcmV0dXJuIG1lc3NhZ2U/LnJvbGUgPT09ICdhc3Npc3RhbnQnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb25NZXNzYWdlID0gKFxuICBtZXNzYWdlOiBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBtZXNzYWdlIGlzIENoYXRDb21wbGV0aW9uRnVuY3Rpb25NZXNzYWdlUGFyYW0gPT4ge1xuICByZXR1cm4gbWVzc2FnZT8ucm9sZSA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbmV4cG9ydCBjb25zdCBpc1Rvb2xNZXNzYWdlID0gKFxuICBtZXNzYWdlOiBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBtZXNzYWdlIGlzIENoYXRDb21wbGV0aW9uVG9vbE1lc3NhZ2VQYXJhbSA9PiB7XG4gIHJldHVybiBtZXNzYWdlPy5yb2xlID09PSAndG9vbCc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmVzZW50PFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmogaXMgVCB7XG4gIHJldHVybiBvYmogIT0gbnVsbDtcbn1cbiIsICJpbXBvcnQgeyBBUElVc2VyQWJvcnRFcnJvciwgT3BlbkFJRXJyb3IgfSBmcm9tICcuLi9lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBFdmVudFN0cmVhbTxFdmVudFR5cGVzIGV4dGVuZHMgQmFzZUV2ZW50cz4ge1xuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgI2Nvbm5lY3RlZFByb21pc2U6IFByb21pc2U8dm9pZD47XG4gICNyZXNvbHZlQ29ubmVjdGVkUHJvbWlzZTogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAjcmVqZWN0Q29ubmVjdGVkUHJvbWlzZTogKGVycm9yOiBPcGVuQUlFcnJvcikgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICNlbmRQcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xuICAjcmVzb2x2ZUVuZFByb21pc2U6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgI3JlamVjdEVuZFByb21pc2U6IChlcnJvcjogT3BlbkFJRXJyb3IpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAjbGlzdGVuZXJzOiB7XG4gICAgW0V2ZW50IGluIGtleW9mIEV2ZW50VHlwZXNdPzogRXZlbnRMaXN0ZW5lcnM8RXZlbnRUeXBlcywgRXZlbnQ+O1xuICB9ID0ge307XG5cbiAgI2VuZGVkID0gZmFsc2U7XG4gICNlcnJvcmVkID0gZmFsc2U7XG4gICNhYm9ydGVkID0gZmFsc2U7XG4gICNjYXRjaGluZ1Byb21pc2VDcmVhdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4jY29ubmVjdGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuI3Jlc29sdmVDb25uZWN0ZWRQcm9taXNlID0gcmVzb2x2ZTtcbiAgICAgIHRoaXMuI3JlamVjdENvbm5lY3RlZFByb21pc2UgPSByZWplY3Q7XG4gICAgfSk7XG5cbiAgICB0aGlzLiNlbmRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy4jcmVzb2x2ZUVuZFByb21pc2UgPSByZXNvbHZlO1xuICAgICAgdGhpcy4jcmVqZWN0RW5kUHJvbWlzZSA9IHJlamVjdDtcbiAgICB9KTtcblxuICAgIC8vIERvbid0IGxldCB0aGVzZSBwcm9taXNlcyBjYXVzZSB1bmhhbmRsZWQgcmVqZWN0aW9uIGVycm9ycy5cbiAgICAvLyB3ZSB3aWxsIG1hbnVhbGx5IGNhdXNlIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gZXJyb3IgbGF0ZXJcbiAgICAvLyBpZiB0aGUgdXNlciBoYXNuJ3QgcmVnaXN0ZXJlZCBhbnkgZXJyb3IgbGlzdGVuZXIgb3IgY2FsbGVkXG4gICAgLy8gYW55IHByb21pc2UtcmV0dXJuaW5nIG1ldGhvZC5cbiAgICB0aGlzLiNjb25uZWN0ZWRQcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcbiAgICB0aGlzLiNlbmRQcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcnVuKHRoaXM6IEV2ZW50U3RyZWFtPEV2ZW50VHlwZXM+LCBleGVjdXRvcjogKCkgPT4gUHJvbWlzZTxhbnk+KSB7XG4gICAgLy8gVW5mb3J0dW5hdGVseSBpZiB3ZSBjYWxsIGBleGVjdXRvcigpYCBpbW1lZGlhdGVseSB3ZSBnZXQgcnVudGltZSBlcnJvcnMgYWJvdXRcbiAgICAvLyByZWZlcmVuY2VzIHRvIGB0aGlzYCBiZWZvcmUgdGhlIGBzdXBlcigpYCBjb25zdHJ1Y3RvciBjYWxsIHJldHVybnMuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBleGVjdXRvcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9lbWl0RmluYWwoKTtcbiAgICAgICAgdGhpcy5fZW1pdCgnZW5kJyk7XG4gICAgICB9LCB0aGlzLiNoYW5kbGVFcnJvci5iaW5kKHRoaXMpKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfY29ubmVjdGVkKHRoaXM6IEV2ZW50U3RyZWFtPEV2ZW50VHlwZXM+KSB7XG4gICAgaWYgKHRoaXMuZW5kZWQpIHJldHVybjtcbiAgICB0aGlzLiNyZXNvbHZlQ29ubmVjdGVkUHJvbWlzZSgpO1xuICAgIHRoaXMuX2VtaXQoJ2Nvbm5lY3QnKTtcbiAgfVxuXG4gIGdldCBlbmRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jZW5kZWQ7XG4gIH1cblxuICBnZXQgZXJyb3JlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jZXJyb3JlZDtcbiAgfVxuXG4gIGdldCBhYm9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNhYm9ydGVkO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5jb250cm9sbGVyLmFib3J0KCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdGVuZXJzIGFycmF5IGZvciB0aGUgZXZlbnQuXG4gICAqIE5vIGNoZWNrcyBhcmUgbWFkZSB0byBzZWUgaWYgdGhlIGxpc3RlbmVyIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQuIE11bHRpcGxlIGNhbGxzIHBhc3NpbmdcbiAgICogdGhlIHNhbWUgY29tYmluYXRpb24gb2YgZXZlbnQgYW5kIGxpc3RlbmVyIHdpbGwgcmVzdWx0IGluIHRoZSBsaXN0ZW5lciBiZWluZyBhZGRlZCwgYW5kXG4gICAqIGNhbGxlZCwgbXVsdGlwbGUgdGltZXMuXG4gICAqIEByZXR1cm5zIHRoaXMgQ2hhdENvbXBsZXRpb25TdHJlYW0sIHNvIHRoYXQgY2FsbHMgY2FuIGJlIGNoYWluZWRcbiAgICovXG4gIG9uPEV2ZW50IGV4dGVuZHMga2V5b2YgRXZlbnRUeXBlcz4oZXZlbnQ6IEV2ZW50LCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lcjxFdmVudFR5cGVzLCBFdmVudD4pOiB0aGlzIHtcbiAgICBjb25zdCBsaXN0ZW5lcnM6IEV2ZW50TGlzdGVuZXJzPEV2ZW50VHlwZXMsIEV2ZW50PiA9XG4gICAgICB0aGlzLiNsaXN0ZW5lcnNbZXZlbnRdIHx8ICh0aGlzLiNsaXN0ZW5lcnNbZXZlbnRdID0gW10pO1xuICAgIGxpc3RlbmVycy5wdXNoKHsgbGlzdGVuZXIgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGxpc3RlbmVyIGZyb20gdGhlIGxpc3RlbmVyIGFycmF5IGZvciB0aGUgZXZlbnQuXG4gICAqIG9mZigpIHdpbGwgcmVtb3ZlLCBhdCBtb3N0LCBvbmUgaW5zdGFuY2Ugb2YgYSBsaXN0ZW5lciBmcm9tIHRoZSBsaXN0ZW5lciBhcnJheS4gSWYgYW55IHNpbmdsZVxuICAgKiBsaXN0ZW5lciBoYXMgYmVlbiBhZGRlZCBtdWx0aXBsZSB0aW1lcyB0byB0aGUgbGlzdGVuZXIgYXJyYXkgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQsIHRoZW5cbiAgICogb2ZmKCkgbXVzdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gcmVtb3ZlIGVhY2ggaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHRoaXMgQ2hhdENvbXBsZXRpb25TdHJlYW0sIHNvIHRoYXQgY2FsbHMgY2FuIGJlIGNoYWluZWRcbiAgICovXG4gIG9mZjxFdmVudCBleHRlbmRzIGtleW9mIEV2ZW50VHlwZXM+KGV2ZW50OiBFdmVudCwgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXI8RXZlbnRUeXBlcywgRXZlbnQ+KTogdGhpcyB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy4jbGlzdGVuZXJzW2V2ZW50XTtcbiAgICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgaW5kZXggPSBsaXN0ZW5lcnMuZmluZEluZGV4KChsKSA9PiBsLmxpc3RlbmVyID09PSBsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBvbmUtdGltZSBsaXN0ZW5lciBmdW5jdGlvbiBmb3IgdGhlIGV2ZW50LiBUaGUgbmV4dCB0aW1lIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQsXG4gICAqIHRoaXMgbGlzdGVuZXIgaXMgcmVtb3ZlZCBhbmQgdGhlbiBpbnZva2VkLlxuICAgKiBAcmV0dXJucyB0aGlzIENoYXRDb21wbGV0aW9uU3RyZWFtLCBzbyB0aGF0IGNhbGxzIGNhbiBiZSBjaGFpbmVkXG4gICAqL1xuICBvbmNlPEV2ZW50IGV4dGVuZHMga2V5b2YgRXZlbnRUeXBlcz4oZXZlbnQ6IEV2ZW50LCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lcjxFdmVudFR5cGVzLCBFdmVudD4pOiB0aGlzIHtcbiAgICBjb25zdCBsaXN0ZW5lcnM6IEV2ZW50TGlzdGVuZXJzPEV2ZW50VHlwZXMsIEV2ZW50PiA9XG4gICAgICB0aGlzLiNsaXN0ZW5lcnNbZXZlbnRdIHx8ICh0aGlzLiNsaXN0ZW5lcnNbZXZlbnRdID0gW10pO1xuICAgIGxpc3RlbmVycy5wdXNoKHsgbGlzdGVuZXIsIG9uY2U6IHRydWUgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGAub25jZSgpYCwgYnV0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIG5leHQgdGltZVxuICAgKiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLCBpbnN0ZWFkIG9mIGNhbGxpbmcgYSBsaXN0ZW5lciBjYWxsYmFjay5cbiAgICogQHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIG5leHQgdGltZSBnaXZlbiBldmVudCBpcyB0cmlnZ2VyZWQsXG4gICAqIG9yIHJlamVjdHMgaWYgYW4gZXJyb3IgaXMgZW1pdHRlZC4gIChJZiB5b3UgcmVxdWVzdCB0aGUgJ2Vycm9yJyBldmVudCxcbiAgICogcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBlcnJvcikuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHN0cmVhbS5lbWl0dGVkKCdtZXNzYWdlJykgLy8gcmVqZWN0cyBpZiB0aGUgc3RyZWFtIGVycm9yc1xuICAgKi9cbiAgZW1pdHRlZDxFdmVudCBleHRlbmRzIGtleW9mIEV2ZW50VHlwZXM+KFxuICAgIGV2ZW50OiBFdmVudCxcbiAgKTogUHJvbWlzZTxcbiAgICBFdmVudFBhcmFtZXRlcnM8RXZlbnRUeXBlcywgRXZlbnQ+IGV4dGVuZHMgW2luZmVyIFBhcmFtXSA/IFBhcmFtXG4gICAgOiBFdmVudFBhcmFtZXRlcnM8RXZlbnRUeXBlcywgRXZlbnQ+IGV4dGVuZHMgW10gPyB2b2lkXG4gICAgOiBFdmVudFBhcmFtZXRlcnM8RXZlbnRUeXBlcywgRXZlbnQ+XG4gID4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLiNjYXRjaGluZ1Byb21pc2VDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIGlmIChldmVudCAhPT0gJ2Vycm9yJykgdGhpcy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICB0aGlzLm9uY2UoZXZlbnQsIHJlc29sdmUgYXMgYW55KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRvbmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy4jY2F0Y2hpbmdQcm9taXNlQ3JlYXRlZCA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy4jZW5kUHJvbWlzZTtcbiAgfVxuXG4gICNoYW5kbGVFcnJvcih0aGlzOiBFdmVudFN0cmVhbTxFdmVudFR5cGVzPiwgZXJyb3I6IHVua25vd24pIHtcbiAgICB0aGlzLiNlcnJvcmVkID0gdHJ1ZTtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgIGVycm9yID0gbmV3IEFQSVVzZXJBYm9ydEVycm9yKCk7XG4gICAgfVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFQSVVzZXJBYm9ydEVycm9yKSB7XG4gICAgICB0aGlzLiNhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLl9lbWl0KCdhYm9ydCcsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgT3BlbkFJRXJyb3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnN0IG9wZW5BSUVycm9yOiBPcGVuQUlFcnJvciA9IG5ldyBPcGVuQUlFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9wZW5BSUVycm9yLmNhdXNlID0gZXJyb3I7XG4gICAgICByZXR1cm4gdGhpcy5fZW1pdCgnZXJyb3InLCBvcGVuQUlFcnJvcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9lbWl0KCdlcnJvcicsIG5ldyBPcGVuQUlFcnJvcihTdHJpbmcoZXJyb3IpKSk7XG4gIH1cblxuICBfZW1pdDxFdmVudCBleHRlbmRzIGtleW9mIEJhc2VFdmVudHM+KGV2ZW50OiBFdmVudCwgLi4uYXJnczogRXZlbnRQYXJhbWV0ZXJzPEJhc2VFdmVudHMsIEV2ZW50Pik6IHZvaWQ7XG4gIF9lbWl0PEV2ZW50IGV4dGVuZHMga2V5b2YgRXZlbnRUeXBlcz4oZXZlbnQ6IEV2ZW50LCAuLi5hcmdzOiBFdmVudFBhcmFtZXRlcnM8RXZlbnRUeXBlcywgRXZlbnQ+KTogdm9pZDtcbiAgX2VtaXQ8RXZlbnQgZXh0ZW5kcyBrZXlvZiBFdmVudFR5cGVzPihcbiAgICB0aGlzOiBFdmVudFN0cmVhbTxFdmVudFR5cGVzPixcbiAgICBldmVudDogRXZlbnQsXG4gICAgLi4uYXJnczogRXZlbnRQYXJhbWV0ZXJzPEV2ZW50VHlwZXMsIEV2ZW50PlxuICApIHtcbiAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3QgZW1pdCBhbnkgZXZlbnRzIGFmdGVyIGVuZFxuICAgIGlmICh0aGlzLiNlbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudCA9PT0gJ2VuZCcpIHtcbiAgICAgIHRoaXMuI2VuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuI3Jlc29sdmVFbmRQcm9taXNlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdGVuZXJzOiBFdmVudExpc3RlbmVyczxFdmVudFR5cGVzLCBFdmVudD4gfCB1bmRlZmluZWQgPSB0aGlzLiNsaXN0ZW5lcnNbZXZlbnRdO1xuICAgIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuI2xpc3RlbmVyc1tldmVudF0gPSBsaXN0ZW5lcnMuZmlsdGVyKChsKSA9PiAhbC5vbmNlKSBhcyBhbnk7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgoeyBsaXN0ZW5lciB9OiBhbnkpID0+IGxpc3RlbmVyKC4uLihhcmdzIGFzIGFueSkpKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQgPT09ICdhYm9ydCcpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gYXJnc1swXSBhcyBBUElVc2VyQWJvcnRFcnJvcjtcbiAgICAgIGlmICghdGhpcy4jY2F0Y2hpbmdQcm9taXNlQ3JlYXRlZCAmJiAhbGlzdGVuZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgdGhpcy4jcmVqZWN0Q29ubmVjdGVkUHJvbWlzZShlcnJvcik7XG4gICAgICB0aGlzLiNyZWplY3RFbmRQcm9taXNlKGVycm9yKTtcbiAgICAgIHRoaXMuX2VtaXQoJ2VuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudCA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTk9URTogX2VtaXQoJ2Vycm9yJywgZXJyb3IpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tICNoYW5kbGVFcnJvcigpLlxuXG4gICAgICBjb25zdCBlcnJvciA9IGFyZ3NbMF0gYXMgT3BlbkFJRXJyb3I7XG4gICAgICBpZiAoIXRoaXMuI2NhdGNoaW5nUHJvbWlzZUNyZWF0ZWQgJiYgIWxpc3RlbmVycz8ubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRyaWdnZXIgYW4gdW5oYW5kbGVkIHJlamVjdGlvbiBpZiB0aGUgdXNlciBoYXNuJ3QgcmVnaXN0ZXJlZCBhbnkgZXJyb3IgaGFuZGxlcnMuXG4gICAgICAgIC8vIElmIHlvdSBhcmUgc2VlaW5nIHN0YWNrIHRyYWNlcyBoZXJlLCBtYWtlIHN1cmUgdG8gaGFuZGxlIGVycm9ycyB2aWEgZWl0aGVyOlxuICAgICAgICAvLyAtIHJ1bm5lci5vbignZXJyb3InLCAoKSA9PiAuLi4pXG4gICAgICAgIC8vIC0gYXdhaXQgcnVubmVyLmRvbmUoKVxuICAgICAgICAvLyAtIGF3YWl0IHJ1bm5lci5maW5hbENoYXRDb21wbGV0aW9uKClcbiAgICAgICAgLy8gLSBldGMuXG4gICAgICAgIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuI3JlamVjdENvbm5lY3RlZFByb21pc2UoZXJyb3IpO1xuICAgICAgdGhpcy4jcmVqZWN0RW5kUHJvbWlzZShlcnJvcik7XG4gICAgICB0aGlzLl9lbWl0KCdlbmQnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2VtaXRGaW5hbCgpOiB2b2lkIHt9XG59XG5cbnR5cGUgRXZlbnRMaXN0ZW5lcjxFdmVudHMsIEV2ZW50VHlwZSBleHRlbmRzIGtleW9mIEV2ZW50cz4gPSBFdmVudHNbRXZlbnRUeXBlXTtcblxudHlwZSBFdmVudExpc3RlbmVyczxFdmVudHMsIEV2ZW50VHlwZSBleHRlbmRzIGtleW9mIEV2ZW50cz4gPSBBcnJheTx7XG4gIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyPEV2ZW50cywgRXZlbnRUeXBlPjtcbiAgb25jZT86IGJvb2xlYW47XG59PjtcblxuZXhwb3J0IHR5cGUgRXZlbnRQYXJhbWV0ZXJzPEV2ZW50cywgRXZlbnRUeXBlIGV4dGVuZHMga2V5b2YgRXZlbnRzPiA9IHtcbiAgW0V2ZW50IGluIEV2ZW50VHlwZV06IEV2ZW50TGlzdGVuZXI8RXZlbnRzLCBFdmVudFR5cGU+IGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIFApID0+IGFueSA/IFAgOiBuZXZlcjtcbn1bRXZlbnRUeXBlXTtcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRXZlbnRzIHtcbiAgY29ubmVjdDogKCkgPT4gdm9pZDtcbiAgZXJyb3I6IChlcnJvcjogT3BlbkFJRXJyb3IpID0+IHZvaWQ7XG4gIGFib3J0OiAoZXJyb3I6IEFQSVVzZXJBYm9ydEVycm9yKSA9PiB2b2lkO1xuICBlbmQ6ICgpID0+IHZvaWQ7XG59XG4iLCAiaW1wb3J0IHtcbiAgQ2hhdENvbXBsZXRpb24sXG4gIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLFxuICBDaGF0Q29tcGxldGlvbk1lc3NhZ2VUb29sQ2FsbCxcbiAgQ2hhdENvbXBsZXRpb25Ub29sLFxufSBmcm9tICcuLi9yZXNvdXJjZXMvY2hhdC9jb21wbGV0aW9ucyc7XG5pbXBvcnQge1xuICBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1Rvb2xSdW5uZXJQYXJhbXMsXG4gIENoYXRDb21wbGV0aW9uU3RyZWFtUGFyYW1zLFxuICBDaGF0Q29tcGxldGlvblRvb2xSdW5uZXJQYXJhbXMsXG4gIFBhcnNlZENoYXRDb21wbGV0aW9uLFxuICBQYXJzZWRDaG9pY2UsXG4gIFBhcnNlZEZ1bmN0aW9uVG9vbENhbGwsXG59IGZyb20gJy4uL3Jlc291cmNlcy9iZXRhL2NoYXQvY29tcGxldGlvbnMnO1xuaW1wb3J0IHsgUmVzcG9uc2VGb3JtYXRKU09OU2NoZW1hIH0gZnJvbSAnLi4vcmVzb3VyY2VzL3NoYXJlZCc7XG5pbXBvcnQgeyBDb250ZW50RmlsdGVyRmluaXNoUmVhc29uRXJyb3IsIExlbmd0aEZpbmlzaFJlYXNvbkVycm9yLCBPcGVuQUlFcnJvciB9IGZyb20gJy4uL2Vycm9yJztcbmltcG9ydCB7IHR5cGUgUmVzcG9uc2VGb3JtYXRUZXh0SlNPTlNjaGVtYUNvbmZpZyB9IGZyb20gJy4uL3Jlc291cmNlcy9yZXNwb25zZXMvcmVzcG9uc2VzJztcblxudHlwZSBBbnlDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcyA9XG4gIHwgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNcbiAgfCBDaGF0Q29tcGxldGlvblRvb2xSdW5uZXJQYXJhbXM8YW55PlxuICB8IENoYXRDb21wbGV0aW9uU3RyZWFtaW5nVG9vbFJ1bm5lclBhcmFtczxhbnk+XG4gIHwgQ2hhdENvbXBsZXRpb25TdHJlYW1QYXJhbXM7XG5cbmV4cG9ydCB0eXBlIEV4dHJhY3RQYXJzZWRDb250ZW50RnJvbVBhcmFtczxQYXJhbXMgZXh0ZW5kcyBBbnlDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcz4gPVxuICBQYXJhbXNbJ3Jlc3BvbnNlX2Zvcm1hdCddIGV4dGVuZHMgQXV0b1BhcnNlYWJsZVJlc3BvbnNlRm9ybWF0PGluZmVyIFA+ID8gUCA6IG51bGw7XG5cbmV4cG9ydCB0eXBlIEF1dG9QYXJzZWFibGVSZXNwb25zZUZvcm1hdDxQYXJzZWRUPiA9IFJlc3BvbnNlRm9ybWF0SlNPTlNjaGVtYSAmIHtcbiAgX19vdXRwdXQ6IFBhcnNlZFQ7IC8vIHR5cGUtbGV2ZWwgb25seVxuXG4gICRicmFuZDogJ2F1dG8tcGFyc2VhYmxlLXJlc3BvbnNlLWZvcm1hdCc7XG4gICRwYXJzZVJhdyhjb250ZW50OiBzdHJpbmcpOiBQYXJzZWRUO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYXJzZWFibGVSZXNwb25zZUZvcm1hdDxQYXJzZWRUPihcbiAgcmVzcG9uc2VfZm9ybWF0OiBSZXNwb25zZUZvcm1hdEpTT05TY2hlbWEsXG4gIHBhcnNlcjogKGNvbnRlbnQ6IHN0cmluZykgPT4gUGFyc2VkVCxcbik6IEF1dG9QYXJzZWFibGVSZXNwb25zZUZvcm1hdDxQYXJzZWRUPiB7XG4gIGNvbnN0IG9iaiA9IHsgLi4ucmVzcG9uc2VfZm9ybWF0IH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCB7XG4gICAgJGJyYW5kOiB7XG4gICAgICB2YWx1ZTogJ2F1dG8tcGFyc2VhYmxlLXJlc3BvbnNlLWZvcm1hdCcsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgICRwYXJzZVJhdzoge1xuICAgICAgdmFsdWU6IHBhcnNlcixcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiBvYmogYXMgQXV0b1BhcnNlYWJsZVJlc3BvbnNlRm9ybWF0PFBhcnNlZFQ+O1xufVxuXG5leHBvcnQgdHlwZSBBdXRvUGFyc2VhYmxlVGV4dEZvcm1hdDxQYXJzZWRUPiA9IFJlc3BvbnNlRm9ybWF0VGV4dEpTT05TY2hlbWFDb25maWcgJiB7XG4gIF9fb3V0cHV0OiBQYXJzZWRUOyAvLyB0eXBlLWxldmVsIG9ubHlcblxuICAkYnJhbmQ6ICdhdXRvLXBhcnNlYWJsZS1yZXNwb25zZS1mb3JtYXQnO1xuICAkcGFyc2VSYXcoY29udGVudDogc3RyaW5nKTogUGFyc2VkVDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFyc2VhYmxlVGV4dEZvcm1hdDxQYXJzZWRUPihcbiAgcmVzcG9uc2VfZm9ybWF0OiBSZXNwb25zZUZvcm1hdFRleHRKU09OU2NoZW1hQ29uZmlnLFxuICBwYXJzZXI6IChjb250ZW50OiBzdHJpbmcpID0+IFBhcnNlZFQsXG4pOiBBdXRvUGFyc2VhYmxlVGV4dEZvcm1hdDxQYXJzZWRUPiB7XG4gIGNvbnN0IG9iaiA9IHsgLi4ucmVzcG9uc2VfZm9ybWF0IH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCB7XG4gICAgJGJyYW5kOiB7XG4gICAgICB2YWx1ZTogJ2F1dG8tcGFyc2VhYmxlLXJlc3BvbnNlLWZvcm1hdCcsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgICRwYXJzZVJhdzoge1xuICAgICAgdmFsdWU6IHBhcnNlcixcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiBvYmogYXMgQXV0b1BhcnNlYWJsZVRleHRGb3JtYXQ8UGFyc2VkVD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dG9QYXJzYWJsZVJlc3BvbnNlRm9ybWF0PFBhcnNlZFQ+KFxuICByZXNwb25zZV9mb3JtYXQ6IGFueSxcbik6IHJlc3BvbnNlX2Zvcm1hdCBpcyBBdXRvUGFyc2VhYmxlUmVzcG9uc2VGb3JtYXQ8UGFyc2VkVD4ge1xuICByZXR1cm4gcmVzcG9uc2VfZm9ybWF0Py5bJyRicmFuZCddID09PSAnYXV0by1wYXJzZWFibGUtcmVzcG9uc2UtZm9ybWF0Jztcbn1cblxudHlwZSBUb29sT3B0aW9ucyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBhcmd1bWVudHM6IGFueTtcbiAgZnVuY3Rpb24/OiAoKGFyZ3M6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIEF1dG9QYXJzZWFibGVUb29sPFxuICBPcHRpb25zVCBleHRlbmRzIFRvb2xPcHRpb25zLFxuICBIYXNGdW5jdGlvbiA9IE9wdGlvbnNUWydmdW5jdGlvbiddIGV4dGVuZHMgRnVuY3Rpb24gPyB0cnVlIDogZmFsc2UsXG4+ID0gQ2hhdENvbXBsZXRpb25Ub29sICYge1xuICBfX2FyZ3VtZW50czogT3B0aW9uc1RbJ2FyZ3VtZW50cyddOyAvLyB0eXBlLWxldmVsIG9ubHlcbiAgX19uYW1lOiBPcHRpb25zVFsnbmFtZSddOyAvLyB0eXBlLWxldmVsIG9ubHlcbiAgX19oYXNGdW5jdGlvbjogSGFzRnVuY3Rpb247IC8vIHR5cGUtbGV2ZWwgb25seVxuXG4gICRicmFuZDogJ2F1dG8tcGFyc2VhYmxlLXRvb2wnO1xuICAkY2FsbGJhY2s6ICgoYXJnczogT3B0aW9uc1RbJ2FyZ3VtZW50cyddKSA9PiBhbnkpIHwgdW5kZWZpbmVkO1xuICAkcGFyc2VSYXcoYXJnczogc3RyaW5nKTogT3B0aW9uc1RbJ2FyZ3VtZW50cyddO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYXJzZWFibGVUb29sPE9wdGlvbnNUIGV4dGVuZHMgVG9vbE9wdGlvbnM+KFxuICB0b29sOiBDaGF0Q29tcGxldGlvblRvb2wsXG4gIHtcbiAgICBwYXJzZXIsXG4gICAgY2FsbGJhY2ssXG4gIH06IHtcbiAgICBwYXJzZXI6IChjb250ZW50OiBzdHJpbmcpID0+IE9wdGlvbnNUWydhcmd1bWVudHMnXTtcbiAgICBjYWxsYmFjazogKChhcmdzOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQ7XG4gIH0sXG4pOiBBdXRvUGFyc2VhYmxlVG9vbDxPcHRpb25zVFsnYXJndW1lbnRzJ10+IHtcbiAgY29uc3Qgb2JqID0geyAuLi50b29sIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCB7XG4gICAgJGJyYW5kOiB7XG4gICAgICB2YWx1ZTogJ2F1dG8tcGFyc2VhYmxlLXRvb2wnLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICAkcGFyc2VSYXc6IHtcbiAgICAgIHZhbHVlOiBwYXJzZXIsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgICRjYWxsYmFjazoge1xuICAgICAgdmFsdWU6IGNhbGxiYWNrLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG9iaiBhcyBBdXRvUGFyc2VhYmxlVG9vbDxPcHRpb25zVFsnYXJndW1lbnRzJ10+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBdXRvUGFyc2FibGVUb29sKHRvb2w6IGFueSk6IHRvb2wgaXMgQXV0b1BhcnNlYWJsZVRvb2w8YW55PiB7XG4gIHJldHVybiB0b29sPy5bJyRicmFuZCddID09PSAnYXV0by1wYXJzZWFibGUtdG9vbCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVBhcnNlQ2hhdENvbXBsZXRpb248XG4gIFBhcmFtcyBleHRlbmRzIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zIHwgbnVsbCxcbiAgUGFyc2VkVCA9IFBhcmFtcyBleHRlbmRzIG51bGwgPyBudWxsIDogRXh0cmFjdFBhcnNlZENvbnRlbnRGcm9tUGFyYW1zPE5vbk51bGxhYmxlPFBhcmFtcz4+LFxuPihjb21wbGV0aW9uOiBDaGF0Q29tcGxldGlvbiwgcGFyYW1zOiBQYXJhbXMpOiBQYXJzZWRDaGF0Q29tcGxldGlvbjxQYXJzZWRUPiB7XG4gIGlmICghcGFyYW1zIHx8ICFoYXNBdXRvUGFyc2VhYmxlSW5wdXQocGFyYW1zKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb21wbGV0aW9uLFxuICAgICAgY2hvaWNlczogY29tcGxldGlvbi5jaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiAoe1xuICAgICAgICAuLi5jaG9pY2UsXG4gICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAuLi5jaG9pY2UubWVzc2FnZSxcbiAgICAgICAgICBwYXJzZWQ6IG51bGwsXG4gICAgICAgICAgLi4uKGNob2ljZS5tZXNzYWdlLnRvb2xfY2FsbHMgP1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b29sX2NhbGxzOiBjaG9pY2UubWVzc2FnZS50b29sX2NhbGxzLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkKSxcbiAgICAgICAgfSxcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlQ2hhdENvbXBsZXRpb24oY29tcGxldGlvbiwgcGFyYW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2hhdENvbXBsZXRpb248XG4gIFBhcmFtcyBleHRlbmRzIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLFxuICBQYXJzZWRUID0gRXh0cmFjdFBhcnNlZENvbnRlbnRGcm9tUGFyYW1zPFBhcmFtcz4sXG4+KGNvbXBsZXRpb246IENoYXRDb21wbGV0aW9uLCBwYXJhbXM6IFBhcmFtcyk6IFBhcnNlZENoYXRDb21wbGV0aW9uPFBhcnNlZFQ+IHtcbiAgY29uc3QgY2hvaWNlczogQXJyYXk8UGFyc2VkQ2hvaWNlPFBhcnNlZFQ+PiA9IGNvbXBsZXRpb24uY2hvaWNlcy5tYXAoKGNob2ljZSk6IFBhcnNlZENob2ljZTxQYXJzZWRUPiA9PiB7XG4gICAgaWYgKGNob2ljZS5maW5pc2hfcmVhc29uID09PSAnbGVuZ3RoJykge1xuICAgICAgdGhyb3cgbmV3IExlbmd0aEZpbmlzaFJlYXNvbkVycm9yKCk7XG4gICAgfVxuXG4gICAgaWYgKGNob2ljZS5maW5pc2hfcmVhc29uID09PSAnY29udGVudF9maWx0ZXInKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEZpbHRlckZpbmlzaFJlYXNvbkVycm9yKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNob2ljZSxcbiAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgLi4uY2hvaWNlLm1lc3NhZ2UsXG4gICAgICAgIC4uLihjaG9pY2UubWVzc2FnZS50b29sX2NhbGxzID9cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0b29sX2NhbGxzOlxuICAgICAgICAgICAgICBjaG9pY2UubWVzc2FnZS50b29sX2NhbGxzPy5tYXAoKHRvb2xDYWxsKSA9PiBwYXJzZVRvb2xDYWxsKHBhcmFtcywgdG9vbENhbGwpKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgIHBhcnNlZDpcbiAgICAgICAgICBjaG9pY2UubWVzc2FnZS5jb250ZW50ICYmICFjaG9pY2UubWVzc2FnZS5yZWZ1c2FsID9cbiAgICAgICAgICAgIHBhcnNlUmVzcG9uc2VGb3JtYXQocGFyYW1zLCBjaG9pY2UubWVzc2FnZS5jb250ZW50KVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uY29tcGxldGlvbiwgY2hvaWNlcyB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlc3BvbnNlRm9ybWF0PFxuICBQYXJhbXMgZXh0ZW5kcyBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcyxcbiAgUGFyc2VkVCA9IEV4dHJhY3RQYXJzZWRDb250ZW50RnJvbVBhcmFtczxQYXJhbXM+LFxuPihwYXJhbXM6IFBhcmFtcywgY29udGVudDogc3RyaW5nKTogUGFyc2VkVCB8IG51bGwge1xuICBpZiAocGFyYW1zLnJlc3BvbnNlX2Zvcm1hdD8udHlwZSAhPT0gJ2pzb25fc2NoZW1hJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5yZXNwb25zZV9mb3JtYXQ/LnR5cGUgPT09ICdqc29uX3NjaGVtYScpIHtcbiAgICBpZiAoJyRwYXJzZVJhdycgaW4gcGFyYW1zLnJlc3BvbnNlX2Zvcm1hdCkge1xuICAgICAgY29uc3QgcmVzcG9uc2VfZm9ybWF0ID0gcGFyYW1zLnJlc3BvbnNlX2Zvcm1hdCBhcyBBdXRvUGFyc2VhYmxlUmVzcG9uc2VGb3JtYXQ8UGFyc2VkVD47XG5cbiAgICAgIHJldHVybiByZXNwb25zZV9mb3JtYXQuJHBhcnNlUmF3KGNvbnRlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9vbENhbGw8UGFyYW1zIGV4dGVuZHMgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXM+KFxuICBwYXJhbXM6IFBhcmFtcyxcbiAgdG9vbENhbGw6IENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsLFxuKTogUGFyc2VkRnVuY3Rpb25Ub29sQ2FsbCB7XG4gIGNvbnN0IGlucHV0VG9vbCA9IHBhcmFtcy50b29scz8uZmluZCgoaW5wdXRUb29sKSA9PiBpbnB1dFRvb2wuZnVuY3Rpb24/Lm5hbWUgPT09IHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUpO1xuICByZXR1cm4ge1xuICAgIC4uLnRvb2xDYWxsLFxuICAgIGZ1bmN0aW9uOiB7XG4gICAgICAuLi50b29sQ2FsbC5mdW5jdGlvbixcbiAgICAgIHBhcnNlZF9hcmd1bWVudHM6XG4gICAgICAgIGlzQXV0b1BhcnNhYmxlVG9vbChpbnB1dFRvb2wpID8gaW5wdXRUb29sLiRwYXJzZVJhdyh0b29sQ2FsbC5mdW5jdGlvbi5hcmd1bWVudHMpXG4gICAgICAgIDogaW5wdXRUb29sPy5mdW5jdGlvbi5zdHJpY3QgPyBKU09OLnBhcnNlKHRvb2xDYWxsLmZ1bmN0aW9uLmFyZ3VtZW50cylcbiAgICAgICAgOiBudWxsLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRQYXJzZVRvb2xDYWxsKFxuICBwYXJhbXM6IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgdG9vbENhbGw6IENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsLFxuKTogYm9vbGVhbiB7XG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaW5wdXRUb29sID0gcGFyYW1zLnRvb2xzPy5maW5kKChpbnB1dFRvb2wpID0+IGlucHV0VG9vbC5mdW5jdGlvbj8ubmFtZSA9PT0gdG9vbENhbGwuZnVuY3Rpb24ubmFtZSk7XG4gIHJldHVybiBpc0F1dG9QYXJzYWJsZVRvb2woaW5wdXRUb29sKSB8fCBpbnB1dFRvb2w/LmZ1bmN0aW9uLnN0cmljdCB8fCBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0F1dG9QYXJzZWFibGVJbnB1dChwYXJhbXM6IEFueUNoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zKTogYm9vbGVhbiB7XG4gIGlmIChpc0F1dG9QYXJzYWJsZVJlc3BvbnNlRm9ybWF0KHBhcmFtcy5yZXNwb25zZV9mb3JtYXQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHBhcmFtcy50b29scz8uc29tZShcbiAgICAgICh0KSA9PiBpc0F1dG9QYXJzYWJsZVRvb2wodCkgfHwgKHQudHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0LmZ1bmN0aW9uLnN0cmljdCA9PT0gdHJ1ZSksXG4gICAgKSA/PyBmYWxzZVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dFRvb2xzKHRvb2xzOiBDaGF0Q29tcGxldGlvblRvb2xbXSB8IHVuZGVmaW5lZCkge1xuICBmb3IgKGNvbnN0IHRvb2wgb2YgdG9vbHMgPz8gW10pIHtcbiAgICBpZiAodG9vbC50eXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoXG4gICAgICAgIGBDdXJyZW50bHkgb25seSBcXGBmdW5jdGlvblxcYCB0b29sIHR5cGVzIHN1cHBvcnQgYXV0by1wYXJzaW5nOyBSZWNlaXZlZCBcXGAke3Rvb2wudHlwZX1cXGBgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodG9vbC5mdW5jdGlvbi5zdHJpY3QgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihcbiAgICAgICAgYFRoZSBcXGAke3Rvb2wuZnVuY3Rpb24ubmFtZX1cXGAgdG9vbCBpcyBub3QgbWFya2VkIHdpdGggXFxgc3RyaWN0OiB0cnVlXFxgLiBPbmx5IHN0cmljdCBmdW5jdGlvbiB0b29scyBjYW4gYmUgYXV0by1wYXJzZWRgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgdHlwZSBDb21wbGV0aW9uVXNhZ2UgfSBmcm9tICcuLi9yZXNvdXJjZXMvY29tcGxldGlvbnMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDaGF0Q29tcGxldGlvbixcbiAgdHlwZSBDaGF0Q29tcGxldGlvbk1lc3NhZ2UsXG4gIHR5cGUgQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0sXG4gIHR5cGUgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXMsXG4gIHR5cGUgQ2hhdENvbXBsZXRpb25Ub29sLFxufSBmcm9tICcuLi9yZXNvdXJjZXMvY2hhdC9jb21wbGV0aW9ucyc7XG5pbXBvcnQgeyBPcGVuQUlFcnJvciB9IGZyb20gJy4uL2Vycm9yJztcbmltcG9ydCB7XG4gIHR5cGUgUnVubmFibGVGdW5jdGlvbixcbiAgaXNSdW5uYWJsZUZ1bmN0aW9uV2l0aFBhcnNlLFxuICB0eXBlIEJhc2VGdW5jdGlvbnNBcmdzLFxuICBSdW5uYWJsZVRvb2xGdW5jdGlvbixcbn0gZnJvbSAnLi9SdW5uYWJsZUZ1bmN0aW9uJztcbmltcG9ydCB7IENoYXRDb21wbGV0aW9uRnVuY3Rpb25SdW5uZXJQYXJhbXMsIENoYXRDb21wbGV0aW9uVG9vbFJ1bm5lclBhcmFtcyB9IGZyb20gJy4vQ2hhdENvbXBsZXRpb25SdW5uZXInO1xuaW1wb3J0IHtcbiAgQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdGdW5jdGlvblJ1bm5lclBhcmFtcyxcbiAgQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdUb29sUnVubmVyUGFyYW1zLFxufSBmcm9tICcuL0NoYXRDb21wbGV0aW9uU3RyZWFtaW5nUnVubmVyJztcbmltcG9ydCB7IGlzQXNzaXN0YW50TWVzc2FnZSwgaXNGdW5jdGlvbk1lc3NhZ2UsIGlzVG9vbE1lc3NhZ2UgfSBmcm9tICcuL2NoYXRDb21wbGV0aW9uVXRpbHMnO1xuaW1wb3J0IHsgQmFzZUV2ZW50cywgRXZlbnRTdHJlYW0gfSBmcm9tICcuL0V2ZW50U3RyZWFtJztcbmltcG9ydCB7IFBhcnNlZENoYXRDb21wbGV0aW9uIH0gZnJvbSAnLi4vcmVzb3VyY2VzL2JldGEvY2hhdC9jb21wbGV0aW9ucyc7XG5pbXBvcnQgT3BlbkFJIGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IGlzQXV0b1BhcnNhYmxlVG9vbCwgcGFyc2VDaGF0Q29tcGxldGlvbiB9IGZyb20gJy4uL2xpYi9wYXJzZXInO1xuXG5jb25zdCBERUZBVUxUX01BWF9DSEFUX0NPTVBMRVRJT05TID0gMTA7XG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5lck9wdGlvbnMgZXh0ZW5kcyBDb3JlLlJlcXVlc3RPcHRpb25zIHtcbiAgLyoqIEhvdyBtYW55IHJlcXVlc3RzIHRvIG1ha2UgYmVmb3JlIGNhbmNlbGluZy4gRGVmYXVsdCAxMC4gKi9cbiAgbWF4Q2hhdENvbXBsZXRpb25zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RDaGF0Q29tcGxldGlvblJ1bm5lcjxcbiAgRXZlbnRUeXBlcyBleHRlbmRzIEFic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJFdmVudHMsXG4gIFBhcnNlZFQsXG4+IGV4dGVuZHMgRXZlbnRTdHJlYW08RXZlbnRUeXBlcz4ge1xuICBwcm90ZWN0ZWQgX2NoYXRDb21wbGV0aW9uczogUGFyc2VkQ2hhdENvbXBsZXRpb248UGFyc2VkVD5bXSA9IFtdO1xuICBtZXNzYWdlczogQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW1bXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBfYWRkQ2hhdENvbXBsZXRpb24oXG4gICAgdGhpczogQWJzdHJhY3RDaGF0Q29tcGxldGlvblJ1bm5lcjxBYnN0cmFjdENoYXRDb21wbGV0aW9uUnVubmVyRXZlbnRzLCBQYXJzZWRUPixcbiAgICBjaGF0Q29tcGxldGlvbjogUGFyc2VkQ2hhdENvbXBsZXRpb248UGFyc2VkVD4sXG4gICk6IFBhcnNlZENoYXRDb21wbGV0aW9uPFBhcnNlZFQ+IHtcbiAgICB0aGlzLl9jaGF0Q29tcGxldGlvbnMucHVzaChjaGF0Q29tcGxldGlvbik7XG4gICAgdGhpcy5fZW1pdCgnY2hhdENvbXBsZXRpb24nLCBjaGF0Q29tcGxldGlvbik7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNoYXRDb21wbGV0aW9uLmNob2ljZXNbMF0/Lm1lc3NhZ2U7XG4gICAgaWYgKG1lc3NhZ2UpIHRoaXMuX2FkZE1lc3NhZ2UobWVzc2FnZSBhcyBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSk7XG4gICAgcmV0dXJuIGNoYXRDb21wbGV0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9hZGRNZXNzYWdlKFxuICAgIHRoaXM6IEFic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXI8QWJzdHJhY3RDaGF0Q29tcGxldGlvblJ1bm5lckV2ZW50cywgUGFyc2VkVD4sXG4gICAgbWVzc2FnZTogQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0sXG4gICAgZW1pdCA9IHRydWUsXG4gICkge1xuICAgIGlmICghKCdjb250ZW50JyBpbiBtZXNzYWdlKSkgbWVzc2FnZS5jb250ZW50ID0gbnVsbDtcblxuICAgIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblxuICAgIGlmIChlbWl0KSB7XG4gICAgICB0aGlzLl9lbWl0KCdtZXNzYWdlJywgbWVzc2FnZSk7XG4gICAgICBpZiAoKGlzRnVuY3Rpb25NZXNzYWdlKG1lc3NhZ2UpIHx8IGlzVG9vbE1lc3NhZ2UobWVzc2FnZSkpICYmIG1lc3NhZ2UuY29udGVudCkge1xuICAgICAgICAvLyBOb3RlLCB0aGlzIGFzc3VtZXMgdGhhdCB7cm9sZTogJ3Rvb2wnLCBjb250ZW50OiBcdTIwMjZ9IGlzIGFsd2F5cyB0aGUgcmVzdWx0IG9mIGEgY2FsbCBvZiB0b29sIG9mIHR5cGU9ZnVuY3Rpb24uXG4gICAgICAgIHRoaXMuX2VtaXQoJ2Z1bmN0aW9uQ2FsbFJlc3VsdCcsIG1lc3NhZ2UuY29udGVudCBhcyBzdHJpbmcpO1xuICAgICAgfSBlbHNlIGlmIChpc0Fzc2lzdGFudE1lc3NhZ2UobWVzc2FnZSkgJiYgbWVzc2FnZS5mdW5jdGlvbl9jYWxsKSB7XG4gICAgICAgIHRoaXMuX2VtaXQoJ2Z1bmN0aW9uQ2FsbCcsIG1lc3NhZ2UuZnVuY3Rpb25fY2FsbCk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXNzaXN0YW50TWVzc2FnZShtZXNzYWdlKSAmJiBtZXNzYWdlLnRvb2xfY2FsbHMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b29sX2NhbGwgb2YgbWVzc2FnZS50b29sX2NhbGxzKSB7XG4gICAgICAgICAgaWYgKHRvb2xfY2FsbC50eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KCdmdW5jdGlvbkNhbGwnLCB0b29sX2NhbGwuZnVuY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBmaW5hbCBDaGF0Q29tcGxldGlvbiwgb3IgcmVqZWN0c1xuICAgKiBpZiBhbiBlcnJvciBvY2N1cnJlZCBvciB0aGUgc3RyZWFtIGVuZGVkIHByZW1hdHVyZWx5IHdpdGhvdXQgcHJvZHVjaW5nIGEgQ2hhdENvbXBsZXRpb24uXG4gICAqL1xuICBhc3luYyBmaW5hbENoYXRDb21wbGV0aW9uKCk6IFByb21pc2U8UGFyc2VkQ2hhdENvbXBsZXRpb248UGFyc2VkVD4+IHtcbiAgICBhd2FpdCB0aGlzLmRvbmUoKTtcbiAgICBjb25zdCBjb21wbGV0aW9uID0gdGhpcy5fY2hhdENvbXBsZXRpb25zW3RoaXMuX2NoYXRDb21wbGV0aW9ucy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWNvbXBsZXRpb24pIHRocm93IG5ldyBPcGVuQUlFcnJvcignc3RyZWFtIGVuZGVkIHdpdGhvdXQgcHJvZHVjaW5nIGEgQ2hhdENvbXBsZXRpb24nKTtcbiAgICByZXR1cm4gY29tcGxldGlvbjtcbiAgfVxuXG4gICNnZXRGaW5hbENvbnRlbnQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuI2dldEZpbmFsTWVzc2FnZSgpLmNvbnRlbnQgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBmaW5hbCBDaGF0Q29tcGxldGlvbk1lc3NhZ2UsIG9yIHJlamVjdHNcbiAgICogaWYgYW4gZXJyb3Igb2NjdXJyZWQgb3IgdGhlIHN0cmVhbSBlbmRlZCBwcmVtYXR1cmVseSB3aXRob3V0IHByb2R1Y2luZyBhIENoYXRDb21wbGV0aW9uTWVzc2FnZS5cbiAgICovXG4gIGFzeW5jIGZpbmFsQ29udGVudCgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBhd2FpdCB0aGlzLmRvbmUoKTtcbiAgICByZXR1cm4gdGhpcy4jZ2V0RmluYWxDb250ZW50KCk7XG4gIH1cblxuICAjZ2V0RmluYWxNZXNzYWdlKCk6IENoYXRDb21wbGV0aW9uTWVzc2FnZSB7XG4gICAgbGV0IGkgPSB0aGlzLm1lc3NhZ2VzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZXNbaV07XG4gICAgICBpZiAoaXNBc3Npc3RhbnRNZXNzYWdlKG1lc3NhZ2UpKSB7XG4gICAgICAgIGNvbnN0IHsgZnVuY3Rpb25fY2FsbCwgLi4ucmVzdCB9ID0gbWVzc2FnZTtcblxuICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IGF1ZGlvIGhlcmVcbiAgICAgICAgY29uc3QgcmV0OiBPbWl0PENoYXRDb21wbGV0aW9uTWVzc2FnZSwgJ2F1ZGlvJz4gPSB7XG4gICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICBjb250ZW50OiAobWVzc2FnZSBhcyBDaGF0Q29tcGxldGlvbk1lc3NhZ2UpLmNvbnRlbnQgPz8gbnVsbCxcbiAgICAgICAgICByZWZ1c2FsOiAobWVzc2FnZSBhcyBDaGF0Q29tcGxldGlvbk1lc3NhZ2UpLnJlZnVzYWwgPz8gbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGZ1bmN0aW9uX2NhbGwpIHtcbiAgICAgICAgICByZXQuZnVuY3Rpb25fY2FsbCA9IGZ1bmN0aW9uX2NhbGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKCdzdHJlYW0gZW5kZWQgd2l0aG91dCBwcm9kdWNpbmcgYSBDaGF0Q29tcGxldGlvbk1lc3NhZ2Ugd2l0aCByb2xlPWFzc2lzdGFudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRoZSBmaW5hbCBhc3Npc3RhbnQgQ2hhdENvbXBsZXRpb25NZXNzYWdlIHJlc3BvbnNlLFxuICAgKiBvciByZWplY3RzIGlmIGFuIGVycm9yIG9jY3VycmVkIG9yIHRoZSBzdHJlYW0gZW5kZWQgcHJlbWF0dXJlbHkgd2l0aG91dCBwcm9kdWNpbmcgYSBDaGF0Q29tcGxldGlvbk1lc3NhZ2UuXG4gICAqL1xuICBhc3luYyBmaW5hbE1lc3NhZ2UoKTogUHJvbWlzZTxDaGF0Q29tcGxldGlvbk1lc3NhZ2U+IHtcbiAgICBhd2FpdCB0aGlzLmRvbmUoKTtcbiAgICByZXR1cm4gdGhpcy4jZ2V0RmluYWxNZXNzYWdlKCk7XG4gIH1cblxuICAjZ2V0RmluYWxGdW5jdGlvbkNhbGwoKTogQ2hhdENvbXBsZXRpb25NZXNzYWdlLkZ1bmN0aW9uQ2FsbCB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMubWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW2ldO1xuICAgICAgaWYgKGlzQXNzaXN0YW50TWVzc2FnZShtZXNzYWdlKSAmJiBtZXNzYWdlPy5mdW5jdGlvbl9jYWxsKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlLmZ1bmN0aW9uX2NhbGw7XG4gICAgICB9XG4gICAgICBpZiAoaXNBc3Npc3RhbnRNZXNzYWdlKG1lc3NhZ2UpICYmIG1lc3NhZ2U/LnRvb2xfY2FsbHM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS50b29sX2NhbGxzLmF0KC0xKT8uZnVuY3Rpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlIGZpbmFsIEZ1bmN0aW9uQ2FsbCwgb3IgcmVqZWN0c1xuICAgKiBpZiBhbiBlcnJvciBvY2N1cnJlZCBvciB0aGUgc3RyZWFtIGVuZGVkIHByZW1hdHVyZWx5IHdpdGhvdXQgcHJvZHVjaW5nIGEgQ2hhdENvbXBsZXRpb25NZXNzYWdlLlxuICAgKi9cbiAgYXN5bmMgZmluYWxGdW5jdGlvbkNhbGwoKTogUHJvbWlzZTxDaGF0Q29tcGxldGlvbk1lc3NhZ2UuRnVuY3Rpb25DYWxsIHwgdW5kZWZpbmVkPiB7XG4gICAgYXdhaXQgdGhpcy5kb25lKCk7XG4gICAgcmV0dXJuIHRoaXMuI2dldEZpbmFsRnVuY3Rpb25DYWxsKCk7XG4gIH1cblxuICAjZ2V0RmluYWxGdW5jdGlvbkNhbGxSZXN1bHQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGxldCBpID0gdGhpcy5tZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZXNbaV07XG4gICAgICBpZiAoaXNGdW5jdGlvbk1lc3NhZ2UobWVzc2FnZSkgJiYgbWVzc2FnZS5jb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2UuY29udGVudDtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgaXNUb29sTWVzc2FnZShtZXNzYWdlKSAmJlxuICAgICAgICBtZXNzYWdlLmNvbnRlbnQgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0aGlzLm1lc3NhZ2VzLnNvbWUoXG4gICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICB4LnJvbGUgPT09ICdhc3Npc3RhbnQnICYmXG4gICAgICAgICAgICB4LnRvb2xfY2FsbHM/LnNvbWUoKHkpID0+IHkudHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiB5LmlkID09PSBtZXNzYWdlLnRvb2xfY2FsbF9pZCksXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS5jb250ZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5jIGZpbmFsRnVuY3Rpb25DYWxsUmVzdWx0KCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgYXdhaXQgdGhpcy5kb25lKCk7XG4gICAgcmV0dXJuIHRoaXMuI2dldEZpbmFsRnVuY3Rpb25DYWxsUmVzdWx0KCk7XG4gIH1cblxuICAjY2FsY3VsYXRlVG90YWxVc2FnZSgpOiBDb21wbGV0aW9uVXNhZ2Uge1xuICAgIGNvbnN0IHRvdGFsOiBDb21wbGV0aW9uVXNhZ2UgPSB7XG4gICAgICBjb21wbGV0aW9uX3Rva2VuczogMCxcbiAgICAgIHByb21wdF90b2tlbnM6IDAsXG4gICAgICB0b3RhbF90b2tlbnM6IDAsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHsgdXNhZ2UgfSBvZiB0aGlzLl9jaGF0Q29tcGxldGlvbnMpIHtcbiAgICAgIGlmICh1c2FnZSkge1xuICAgICAgICB0b3RhbC5jb21wbGV0aW9uX3Rva2VucyArPSB1c2FnZS5jb21wbGV0aW9uX3Rva2VucztcbiAgICAgICAgdG90YWwucHJvbXB0X3Rva2VucyArPSB1c2FnZS5wcm9tcHRfdG9rZW5zO1xuICAgICAgICB0b3RhbC50b3RhbF90b2tlbnMgKz0gdXNhZ2UudG90YWxfdG9rZW5zO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG4gIH1cblxuICBhc3luYyB0b3RhbFVzYWdlKCk6IFByb21pc2U8Q29tcGxldGlvblVzYWdlPiB7XG4gICAgYXdhaXQgdGhpcy5kb25lKCk7XG4gICAgcmV0dXJuIHRoaXMuI2NhbGN1bGF0ZVRvdGFsVXNhZ2UoKTtcbiAgfVxuXG4gIGFsbENoYXRDb21wbGV0aW9ucygpOiBDaGF0Q29tcGxldGlvbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2NoYXRDb21wbGV0aW9uc107XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2VtaXRGaW5hbChcbiAgICB0aGlzOiBBYnN0cmFjdENoYXRDb21wbGV0aW9uUnVubmVyPEFic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJFdmVudHMsIFBhcnNlZFQ+LFxuICApIHtcbiAgICBjb25zdCBjb21wbGV0aW9uID0gdGhpcy5fY2hhdENvbXBsZXRpb25zW3RoaXMuX2NoYXRDb21wbGV0aW9ucy5sZW5ndGggLSAxXTtcbiAgICBpZiAoY29tcGxldGlvbikgdGhpcy5fZW1pdCgnZmluYWxDaGF0Q29tcGxldGlvbicsIGNvbXBsZXRpb24pO1xuICAgIGNvbnN0IGZpbmFsTWVzc2FnZSA9IHRoaXMuI2dldEZpbmFsTWVzc2FnZSgpO1xuICAgIGlmIChmaW5hbE1lc3NhZ2UpIHRoaXMuX2VtaXQoJ2ZpbmFsTWVzc2FnZScsIGZpbmFsTWVzc2FnZSk7XG4gICAgY29uc3QgZmluYWxDb250ZW50ID0gdGhpcy4jZ2V0RmluYWxDb250ZW50KCk7XG4gICAgaWYgKGZpbmFsQ29udGVudCkgdGhpcy5fZW1pdCgnZmluYWxDb250ZW50JywgZmluYWxDb250ZW50KTtcblxuICAgIGNvbnN0IGZpbmFsRnVuY3Rpb25DYWxsID0gdGhpcy4jZ2V0RmluYWxGdW5jdGlvbkNhbGwoKTtcbiAgICBpZiAoZmluYWxGdW5jdGlvbkNhbGwpIHRoaXMuX2VtaXQoJ2ZpbmFsRnVuY3Rpb25DYWxsJywgZmluYWxGdW5jdGlvbkNhbGwpO1xuXG4gICAgY29uc3QgZmluYWxGdW5jdGlvbkNhbGxSZXN1bHQgPSB0aGlzLiNnZXRGaW5hbEZ1bmN0aW9uQ2FsbFJlc3VsdCgpO1xuICAgIGlmIChmaW5hbEZ1bmN0aW9uQ2FsbFJlc3VsdCAhPSBudWxsKSB0aGlzLl9lbWl0KCdmaW5hbEZ1bmN0aW9uQ2FsbFJlc3VsdCcsIGZpbmFsRnVuY3Rpb25DYWxsUmVzdWx0KTtcblxuICAgIGlmICh0aGlzLl9jaGF0Q29tcGxldGlvbnMuc29tZSgoYykgPT4gYy51c2FnZSkpIHtcbiAgICAgIHRoaXMuX2VtaXQoJ3RvdGFsVXNhZ2UnLCB0aGlzLiNjYWxjdWxhdGVUb3RhbFVzYWdlKCkpO1xuICAgIH1cbiAgfVxuXG4gICN2YWxpZGF0ZVBhcmFtcyhwYXJhbXM6IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zKTogdm9pZCB7XG4gICAgaWYgKHBhcmFtcy5uICE9IG51bGwgJiYgcGFyYW1zLm4gPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoXG4gICAgICAgICdDaGF0Q29tcGxldGlvbiBjb252ZW5pZW5jZSBoZWxwZXJzIG9ubHkgc3VwcG9ydCBuPTEgYXQgdGhpcyB0aW1lLiBUbyB1c2Ugbj4xLCBwbGVhc2UgdXNlIGNoYXQuY29tcGxldGlvbnMuY3JlYXRlKCkgZGlyZWN0bHkuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9jcmVhdGVDaGF0Q29tcGxldGlvbihcbiAgICBjbGllbnQ6IE9wZW5BSSxcbiAgICBwYXJhbXM6IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPFBhcnNlZENoYXRDb21wbGV0aW9uPFBhcnNlZFQ+PiB7XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucz8uc2lnbmFsO1xuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhpcy5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKSk7XG4gICAgfVxuICAgIHRoaXMuI3ZhbGlkYXRlUGFyYW1zKHBhcmFtcyk7XG5cbiAgICBjb25zdCBjaGF0Q29tcGxldGlvbiA9IGF3YWl0IGNsaWVudC5jaGF0LmNvbXBsZXRpb25zLmNyZWF0ZShcbiAgICAgIHsgLi4ucGFyYW1zLCBzdHJlYW06IGZhbHNlIH0sXG4gICAgICB7IC4uLm9wdGlvbnMsIHNpZ25hbDogdGhpcy5jb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICk7XG4gICAgdGhpcy5fY29ubmVjdGVkKCk7XG4gICAgcmV0dXJuIHRoaXMuX2FkZENoYXRDb21wbGV0aW9uKHBhcnNlQ2hhdENvbXBsZXRpb24oY2hhdENvbXBsZXRpb24sIHBhcmFtcykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9ydW5DaGF0Q29tcGxldGlvbihcbiAgICBjbGllbnQ6IE9wZW5BSSxcbiAgICBwYXJhbXM6IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPENoYXRDb21wbGV0aW9uPiB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHBhcmFtcy5tZXNzYWdlcykge1xuICAgICAgdGhpcy5fYWRkTWVzc2FnZShtZXNzYWdlLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jcmVhdGVDaGF0Q29tcGxldGlvbihjbGllbnQsIHBhcmFtcywgb3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgX3J1bkZ1bmN0aW9uczxGdW5jdGlvbnNBcmdzIGV4dGVuZHMgQmFzZUZ1bmN0aW9uc0FyZ3M+KFxuICAgIGNsaWVudDogT3BlbkFJLFxuICAgIHBhcmFtczpcbiAgICAgIHwgQ2hhdENvbXBsZXRpb25GdW5jdGlvblJ1bm5lclBhcmFtczxGdW5jdGlvbnNBcmdzPlxuICAgICAgfCBDaGF0Q29tcGxldGlvblN0cmVhbWluZ0Z1bmN0aW9uUnVubmVyUGFyYW1zPEZ1bmN0aW9uc0FyZ3M+LFxuICAgIG9wdGlvbnM/OiBSdW5uZXJPcHRpb25zLFxuICApIHtcbiAgICBjb25zdCByb2xlID0gJ2Z1bmN0aW9uJyBhcyBjb25zdDtcbiAgICBjb25zdCB7IGZ1bmN0aW9uX2NhbGwgPSAnYXV0bycsIHN0cmVhbSwgLi4ucmVzdFBhcmFtcyB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHNpbmdsZUZ1bmN0aW9uVG9DYWxsID0gdHlwZW9mIGZ1bmN0aW9uX2NhbGwgIT09ICdzdHJpbmcnICYmIGZ1bmN0aW9uX2NhbGw/Lm5hbWU7XG4gICAgY29uc3QgeyBtYXhDaGF0Q29tcGxldGlvbnMgPSBERUZBVUxUX01BWF9DSEFUX0NPTVBMRVRJT05TIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgZnVuY3Rpb25zQnlOYW1lOiBSZWNvcmQ8c3RyaW5nLCBSdW5uYWJsZUZ1bmN0aW9uPGFueT4+ID0ge307XG4gICAgZm9yIChjb25zdCBmIG9mIHBhcmFtcy5mdW5jdGlvbnMpIHtcbiAgICAgIGZ1bmN0aW9uc0J5TmFtZVtmLm5hbWUgfHwgZi5mdW5jdGlvbi5uYW1lXSA9IGY7XG4gICAgfVxuXG4gICAgY29uc3QgZnVuY3Rpb25zOiBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcy5GdW5jdGlvbltdID0gcGFyYW1zLmZ1bmN0aW9ucy5tYXAoXG4gICAgICAoZik6IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLkZ1bmN0aW9uID0+ICh7XG4gICAgICAgIG5hbWU6IGYubmFtZSB8fCBmLmZ1bmN0aW9uLm5hbWUsXG4gICAgICAgIHBhcmFtZXRlcnM6IGYucGFyYW1ldGVycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgZGVzY3JpcHRpb246IGYuZGVzY3JpcHRpb24sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHBhcmFtcy5tZXNzYWdlcykge1xuICAgICAgdGhpcy5fYWRkTWVzc2FnZShtZXNzYWdlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhDaGF0Q29tcGxldGlvbnM7ICsraSkge1xuICAgICAgY29uc3QgY2hhdENvbXBsZXRpb246IENoYXRDb21wbGV0aW9uID0gYXdhaXQgdGhpcy5fY3JlYXRlQ2hhdENvbXBsZXRpb24oXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnJlc3RQYXJhbXMsXG4gICAgICAgICAgZnVuY3Rpb25fY2FsbCxcbiAgICAgICAgICBmdW5jdGlvbnMsXG4gICAgICAgICAgbWVzc2FnZXM6IFsuLi50aGlzLm1lc3NhZ2VzXSxcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gY2hhdENvbXBsZXRpb24uY2hvaWNlc1swXT8ubWVzc2FnZTtcbiAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoYG1pc3NpbmcgbWVzc2FnZSBpbiBDaGF0Q29tcGxldGlvbiByZXNwb25zZWApO1xuICAgICAgfVxuICAgICAgaWYgKCFtZXNzYWdlLmZ1bmN0aW9uX2NhbGwpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgbmFtZSwgYXJndW1lbnRzOiBhcmdzIH0gPSBtZXNzYWdlLmZ1bmN0aW9uX2NhbGw7XG4gICAgICBjb25zdCBmbiA9IGZ1bmN0aW9uc0J5TmFtZVtuYW1lXTtcbiAgICAgIGlmICghZm4pIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGBJbnZhbGlkIGZ1bmN0aW9uX2NhbGw6ICR7SlNPTi5zdHJpbmdpZnkobmFtZSl9LiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6ICR7ZnVuY3Rpb25zXG4gICAgICAgICAgLm1hcCgoZikgPT4gSlNPTi5zdHJpbmdpZnkoZi5uYW1lKSlcbiAgICAgICAgICAuam9pbignLCAnKX0uIFBsZWFzZSB0cnkgYWdhaW5gO1xuXG4gICAgICAgIHRoaXMuX2FkZE1lc3NhZ2UoeyByb2xlLCBuYW1lLCBjb250ZW50IH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoc2luZ2xlRnVuY3Rpb25Ub0NhbGwgJiYgc2luZ2xlRnVuY3Rpb25Ub0NhbGwgIT09IG5hbWUpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGBJbnZhbGlkIGZ1bmN0aW9uX2NhbGw6ICR7SlNPTi5zdHJpbmdpZnkobmFtZSl9LiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHNpbmdsZUZ1bmN0aW9uVG9DYWxsLFxuICAgICAgICApfSByZXF1ZXN0ZWQuIFBsZWFzZSB0cnkgYWdhaW5gO1xuXG4gICAgICAgIHRoaXMuX2FkZE1lc3NhZ2UoeyByb2xlLCBuYW1lLCBjb250ZW50IH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHBhcnNlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZCA9IGlzUnVubmFibGVGdW5jdGlvbldpdGhQYXJzZShmbikgPyBhd2FpdCBmbi5wYXJzZShhcmdzKSA6IGFyZ3M7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLl9hZGRNZXNzYWdlKHtcbiAgICAgICAgICByb2xlLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgY29udGVudDogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgaXQgY2FuJ3QgcnVsZSBvdXQgYG5ldmVyYCB0eXBlLlxuICAgICAgY29uc3QgcmF3Q29udGVudCA9IGF3YWl0IGZuLmZ1bmN0aW9uKHBhcnNlZCwgdGhpcyk7XG4gICAgICBjb25zdCBjb250ZW50ID0gdGhpcy4jc3RyaW5naWZ5RnVuY3Rpb25DYWxsUmVzdWx0KHJhd0NvbnRlbnQpO1xuXG4gICAgICB0aGlzLl9hZGRNZXNzYWdlKHsgcm9sZSwgbmFtZSwgY29udGVudCB9KTtcblxuICAgICAgaWYgKHNpbmdsZUZ1bmN0aW9uVG9DYWxsKSByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9ydW5Ub29sczxGdW5jdGlvbnNBcmdzIGV4dGVuZHMgQmFzZUZ1bmN0aW9uc0FyZ3M+KFxuICAgIGNsaWVudDogT3BlbkFJLFxuICAgIHBhcmFtczpcbiAgICAgIHwgQ2hhdENvbXBsZXRpb25Ub29sUnVubmVyUGFyYW1zPEZ1bmN0aW9uc0FyZ3M+XG4gICAgICB8IENoYXRDb21wbGV0aW9uU3RyZWFtaW5nVG9vbFJ1bm5lclBhcmFtczxGdW5jdGlvbnNBcmdzPixcbiAgICBvcHRpb25zPzogUnVubmVyT3B0aW9ucyxcbiAgKSB7XG4gICAgY29uc3Qgcm9sZSA9ICd0b29sJyBhcyBjb25zdDtcbiAgICBjb25zdCB7IHRvb2xfY2hvaWNlID0gJ2F1dG8nLCBzdHJlYW0sIC4uLnJlc3RQYXJhbXMgfSA9IHBhcmFtcztcbiAgICBjb25zdCBzaW5nbGVGdW5jdGlvblRvQ2FsbCA9IHR5cGVvZiB0b29sX2Nob2ljZSAhPT0gJ3N0cmluZycgJiYgdG9vbF9jaG9pY2U/LmZ1bmN0aW9uPy5uYW1lO1xuICAgIGNvbnN0IHsgbWF4Q2hhdENvbXBsZXRpb25zID0gREVGQVVMVF9NQVhfQ0hBVF9DT01QTEVUSU9OUyB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIFRPRE8oc29tZWRheSk6IGNsZWFuIHRoaXMgbG9naWMgdXBcbiAgICBjb25zdCBpbnB1dFRvb2xzID0gcGFyYW1zLnRvb2xzLm1hcCgodG9vbCk6IFJ1bm5hYmxlVG9vbEZ1bmN0aW9uPGFueT4gPT4ge1xuICAgICAgaWYgKGlzQXV0b1BhcnNhYmxlVG9vbCh0b29sKSkge1xuICAgICAgICBpZiAoIXRvb2wuJGNhbGxiYWNrKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKCdUb29sIGdpdmVuIHRvIGAucnVuVG9vbHMoKWAgdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICBmdW5jdGlvbjoge1xuICAgICAgICAgICAgZnVuY3Rpb246IHRvb2wuJGNhbGxiYWNrLFxuICAgICAgICAgICAgbmFtZTogdG9vbC5mdW5jdGlvbi5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRvb2wuZnVuY3Rpb24uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB0b29sLmZ1bmN0aW9uLnBhcmFtZXRlcnMgYXMgYW55LFxuICAgICAgICAgICAgcGFyc2U6IHRvb2wuJHBhcnNlUmF3LFxuICAgICAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b29sIGFzIGFueSBhcyBSdW5uYWJsZVRvb2xGdW5jdGlvbjxhbnk+O1xuICAgIH0pO1xuXG4gICAgY29uc3QgZnVuY3Rpb25zQnlOYW1lOiBSZWNvcmQ8c3RyaW5nLCBSdW5uYWJsZUZ1bmN0aW9uPGFueT4+ID0ge307XG4gICAgZm9yIChjb25zdCBmIG9mIGlucHV0VG9vbHMpIHtcbiAgICAgIGlmIChmLnR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZnVuY3Rpb25zQnlOYW1lW2YuZnVuY3Rpb24ubmFtZSB8fCBmLmZ1bmN0aW9uLmZ1bmN0aW9uLm5hbWVdID0gZi5mdW5jdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0b29sczogQ2hhdENvbXBsZXRpb25Ub29sW10gPVxuICAgICAgJ3Rvb2xzJyBpbiBwYXJhbXMgP1xuICAgICAgICBpbnB1dFRvb2xzLm1hcCgodCkgPT5cbiAgICAgICAgICB0LnR5cGUgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgICBmdW5jdGlvbjoge1xuICAgICAgICAgICAgICAgIG5hbWU6IHQuZnVuY3Rpb24ubmFtZSB8fCB0LmZ1bmN0aW9uLmZ1bmN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdC5mdW5jdGlvbi5wYXJhbWV0ZXJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0LmZ1bmN0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHN0cmljdDogdC5mdW5jdGlvbi5zdHJpY3QsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiAodCBhcyB1bmtub3duIGFzIENoYXRDb21wbGV0aW9uVG9vbCksXG4gICAgICAgIClcbiAgICAgIDogKHVuZGVmaW5lZCBhcyBhbnkpO1xuXG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHBhcmFtcy5tZXNzYWdlcykge1xuICAgICAgdGhpcy5fYWRkTWVzc2FnZShtZXNzYWdlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhDaGF0Q29tcGxldGlvbnM7ICsraSkge1xuICAgICAgY29uc3QgY2hhdENvbXBsZXRpb246IENoYXRDb21wbGV0aW9uID0gYXdhaXQgdGhpcy5fY3JlYXRlQ2hhdENvbXBsZXRpb24oXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnJlc3RQYXJhbXMsXG4gICAgICAgICAgdG9vbF9jaG9pY2UsXG4gICAgICAgICAgdG9vbHMsXG4gICAgICAgICAgbWVzc2FnZXM6IFsuLi50aGlzLm1lc3NhZ2VzXSxcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gY2hhdENvbXBsZXRpb24uY2hvaWNlc1swXT8ubWVzc2FnZTtcbiAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoYG1pc3NpbmcgbWVzc2FnZSBpbiBDaGF0Q29tcGxldGlvbiByZXNwb25zZWApO1xuICAgICAgfVxuICAgICAgaWYgKCFtZXNzYWdlLnRvb2xfY2FsbHM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgdG9vbF9jYWxsIG9mIG1lc3NhZ2UudG9vbF9jYWxscykge1xuICAgICAgICBpZiAodG9vbF9jYWxsLnR5cGUgIT09ICdmdW5jdGlvbicpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCB0b29sX2NhbGxfaWQgPSB0b29sX2NhbGwuaWQ7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgYXJndW1lbnRzOiBhcmdzIH0gPSB0b29sX2NhbGwuZnVuY3Rpb247XG4gICAgICAgIGNvbnN0IGZuID0gZnVuY3Rpb25zQnlOYW1lW25hbWVdO1xuXG4gICAgICAgIGlmICghZm4pIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gYEludmFsaWQgdG9vbF9jYWxsOiAke0pTT04uc3RyaW5naWZ5KG5hbWUpfS4gQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiAke09iamVjdC5rZXlzKFxuICAgICAgICAgICAgZnVuY3Rpb25zQnlOYW1lLFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5tYXAoKG5hbWUpID0+IEpTT04uc3RyaW5naWZ5KG5hbWUpKVxuICAgICAgICAgICAgLmpvaW4oJywgJyl9LiBQbGVhc2UgdHJ5IGFnYWluYDtcblxuICAgICAgICAgIHRoaXMuX2FkZE1lc3NhZ2UoeyByb2xlLCB0b29sX2NhbGxfaWQsIGNvbnRlbnQgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc2luZ2xlRnVuY3Rpb25Ub0NhbGwgJiYgc2luZ2xlRnVuY3Rpb25Ub0NhbGwgIT09IG5hbWUpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gYEludmFsaWQgdG9vbF9jYWxsOiAke0pTT04uc3RyaW5naWZ5KG5hbWUpfS4gJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHNpbmdsZUZ1bmN0aW9uVG9DYWxsLFxuICAgICAgICAgICl9IHJlcXVlc3RlZC4gUGxlYXNlIHRyeSBhZ2FpbmA7XG5cbiAgICAgICAgICB0aGlzLl9hZGRNZXNzYWdlKHsgcm9sZSwgdG9vbF9jYWxsX2lkLCBjb250ZW50IH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhcnNlZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWQgPSBpc1J1bm5hYmxlRnVuY3Rpb25XaXRoUGFyc2UoZm4pID8gYXdhaXQgZm4ucGFyc2UoYXJncykgOiBhcmdzO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgICAgdGhpcy5fYWRkTWVzc2FnZSh7IHJvbGUsIHRvb2xfY2FsbF9pZCwgY29udGVudCB9KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgaXQgY2FuJ3QgcnVsZSBvdXQgYG5ldmVyYCB0eXBlLlxuICAgICAgICBjb25zdCByYXdDb250ZW50ID0gYXdhaXQgZm4uZnVuY3Rpb24ocGFyc2VkLCB0aGlzKTtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuI3N0cmluZ2lmeUZ1bmN0aW9uQ2FsbFJlc3VsdChyYXdDb250ZW50KTtcbiAgICAgICAgdGhpcy5fYWRkTWVzc2FnZSh7IHJvbGUsIHRvb2xfY2FsbF9pZCwgY29udGVudCB9KTtcblxuICAgICAgICBpZiAoc2luZ2xlRnVuY3Rpb25Ub0NhbGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAjc3RyaW5naWZ5RnVuY3Rpb25DYWxsUmVzdWx0KHJhd0NvbnRlbnQ6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgcmF3Q29udGVudCA9PT0gJ3N0cmluZycgPyByYXdDb250ZW50XG4gICAgICA6IHJhd0NvbnRlbnQgPT09IHVuZGVmaW5lZCA/ICd1bmRlZmluZWQnXG4gICAgICA6IEpTT04uc3RyaW5naWZ5KHJhd0NvbnRlbnQpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJFdmVudHMgZXh0ZW5kcyBCYXNlRXZlbnRzIHtcbiAgZnVuY3Rpb25DYWxsOiAoZnVuY3Rpb25DYWxsOiBDaGF0Q29tcGxldGlvbk1lc3NhZ2UuRnVuY3Rpb25DYWxsKSA9PiB2b2lkO1xuICBtZXNzYWdlOiAobWVzc2FnZTogQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0pID0+IHZvaWQ7XG4gIGNoYXRDb21wbGV0aW9uOiAoY29tcGxldGlvbjogQ2hhdENvbXBsZXRpb24pID0+IHZvaWQ7XG4gIGZpbmFsQ29udGVudDogKGNvbnRlbnRTbmFwc2hvdDogc3RyaW5nKSA9PiB2b2lkO1xuICBmaW5hbE1lc3NhZ2U6IChtZXNzYWdlOiBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSkgPT4gdm9pZDtcbiAgZmluYWxDaGF0Q29tcGxldGlvbjogKGNvbXBsZXRpb246IENoYXRDb21wbGV0aW9uKSA9PiB2b2lkO1xuICBmaW5hbEZ1bmN0aW9uQ2FsbDogKGZ1bmN0aW9uQ2FsbDogQ2hhdENvbXBsZXRpb25NZXNzYWdlLkZ1bmN0aW9uQ2FsbCkgPT4gdm9pZDtcbiAgZnVuY3Rpb25DYWxsUmVzdWx0OiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkO1xuICBmaW5hbEZ1bmN0aW9uQ2FsbFJlc3VsdDogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZDtcbiAgdG90YWxVc2FnZTogKHVzYWdlOiBDb21wbGV0aW9uVXNhZ2UpID0+IHZvaWQ7XG59XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSxcbiAgdHlwZSBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzL2NoYXQvY29tcGxldGlvbnMnO1xuaW1wb3J0IHsgdHlwZSBSdW5uYWJsZUZ1bmN0aW9ucywgdHlwZSBCYXNlRnVuY3Rpb25zQXJncywgUnVubmFibGVUb29scyB9IGZyb20gJy4vUnVubmFibGVGdW5jdGlvbic7XG5pbXBvcnQge1xuICBBYnN0cmFjdENoYXRDb21wbGV0aW9uUnVubmVyLFxuICBBYnN0cmFjdENoYXRDb21wbGV0aW9uUnVubmVyRXZlbnRzLFxuICBSdW5uZXJPcHRpb25zLFxufSBmcm9tICcuL0Fic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXInO1xuaW1wb3J0IHsgaXNBc3Npc3RhbnRNZXNzYWdlIH0gZnJvbSAnLi9jaGF0Q29tcGxldGlvblV0aWxzJztcbmltcG9ydCBPcGVuQUkgZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgQXV0b1BhcnNlYWJsZVRvb2wgfSBmcm9tICcuLi9saWIvcGFyc2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29tcGxldGlvblJ1bm5lckV2ZW50cyBleHRlbmRzIEFic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJFdmVudHMge1xuICBjb250ZW50OiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uUnVubmVyUGFyYW1zPEZ1bmN0aW9uc0FyZ3MgZXh0ZW5kcyBCYXNlRnVuY3Rpb25zQXJncz4gPSBPbWl0PFxuICBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgJ2Z1bmN0aW9ucydcbj4gJiB7XG4gIGZ1bmN0aW9uczogUnVubmFibGVGdW5jdGlvbnM8RnVuY3Rpb25zQXJncz47XG59O1xuXG5leHBvcnQgdHlwZSBDaGF0Q29tcGxldGlvblRvb2xSdW5uZXJQYXJhbXM8RnVuY3Rpb25zQXJncyBleHRlbmRzIEJhc2VGdW5jdGlvbnNBcmdzPiA9IE9taXQ8XG4gIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICAndG9vbHMnXG4+ICYge1xuICB0b29sczogUnVubmFibGVUb29sczxGdW5jdGlvbnNBcmdzPiB8IEF1dG9QYXJzZWFibGVUb29sPGFueSwgdHJ1ZT5bXTtcbn07XG5cbmV4cG9ydCBjbGFzcyBDaGF0Q29tcGxldGlvblJ1bm5lcjxQYXJzZWRUID0gbnVsbD4gZXh0ZW5kcyBBYnN0cmFjdENoYXRDb21wbGV0aW9uUnVubmVyPFxuICBDaGF0Q29tcGxldGlvblJ1bm5lckV2ZW50cyxcbiAgUGFyc2VkVFxuPiB7XG4gIC8qKiBAZGVwcmVjYXRlZCAtIHBsZWFzZSB1c2UgYHJ1blRvb2xzYCBpbnN0ZWFkLiAqL1xuICBzdGF0aWMgcnVuRnVuY3Rpb25zKFxuICAgIGNsaWVudDogT3BlbkFJLFxuICAgIHBhcmFtczogQ2hhdENvbXBsZXRpb25GdW5jdGlvblJ1bm5lclBhcmFtczxhbnlbXT4sXG4gICAgb3B0aW9ucz86IFJ1bm5lck9wdGlvbnMsXG4gICk6IENoYXRDb21wbGV0aW9uUnVubmVyPG51bGw+IHtcbiAgICBjb25zdCBydW5uZXIgPSBuZXcgQ2hhdENvbXBsZXRpb25SdW5uZXIoKTtcbiAgICBjb25zdCBvcHRzID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgLi4ub3B0aW9ucz8uaGVhZGVycywgJ1gtU3RhaW5sZXNzLUhlbHBlci1NZXRob2QnOiAncnVuRnVuY3Rpb25zJyB9LFxuICAgIH07XG4gICAgcnVubmVyLl9ydW4oKCkgPT4gcnVubmVyLl9ydW5GdW5jdGlvbnMoY2xpZW50LCBwYXJhbXMsIG9wdHMpKTtcbiAgICByZXR1cm4gcnVubmVyO1xuICB9XG5cbiAgc3RhdGljIHJ1blRvb2xzPFBhcnNlZFQ+KFxuICAgIGNsaWVudDogT3BlbkFJLFxuICAgIHBhcmFtczogQ2hhdENvbXBsZXRpb25Ub29sUnVubmVyUGFyYW1zPGFueVtdPixcbiAgICBvcHRpb25zPzogUnVubmVyT3B0aW9ucyxcbiAgKTogQ2hhdENvbXBsZXRpb25SdW5uZXI8UGFyc2VkVD4ge1xuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBDaGF0Q29tcGxldGlvblJ1bm5lcjxQYXJzZWRUPigpO1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAuLi5vcHRpb25zPy5oZWFkZXJzLCAnWC1TdGFpbmxlc3MtSGVscGVyLU1ldGhvZCc6ICdydW5Ub29scycgfSxcbiAgICB9O1xuICAgIHJ1bm5lci5fcnVuKCgpID0+IHJ1bm5lci5fcnVuVG9vbHMoY2xpZW50LCBwYXJhbXMsIG9wdHMpKTtcbiAgICByZXR1cm4gcnVubmVyO1xuICB9XG5cbiAgb3ZlcnJpZGUgX2FkZE1lc3NhZ2UoXG4gICAgdGhpczogQ2hhdENvbXBsZXRpb25SdW5uZXI8UGFyc2VkVD4sXG4gICAgbWVzc2FnZTogQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0sXG4gICAgZW1pdDogYm9vbGVhbiA9IHRydWUsXG4gICkge1xuICAgIHN1cGVyLl9hZGRNZXNzYWdlKG1lc3NhZ2UsIGVtaXQpO1xuICAgIGlmIChpc0Fzc2lzdGFudE1lc3NhZ2UobWVzc2FnZSkgJiYgbWVzc2FnZS5jb250ZW50KSB7XG4gICAgICB0aGlzLl9lbWl0KCdjb250ZW50JywgbWVzc2FnZS5jb250ZW50IGFzIHN0cmluZyk7XG4gICAgfVxuICB9XG59XG4iLCAiY29uc3QgU1RSID0gMGIwMDAwMDAwMDE7XG5jb25zdCBOVU0gPSAwYjAwMDAwMDAxMDtcbmNvbnN0IEFSUiA9IDBiMDAwMDAwMTAwO1xuY29uc3QgT0JKID0gMGIwMDAwMDEwMDA7XG5jb25zdCBOVUxMID0gMGIwMDAwMTAwMDA7XG5jb25zdCBCT09MID0gMGIwMDAxMDAwMDA7XG5jb25zdCBOQU4gPSAwYjAwMTAwMDAwMDtcbmNvbnN0IElORklOSVRZID0gMGIwMTAwMDAwMDA7XG5jb25zdCBNSU5VU19JTkZJTklUWSA9IDBiMTAwMDAwMDAwO1xuXG5jb25zdCBJTkYgPSBJTkZJTklUWSB8IE1JTlVTX0lORklOSVRZO1xuY29uc3QgU1BFQ0lBTCA9IE5VTEwgfCBCT09MIHwgSU5GIHwgTkFOO1xuY29uc3QgQVRPTSA9IFNUUiB8IE5VTSB8IFNQRUNJQUw7XG5jb25zdCBDT0xMRUNUSU9OID0gQVJSIHwgT0JKO1xuY29uc3QgQUxMID0gQVRPTSB8IENPTExFQ1RJT047XG5cbmNvbnN0IEFsbG93ID0ge1xuICBTVFIsXG4gIE5VTSxcbiAgQVJSLFxuICBPQkosXG4gIE5VTEwsXG4gIEJPT0wsXG4gIE5BTixcbiAgSU5GSU5JVFksXG4gIE1JTlVTX0lORklOSVRZLFxuICBJTkYsXG4gIFNQRUNJQUwsXG4gIEFUT00sXG4gIENPTExFQ1RJT04sXG4gIEFMTCxcbn07XG5cbi8vIFRoZSBKU09OIHN0cmluZyBzZWdtZW50IHdhcyB1bmFibGUgdG8gYmUgcGFyc2VkIGNvbXBsZXRlbHlcbmNsYXNzIFBhcnRpYWxKU09OIGV4dGVuZHMgRXJyb3Ige31cblxuY2xhc3MgTWFsZm9ybWVkSlNPTiBleHRlbmRzIEVycm9yIHt9XG5cbi8qKlxuICogUGFyc2UgaW5jb21wbGV0ZSBKU09OXG4gKiBAcGFyYW0ge3N0cmluZ30ganNvblN0cmluZyBQYXJ0aWFsIEpTT04gdG8gYmUgcGFyc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gYWxsb3dQYXJ0aWFsIFNwZWNpZnkgd2hhdCB0eXBlcyBhcmUgYWxsb3dlZCB0byBiZSBwYXJ0aWFsLCBzZWUge0BsaW5rIEFsbG93fSBmb3IgZGV0YWlsc1xuICogQHJldHVybnMgVGhlIHBhcnNlZCBKU09OXG4gKiBAdGhyb3dzIHtQYXJ0aWFsSlNPTn0gSWYgdGhlIEpTT04gaXMgaW5jb21wbGV0ZSAocmVsYXRlZCB0byB0aGUgYGFsbG93YCBwYXJhbWV0ZXIpXG4gKiBAdGhyb3dzIHtNYWxmb3JtZWRKU09OfSBJZiB0aGUgSlNPTiBpcyBtYWxmb3JtZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VKU09OKGpzb25TdHJpbmc6IHN0cmluZywgYWxsb3dQYXJ0aWFsOiBudW1iZXIgPSBBbGxvdy5BTEwpOiBhbnkge1xuICBpZiAodHlwZW9mIGpzb25TdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgZXhwZWN0aW5nIHN0ciwgZ290ICR7dHlwZW9mIGpzb25TdHJpbmd9YCk7XG4gIH1cbiAgaWYgKCFqc29uU3RyaW5nLnRyaW0oKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtqc29uU3RyaW5nfSBpcyBlbXB0eWApO1xuICB9XG4gIHJldHVybiBfcGFyc2VKU09OKGpzb25TdHJpbmcudHJpbSgpLCBhbGxvd1BhcnRpYWwpO1xufVxuXG5jb25zdCBfcGFyc2VKU09OID0gKGpzb25TdHJpbmc6IHN0cmluZywgYWxsb3c6IG51bWJlcikgPT4ge1xuICBjb25zdCBsZW5ndGggPSBqc29uU3RyaW5nLmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gMDtcblxuICBjb25zdCBtYXJrUGFydGlhbEpTT04gPSAobXNnOiBzdHJpbmcpID0+IHtcbiAgICB0aHJvdyBuZXcgUGFydGlhbEpTT04oYCR7bXNnfSBhdCBwb3NpdGlvbiAke2luZGV4fWApO1xuICB9O1xuXG4gIGNvbnN0IHRocm93TWFsZm9ybWVkRXJyb3IgPSAobXNnOiBzdHJpbmcpID0+IHtcbiAgICB0aHJvdyBuZXcgTWFsZm9ybWVkSlNPTihgJHttc2d9IGF0IHBvc2l0aW9uICR7aW5kZXh9YCk7XG4gIH07XG5cbiAgY29uc3QgcGFyc2VBbnk6ICgpID0+IGFueSA9ICgpID0+IHtcbiAgICBza2lwQmxhbmsoKTtcbiAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSBtYXJrUGFydGlhbEpTT04oJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0Jyk7XG4gICAgaWYgKGpzb25TdHJpbmdbaW5kZXhdID09PSAnXCInKSByZXR1cm4gcGFyc2VTdHIoKTtcbiAgICBpZiAoanNvblN0cmluZ1tpbmRleF0gPT09ICd7JykgcmV0dXJuIHBhcnNlT2JqKCk7XG4gICAgaWYgKGpzb25TdHJpbmdbaW5kZXhdID09PSAnWycpIHJldHVybiBwYXJzZUFycigpO1xuICAgIGlmIChcbiAgICAgIGpzb25TdHJpbmcuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDQpID09PSAnbnVsbCcgfHxcbiAgICAgIChBbGxvdy5OVUxMICYgYWxsb3cgJiYgbGVuZ3RoIC0gaW5kZXggPCA0ICYmICdudWxsJy5zdGFydHNXaXRoKGpzb25TdHJpbmcuc3Vic3RyaW5nKGluZGV4KSkpXG4gICAgKSB7XG4gICAgICBpbmRleCArPSA0O1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGpzb25TdHJpbmcuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDQpID09PSAndHJ1ZScgfHxcbiAgICAgIChBbGxvdy5CT09MICYgYWxsb3cgJiYgbGVuZ3RoIC0gaW5kZXggPCA0ICYmICd0cnVlJy5zdGFydHNXaXRoKGpzb25TdHJpbmcuc3Vic3RyaW5nKGluZGV4KSkpXG4gICAgKSB7XG4gICAgICBpbmRleCArPSA0O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGpzb25TdHJpbmcuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDUpID09PSAnZmFsc2UnIHx8XG4gICAgICAoQWxsb3cuQk9PTCAmIGFsbG93ICYmIGxlbmd0aCAtIGluZGV4IDwgNSAmJiAnZmFsc2UnLnN0YXJ0c1dpdGgoanNvblN0cmluZy5zdWJzdHJpbmcoaW5kZXgpKSlcbiAgICApIHtcbiAgICAgIGluZGV4ICs9IDU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGpzb25TdHJpbmcuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDgpID09PSAnSW5maW5pdHknIHx8XG4gICAgICAoQWxsb3cuSU5GSU5JVFkgJiBhbGxvdyAmJiBsZW5ndGggLSBpbmRleCA8IDggJiYgJ0luZmluaXR5Jy5zdGFydHNXaXRoKGpzb25TdHJpbmcuc3Vic3RyaW5nKGluZGV4KSkpXG4gICAgKSB7XG4gICAgICBpbmRleCArPSA4O1xuICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBqc29uU3RyaW5nLnN1YnN0cmluZyhpbmRleCwgaW5kZXggKyA5KSA9PT0gJy1JbmZpbml0eScgfHxcbiAgICAgIChBbGxvdy5NSU5VU19JTkZJTklUWSAmIGFsbG93ICYmXG4gICAgICAgIDEgPCBsZW5ndGggLSBpbmRleCAmJlxuICAgICAgICBsZW5ndGggLSBpbmRleCA8IDkgJiZcbiAgICAgICAgJy1JbmZpbml0eScuc3RhcnRzV2l0aChqc29uU3RyaW5nLnN1YnN0cmluZyhpbmRleCkpKVxuICAgICkge1xuICAgICAgaW5kZXggKz0gOTtcbiAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGpzb25TdHJpbmcuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDMpID09PSAnTmFOJyB8fFxuICAgICAgKEFsbG93Lk5BTiAmIGFsbG93ICYmIGxlbmd0aCAtIGluZGV4IDwgMyAmJiAnTmFOJy5zdGFydHNXaXRoKGpzb25TdHJpbmcuc3Vic3RyaW5nKGluZGV4KSkpXG4gICAgKSB7XG4gICAgICBpbmRleCArPSAzO1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlTnVtKCk7XG4gIH07XG5cbiAgY29uc3QgcGFyc2VTdHI6ICgpID0+IHN0cmluZyA9ICgpID0+IHtcbiAgICBjb25zdCBzdGFydCA9IGluZGV4O1xuICAgIGxldCBlc2NhcGUgPSBmYWxzZTtcbiAgICBpbmRleCsrOyAvLyBza2lwIGluaXRpYWwgcXVvdGVcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgKGpzb25TdHJpbmdbaW5kZXhdICE9PSAnXCInIHx8IChlc2NhcGUgJiYganNvblN0cmluZ1tpbmRleCAtIDFdID09PSAnXFxcXCcpKSkge1xuICAgICAgZXNjYXBlID0ganNvblN0cmluZ1tpbmRleF0gPT09ICdcXFxcJyA/ICFlc2NhcGUgOiBmYWxzZTtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIGlmIChqc29uU3RyaW5nLmNoYXJBdChpbmRleCkgPT0gJ1wiJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblN0cmluZy5zdWJzdHJpbmcoc3RhcnQsICsraW5kZXggLSBOdW1iZXIoZXNjYXBlKSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvd01hbGZvcm1lZEVycm9yKFN0cmluZyhlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBbGxvdy5TVFIgJiBhbGxvdykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4IC0gTnVtYmVyKGVzY2FwZSkpICsgJ1wiJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFN5bnRheEVycm9yOiBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nLnN1YnN0cmluZyhzdGFydCwganNvblN0cmluZy5sYXN0SW5kZXhPZignXFxcXCcpKSArICdcIicpO1xuICAgICAgfVxuICAgIH1cbiAgICBtYXJrUGFydGlhbEpTT04oJ1VudGVybWluYXRlZCBzdHJpbmcgbGl0ZXJhbCcpO1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlT2JqID0gKCkgPT4ge1xuICAgIGluZGV4Kys7IC8vIHNraXAgaW5pdGlhbCBicmFjZVxuICAgIHNraXBCbGFuaygpO1xuICAgIGNvbnN0IG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICB3aGlsZSAoanNvblN0cmluZ1tpbmRleF0gIT09ICd9Jykge1xuICAgICAgICBza2lwQmxhbmsoKTtcbiAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCAmJiBBbGxvdy5PQkogJiBhbGxvdykgcmV0dXJuIG9iajtcbiAgICAgICAgY29uc3Qga2V5ID0gcGFyc2VTdHIoKTtcbiAgICAgICAgc2tpcEJsYW5rKCk7XG4gICAgICAgIGluZGV4Kys7IC8vIHNraXAgY29sb25cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlQW55KCk7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKEFsbG93Lk9CSiAmIGFsbG93KSByZXR1cm4gb2JqO1xuICAgICAgICAgIGVsc2UgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBza2lwQmxhbmsoKTtcbiAgICAgICAgaWYgKGpzb25TdHJpbmdbaW5kZXhdID09PSAnLCcpIGluZGV4Kys7IC8vIHNraXAgY29tbWFcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoQWxsb3cuT0JKICYgYWxsb3cpIHJldHVybiBvYmo7XG4gICAgICBlbHNlIG1hcmtQYXJ0aWFsSlNPTihcIkV4cGVjdGVkICd9JyBhdCBlbmQgb2Ygb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpbmRleCsrOyAvLyBza2lwIGZpbmFsIGJyYWNlXG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICBjb25zdCBwYXJzZUFyciA9ICgpID0+IHtcbiAgICBpbmRleCsrOyAvLyBza2lwIGluaXRpYWwgYnJhY2tldFxuICAgIGNvbnN0IGFyciA9IFtdO1xuICAgIHRyeSB7XG4gICAgICB3aGlsZSAoanNvblN0cmluZ1tpbmRleF0gIT09ICddJykge1xuICAgICAgICBhcnIucHVzaChwYXJzZUFueSgpKTtcbiAgICAgICAgc2tpcEJsYW5rKCk7XG4gICAgICAgIGlmIChqc29uU3RyaW5nW2luZGV4XSA9PT0gJywnKSB7XG4gICAgICAgICAgaW5kZXgrKzsgLy8gc2tpcCBjb21tYVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKEFsbG93LkFSUiAmIGFsbG93KSB7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9XG4gICAgICBtYXJrUGFydGlhbEpTT04oXCJFeHBlY3RlZCAnXScgYXQgZW5kIG9mIGFycmF5XCIpO1xuICAgIH1cbiAgICBpbmRleCsrOyAvLyBza2lwIGZpbmFsIGJyYWNrZXRcbiAgICByZXR1cm4gYXJyO1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlTnVtID0gKCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgaWYgKGpzb25TdHJpbmcgPT09ICctJyAmJiBBbGxvdy5OVU0gJiBhbGxvdykgbWFya1BhcnRpYWxKU09OKFwiTm90IHN1cmUgd2hhdCAnLScgaXNcIik7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKEFsbG93Lk5VTSAmIGFsbG93KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICgnLicgPT09IGpzb25TdHJpbmdbanNvblN0cmluZy5sZW5ndGggLSAxXSlcbiAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblN0cmluZy5zdWJzdHJpbmcoMCwganNvblN0cmluZy5sYXN0SW5kZXhPZignLicpKSk7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nLnN1YnN0cmluZygwLCBqc29uU3RyaW5nLmxhc3RJbmRleE9mKCdlJykpKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG4gICAgICAgIHRocm93TWFsZm9ybWVkRXJyb3IoU3RyaW5nKGUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IGluZGV4O1xuXG4gICAgaWYgKGpzb25TdHJpbmdbaW5kZXhdID09PSAnLScpIGluZGV4Kys7XG4gICAgd2hpbGUgKGpzb25TdHJpbmdbaW5kZXhdICYmICEnLF19Jy5pbmNsdWRlcyhqc29uU3RyaW5nW2luZGV4XSEpKSBpbmRleCsrO1xuXG4gICAgaWYgKGluZGV4ID09IGxlbmd0aCAmJiAhKEFsbG93Lk5VTSAmIGFsbG93KSkgbWFya1BhcnRpYWxKU09OKCdVbnRlcm1pbmF0ZWQgbnVtYmVyIGxpdGVyYWwnKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoanNvblN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KSA9PT0gJy0nICYmIEFsbG93Lk5VTSAmIGFsbG93KVxuICAgICAgICBtYXJrUGFydGlhbEpTT04oXCJOb3Qgc3VyZSB3aGF0ICctJyBpc1wiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBqc29uU3RyaW5nLmxhc3RJbmRleE9mKCdlJykpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3dNYWxmb3JtZWRFcnJvcihTdHJpbmcoZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBza2lwQmxhbmsgPSAoKSA9PiB7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmICcgXFxuXFxyXFx0Jy5pbmNsdWRlcyhqc29uU3RyaW5nW2luZGV4XSEpKSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gcGFyc2VBbnkoKTtcbn07XG5cbi8vIHVzaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBtYWxmb3JtZWQgSlNPTiBpcyB1bmRlZmluZWQgYmVoYXZpb3JcbmNvbnN0IHBhcnRpYWxQYXJzZSA9IChpbnB1dDogc3RyaW5nKSA9PiBwYXJzZUpTT04oaW5wdXQsIEFsbG93LkFMTCBeIEFsbG93Lk5VTSk7XG5cbmV4cG9ydCB7IHBhcnRpYWxQYXJzZSwgUGFydGlhbEpTT04sIE1hbGZvcm1lZEpTT04gfTtcbiIsICJpbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHtcbiAgT3BlbkFJRXJyb3IsXG4gIEFQSVVzZXJBYm9ydEVycm9yLFxuICBMZW5ndGhGaW5pc2hSZWFzb25FcnJvcixcbiAgQ29udGVudEZpbHRlckZpbmlzaFJlYXNvbkVycm9yLFxufSBmcm9tICcuLi9lcnJvcic7XG5pbXBvcnQge1xuICBDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYixcbiAgdHlwZSBDaGF0Q29tcGxldGlvbixcbiAgdHlwZSBDaGF0Q29tcGxldGlvbkNodW5rLFxuICB0eXBlIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLFxuICB0eXBlIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICB0eXBlIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zQmFzZSxcbiAgdHlwZSBDaGF0Q29tcGxldGlvblJvbGUsXG59IGZyb20gJy4uL3Jlc291cmNlcy9jaGF0L2NvbXBsZXRpb25zL2NvbXBsZXRpb25zJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXIsXG4gIHR5cGUgQWJzdHJhY3RDaGF0Q29tcGxldGlvblJ1bm5lckV2ZW50cyxcbn0gZnJvbSAnLi9BYnN0cmFjdENoYXRDb21wbGV0aW9uUnVubmVyJztcbmltcG9ydCB7IHR5cGUgUmVhZGFibGVTdHJlYW0gfSBmcm9tICcuLi9fc2hpbXMvaW5kZXgnO1xuaW1wb3J0IHsgU3RyZWFtIH0gZnJvbSAnLi4vc3RyZWFtaW5nJztcbmltcG9ydCBPcGVuQUkgZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgUGFyc2VkQ2hhdENvbXBsZXRpb24gfSBmcm9tICcuLi9yZXNvdXJjZXMvYmV0YS9jaGF0L2NvbXBsZXRpb25zJztcbmltcG9ydCB7XG4gIEF1dG9QYXJzZWFibGVSZXNwb25zZUZvcm1hdCxcbiAgaGFzQXV0b1BhcnNlYWJsZUlucHV0LFxuICBpc0F1dG9QYXJzYWJsZVJlc3BvbnNlRm9ybWF0LFxuICBpc0F1dG9QYXJzYWJsZVRvb2wsXG4gIG1heWJlUGFyc2VDaGF0Q29tcGxldGlvbixcbiAgc2hvdWxkUGFyc2VUb29sQ2FsbCxcbn0gZnJvbSAnLi4vbGliL3BhcnNlcic7XG5pbXBvcnQgeyBwYXJ0aWFsUGFyc2UgfSBmcm9tICcuLi9fdmVuZG9yL3BhcnRpYWwtanNvbi1wYXJzZXIvcGFyc2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50RGVsdGFFdmVudCB7XG4gIGRlbHRhOiBzdHJpbmc7XG4gIHNuYXBzaG90OiBzdHJpbmc7XG4gIHBhcnNlZDogdW5rbm93biB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudERvbmVFdmVudDxQYXJzZWRUID0gbnVsbD4ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHBhcnNlZDogUGFyc2VkVCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmdXNhbERlbHRhRXZlbnQge1xuICBkZWx0YTogc3RyaW5nO1xuICBzbmFwc2hvdDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZnVzYWxEb25lRXZlbnQge1xuICByZWZ1c2FsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25Ub29sQ2FsbEFyZ3VtZW50c0RlbHRhRXZlbnQge1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgaW5kZXg6IG51bWJlcjtcblxuICBhcmd1bWVudHM6IHN0cmluZztcblxuICBwYXJzZWRfYXJndW1lbnRzOiB1bmtub3duO1xuXG4gIGFyZ3VtZW50c19kZWx0YTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uVG9vbENhbGxBcmd1bWVudHNEb25lRXZlbnQge1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgaW5kZXg6IG51bWJlcjtcblxuICBhcmd1bWVudHM6IHN0cmluZztcblxuICBwYXJzZWRfYXJndW1lbnRzOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ1Byb2JzQ29udGVudERlbHRhRXZlbnQge1xuICBjb250ZW50OiBBcnJheTxDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYj47XG4gIHNuYXBzaG90OiBBcnJheTxDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nUHJvYnNDb250ZW50RG9uZUV2ZW50IHtcbiAgY29udGVudDogQXJyYXk8Q2hhdENvbXBsZXRpb25Ub2tlbkxvZ3Byb2I+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ1Byb2JzUmVmdXNhbERlbHRhRXZlbnQge1xuICByZWZ1c2FsOiBBcnJheTxDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYj47XG4gIHNuYXBzaG90OiBBcnJheTxDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nUHJvYnNSZWZ1c2FsRG9uZUV2ZW50IHtcbiAgcmVmdXNhbDogQXJyYXk8Q2hhdENvbXBsZXRpb25Ub2tlbkxvZ3Byb2I+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wbGV0aW9uU3RyZWFtRXZlbnRzPFBhcnNlZFQgPSBudWxsPiBleHRlbmRzIEFic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJFdmVudHMge1xuICBjb250ZW50OiAoY29udGVudERlbHRhOiBzdHJpbmcsIGNvbnRlbnRTbmFwc2hvdDogc3RyaW5nKSA9PiB2b2lkO1xuICBjaHVuazogKGNodW5rOiBDaGF0Q29tcGxldGlvbkNodW5rLCBzbmFwc2hvdDogQ2hhdENvbXBsZXRpb25TbmFwc2hvdCkgPT4gdm9pZDtcblxuICAnY29udGVudC5kZWx0YSc6IChwcm9wczogQ29udGVudERlbHRhRXZlbnQpID0+IHZvaWQ7XG4gICdjb250ZW50LmRvbmUnOiAocHJvcHM6IENvbnRlbnREb25lRXZlbnQ8UGFyc2VkVD4pID0+IHZvaWQ7XG5cbiAgJ3JlZnVzYWwuZGVsdGEnOiAocHJvcHM6IFJlZnVzYWxEZWx0YUV2ZW50KSA9PiB2b2lkO1xuICAncmVmdXNhbC5kb25lJzogKHByb3BzOiBSZWZ1c2FsRG9uZUV2ZW50KSA9PiB2b2lkO1xuXG4gICd0b29sX2NhbGxzLmZ1bmN0aW9uLmFyZ3VtZW50cy5kZWx0YSc6IChwcm9wczogRnVuY3Rpb25Ub29sQ2FsbEFyZ3VtZW50c0RlbHRhRXZlbnQpID0+IHZvaWQ7XG4gICd0b29sX2NhbGxzLmZ1bmN0aW9uLmFyZ3VtZW50cy5kb25lJzogKHByb3BzOiBGdW5jdGlvblRvb2xDYWxsQXJndW1lbnRzRG9uZUV2ZW50KSA9PiB2b2lkO1xuXG4gICdsb2dwcm9icy5jb250ZW50LmRlbHRhJzogKHByb3BzOiBMb2dQcm9ic0NvbnRlbnREZWx0YUV2ZW50KSA9PiB2b2lkO1xuICAnbG9ncHJvYnMuY29udGVudC5kb25lJzogKHByb3BzOiBMb2dQcm9ic0NvbnRlbnREb25lRXZlbnQpID0+IHZvaWQ7XG5cbiAgJ2xvZ3Byb2JzLnJlZnVzYWwuZGVsdGEnOiAocHJvcHM6IExvZ1Byb2JzUmVmdXNhbERlbHRhRXZlbnQpID0+IHZvaWQ7XG4gICdsb2dwcm9icy5yZWZ1c2FsLmRvbmUnOiAocHJvcHM6IExvZ1Byb2JzUmVmdXNhbERvbmVFdmVudCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhdENvbXBsZXRpb25TdHJlYW1QYXJhbXMgPSBPbWl0PENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zQmFzZSwgJ3N0cmVhbSc+ICYge1xuICBzdHJlYW0/OiB0cnVlO1xufTtcblxuaW50ZXJmYWNlIENob2ljZUV2ZW50U3RhdGUge1xuICBjb250ZW50X2RvbmU6IGJvb2xlYW47XG4gIHJlZnVzYWxfZG9uZTogYm9vbGVhbjtcbiAgbG9ncHJvYnNfY29udGVudF9kb25lOiBib29sZWFuO1xuICBsb2dwcm9ic19yZWZ1c2FsX2RvbmU6IGJvb2xlYW47XG4gIGN1cnJlbnRfdG9vbF9jYWxsX2luZGV4OiBudW1iZXIgfCBudWxsO1xuICBkb25lX3Rvb2xfY2FsbHM6IFNldDxudW1iZXI+O1xufVxuXG5leHBvcnQgY2xhc3MgQ2hhdENvbXBsZXRpb25TdHJlYW08UGFyc2VkVCA9IG51bGw+XG4gIGV4dGVuZHMgQWJzdHJhY3RDaGF0Q29tcGxldGlvblJ1bm5lcjxDaGF0Q29tcGxldGlvblN0cmVhbUV2ZW50czxQYXJzZWRUPiwgUGFyc2VkVD5cbiAgaW1wbGVtZW50cyBBc3luY0l0ZXJhYmxlPENoYXRDb21wbGV0aW9uQ2h1bms+XG57XG4gICNwYXJhbXM6IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zIHwgbnVsbDtcbiAgI2Nob2ljZUV2ZW50U3RhdGVzOiBDaG9pY2VFdmVudFN0YXRlW107XG4gICNjdXJyZW50Q2hhdENvbXBsZXRpb25TbmFwc2hvdDogQ2hhdENvbXBsZXRpb25TbmFwc2hvdCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihwYXJhbXM6IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zIHwgbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jcGFyYW1zID0gcGFyYW1zO1xuICAgIHRoaXMuI2Nob2ljZUV2ZW50U3RhdGVzID0gW107XG4gIH1cblxuICBnZXQgY3VycmVudENoYXRDb21wbGV0aW9uU25hcHNob3QoKTogQ2hhdENvbXBsZXRpb25TbmFwc2hvdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRDaGF0Q29tcGxldGlvblNuYXBzaG90O1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVuZGVkIGZvciB1c2Ugb24gdGhlIGZyb250ZW5kLCBjb25zdW1pbmcgYSBzdHJlYW0gcHJvZHVjZWQgd2l0aFxuICAgKiBgLnRvUmVhZGFibGVTdHJlYW0oKWAgb24gdGhlIGJhY2tlbmQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBtZXNzYWdlcyBzZW50IHRvIHRoZSBtb2RlbCBkbyBub3QgYXBwZWFyIGluIGAub24oJ21lc3NhZ2UnKWBcbiAgICogaW4gdGhpcyBjb250ZXh0LlxuICAgKi9cbiAgc3RhdGljIGZyb21SZWFkYWJsZVN0cmVhbShzdHJlYW06IFJlYWRhYmxlU3RyZWFtKTogQ2hhdENvbXBsZXRpb25TdHJlYW08bnVsbD4ge1xuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBDaGF0Q29tcGxldGlvblN0cmVhbShudWxsKTtcbiAgICBydW5uZXIuX3J1bigoKSA9PiBydW5uZXIuX2Zyb21SZWFkYWJsZVN0cmVhbShzdHJlYW0pKTtcbiAgICByZXR1cm4gcnVubmVyO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUNoYXRDb21wbGV0aW9uPFBhcnNlZFQ+KFxuICAgIGNsaWVudDogT3BlbkFJLFxuICAgIHBhcmFtczogQ2hhdENvbXBsZXRpb25TdHJlYW1QYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENoYXRDb21wbGV0aW9uU3RyZWFtPFBhcnNlZFQ+IHtcbiAgICBjb25zdCBydW5uZXIgPSBuZXcgQ2hhdENvbXBsZXRpb25TdHJlYW08UGFyc2VkVD4ocGFyYW1zIGFzIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nKTtcbiAgICBydW5uZXIuX3J1bigoKSA9PlxuICAgICAgcnVubmVyLl9ydW5DaGF0Q29tcGxldGlvbihcbiAgICAgICAgY2xpZW50LFxuICAgICAgICB7IC4uLnBhcmFtcywgc3RyZWFtOiB0cnVlIH0sXG4gICAgICAgIHsgLi4ub3B0aW9ucywgaGVhZGVyczogeyAuLi5vcHRpb25zPy5oZWFkZXJzLCAnWC1TdGFpbmxlc3MtSGVscGVyLU1ldGhvZCc6ICdzdHJlYW0nIH0gfSxcbiAgICAgICksXG4gICAgKTtcbiAgICByZXR1cm4gcnVubmVyO1xuICB9XG5cbiAgI2JlZ2luUmVxdWVzdCgpIHtcbiAgICBpZiAodGhpcy5lbmRlZCkgcmV0dXJuO1xuICAgIHRoaXMuI2N1cnJlbnRDaGF0Q29tcGxldGlvblNuYXBzaG90ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2dldENob2ljZUV2ZW50U3RhdGUoY2hvaWNlOiBDaGF0Q29tcGxldGlvblNuYXBzaG90LkNob2ljZSk6IENob2ljZUV2ZW50U3RhdGUge1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuI2Nob2ljZUV2ZW50U3RhdGVzW2Nob2ljZS5pbmRleF07XG4gICAgaWYgKHN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgc3RhdGUgPSB7XG4gICAgICBjb250ZW50X2RvbmU6IGZhbHNlLFxuICAgICAgcmVmdXNhbF9kb25lOiBmYWxzZSxcbiAgICAgIGxvZ3Byb2JzX2NvbnRlbnRfZG9uZTogZmFsc2UsXG4gICAgICBsb2dwcm9ic19yZWZ1c2FsX2RvbmU6IGZhbHNlLFxuICAgICAgZG9uZV90b29sX2NhbGxzOiBuZXcgU2V0KCksXG4gICAgICBjdXJyZW50X3Rvb2xfY2FsbF9pbmRleDogbnVsbCxcbiAgICB9O1xuICAgIHRoaXMuI2Nob2ljZUV2ZW50U3RhdGVzW2Nob2ljZS5pbmRleF0gPSBzdGF0ZTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAjYWRkQ2h1bmsodGhpczogQ2hhdENvbXBsZXRpb25TdHJlYW08UGFyc2VkVD4sIGNodW5rOiBDaGF0Q29tcGxldGlvbkNodW5rKSB7XG4gICAgaWYgKHRoaXMuZW5kZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbXBsZXRpb24gPSB0aGlzLiNhY2N1bXVsYXRlQ2hhdENvbXBsZXRpb24oY2h1bmspO1xuICAgIHRoaXMuX2VtaXQoJ2NodW5rJywgY2h1bmssIGNvbXBsZXRpb24pO1xuXG4gICAgZm9yIChjb25zdCBjaG9pY2Ugb2YgY2h1bmsuY2hvaWNlcykge1xuICAgICAgY29uc3QgY2hvaWNlU25hcHNob3QgPSBjb21wbGV0aW9uLmNob2ljZXNbY2hvaWNlLmluZGV4XSE7XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2hvaWNlLmRlbHRhLmNvbnRlbnQgIT0gbnVsbCAmJlxuICAgICAgICBjaG9pY2VTbmFwc2hvdC5tZXNzYWdlPy5yb2xlID09PSAnYXNzaXN0YW50JyAmJlxuICAgICAgICBjaG9pY2VTbmFwc2hvdC5tZXNzYWdlPy5jb250ZW50XG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fZW1pdCgnY29udGVudCcsIGNob2ljZS5kZWx0YS5jb250ZW50LCBjaG9pY2VTbmFwc2hvdC5tZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgICB0aGlzLl9lbWl0KCdjb250ZW50LmRlbHRhJywge1xuICAgICAgICAgIGRlbHRhOiBjaG9pY2UuZGVsdGEuY29udGVudCxcbiAgICAgICAgICBzbmFwc2hvdDogY2hvaWNlU25hcHNob3QubWVzc2FnZS5jb250ZW50LFxuICAgICAgICAgIHBhcnNlZDogY2hvaWNlU25hcHNob3QubWVzc2FnZS5wYXJzZWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNob2ljZS5kZWx0YS5yZWZ1c2FsICE9IG51bGwgJiZcbiAgICAgICAgY2hvaWNlU25hcHNob3QubWVzc2FnZT8ucm9sZSA9PT0gJ2Fzc2lzdGFudCcgJiZcbiAgICAgICAgY2hvaWNlU25hcHNob3QubWVzc2FnZT8ucmVmdXNhbFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2VtaXQoJ3JlZnVzYWwuZGVsdGEnLCB7XG4gICAgICAgICAgZGVsdGE6IGNob2ljZS5kZWx0YS5yZWZ1c2FsLFxuICAgICAgICAgIHNuYXBzaG90OiBjaG9pY2VTbmFwc2hvdC5tZXNzYWdlLnJlZnVzYWwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hvaWNlLmxvZ3Byb2JzPy5jb250ZW50ICE9IG51bGwgJiYgY2hvaWNlU25hcHNob3QubWVzc2FnZT8ucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgdGhpcy5fZW1pdCgnbG9ncHJvYnMuY29udGVudC5kZWx0YScsIHtcbiAgICAgICAgICBjb250ZW50OiBjaG9pY2UubG9ncHJvYnM/LmNvbnRlbnQsXG4gICAgICAgICAgc25hcHNob3Q6IGNob2ljZVNuYXBzaG90LmxvZ3Byb2JzPy5jb250ZW50ID8/IFtdLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNob2ljZS5sb2dwcm9icz8ucmVmdXNhbCAhPSBudWxsICYmIGNob2ljZVNuYXBzaG90Lm1lc3NhZ2U/LnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgIHRoaXMuX2VtaXQoJ2xvZ3Byb2JzLnJlZnVzYWwuZGVsdGEnLCB7XG4gICAgICAgICAgcmVmdXNhbDogY2hvaWNlLmxvZ3Byb2JzPy5yZWZ1c2FsLFxuICAgICAgICAgIHNuYXBzaG90OiBjaG9pY2VTbmFwc2hvdC5sb2dwcm9icz8ucmVmdXNhbCA/PyBbXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy4jZ2V0Q2hvaWNlRXZlbnRTdGF0ZShjaG9pY2VTbmFwc2hvdCk7XG5cbiAgICAgIGlmIChjaG9pY2VTbmFwc2hvdC5maW5pc2hfcmVhc29uKSB7XG4gICAgICAgIHRoaXMuI2VtaXRDb250ZW50RG9uZUV2ZW50cyhjaG9pY2VTbmFwc2hvdCk7XG5cbiAgICAgICAgaWYgKHN0YXRlLmN1cnJlbnRfdG9vbF9jYWxsX2luZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLiNlbWl0VG9vbENhbGxEb25lRXZlbnQoY2hvaWNlU25hcHNob3QsIHN0YXRlLmN1cnJlbnRfdG9vbF9jYWxsX2luZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHRvb2xDYWxsIG9mIGNob2ljZS5kZWx0YS50b29sX2NhbGxzID8/IFtdKSB7XG4gICAgICAgIGlmIChzdGF0ZS5jdXJyZW50X3Rvb2xfY2FsbF9pbmRleCAhPT0gdG9vbENhbGwuaW5kZXgpIHtcbiAgICAgICAgICB0aGlzLiNlbWl0Q29udGVudERvbmVFdmVudHMoY2hvaWNlU25hcHNob3QpO1xuXG4gICAgICAgICAgLy8gbmV3IHRvb2wgY2FsbCBzdGFydGVkLCB0aGUgcHJldmlvdXMgb25lIGlzIGRvbmVcbiAgICAgICAgICBpZiAoc3RhdGUuY3VycmVudF90b29sX2NhbGxfaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy4jZW1pdFRvb2xDYWxsRG9uZUV2ZW50KGNob2ljZVNuYXBzaG90LCBzdGF0ZS5jdXJyZW50X3Rvb2xfY2FsbF9pbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUuY3VycmVudF90b29sX2NhbGxfaW5kZXggPSB0b29sQ2FsbC5pbmRleDtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB0b29sQ2FsbERlbHRhIG9mIGNob2ljZS5kZWx0YS50b29sX2NhbGxzID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHRvb2xDYWxsU25hcHNob3QgPSBjaG9pY2VTbmFwc2hvdC5tZXNzYWdlLnRvb2xfY2FsbHM/Llt0b29sQ2FsbERlbHRhLmluZGV4XTtcbiAgICAgICAgaWYgKCF0b29sQ2FsbFNuYXBzaG90Py50eXBlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9vbENhbGxTbmFwc2hvdD8udHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRoaXMuX2VtaXQoJ3Rvb2xfY2FsbHMuZnVuY3Rpb24uYXJndW1lbnRzLmRlbHRhJywge1xuICAgICAgICAgICAgbmFtZTogdG9vbENhbGxTbmFwc2hvdC5mdW5jdGlvbj8ubmFtZSxcbiAgICAgICAgICAgIGluZGV4OiB0b29sQ2FsbERlbHRhLmluZGV4LFxuICAgICAgICAgICAgYXJndW1lbnRzOiB0b29sQ2FsbFNuYXBzaG90LmZ1bmN0aW9uLmFyZ3VtZW50cyxcbiAgICAgICAgICAgIHBhcnNlZF9hcmd1bWVudHM6IHRvb2xDYWxsU25hcHNob3QuZnVuY3Rpb24ucGFyc2VkX2FyZ3VtZW50cyxcbiAgICAgICAgICAgIGFyZ3VtZW50c19kZWx0YTogdG9vbENhbGxEZWx0YS5mdW5jdGlvbj8uYXJndW1lbnRzID8/ICcnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2VydE5ldmVyKHRvb2xDYWxsU25hcHNob3Q/LnR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2VtaXRUb29sQ2FsbERvbmVFdmVudChjaG9pY2VTbmFwc2hvdDogQ2hhdENvbXBsZXRpb25TbmFwc2hvdC5DaG9pY2UsIHRvb2xDYWxsSW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy4jZ2V0Q2hvaWNlRXZlbnRTdGF0ZShjaG9pY2VTbmFwc2hvdCk7XG4gICAgaWYgKHN0YXRlLmRvbmVfdG9vbF9jYWxscy5oYXModG9vbENhbGxJbmRleCkpIHtcbiAgICAgIC8vIHdlJ3ZlIGFscmVhZHkgZmlyZWQgdGhlIGRvbmUgZXZlbnRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0b29sQ2FsbFNuYXBzaG90ID0gY2hvaWNlU25hcHNob3QubWVzc2FnZS50b29sX2NhbGxzPy5bdG9vbENhbGxJbmRleF07XG4gICAgaWYgKCF0b29sQ2FsbFNuYXBzaG90KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHRvb2wgY2FsbCBzbmFwc2hvdCcpO1xuICAgIH1cbiAgICBpZiAoIXRvb2xDYWxsU25hcHNob3QudHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b29sIGNhbGwgc25hcHNob3QgbWlzc2luZyBgdHlwZWAnKTtcbiAgICB9XG5cbiAgICBpZiAodG9vbENhbGxTbmFwc2hvdC50eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBpbnB1dFRvb2wgPSB0aGlzLiNwYXJhbXM/LnRvb2xzPy5maW5kKFxuICAgICAgICAodG9vbCkgPT4gdG9vbC50eXBlID09PSAnZnVuY3Rpb24nICYmIHRvb2wuZnVuY3Rpb24ubmFtZSA9PT0gdG9vbENhbGxTbmFwc2hvdC5mdW5jdGlvbi5uYW1lLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5fZW1pdCgndG9vbF9jYWxscy5mdW5jdGlvbi5hcmd1bWVudHMuZG9uZScsIHtcbiAgICAgICAgbmFtZTogdG9vbENhbGxTbmFwc2hvdC5mdW5jdGlvbi5uYW1lLFxuICAgICAgICBpbmRleDogdG9vbENhbGxJbmRleCxcbiAgICAgICAgYXJndW1lbnRzOiB0b29sQ2FsbFNuYXBzaG90LmZ1bmN0aW9uLmFyZ3VtZW50cyxcbiAgICAgICAgcGFyc2VkX2FyZ3VtZW50czpcbiAgICAgICAgICBpc0F1dG9QYXJzYWJsZVRvb2woaW5wdXRUb29sKSA/IGlucHV0VG9vbC4kcGFyc2VSYXcodG9vbENhbGxTbmFwc2hvdC5mdW5jdGlvbi5hcmd1bWVudHMpXG4gICAgICAgICAgOiBpbnB1dFRvb2w/LmZ1bmN0aW9uLnN0cmljdCA/IEpTT04ucGFyc2UodG9vbENhbGxTbmFwc2hvdC5mdW5jdGlvbi5hcmd1bWVudHMpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydE5ldmVyKHRvb2xDYWxsU25hcHNob3QudHlwZSk7XG4gICAgfVxuICB9XG5cbiAgI2VtaXRDb250ZW50RG9uZUV2ZW50cyhjaG9pY2VTbmFwc2hvdDogQ2hhdENvbXBsZXRpb25TbmFwc2hvdC5DaG9pY2UpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuI2dldENob2ljZUV2ZW50U3RhdGUoY2hvaWNlU25hcHNob3QpO1xuXG4gICAgaWYgKGNob2ljZVNuYXBzaG90Lm1lc3NhZ2UuY29udGVudCAmJiAhc3RhdGUuY29udGVudF9kb25lKSB7XG4gICAgICBzdGF0ZS5jb250ZW50X2RvbmUgPSB0cnVlO1xuXG4gICAgICBjb25zdCByZXNwb25zZUZvcm1hdCA9IHRoaXMuI2dldEF1dG9QYXJzZWFibGVSZXNwb25zZUZvcm1hdCgpO1xuXG4gICAgICB0aGlzLl9lbWl0KCdjb250ZW50LmRvbmUnLCB7XG4gICAgICAgIGNvbnRlbnQ6IGNob2ljZVNuYXBzaG90Lm1lc3NhZ2UuY29udGVudCxcbiAgICAgICAgcGFyc2VkOiByZXNwb25zZUZvcm1hdCA/IHJlc3BvbnNlRm9ybWF0LiRwYXJzZVJhdyhjaG9pY2VTbmFwc2hvdC5tZXNzYWdlLmNvbnRlbnQpIDogKG51bGwgYXMgYW55KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaG9pY2VTbmFwc2hvdC5tZXNzYWdlLnJlZnVzYWwgJiYgIXN0YXRlLnJlZnVzYWxfZG9uZSkge1xuICAgICAgc3RhdGUucmVmdXNhbF9kb25lID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fZW1pdCgncmVmdXNhbC5kb25lJywgeyByZWZ1c2FsOiBjaG9pY2VTbmFwc2hvdC5tZXNzYWdlLnJlZnVzYWwgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNob2ljZVNuYXBzaG90LmxvZ3Byb2JzPy5jb250ZW50ICYmICFzdGF0ZS5sb2dwcm9ic19jb250ZW50X2RvbmUpIHtcbiAgICAgIHN0YXRlLmxvZ3Byb2JzX2NvbnRlbnRfZG9uZSA9IHRydWU7XG5cbiAgICAgIHRoaXMuX2VtaXQoJ2xvZ3Byb2JzLmNvbnRlbnQuZG9uZScsIHsgY29udGVudDogY2hvaWNlU25hcHNob3QubG9ncHJvYnMuY29udGVudCB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hvaWNlU25hcHNob3QubG9ncHJvYnM/LnJlZnVzYWwgJiYgIXN0YXRlLmxvZ3Byb2JzX3JlZnVzYWxfZG9uZSkge1xuICAgICAgc3RhdGUubG9ncHJvYnNfcmVmdXNhbF9kb25lID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fZW1pdCgnbG9ncHJvYnMucmVmdXNhbC5kb25lJywgeyByZWZ1c2FsOiBjaG9pY2VTbmFwc2hvdC5sb2dwcm9icy5yZWZ1c2FsIH0pO1xuICAgIH1cbiAgfVxuXG4gICNlbmRSZXF1ZXN0KCk6IFBhcnNlZENoYXRDb21wbGV0aW9uPFBhcnNlZFQ+IHtcbiAgICBpZiAodGhpcy5lbmRlZCkge1xuICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBzdHJlYW0gaGFzIGVuZGVkLCB0aGlzIHNob3VsZG4ndCBoYXBwZW5gKTtcbiAgICB9XG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLiNjdXJyZW50Q2hhdENvbXBsZXRpb25TbmFwc2hvdDtcbiAgICBpZiAoIXNuYXBzaG90KSB7XG4gICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoYHJlcXVlc3QgZW5kZWQgd2l0aG91dCBzZW5kaW5nIGFueSBjaHVua3NgKTtcbiAgICB9XG4gICAgdGhpcy4jY3VycmVudENoYXRDb21wbGV0aW9uU25hcHNob3QgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy4jY2hvaWNlRXZlbnRTdGF0ZXMgPSBbXTtcbiAgICByZXR1cm4gZmluYWxpemVDaGF0Q29tcGxldGlvbihzbmFwc2hvdCwgdGhpcy4jcGFyYW1zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBfY3JlYXRlQ2hhdENvbXBsZXRpb24oXG4gICAgY2xpZW50OiBPcGVuQUksXG4gICAgcGFyYW1zOiBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxQYXJzZWRDaGF0Q29tcGxldGlvbjxQYXJzZWRUPj4ge1xuICAgIHN1cGVyLl9jcmVhdGVDaGF0Q29tcGxldGlvbjtcbiAgICBjb25zdCBzaWduYWwgPSBvcHRpb25zPy5zaWduYWw7XG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHRoaXMuY29udHJvbGxlci5hYm9ydCgpKTtcbiAgICB9XG4gICAgdGhpcy4jYmVnaW5SZXF1ZXN0KCk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBjbGllbnQuY2hhdC5jb21wbGV0aW9ucy5jcmVhdGUoXG4gICAgICB7IC4uLnBhcmFtcywgc3RyZWFtOiB0cnVlIH0sXG4gICAgICB7IC4uLm9wdGlvbnMsIHNpZ25hbDogdGhpcy5jb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICk7XG4gICAgdGhpcy5fY29ubmVjdGVkKCk7XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgIHRoaXMuI2FkZENodW5rKGNodW5rKTtcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5jb250cm9sbGVyLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEFQSVVzZXJBYm9ydEVycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hZGRDaGF0Q29tcGxldGlvbih0aGlzLiNlbmRSZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9mcm9tUmVhZGFibGVTdHJlYW0oXG4gICAgcmVhZGFibGVTdHJlYW06IFJlYWRhYmxlU3RyZWFtLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPENoYXRDb21wbGV0aW9uPiB7XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucz8uc2lnbmFsO1xuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhpcy5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKSk7XG4gICAgfVxuICAgIHRoaXMuI2JlZ2luUmVxdWVzdCgpO1xuICAgIHRoaXMuX2Nvbm5lY3RlZCgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IFN0cmVhbS5mcm9tUmVhZGFibGVTdHJlYW08Q2hhdENvbXBsZXRpb25DaHVuaz4ocmVhZGFibGVTdHJlYW0sIHRoaXMuY29udHJvbGxlcik7XG4gICAgbGV0IGNoYXRJZDtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgICAgaWYgKGNoYXRJZCAmJiBjaGF0SWQgIT09IGNodW5rLmlkKSB7XG4gICAgICAgIC8vIEEgbmV3IHJlcXVlc3QgaGFzIGJlZW4gbWFkZS5cbiAgICAgICAgdGhpcy5fYWRkQ2hhdENvbXBsZXRpb24odGhpcy4jZW5kUmVxdWVzdCgpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jYWRkQ2h1bmsoY2h1bmspO1xuICAgICAgY2hhdElkID0gY2h1bmsuaWQ7XG4gICAgfVxuICAgIGlmIChzdHJlYW0uY29udHJvbGxlci5zaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBBUElVc2VyQWJvcnRFcnJvcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWRkQ2hhdENvbXBsZXRpb24odGhpcy4jZW5kUmVxdWVzdCgpKTtcbiAgfVxuXG4gICNnZXRBdXRvUGFyc2VhYmxlUmVzcG9uc2VGb3JtYXQoKTogQXV0b1BhcnNlYWJsZVJlc3BvbnNlRm9ybWF0PFBhcnNlZFQ+IHwgbnVsbCB7XG4gICAgY29uc3QgcmVzcG9uc2VGb3JtYXQgPSB0aGlzLiNwYXJhbXM/LnJlc3BvbnNlX2Zvcm1hdDtcbiAgICBpZiAoaXNBdXRvUGFyc2FibGVSZXNwb25zZUZvcm1hdDxQYXJzZWRUPihyZXNwb25zZUZvcm1hdCkpIHtcbiAgICAgIHJldHVybiByZXNwb25zZUZvcm1hdDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gICNhY2N1bXVsYXRlQ2hhdENvbXBsZXRpb24oY2h1bms6IENoYXRDb21wbGV0aW9uQ2h1bmspOiBDaGF0Q29tcGxldGlvblNuYXBzaG90IHtcbiAgICBsZXQgc25hcHNob3QgPSB0aGlzLiNjdXJyZW50Q2hhdENvbXBsZXRpb25TbmFwc2hvdDtcbiAgICBjb25zdCB7IGNob2ljZXMsIC4uLnJlc3QgfSA9IGNodW5rO1xuICAgIGlmICghc25hcHNob3QpIHtcbiAgICAgIHNuYXBzaG90ID0gdGhpcy4jY3VycmVudENoYXRDb21wbGV0aW9uU25hcHNob3QgPSB7XG4gICAgICAgIC4uLnJlc3QsXG4gICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihzbmFwc2hvdCwgcmVzdCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7IGRlbHRhLCBmaW5pc2hfcmVhc29uLCBpbmRleCwgbG9ncHJvYnMgPSBudWxsLCAuLi5vdGhlciB9IG9mIGNodW5rLmNob2ljZXMpIHtcbiAgICAgIGxldCBjaG9pY2UgPSBzbmFwc2hvdC5jaG9pY2VzW2luZGV4XTtcbiAgICAgIGlmICghY2hvaWNlKSB7XG4gICAgICAgIGNob2ljZSA9IHNuYXBzaG90LmNob2ljZXNbaW5kZXhdID0geyBmaW5pc2hfcmVhc29uLCBpbmRleCwgbWVzc2FnZToge30sIGxvZ3Byb2JzLCAuLi5vdGhlciB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobG9ncHJvYnMpIHtcbiAgICAgICAgaWYgKCFjaG9pY2UubG9ncHJvYnMpIHtcbiAgICAgICAgICBjaG9pY2UubG9ncHJvYnMgPSBPYmplY3QuYXNzaWduKHt9LCBsb2dwcm9icyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBjb250ZW50LCByZWZ1c2FsLCAuLi5yZXN0IH0gPSBsb2dwcm9icztcbiAgICAgICAgICBhc3NlcnRJc0VtcHR5KHJlc3QpO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY2hvaWNlLmxvZ3Byb2JzLCByZXN0KTtcblxuICAgICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICBjaG9pY2UubG9ncHJvYnMuY29udGVudCA/Pz0gW107XG4gICAgICAgICAgICBjaG9pY2UubG9ncHJvYnMuY29udGVudC5wdXNoKC4uLmNvbnRlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWZ1c2FsKSB7XG4gICAgICAgICAgICBjaG9pY2UubG9ncHJvYnMucmVmdXNhbCA/Pz0gW107XG4gICAgICAgICAgICBjaG9pY2UubG9ncHJvYnMucmVmdXNhbC5wdXNoKC4uLnJlZnVzYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluaXNoX3JlYXNvbikge1xuICAgICAgICBjaG9pY2UuZmluaXNoX3JlYXNvbiA9IGZpbmlzaF9yZWFzb247XG5cbiAgICAgICAgaWYgKHRoaXMuI3BhcmFtcyAmJiBoYXNBdXRvUGFyc2VhYmxlSW5wdXQodGhpcy4jcGFyYW1zKSkge1xuICAgICAgICAgIGlmIChmaW5pc2hfcmVhc29uID09PSAnbGVuZ3RoJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IExlbmd0aEZpbmlzaFJlYXNvbkVycm9yKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpbmlzaF9yZWFzb24gPT09ICdjb250ZW50X2ZpbHRlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb250ZW50RmlsdGVyRmluaXNoUmVhc29uRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihjaG9pY2UsIG90aGVyKTtcblxuICAgICAgaWYgKCFkZWx0YSkgY29udGludWU7IC8vIFNob3VsZG4ndCBoYXBwZW47IGp1c3QgaW4gY2FzZS5cblxuICAgICAgY29uc3QgeyBjb250ZW50LCByZWZ1c2FsLCBmdW5jdGlvbl9jYWxsLCByb2xlLCB0b29sX2NhbGxzLCAuLi5yZXN0IH0gPSBkZWx0YTtcbiAgICAgIGFzc2VydElzRW1wdHkocmVzdCk7XG4gICAgICBPYmplY3QuYXNzaWduKGNob2ljZS5tZXNzYWdlLCByZXN0KTtcblxuICAgICAgaWYgKHJlZnVzYWwpIHtcbiAgICAgICAgY2hvaWNlLm1lc3NhZ2UucmVmdXNhbCA9IChjaG9pY2UubWVzc2FnZS5yZWZ1c2FsIHx8ICcnKSArIHJlZnVzYWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb2xlKSBjaG9pY2UubWVzc2FnZS5yb2xlID0gcm9sZTtcbiAgICAgIGlmIChmdW5jdGlvbl9jYWxsKSB7XG4gICAgICAgIGlmICghY2hvaWNlLm1lc3NhZ2UuZnVuY3Rpb25fY2FsbCkge1xuICAgICAgICAgIGNob2ljZS5tZXNzYWdlLmZ1bmN0aW9uX2NhbGwgPSBmdW5jdGlvbl9jYWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmdW5jdGlvbl9jYWxsLm5hbWUpIGNob2ljZS5tZXNzYWdlLmZ1bmN0aW9uX2NhbGwubmFtZSA9IGZ1bmN0aW9uX2NhbGwubmFtZTtcbiAgICAgICAgICBpZiAoZnVuY3Rpb25fY2FsbC5hcmd1bWVudHMpIHtcbiAgICAgICAgICAgIGNob2ljZS5tZXNzYWdlLmZ1bmN0aW9uX2NhbGwuYXJndW1lbnRzID8/PSAnJztcbiAgICAgICAgICAgIGNob2ljZS5tZXNzYWdlLmZ1bmN0aW9uX2NhbGwuYXJndW1lbnRzICs9IGZ1bmN0aW9uX2NhbGwuYXJndW1lbnRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgY2hvaWNlLm1lc3NhZ2UuY29udGVudCA9IChjaG9pY2UubWVzc2FnZS5jb250ZW50IHx8ICcnKSArIGNvbnRlbnQ7XG5cbiAgICAgICAgaWYgKCFjaG9pY2UubWVzc2FnZS5yZWZ1c2FsICYmIHRoaXMuI2dldEF1dG9QYXJzZWFibGVSZXNwb25zZUZvcm1hdCgpKSB7XG4gICAgICAgICAgY2hvaWNlLm1lc3NhZ2UucGFyc2VkID0gcGFydGlhbFBhcnNlKGNob2ljZS5tZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0b29sX2NhbGxzKSB7XG4gICAgICAgIGlmICghY2hvaWNlLm1lc3NhZ2UudG9vbF9jYWxscykgY2hvaWNlLm1lc3NhZ2UudG9vbF9jYWxscyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgeyBpbmRleCwgaWQsIHR5cGUsIGZ1bmN0aW9uOiBmbiwgLi4ucmVzdCB9IG9mIHRvb2xfY2FsbHMpIHtcbiAgICAgICAgICBjb25zdCB0b29sX2NhbGwgPSAoY2hvaWNlLm1lc3NhZ2UudG9vbF9jYWxsc1tpbmRleF0gPz89XG4gICAgICAgICAgICB7fSBhcyBDaGF0Q29tcGxldGlvblNuYXBzaG90LkNob2ljZS5NZXNzYWdlLlRvb2xDYWxsKTtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRvb2xfY2FsbCwgcmVzdCk7XG4gICAgICAgICAgaWYgKGlkKSB0b29sX2NhbGwuaWQgPSBpZDtcbiAgICAgICAgICBpZiAodHlwZSkgdG9vbF9jYWxsLnR5cGUgPSB0eXBlO1xuICAgICAgICAgIGlmIChmbikgdG9vbF9jYWxsLmZ1bmN0aW9uID8/PSB7IG5hbWU6IGZuLm5hbWUgPz8gJycsIGFyZ3VtZW50czogJycgfTtcbiAgICAgICAgICBpZiAoZm4/Lm5hbWUpIHRvb2xfY2FsbC5mdW5jdGlvbiEubmFtZSA9IGZuLm5hbWU7XG4gICAgICAgICAgaWYgKGZuPy5hcmd1bWVudHMpIHtcbiAgICAgICAgICAgIHRvb2xfY2FsbC5mdW5jdGlvbiEuYXJndW1lbnRzICs9IGZuLmFyZ3VtZW50cztcblxuICAgICAgICAgICAgaWYgKHNob3VsZFBhcnNlVG9vbENhbGwodGhpcy4jcGFyYW1zLCB0b29sX2NhbGwpKSB7XG4gICAgICAgICAgICAgIHRvb2xfY2FsbC5mdW5jdGlvbiEucGFyc2VkX2FyZ3VtZW50cyA9IHBhcnRpYWxQYXJzZSh0b29sX2NhbGwuZnVuY3Rpb24hLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfVxuXG4gIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0odGhpczogQ2hhdENvbXBsZXRpb25TdHJlYW08UGFyc2VkVD4pOiBBc3luY0l0ZXJhdG9yPENoYXRDb21wbGV0aW9uQ2h1bms+IHtcbiAgICBjb25zdCBwdXNoUXVldWU6IENoYXRDb21wbGV0aW9uQ2h1bmtbXSA9IFtdO1xuICAgIGNvbnN0IHJlYWRRdWV1ZToge1xuICAgICAgcmVzb2x2ZTogKGNodW5rOiBDaGF0Q29tcGxldGlvbkNodW5rIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICAgICAgcmVqZWN0OiAoZXJyOiB1bmtub3duKSA9PiB2b2lkO1xuICAgIH1bXSA9IFtdO1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0aGlzLm9uKCdjaHVuaycsIChjaHVuaykgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gcmVhZFF1ZXVlLnNoaWZ0KCk7XG4gICAgICBpZiAocmVhZGVyKSB7XG4gICAgICAgIHJlYWRlci5yZXNvbHZlKGNodW5rKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHB1c2hRdWV1ZS5wdXNoKGNodW5rKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCByZWFkZXIgb2YgcmVhZFF1ZXVlKSB7XG4gICAgICAgIHJlYWRlci5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICByZWFkUXVldWUubGVuZ3RoID0gMDtcbiAgICB9KTtcblxuICAgIHRoaXMub24oJ2Fib3J0JywgKGVycikgPT4ge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiByZWFkUXVldWUpIHtcbiAgICAgICAgcmVhZGVyLnJlamVjdChlcnIpO1xuICAgICAgfVxuICAgICAgcmVhZFF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCByZWFkZXIgb2YgcmVhZFF1ZXVlKSB7XG4gICAgICAgIHJlYWRlci5yZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlYWRRdWV1ZS5sZW5ndGggPSAwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGFzeW5jICgpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PENoYXRDb21wbGV0aW9uQ2h1bms+PiA9PiB7XG4gICAgICAgIGlmICghcHVzaFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxDaGF0Q29tcGxldGlvbkNodW5rIHwgdW5kZWZpbmVkPigocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgICAgICAgcmVhZFF1ZXVlLnB1c2goeyByZXNvbHZlLCByZWplY3QgfSksXG4gICAgICAgICAgKS50aGVuKChjaHVuaykgPT4gKGNodW5rID8geyB2YWx1ZTogY2h1bmssIGRvbmU6IGZhbHNlIH0gOiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNodW5rID0gcHVzaFF1ZXVlLnNoaWZ0KCkhO1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogY2h1bmssIGRvbmU6IGZhbHNlIH07XG4gICAgICB9LFxuICAgICAgcmV0dXJuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgdG9SZWFkYWJsZVN0cmVhbSgpOiBSZWFkYWJsZVN0cmVhbSB7XG4gICAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmVhbSh0aGlzW1N5bWJvbC5hc3luY0l0ZXJhdG9yXS5iaW5kKHRoaXMpLCB0aGlzLmNvbnRyb2xsZXIpO1xuICAgIHJldHVybiBzdHJlYW0udG9SZWFkYWJsZVN0cmVhbSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmFsaXplQ2hhdENvbXBsZXRpb248UGFyc2VkVD4oXG4gIHNuYXBzaG90OiBDaGF0Q29tcGxldGlvblNuYXBzaG90LFxuICBwYXJhbXM6IENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zIHwgbnVsbCxcbik6IFBhcnNlZENoYXRDb21wbGV0aW9uPFBhcnNlZFQ+IHtcbiAgY29uc3QgeyBpZCwgY2hvaWNlcywgY3JlYXRlZCwgbW9kZWwsIHN5c3RlbV9maW5nZXJwcmludCwgLi4ucmVzdCB9ID0gc25hcHNob3Q7XG4gIGNvbnN0IGNvbXBsZXRpb246IENoYXRDb21wbGV0aW9uID0ge1xuICAgIC4uLnJlc3QsXG4gICAgaWQsXG4gICAgY2hvaWNlczogY2hvaWNlcy5tYXAoXG4gICAgICAoeyBtZXNzYWdlLCBmaW5pc2hfcmVhc29uLCBpbmRleCwgbG9ncHJvYnMsIC4uLmNob2ljZVJlc3QgfSk6IENoYXRDb21wbGV0aW9uLkNob2ljZSA9PiB7XG4gICAgICAgIGlmICghZmluaXNoX3JlYXNvbikge1xuICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihgbWlzc2luZyBmaW5pc2hfcmVhc29uIGZvciBjaG9pY2UgJHtpbmRleH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgY29udGVudCA9IG51bGwsIGZ1bmN0aW9uX2NhbGwsIHRvb2xfY2FsbHMsIC4uLm1lc3NhZ2VSZXN0IH0gPSBtZXNzYWdlO1xuICAgICAgICBjb25zdCByb2xlID0gbWVzc2FnZS5yb2xlIGFzICdhc3Npc3RhbnQnOyAvLyB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0OyBpbiB0aGVvcnkgaXQgY291bGQgYmUgZGlmZmVyZW50IHdoaWNoIHdvdWxkIG1ha2Ugb3VyIHR5cGVzIGEgc2xpZ2h0IGxpZSBidXQgd291bGQgYmUgZmluZS5cbiAgICAgICAgaWYgKCFyb2xlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBtaXNzaW5nIHJvbGUgZm9yIGNob2ljZSAke2luZGV4fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uX2NhbGwpIHtcbiAgICAgICAgICBjb25zdCB7IGFyZ3VtZW50czogYXJncywgbmFtZSB9ID0gZnVuY3Rpb25fY2FsbDtcbiAgICAgICAgICBpZiAoYXJncyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoYG1pc3NpbmcgZnVuY3Rpb25fY2FsbC5hcmd1bWVudHMgZm9yIGNob2ljZSAke2luZGV4fWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBtaXNzaW5nIGZ1bmN0aW9uX2NhbGwubmFtZSBmb3IgY2hvaWNlICR7aW5kZXh9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNob2ljZVJlc3QsXG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uX2NhbGw6IHsgYXJndW1lbnRzOiBhcmdzLCBuYW1lIH0sXG4gICAgICAgICAgICAgIHJvbGUsXG4gICAgICAgICAgICAgIHJlZnVzYWw6IG1lc3NhZ2UucmVmdXNhbCA/PyBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbmlzaF9yZWFzb24sXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGxvZ3Byb2JzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9vbF9jYWxscykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jaG9pY2VSZXN0LFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBmaW5pc2hfcmVhc29uLFxuICAgICAgICAgICAgbG9ncHJvYnMsXG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgIC4uLm1lc3NhZ2VSZXN0LFxuICAgICAgICAgICAgICByb2xlLFxuICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICByZWZ1c2FsOiBtZXNzYWdlLnJlZnVzYWwgPz8gbnVsbCxcbiAgICAgICAgICAgICAgdG9vbF9jYWxsczogdG9vbF9jYWxscy5tYXAoKHRvb2xfY2FsbCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZnVuY3Rpb246IGZuLCB0eXBlLCBpZCwgLi4udG9vbFJlc3QgfSA9IHRvb2xfY2FsbDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFyZ3VtZW50czogYXJncywgbmFtZSwgLi4uZm5SZXN0IH0gPSBmbiB8fCB7fTtcbiAgICAgICAgICAgICAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBtaXNzaW5nIGNob2ljZXNbJHtpbmRleH1dLnRvb2xfY2FsbHNbJHtpfV0uaWRcXG4ke3N0cihzbmFwc2hvdCl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihgbWlzc2luZyBjaG9pY2VzWyR7aW5kZXh9XS50b29sX2NhbGxzWyR7aX1dLnR5cGVcXG4ke3N0cihzbmFwc2hvdCl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYG1pc3NpbmcgY2hvaWNlc1ske2luZGV4fV0udG9vbF9jYWxsc1ske2l9XS5mdW5jdGlvbi5uYW1lXFxuJHtzdHIoc25hcHNob3QpfWAsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXJncyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBtaXNzaW5nIGNob2ljZXNbJHtpbmRleH1dLnRvb2xfY2FsbHNbJHtpfV0uZnVuY3Rpb24uYXJndW1lbnRzXFxuJHtzdHIoc25hcHNob3QpfWAsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnRvb2xSZXN0LCBpZCwgdHlwZSwgZnVuY3Rpb246IHsgLi4uZm5SZXN0LCBuYW1lLCBhcmd1bWVudHM6IGFyZ3MgfSB9O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNob2ljZVJlc3QsXG4gICAgICAgICAgbWVzc2FnZTogeyAuLi5tZXNzYWdlUmVzdCwgY29udGVudCwgcm9sZSwgcmVmdXNhbDogbWVzc2FnZS5yZWZ1c2FsID8/IG51bGwgfSxcbiAgICAgICAgICBmaW5pc2hfcmVhc29uLFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGxvZ3Byb2JzLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApLFxuICAgIGNyZWF0ZWQsXG4gICAgbW9kZWwsXG4gICAgb2JqZWN0OiAnY2hhdC5jb21wbGV0aW9uJyxcbiAgICAuLi4oc3lzdGVtX2ZpbmdlcnByaW50ID8geyBzeXN0ZW1fZmluZ2VycHJpbnQgfSA6IHt9KSxcbiAgfTtcblxuICByZXR1cm4gbWF5YmVQYXJzZUNoYXRDb21wbGV0aW9uKGNvbXBsZXRpb24sIHBhcmFtcyk7XG59XG5cbmZ1bmN0aW9uIHN0cih4OiB1bmtub3duKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3RyZWFtZWQgY2h1bmsgb2YgYSBjaGF0IGNvbXBsZXRpb24gcmVzcG9uc2UgcmV0dXJuZWQgYnkgbW9kZWwsXG4gKiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5wdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25TbmFwc2hvdCB7XG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY2hhdCBjb21wbGV0aW9uLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGNoYXQgY29tcGxldGlvbiBjaG9pY2VzLiBDYW4gYmUgbW9yZSB0aGFuIG9uZSBpZiBgbmAgaXMgZ3JlYXRlclxuICAgKiB0aGFuIDEuXG4gICAqL1xuICBjaG9pY2VzOiBBcnJheTxDaGF0Q29tcGxldGlvblNuYXBzaG90LkNob2ljZT47XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgb2Ygd2hlbiB0aGUgY2hhdCBjb21wbGV0aW9uIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgY3JlYXRlZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZWwgdG8gZ2VuZXJhdGUgdGhlIGNvbXBsZXRpb24uXG4gICAqL1xuICBtb2RlbDogc3RyaW5nO1xuXG4gIC8vIE5vdGUgd2UgZG8gbm90IGluY2x1ZGUgYW4gXCJvYmplY3RcIiB0eXBlIG9uIHRoZSBzbmFwc2hvdCxcbiAgLy8gYmVjYXVzZSB0aGUgb2JqZWN0IGlzIG5vdCBhIHZhbGlkIFwiY2hhdC5jb21wbGV0aW9uXCIgdW50aWwgZmluYWxpemVkLlxuICAvLyBvYmplY3Q6ICdjaGF0LmNvbXBsZXRpb24nO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZpbmdlcnByaW50IHJlcHJlc2VudHMgdGhlIGJhY2tlbmQgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBtb2RlbCBydW5zIHdpdGguXG4gICAqXG4gICAqIENhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGBzZWVkYCByZXF1ZXN0IHBhcmFtZXRlciB0byB1bmRlcnN0YW5kIHdoZW5cbiAgICogYmFja2VuZCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRoYXQgbWlnaHQgaW1wYWN0IGRldGVybWluaXNtLlxuICAgKi9cbiAgc3lzdGVtX2ZpbmdlcnByaW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENoYXRDb21wbGV0aW9uU25hcHNob3Qge1xuICBleHBvcnQgaW50ZXJmYWNlIENob2ljZSB7XG4gICAgLyoqXG4gICAgICogQSBjaGF0IGNvbXBsZXRpb24gZGVsdGEgZ2VuZXJhdGVkIGJ5IHN0cmVhbWVkIG1vZGVsIHJlc3BvbnNlcy5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBDaG9pY2UuTWVzc2FnZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFzb24gdGhlIG1vZGVsIHN0b3BwZWQgZ2VuZXJhdGluZyB0b2tlbnMuIFRoaXMgd2lsbCBiZSBgc3RvcGAgaWYgdGhlIG1vZGVsXG4gICAgICogaGl0IGEgbmF0dXJhbCBzdG9wIHBvaW50IG9yIGEgcHJvdmlkZWQgc3RvcCBzZXF1ZW5jZSwgYGxlbmd0aGAgaWYgdGhlIG1heGltdW1cbiAgICAgKiBudW1iZXIgb2YgdG9rZW5zIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdCB3YXMgcmVhY2hlZCwgYGNvbnRlbnRfZmlsdGVyYCBpZlxuICAgICAqIGNvbnRlbnQgd2FzIG9taXR0ZWQgZHVlIHRvIGEgZmxhZyBmcm9tIG91ciBjb250ZW50IGZpbHRlcnMsIG9yIGBmdW5jdGlvbl9jYWxsYFxuICAgICAqIGlmIHRoZSBtb2RlbCBjYWxsZWQgYSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmaW5pc2hfcmVhc29uOiBDaGF0Q29tcGxldGlvbi5DaG9pY2VbJ2ZpbmlzaF9yZWFzb24nXSB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBMb2cgcHJvYmFiaWxpdHkgaW5mb3JtYXRpb24gZm9yIHRoZSBjaG9pY2UuXG4gICAgICovXG4gICAgbG9ncHJvYnM6IENoYXRDb21wbGV0aW9uLkNob2ljZS5Mb2dwcm9icyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGNob2ljZSBpbiB0aGUgbGlzdCBvZiBjaG9pY2VzLlxuICAgICAqL1xuICAgIGluZGV4OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIENob2ljZSB7XG4gICAgLyoqXG4gICAgICogQSBjaGF0IGNvbXBsZXRpb24gZGVsdGEgZ2VuZXJhdGVkIGJ5IHN0cmVhbWVkIG1vZGVsIHJlc3BvbnNlcy5cbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgY29udGVudHMgb2YgdGhlIGNodW5rIG1lc3NhZ2UuXG4gICAgICAgKi9cbiAgICAgIGNvbnRlbnQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gICAgICByZWZ1c2FsPzogc3RyaW5nIHwgbnVsbDtcblxuICAgICAgcGFyc2VkPzogdW5rbm93biB8IG51bGw7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIG5hbWUgYW5kIGFyZ3VtZW50cyBvZiBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCwgYXMgZ2VuZXJhdGVkIGJ5IHRoZVxuICAgICAgICogbW9kZWwuXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uX2NhbGw/OiBNZXNzYWdlLkZ1bmN0aW9uQ2FsbDtcblxuICAgICAgdG9vbF9jYWxscz86IEFycmF5PE1lc3NhZ2UuVG9vbENhbGw+O1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSByb2xlIG9mIHRoZSBhdXRob3Igb2YgdGhpcyBtZXNzYWdlLlxuICAgICAgICovXG4gICAgICByb2xlPzogQ2hhdENvbXBsZXRpb25Sb2xlO1xuICAgIH1cblxuICAgIGV4cG9ydCBuYW1lc3BhY2UgTWVzc2FnZSB7XG4gICAgICBleHBvcnQgaW50ZXJmYWNlIFRvb2xDYWxsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBJRCBvZiB0aGUgdG9vbCBjYWxsLlxuICAgICAgICAgKi9cbiAgICAgICAgaWQ6IHN0cmluZztcblxuICAgICAgICBmdW5jdGlvbjogVG9vbENhbGwuRnVuY3Rpb247XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0eXBlIG9mIHRoZSB0b29sLlxuICAgICAgICAgKi9cbiAgICAgICAgdHlwZTogJ2Z1bmN0aW9uJztcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IG5hbWVzcGFjZSBUb29sQ2FsbCB7XG4gICAgICAgIGV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb24ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFRoZSBhcmd1bWVudHMgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCwgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbCBpbiBKU09OXG4gICAgICAgICAgICogZm9ybWF0LiBOb3RlIHRoYXQgdGhlIG1vZGVsIGRvZXMgbm90IGFsd2F5cyBnZW5lcmF0ZSB2YWxpZCBKU09OLCBhbmQgbWF5XG4gICAgICAgICAgICogaGFsbHVjaW5hdGUgcGFyYW1ldGVycyBub3QgZGVmaW5lZCBieSB5b3VyIGZ1bmN0aW9uIHNjaGVtYS4gVmFsaWRhdGUgdGhlXG4gICAgICAgICAgICogYXJndW1lbnRzIGluIHlvdXIgY29kZSBiZWZvcmUgY2FsbGluZyB5b3VyIGZ1bmN0aW9uLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGFyZ3VtZW50czogc3RyaW5nO1xuXG4gICAgICAgICAgcGFyc2VkX2FyZ3VtZW50cz86IHVua25vd247XG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbmFtZSBhbmQgYXJndW1lbnRzIG9mIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkLCBhcyBnZW5lcmF0ZWQgYnkgdGhlXG4gICAgICAgKiBtb2RlbC5cbiAgICAgICAqL1xuICAgICAgZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkNhbGwge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoLCBhcyBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsIGluIEpTT05cbiAgICAgICAgICogZm9ybWF0LiBOb3RlIHRoYXQgdGhlIG1vZGVsIGRvZXMgbm90IGFsd2F5cyBnZW5lcmF0ZSB2YWxpZCBKU09OLCBhbmQgbWF5XG4gICAgICAgICAqIGhhbGx1Y2luYXRlIHBhcmFtZXRlcnMgbm90IGRlZmluZWQgYnkgeW91ciBmdW5jdGlvbiBzY2hlbWEuIFZhbGlkYXRlIHRoZVxuICAgICAgICAgKiBhcmd1bWVudHMgaW4geW91ciBjb2RlIGJlZm9yZSBjYWxsaW5nIHlvdXIgZnVuY3Rpb24uXG4gICAgICAgICAqL1xuICAgICAgICBhcmd1bWVudHM/OiBzdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICAgICAgICAgKi9cbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudHlwZSBBc3NlcnRJc0VtcHR5PFQgZXh0ZW5kcyB7fT4gPSBrZXlvZiBUIGV4dGVuZHMgbmV2ZXIgPyBUIDogbmV2ZXI7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgZ2l2ZW4gYXJndW1lbnQgaXMgYW4gZW1wdHkgb2JqZWN0LCB1c2VmdWwgZm9yXG4gKiBhc3NlcnRpbmcgdGhhdCBhbGwga25vd24gcHJvcGVydGllcyBvbiBhbiBvYmplY3QgaGF2ZSBiZWVuXG4gKiBkZXN0cnVjdHVyZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydElzRW1wdHk8VCBleHRlbmRzIHt9PihvYmo6IEFzc2VydElzRW1wdHk8VD4pOiBhc3NlcnRzIG9iaiBpcyBBc3NlcnRJc0VtcHR5PFQ+IHtcbiAgcmV0dXJuO1xufVxuXG5mdW5jdGlvbiBhc3NlcnROZXZlcihfeDogbmV2ZXIpIHt9XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBDaGF0Q29tcGxldGlvbkNodW5rLFxuICB0eXBlIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxufSBmcm9tICcuLi9yZXNvdXJjZXMvY2hhdC9jb21wbGV0aW9ucyc7XG5pbXBvcnQgeyBSdW5uZXJPcHRpb25zLCB0eXBlIEFic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJFdmVudHMgfSBmcm9tICcuL0Fic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXInO1xuaW1wb3J0IHsgdHlwZSBSZWFkYWJsZVN0cmVhbSB9IGZyb20gJy4uL19zaGltcy9pbmRleCc7XG5pbXBvcnQgeyBSdW5uYWJsZVRvb2xzLCB0eXBlIEJhc2VGdW5jdGlvbnNBcmdzLCB0eXBlIFJ1bm5hYmxlRnVuY3Rpb25zIH0gZnJvbSAnLi9SdW5uYWJsZUZ1bmN0aW9uJztcbmltcG9ydCB7IENoYXRDb21wbGV0aW9uU25hcHNob3QsIENoYXRDb21wbGV0aW9uU3RyZWFtIH0gZnJvbSAnLi9DaGF0Q29tcGxldGlvblN0cmVhbSc7XG5pbXBvcnQgT3BlbkFJIGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IEF1dG9QYXJzZWFibGVUb29sIH0gZnJvbSAnLi4vbGliL3BhcnNlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBsZXRpb25TdHJlYW1FdmVudHMgZXh0ZW5kcyBBYnN0cmFjdENoYXRDb21wbGV0aW9uUnVubmVyRXZlbnRzIHtcbiAgY29udGVudDogKGNvbnRlbnREZWx0YTogc3RyaW5nLCBjb250ZW50U25hcHNob3Q6IHN0cmluZykgPT4gdm9pZDtcbiAgY2h1bms6IChjaHVuazogQ2hhdENvbXBsZXRpb25DaHVuaywgc25hcHNob3Q6IENoYXRDb21wbGV0aW9uU25hcHNob3QpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIENoYXRDb21wbGV0aW9uU3RyZWFtaW5nRnVuY3Rpb25SdW5uZXJQYXJhbXM8RnVuY3Rpb25zQXJncyBleHRlbmRzIEJhc2VGdW5jdGlvbnNBcmdzPiA9IE9taXQ8XG4gIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICAnZnVuY3Rpb25zJ1xuPiAmIHtcbiAgZnVuY3Rpb25zOiBSdW5uYWJsZUZ1bmN0aW9uczxGdW5jdGlvbnNBcmdzPjtcbn07XG5cbmV4cG9ydCB0eXBlIENoYXRDb21wbGV0aW9uU3RyZWFtaW5nVG9vbFJ1bm5lclBhcmFtczxGdW5jdGlvbnNBcmdzIGV4dGVuZHMgQmFzZUZ1bmN0aW9uc0FyZ3M+ID0gT21pdDxcbiAgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gICd0b29scydcbj4gJiB7XG4gIHRvb2xzOiBSdW5uYWJsZVRvb2xzPEZ1bmN0aW9uc0FyZ3M+IHwgQXV0b1BhcnNlYWJsZVRvb2w8YW55LCB0cnVlPltdO1xufTtcblxuZXhwb3J0IGNsYXNzIENoYXRDb21wbGV0aW9uU3RyZWFtaW5nUnVubmVyPFBhcnNlZFQgPSBudWxsPlxuICBleHRlbmRzIENoYXRDb21wbGV0aW9uU3RyZWFtPFBhcnNlZFQ+XG4gIGltcGxlbWVudHMgQXN5bmNJdGVyYWJsZTxDaGF0Q29tcGxldGlvbkNodW5rPlxue1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbVJlYWRhYmxlU3RyZWFtKHN0cmVhbTogUmVhZGFibGVTdHJlYW0pOiBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1J1bm5lcjxudWxsPiB7XG4gICAgY29uc3QgcnVubmVyID0gbmV3IENoYXRDb21wbGV0aW9uU3RyZWFtaW5nUnVubmVyKG51bGwpO1xuICAgIHJ1bm5lci5fcnVuKCgpID0+IHJ1bm5lci5fZnJvbVJlYWRhYmxlU3RyZWFtKHN0cmVhbSkpO1xuICAgIHJldHVybiBydW5uZXI7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgLSBwbGVhc2UgdXNlIGBydW5Ub29sc2AgaW5zdGVhZC4gKi9cbiAgc3RhdGljIHJ1bkZ1bmN0aW9uczxUIGV4dGVuZHMgKHN0cmluZyB8IG9iamVjdClbXT4oXG4gICAgY2xpZW50OiBPcGVuQUksXG4gICAgcGFyYW1zOiBDaGF0Q29tcGxldGlvblN0cmVhbWluZ0Z1bmN0aW9uUnVubmVyUGFyYW1zPFQ+LFxuICAgIG9wdGlvbnM/OiBSdW5uZXJPcHRpb25zLFxuICApOiBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1J1bm5lcjxudWxsPiB7XG4gICAgY29uc3QgcnVubmVyID0gbmV3IENoYXRDb21wbGV0aW9uU3RyZWFtaW5nUnVubmVyKG51bGwpO1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAuLi5vcHRpb25zPy5oZWFkZXJzLCAnWC1TdGFpbmxlc3MtSGVscGVyLU1ldGhvZCc6ICdydW5GdW5jdGlvbnMnIH0sXG4gICAgfTtcbiAgICBydW5uZXIuX3J1bigoKSA9PiBydW5uZXIuX3J1bkZ1bmN0aW9ucyhjbGllbnQsIHBhcmFtcywgb3B0cykpO1xuICAgIHJldHVybiBydW5uZXI7XG4gIH1cblxuICBzdGF0aWMgcnVuVG9vbHM8VCBleHRlbmRzIChzdHJpbmcgfCBvYmplY3QpW10sIFBhcnNlZFQgPSBudWxsPihcbiAgICBjbGllbnQ6IE9wZW5BSSxcbiAgICBwYXJhbXM6IENoYXRDb21wbGV0aW9uU3RyZWFtaW5nVG9vbFJ1bm5lclBhcmFtczxUPixcbiAgICBvcHRpb25zPzogUnVubmVyT3B0aW9ucyxcbiAgKTogQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdSdW5uZXI8UGFyc2VkVD4ge1xuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1J1bm5lcjxQYXJzZWRUPihcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETyB0aGVzZSB0eXBlcyBhcmUgaW5jb21wYXRpYmxlXG4gICAgICBwYXJhbXMsXG4gICAgKTtcbiAgICBjb25zdCBvcHRzID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgLi4ub3B0aW9ucz8uaGVhZGVycywgJ1gtU3RhaW5sZXNzLUhlbHBlci1NZXRob2QnOiAncnVuVG9vbHMnIH0sXG4gICAgfTtcbiAgICBydW5uZXIuX3J1bigoKSA9PiBydW5uZXIuX3J1blRvb2xzKGNsaWVudCwgcGFyYW1zLCBvcHRzKSk7XG4gICAgcmV0dXJuIHJ1bm5lcjtcbiAgfVxufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCB7IENoYXRDb21wbGV0aW9uUnVubmVyLCBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uUnVubmVyUGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vbGliL0NoYXRDb21wbGV0aW9uUnVubmVyJztcbmltcG9ydCB7XG4gIENoYXRDb21wbGV0aW9uU3RyZWFtaW5nUnVubmVyLFxuICBDaGF0Q29tcGxldGlvblN0cmVhbWluZ0Z1bmN0aW9uUnVubmVyUGFyYW1zLFxufSBmcm9tICcuLi8uLi8uLi9saWIvQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdSdW5uZXInO1xuaW1wb3J0IHsgQmFzZUZ1bmN0aW9uc0FyZ3MgfSBmcm9tICcuLi8uLi8uLi9saWIvUnVubmFibGVGdW5jdGlvbic7XG5pbXBvcnQgeyBSdW5uZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vbGliL0Fic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXInO1xuaW1wb3J0IHsgQ2hhdENvbXBsZXRpb25Ub29sUnVubmVyUGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vbGliL0NoYXRDb21wbGV0aW9uUnVubmVyJztcbmltcG9ydCB7IENoYXRDb21wbGV0aW9uU3RyZWFtaW5nVG9vbFJ1bm5lclBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL2xpYi9DaGF0Q29tcGxldGlvblN0cmVhbWluZ1J1bm5lcic7XG5pbXBvcnQgeyBDaGF0Q29tcGxldGlvblN0cmVhbSwgdHlwZSBDaGF0Q29tcGxldGlvblN0cmVhbVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL2xpYi9DaGF0Q29tcGxldGlvblN0cmVhbSc7XG5pbXBvcnQge1xuICBDaGF0Q29tcGxldGlvbixcbiAgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcsXG4gIENoYXRDb21wbGV0aW9uTWVzc2FnZSxcbiAgQ2hhdENvbXBsZXRpb25NZXNzYWdlVG9vbENhbGwsXG59IGZyb20gJy4uLy4uL2NoYXQvY29tcGxldGlvbnMnO1xuaW1wb3J0IHsgRXh0cmFjdFBhcnNlZENvbnRlbnRGcm9tUGFyYW1zLCBwYXJzZUNoYXRDb21wbGV0aW9uLCB2YWxpZGF0ZUlucHV0VG9vbHMgfSBmcm9tICcuLi8uLi8uLi9saWIvcGFyc2VyJztcblxuZXhwb3J0IHtcbiAgQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdSdW5uZXIsXG4gIHR5cGUgQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdGdW5jdGlvblJ1bm5lclBhcmFtcyxcbn0gZnJvbSAnLi4vLi4vLi4vbGliL0NoYXRDb21wbGV0aW9uU3RyZWFtaW5nUnVubmVyJztcbmV4cG9ydCB7XG4gIHR5cGUgUnVubmFibGVGdW5jdGlvbixcbiAgdHlwZSBSdW5uYWJsZUZ1bmN0aW9ucyxcbiAgdHlwZSBSdW5uYWJsZUZ1bmN0aW9uV2l0aFBhcnNlLFxuICB0eXBlIFJ1bm5hYmxlRnVuY3Rpb25XaXRob3V0UGFyc2UsXG4gIFBhcnNpbmdGdW5jdGlvbixcbiAgUGFyc2luZ1Rvb2xGdW5jdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vbGliL1J1bm5hYmxlRnVuY3Rpb24nO1xuZXhwb3J0IHsgdHlwZSBDaGF0Q29tcGxldGlvblRvb2xSdW5uZXJQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi9saWIvQ2hhdENvbXBsZXRpb25SdW5uZXInO1xuZXhwb3J0IHsgdHlwZSBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1Rvb2xSdW5uZXJQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi9saWIvQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdSdW5uZXInO1xuZXhwb3J0IHsgQ2hhdENvbXBsZXRpb25TdHJlYW0sIHR5cGUgQ2hhdENvbXBsZXRpb25TdHJlYW1QYXJhbXMgfSBmcm9tICcuLi8uLi8uLi9saWIvQ2hhdENvbXBsZXRpb25TdHJlYW0nO1xuZXhwb3J0IHtcbiAgQ2hhdENvbXBsZXRpb25SdW5uZXIsXG4gIHR5cGUgQ2hhdENvbXBsZXRpb25GdW5jdGlvblJ1bm5lclBhcmFtcyxcbn0gZnJvbSAnLi4vLi4vLi4vbGliL0NoYXRDb21wbGV0aW9uUnVubmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRGdW5jdGlvbiBleHRlbmRzIENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsLkZ1bmN0aW9uIHtcbiAgcGFyc2VkX2FyZ3VtZW50cz86IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkRnVuY3Rpb25Ub29sQ2FsbCBleHRlbmRzIENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsIHtcbiAgZnVuY3Rpb246IFBhcnNlZEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZENoYXRDb21wbGV0aW9uTWVzc2FnZTxQYXJzZWRUPiBleHRlbmRzIENoYXRDb21wbGV0aW9uTWVzc2FnZSB7XG4gIHBhcnNlZDogUGFyc2VkVCB8IG51bGw7XG4gIHRvb2xfY2FsbHM/OiBBcnJheTxQYXJzZWRGdW5jdGlvblRvb2xDYWxsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRDaG9pY2U8UGFyc2VkVD4gZXh0ZW5kcyBDaGF0Q29tcGxldGlvbi5DaG9pY2Uge1xuICBtZXNzYWdlOiBQYXJzZWRDaGF0Q29tcGxldGlvbk1lc3NhZ2U8UGFyc2VkVD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkQ2hhdENvbXBsZXRpb248UGFyc2VkVD4gZXh0ZW5kcyBDaGF0Q29tcGxldGlvbiB7XG4gIGNob2ljZXM6IEFycmF5PFBhcnNlZENob2ljZTxQYXJzZWRUPj47XG59XG5cbmV4cG9ydCB0eXBlIENoYXRDb21wbGV0aW9uUGFyc2VQYXJhbXMgPSBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZztcblxuZXhwb3J0IGNsYXNzIENvbXBsZXRpb25zIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICBwYXJzZTxQYXJhbXMgZXh0ZW5kcyBDaGF0Q29tcGxldGlvblBhcnNlUGFyYW1zLCBQYXJzZWRUID0gRXh0cmFjdFBhcnNlZENvbnRlbnRGcm9tUGFyYW1zPFBhcmFtcz4+KFxuICAgIGJvZHk6IFBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFBhcnNlZENoYXRDb21wbGV0aW9uPFBhcnNlZFQ+PiB7XG4gICAgdmFsaWRhdGVJbnB1dFRvb2xzKGJvZHkudG9vbHMpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5jaGF0LmNvbXBsZXRpb25zXG4gICAgICAuY3JlYXRlKGJvZHksIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLm9wdGlvbnM/LmhlYWRlcnMsXG4gICAgICAgICAgJ1gtU3RhaW5sZXNzLUhlbHBlci1NZXRob2QnOiAnYmV0YS5jaGF0LmNvbXBsZXRpb25zLnBhcnNlJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAuX3RoZW5VbndyYXAoKGNvbXBsZXRpb24pID0+IHBhcnNlQ2hhdENvbXBsZXRpb24oY29tcGxldGlvbiwgYm9keSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGBydW5Ub29sc2AgaW5zdGVhZC5cbiAgICovXG4gIHJ1bkZ1bmN0aW9uczxGdW5jdGlvbnNBcmdzIGV4dGVuZHMgQmFzZUZ1bmN0aW9uc0FyZ3M+KFxuICAgIGJvZHk6IENoYXRDb21wbGV0aW9uRnVuY3Rpb25SdW5uZXJQYXJhbXM8RnVuY3Rpb25zQXJncz4sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENoYXRDb21wbGV0aW9uUnVubmVyPG51bGw+O1xuICBydW5GdW5jdGlvbnM8RnVuY3Rpb25zQXJncyBleHRlbmRzIEJhc2VGdW5jdGlvbnNBcmdzPihcbiAgICBib2R5OiBDaGF0Q29tcGxldGlvblN0cmVhbWluZ0Z1bmN0aW9uUnVubmVyUGFyYW1zPEZ1bmN0aW9uc0FyZ3M+LFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1J1bm5lcjxudWxsPjtcbiAgcnVuRnVuY3Rpb25zPEZ1bmN0aW9uc0FyZ3MgZXh0ZW5kcyBCYXNlRnVuY3Rpb25zQXJncz4oXG4gICAgYm9keTpcbiAgICAgIHwgQ2hhdENvbXBsZXRpb25GdW5jdGlvblJ1bm5lclBhcmFtczxGdW5jdGlvbnNBcmdzPlxuICAgICAgfCBDaGF0Q29tcGxldGlvblN0cmVhbWluZ0Z1bmN0aW9uUnVubmVyUGFyYW1zPEZ1bmN0aW9uc0FyZ3M+LFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDaGF0Q29tcGxldGlvblJ1bm5lcjxudWxsPiB8IENoYXRDb21wbGV0aW9uU3RyZWFtaW5nUnVubmVyPG51bGw+IHtcbiAgICBpZiAoYm9keS5zdHJlYW0pIHtcbiAgICAgIHJldHVybiBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1J1bm5lci5ydW5GdW5jdGlvbnMoXG4gICAgICAgIHRoaXMuX2NsaWVudCxcbiAgICAgICAgYm9keSBhcyBDaGF0Q29tcGxldGlvblN0cmVhbWluZ0Z1bmN0aW9uUnVubmVyUGFyYW1zPEZ1bmN0aW9uc0FyZ3M+LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIENoYXRDb21wbGV0aW9uUnVubmVyLnJ1bkZ1bmN0aW9ucyhcbiAgICAgIHRoaXMuX2NsaWVudCxcbiAgICAgIGJvZHkgYXMgQ2hhdENvbXBsZXRpb25GdW5jdGlvblJ1bm5lclBhcmFtczxGdW5jdGlvbnNBcmdzPixcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIGhlbHBlciBmb3IgdXNpbmcgdG9vbCBjYWxscyB3aXRoIHRoZSAvY2hhdC9jb21wbGV0aW9ucyBlbmRwb2ludFxuICAgKiB3aGljaCBhdXRvbWF0aWNhbGx5IGNhbGxzIHRoZSBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB5b3UgcHJvdmlkZSBhbmQgc2VuZHMgdGhlaXJcbiAgICogcmVzdWx0cyBiYWNrIHRvIHRoZSAvY2hhdC9jb21wbGV0aW9ucyBlbmRwb2ludCwgbG9vcGluZyBhcyBsb25nIGFzIHRoZSBtb2RlbFxuICAgKiByZXF1ZXN0cyBmdW5jdGlvbiBjYWxscy5cbiAgICpcbiAgICogRm9yIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMsIHNlZVxuICAgKiBbdGhlIGRvY3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYWkvb3BlbmFpLW5vZGUjYXV0b21hdGVkLWZ1bmN0aW9uLWNhbGxzKVxuICAgKi9cbiAgcnVuVG9vbHM8XG4gICAgUGFyYW1zIGV4dGVuZHMgQ2hhdENvbXBsZXRpb25Ub29sUnVubmVyUGFyYW1zPGFueT4sXG4gICAgUGFyc2VkVCA9IEV4dHJhY3RQYXJzZWRDb250ZW50RnJvbVBhcmFtczxQYXJhbXM+LFxuICA+KGJvZHk6IFBhcmFtcywgb3B0aW9ucz86IFJ1bm5lck9wdGlvbnMpOiBDaGF0Q29tcGxldGlvblJ1bm5lcjxQYXJzZWRUPjtcblxuICBydW5Ub29sczxcbiAgICBQYXJhbXMgZXh0ZW5kcyBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1Rvb2xSdW5uZXJQYXJhbXM8YW55PixcbiAgICBQYXJzZWRUID0gRXh0cmFjdFBhcnNlZENvbnRlbnRGcm9tUGFyYW1zPFBhcmFtcz4sXG4gID4oYm9keTogUGFyYW1zLCBvcHRpb25zPzogUnVubmVyT3B0aW9ucyk6IENoYXRDb21wbGV0aW9uU3RyZWFtaW5nUnVubmVyPFBhcnNlZFQ+O1xuXG4gIHJ1blRvb2xzPFxuICAgIFBhcmFtcyBleHRlbmRzIENoYXRDb21wbGV0aW9uVG9vbFJ1bm5lclBhcmFtczxhbnk+IHwgQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdUb29sUnVubmVyUGFyYW1zPGFueT4sXG4gICAgUGFyc2VkVCA9IEV4dHJhY3RQYXJzZWRDb250ZW50RnJvbVBhcmFtczxQYXJhbXM+LFxuICA+KFxuICAgIGJvZHk6IFBhcmFtcyxcbiAgICBvcHRpb25zPzogUnVubmVyT3B0aW9ucyxcbiAgKTogQ2hhdENvbXBsZXRpb25SdW5uZXI8UGFyc2VkVD4gfCBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1J1bm5lcjxQYXJzZWRUPiB7XG4gICAgaWYgKGJvZHkuc3RyZWFtKSB7XG4gICAgICByZXR1cm4gQ2hhdENvbXBsZXRpb25TdHJlYW1pbmdSdW5uZXIucnVuVG9vbHMoXG4gICAgICAgIHRoaXMuX2NsaWVudCxcbiAgICAgICAgYm9keSBhcyBDaGF0Q29tcGxldGlvblN0cmVhbWluZ1Rvb2xSdW5uZXJQYXJhbXM8YW55PixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIENoYXRDb21wbGV0aW9uUnVubmVyLnJ1blRvb2xzKHRoaXMuX2NsaWVudCwgYm9keSBhcyBDaGF0Q29tcGxldGlvblRvb2xSdW5uZXJQYXJhbXM8YW55Piwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNoYXQgY29tcGxldGlvbiBzdHJlYW1cbiAgICovXG4gIHN0cmVhbTxQYXJhbXMgZXh0ZW5kcyBDaGF0Q29tcGxldGlvblN0cmVhbVBhcmFtcywgUGFyc2VkVCA9IEV4dHJhY3RQYXJzZWRDb250ZW50RnJvbVBhcmFtczxQYXJhbXM+PihcbiAgICBib2R5OiBQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENoYXRDb21wbGV0aW9uU3RyZWFtPFBhcnNlZFQ+IHtcbiAgICByZXR1cm4gQ2hhdENvbXBsZXRpb25TdHJlYW0uY3JlYXRlQ2hhdENvbXBsZXRpb24odGhpcy5fY2xpZW50LCBib2R5LCBvcHRpb25zKTtcbiAgfVxufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2UnO1xuaW1wb3J0ICogYXMgQ29tcGxldGlvbnNBUEkgZnJvbSAnLi9jb21wbGV0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBDaGF0IGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICBjb21wbGV0aW9uczogQ29tcGxldGlvbnNBUEkuQ29tcGxldGlvbnMgPSBuZXcgQ29tcGxldGlvbnNBUEkuQ29tcGxldGlvbnModGhpcy5fY2xpZW50KTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDaGF0IHtcbiAgZXhwb3J0IGltcG9ydCBDb21wbGV0aW9ucyA9IENvbXBsZXRpb25zQVBJLkNvbXBsZXRpb25zO1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2UnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi8uLi8uLi9jb3JlJztcblxuZXhwb3J0IGNsYXNzIFNlc3Npb25zIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGVwaGVtZXJhbCBBUEkgdG9rZW4gZm9yIHVzZSBpbiBjbGllbnQtc2lkZSBhcHBsaWNhdGlvbnMgd2l0aCB0aGVcbiAgICogUmVhbHRpbWUgQVBJLiBDYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSBzYW1lIHNlc3Npb24gcGFyYW1ldGVycyBhcyB0aGVcbiAgICogYHNlc3Npb24udXBkYXRlYCBjbGllbnQgZXZlbnQuXG4gICAqXG4gICAqIEl0IHJlc3BvbmRzIHdpdGggYSBzZXNzaW9uIG9iamVjdCwgcGx1cyBhIGBjbGllbnRfc2VjcmV0YCBrZXkgd2hpY2ggY29udGFpbnMgYVxuICAgKiB1c2FibGUgZXBoZW1lcmFsIEFQSSB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBicm93c2VyIGNsaWVudHMgZm9yXG4gICAqIHRoZSBSZWFsdGltZSBBUEkuXG4gICAqL1xuICBjcmVhdGUoYm9keTogU2Vzc2lvbkNyZWF0ZVBhcmFtcywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkFQSVByb21pc2U8U2Vzc2lvbkNyZWF0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvcmVhbHRpbWUvc2Vzc2lvbnMnLCB7XG4gICAgICBib2R5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFsdGltZSBzZXNzaW9uIG9iamVjdCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb24ge1xuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzZXNzaW9uIHRoYXQgbG9va3MgbGlrZSBgc2Vzc18xMjM0NTY3ODkwYWJjZGVmYC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybWF0IG9mIGlucHV0IGF1ZGlvLiBPcHRpb25zIGFyZSBgcGNtMTZgLCBgZzcxMV91bGF3YCwgb3IgYGc3MTFfYWxhd2AuIEZvclxuICAgKiBgcGNtMTZgLCBpbnB1dCBhdWRpbyBtdXN0IGJlIDE2LWJpdCBQQ00gYXQgYSAyNGtIeiBzYW1wbGUgcmF0ZSwgc2luZ2xlIGNoYW5uZWxcbiAgICogKG1vbm8pLCBhbmQgbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyLlxuICAgKi9cbiAgaW5wdXRfYXVkaW9fZm9ybWF0PzogJ3BjbTE2JyB8ICdnNzExX3VsYXcnIHwgJ2c3MTFfYWxhdyc7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIG5vaXNlIHJlZHVjdGlvbi4gVGhpcyBjYW4gYmUgc2V0IHRvIGBudWxsYCB0byB0dXJuXG4gICAqIG9mZi4gTm9pc2UgcmVkdWN0aW9uIGZpbHRlcnMgYXVkaW8gYWRkZWQgdG8gdGhlIGlucHV0IGF1ZGlvIGJ1ZmZlciBiZWZvcmUgaXQgaXNcbiAgICogc2VudCB0byBWQUQgYW5kIHRoZSBtb2RlbC4gRmlsdGVyaW5nIHRoZSBhdWRpbyBjYW4gaW1wcm92ZSBWQUQgYW5kIHR1cm5cbiAgICogZGV0ZWN0aW9uIGFjY3VyYWN5IChyZWR1Y2luZyBmYWxzZSBwb3NpdGl2ZXMpIGFuZCBtb2RlbCBwZXJmb3JtYW5jZSBieSBpbXByb3ZpbmdcbiAgICogcGVyY2VwdGlvbiBvZiB0aGUgaW5wdXQgYXVkaW8uXG4gICAqL1xuICBpbnB1dF9hdWRpb19ub2lzZV9yZWR1Y3Rpb24/OiBTZXNzaW9uLklucHV0QXVkaW9Ob2lzZVJlZHVjdGlvbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaW5wdXQgYXVkaW8gdHJhbnNjcmlwdGlvbiwgZGVmYXVsdHMgdG8gb2ZmIGFuZCBjYW4gYmUgc2V0IHRvXG4gICAqIGBudWxsYCB0byB0dXJuIG9mZiBvbmNlIG9uLiBJbnB1dCBhdWRpbyB0cmFuc2NyaXB0aW9uIGlzIG5vdCBuYXRpdmUgdG8gdGhlXG4gICAqIG1vZGVsLCBzaW5jZSB0aGUgbW9kZWwgY29uc3VtZXMgYXVkaW8gZGlyZWN0bHkuIFRyYW5zY3JpcHRpb24gcnVuc1xuICAgKiBhc3luY2hyb25vdXNseSB0aHJvdWdoXG4gICAqIFt0aGUgL2F1ZGlvL3RyYW5zY3JpcHRpb25zIGVuZHBvaW50XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2F1ZGlvL2NyZWF0ZVRyYW5zY3JpcHRpb24pXG4gICAqIGFuZCBzaG91bGQgYmUgdHJlYXRlZCBhcyBndWlkYW5jZSBvZiBpbnB1dCBhdWRpbyBjb250ZW50IHJhdGhlciB0aGFuIHByZWNpc2VseVxuICAgKiB3aGF0IHRoZSBtb2RlbCBoZWFyZC4gVGhlIGNsaWVudCBjYW4gb3B0aW9uYWxseSBzZXQgdGhlIGxhbmd1YWdlIGFuZCBwcm9tcHQgZm9yXG4gICAqIHRyYW5zY3JpcHRpb24sIHRoZXNlIG9mZmVyIGFkZGl0aW9uYWwgZ3VpZGFuY2UgdG8gdGhlIHRyYW5zY3JpcHRpb24gc2VydmljZS5cbiAgICovXG4gIGlucHV0X2F1ZGlvX3RyYW5zY3JpcHRpb24/OiBTZXNzaW9uLklucHV0QXVkaW9UcmFuc2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIChpLmUuIHN5c3RlbSBtZXNzYWdlKSBwcmVwZW5kZWQgdG8gbW9kZWwgY2FsbHMuXG4gICAqIFRoaXMgZmllbGQgYWxsb3dzIHRoZSBjbGllbnQgdG8gZ3VpZGUgdGhlIG1vZGVsIG9uIGRlc2lyZWQgcmVzcG9uc2VzLiBUaGUgbW9kZWxcbiAgICogY2FuIGJlIGluc3RydWN0ZWQgb24gcmVzcG9uc2UgY29udGVudCBhbmQgZm9ybWF0LCAoZS5nLiBcImJlIGV4dHJlbWVseSBzdWNjaW5jdFwiLFxuICAgKiBcImFjdCBmcmllbmRseVwiLCBcImhlcmUgYXJlIGV4YW1wbGVzIG9mIGdvb2QgcmVzcG9uc2VzXCIpIGFuZCBvbiBhdWRpbyBiZWhhdmlvclxuICAgKiAoZS5nLiBcInRhbGsgcXVpY2tseVwiLCBcImluamVjdCBlbW90aW9uIGludG8geW91ciB2b2ljZVwiLCBcImxhdWdoIGZyZXF1ZW50bHlcIikuIFRoZVxuICAgKiBpbnN0cnVjdGlvbnMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGZvbGxvd2VkIGJ5IHRoZSBtb2RlbCwgYnV0IHRoZXkgcHJvdmlkZVxuICAgKiBndWlkYW5jZSB0byB0aGUgbW9kZWwgb24gdGhlIGRlc2lyZWQgYmVoYXZpb3IuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgc2VydmVyIHNldHMgZGVmYXVsdCBpbnN0cnVjdGlvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIGlmIHRoaXMgZmllbGRcbiAgICogaXMgbm90IHNldCBhbmQgYXJlIHZpc2libGUgaW4gdGhlIGBzZXNzaW9uLmNyZWF0ZWRgIGV2ZW50IGF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICogc2Vzc2lvbi5cbiAgICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygb3V0cHV0IHRva2VucyBmb3IgYSBzaW5nbGUgYXNzaXN0YW50IHJlc3BvbnNlLCBpbmNsdXNpdmUgb2ZcbiAgICogdG9vbCBjYWxscy4gUHJvdmlkZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgNDA5NiB0byBsaW1pdCBvdXRwdXQgdG9rZW5zLCBvclxuICAgKiBgaW5mYCBmb3IgdGhlIG1heGltdW0gYXZhaWxhYmxlIHRva2VucyBmb3IgYSBnaXZlbiBtb2RlbC4gRGVmYXVsdHMgdG8gYGluZmAuXG4gICAqL1xuICBtYXhfcmVzcG9uc2Vfb3V0cHV0X3Rva2Vucz86IG51bWJlciB8ICdpbmYnO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIG1vZGFsaXRpZXMgdGhlIG1vZGVsIGNhbiByZXNwb25kIHdpdGguIFRvIGRpc2FibGUgYXVkaW8sIHNldCB0aGlzIHRvXG4gICAqIFtcInRleHRcIl0uXG4gICAqL1xuICBtb2RhbGl0aWVzPzogQXJyYXk8J3RleHQnIHwgJ2F1ZGlvJz47XG5cbiAgLyoqXG4gICAqIFRoZSBSZWFsdGltZSBtb2RlbCB1c2VkIGZvciB0aGlzIHNlc3Npb24uXG4gICAqL1xuICBtb2RlbD86XG4gICAgfCAnZ3B0LTRvLXJlYWx0aW1lLXByZXZpZXcnXG4gICAgfCAnZ3B0LTRvLXJlYWx0aW1lLXByZXZpZXctMjAyNC0xMC0wMSdcbiAgICB8ICdncHQtNG8tcmVhbHRpbWUtcHJldmlldy0yMDI0LTEyLTE3J1xuICAgIHwgJ2dwdC00by1taW5pLXJlYWx0aW1lLXByZXZpZXcnXG4gICAgfCAnZ3B0LTRvLW1pbmktcmVhbHRpbWUtcHJldmlldy0yMDI0LTEyLTE3JztcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCBvZiBvdXRwdXQgYXVkaW8uIE9wdGlvbnMgYXJlIGBwY20xNmAsIGBnNzExX3VsYXdgLCBvciBgZzcxMV9hbGF3YC5cbiAgICogRm9yIGBwY20xNmAsIG91dHB1dCBhdWRpbyBpcyBzYW1wbGVkIGF0IGEgcmF0ZSBvZiAyNGtIei5cbiAgICovXG4gIG91dHB1dF9hdWRpb19mb3JtYXQ/OiAncGNtMTYnIHwgJ2c3MTFfdWxhdycgfCAnZzcxMV9hbGF3JztcblxuICAvKipcbiAgICogU2FtcGxpbmcgdGVtcGVyYXR1cmUgZm9yIHRoZSBtb2RlbCwgbGltaXRlZCB0byBbMC42LCAxLjJdLiBGb3IgYXVkaW8gbW9kZWxzIGFcbiAgICogdGVtcGVyYXR1cmUgb2YgMC44IGlzIGhpZ2hseSByZWNvbW1lbmRlZCBmb3IgYmVzdCBwZXJmb3JtYW5jZS5cbiAgICovXG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIG1vZGVsIGNob29zZXMgdG9vbHMuIE9wdGlvbnMgYXJlIGBhdXRvYCwgYG5vbmVgLCBgcmVxdWlyZWRgLCBvciBzcGVjaWZ5XG4gICAqIGEgZnVuY3Rpb24uXG4gICAqL1xuICB0b29sX2Nob2ljZT86IHN0cmluZztcblxuICAvKipcbiAgICogVG9vbHMgKGZ1bmN0aW9ucykgYXZhaWxhYmxlIHRvIHRoZSBtb2RlbC5cbiAgICovXG4gIHRvb2xzPzogQXJyYXk8U2Vzc2lvbi5Ub29sPjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdHVybiBkZXRlY3Rpb24sIGV0aGVyIFNlcnZlciBWQUQgb3IgU2VtYW50aWMgVkFELiBUaGlzIGNhbiBiZVxuICAgKiBzZXQgdG8gYG51bGxgIHRvIHR1cm4gb2ZmLCBpbiB3aGljaCBjYXNlIHRoZSBjbGllbnQgbXVzdCBtYW51YWxseSB0cmlnZ2VyIG1vZGVsXG4gICAqIHJlc3BvbnNlLiBTZXJ2ZXIgVkFEIG1lYW5zIHRoYXQgdGhlIG1vZGVsIHdpbGwgZGV0ZWN0IHRoZSBzdGFydCBhbmQgZW5kIG9mXG4gICAqIHNwZWVjaCBiYXNlZCBvbiBhdWRpbyB2b2x1bWUgYW5kIHJlc3BvbmQgYXQgdGhlIGVuZCBvZiB1c2VyIHNwZWVjaC4gU2VtYW50aWMgVkFEXG4gICAqIGlzIG1vcmUgYWR2YW5jZWQgYW5kIHVzZXMgYSB0dXJuIGRldGVjdGlvbiBtb2RlbCAoaW4gY29uanVjdGlvbiB3aXRoIFZBRCkgdG9cbiAgICogc2VtYW50aWNhbGx5IGVzdGltYXRlIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGZpbmlzaGVkIHNwZWFraW5nLCB0aGVuIGR5bmFtaWNhbGx5XG4gICAqIHNldHMgYSB0aW1lb3V0IGJhc2VkIG9uIHRoaXMgcHJvYmFiaWxpdHkuIEZvciBleGFtcGxlLCBpZiB1c2VyIGF1ZGlvIHRyYWlscyBvZmZcbiAgICogd2l0aCBcInVoaG1cIiwgdGhlIG1vZGVsIHdpbGwgc2NvcmUgYSBsb3cgcHJvYmFiaWxpdHkgb2YgdHVybiBlbmQgYW5kIHdhaXQgbG9uZ2VyXG4gICAqIGZvciB0aGUgdXNlciB0byBjb250aW51ZSBzcGVha2luZy4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBtb3JlIG5hdHVyYWxcbiAgICogY29udmVyc2F0aW9ucywgYnV0IG1heSBoYXZlIGEgaGlnaGVyIGxhdGVuY3kuXG4gICAqL1xuICB0dXJuX2RldGVjdGlvbj86IFNlc3Npb24uVHVybkRldGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIHZvaWNlIHRoZSBtb2RlbCB1c2VzIHRvIHJlc3BvbmQuIFZvaWNlIGNhbm5vdCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgc2Vzc2lvblxuICAgKiBvbmNlIHRoZSBtb2RlbCBoYXMgcmVzcG9uZGVkIHdpdGggYXVkaW8gYXQgbGVhc3Qgb25jZS4gQ3VycmVudCB2b2ljZSBvcHRpb25zIGFyZVxuICAgKiBgYWxsb3lgLCBgYXNoYCwgYGJhbGxhZGAsIGBjb3JhbGAsIGBlY2hvYCBgc2FnZWAsIGBzaGltbWVyYCBhbmQgYHZlcnNlYC5cbiAgICovXG4gIHZvaWNlPzogJ2FsbG95JyB8ICdhc2gnIHwgJ2JhbGxhZCcgfCAnY29yYWwnIHwgJ2VjaG8nIHwgJ3NhZ2UnIHwgJ3NoaW1tZXInIHwgJ3ZlcnNlJztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBTZXNzaW9uIHtcbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIG5vaXNlIHJlZHVjdGlvbi4gVGhpcyBjYW4gYmUgc2V0IHRvIGBudWxsYCB0byB0dXJuXG4gICAqIG9mZi4gTm9pc2UgcmVkdWN0aW9uIGZpbHRlcnMgYXVkaW8gYWRkZWQgdG8gdGhlIGlucHV0IGF1ZGlvIGJ1ZmZlciBiZWZvcmUgaXQgaXNcbiAgICogc2VudCB0byBWQUQgYW5kIHRoZSBtb2RlbC4gRmlsdGVyaW5nIHRoZSBhdWRpbyBjYW4gaW1wcm92ZSBWQUQgYW5kIHR1cm5cbiAgICogZGV0ZWN0aW9uIGFjY3VyYWN5IChyZWR1Y2luZyBmYWxzZSBwb3NpdGl2ZXMpIGFuZCBtb2RlbCBwZXJmb3JtYW5jZSBieSBpbXByb3ZpbmdcbiAgICogcGVyY2VwdGlvbiBvZiB0aGUgaW5wdXQgYXVkaW8uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0QXVkaW9Ob2lzZVJlZHVjdGlvbiB7XG4gICAgLyoqXG4gICAgICogVHlwZSBvZiBub2lzZSByZWR1Y3Rpb24uIGBuZWFyX2ZpZWxkYCBpcyBmb3IgY2xvc2UtdGFsa2luZyBtaWNyb3Bob25lcyBzdWNoIGFzXG4gICAgICogaGVhZHBob25lcywgYGZhcl9maWVsZGAgaXMgZm9yIGZhci1maWVsZCBtaWNyb3Bob25lcyBzdWNoIGFzIGxhcHRvcCBvclxuICAgICAqIGNvbmZlcmVuY2Ugcm9vbSBtaWNyb3Bob25lcy5cbiAgICAgKi9cbiAgICB0eXBlPzogJ25lYXJfZmllbGQnIHwgJ2Zhcl9maWVsZCc7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaW5wdXQgYXVkaW8gdHJhbnNjcmlwdGlvbiwgZGVmYXVsdHMgdG8gb2ZmIGFuZCBjYW4gYmUgc2V0IHRvXG4gICAqIGBudWxsYCB0byB0dXJuIG9mZiBvbmNlIG9uLiBJbnB1dCBhdWRpbyB0cmFuc2NyaXB0aW9uIGlzIG5vdCBuYXRpdmUgdG8gdGhlXG4gICAqIG1vZGVsLCBzaW5jZSB0aGUgbW9kZWwgY29uc3VtZXMgYXVkaW8gZGlyZWN0bHkuIFRyYW5zY3JpcHRpb24gcnVuc1xuICAgKiBhc3luY2hyb25vdXNseSB0aHJvdWdoXG4gICAqIFt0aGUgL2F1ZGlvL3RyYW5zY3JpcHRpb25zIGVuZHBvaW50XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2F1ZGlvL2NyZWF0ZVRyYW5zY3JpcHRpb24pXG4gICAqIGFuZCBzaG91bGQgYmUgdHJlYXRlZCBhcyBndWlkYW5jZSBvZiBpbnB1dCBhdWRpbyBjb250ZW50IHJhdGhlciB0aGFuIHByZWNpc2VseVxuICAgKiB3aGF0IHRoZSBtb2RlbCBoZWFyZC4gVGhlIGNsaWVudCBjYW4gb3B0aW9uYWxseSBzZXQgdGhlIGxhbmd1YWdlIGFuZCBwcm9tcHQgZm9yXG4gICAqIHRyYW5zY3JpcHRpb24sIHRoZXNlIG9mZmVyIGFkZGl0aW9uYWwgZ3VpZGFuY2UgdG8gdGhlIHRyYW5zY3JpcHRpb24gc2VydmljZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXRBdWRpb1RyYW5zY3JpcHRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgaW5wdXQgYXVkaW8uIFN1cHBseWluZyB0aGUgaW5wdXQgbGFuZ3VhZ2UgaW5cbiAgICAgKiBbSVNPLTYzOS0xXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0lTT182MzktMV9jb2RlcykgKGUuZy4gYGVuYClcbiAgICAgKiBmb3JtYXQgd2lsbCBpbXByb3ZlIGFjY3VyYWN5IGFuZCBsYXRlbmN5LlxuICAgICAqL1xuICAgIGxhbmd1YWdlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vZGVsIHRvIHVzZSBmb3IgdHJhbnNjcmlwdGlvbiwgY3VycmVudCBvcHRpb25zIGFyZSBgZ3B0LTRvLXRyYW5zY3JpYmVgLFxuICAgICAqIGBncHQtNG8tbWluaS10cmFuc2NyaWJlYCwgYW5kIGB3aGlzcGVyLTFgLlxuICAgICAqL1xuICAgIG1vZGVsPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgdGV4dCB0byBndWlkZSB0aGUgbW9kZWwncyBzdHlsZSBvciBjb250aW51ZSBhIHByZXZpb3VzIGF1ZGlvXG4gICAgICogc2VnbWVudC4gRm9yIGB3aGlzcGVyLTFgLCB0aGVcbiAgICAgKiBbcHJvbXB0IGlzIGEgbGlzdCBvZiBrZXl3b3Jkc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3NwZWVjaC10by10ZXh0I3Byb21wdGluZykuXG4gICAgICogRm9yIGBncHQtNG8tdHJhbnNjcmliZWAgbW9kZWxzLCB0aGUgcHJvbXB0IGlzIGEgZnJlZSB0ZXh0IHN0cmluZywgZm9yIGV4YW1wbGVcbiAgICAgKiBcImV4cGVjdCB3b3JkcyByZWxhdGVkIHRvIHRlY2hub2xvZ3lcIi5cbiAgICAgKi9cbiAgICBwcm9tcHQ/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRvb2wge1xuICAgIC8qKlxuICAgICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb24sIGluY2x1ZGluZyBndWlkYW5jZSBvbiB3aGVuIGFuZCBob3cgdG8gY2FsbCBpdCxcbiAgICAgKiBhbmQgZ3VpZGFuY2UgYWJvdXQgd2hhdCB0byB0ZWxsIHRoZSB1c2VyIHdoZW4gY2FsbGluZyAoaWYgYW55dGhpbmcpLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXJzIG9mIHRoZSBmdW5jdGlvbiBpbiBKU09OIFNjaGVtYS5cbiAgICAgKi9cbiAgICBwYXJhbWV0ZXJzPzogdW5rbm93bjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSB0b29sLCBpLmUuIGBmdW5jdGlvbmAuXG4gICAgICovXG4gICAgdHlwZT86ICdmdW5jdGlvbic7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdHVybiBkZXRlY3Rpb24sIGV0aGVyIFNlcnZlciBWQUQgb3IgU2VtYW50aWMgVkFELiBUaGlzIGNhbiBiZVxuICAgKiBzZXQgdG8gYG51bGxgIHRvIHR1cm4gb2ZmLCBpbiB3aGljaCBjYXNlIHRoZSBjbGllbnQgbXVzdCBtYW51YWxseSB0cmlnZ2VyIG1vZGVsXG4gICAqIHJlc3BvbnNlLiBTZXJ2ZXIgVkFEIG1lYW5zIHRoYXQgdGhlIG1vZGVsIHdpbGwgZGV0ZWN0IHRoZSBzdGFydCBhbmQgZW5kIG9mXG4gICAqIHNwZWVjaCBiYXNlZCBvbiBhdWRpbyB2b2x1bWUgYW5kIHJlc3BvbmQgYXQgdGhlIGVuZCBvZiB1c2VyIHNwZWVjaC4gU2VtYW50aWMgVkFEXG4gICAqIGlzIG1vcmUgYWR2YW5jZWQgYW5kIHVzZXMgYSB0dXJuIGRldGVjdGlvbiBtb2RlbCAoaW4gY29uanVjdGlvbiB3aXRoIFZBRCkgdG9cbiAgICogc2VtYW50aWNhbGx5IGVzdGltYXRlIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGZpbmlzaGVkIHNwZWFraW5nLCB0aGVuIGR5bmFtaWNhbGx5XG4gICAqIHNldHMgYSB0aW1lb3V0IGJhc2VkIG9uIHRoaXMgcHJvYmFiaWxpdHkuIEZvciBleGFtcGxlLCBpZiB1c2VyIGF1ZGlvIHRyYWlscyBvZmZcbiAgICogd2l0aCBcInVoaG1cIiwgdGhlIG1vZGVsIHdpbGwgc2NvcmUgYSBsb3cgcHJvYmFiaWxpdHkgb2YgdHVybiBlbmQgYW5kIHdhaXQgbG9uZ2VyXG4gICAqIGZvciB0aGUgdXNlciB0byBjb250aW51ZSBzcGVha2luZy4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBtb3JlIG5hdHVyYWxcbiAgICogY29udmVyc2F0aW9ucywgYnV0IG1heSBoYXZlIGEgaGlnaGVyIGxhdGVuY3kuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFR1cm5EZXRlY3Rpb24ge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSByZXNwb25zZSB3aGVuIGEgVkFEIHN0b3AgZXZlbnRcbiAgICAgKiBvY2N1cnMuXG4gICAgICovXG4gICAgY3JlYXRlX3Jlc3BvbnNlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgb25seSBmb3IgYHNlbWFudGljX3ZhZGAgbW9kZS4gVGhlIGVhZ2VybmVzcyBvZiB0aGUgbW9kZWwgdG8gcmVzcG9uZC4gYGxvd2BcbiAgICAgKiB3aWxsIHdhaXQgbG9uZ2VyIGZvciB0aGUgdXNlciB0byBjb250aW51ZSBzcGVha2luZywgYGhpZ2hgIHdpbGwgcmVzcG9uZCBtb3JlXG4gICAgICogcXVpY2tseS4gYGF1dG9gIGlzIHRoZSBkZWZhdWx0IGFuZCBpcyBlcXVpdmFsZW50IHRvIGBtZWRpdW1gLlxuICAgICAqL1xuICAgIGVhZ2VybmVzcz86ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnYXV0byc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBhdXRvbWF0aWNhbGx5IGludGVycnVwdCBhbnkgb25nb2luZyByZXNwb25zZSB3aXRoIG91dHB1dCB0b1xuICAgICAqIHRoZSBkZWZhdWx0IGNvbnZlcnNhdGlvbiAoaS5lLiBgY29udmVyc2F0aW9uYCBvZiBgYXV0b2ApIHdoZW4gYSBWQUQgc3RhcnQgZXZlbnRcbiAgICAgKiBvY2N1cnMuXG4gICAgICovXG4gICAgaW50ZXJydXB0X3Jlc3BvbnNlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgb25seSBmb3IgYHNlcnZlcl92YWRgIG1vZGUuIEFtb3VudCBvZiBhdWRpbyB0byBpbmNsdWRlIGJlZm9yZSB0aGUgVkFEXG4gICAgICogZGV0ZWN0ZWQgc3BlZWNoIChpbiBtaWxsaXNlY29uZHMpLiBEZWZhdWx0cyB0byAzMDBtcy5cbiAgICAgKi9cbiAgICBwcmVmaXhfcGFkZGluZ19tcz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgb25seSBmb3IgYHNlcnZlcl92YWRgIG1vZGUuIER1cmF0aW9uIG9mIHNpbGVuY2UgdG8gZGV0ZWN0IHNwZWVjaCBzdG9wIChpblxuICAgICAqIG1pbGxpc2Vjb25kcykuIERlZmF1bHRzIHRvIDUwMG1zLiBXaXRoIHNob3J0ZXIgdmFsdWVzIHRoZSBtb2RlbCB3aWxsIHJlc3BvbmRcbiAgICAgKiBtb3JlIHF1aWNrbHksIGJ1dCBtYXkganVtcCBpbiBvbiBzaG9ydCBwYXVzZXMgZnJvbSB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBzaWxlbmNlX2R1cmF0aW9uX21zPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBvbmx5IGZvciBgc2VydmVyX3ZhZGAgbW9kZS4gQWN0aXZhdGlvbiB0aHJlc2hvbGQgZm9yIFZBRCAoMC4wIHRvIDEuMCksIHRoaXNcbiAgICAgKiBkZWZhdWx0cyB0byAwLjUuIEEgaGlnaGVyIHRocmVzaG9sZCB3aWxsIHJlcXVpcmUgbG91ZGVyIGF1ZGlvIHRvIGFjdGl2YXRlIHRoZVxuICAgICAqIG1vZGVsLCBhbmQgdGh1cyBtaWdodCBwZXJmb3JtIGJldHRlciBpbiBub2lzeSBlbnZpcm9ubWVudHMuXG4gICAgICovXG4gICAgdGhyZXNob2xkPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVHlwZSBvZiB0dXJuIGRldGVjdGlvbi5cbiAgICAgKi9cbiAgICB0eXBlPzogJ3NlcnZlcl92YWQnIHwgJ3NlbWFudGljX3ZhZCc7XG4gIH1cbn1cblxuLyoqXG4gKiBBIG5ldyBSZWFsdGltZSBzZXNzaW9uIGNvbmZpZ3VyYXRpb24sIHdpdGggYW4gZXBoZXJtZXJhbCBrZXkuIERlZmF1bHQgVFRMIGZvclxuICoga2V5cyBpcyBvbmUgbWludXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25DcmVhdGVSZXNwb25zZSB7XG4gIC8qKlxuICAgKiBFcGhlbWVyYWwga2V5IHJldHVybmVkIGJ5IHRoZSBBUEkuXG4gICAqL1xuICBjbGllbnRfc2VjcmV0OiBTZXNzaW9uQ3JlYXRlUmVzcG9uc2UuQ2xpZW50U2VjcmV0O1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybWF0IG9mIGlucHV0IGF1ZGlvLiBPcHRpb25zIGFyZSBgcGNtMTZgLCBgZzcxMV91bGF3YCwgb3IgYGc3MTFfYWxhd2AuXG4gICAqL1xuICBpbnB1dF9hdWRpb19mb3JtYXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24sIGRlZmF1bHRzIHRvIG9mZiBhbmQgY2FuIGJlIHNldCB0b1xuICAgKiBgbnVsbGAgdG8gdHVybiBvZmYgb25jZSBvbi4gSW5wdXQgYXVkaW8gdHJhbnNjcmlwdGlvbiBpcyBub3QgbmF0aXZlIHRvIHRoZVxuICAgKiBtb2RlbCwgc2luY2UgdGhlIG1vZGVsIGNvbnN1bWVzIGF1ZGlvIGRpcmVjdGx5LiBUcmFuc2NyaXB0aW9uIHJ1bnNcbiAgICogYXN5bmNocm9ub3VzbHkgdGhyb3VnaCBXaGlzcGVyIGFuZCBzaG91bGQgYmUgdHJlYXRlZCBhcyByb3VnaCBndWlkYW5jZSByYXRoZXJcbiAgICogdGhhbiB0aGUgcmVwcmVzZW50YXRpb24gdW5kZXJzdG9vZCBieSB0aGUgbW9kZWwuXG4gICAqL1xuICBpbnB1dF9hdWRpb190cmFuc2NyaXB0aW9uPzogU2Vzc2lvbkNyZWF0ZVJlc3BvbnNlLklucHV0QXVkaW9UcmFuc2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIChpLmUuIHN5c3RlbSBtZXNzYWdlKSBwcmVwZW5kZWQgdG8gbW9kZWwgY2FsbHMuXG4gICAqIFRoaXMgZmllbGQgYWxsb3dzIHRoZSBjbGllbnQgdG8gZ3VpZGUgdGhlIG1vZGVsIG9uIGRlc2lyZWQgcmVzcG9uc2VzLiBUaGUgbW9kZWxcbiAgICogY2FuIGJlIGluc3RydWN0ZWQgb24gcmVzcG9uc2UgY29udGVudCBhbmQgZm9ybWF0LCAoZS5nLiBcImJlIGV4dHJlbWVseSBzdWNjaW5jdFwiLFxuICAgKiBcImFjdCBmcmllbmRseVwiLCBcImhlcmUgYXJlIGV4YW1wbGVzIG9mIGdvb2QgcmVzcG9uc2VzXCIpIGFuZCBvbiBhdWRpbyBiZWhhdmlvclxuICAgKiAoZS5nLiBcInRhbGsgcXVpY2tseVwiLCBcImluamVjdCBlbW90aW9uIGludG8geW91ciB2b2ljZVwiLCBcImxhdWdoIGZyZXF1ZW50bHlcIikuIFRoZVxuICAgKiBpbnN0cnVjdGlvbnMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGZvbGxvd2VkIGJ5IHRoZSBtb2RlbCwgYnV0IHRoZXkgcHJvdmlkZVxuICAgKiBndWlkYW5jZSB0byB0aGUgbW9kZWwgb24gdGhlIGRlc2lyZWQgYmVoYXZpb3IuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgc2VydmVyIHNldHMgZGVmYXVsdCBpbnN0cnVjdGlvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIGlmIHRoaXMgZmllbGRcbiAgICogaXMgbm90IHNldCBhbmQgYXJlIHZpc2libGUgaW4gdGhlIGBzZXNzaW9uLmNyZWF0ZWRgIGV2ZW50IGF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICogc2Vzc2lvbi5cbiAgICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygb3V0cHV0IHRva2VucyBmb3IgYSBzaW5nbGUgYXNzaXN0YW50IHJlc3BvbnNlLCBpbmNsdXNpdmUgb2ZcbiAgICogdG9vbCBjYWxscy4gUHJvdmlkZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgNDA5NiB0byBsaW1pdCBvdXRwdXQgdG9rZW5zLCBvclxuICAgKiBgaW5mYCBmb3IgdGhlIG1heGltdW0gYXZhaWxhYmxlIHRva2VucyBmb3IgYSBnaXZlbiBtb2RlbC4gRGVmYXVsdHMgdG8gYGluZmAuXG4gICAqL1xuICBtYXhfcmVzcG9uc2Vfb3V0cHV0X3Rva2Vucz86IG51bWJlciB8ICdpbmYnO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIG1vZGFsaXRpZXMgdGhlIG1vZGVsIGNhbiByZXNwb25kIHdpdGguIFRvIGRpc2FibGUgYXVkaW8sIHNldCB0aGlzIHRvXG4gICAqIFtcInRleHRcIl0uXG4gICAqL1xuICBtb2RhbGl0aWVzPzogQXJyYXk8J3RleHQnIHwgJ2F1ZGlvJz47XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtYXQgb2Ygb3V0cHV0IGF1ZGlvLiBPcHRpb25zIGFyZSBgcGNtMTZgLCBgZzcxMV91bGF3YCwgb3IgYGc3MTFfYWxhd2AuXG4gICAqL1xuICBvdXRwdXRfYXVkaW9fZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTYW1wbGluZyB0ZW1wZXJhdHVyZSBmb3IgdGhlIG1vZGVsLCBsaW1pdGVkIHRvIFswLjYsIDEuMl0uIERlZmF1bHRzIHRvIDAuOC5cbiAgICovXG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIG1vZGVsIGNob29zZXMgdG9vbHMuIE9wdGlvbnMgYXJlIGBhdXRvYCwgYG5vbmVgLCBgcmVxdWlyZWRgLCBvciBzcGVjaWZ5XG4gICAqIGEgZnVuY3Rpb24uXG4gICAqL1xuICB0b29sX2Nob2ljZT86IHN0cmluZztcblxuICAvKipcbiAgICogVG9vbHMgKGZ1bmN0aW9ucykgYXZhaWxhYmxlIHRvIHRoZSBtb2RlbC5cbiAgICovXG4gIHRvb2xzPzogQXJyYXk8U2Vzc2lvbkNyZWF0ZVJlc3BvbnNlLlRvb2w+O1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0dXJuIGRldGVjdGlvbi4gQ2FuIGJlIHNldCB0byBgbnVsbGAgdG8gdHVybiBvZmYuIFNlcnZlciBWQURcbiAgICogbWVhbnMgdGhhdCB0aGUgbW9kZWwgd2lsbCBkZXRlY3QgdGhlIHN0YXJ0IGFuZCBlbmQgb2Ygc3BlZWNoIGJhc2VkIG9uIGF1ZGlvXG4gICAqIHZvbHVtZSBhbmQgcmVzcG9uZCBhdCB0aGUgZW5kIG9mIHVzZXIgc3BlZWNoLlxuICAgKi9cbiAgdHVybl9kZXRlY3Rpb24/OiBTZXNzaW9uQ3JlYXRlUmVzcG9uc2UuVHVybkRldGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIHZvaWNlIHRoZSBtb2RlbCB1c2VzIHRvIHJlc3BvbmQuIFZvaWNlIGNhbm5vdCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgc2Vzc2lvblxuICAgKiBvbmNlIHRoZSBtb2RlbCBoYXMgcmVzcG9uZGVkIHdpdGggYXVkaW8gYXQgbGVhc3Qgb25jZS4gQ3VycmVudCB2b2ljZSBvcHRpb25zIGFyZVxuICAgKiBgYWxsb3lgLCBgYXNoYCwgYGJhbGxhZGAsIGBjb3JhbGAsIGBlY2hvYCBgc2FnZWAsIGBzaGltbWVyYCBhbmQgYHZlcnNlYC5cbiAgICovXG4gIHZvaWNlPzogJ2FsbG95JyB8ICdhc2gnIHwgJ2JhbGxhZCcgfCAnY29yYWwnIHwgJ2VjaG8nIHwgJ3NhZ2UnIHwgJ3NoaW1tZXInIHwgJ3ZlcnNlJztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBTZXNzaW9uQ3JlYXRlUmVzcG9uc2Uge1xuICAvKipcbiAgICogRXBoZW1lcmFsIGtleSByZXR1cm5lZCBieSB0aGUgQVBJLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBDbGllbnRTZWNyZXQge1xuICAgIC8qKlxuICAgICAqIFRpbWVzdGFtcCBmb3Igd2hlbiB0aGUgdG9rZW4gZXhwaXJlcy4gQ3VycmVudGx5LCBhbGwgdG9rZW5zIGV4cGlyZSBhZnRlciBvbmVcbiAgICAgKiBtaW51dGUuXG4gICAgICovXG4gICAgZXhwaXJlc19hdDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogRXBoZW1lcmFsIGtleSB1c2FibGUgaW4gY2xpZW50IGVudmlyb25tZW50cyB0byBhdXRoZW50aWNhdGUgY29ubmVjdGlvbnMgdG8gdGhlXG4gICAgICogUmVhbHRpbWUgQVBJLiBVc2UgdGhpcyBpbiBjbGllbnQtc2lkZSBlbnZpcm9ubWVudHMgcmF0aGVyIHRoYW4gYSBzdGFuZGFyZCBBUElcbiAgICAgKiB0b2tlbiwgd2hpY2ggc2hvdWxkIG9ubHkgYmUgdXNlZCBzZXJ2ZXItc2lkZS5cbiAgICAgKi9cbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24sIGRlZmF1bHRzIHRvIG9mZiBhbmQgY2FuIGJlIHNldCB0b1xuICAgKiBgbnVsbGAgdG8gdHVybiBvZmYgb25jZSBvbi4gSW5wdXQgYXVkaW8gdHJhbnNjcmlwdGlvbiBpcyBub3QgbmF0aXZlIHRvIHRoZVxuICAgKiBtb2RlbCwgc2luY2UgdGhlIG1vZGVsIGNvbnN1bWVzIGF1ZGlvIGRpcmVjdGx5LiBUcmFuc2NyaXB0aW9uIHJ1bnNcbiAgICogYXN5bmNocm9ub3VzbHkgdGhyb3VnaCBXaGlzcGVyIGFuZCBzaG91bGQgYmUgdHJlYXRlZCBhcyByb3VnaCBndWlkYW5jZSByYXRoZXJcbiAgICogdGhhbiB0aGUgcmVwcmVzZW50YXRpb24gdW5kZXJzdG9vZCBieSB0aGUgbW9kZWwuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0QXVkaW9UcmFuc2NyaXB0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbW9kZWwgdG8gdXNlIGZvciB0cmFuc2NyaXB0aW9uLCBgd2hpc3Blci0xYCBpcyB0aGUgb25seSBjdXJyZW50bHkgc3VwcG9ydGVkXG4gICAgICogbW9kZWwuXG4gICAgICovXG4gICAgbW9kZWw/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRvb2wge1xuICAgIC8qKlxuICAgICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb24sIGluY2x1ZGluZyBndWlkYW5jZSBvbiB3aGVuIGFuZCBob3cgdG8gY2FsbCBpdCxcbiAgICAgKiBhbmQgZ3VpZGFuY2UgYWJvdXQgd2hhdCB0byB0ZWxsIHRoZSB1c2VyIHdoZW4gY2FsbGluZyAoaWYgYW55dGhpbmcpLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXJzIG9mIHRoZSBmdW5jdGlvbiBpbiBKU09OIFNjaGVtYS5cbiAgICAgKi9cbiAgICBwYXJhbWV0ZXJzPzogdW5rbm93bjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSB0b29sLCBpLmUuIGBmdW5jdGlvbmAuXG4gICAgICovXG4gICAgdHlwZT86ICdmdW5jdGlvbic7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdHVybiBkZXRlY3Rpb24uIENhbiBiZSBzZXQgdG8gYG51bGxgIHRvIHR1cm4gb2ZmLiBTZXJ2ZXIgVkFEXG4gICAqIG1lYW5zIHRoYXQgdGhlIG1vZGVsIHdpbGwgZGV0ZWN0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHNwZWVjaCBiYXNlZCBvbiBhdWRpb1xuICAgKiB2b2x1bWUgYW5kIHJlc3BvbmQgYXQgdGhlIGVuZCBvZiB1c2VyIHNwZWVjaC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVHVybkRldGVjdGlvbiB7XG4gICAgLyoqXG4gICAgICogQW1vdW50IG9mIGF1ZGlvIHRvIGluY2x1ZGUgYmVmb3JlIHRoZSBWQUQgZGV0ZWN0ZWQgc3BlZWNoIChpbiBtaWxsaXNlY29uZHMpLlxuICAgICAqIERlZmF1bHRzIHRvIDMwMG1zLlxuICAgICAqL1xuICAgIHByZWZpeF9wYWRkaW5nX21zPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogRHVyYXRpb24gb2Ygc2lsZW5jZSB0byBkZXRlY3Qgc3BlZWNoIHN0b3AgKGluIG1pbGxpc2Vjb25kcykuIERlZmF1bHRzIHRvIDUwMG1zLlxuICAgICAqIFdpdGggc2hvcnRlciB2YWx1ZXMgdGhlIG1vZGVsIHdpbGwgcmVzcG9uZCBtb3JlIHF1aWNrbHksIGJ1dCBtYXkganVtcCBpbiBvblxuICAgICAqIHNob3J0IHBhdXNlcyBmcm9tIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIHNpbGVuY2VfZHVyYXRpb25fbXM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBY3RpdmF0aW9uIHRocmVzaG9sZCBmb3IgVkFEICgwLjAgdG8gMS4wKSwgdGhpcyBkZWZhdWx0cyB0byAwLjUuIEEgaGlnaGVyXG4gICAgICogdGhyZXNob2xkIHdpbGwgcmVxdWlyZSBsb3VkZXIgYXVkaW8gdG8gYWN0aXZhdGUgdGhlIG1vZGVsLCBhbmQgdGh1cyBtaWdodFxuICAgICAqIHBlcmZvcm0gYmV0dGVyIGluIG5vaXN5IGVudmlyb25tZW50cy5cbiAgICAgKi9cbiAgICB0aHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIHR1cm4gZGV0ZWN0aW9uLCBvbmx5IGBzZXJ2ZXJfdmFkYCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uQ3JlYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmb3JtYXQgb2YgaW5wdXQgYXVkaW8uIE9wdGlvbnMgYXJlIGBwY20xNmAsIGBnNzExX3VsYXdgLCBvciBgZzcxMV9hbGF3YC4gRm9yXG4gICAqIGBwY20xNmAsIGlucHV0IGF1ZGlvIG11c3QgYmUgMTYtYml0IFBDTSBhdCBhIDI0a0h6IHNhbXBsZSByYXRlLCBzaW5nbGUgY2hhbm5lbFxuICAgKiAobW9ubyksIGFuZCBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIuXG4gICAqL1xuICBpbnB1dF9hdWRpb19mb3JtYXQ/OiAncGNtMTYnIHwgJ2c3MTFfdWxhdycgfCAnZzcxMV9hbGF3JztcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaW5wdXQgYXVkaW8gbm9pc2UgcmVkdWN0aW9uLiBUaGlzIGNhbiBiZSBzZXQgdG8gYG51bGxgIHRvIHR1cm5cbiAgICogb2ZmLiBOb2lzZSByZWR1Y3Rpb24gZmlsdGVycyBhdWRpbyBhZGRlZCB0byB0aGUgaW5wdXQgYXVkaW8gYnVmZmVyIGJlZm9yZSBpdCBpc1xuICAgKiBzZW50IHRvIFZBRCBhbmQgdGhlIG1vZGVsLiBGaWx0ZXJpbmcgdGhlIGF1ZGlvIGNhbiBpbXByb3ZlIFZBRCBhbmQgdHVyblxuICAgKiBkZXRlY3Rpb24gYWNjdXJhY3kgKHJlZHVjaW5nIGZhbHNlIHBvc2l0aXZlcykgYW5kIG1vZGVsIHBlcmZvcm1hbmNlIGJ5IGltcHJvdmluZ1xuICAgKiBwZXJjZXB0aW9uIG9mIHRoZSBpbnB1dCBhdWRpby5cbiAgICovXG4gIGlucHV0X2F1ZGlvX25vaXNlX3JlZHVjdGlvbj86IFNlc3Npb25DcmVhdGVQYXJhbXMuSW5wdXRBdWRpb05vaXNlUmVkdWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBpbnB1dCBhdWRpbyB0cmFuc2NyaXB0aW9uLCBkZWZhdWx0cyB0byBvZmYgYW5kIGNhbiBiZSBzZXQgdG9cbiAgICogYG51bGxgIHRvIHR1cm4gb2ZmIG9uY2Ugb24uIElucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24gaXMgbm90IG5hdGl2ZSB0byB0aGVcbiAgICogbW9kZWwsIHNpbmNlIHRoZSBtb2RlbCBjb25zdW1lcyBhdWRpbyBkaXJlY3RseS4gVHJhbnNjcmlwdGlvbiBydW5zXG4gICAqIGFzeW5jaHJvbm91c2x5IHRocm91Z2hcbiAgICogW3RoZSAvYXVkaW8vdHJhbnNjcmlwdGlvbnMgZW5kcG9pbnRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYXVkaW8vY3JlYXRlVHJhbnNjcmlwdGlvbilcbiAgICogYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzIGd1aWRhbmNlIG9mIGlucHV0IGF1ZGlvIGNvbnRlbnQgcmF0aGVyIHRoYW4gcHJlY2lzZWx5XG4gICAqIHdoYXQgdGhlIG1vZGVsIGhlYXJkLiBUaGUgY2xpZW50IGNhbiBvcHRpb25hbGx5IHNldCB0aGUgbGFuZ3VhZ2UgYW5kIHByb21wdCBmb3JcbiAgICogdHJhbnNjcmlwdGlvbiwgdGhlc2Ugb2ZmZXIgYWRkaXRpb25hbCBndWlkYW5jZSB0byB0aGUgdHJhbnNjcmlwdGlvbiBzZXJ2aWNlLlxuICAgKi9cbiAgaW5wdXRfYXVkaW9fdHJhbnNjcmlwdGlvbj86IFNlc3Npb25DcmVhdGVQYXJhbXMuSW5wdXRBdWRpb1RyYW5zY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHN5c3RlbSBpbnN0cnVjdGlvbnMgKGkuZS4gc3lzdGVtIG1lc3NhZ2UpIHByZXBlbmRlZCB0byBtb2RlbCBjYWxscy5cbiAgICogVGhpcyBmaWVsZCBhbGxvd3MgdGhlIGNsaWVudCB0byBndWlkZSB0aGUgbW9kZWwgb24gZGVzaXJlZCByZXNwb25zZXMuIFRoZSBtb2RlbFxuICAgKiBjYW4gYmUgaW5zdHJ1Y3RlZCBvbiByZXNwb25zZSBjb250ZW50IGFuZCBmb3JtYXQsIChlLmcuIFwiYmUgZXh0cmVtZWx5IHN1Y2NpbmN0XCIsXG4gICAqIFwiYWN0IGZyaWVuZGx5XCIsIFwiaGVyZSBhcmUgZXhhbXBsZXMgb2YgZ29vZCByZXNwb25zZXNcIikgYW5kIG9uIGF1ZGlvIGJlaGF2aW9yXG4gICAqIChlLmcuIFwidGFsayBxdWlja2x5XCIsIFwiaW5qZWN0IGVtb3Rpb24gaW50byB5b3VyIHZvaWNlXCIsIFwibGF1Z2ggZnJlcXVlbnRseVwiKS4gVGhlXG4gICAqIGluc3RydWN0aW9ucyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgZm9sbG93ZWQgYnkgdGhlIG1vZGVsLCBidXQgdGhleSBwcm92aWRlXG4gICAqIGd1aWRhbmNlIHRvIHRoZSBtb2RlbCBvbiB0aGUgZGVzaXJlZCBiZWhhdmlvci5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBzZXJ2ZXIgc2V0cyBkZWZhdWx0IGluc3RydWN0aW9ucyB3aGljaCB3aWxsIGJlIHVzZWQgaWYgdGhpcyBmaWVsZFxuICAgKiBpcyBub3Qgc2V0IGFuZCBhcmUgdmlzaWJsZSBpbiB0aGUgYHNlc3Npb24uY3JlYXRlZGAgZXZlbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBzZXNzaW9uLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBvdXRwdXQgdG9rZW5zIGZvciBhIHNpbmdsZSBhc3Npc3RhbnQgcmVzcG9uc2UsIGluY2x1c2l2ZSBvZlxuICAgKiB0b29sIGNhbGxzLiBQcm92aWRlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCA0MDk2IHRvIGxpbWl0IG91dHB1dCB0b2tlbnMsIG9yXG4gICAqIGBpbmZgIGZvciB0aGUgbWF4aW11bSBhdmFpbGFibGUgdG9rZW5zIGZvciBhIGdpdmVuIG1vZGVsLiBEZWZhdWx0cyB0byBgaW5mYC5cbiAgICovXG4gIG1heF9yZXNwb25zZV9vdXRwdXRfdG9rZW5zPzogbnVtYmVyIHwgJ2luZic7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgbW9kYWxpdGllcyB0aGUgbW9kZWwgY2FuIHJlc3BvbmQgd2l0aC4gVG8gZGlzYWJsZSBhdWRpbywgc2V0IHRoaXMgdG9cbiAgICogW1widGV4dFwiXS5cbiAgICovXG4gIG1vZGFsaXRpZXM/OiBBcnJheTwndGV4dCcgfCAnYXVkaW8nPjtcblxuICAvKipcbiAgICogVGhlIFJlYWx0aW1lIG1vZGVsIHVzZWQgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICovXG4gIG1vZGVsPzpcbiAgICB8ICdncHQtNG8tcmVhbHRpbWUtcHJldmlldydcbiAgICB8ICdncHQtNG8tcmVhbHRpbWUtcHJldmlldy0yMDI0LTEwLTAxJ1xuICAgIHwgJ2dwdC00by1yZWFsdGltZS1wcmV2aWV3LTIwMjQtMTItMTcnXG4gICAgfCAnZ3B0LTRvLW1pbmktcmVhbHRpbWUtcHJldmlldydcbiAgICB8ICdncHQtNG8tbWluaS1yZWFsdGltZS1wcmV2aWV3LTIwMjQtMTItMTcnO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybWF0IG9mIG91dHB1dCBhdWRpby4gT3B0aW9ucyBhcmUgYHBjbTE2YCwgYGc3MTFfdWxhd2AsIG9yIGBnNzExX2FsYXdgLlxuICAgKiBGb3IgYHBjbTE2YCwgb3V0cHV0IGF1ZGlvIGlzIHNhbXBsZWQgYXQgYSByYXRlIG9mIDI0a0h6LlxuICAgKi9cbiAgb3V0cHV0X2F1ZGlvX2Zvcm1hdD86ICdwY20xNicgfCAnZzcxMV91bGF3JyB8ICdnNzExX2FsYXcnO1xuXG4gIC8qKlxuICAgKiBTYW1wbGluZyB0ZW1wZXJhdHVyZSBmb3IgdGhlIG1vZGVsLCBsaW1pdGVkIHRvIFswLjYsIDEuMl0uIEZvciBhdWRpbyBtb2RlbHMgYVxuICAgKiB0ZW1wZXJhdHVyZSBvZiAwLjggaXMgaGlnaGx5IHJlY29tbWVuZGVkIGZvciBiZXN0IHBlcmZvcm1hbmNlLlxuICAgKi9cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgbW9kZWwgY2hvb3NlcyB0b29scy4gT3B0aW9ucyBhcmUgYGF1dG9gLCBgbm9uZWAsIGByZXF1aXJlZGAsIG9yIHNwZWNpZnlcbiAgICogYSBmdW5jdGlvbi5cbiAgICovXG4gIHRvb2xfY2hvaWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUb29scyAoZnVuY3Rpb25zKSBhdmFpbGFibGUgdG8gdGhlIG1vZGVsLlxuICAgKi9cbiAgdG9vbHM/OiBBcnJheTxTZXNzaW9uQ3JlYXRlUGFyYW1zLlRvb2w+O1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0dXJuIGRldGVjdGlvbiwgZXRoZXIgU2VydmVyIFZBRCBvciBTZW1hbnRpYyBWQUQuIFRoaXMgY2FuIGJlXG4gICAqIHNldCB0byBgbnVsbGAgdG8gdHVybiBvZmYsIGluIHdoaWNoIGNhc2UgdGhlIGNsaWVudCBtdXN0IG1hbnVhbGx5IHRyaWdnZXIgbW9kZWxcbiAgICogcmVzcG9uc2UuIFNlcnZlciBWQUQgbWVhbnMgdGhhdCB0aGUgbW9kZWwgd2lsbCBkZXRlY3QgdGhlIHN0YXJ0IGFuZCBlbmQgb2ZcbiAgICogc3BlZWNoIGJhc2VkIG9uIGF1ZGlvIHZvbHVtZSBhbmQgcmVzcG9uZCBhdCB0aGUgZW5kIG9mIHVzZXIgc3BlZWNoLiBTZW1hbnRpYyBWQURcbiAgICogaXMgbW9yZSBhZHZhbmNlZCBhbmQgdXNlcyBhIHR1cm4gZGV0ZWN0aW9uIG1vZGVsIChpbiBjb25qdWN0aW9uIHdpdGggVkFEKSB0b1xuICAgKiBzZW1hbnRpY2FsbHkgZXN0aW1hdGUgd2hldGhlciB0aGUgdXNlciBoYXMgZmluaXNoZWQgc3BlYWtpbmcsIHRoZW4gZHluYW1pY2FsbHlcbiAgICogc2V0cyBhIHRpbWVvdXQgYmFzZWQgb24gdGhpcyBwcm9iYWJpbGl0eS4gRm9yIGV4YW1wbGUsIGlmIHVzZXIgYXVkaW8gdHJhaWxzIG9mZlxuICAgKiB3aXRoIFwidWhobVwiLCB0aGUgbW9kZWwgd2lsbCBzY29yZSBhIGxvdyBwcm9iYWJpbGl0eSBvZiB0dXJuIGVuZCBhbmQgd2FpdCBsb25nZXJcbiAgICogZm9yIHRoZSB1c2VyIHRvIGNvbnRpbnVlIHNwZWFraW5nLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIG1vcmUgbmF0dXJhbFxuICAgKiBjb252ZXJzYXRpb25zLCBidXQgbWF5IGhhdmUgYSBoaWdoZXIgbGF0ZW5jeS5cbiAgICovXG4gIHR1cm5fZGV0ZWN0aW9uPzogU2Vzc2lvbkNyZWF0ZVBhcmFtcy5UdXJuRGV0ZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdm9pY2UgdGhlIG1vZGVsIHVzZXMgdG8gcmVzcG9uZC4gVm9pY2UgY2Fubm90IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBzZXNzaW9uXG4gICAqIG9uY2UgdGhlIG1vZGVsIGhhcyByZXNwb25kZWQgd2l0aCBhdWRpbyBhdCBsZWFzdCBvbmNlLiBDdXJyZW50IHZvaWNlIG9wdGlvbnMgYXJlXG4gICAqIGBhbGxveWAsIGBhc2hgLCBgYmFsbGFkYCwgYGNvcmFsYCwgYGVjaG9gIGBzYWdlYCwgYHNoaW1tZXJgIGFuZCBgdmVyc2VgLlxuICAgKi9cbiAgdm9pY2U/OiAnYWxsb3knIHwgJ2FzaCcgfCAnYmFsbGFkJyB8ICdjb3JhbCcgfCAnZWNobycgfCAnc2FnZScgfCAnc2hpbW1lcicgfCAndmVyc2UnO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlc3Npb25DcmVhdGVQYXJhbXMge1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaW5wdXQgYXVkaW8gbm9pc2UgcmVkdWN0aW9uLiBUaGlzIGNhbiBiZSBzZXQgdG8gYG51bGxgIHRvIHR1cm5cbiAgICogb2ZmLiBOb2lzZSByZWR1Y3Rpb24gZmlsdGVycyBhdWRpbyBhZGRlZCB0byB0aGUgaW5wdXQgYXVkaW8gYnVmZmVyIGJlZm9yZSBpdCBpc1xuICAgKiBzZW50IHRvIFZBRCBhbmQgdGhlIG1vZGVsLiBGaWx0ZXJpbmcgdGhlIGF1ZGlvIGNhbiBpbXByb3ZlIFZBRCBhbmQgdHVyblxuICAgKiBkZXRlY3Rpb24gYWNjdXJhY3kgKHJlZHVjaW5nIGZhbHNlIHBvc2l0aXZlcykgYW5kIG1vZGVsIHBlcmZvcm1hbmNlIGJ5IGltcHJvdmluZ1xuICAgKiBwZXJjZXB0aW9uIG9mIHRoZSBpbnB1dCBhdWRpby5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXRBdWRpb05vaXNlUmVkdWN0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIG5vaXNlIHJlZHVjdGlvbi4gYG5lYXJfZmllbGRgIGlzIGZvciBjbG9zZS10YWxraW5nIG1pY3JvcGhvbmVzIHN1Y2ggYXNcbiAgICAgKiBoZWFkcGhvbmVzLCBgZmFyX2ZpZWxkYCBpcyBmb3IgZmFyLWZpZWxkIG1pY3JvcGhvbmVzIHN1Y2ggYXMgbGFwdG9wIG9yXG4gICAgICogY29uZmVyZW5jZSByb29tIG1pY3JvcGhvbmVzLlxuICAgICAqL1xuICAgIHR5cGU/OiAnbmVhcl9maWVsZCcgfCAnZmFyX2ZpZWxkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBpbnB1dCBhdWRpbyB0cmFuc2NyaXB0aW9uLCBkZWZhdWx0cyB0byBvZmYgYW5kIGNhbiBiZSBzZXQgdG9cbiAgICogYG51bGxgIHRvIHR1cm4gb2ZmIG9uY2Ugb24uIElucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24gaXMgbm90IG5hdGl2ZSB0byB0aGVcbiAgICogbW9kZWwsIHNpbmNlIHRoZSBtb2RlbCBjb25zdW1lcyBhdWRpbyBkaXJlY3RseS4gVHJhbnNjcmlwdGlvbiBydW5zXG4gICAqIGFzeW5jaHJvbm91c2x5IHRocm91Z2hcbiAgICogW3RoZSAvYXVkaW8vdHJhbnNjcmlwdGlvbnMgZW5kcG9pbnRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYXVkaW8vY3JlYXRlVHJhbnNjcmlwdGlvbilcbiAgICogYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzIGd1aWRhbmNlIG9mIGlucHV0IGF1ZGlvIGNvbnRlbnQgcmF0aGVyIHRoYW4gcHJlY2lzZWx5XG4gICAqIHdoYXQgdGhlIG1vZGVsIGhlYXJkLiBUaGUgY2xpZW50IGNhbiBvcHRpb25hbGx5IHNldCB0aGUgbGFuZ3VhZ2UgYW5kIHByb21wdCBmb3JcbiAgICogdHJhbnNjcmlwdGlvbiwgdGhlc2Ugb2ZmZXIgYWRkaXRpb25hbCBndWlkYW5jZSB0byB0aGUgdHJhbnNjcmlwdGlvbiBzZXJ2aWNlLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIGxhbmd1YWdlIG9mIHRoZSBpbnB1dCBhdWRpby4gU3VwcGx5aW5nIHRoZSBpbnB1dCBsYW5ndWFnZSBpblxuICAgICAqIFtJU08tNjM5LTFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfSVNPXzYzOS0xX2NvZGVzKSAoZS5nLiBgZW5gKVxuICAgICAqIGZvcm1hdCB3aWxsIGltcHJvdmUgYWNjdXJhY3kgYW5kIGxhdGVuY3kuXG4gICAgICovXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9kZWwgdG8gdXNlIGZvciB0cmFuc2NyaXB0aW9uLCBjdXJyZW50IG9wdGlvbnMgYXJlIGBncHQtNG8tdHJhbnNjcmliZWAsXG4gICAgICogYGdwdC00by1taW5pLXRyYW5zY3JpYmVgLCBhbmQgYHdoaXNwZXItMWAuXG4gICAgICovXG4gICAgbW9kZWw/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCB0ZXh0IHRvIGd1aWRlIHRoZSBtb2RlbCdzIHN0eWxlIG9yIGNvbnRpbnVlIGEgcHJldmlvdXMgYXVkaW9cbiAgICAgKiBzZWdtZW50LiBGb3IgYHdoaXNwZXItMWAsIHRoZVxuICAgICAqIFtwcm9tcHQgaXMgYSBsaXN0IG9mIGtleXdvcmRzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3BlZWNoLXRvLXRleHQjcHJvbXB0aW5nKS5cbiAgICAgKiBGb3IgYGdwdC00by10cmFuc2NyaWJlYCBtb2RlbHMsIHRoZSBwcm9tcHQgaXMgYSBmcmVlIHRleHQgc3RyaW5nLCBmb3IgZXhhbXBsZVxuICAgICAqIFwiZXhwZWN0IHdvcmRzIHJlbGF0ZWQgdG8gdGVjaG5vbG9neVwiLlxuICAgICAqL1xuICAgIHByb21wdD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVG9vbCB7XG4gICAgLyoqXG4gICAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGd1aWRhbmNlIG9uIHdoZW4gYW5kIGhvdyB0byBjYWxsIGl0LFxuICAgICAqIGFuZCBndWlkYW5jZSBhYm91dCB3aGF0IHRvIHRlbGwgdGhlIHVzZXIgd2hlbiBjYWxsaW5nIChpZiBhbnl0aGluZykuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uXG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFBhcmFtZXRlcnMgb2YgdGhlIGZ1bmN0aW9uIGluIEpTT04gU2NoZW1hLlxuICAgICAqL1xuICAgIHBhcmFtZXRlcnM/OiB1bmtub3duO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHRvb2wsIGkuZS4gYGZ1bmN0aW9uYC5cbiAgICAgKi9cbiAgICB0eXBlPzogJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0dXJuIGRldGVjdGlvbiwgZXRoZXIgU2VydmVyIFZBRCBvciBTZW1hbnRpYyBWQUQuIFRoaXMgY2FuIGJlXG4gICAqIHNldCB0byBgbnVsbGAgdG8gdHVybiBvZmYsIGluIHdoaWNoIGNhc2UgdGhlIGNsaWVudCBtdXN0IG1hbnVhbGx5IHRyaWdnZXIgbW9kZWxcbiAgICogcmVzcG9uc2UuIFNlcnZlciBWQUQgbWVhbnMgdGhhdCB0aGUgbW9kZWwgd2lsbCBkZXRlY3QgdGhlIHN0YXJ0IGFuZCBlbmQgb2ZcbiAgICogc3BlZWNoIGJhc2VkIG9uIGF1ZGlvIHZvbHVtZSBhbmQgcmVzcG9uZCBhdCB0aGUgZW5kIG9mIHVzZXIgc3BlZWNoLiBTZW1hbnRpYyBWQURcbiAgICogaXMgbW9yZSBhZHZhbmNlZCBhbmQgdXNlcyBhIHR1cm4gZGV0ZWN0aW9uIG1vZGVsIChpbiBjb25qdWN0aW9uIHdpdGggVkFEKSB0b1xuICAgKiBzZW1hbnRpY2FsbHkgZXN0aW1hdGUgd2hldGhlciB0aGUgdXNlciBoYXMgZmluaXNoZWQgc3BlYWtpbmcsIHRoZW4gZHluYW1pY2FsbHlcbiAgICogc2V0cyBhIHRpbWVvdXQgYmFzZWQgb24gdGhpcyBwcm9iYWJpbGl0eS4gRm9yIGV4YW1wbGUsIGlmIHVzZXIgYXVkaW8gdHJhaWxzIG9mZlxuICAgKiB3aXRoIFwidWhobVwiLCB0aGUgbW9kZWwgd2lsbCBzY29yZSBhIGxvdyBwcm9iYWJpbGl0eSBvZiB0dXJuIGVuZCBhbmQgd2FpdCBsb25nZXJcbiAgICogZm9yIHRoZSB1c2VyIHRvIGNvbnRpbnVlIHNwZWFraW5nLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIG1vcmUgbmF0dXJhbFxuICAgKiBjb252ZXJzYXRpb25zLCBidXQgbWF5IGhhdmUgYSBoaWdoZXIgbGF0ZW5jeS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVHVybkRldGVjdGlvbiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhIHJlc3BvbnNlIHdoZW4gYSBWQUQgc3RvcCBldmVudFxuICAgICAqIG9jY3Vycy5cbiAgICAgKi9cbiAgICBjcmVhdGVfcmVzcG9uc2U/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBvbmx5IGZvciBgc2VtYW50aWNfdmFkYCBtb2RlLiBUaGUgZWFnZXJuZXNzIG9mIHRoZSBtb2RlbCB0byByZXNwb25kLiBgbG93YFxuICAgICAqIHdpbGwgd2FpdCBsb25nZXIgZm9yIHRoZSB1c2VyIHRvIGNvbnRpbnVlIHNwZWFraW5nLCBgaGlnaGAgd2lsbCByZXNwb25kIG1vcmVcbiAgICAgKiBxdWlja2x5LiBgYXV0b2AgaXMgdGhlIGRlZmF1bHQgYW5kIGlzIGVxdWl2YWxlbnQgdG8gYG1lZGl1bWAuXG4gICAgICovXG4gICAgZWFnZXJuZXNzPzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdhdXRvJztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGF1dG9tYXRpY2FsbHkgaW50ZXJydXB0IGFueSBvbmdvaW5nIHJlc3BvbnNlIHdpdGggb3V0cHV0IHRvXG4gICAgICogdGhlIGRlZmF1bHQgY29udmVyc2F0aW9uIChpLmUuIGBjb252ZXJzYXRpb25gIG9mIGBhdXRvYCkgd2hlbiBhIFZBRCBzdGFydCBldmVudFxuICAgICAqIG9jY3Vycy5cbiAgICAgKi9cbiAgICBpbnRlcnJ1cHRfcmVzcG9uc2U/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBvbmx5IGZvciBgc2VydmVyX3ZhZGAgbW9kZS4gQW1vdW50IG9mIGF1ZGlvIHRvIGluY2x1ZGUgYmVmb3JlIHRoZSBWQURcbiAgICAgKiBkZXRlY3RlZCBzcGVlY2ggKGluIG1pbGxpc2Vjb25kcykuIERlZmF1bHRzIHRvIDMwMG1zLlxuICAgICAqL1xuICAgIHByZWZpeF9wYWRkaW5nX21zPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBvbmx5IGZvciBgc2VydmVyX3ZhZGAgbW9kZS4gRHVyYXRpb24gb2Ygc2lsZW5jZSB0byBkZXRlY3Qgc3BlZWNoIHN0b3AgKGluXG4gICAgICogbWlsbGlzZWNvbmRzKS4gRGVmYXVsdHMgdG8gNTAwbXMuIFdpdGggc2hvcnRlciB2YWx1ZXMgdGhlIG1vZGVsIHdpbGwgcmVzcG9uZFxuICAgICAqIG1vcmUgcXVpY2tseSwgYnV0IG1heSBqdW1wIGluIG9uIHNob3J0IHBhdXNlcyBmcm9tIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIHNpbGVuY2VfZHVyYXRpb25fbXM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZXJ2ZXJfdmFkYCBtb2RlLiBBY3RpdmF0aW9uIHRocmVzaG9sZCBmb3IgVkFEICgwLjAgdG8gMS4wKSwgdGhpc1xuICAgICAqIGRlZmF1bHRzIHRvIDAuNS4gQSBoaWdoZXIgdGhyZXNob2xkIHdpbGwgcmVxdWlyZSBsb3VkZXIgYXVkaW8gdG8gYWN0aXZhdGUgdGhlXG4gICAgICogbW9kZWwsIGFuZCB0aHVzIG1pZ2h0IHBlcmZvcm0gYmV0dGVyIGluIG5vaXN5IGVudmlyb25tZW50cy5cbiAgICAgKi9cbiAgICB0aHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIHR1cm4gZGV0ZWN0aW9uLlxuICAgICAqL1xuICAgIHR5cGU/OiAnc2VydmVyX3ZhZCcgfCAnc2VtYW50aWNfdmFkJztcbiAgfVxufVxuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgU2Vzc2lvbnMge1xuICBleHBvcnQge1xuICAgIHR5cGUgU2Vzc2lvbiBhcyBTZXNzaW9uLFxuICAgIHR5cGUgU2Vzc2lvbkNyZWF0ZVJlc3BvbnNlIGFzIFNlc3Npb25DcmVhdGVSZXNwb25zZSxcbiAgICB0eXBlIFNlc3Npb25DcmVhdGVQYXJhbXMgYXMgU2Vzc2lvbkNyZWF0ZVBhcmFtcyxcbiAgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2NyaXB0aW9uU2Vzc2lvbnMgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXBoZW1lcmFsIEFQSSB0b2tlbiBmb3IgdXNlIGluIGNsaWVudC1zaWRlIGFwcGxpY2F0aW9ucyB3aXRoIHRoZVxuICAgKiBSZWFsdGltZSBBUEkgc3BlY2lmaWNhbGx5IGZvciByZWFsdGltZSB0cmFuc2NyaXB0aW9ucy4gQ2FuIGJlIGNvbmZpZ3VyZWQgd2l0aFxuICAgKiB0aGUgc2FtZSBzZXNzaW9uIHBhcmFtZXRlcnMgYXMgdGhlIGB0cmFuc2NyaXB0aW9uX3Nlc3Npb24udXBkYXRlYCBjbGllbnQgZXZlbnQuXG4gICAqXG4gICAqIEl0IHJlc3BvbmRzIHdpdGggYSBzZXNzaW9uIG9iamVjdCwgcGx1cyBhIGBjbGllbnRfc2VjcmV0YCBrZXkgd2hpY2ggY29udGFpbnMgYVxuICAgKiB1c2FibGUgZXBoZW1lcmFsIEFQSSB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBicm93c2VyIGNsaWVudHMgZm9yXG4gICAqIHRoZSBSZWFsdGltZSBBUEkuXG4gICAqL1xuICBjcmVhdGUoXG4gICAgYm9keTogVHJhbnNjcmlwdGlvblNlc3Npb25DcmVhdGVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxUcmFuc2NyaXB0aW9uU2Vzc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdCgnL3JlYWx0aW1lL3RyYW5zY3JpcHRpb25fc2Vzc2lvbnMnLCB7XG4gICAgICBib2R5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIG5ldyBSZWFsdGltZSB0cmFuc2NyaXB0aW9uIHNlc3Npb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBXaGVuIGEgc2Vzc2lvbiBpcyBjcmVhdGVkIG9uIHRoZSBzZXJ2ZXIgdmlhIFJFU1QgQVBJLCB0aGUgc2Vzc2lvbiBvYmplY3QgYWxzb1xuICogY29udGFpbnMgYW4gZXBoZW1lcmFsIGtleS4gRGVmYXVsdCBUVEwgZm9yIGtleXMgaXMgb25lIG1pbnV0ZS4gVGhpcyBwcm9wZXJ0eSBpc1xuICogbm90IHByZXNlbnQgd2hlbiBhIHNlc3Npb24gaXMgdXBkYXRlZCB2aWEgdGhlIFdlYlNvY2tldCBBUEkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdGlvblNlc3Npb24ge1xuICAvKipcbiAgICogRXBoZW1lcmFsIGtleSByZXR1cm5lZCBieSB0aGUgQVBJLiBPbmx5IHByZXNlbnQgd2hlbiB0aGUgc2Vzc2lvbiBpcyBjcmVhdGVkIG9uXG4gICAqIHRoZSBzZXJ2ZXIgdmlhIFJFU1QgQVBJLlxuICAgKi9cbiAgY2xpZW50X3NlY3JldDogVHJhbnNjcmlwdGlvblNlc3Npb24uQ2xpZW50U2VjcmV0O1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybWF0IG9mIGlucHV0IGF1ZGlvLiBPcHRpb25zIGFyZSBgcGNtMTZgLCBgZzcxMV91bGF3YCwgb3IgYGc3MTFfYWxhd2AuXG4gICAqL1xuICBpbnB1dF9hdWRpb19mb3JtYXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIHRyYW5zY3JpcHRpb24gbW9kZWwuXG4gICAqL1xuICBpbnB1dF9hdWRpb190cmFuc2NyaXB0aW9uPzogVHJhbnNjcmlwdGlvblNlc3Npb24uSW5wdXRBdWRpb1RyYW5zY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgbW9kYWxpdGllcyB0aGUgbW9kZWwgY2FuIHJlc3BvbmQgd2l0aC4gVG8gZGlzYWJsZSBhdWRpbywgc2V0IHRoaXMgdG9cbiAgICogW1widGV4dFwiXS5cbiAgICovXG4gIG1vZGFsaXRpZXM/OiBBcnJheTwndGV4dCcgfCAnYXVkaW8nPjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdHVybiBkZXRlY3Rpb24uIENhbiBiZSBzZXQgdG8gYG51bGxgIHRvIHR1cm4gb2ZmLiBTZXJ2ZXIgVkFEXG4gICAqIG1lYW5zIHRoYXQgdGhlIG1vZGVsIHdpbGwgZGV0ZWN0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHNwZWVjaCBiYXNlZCBvbiBhdWRpb1xuICAgKiB2b2x1bWUgYW5kIHJlc3BvbmQgYXQgdGhlIGVuZCBvZiB1c2VyIHNwZWVjaC5cbiAgICovXG4gIHR1cm5fZGV0ZWN0aW9uPzogVHJhbnNjcmlwdGlvblNlc3Npb24uVHVybkRldGVjdGlvbjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUcmFuc2NyaXB0aW9uU2Vzc2lvbiB7XG4gIC8qKlxuICAgKiBFcGhlbWVyYWwga2V5IHJldHVybmVkIGJ5IHRoZSBBUEkuIE9ubHkgcHJlc2VudCB3aGVuIHRoZSBzZXNzaW9uIGlzIGNyZWF0ZWQgb25cbiAgICogdGhlIHNlcnZlciB2aWEgUkVTVCBBUEkuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIENsaWVudFNlY3JldCB7XG4gICAgLyoqXG4gICAgICogVGltZXN0YW1wIGZvciB3aGVuIHRoZSB0b2tlbiBleHBpcmVzLiBDdXJyZW50bHksIGFsbCB0b2tlbnMgZXhwaXJlIGFmdGVyIG9uZVxuICAgICAqIG1pbnV0ZS5cbiAgICAgKi9cbiAgICBleHBpcmVzX2F0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBFcGhlbWVyYWwga2V5IHVzYWJsZSBpbiBjbGllbnQgZW52aXJvbm1lbnRzIHRvIGF1dGhlbnRpY2F0ZSBjb25uZWN0aW9ucyB0byB0aGVcbiAgICAgKiBSZWFsdGltZSBBUEkuIFVzZSB0aGlzIGluIGNsaWVudC1zaWRlIGVudmlyb25tZW50cyByYXRoZXIgdGhhbiBhIHN0YW5kYXJkIEFQSVxuICAgICAqIHRva2VuLCB3aGljaCBzaG91bGQgb25seSBiZSB1c2VkIHNlcnZlci1zaWRlLlxuICAgICAqL1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvZiB0aGUgdHJhbnNjcmlwdGlvbiBtb2RlbC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXRBdWRpb1RyYW5zY3JpcHRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgaW5wdXQgYXVkaW8uIFN1cHBseWluZyB0aGUgaW5wdXQgbGFuZ3VhZ2UgaW5cbiAgICAgKiBbSVNPLTYzOS0xXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0lTT182MzktMV9jb2RlcykgKGUuZy4gYGVuYClcbiAgICAgKiBmb3JtYXQgd2lsbCBpbXByb3ZlIGFjY3VyYWN5IGFuZCBsYXRlbmN5LlxuICAgICAqL1xuICAgIGxhbmd1YWdlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1vZGVsIHRvIHVzZSBmb3IgdHJhbnNjcmlwdGlvbi4gQ2FuIGJlIGBncHQtNG8tdHJhbnNjcmliZWAsXG4gICAgICogYGdwdC00by1taW5pLXRyYW5zY3JpYmVgLCBvciBgd2hpc3Blci0xYC5cbiAgICAgKi9cbiAgICBtb2RlbD86ICdncHQtNG8tdHJhbnNjcmliZScgfCAnZ3B0LTRvLW1pbmktdHJhbnNjcmliZScgfCAnd2hpc3Blci0xJztcblxuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRleHQgdG8gZ3VpZGUgdGhlIG1vZGVsJ3Mgc3R5bGUgb3IgY29udGludWUgYSBwcmV2aW91cyBhdWRpb1xuICAgICAqIHNlZ21lbnQuIFRoZVxuICAgICAqIFtwcm9tcHRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zcGVlY2gtdG8tdGV4dCNwcm9tcHRpbmcpXG4gICAgICogc2hvdWxkIG1hdGNoIHRoZSBhdWRpbyBsYW5ndWFnZS5cbiAgICAgKi9cbiAgICBwcm9tcHQ/OiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdHVybiBkZXRlY3Rpb24uIENhbiBiZSBzZXQgdG8gYG51bGxgIHRvIHR1cm4gb2ZmLiBTZXJ2ZXIgVkFEXG4gICAqIG1lYW5zIHRoYXQgdGhlIG1vZGVsIHdpbGwgZGV0ZWN0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHNwZWVjaCBiYXNlZCBvbiBhdWRpb1xuICAgKiB2b2x1bWUgYW5kIHJlc3BvbmQgYXQgdGhlIGVuZCBvZiB1c2VyIHNwZWVjaC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVHVybkRldGVjdGlvbiB7XG4gICAgLyoqXG4gICAgICogQW1vdW50IG9mIGF1ZGlvIHRvIGluY2x1ZGUgYmVmb3JlIHRoZSBWQUQgZGV0ZWN0ZWQgc3BlZWNoIChpbiBtaWxsaXNlY29uZHMpLlxuICAgICAqIERlZmF1bHRzIHRvIDMwMG1zLlxuICAgICAqL1xuICAgIHByZWZpeF9wYWRkaW5nX21zPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogRHVyYXRpb24gb2Ygc2lsZW5jZSB0byBkZXRlY3Qgc3BlZWNoIHN0b3AgKGluIG1pbGxpc2Vjb25kcykuIERlZmF1bHRzIHRvIDUwMG1zLlxuICAgICAqIFdpdGggc2hvcnRlciB2YWx1ZXMgdGhlIG1vZGVsIHdpbGwgcmVzcG9uZCBtb3JlIHF1aWNrbHksIGJ1dCBtYXkganVtcCBpbiBvblxuICAgICAqIHNob3J0IHBhdXNlcyBmcm9tIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIHNpbGVuY2VfZHVyYXRpb25fbXM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBY3RpdmF0aW9uIHRocmVzaG9sZCBmb3IgVkFEICgwLjAgdG8gMS4wKSwgdGhpcyBkZWZhdWx0cyB0byAwLjUuIEEgaGlnaGVyXG4gICAgICogdGhyZXNob2xkIHdpbGwgcmVxdWlyZSBsb3VkZXIgYXVkaW8gdG8gYWN0aXZhdGUgdGhlIG1vZGVsLCBhbmQgdGh1cyBtaWdodFxuICAgICAqIHBlcmZvcm0gYmV0dGVyIGluIG5vaXN5IGVudmlyb25tZW50cy5cbiAgICAgKi9cbiAgICB0aHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIHR1cm4gZGV0ZWN0aW9uLCBvbmx5IGBzZXJ2ZXJfdmFkYCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2NyaXB0aW9uU2Vzc2lvbkNyZWF0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIGl0ZW1zIHRvIGluY2x1ZGUgaW4gdGhlIHRyYW5zY3JpcHRpb24uIEN1cnJlbnQgYXZhaWxhYmxlIGl0ZW1zIGFyZTpcbiAgICpcbiAgICogLSBgaXRlbS5pbnB1dF9hdWRpb190cmFuc2NyaXB0aW9uLmxvZ3Byb2JzYFxuICAgKi9cbiAgaW5jbHVkZT86IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtYXQgb2YgaW5wdXQgYXVkaW8uIE9wdGlvbnMgYXJlIGBwY20xNmAsIGBnNzExX3VsYXdgLCBvciBgZzcxMV9hbGF3YC4gRm9yXG4gICAqIGBwY20xNmAsIGlucHV0IGF1ZGlvIG11c3QgYmUgMTYtYml0IFBDTSBhdCBhIDI0a0h6IHNhbXBsZSByYXRlLCBzaW5nbGUgY2hhbm5lbFxuICAgKiAobW9ubyksIGFuZCBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIuXG4gICAqL1xuICBpbnB1dF9hdWRpb19mb3JtYXQ/OiAncGNtMTYnIHwgJ2c3MTFfdWxhdycgfCAnZzcxMV9hbGF3JztcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaW5wdXQgYXVkaW8gbm9pc2UgcmVkdWN0aW9uLiBUaGlzIGNhbiBiZSBzZXQgdG8gYG51bGxgIHRvIHR1cm5cbiAgICogb2ZmLiBOb2lzZSByZWR1Y3Rpb24gZmlsdGVycyBhdWRpbyBhZGRlZCB0byB0aGUgaW5wdXQgYXVkaW8gYnVmZmVyIGJlZm9yZSBpdCBpc1xuICAgKiBzZW50IHRvIFZBRCBhbmQgdGhlIG1vZGVsLiBGaWx0ZXJpbmcgdGhlIGF1ZGlvIGNhbiBpbXByb3ZlIFZBRCBhbmQgdHVyblxuICAgKiBkZXRlY3Rpb24gYWNjdXJhY3kgKHJlZHVjaW5nIGZhbHNlIHBvc2l0aXZlcykgYW5kIG1vZGVsIHBlcmZvcm1hbmNlIGJ5IGltcHJvdmluZ1xuICAgKiBwZXJjZXB0aW9uIG9mIHRoZSBpbnB1dCBhdWRpby5cbiAgICovXG4gIGlucHV0X2F1ZGlvX25vaXNlX3JlZHVjdGlvbj86IFRyYW5zY3JpcHRpb25TZXNzaW9uQ3JlYXRlUGFyYW1zLklucHV0QXVkaW9Ob2lzZVJlZHVjdGlvbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaW5wdXQgYXVkaW8gdHJhbnNjcmlwdGlvbi4gVGhlIGNsaWVudCBjYW4gb3B0aW9uYWxseSBzZXQgdGhlXG4gICAqIGxhbmd1YWdlIGFuZCBwcm9tcHQgZm9yIHRyYW5zY3JpcHRpb24sIHRoZXNlIG9mZmVyIGFkZGl0aW9uYWwgZ3VpZGFuY2UgdG8gdGhlXG4gICAqIHRyYW5zY3JpcHRpb24gc2VydmljZS5cbiAgICovXG4gIGlucHV0X2F1ZGlvX3RyYW5zY3JpcHRpb24/OiBUcmFuc2NyaXB0aW9uU2Vzc2lvbkNyZWF0ZVBhcmFtcy5JbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBtb2RhbGl0aWVzIHRoZSBtb2RlbCBjYW4gcmVzcG9uZCB3aXRoLiBUbyBkaXNhYmxlIGF1ZGlvLCBzZXQgdGhpcyB0b1xuICAgKiBbXCJ0ZXh0XCJdLlxuICAgKi9cbiAgbW9kYWxpdGllcz86IEFycmF5PCd0ZXh0JyB8ICdhdWRpbyc+O1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0dXJuIGRldGVjdGlvbiwgZXRoZXIgU2VydmVyIFZBRCBvciBTZW1hbnRpYyBWQUQuIFRoaXMgY2FuIGJlXG4gICAqIHNldCB0byBgbnVsbGAgdG8gdHVybiBvZmYsIGluIHdoaWNoIGNhc2UgdGhlIGNsaWVudCBtdXN0IG1hbnVhbGx5IHRyaWdnZXIgbW9kZWxcbiAgICogcmVzcG9uc2UuIFNlcnZlciBWQUQgbWVhbnMgdGhhdCB0aGUgbW9kZWwgd2lsbCBkZXRlY3QgdGhlIHN0YXJ0IGFuZCBlbmQgb2ZcbiAgICogc3BlZWNoIGJhc2VkIG9uIGF1ZGlvIHZvbHVtZSBhbmQgcmVzcG9uZCBhdCB0aGUgZW5kIG9mIHVzZXIgc3BlZWNoLiBTZW1hbnRpYyBWQURcbiAgICogaXMgbW9yZSBhZHZhbmNlZCBhbmQgdXNlcyBhIHR1cm4gZGV0ZWN0aW9uIG1vZGVsIChpbiBjb25qdWN0aW9uIHdpdGggVkFEKSB0b1xuICAgKiBzZW1hbnRpY2FsbHkgZXN0aW1hdGUgd2hldGhlciB0aGUgdXNlciBoYXMgZmluaXNoZWQgc3BlYWtpbmcsIHRoZW4gZHluYW1pY2FsbHlcbiAgICogc2V0cyBhIHRpbWVvdXQgYmFzZWQgb24gdGhpcyBwcm9iYWJpbGl0eS4gRm9yIGV4YW1wbGUsIGlmIHVzZXIgYXVkaW8gdHJhaWxzIG9mZlxuICAgKiB3aXRoIFwidWhobVwiLCB0aGUgbW9kZWwgd2lsbCBzY29yZSBhIGxvdyBwcm9iYWJpbGl0eSBvZiB0dXJuIGVuZCBhbmQgd2FpdCBsb25nZXJcbiAgICogZm9yIHRoZSB1c2VyIHRvIGNvbnRpbnVlIHNwZWFraW5nLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIG1vcmUgbmF0dXJhbFxuICAgKiBjb252ZXJzYXRpb25zLCBidXQgbWF5IGhhdmUgYSBoaWdoZXIgbGF0ZW5jeS5cbiAgICovXG4gIHR1cm5fZGV0ZWN0aW9uPzogVHJhbnNjcmlwdGlvblNlc3Npb25DcmVhdGVQYXJhbXMuVHVybkRldGVjdGlvbjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUcmFuc2NyaXB0aW9uU2Vzc2lvbkNyZWF0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBpbnB1dCBhdWRpbyBub2lzZSByZWR1Y3Rpb24uIFRoaXMgY2FuIGJlIHNldCB0byBgbnVsbGAgdG8gdHVyblxuICAgKiBvZmYuIE5vaXNlIHJlZHVjdGlvbiBmaWx0ZXJzIGF1ZGlvIGFkZGVkIHRvIHRoZSBpbnB1dCBhdWRpbyBidWZmZXIgYmVmb3JlIGl0IGlzXG4gICAqIHNlbnQgdG8gVkFEIGFuZCB0aGUgbW9kZWwuIEZpbHRlcmluZyB0aGUgYXVkaW8gY2FuIGltcHJvdmUgVkFEIGFuZCB0dXJuXG4gICAqIGRldGVjdGlvbiBhY2N1cmFjeSAocmVkdWNpbmcgZmFsc2UgcG9zaXRpdmVzKSBhbmQgbW9kZWwgcGVyZm9ybWFuY2UgYnkgaW1wcm92aW5nXG4gICAqIHBlcmNlcHRpb24gb2YgdGhlIGlucHV0IGF1ZGlvLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dEF1ZGlvTm9pc2VSZWR1Y3Rpb24ge1xuICAgIC8qKlxuICAgICAqIFR5cGUgb2Ygbm9pc2UgcmVkdWN0aW9uLiBgbmVhcl9maWVsZGAgaXMgZm9yIGNsb3NlLXRhbGtpbmcgbWljcm9waG9uZXMgc3VjaCBhc1xuICAgICAqIGhlYWRwaG9uZXMsIGBmYXJfZmllbGRgIGlzIGZvciBmYXItZmllbGQgbWljcm9waG9uZXMgc3VjaCBhcyBsYXB0b3Agb3JcbiAgICAgKiBjb25mZXJlbmNlIHJvb20gbWljcm9waG9uZXMuXG4gICAgICovXG4gICAgdHlwZT86ICduZWFyX2ZpZWxkJyB8ICdmYXJfZmllbGQnO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24uIFRoZSBjbGllbnQgY2FuIG9wdGlvbmFsbHkgc2V0IHRoZVxuICAgKiBsYW5ndWFnZSBhbmQgcHJvbXB0IGZvciB0cmFuc2NyaXB0aW9uLCB0aGVzZSBvZmZlciBhZGRpdGlvbmFsIGd1aWRhbmNlIHRvIHRoZVxuICAgKiB0cmFuc2NyaXB0aW9uIHNlcnZpY2UuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0QXVkaW9UcmFuc2NyaXB0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0IGF1ZGlvLiBTdXBwbHlpbmcgdGhlIGlucHV0IGxhbmd1YWdlIGluXG4gICAgICogW0lTTy02MzktMV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9JU09fNjM5LTFfY29kZXMpIChlLmcuIGBlbmApXG4gICAgICogZm9ybWF0IHdpbGwgaW1wcm92ZSBhY2N1cmFjeSBhbmQgbGF0ZW5jeS5cbiAgICAgKi9cbiAgICBsYW5ndWFnZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb2RlbCB0byB1c2UgZm9yIHRyYW5zY3JpcHRpb24sIGN1cnJlbnQgb3B0aW9ucyBhcmUgYGdwdC00by10cmFuc2NyaWJlYCxcbiAgICAgKiBgZ3B0LTRvLW1pbmktdHJhbnNjcmliZWAsIGFuZCBgd2hpc3Blci0xYC5cbiAgICAgKi9cbiAgICBtb2RlbD86ICdncHQtNG8tdHJhbnNjcmliZScgfCAnZ3B0LTRvLW1pbmktdHJhbnNjcmliZScgfCAnd2hpc3Blci0xJztcblxuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRleHQgdG8gZ3VpZGUgdGhlIG1vZGVsJ3Mgc3R5bGUgb3IgY29udGludWUgYSBwcmV2aW91cyBhdWRpb1xuICAgICAqIHNlZ21lbnQuIEZvciBgd2hpc3Blci0xYCwgdGhlXG4gICAgICogW3Byb21wdCBpcyBhIGxpc3Qgb2Yga2V5d29yZHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zcGVlY2gtdG8tdGV4dCNwcm9tcHRpbmcpLlxuICAgICAqIEZvciBgZ3B0LTRvLXRyYW5zY3JpYmVgIG1vZGVscywgdGhlIHByb21wdCBpcyBhIGZyZWUgdGV4dCBzdHJpbmcsIGZvciBleGFtcGxlXG4gICAgICogXCJleHBlY3Qgd29yZHMgcmVsYXRlZCB0byB0ZWNobm9sb2d5XCIuXG4gICAgICovXG4gICAgcHJvbXB0Pzogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIHR1cm4gZGV0ZWN0aW9uLCBldGhlciBTZXJ2ZXIgVkFEIG9yIFNlbWFudGljIFZBRC4gVGhpcyBjYW4gYmVcbiAgICogc2V0IHRvIGBudWxsYCB0byB0dXJuIG9mZiwgaW4gd2hpY2ggY2FzZSB0aGUgY2xpZW50IG11c3QgbWFudWFsbHkgdHJpZ2dlciBtb2RlbFxuICAgKiByZXNwb25zZS4gU2VydmVyIFZBRCBtZWFucyB0aGF0IHRoZSBtb2RlbCB3aWxsIGRldGVjdCB0aGUgc3RhcnQgYW5kIGVuZCBvZlxuICAgKiBzcGVlY2ggYmFzZWQgb24gYXVkaW8gdm9sdW1lIGFuZCByZXNwb25kIGF0IHRoZSBlbmQgb2YgdXNlciBzcGVlY2guIFNlbWFudGljIFZBRFxuICAgKiBpcyBtb3JlIGFkdmFuY2VkIGFuZCB1c2VzIGEgdHVybiBkZXRlY3Rpb24gbW9kZWwgKGluIGNvbmp1Y3Rpb24gd2l0aCBWQUQpIHRvXG4gICAqIHNlbWFudGljYWxseSBlc3RpbWF0ZSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBmaW5pc2hlZCBzcGVha2luZywgdGhlbiBkeW5hbWljYWxseVxuICAgKiBzZXRzIGEgdGltZW91dCBiYXNlZCBvbiB0aGlzIHByb2JhYmlsaXR5LiBGb3IgZXhhbXBsZSwgaWYgdXNlciBhdWRpbyB0cmFpbHMgb2ZmXG4gICAqIHdpdGggXCJ1aGhtXCIsIHRoZSBtb2RlbCB3aWxsIHNjb3JlIGEgbG93IHByb2JhYmlsaXR5IG9mIHR1cm4gZW5kIGFuZCB3YWl0IGxvbmdlclxuICAgKiBmb3IgdGhlIHVzZXIgdG8gY29udGludWUgc3BlYWtpbmcuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgbW9yZSBuYXR1cmFsXG4gICAqIGNvbnZlcnNhdGlvbnMsIGJ1dCBtYXkgaGF2ZSBhIGhpZ2hlciBsYXRlbmN5LlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUdXJuRGV0ZWN0aW9uIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgcmVzcG9uc2Ugd2hlbiBhIFZBRCBzdG9wIGV2ZW50XG4gICAgICogb2NjdXJzLlxuICAgICAqL1xuICAgIGNyZWF0ZV9yZXNwb25zZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZW1hbnRpY192YWRgIG1vZGUuIFRoZSBlYWdlcm5lc3Mgb2YgdGhlIG1vZGVsIHRvIHJlc3BvbmQuIGBsb3dgXG4gICAgICogd2lsbCB3YWl0IGxvbmdlciBmb3IgdGhlIHVzZXIgdG8gY29udGludWUgc3BlYWtpbmcsIGBoaWdoYCB3aWxsIHJlc3BvbmQgbW9yZVxuICAgICAqIHF1aWNrbHkuIGBhdXRvYCBpcyB0aGUgZGVmYXVsdCBhbmQgaXMgZXF1aXZhbGVudCB0byBgbWVkaXVtYC5cbiAgICAgKi9cbiAgICBlYWdlcm5lc3M/OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2F1dG8nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gYXV0b21hdGljYWxseSBpbnRlcnJ1cHQgYW55IG9uZ29pbmcgcmVzcG9uc2Ugd2l0aCBvdXRwdXQgdG9cbiAgICAgKiB0aGUgZGVmYXVsdCBjb252ZXJzYXRpb24gKGkuZS4gYGNvbnZlcnNhdGlvbmAgb2YgYGF1dG9gKSB3aGVuIGEgVkFEIHN0YXJ0IGV2ZW50XG4gICAgICogb2NjdXJzLlxuICAgICAqL1xuICAgIGludGVycnVwdF9yZXNwb25zZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZXJ2ZXJfdmFkYCBtb2RlLiBBbW91bnQgb2YgYXVkaW8gdG8gaW5jbHVkZSBiZWZvcmUgdGhlIFZBRFxuICAgICAqIGRldGVjdGVkIHNwZWVjaCAoaW4gbWlsbGlzZWNvbmRzKS4gRGVmYXVsdHMgdG8gMzAwbXMuXG4gICAgICovXG4gICAgcHJlZml4X3BhZGRpbmdfbXM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZXJ2ZXJfdmFkYCBtb2RlLiBEdXJhdGlvbiBvZiBzaWxlbmNlIHRvIGRldGVjdCBzcGVlY2ggc3RvcCAoaW5cbiAgICAgKiBtaWxsaXNlY29uZHMpLiBEZWZhdWx0cyB0byA1MDBtcy4gV2l0aCBzaG9ydGVyIHZhbHVlcyB0aGUgbW9kZWwgd2lsbCByZXNwb25kXG4gICAgICogbW9yZSBxdWlja2x5LCBidXQgbWF5IGp1bXAgaW4gb24gc2hvcnQgcGF1c2VzIGZyb20gdGhlIHVzZXIuXG4gICAgICovXG4gICAgc2lsZW5jZV9kdXJhdGlvbl9tcz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgb25seSBmb3IgYHNlcnZlcl92YWRgIG1vZGUuIEFjdGl2YXRpb24gdGhyZXNob2xkIGZvciBWQUQgKDAuMCB0byAxLjApLCB0aGlzXG4gICAgICogZGVmYXVsdHMgdG8gMC41LiBBIGhpZ2hlciB0aHJlc2hvbGQgd2lsbCByZXF1aXJlIGxvdWRlciBhdWRpbyB0byBhY3RpdmF0ZSB0aGVcbiAgICAgKiBtb2RlbCwgYW5kIHRodXMgbWlnaHQgcGVyZm9ybSBiZXR0ZXIgaW4gbm9pc3kgZW52aXJvbm1lbnRzLlxuICAgICAqL1xuICAgIHRocmVzaG9sZD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFR5cGUgb2YgdHVybiBkZXRlY3Rpb24uXG4gICAgICovXG4gICAgdHlwZT86ICdzZXJ2ZXJfdmFkJyB8ICdzZW1hbnRpY192YWQnO1xuICB9XG59XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBUcmFuc2NyaXB0aW9uU2Vzc2lvbnMge1xuICBleHBvcnQge1xuICAgIHR5cGUgVHJhbnNjcmlwdGlvblNlc3Npb24gYXMgVHJhbnNjcmlwdGlvblNlc3Npb24sXG4gICAgdHlwZSBUcmFuc2NyaXB0aW9uU2Vzc2lvbkNyZWF0ZVBhcmFtcyBhcyBUcmFuc2NyaXB0aW9uU2Vzc2lvbkNyZWF0ZVBhcmFtcyxcbiAgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCAqIGFzIFJlYWx0aW1lQVBJIGZyb20gJy4vcmVhbHRpbWUnO1xuaW1wb3J0ICogYXMgU2hhcmVkIGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgKiBhcyBTZXNzaW9uc0FQSSBmcm9tICcuL3Nlc3Npb25zJztcbmltcG9ydCB7XG4gIFNlc3Npb24gYXMgU2Vzc2lvbnNBUElTZXNzaW9uLFxuICBTZXNzaW9uQ3JlYXRlUGFyYW1zLFxuICBTZXNzaW9uQ3JlYXRlUmVzcG9uc2UsXG4gIFNlc3Npb25zLFxufSBmcm9tICcuL3Nlc3Npb25zJztcbmltcG9ydCAqIGFzIFRyYW5zY3JpcHRpb25TZXNzaW9uc0FQSSBmcm9tICcuL3RyYW5zY3JpcHRpb24tc2Vzc2lvbnMnO1xuaW1wb3J0IHtcbiAgVHJhbnNjcmlwdGlvblNlc3Npb24sXG4gIFRyYW5zY3JpcHRpb25TZXNzaW9uQ3JlYXRlUGFyYW1zLFxuICBUcmFuc2NyaXB0aW9uU2Vzc2lvbnMsXG59IGZyb20gJy4vdHJhbnNjcmlwdGlvbi1zZXNzaW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBSZWFsdGltZSBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgc2Vzc2lvbnM6IFNlc3Npb25zQVBJLlNlc3Npb25zID0gbmV3IFNlc3Npb25zQVBJLlNlc3Npb25zKHRoaXMuX2NsaWVudCk7XG4gIHRyYW5zY3JpcHRpb25TZXNzaW9uczogVHJhbnNjcmlwdGlvblNlc3Npb25zQVBJLlRyYW5zY3JpcHRpb25TZXNzaW9ucyA9XG4gICAgbmV3IFRyYW5zY3JpcHRpb25TZXNzaW9uc0FQSS5UcmFuc2NyaXB0aW9uU2Vzc2lvbnModGhpcy5fY2xpZW50KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIGEgY29udmVyc2F0aW9uIGlzIGNyZWF0ZWQuIEVtaXR0ZWQgcmlnaHQgYWZ0ZXIgc2Vzc2lvbiBjcmVhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25DcmVhdGVkRXZlbnQge1xuICAvKipcbiAgICogVGhlIGNvbnZlcnNhdGlvbiByZXNvdXJjZS5cbiAgICovXG4gIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uQ3JlYXRlZEV2ZW50LkNvbnZlcnNhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgc2VydmVyIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYGNvbnZlcnNhdGlvbi5jcmVhdGVkYC5cbiAgICovXG4gIHR5cGU6ICdjb252ZXJzYXRpb24uY3JlYXRlZCc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udmVyc2F0aW9uQ3JlYXRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBjb252ZXJzYXRpb24gcmVzb3VyY2UuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgY29udmVyc2F0aW9uLlxuICAgICAqL1xuICAgIGlkPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCB0eXBlLCBtdXN0IGJlIGByZWFsdGltZS5jb252ZXJzYXRpb25gLlxuICAgICAqL1xuICAgIG9iamVjdD86ICdyZWFsdGltZS5jb252ZXJzYXRpb24nO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGl0ZW0gdG8gYWRkIHRvIHRoZSBjb252ZXJzYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2F0aW9uSXRlbSB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBpdGVtLCB0aGlzIGNhbiBiZSBnZW5lcmF0ZWQgYnkgdGhlIGNsaWVudCB0byBoZWxwIG1hbmFnZVxuICAgKiBzZXJ2ZXItc2lkZSBjb250ZXh0LCBidXQgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlIHNlcnZlciB3aWxsIGdlbmVyYXRlIG9uZSBpZlxuICAgKiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24gY2FsbCAoZm9yIGBmdW5jdGlvbl9jYWxsYCBpdGVtcykuXG4gICAqL1xuICBhcmd1bWVudHM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgZnVuY3Rpb24gY2FsbCAoZm9yIGBmdW5jdGlvbl9jYWxsYCBhbmQgYGZ1bmN0aW9uX2NhbGxfb3V0cHV0YFxuICAgKiBpdGVtcykuIElmIHBhc3NlZCBvbiBhIGBmdW5jdGlvbl9jYWxsX291dHB1dGAgaXRlbSwgdGhlIHNlcnZlciB3aWxsIGNoZWNrIHRoYXQgYVxuICAgKiBgZnVuY3Rpb25fY2FsbGAgaXRlbSB3aXRoIHRoZSBzYW1lIElEIGV4aXN0cyBpbiB0aGUgY29udmVyc2F0aW9uIGhpc3RvcnkuXG4gICAqL1xuICBjYWxsX2lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgbWVzc2FnZSwgYXBwbGljYWJsZSBmb3IgYG1lc3NhZ2VgIGl0ZW1zLlxuICAgKlxuICAgKiAtIE1lc3NhZ2UgaXRlbXMgb2Ygcm9sZSBgc3lzdGVtYCBzdXBwb3J0IG9ubHkgYGlucHV0X3RleHRgIGNvbnRlbnRcbiAgICogLSBNZXNzYWdlIGl0ZW1zIG9mIHJvbGUgYHVzZXJgIHN1cHBvcnQgYGlucHV0X3RleHRgIGFuZCBgaW5wdXRfYXVkaW9gIGNvbnRlbnRcbiAgICogLSBNZXNzYWdlIGl0ZW1zIG9mIHJvbGUgYGFzc2lzdGFudGAgc3VwcG9ydCBgdGV4dGAgY29udGVudC5cbiAgICovXG4gIGNvbnRlbnQ/OiBBcnJheTxDb252ZXJzYXRpb25JdGVtQ29udGVudD47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgKGZvciBgZnVuY3Rpb25fY2FsbGAgaXRlbXMpLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgdGhlIEFQSSBvYmplY3QgYmVpbmcgcmV0dXJuZWQgLSBhbHdheXMgYHJlYWx0aW1lLml0ZW1gLlxuICAgKi9cbiAgb2JqZWN0PzogJ3JlYWx0aW1lLml0ZW0nO1xuXG4gIC8qKlxuICAgKiBUaGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbiBjYWxsIChmb3IgYGZ1bmN0aW9uX2NhbGxfb3V0cHV0YCBpdGVtcykuXG4gICAqL1xuICBvdXRwdXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIG9mIHRoZSBtZXNzYWdlIHNlbmRlciAoYHVzZXJgLCBgYXNzaXN0YW50YCwgYHN5c3RlbWApLCBvbmx5IGFwcGxpY2FibGVcbiAgICogZm9yIGBtZXNzYWdlYCBpdGVtcy5cbiAgICovXG4gIHJvbGU/OiAndXNlcicgfCAnYXNzaXN0YW50JyB8ICdzeXN0ZW0nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBpdGVtIChgY29tcGxldGVkYCwgYGluY29tcGxldGVgKS4gVGhlc2UgaGF2ZSBubyBlZmZlY3Qgb24gdGhlXG4gICAqIGNvbnZlcnNhdGlvbiwgYnV0IGFyZSBhY2NlcHRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgICogYGNvbnZlcnNhdGlvbi5pdGVtLmNyZWF0ZWRgIGV2ZW50LlxuICAgKi9cbiAgc3RhdHVzPzogJ2NvbXBsZXRlZCcgfCAnaW5jb21wbGV0ZSc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBpdGVtIChgbWVzc2FnZWAsIGBmdW5jdGlvbl9jYWxsYCwgYGZ1bmN0aW9uX2NhbGxfb3V0cHV0YCkuXG4gICAqL1xuICB0eXBlPzogJ21lc3NhZ2UnIHwgJ2Z1bmN0aW9uX2NhbGwnIHwgJ2Z1bmN0aW9uX2NhbGxfb3V0cHV0Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25JdGVtQ29udGVudCB7XG4gIC8qKlxuICAgKiBJRCBvZiBhIHByZXZpb3VzIGNvbnZlcnNhdGlvbiBpdGVtIHRvIHJlZmVyZW5jZSAoZm9yIGBpdGVtX3JlZmVyZW5jZWAgY29udGVudFxuICAgKiB0eXBlcyBpbiBgcmVzcG9uc2UuY3JlYXRlYCBldmVudHMpLiBUaGVzZSBjYW4gcmVmZXJlbmNlIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXJcbiAgICogY3JlYXRlZCBpdGVtcy5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCYXNlNjQtZW5jb2RlZCBhdWRpbyBieXRlcywgdXNlZCBmb3IgYGlucHV0X2F1ZGlvYCBjb250ZW50IHR5cGUuXG4gICAqL1xuICBhdWRpbz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRleHQgY29udGVudCwgdXNlZCBmb3IgYGlucHV0X3RleHRgIGFuZCBgdGV4dGAgY29udGVudCB0eXBlcy5cbiAgICovXG4gIHRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2NyaXB0IG9mIHRoZSBhdWRpbywgdXNlZCBmb3IgYGlucHV0X2F1ZGlvYCBjb250ZW50IHR5cGUuXG4gICAqL1xuICB0cmFuc2NyaXB0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0eXBlIChgaW5wdXRfdGV4dGAsIGBpbnB1dF9hdWRpb2AsIGBpdGVtX3JlZmVyZW5jZWAsIGB0ZXh0YCkuXG4gICAqL1xuICB0eXBlPzogJ2lucHV0X3RleHQnIHwgJ2lucHV0X2F1ZGlvJyB8ICdpdGVtX3JlZmVyZW5jZScgfCAndGV4dCc7XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IEl0ZW0gdG8gdGhlIENvbnZlcnNhdGlvbidzIGNvbnRleHQsIGluY2x1ZGluZyBtZXNzYWdlcywgZnVuY3Rpb25cbiAqIGNhbGxzLCBhbmQgZnVuY3Rpb24gY2FsbCByZXNwb25zZXMuIFRoaXMgZXZlbnQgY2FuIGJlIHVzZWQgYm90aCB0byBwb3B1bGF0ZSBhXG4gKiBcImhpc3RvcnlcIiBvZiB0aGUgY29udmVyc2F0aW9uIGFuZCB0byBhZGQgbmV3IGl0ZW1zIG1pZC1zdHJlYW0sIGJ1dCBoYXMgdGhlXG4gKiBjdXJyZW50IGxpbWl0YXRpb24gdGhhdCBpdCBjYW5ub3QgcG9wdWxhdGUgYXNzaXN0YW50IGF1ZGlvIG1lc3NhZ2VzLlxuICpcbiAqIElmIHN1Y2Nlc3NmdWwsIHRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kIHdpdGggYSBgY29udmVyc2F0aW9uLml0ZW0uY3JlYXRlZGAgZXZlbnQsXG4gKiBvdGhlcndpc2UgYW4gYGVycm9yYCBldmVudCB3aWxsIGJlIHNlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2F0aW9uSXRlbUNyZWF0ZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpdGVtIHRvIGFkZCB0byB0aGUgY29udmVyc2F0aW9uLlxuICAgKi9cbiAgaXRlbTogQ29udmVyc2F0aW9uSXRlbTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYGNvbnZlcnNhdGlvbi5pdGVtLmNyZWF0ZWAuXG4gICAqL1xuICB0eXBlOiAnY29udmVyc2F0aW9uLml0ZW0uY3JlYXRlJztcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2xpZW50LWdlbmVyYXRlZCBJRCB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwcmVjZWRpbmcgaXRlbSBhZnRlciB3aGljaCB0aGUgbmV3IGl0ZW0gd2lsbCBiZSBpbnNlcnRlZC4gSWYgbm90XG4gICAqIHNldCwgdGhlIG5ldyBpdGVtIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgY29udmVyc2F0aW9uLiBJZiBzZXQgdG9cbiAgICogYHJvb3RgLCB0aGUgbmV3IGl0ZW0gd2lsbCBiZSBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb252ZXJzYXRpb24uIElmIHNldFxuICAgKiB0byBhbiBleGlzdGluZyBJRCwgaXQgYWxsb3dzIGFuIGl0ZW0gdG8gYmUgaW5zZXJ0ZWQgbWlkLWNvbnZlcnNhdGlvbi4gSWYgdGhlIElEXG4gICAqIGNhbm5vdCBiZSBmb3VuZCwgYW4gZXJyb3Igd2lsbCBiZSByZXR1cm5lZCBhbmQgdGhlIGl0ZW0gd2lsbCBub3QgYmUgYWRkZWQuXG4gICAqL1xuICBwcmV2aW91c19pdGVtX2lkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHVybmVkIHdoZW4gYSBjb252ZXJzYXRpb24gaXRlbSBpcyBjcmVhdGVkLiBUaGVyZSBhcmUgc2V2ZXJhbCBzY2VuYXJpb3MgdGhhdFxuICogcHJvZHVjZSB0aGlzIGV2ZW50OlxuICpcbiAqIC0gVGhlIHNlcnZlciBpcyBnZW5lcmF0aW5nIGEgUmVzcG9uc2UsIHdoaWNoIGlmIHN1Y2Nlc3NmdWwgd2lsbCBwcm9kdWNlIGVpdGhlclxuICogICBvbmUgb3IgdHdvIEl0ZW1zLCB3aGljaCB3aWxsIGJlIG9mIHR5cGUgYG1lc3NhZ2VgIChyb2xlIGBhc3Npc3RhbnRgKSBvciB0eXBlXG4gKiAgIGBmdW5jdGlvbl9jYWxsYC5cbiAqIC0gVGhlIGlucHV0IGF1ZGlvIGJ1ZmZlciBoYXMgYmVlbiBjb21taXR0ZWQsIGVpdGhlciBieSB0aGUgY2xpZW50IG9yIHRoZSBzZXJ2ZXJcbiAqICAgKGluIGBzZXJ2ZXJfdmFkYCBtb2RlKS4gVGhlIHNlcnZlciB3aWxsIHRha2UgdGhlIGNvbnRlbnQgb2YgdGhlIGlucHV0IGF1ZGlvXG4gKiAgIGJ1ZmZlciBhbmQgYWRkIGl0IHRvIGEgbmV3IHVzZXIgbWVzc2FnZSBJdGVtLlxuICogLSBUaGUgY2xpZW50IGhhcyBzZW50IGEgYGNvbnZlcnNhdGlvbi5pdGVtLmNyZWF0ZWAgZXZlbnQgdG8gYWRkIGEgbmV3IEl0ZW0gdG9cbiAqICAgdGhlIENvbnZlcnNhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25JdGVtQ3JlYXRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpdGVtIHRvIGFkZCB0byB0aGUgY29udmVyc2F0aW9uLlxuICAgKi9cbiAgaXRlbTogQ29udmVyc2F0aW9uSXRlbTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwcmVjZWRpbmcgaXRlbSBpbiB0aGUgQ29udmVyc2F0aW9uIGNvbnRleHQsIGFsbG93cyB0aGUgY2xpZW50IHRvXG4gICAqIHVuZGVyc3RhbmQgdGhlIG9yZGVyIG9mIHRoZSBjb252ZXJzYXRpb24uXG4gICAqL1xuICBwcmV2aW91c19pdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGBjb252ZXJzYXRpb24uaXRlbS5jcmVhdGVkYC5cbiAgICovXG4gIHR5cGU6ICdjb252ZXJzYXRpb24uaXRlbS5jcmVhdGVkJztcbn1cblxuLyoqXG4gKiBTZW5kIHRoaXMgZXZlbnQgd2hlbiB5b3Ugd2FudCB0byByZW1vdmUgYW55IGl0ZW0gZnJvbSB0aGUgY29udmVyc2F0aW9uIGhpc3RvcnkuXG4gKiBUaGUgc2VydmVyIHdpbGwgcmVzcG9uZCB3aXRoIGEgYGNvbnZlcnNhdGlvbi5pdGVtLmRlbGV0ZWRgIGV2ZW50LCB1bmxlc3MgdGhlXG4gKiBpdGVtIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjb252ZXJzYXRpb24gaGlzdG9yeSwgaW4gd2hpY2ggY2FzZSB0aGUgc2VydmVyIHdpbGxcbiAqIHJlc3BvbmQgd2l0aCBhbiBlcnJvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25JdGVtRGVsZXRlRXZlbnQge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBpdGVtIHRvIGRlbGV0ZS5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYGNvbnZlcnNhdGlvbi5pdGVtLmRlbGV0ZWAuXG4gICAqL1xuICB0eXBlOiAnY29udmVyc2F0aW9uLml0ZW0uZGVsZXRlJztcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2xpZW50LWdlbmVyYXRlZCBJRCB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIGFuIGl0ZW0gaW4gdGhlIGNvbnZlcnNhdGlvbiBpcyBkZWxldGVkIGJ5IHRoZSBjbGllbnQgd2l0aCBhXG4gKiBgY29udmVyc2F0aW9uLml0ZW0uZGVsZXRlYCBldmVudC4gVGhpcyBldmVudCBpcyB1c2VkIHRvIHN5bmNocm9uaXplIHRoZSBzZXJ2ZXInc1xuICogdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udmVyc2F0aW9uIGhpc3Rvcnkgd2l0aCB0aGUgY2xpZW50J3Mgdmlldy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25JdGVtRGVsZXRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgaXRlbSB0aGF0IHdhcyBkZWxldGVkLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgY29udmVyc2F0aW9uLml0ZW0uZGVsZXRlZGAuXG4gICAqL1xuICB0eXBlOiAnY29udmVyc2F0aW9uLml0ZW0uZGVsZXRlZCc7XG59XG5cbi8qKlxuICogVGhpcyBldmVudCBpcyB0aGUgb3V0cHV0IG9mIGF1ZGlvIHRyYW5zY3JpcHRpb24gZm9yIHVzZXIgYXVkaW8gd3JpdHRlbiB0byB0aGVcbiAqIHVzZXIgYXVkaW8gYnVmZmVyLiBUcmFuc2NyaXB0aW9uIGJlZ2lucyB3aGVuIHRoZSBpbnB1dCBhdWRpbyBidWZmZXIgaXMgY29tbWl0dGVkXG4gKiBieSB0aGUgY2xpZW50IG9yIHNlcnZlciAoaW4gYHNlcnZlcl92YWRgIG1vZGUpLiBUcmFuc2NyaXB0aW9uIHJ1bnNcbiAqIGFzeW5jaHJvbm91c2x5IHdpdGggUmVzcG9uc2UgY3JlYXRpb24sIHNvIHRoaXMgZXZlbnQgbWF5IGNvbWUgYmVmb3JlIG9yIGFmdGVyXG4gKiB0aGUgUmVzcG9uc2UgZXZlbnRzLlxuICpcbiAqIFJlYWx0aW1lIEFQSSBtb2RlbHMgYWNjZXB0IGF1ZGlvIG5hdGl2ZWx5LCBhbmQgdGh1cyBpbnB1dCB0cmFuc2NyaXB0aW9uIGlzIGFcbiAqIHNlcGFyYXRlIHByb2Nlc3MgcnVuIG9uIGEgc2VwYXJhdGUgQVNSIChBdXRvbWF0aWMgU3BlZWNoIFJlY29nbml0aW9uKSBtb2RlbCxcbiAqIGN1cnJlbnRseSBhbHdheXMgYHdoaXNwZXItMWAuIFRodXMgdGhlIHRyYW5zY3JpcHQgbWF5IGRpdmVyZ2Ugc29tZXdoYXQgZnJvbSB0aGVcbiAqIG1vZGVsJ3MgaW50ZXJwcmV0YXRpb24sIGFuZCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHJvdWdoIGd1aWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbkl0ZW1JbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbkNvbXBsZXRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgY29udGVudCBwYXJ0IGNvbnRhaW5pbmcgdGhlIGF1ZGlvLlxuICAgKi9cbiAgY29udGVudF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzZXJ2ZXIgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHVzZXIgbWVzc2FnZSBpdGVtIGNvbnRhaW5pbmcgdGhlIGF1ZGlvLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNjcmliZWQgdGV4dC5cbiAgICovXG4gIHRyYW5zY3JpcHQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYGNvbnZlcnNhdGlvbi5pdGVtLmlucHV0X2F1ZGlvX3RyYW5zY3JpcHRpb24uY29tcGxldGVkYC5cbiAgICovXG4gIHR5cGU6ICdjb252ZXJzYXRpb24uaXRlbS5pbnB1dF9hdWRpb190cmFuc2NyaXB0aW9uLmNvbXBsZXRlZCc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2cgcHJvYmFiaWxpdGllcyBvZiB0aGUgdHJhbnNjcmlwdGlvbi5cbiAgICovXG4gIGxvZ3Byb2JzPzogQXJyYXk8Q29udmVyc2F0aW9uSXRlbUlucHV0QXVkaW9UcmFuc2NyaXB0aW9uQ29tcGxldGVkRXZlbnQuTG9ncHJvYj4gfCBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnZlcnNhdGlvbkl0ZW1JbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbkNvbXBsZXRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIEEgbG9nIHByb2JhYmlsaXR5IG9iamVjdC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgTG9ncHJvYiB7XG4gICAgLyoqXG4gICAgICogVGhlIHRva2VuIHRoYXQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGxvZyBwcm9iYWJpbGl0eS5cbiAgICAgKi9cbiAgICB0b2tlbjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJ5dGVzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBsb2cgcHJvYmFiaWxpdHkuXG4gICAgICovXG4gICAgYnl0ZXM6IEFycmF5PG51bWJlcj47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbG9nIHByb2JhYmlsaXR5IG9mIHRoZSB0b2tlbi5cbiAgICAgKi9cbiAgICBsb2dwcm9iOiBudW1iZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGlucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24gY29udGVudCBwYXJ0IGlzXG4gKiB1cGRhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbkl0ZW1JbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbkRlbHRhRXZlbnQge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgc2VydmVyIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBpdGVtLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgY29udmVyc2F0aW9uLml0ZW0uaW5wdXRfYXVkaW9fdHJhbnNjcmlwdGlvbi5kZWx0YWAuXG4gICAqL1xuICB0eXBlOiAnY29udmVyc2F0aW9uLml0ZW0uaW5wdXRfYXVkaW9fdHJhbnNjcmlwdGlvbi5kZWx0YSc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgY29udGVudCBwYXJ0IGluIHRoZSBpdGVtJ3MgY29udGVudCBhcnJheS5cbiAgICovXG4gIGNvbnRlbnRfaW5kZXg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGRlbHRhLlxuICAgKi9cbiAgZGVsdGE/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2cgcHJvYmFiaWxpdGllcyBvZiB0aGUgdHJhbnNjcmlwdGlvbi5cbiAgICovXG4gIGxvZ3Byb2JzPzogQXJyYXk8Q29udmVyc2F0aW9uSXRlbUlucHV0QXVkaW9UcmFuc2NyaXB0aW9uRGVsdGFFdmVudC5Mb2dwcm9iPiB8IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udmVyc2F0aW9uSXRlbUlucHV0QXVkaW9UcmFuc2NyaXB0aW9uRGVsdGFFdmVudCB7XG4gIC8qKlxuICAgKiBBIGxvZyBwcm9iYWJpbGl0eSBvYmplY3QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIExvZ3Byb2Ige1xuICAgIC8qKlxuICAgICAqIFRoZSB0b2tlbiB0aGF0IHdhcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBsb2cgcHJvYmFiaWxpdHkuXG4gICAgICovXG4gICAgdG9rZW46IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBieXRlcyB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbG9nIHByb2JhYmlsaXR5LlxuICAgICAqL1xuICAgIGJ5dGVzOiBBcnJheTxudW1iZXI+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxvZyBwcm9iYWJpbGl0eSBvZiB0aGUgdG9rZW4uXG4gICAgICovXG4gICAgbG9ncHJvYjogbnVtYmVyO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgd2hlbiBpbnB1dCBhdWRpbyB0cmFuc2NyaXB0aW9uIGlzIGNvbmZpZ3VyZWQsIGFuZCBhIHRyYW5zY3JpcHRpb25cbiAqIHJlcXVlc3QgZm9yIGEgdXNlciBtZXNzYWdlIGZhaWxlZC4gVGhlc2UgZXZlbnRzIGFyZSBzZXBhcmF0ZSBmcm9tIG90aGVyIGBlcnJvcmBcbiAqIGV2ZW50cyBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGlkZW50aWZ5IHRoZSByZWxhdGVkIEl0ZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2F0aW9uSXRlbUlucHV0QXVkaW9UcmFuc2NyaXB0aW9uRmFpbGVkRXZlbnQge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBjb250ZW50IHBhcnQgY29udGFpbmluZyB0aGUgYXVkaW8uXG4gICAqL1xuICBjb250ZW50X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERldGFpbHMgb2YgdGhlIHRyYW5zY3JpcHRpb24gZXJyb3IuXG4gICAqL1xuICBlcnJvcjogQ29udmVyc2F0aW9uSXRlbUlucHV0QXVkaW9UcmFuc2NyaXB0aW9uRmFpbGVkRXZlbnQuRXJyb3I7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgdXNlciBtZXNzYWdlIGl0ZW0uXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGBjb252ZXJzYXRpb24uaXRlbS5pbnB1dF9hdWRpb190cmFuc2NyaXB0aW9uLmZhaWxlZGAuXG4gICAqL1xuICB0eXBlOiAnY29udmVyc2F0aW9uLml0ZW0uaW5wdXRfYXVkaW9fdHJhbnNjcmlwdGlvbi5mYWlsZWQnO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnZlcnNhdGlvbkl0ZW1JbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbkZhaWxlZEV2ZW50IHtcbiAgLyoqXG4gICAqIERldGFpbHMgb2YgdGhlIHRyYW5zY3JpcHRpb24gZXJyb3IuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEVycm9yIHtcbiAgICAvKipcbiAgICAgKiBFcnJvciBjb2RlLCBpZiBhbnkuXG4gICAgICovXG4gICAgY29kZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUGFyYW1ldGVyIHJlbGF0ZWQgdG8gdGhlIGVycm9yLCBpZiBhbnkuXG4gICAgICovXG4gICAgcGFyYW0/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBlcnJvci5cbiAgICAgKi9cbiAgICB0eXBlPzogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogU2VuZCB0aGlzIGV2ZW50IHdoZW4geW91IHdhbnQgdG8gcmV0cmlldmUgdGhlIHNlcnZlcidzIHJlcHJlc2VudGF0aW9uIG9mIGFcbiAqIHNwZWNpZmljIGl0ZW0gaW4gdGhlIGNvbnZlcnNhdGlvbiBoaXN0b3J5LiBUaGlzIGlzIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHRvXG4gKiBpbnNwZWN0IHVzZXIgYXVkaW8gYWZ0ZXIgbm9pc2UgY2FuY2VsbGF0aW9uIGFuZCBWQUQuIFRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kXG4gKiB3aXRoIGEgYGNvbnZlcnNhdGlvbi5pdGVtLnJldHJpZXZlZGAgZXZlbnQsIHVubGVzcyB0aGUgaXRlbSBkb2VzIG5vdCBleGlzdCBpblxuICogdGhlIGNvbnZlcnNhdGlvbiBoaXN0b3J5LCBpbiB3aGljaCBjYXNlIHRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kIHdpdGggYW4gZXJyb3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2F0aW9uSXRlbVJldHJpZXZlRXZlbnQge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBpdGVtIHRvIHJldHJpZXZlLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgY29udmVyc2F0aW9uLml0ZW0ucmV0cmlldmVgLlxuICAgKi9cbiAgdHlwZTogJ2NvbnZlcnNhdGlvbi5pdGVtLnJldHJpZXZlJztcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2xpZW50LWdlbmVyYXRlZCBJRCB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIHRoaXMgZXZlbnQgdG8gdHJ1bmNhdGUgYSBwcmV2aW91cyBhc3Npc3RhbnQgbWVzc2FnZVx1MjAxOXMgYXVkaW8uIFRoZSBzZXJ2ZXJcbiAqIHdpbGwgcHJvZHVjZSBhdWRpbyBmYXN0ZXIgdGhhbiByZWFsdGltZSwgc28gdGhpcyBldmVudCBpcyB1c2VmdWwgd2hlbiB0aGUgdXNlclxuICogaW50ZXJydXB0cyB0byB0cnVuY2F0ZSBhdWRpbyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gc2VudCB0byB0aGUgY2xpZW50IGJ1dCBub3RcbiAqIHlldCBwbGF5ZWQuIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSB0aGUgc2VydmVyJ3MgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXVkaW8gd2l0aFxuICogdGhlIGNsaWVudCdzIHBsYXliYWNrLlxuICpcbiAqIFRydW5jYXRpbmcgYXVkaW8gd2lsbCBkZWxldGUgdGhlIHNlcnZlci1zaWRlIHRleHQgdHJhbnNjcmlwdCB0byBlbnN1cmUgdGhlcmUgaXNcbiAqIG5vdCB0ZXh0IGluIHRoZSBjb250ZXh0IHRoYXQgaGFzbid0IGJlZW4gaGVhcmQgYnkgdGhlIHVzZXIuXG4gKlxuICogSWYgc3VjY2Vzc2Z1bCwgdGhlIHNlcnZlciB3aWxsIHJlc3BvbmQgd2l0aCBhIGBjb252ZXJzYXRpb24uaXRlbS50cnVuY2F0ZWRgXG4gKiBldmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25JdGVtVHJ1bmNhdGVFdmVudCB7XG4gIC8qKlxuICAgKiBJbmNsdXNpdmUgZHVyYXRpb24gdXAgdG8gd2hpY2ggYXVkaW8gaXMgdHJ1bmNhdGVkLCBpbiBtaWxsaXNlY29uZHMuIElmIHRoZVxuICAgKiBhdWRpb19lbmRfbXMgaXMgZ3JlYXRlciB0aGFuIHRoZSBhY3R1YWwgYXVkaW8gZHVyYXRpb24sIHRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kXG4gICAqIHdpdGggYW4gZXJyb3IuXG4gICAqL1xuICBhdWRpb19lbmRfbXM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBjb250ZW50IHBhcnQgdG8gdHJ1bmNhdGUuIFNldCB0aGlzIHRvIDAuXG4gICAqL1xuICBjb250ZW50X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgYXNzaXN0YW50IG1lc3NhZ2UgaXRlbSB0byB0cnVuY2F0ZS4gT25seSBhc3Npc3RhbnQgbWVzc2FnZSBpdGVtc1xuICAgKiBjYW4gYmUgdHJ1bmNhdGVkLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgY29udmVyc2F0aW9uLml0ZW0udHJ1bmNhdGVgLlxuICAgKi9cbiAgdHlwZTogJ2NvbnZlcnNhdGlvbi5pdGVtLnRydW5jYXRlJztcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2xpZW50LWdlbmVyYXRlZCBJRCB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIGFuIGVhcmxpZXIgYXNzaXN0YW50IGF1ZGlvIG1lc3NhZ2UgaXRlbSBpcyB0cnVuY2F0ZWQgYnkgdGhlIGNsaWVudFxuICogd2l0aCBhIGBjb252ZXJzYXRpb24uaXRlbS50cnVuY2F0ZWAgZXZlbnQuIFRoaXMgZXZlbnQgaXMgdXNlZCB0byBzeW5jaHJvbml6ZSB0aGVcbiAqIHNlcnZlcidzIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGF1ZGlvIHdpdGggdGhlIGNsaWVudCdzIHBsYXliYWNrLlxuICpcbiAqIFRoaXMgYWN0aW9uIHdpbGwgdHJ1bmNhdGUgdGhlIGF1ZGlvIGFuZCByZW1vdmUgdGhlIHNlcnZlci1zaWRlIHRleHQgdHJhbnNjcmlwdFxuICogdG8gZW5zdXJlIHRoZXJlIGlzIG5vIHRleHQgaW4gdGhlIGNvbnRleHQgdGhhdCBoYXNuJ3QgYmVlbiBoZWFyZCBieSB0aGUgdXNlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25JdGVtVHJ1bmNhdGVkRXZlbnQge1xuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIHVwIHRvIHdoaWNoIHRoZSBhdWRpbyB3YXMgdHJ1bmNhdGVkLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICBhdWRpb19lbmRfbXM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBjb250ZW50IHBhcnQgdGhhdCB3YXMgdHJ1bmNhdGVkLlxuICAgKi9cbiAgY29udGVudF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzZXJ2ZXIgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGFzc2lzdGFudCBtZXNzYWdlIGl0ZW0gdGhhdCB3YXMgdHJ1bmNhdGVkLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgY29udmVyc2F0aW9uLml0ZW0udHJ1bmNhdGVkYC5cbiAgICovXG4gIHR5cGU6ICdjb252ZXJzYXRpb24uaXRlbS50cnVuY2F0ZWQnO1xufVxuXG4vKipcbiAqIFRoZSBpdGVtIHRvIGFkZCB0byB0aGUgY29udmVyc2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbkl0ZW1XaXRoUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEZvciBhbiBpdGVtIG9mIHR5cGUgKGBtZXNzYWdlYCB8IGBmdW5jdGlvbl9jYWxsYCB8IGBmdW5jdGlvbl9jYWxsX291dHB1dGApIHRoaXNcbiAgICogZmllbGQgYWxsb3dzIHRoZSBjbGllbnQgdG8gYXNzaWduIHRoZSB1bmlxdWUgSUQgb2YgdGhlIGl0ZW0uIEl0IGlzIG5vdCByZXF1aXJlZFxuICAgKiBiZWNhdXNlIHRoZSBzZXJ2ZXIgd2lsbCBnZW5lcmF0ZSBvbmUgaWYgbm90IHByb3ZpZGVkLlxuICAgKlxuICAgKiBGb3IgYW4gaXRlbSBvZiB0eXBlIGBpdGVtX3JlZmVyZW5jZWAsIHRoaXMgZmllbGQgaXMgcmVxdWlyZWQgYW5kIGlzIGEgcmVmZXJlbmNlXG4gICAqIHRvIGFueSBpdGVtIHRoYXQgaGFzIHByZXZpb3VzbHkgZXhpc3RlZCBpbiB0aGUgY29udmVyc2F0aW9uLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgKGZvciBgZnVuY3Rpb25fY2FsbGAgaXRlbXMpLlxuICAgKi9cbiAgYXJndW1lbnRzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgKGZvciBgZnVuY3Rpb25fY2FsbGAgYW5kIGBmdW5jdGlvbl9jYWxsX291dHB1dGBcbiAgICogaXRlbXMpLiBJZiBwYXNzZWQgb24gYSBgZnVuY3Rpb25fY2FsbF9vdXRwdXRgIGl0ZW0sIHRoZSBzZXJ2ZXIgd2lsbCBjaGVjayB0aGF0IGFcbiAgICogYGZ1bmN0aW9uX2NhbGxgIGl0ZW0gd2l0aCB0aGUgc2FtZSBJRCBleGlzdHMgaW4gdGhlIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuICAgKi9cbiAgY2FsbF9pZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UsIGFwcGxpY2FibGUgZm9yIGBtZXNzYWdlYCBpdGVtcy5cbiAgICpcbiAgICogLSBNZXNzYWdlIGl0ZW1zIG9mIHJvbGUgYHN5c3RlbWAgc3VwcG9ydCBvbmx5IGBpbnB1dF90ZXh0YCBjb250ZW50XG4gICAqIC0gTWVzc2FnZSBpdGVtcyBvZiByb2xlIGB1c2VyYCBzdXBwb3J0IGBpbnB1dF90ZXh0YCBhbmQgYGlucHV0X2F1ZGlvYCBjb250ZW50XG4gICAqIC0gTWVzc2FnZSBpdGVtcyBvZiByb2xlIGBhc3Npc3RhbnRgIHN1cHBvcnQgYHRleHRgIGNvbnRlbnQuXG4gICAqL1xuICBjb250ZW50PzogQXJyYXk8Q29udmVyc2F0aW9uSXRlbUNvbnRlbnQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIChmb3IgYGZ1bmN0aW9uX2NhbGxgIGl0ZW1zKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoZSBBUEkgb2JqZWN0IGJlaW5nIHJldHVybmVkIC0gYWx3YXlzIGByZWFsdGltZS5pdGVtYC5cbiAgICovXG4gIG9iamVjdD86ICdyZWFsdGltZS5pdGVtJztcblxuICAvKipcbiAgICogVGhlIG91dHB1dCBvZiB0aGUgZnVuY3Rpb24gY2FsbCAoZm9yIGBmdW5jdGlvbl9jYWxsX291dHB1dGAgaXRlbXMpLlxuICAgKi9cbiAgb3V0cHV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBvZiB0aGUgbWVzc2FnZSBzZW5kZXIgKGB1c2VyYCwgYGFzc2lzdGFudGAsIGBzeXN0ZW1gKSwgb25seSBhcHBsaWNhYmxlXG4gICAqIGZvciBgbWVzc2FnZWAgaXRlbXMuXG4gICAqL1xuICByb2xlPzogJ3VzZXInIHwgJ2Fzc2lzdGFudCcgfCAnc3lzdGVtJztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgaXRlbSAoYGNvbXBsZXRlZGAsIGBpbmNvbXBsZXRlYCkuIFRoZXNlIGhhdmUgbm8gZWZmZWN0IG9uIHRoZVxuICAgKiBjb252ZXJzYXRpb24sIGJ1dCBhcmUgYWNjZXB0ZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlXG4gICAqIGBjb252ZXJzYXRpb24uaXRlbS5jcmVhdGVkYCBldmVudC5cbiAgICovXG4gIHN0YXR1cz86ICdjb21wbGV0ZWQnIHwgJ2luY29tcGxldGUnO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgaXRlbSAoYG1lc3NhZ2VgLCBgZnVuY3Rpb25fY2FsbGAsIGBmdW5jdGlvbl9jYWxsX291dHB1dGAsXG4gICAqIGBpdGVtX3JlZmVyZW5jZWApLlxuICAgKi9cbiAgdHlwZT86ICdtZXNzYWdlJyB8ICdmdW5jdGlvbl9jYWxsJyB8ICdmdW5jdGlvbl9jYWxsX291dHB1dCcgfCAnaXRlbV9yZWZlcmVuY2UnO1xufVxuXG4vKipcbiAqIFJldHVybmVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzLCB3aGljaCBjb3VsZCBiZSBhIGNsaWVudCBwcm9ibGVtIG9yIGEgc2VydmVyXG4gKiBwcm9ibGVtLiBNb3N0IGVycm9ycyBhcmUgcmVjb3ZlcmFibGUgYW5kIHRoZSBzZXNzaW9uIHdpbGwgc3RheSBvcGVuLCB3ZVxuICogcmVjb21tZW5kIHRvIGltcGxlbWVudG9ycyB0byBtb25pdG9yIGFuZCBsb2cgZXJyb3IgbWVzc2FnZXMgYnkgZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvckV2ZW50IHtcbiAgLyoqXG4gICAqIERldGFpbHMgb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgZXJyb3I6IEVycm9yRXZlbnQuRXJyb3I7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGBlcnJvcmAuXG4gICAqL1xuICB0eXBlOiAnZXJyb3InO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEVycm9yRXZlbnQge1xuICAvKipcbiAgICogRGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEVycm9yIHtcbiAgICAvKipcbiAgICAgKiBBIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuXG4gICAgICovXG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgZXJyb3IgKGUuZy4sIFwiaW52YWxpZF9yZXF1ZXN0X2Vycm9yXCIsIFwic2VydmVyX2Vycm9yXCIpLlxuICAgICAqL1xuICAgIHR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEVycm9yIGNvZGUsIGlmIGFueS5cbiAgICAgKi9cbiAgICBjb2RlPzogc3RyaW5nIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBldmVudF9pZCBvZiB0aGUgY2xpZW50IGV2ZW50IHRoYXQgY2F1c2VkIHRoZSBlcnJvciwgaWYgYXBwbGljYWJsZS5cbiAgICAgKi9cbiAgICBldmVudF9pZD86IHN0cmluZyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXIgcmVsYXRlZCB0byB0aGUgZXJyb3IsIGlmIGFueS5cbiAgICAgKi9cbiAgICBwYXJhbT86IHN0cmluZyB8IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBTZW5kIHRoaXMgZXZlbnQgdG8gYXBwZW5kIGF1ZGlvIGJ5dGVzIHRvIHRoZSBpbnB1dCBhdWRpbyBidWZmZXIuIFRoZSBhdWRpb1xuICogYnVmZmVyIGlzIHRlbXBvcmFyeSBzdG9yYWdlIHlvdSBjYW4gd3JpdGUgdG8gYW5kIGxhdGVyIGNvbW1pdC4gSW4gU2VydmVyIFZBRFxuICogbW9kZSwgdGhlIGF1ZGlvIGJ1ZmZlciBpcyB1c2VkIHRvIGRldGVjdCBzcGVlY2ggYW5kIHRoZSBzZXJ2ZXIgd2lsbCBkZWNpZGUgd2hlblxuICogdG8gY29tbWl0LiBXaGVuIFNlcnZlciBWQUQgaXMgZGlzYWJsZWQsIHlvdSBtdXN0IGNvbW1pdCB0aGUgYXVkaW8gYnVmZmVyXG4gKiBtYW51YWxseS5cbiAqXG4gKiBUaGUgY2xpZW50IG1heSBjaG9vc2UgaG93IG11Y2ggYXVkaW8gdG8gcGxhY2UgaW4gZWFjaCBldmVudCB1cCB0byBhIG1heGltdW0gb2ZcbiAqIDE1IE1pQiwgZm9yIGV4YW1wbGUgc3RyZWFtaW5nIHNtYWxsZXIgY2h1bmtzIGZyb20gdGhlIGNsaWVudCBtYXkgYWxsb3cgdGhlIFZBRFxuICogdG8gYmUgbW9yZSByZXNwb25zaXZlLiBVbmxpa2UgbWFkZSBvdGhlciBjbGllbnQgZXZlbnRzLCB0aGUgc2VydmVyIHdpbGwgbm90IHNlbmRcbiAqIGEgY29uZmlybWF0aW9uIHJlc3BvbnNlIHRvIHRoaXMgZXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRBdWRpb0J1ZmZlckFwcGVuZEV2ZW50IHtcbiAgLyoqXG4gICAqIEJhc2U2NC1lbmNvZGVkIGF1ZGlvIGJ5dGVzLiBUaGlzIG11c3QgYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkgdGhlXG4gICAqIGBpbnB1dF9hdWRpb19mb3JtYXRgIGZpZWxkIGluIHRoZSBzZXNzaW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBhdWRpbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgaW5wdXRfYXVkaW9fYnVmZmVyLmFwcGVuZGAuXG4gICAqL1xuICB0eXBlOiAnaW5wdXRfYXVkaW9fYnVmZmVyLmFwcGVuZCc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNsaWVudC1nZW5lcmF0ZWQgSUQgdXNlZCB0byBpZGVudGlmeSB0aGlzIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VuZCB0aGlzIGV2ZW50IHRvIGNsZWFyIHRoZSBhdWRpbyBieXRlcyBpbiB0aGUgYnVmZmVyLiBUaGUgc2VydmVyIHdpbGwgcmVzcG9uZFxuICogd2l0aCBhbiBgaW5wdXRfYXVkaW9fYnVmZmVyLmNsZWFyZWRgIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElucHV0QXVkaW9CdWZmZXJDbGVhckV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGBpbnB1dF9hdWRpb19idWZmZXIuY2xlYXJgLlxuICAgKi9cbiAgdHlwZTogJ2lucHV0X2F1ZGlvX2J1ZmZlci5jbGVhcic7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNsaWVudC1nZW5lcmF0ZWQgSUQgdXNlZCB0byBpZGVudGlmeSB0aGlzIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0dXJuZWQgd2hlbiB0aGUgaW5wdXQgYXVkaW8gYnVmZmVyIGlzIGNsZWFyZWQgYnkgdGhlIGNsaWVudCB3aXRoIGFcbiAqIGBpbnB1dF9hdWRpb19idWZmZXIuY2xlYXJgIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElucHV0QXVkaW9CdWZmZXJDbGVhcmVkRXZlbnQge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgc2VydmVyIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYGlucHV0X2F1ZGlvX2J1ZmZlci5jbGVhcmVkYC5cbiAgICovXG4gIHR5cGU6ICdpbnB1dF9hdWRpb19idWZmZXIuY2xlYXJlZCc7XG59XG5cbi8qKlxuICogU2VuZCB0aGlzIGV2ZW50IHRvIGNvbW1pdCB0aGUgdXNlciBpbnB1dCBhdWRpbyBidWZmZXIsIHdoaWNoIHdpbGwgY3JlYXRlIGEgbmV3XG4gKiB1c2VyIG1lc3NhZ2UgaXRlbSBpbiB0aGUgY29udmVyc2F0aW9uLiBUaGlzIGV2ZW50IHdpbGwgcHJvZHVjZSBhbiBlcnJvciBpZiB0aGVcbiAqIGlucHV0IGF1ZGlvIGJ1ZmZlciBpcyBlbXB0eS4gV2hlbiBpbiBTZXJ2ZXIgVkFEIG1vZGUsIHRoZSBjbGllbnQgZG9lcyBub3QgbmVlZFxuICogdG8gc2VuZCB0aGlzIGV2ZW50LCB0aGUgc2VydmVyIHdpbGwgY29tbWl0IHRoZSBhdWRpbyBidWZmZXIgYXV0b21hdGljYWxseS5cbiAqXG4gKiBDb21taXR0aW5nIHRoZSBpbnB1dCBhdWRpbyBidWZmZXIgd2lsbCB0cmlnZ2VyIGlucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24gKGlmXG4gKiBlbmFibGVkIGluIHNlc3Npb24gY29uZmlndXJhdGlvbiksIGJ1dCBpdCB3aWxsIG5vdCBjcmVhdGUgYSByZXNwb25zZSBmcm9tIHRoZVxuICogbW9kZWwuIFRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kIHdpdGggYW4gYGlucHV0X2F1ZGlvX2J1ZmZlci5jb21taXR0ZWRgIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElucHV0QXVkaW9CdWZmZXJDb21taXRFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgaW5wdXRfYXVkaW9fYnVmZmVyLmNvbW1pdGAuXG4gICAqL1xuICB0eXBlOiAnaW5wdXRfYXVkaW9fYnVmZmVyLmNvbW1pdCc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNsaWVudC1nZW5lcmF0ZWQgSUQgdXNlZCB0byBpZGVudGlmeSB0aGlzIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0dXJuZWQgd2hlbiBhbiBpbnB1dCBhdWRpbyBidWZmZXIgaXMgY29tbWl0dGVkLCBlaXRoZXIgYnkgdGhlIGNsaWVudCBvclxuICogYXV0b21hdGljYWxseSBpbiBzZXJ2ZXIgVkFEIG1vZGUuIFRoZSBgaXRlbV9pZGAgcHJvcGVydHkgaXMgdGhlIElEIG9mIHRoZSB1c2VyXG4gKiBtZXNzYWdlIGl0ZW0gdGhhdCB3aWxsIGJlIGNyZWF0ZWQsIHRodXMgYSBgY29udmVyc2F0aW9uLml0ZW0uY3JlYXRlZGAgZXZlbnQgd2lsbFxuICogYWxzbyBiZSBzZW50IHRvIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRBdWRpb0J1ZmZlckNvbW1pdHRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgdXNlciBtZXNzYWdlIGl0ZW0gdGhhdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcHJlY2VkaW5nIGl0ZW0gYWZ0ZXIgd2hpY2ggdGhlIG5ldyBpdGVtIHdpbGwgYmUgaW5zZXJ0ZWQuXG4gICAqL1xuICBwcmV2aW91c19pdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGBpbnB1dF9hdWRpb19idWZmZXIuY29tbWl0dGVkYC5cbiAgICovXG4gIHR5cGU6ICdpbnB1dF9hdWRpb19idWZmZXIuY29tbWl0dGVkJztcbn1cblxuLyoqXG4gKiBTZW50IGJ5IHRoZSBzZXJ2ZXIgd2hlbiBpbiBgc2VydmVyX3ZhZGAgbW9kZSB0byBpbmRpY2F0ZSB0aGF0IHNwZWVjaCBoYXMgYmVlblxuICogZGV0ZWN0ZWQgaW4gdGhlIGF1ZGlvIGJ1ZmZlci4gVGhpcyBjYW4gaGFwcGVuIGFueSB0aW1lIGF1ZGlvIGlzIGFkZGVkIHRvIHRoZVxuICogYnVmZmVyICh1bmxlc3Mgc3BlZWNoIGlzIGFscmVhZHkgZGV0ZWN0ZWQpLiBUaGUgY2xpZW50IG1heSB3YW50IHRvIHVzZSB0aGlzXG4gKiBldmVudCB0byBpbnRlcnJ1cHQgYXVkaW8gcGxheWJhY2sgb3IgcHJvdmlkZSB2aXN1YWwgZmVlZGJhY2sgdG8gdGhlIHVzZXIuXG4gKlxuICogVGhlIGNsaWVudCBzaG91bGQgZXhwZWN0IHRvIHJlY2VpdmUgYSBgaW5wdXRfYXVkaW9fYnVmZmVyLnNwZWVjaF9zdG9wcGVkYCBldmVudFxuICogd2hlbiBzcGVlY2ggc3RvcHMuIFRoZSBgaXRlbV9pZGAgcHJvcGVydHkgaXMgdGhlIElEIG9mIHRoZSB1c2VyIG1lc3NhZ2UgaXRlbVxuICogdGhhdCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBzcGVlY2ggc3RvcHMgYW5kIHdpbGwgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGVcbiAqIGBpbnB1dF9hdWRpb19idWZmZXIuc3BlZWNoX3N0b3BwZWRgIGV2ZW50ICh1bmxlc3MgdGhlIGNsaWVudCBtYW51YWxseSBjb21taXRzXG4gKiB0aGUgYXVkaW8gYnVmZmVyIGR1cmluZyBWQUQgYWN0aXZhdGlvbikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRBdWRpb0J1ZmZlclNwZWVjaFN0YXJ0ZWRFdmVudCB7XG4gIC8qKlxuICAgKiBNaWxsaXNlY29uZHMgZnJvbSB0aGUgc3RhcnQgb2YgYWxsIGF1ZGlvIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciBkdXJpbmcgdGhlXG4gICAqIHNlc3Npb24gd2hlbiBzcGVlY2ggd2FzIGZpcnN0IGRldGVjdGVkLiBUaGlzIHdpbGwgY29ycmVzcG9uZCB0byB0aGUgYmVnaW5uaW5nIG9mXG4gICAqIGF1ZGlvIHNlbnQgdG8gdGhlIG1vZGVsLCBhbmQgdGh1cyBpbmNsdWRlcyB0aGUgYHByZWZpeF9wYWRkaW5nX21zYCBjb25maWd1cmVkIGluXG4gICAqIHRoZSBTZXNzaW9uLlxuICAgKi9cbiAgYXVkaW9fc3RhcnRfbXM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgc2VydmVyIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSB1c2VyIG1lc3NhZ2UgaXRlbSB0aGF0IHdpbGwgYmUgY3JlYXRlZCB3aGVuIHNwZWVjaCBzdG9wcy5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYGlucHV0X2F1ZGlvX2J1ZmZlci5zcGVlY2hfc3RhcnRlZGAuXG4gICAqL1xuICB0eXBlOiAnaW5wdXRfYXVkaW9fYnVmZmVyLnNwZWVjaF9zdGFydGVkJztcbn1cblxuLyoqXG4gKiBSZXR1cm5lZCBpbiBgc2VydmVyX3ZhZGAgbW9kZSB3aGVuIHRoZSBzZXJ2ZXIgZGV0ZWN0cyB0aGUgZW5kIG9mIHNwZWVjaCBpbiB0aGVcbiAqIGF1ZGlvIGJ1ZmZlci4gVGhlIHNlcnZlciB3aWxsIGFsc28gc2VuZCBhbiBgY29udmVyc2F0aW9uLml0ZW0uY3JlYXRlZGAgZXZlbnRcbiAqIHdpdGggdGhlIHVzZXIgbWVzc2FnZSBpdGVtIHRoYXQgaXMgY3JlYXRlZCBmcm9tIHRoZSBhdWRpbyBidWZmZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRBdWRpb0J1ZmZlclNwZWVjaFN0b3BwZWRFdmVudCB7XG4gIC8qKlxuICAgKiBNaWxsaXNlY29uZHMgc2luY2UgdGhlIHNlc3Npb24gc3RhcnRlZCB3aGVuIHNwZWVjaCBzdG9wcGVkLiBUaGlzIHdpbGwgY29ycmVzcG9uZFxuICAgKiB0byB0aGUgZW5kIG9mIGF1ZGlvIHNlbnQgdG8gdGhlIG1vZGVsLCBhbmQgdGh1cyBpbmNsdWRlcyB0aGVcbiAgICogYG1pbl9zaWxlbmNlX2R1cmF0aW9uX21zYCBjb25maWd1cmVkIGluIHRoZSBTZXNzaW9uLlxuICAgKi9cbiAgYXVkaW9fZW5kX21zOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgdXNlciBtZXNzYWdlIGl0ZW0gdGhhdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGBpbnB1dF9hdWRpb19idWZmZXIuc3BlZWNoX3N0b3BwZWRgLlxuICAgKi9cbiAgdHlwZTogJ2lucHV0X2F1ZGlvX2J1ZmZlci5zcGVlY2hfc3RvcHBlZCc7XG59XG5cbi8qKlxuICogRW1pdHRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgUmVzcG9uc2UgdG8gaW5kaWNhdGUgdGhlIHVwZGF0ZWQgcmF0ZSBsaW1pdHMuIFdoZW5cbiAqIGEgUmVzcG9uc2UgaXMgY3JlYXRlZCBzb21lIHRva2VucyB3aWxsIGJlIFwicmVzZXJ2ZWRcIiBmb3IgdGhlIG91dHB1dCB0b2tlbnMsIHRoZVxuICogcmF0ZSBsaW1pdHMgc2hvd24gaGVyZSByZWZsZWN0IHRoYXQgcmVzZXJ2YXRpb24sIHdoaWNoIGlzIHRoZW4gYWRqdXN0ZWRcbiAqIGFjY29yZGluZ2x5IG9uY2UgdGhlIFJlc3BvbnNlIGlzIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXRzVXBkYXRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcmF0ZSBsaW1pdCBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHJhdGVfbGltaXRzOiBBcnJheTxSYXRlTGltaXRzVXBkYXRlZEV2ZW50LlJhdGVMaW1pdD47XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGByYXRlX2xpbWl0cy51cGRhdGVkYC5cbiAgICovXG4gIHR5cGU6ICdyYXRlX2xpbWl0cy51cGRhdGVkJztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSYXRlTGltaXRzVXBkYXRlZEV2ZW50IHtcbiAgZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXQge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgZm9yIHRoZSByYXRlIGxpbWl0LlxuICAgICAqL1xuICAgIGxpbWl0PzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHJhdGUgbGltaXQgKGByZXF1ZXN0c2AsIGB0b2tlbnNgKS5cbiAgICAgKi9cbiAgICBuYW1lPzogJ3JlcXVlc3RzJyB8ICd0b2tlbnMnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbWFpbmluZyB2YWx1ZSBiZWZvcmUgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAgICovXG4gICAgcmVtYWluaW5nPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2Vjb25kcyB1bnRpbCB0aGUgcmF0ZSBsaW1pdCByZXNldHMuXG4gICAgICovXG4gICAgcmVzZXRfc2Vjb25kcz86IG51bWJlcjtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVhbHRpbWUgY2xpZW50IGV2ZW50LlxuICovXG5leHBvcnQgdHlwZSBSZWFsdGltZUNsaWVudEV2ZW50ID1cbiAgfCBDb252ZXJzYXRpb25JdGVtQ3JlYXRlRXZlbnRcbiAgfCBDb252ZXJzYXRpb25JdGVtRGVsZXRlRXZlbnRcbiAgfCBDb252ZXJzYXRpb25JdGVtUmV0cmlldmVFdmVudFxuICB8IENvbnZlcnNhdGlvbkl0ZW1UcnVuY2F0ZUV2ZW50XG4gIHwgSW5wdXRBdWRpb0J1ZmZlckFwcGVuZEV2ZW50XG4gIHwgSW5wdXRBdWRpb0J1ZmZlckNsZWFyRXZlbnRcbiAgfCBJbnB1dEF1ZGlvQnVmZmVyQ29tbWl0RXZlbnRcbiAgfCBSZXNwb25zZUNhbmNlbEV2ZW50XG4gIHwgUmVzcG9uc2VDcmVhdGVFdmVudFxuICB8IFNlc3Npb25VcGRhdGVFdmVudFxuICB8IFRyYW5zY3JpcHRpb25TZXNzaW9uVXBkYXRlO1xuXG4vKipcbiAqIFRoZSByZXNwb25zZSByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZVJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoaWNoIGNvbnZlcnNhdGlvbiB0aGUgcmVzcG9uc2UgaXMgYWRkZWQgdG8sIGRldGVybWluZWQgYnkgdGhlIGBjb252ZXJzYXRpb25gXG4gICAqIGZpZWxkIGluIHRoZSBgcmVzcG9uc2UuY3JlYXRlYCBldmVudC4gSWYgYGF1dG9gLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBhZGRlZCB0b1xuICAgKiB0aGUgZGVmYXVsdCBjb252ZXJzYXRpb24gYW5kIHRoZSB2YWx1ZSBvZiBgY29udmVyc2F0aW9uX2lkYCB3aWxsIGJlIGFuIGlkIGxpa2VcbiAgICogYGNvbnZfMTIzNGAuIElmIGBub25lYCwgdGhlIHJlc3BvbnNlIHdpbGwgbm90IGJlIGFkZGVkIHRvIGFueSBjb252ZXJzYXRpb24gYW5kXG4gICAqIHRoZSB2YWx1ZSBvZiBgY29udmVyc2F0aW9uX2lkYCB3aWxsIGJlIGBudWxsYC4gSWYgcmVzcG9uc2VzIGFyZSBiZWluZyB0cmlnZ2VyZWRcbiAgICogYnkgc2VydmVyIFZBRCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGRlZmF1bHQgY29udmVyc2F0aW9uLCB0aHVzIHRoZVxuICAgKiBgY29udmVyc2F0aW9uX2lkYCB3aWxsIGJlIGFuIGlkIGxpa2UgYGNvbnZfMTIzNGAuXG4gICAqL1xuICBjb252ZXJzYXRpb25faWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIG91dHB1dCB0b2tlbnMgZm9yIGEgc2luZ2xlIGFzc2lzdGFudCByZXNwb25zZSwgaW5jbHVzaXZlIG9mXG4gICAqIHRvb2wgY2FsbHMsIHRoYXQgd2FzIHVzZWQgaW4gdGhpcyByZXNwb25zZS5cbiAgICovXG4gIG1heF9vdXRwdXRfdG9rZW5zPzogbnVtYmVyIHwgJ2luZic7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAqXG4gICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBtZXRhZGF0YT86IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgbW9kYWxpdGllcyB0aGUgbW9kZWwgdXNlZCB0byByZXNwb25kLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGVcbiAgICogbW9kYWxpdGllcywgdGhlIG1vZGVsIHdpbGwgcGljayBvbmUsIGZvciBleGFtcGxlIGlmIGBtb2RhbGl0aWVzYCBpc1xuICAgKiBgW1widGV4dFwiLCBcImF1ZGlvXCJdYCwgdGhlIG1vZGVsIGNvdWxkIGJlIHJlc3BvbmRpbmcgaW4gZWl0aGVyIHRleHQgb3IgYXVkaW8uXG4gICAqL1xuICBtb2RhbGl0aWVzPzogQXJyYXk8J3RleHQnIHwgJ2F1ZGlvJz47XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSwgbXVzdCBiZSBgcmVhbHRpbWUucmVzcG9uc2VgLlxuICAgKi9cbiAgb2JqZWN0PzogJ3JlYWx0aW1lLnJlc3BvbnNlJztcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygb3V0cHV0IGl0ZW1zIGdlbmVyYXRlZCBieSB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICBvdXRwdXQ/OiBBcnJheTxDb252ZXJzYXRpb25JdGVtPjtcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCBvZiBvdXRwdXQgYXVkaW8uIE9wdGlvbnMgYXJlIGBwY20xNmAsIGBnNzExX3VsYXdgLCBvciBgZzcxMV9hbGF3YC5cbiAgICovXG4gIG91dHB1dF9hdWRpb19mb3JtYXQ/OiAncGNtMTYnIHwgJ2c3MTFfdWxhdycgfCAnZzcxMV9hbGF3JztcblxuICAvKipcbiAgICogVGhlIGZpbmFsIHN0YXR1cyBvZiB0aGUgcmVzcG9uc2UgKGBjb21wbGV0ZWRgLCBgY2FuY2VsbGVkYCwgYGZhaWxlZGAsIG9yXG4gICAqIGBpbmNvbXBsZXRlYCkuXG4gICAqL1xuICBzdGF0dXM/OiAnY29tcGxldGVkJyB8ICdjYW5jZWxsZWQnIHwgJ2ZhaWxlZCcgfCAnaW5jb21wbGV0ZSc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZGV0YWlscyBhYm91dCB0aGUgc3RhdHVzLlxuICAgKi9cbiAgc3RhdHVzX2RldGFpbHM/OiBSZWFsdGltZVJlc3BvbnNlU3RhdHVzO1xuXG4gIC8qKlxuICAgKiBTYW1wbGluZyB0ZW1wZXJhdHVyZSBmb3IgdGhlIG1vZGVsLCBsaW1pdGVkIHRvIFswLjYsIDEuMl0uIERlZmF1bHRzIHRvIDAuOC5cbiAgICovXG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBVc2FnZSBzdGF0aXN0aWNzIGZvciB0aGUgUmVzcG9uc2UsIHRoaXMgd2lsbCBjb3JyZXNwb25kIHRvIGJpbGxpbmcuIEEgUmVhbHRpbWVcbiAgICogQVBJIHNlc3Npb24gd2lsbCBtYWludGFpbiBhIGNvbnZlcnNhdGlvbiBjb250ZXh0IGFuZCBhcHBlbmQgbmV3IEl0ZW1zIHRvIHRoZVxuICAgKiBDb252ZXJzYXRpb24sIHRodXMgb3V0cHV0IGZyb20gcHJldmlvdXMgdHVybnMgKHRleHQgYW5kIGF1ZGlvIHRva2Vucykgd2lsbFxuICAgKiBiZWNvbWUgdGhlIGlucHV0IGZvciBsYXRlciB0dXJucy5cbiAgICovXG4gIHVzYWdlPzogUmVhbHRpbWVSZXNwb25zZVVzYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgdm9pY2UgdGhlIG1vZGVsIHVzZWQgdG8gcmVzcG9uZC4gQ3VycmVudCB2b2ljZSBvcHRpb25zIGFyZSBgYWxsb3lgLCBgYXNoYCxcbiAgICogYGJhbGxhZGAsIGBjb3JhbGAsIGBlY2hvYCBgc2FnZWAsIGBzaGltbWVyYCBhbmQgYHZlcnNlYC5cbiAgICovXG4gIHZvaWNlPzogJ2FsbG95JyB8ICdhc2gnIHwgJ2JhbGxhZCcgfCAnY29yYWwnIHwgJ2VjaG8nIHwgJ3NhZ2UnIHwgJ3NoaW1tZXInIHwgJ3ZlcnNlJztcbn1cblxuLyoqXG4gKiBBZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQgdGhlIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZVJlc3BvbnNlU3RhdHVzIHtcbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yIHRoYXQgY2F1c2VkIHRoZSByZXNwb25zZSB0byBmYWlsLCBwb3B1bGF0ZWQgd2hlbiB0aGVcbiAgICogYHN0YXR1c2AgaXMgYGZhaWxlZGAuXG4gICAqL1xuICBlcnJvcj86IFJlYWx0aW1lUmVzcG9uc2VTdGF0dXMuRXJyb3I7XG5cbiAgLyoqXG4gICAqIFRoZSByZWFzb24gdGhlIFJlc3BvbnNlIGRpZCBub3QgY29tcGxldGUuIEZvciBhIGBjYW5jZWxsZWRgIFJlc3BvbnNlLCBvbmUgb2ZcbiAgICogYHR1cm5fZGV0ZWN0ZWRgICh0aGUgc2VydmVyIFZBRCBkZXRlY3RlZCBhIG5ldyBzdGFydCBvZiBzcGVlY2gpIG9yXG4gICAqIGBjbGllbnRfY2FuY2VsbGVkYCAodGhlIGNsaWVudCBzZW50IGEgY2FuY2VsIGV2ZW50KS4gRm9yIGFuIGBpbmNvbXBsZXRlYFxuICAgKiBSZXNwb25zZSwgb25lIG9mIGBtYXhfb3V0cHV0X3Rva2Vuc2Agb3IgYGNvbnRlbnRfZmlsdGVyYCAodGhlIHNlcnZlci1zaWRlIHNhZmV0eVxuICAgKiBmaWx0ZXIgYWN0aXZhdGVkIGFuZCBjdXQgb2ZmIHRoZSByZXNwb25zZSkuXG4gICAqL1xuICByZWFzb24/OiAndHVybl9kZXRlY3RlZCcgfCAnY2xpZW50X2NhbmNlbGxlZCcgfCAnbWF4X291dHB1dF90b2tlbnMnIHwgJ2NvbnRlbnRfZmlsdGVyJztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBjYXVzZWQgdGhlIHJlc3BvbnNlIHRvIGZhaWwsIGNvcnJlc3BvbmRpbmcgd2l0aCB0aGVcbiAgICogYHN0YXR1c2AgZmllbGQgKGBjb21wbGV0ZWRgLCBgY2FuY2VsbGVkYCwgYGluY29tcGxldGVgLCBgZmFpbGVkYCkuXG4gICAqL1xuICB0eXBlPzogJ2NvbXBsZXRlZCcgfCAnY2FuY2VsbGVkJyB8ICdpbmNvbXBsZXRlJyB8ICdmYWlsZWQnO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFJlYWx0aW1lUmVzcG9uc2VTdGF0dXMge1xuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IgdGhhdCBjYXVzZWQgdGhlIHJlc3BvbnNlIHRvIGZhaWwsIHBvcHVsYXRlZCB3aGVuIHRoZVxuICAgKiBgc3RhdHVzYCBpcyBgZmFpbGVkYC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRXJyb3Ige1xuICAgIC8qKlxuICAgICAqIEVycm9yIGNvZGUsIGlmIGFueS5cbiAgICAgKi9cbiAgICBjb2RlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgZXJyb3IuXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIFVzYWdlIHN0YXRpc3RpY3MgZm9yIHRoZSBSZXNwb25zZSwgdGhpcyB3aWxsIGNvcnJlc3BvbmQgdG8gYmlsbGluZy4gQSBSZWFsdGltZVxuICogQVBJIHNlc3Npb24gd2lsbCBtYWludGFpbiBhIGNvbnZlcnNhdGlvbiBjb250ZXh0IGFuZCBhcHBlbmQgbmV3IEl0ZW1zIHRvIHRoZVxuICogQ29udmVyc2F0aW9uLCB0aHVzIG91dHB1dCBmcm9tIHByZXZpb3VzIHR1cm5zICh0ZXh0IGFuZCBhdWRpbyB0b2tlbnMpIHdpbGxcbiAqIGJlY29tZSB0aGUgaW5wdXQgZm9yIGxhdGVyIHR1cm5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWx0aW1lUmVzcG9uc2VVc2FnZSB7XG4gIC8qKlxuICAgKiBEZXRhaWxzIGFib3V0IHRoZSBpbnB1dCB0b2tlbnMgdXNlZCBpbiB0aGUgUmVzcG9uc2UuXG4gICAqL1xuICBpbnB1dF90b2tlbl9kZXRhaWxzPzogUmVhbHRpbWVSZXNwb25zZVVzYWdlLklucHV0VG9rZW5EZXRhaWxzO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGlucHV0IHRva2VucyB1c2VkIGluIHRoZSBSZXNwb25zZSwgaW5jbHVkaW5nIHRleHQgYW5kIGF1ZGlvXG4gICAqIHRva2Vucy5cbiAgICovXG4gIGlucHV0X3Rva2Vucz86IG51bWJlcjtcblxuICAvKipcbiAgICogRGV0YWlscyBhYm91dCB0aGUgb3V0cHV0IHRva2VucyB1c2VkIGluIHRoZSBSZXNwb25zZS5cbiAgICovXG4gIG91dHB1dF90b2tlbl9kZXRhaWxzPzogUmVhbHRpbWVSZXNwb25zZVVzYWdlLk91dHB1dFRva2VuRGV0YWlscztcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBvdXRwdXQgdG9rZW5zIHNlbnQgaW4gdGhlIFJlc3BvbnNlLCBpbmNsdWRpbmcgdGV4dCBhbmQgYXVkaW9cbiAgICogdG9rZW5zLlxuICAgKi9cbiAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiB0b2tlbnMgaW4gdGhlIFJlc3BvbnNlIGluY2x1ZGluZyBpbnB1dCBhbmQgb3V0cHV0IHRleHQgYW5kXG4gICAqIGF1ZGlvIHRva2Vucy5cbiAgICovXG4gIHRvdGFsX3Rva2Vucz86IG51bWJlcjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSZWFsdGltZVJlc3BvbnNlVXNhZ2Uge1xuICAvKipcbiAgICogRGV0YWlscyBhYm91dCB0aGUgaW5wdXQgdG9rZW5zIHVzZWQgaW4gdGhlIFJlc3BvbnNlLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dFRva2VuRGV0YWlscyB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBhdWRpbyB0b2tlbnMgdXNlZCBpbiB0aGUgUmVzcG9uc2UuXG4gICAgICovXG4gICAgYXVkaW9fdG9rZW5zPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBjYWNoZWQgdG9rZW5zIHVzZWQgaW4gdGhlIFJlc3BvbnNlLlxuICAgICAqL1xuICAgIGNhY2hlZF90b2tlbnM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHRleHQgdG9rZW5zIHVzZWQgaW4gdGhlIFJlc3BvbnNlLlxuICAgICAqL1xuICAgIHRleHRfdG9rZW5zPzogbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGFpbHMgYWJvdXQgdGhlIG91dHB1dCB0b2tlbnMgdXNlZCBpbiB0aGUgUmVzcG9uc2UuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE91dHB1dFRva2VuRGV0YWlscyB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBhdWRpbyB0b2tlbnMgdXNlZCBpbiB0aGUgUmVzcG9uc2UuXG4gICAgICovXG4gICAgYXVkaW9fdG9rZW5zPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiB0ZXh0IHRva2VucyB1c2VkIGluIHRoZSBSZXNwb25zZS5cbiAgICAgKi9cbiAgICB0ZXh0X3Rva2Vucz86IG51bWJlcjtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVhbHRpbWUgc2VydmVyIGV2ZW50LlxuICovXG5leHBvcnQgdHlwZSBSZWFsdGltZVNlcnZlckV2ZW50ID1cbiAgfCBDb252ZXJzYXRpb25DcmVhdGVkRXZlbnRcbiAgfCBDb252ZXJzYXRpb25JdGVtQ3JlYXRlZEV2ZW50XG4gIHwgQ29udmVyc2F0aW9uSXRlbURlbGV0ZWRFdmVudFxuICB8IENvbnZlcnNhdGlvbkl0ZW1JbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbkNvbXBsZXRlZEV2ZW50XG4gIHwgQ29udmVyc2F0aW9uSXRlbUlucHV0QXVkaW9UcmFuc2NyaXB0aW9uRGVsdGFFdmVudFxuICB8IENvbnZlcnNhdGlvbkl0ZW1JbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbkZhaWxlZEV2ZW50XG4gIHwgUmVhbHRpbWVTZXJ2ZXJFdmVudC5Db252ZXJzYXRpb25JdGVtUmV0cmlldmVkXG4gIHwgQ29udmVyc2F0aW9uSXRlbVRydW5jYXRlZEV2ZW50XG4gIHwgRXJyb3JFdmVudFxuICB8IElucHV0QXVkaW9CdWZmZXJDbGVhcmVkRXZlbnRcbiAgfCBJbnB1dEF1ZGlvQnVmZmVyQ29tbWl0dGVkRXZlbnRcbiAgfCBJbnB1dEF1ZGlvQnVmZmVyU3BlZWNoU3RhcnRlZEV2ZW50XG4gIHwgSW5wdXRBdWRpb0J1ZmZlclNwZWVjaFN0b3BwZWRFdmVudFxuICB8IFJhdGVMaW1pdHNVcGRhdGVkRXZlbnRcbiAgfCBSZXNwb25zZUF1ZGlvRGVsdGFFdmVudFxuICB8IFJlc3BvbnNlQXVkaW9Eb25lRXZlbnRcbiAgfCBSZXNwb25zZUF1ZGlvVHJhbnNjcmlwdERlbHRhRXZlbnRcbiAgfCBSZXNwb25zZUF1ZGlvVHJhbnNjcmlwdERvbmVFdmVudFxuICB8IFJlc3BvbnNlQ29udGVudFBhcnRBZGRlZEV2ZW50XG4gIHwgUmVzcG9uc2VDb250ZW50UGFydERvbmVFdmVudFxuICB8IFJlc3BvbnNlQ3JlYXRlZEV2ZW50XG4gIHwgUmVzcG9uc2VEb25lRXZlbnRcbiAgfCBSZXNwb25zZUZ1bmN0aW9uQ2FsbEFyZ3VtZW50c0RlbHRhRXZlbnRcbiAgfCBSZXNwb25zZUZ1bmN0aW9uQ2FsbEFyZ3VtZW50c0RvbmVFdmVudFxuICB8IFJlc3BvbnNlT3V0cHV0SXRlbUFkZGVkRXZlbnRcbiAgfCBSZXNwb25zZU91dHB1dEl0ZW1Eb25lRXZlbnRcbiAgfCBSZXNwb25zZVRleHREZWx0YUV2ZW50XG4gIHwgUmVzcG9uc2VUZXh0RG9uZUV2ZW50XG4gIHwgU2Vzc2lvbkNyZWF0ZWRFdmVudFxuICB8IFNlc3Npb25VcGRhdGVkRXZlbnRcbiAgfCBUcmFuc2NyaXB0aW9uU2Vzc2lvblVwZGF0ZWRFdmVudDtcblxuZXhwb3J0IG5hbWVzcGFjZSBSZWFsdGltZVNlcnZlckV2ZW50IHtcbiAgLyoqXG4gICAqIFJldHVybmVkIHdoZW4gYSBjb252ZXJzYXRpb24gaXRlbSBpcyByZXRyaWV2ZWQgd2l0aFxuICAgKiBgY29udmVyc2F0aW9uLml0ZW0ucmV0cmlldmVgLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25JdGVtUmV0cmlldmVkIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzZXJ2ZXIgZXZlbnQuXG4gICAgICovXG4gICAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBpdGVtIHRvIGFkZCB0byB0aGUgY29udmVyc2F0aW9uLlxuICAgICAqL1xuICAgIGl0ZW06IFJlYWx0aW1lQVBJLkNvbnZlcnNhdGlvbkl0ZW07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgY29udmVyc2F0aW9uLml0ZW0ucmV0cmlldmVkYC5cbiAgICAgKi9cbiAgICB0eXBlOiAnY29udmVyc2F0aW9uLml0ZW0ucmV0cmlldmVkJztcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybmVkIHdoZW4gdGhlIG1vZGVsLWdlbmVyYXRlZCBhdWRpbyBpcyB1cGRhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlQXVkaW9EZWx0YUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgY29udGVudCBwYXJ0IGluIHRoZSBpdGVtJ3MgY29udGVudCBhcnJheS5cbiAgICovXG4gIGNvbnRlbnRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogQmFzZTY0LWVuY29kZWQgYXVkaW8gZGF0YSBkZWx0YS5cbiAgICovXG4gIGRlbHRhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgaXRlbS5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbSBpbiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByZXNwb25zZS5cbiAgICovXG4gIHJlc3BvbnNlX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGByZXNwb25zZS5hdWRpby5kZWx0YWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuYXVkaW8uZGVsdGEnO1xufVxuXG4vKipcbiAqIFJldHVybmVkIHdoZW4gdGhlIG1vZGVsLWdlbmVyYXRlZCBhdWRpbyBpcyBkb25lLiBBbHNvIGVtaXR0ZWQgd2hlbiBhIFJlc3BvbnNlIGlzXG4gKiBpbnRlcnJ1cHRlZCwgaW5jb21wbGV0ZSwgb3IgY2FuY2VsbGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlQXVkaW9Eb25lRXZlbnQge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBjb250ZW50IHBhcnQgaW4gdGhlIGl0ZW0ncyBjb250ZW50IGFycmF5LlxuICAgKi9cbiAgY29udGVudF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzZXJ2ZXIgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gaW4gdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICByZXNwb25zZV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgcmVzcG9uc2UuYXVkaW8uZG9uZWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuYXVkaW8uZG9uZSc7XG59XG5cbi8qKlxuICogUmV0dXJuZWQgd2hlbiB0aGUgbW9kZWwtZ2VuZXJhdGVkIHRyYW5zY3JpcHRpb24gb2YgYXVkaW8gb3V0cHV0IGlzIHVwZGF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VBdWRpb1RyYW5zY3JpcHREZWx0YUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgY29udGVudCBwYXJ0IGluIHRoZSBpdGVtJ3MgY29udGVudCBhcnJheS5cbiAgICovXG4gIGNvbnRlbnRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRyYW5zY3JpcHQgZGVsdGEuXG4gICAqL1xuICBkZWx0YTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzZXJ2ZXIgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gaW4gdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICByZXNwb25zZV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgcmVzcG9uc2UuYXVkaW9fdHJhbnNjcmlwdC5kZWx0YWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuYXVkaW9fdHJhbnNjcmlwdC5kZWx0YSc7XG59XG5cbi8qKlxuICogUmV0dXJuZWQgd2hlbiB0aGUgbW9kZWwtZ2VuZXJhdGVkIHRyYW5zY3JpcHRpb24gb2YgYXVkaW8gb3V0cHV0IGlzIGRvbmVcbiAqIHN0cmVhbWluZy4gQWxzbyBlbWl0dGVkIHdoZW4gYSBSZXNwb25zZSBpcyBpbnRlcnJ1cHRlZCwgaW5jb21wbGV0ZSwgb3JcbiAqIGNhbmNlbGxlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUF1ZGlvVHJhbnNjcmlwdERvbmVFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbnRlbnQgcGFydCBpbiB0aGUgaXRlbSdzIGNvbnRlbnQgYXJyYXkuXG4gICAqL1xuICBjb250ZW50X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgaXRlbS5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbSBpbiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByZXNwb25zZS5cbiAgICovXG4gIHJlc3BvbnNlX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmaW5hbCB0cmFuc2NyaXB0IG9mIHRoZSBhdWRpby5cbiAgICovXG4gIHRyYW5zY3JpcHQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYHJlc3BvbnNlLmF1ZGlvX3RyYW5zY3JpcHQuZG9uZWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuYXVkaW9fdHJhbnNjcmlwdC5kb25lJztcbn1cblxuLyoqXG4gKiBTZW5kIHRoaXMgZXZlbnQgdG8gY2FuY2VsIGFuIGluLXByb2dyZXNzIHJlc3BvbnNlLiBUaGUgc2VydmVyIHdpbGwgcmVzcG9uZCB3aXRoXG4gKiBhIGByZXNwb25zZS5jYW5jZWxsZWRgIGV2ZW50IG9yIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIHJlc3BvbnNlIHRvIGNhbmNlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNhbmNlbEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGByZXNwb25zZS5jYW5jZWxgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLmNhbmNlbCc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNsaWVudC1nZW5lcmF0ZWQgSUQgdXNlZCB0byBpZGVudGlmeSB0aGlzIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lmaWMgcmVzcG9uc2UgSUQgdG8gY2FuY2VsIC0gaWYgbm90IHByb3ZpZGVkLCB3aWxsIGNhbmNlbCBhbiBpbi1wcm9ncmVzc1xuICAgKiByZXNwb25zZSBpbiB0aGUgZGVmYXVsdCBjb252ZXJzYXRpb24uXG4gICAqL1xuICByZXNwb25zZV9pZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIGEgbmV3IGNvbnRlbnQgcGFydCBpcyBhZGRlZCB0byBhbiBhc3Npc3RhbnQgbWVzc2FnZSBpdGVtIGR1cmluZ1xuICogcmVzcG9uc2UgZ2VuZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNvbnRlbnRQYXJ0QWRkZWRFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbnRlbnQgcGFydCBpbiB0aGUgaXRlbSdzIGNvbnRlbnQgYXJyYXkuXG4gICAqL1xuICBjb250ZW50X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgaXRlbSB0byB3aGljaCB0aGUgY29udGVudCBwYXJ0IHdhcyBhZGRlZC5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbSBpbiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgcGFydCB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIHBhcnQ6IFJlc3BvbnNlQ29udGVudFBhcnRBZGRlZEV2ZW50LlBhcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICByZXNwb25zZV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgcmVzcG9uc2UuY29udGVudF9wYXJ0LmFkZGVkYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5jb250ZW50X3BhcnQuYWRkZWQnO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFJlc3BvbnNlQ29udGVudFBhcnRBZGRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHBhcnQgdGhhdCB3YXMgYWRkZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFBhcnQge1xuICAgIC8qKlxuICAgICAqIEJhc2U2NC1lbmNvZGVkIGF1ZGlvIGRhdGEgKGlmIHR5cGUgaXMgXCJhdWRpb1wiKS5cbiAgICAgKi9cbiAgICBhdWRpbz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IGNvbnRlbnQgKGlmIHR5cGUgaXMgXCJ0ZXh0XCIpLlxuICAgICAqL1xuICAgIHRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHJhbnNjcmlwdCBvZiB0aGUgYXVkaW8gKGlmIHR5cGUgaXMgXCJhdWRpb1wiKS5cbiAgICAgKi9cbiAgICB0cmFuc2NyaXB0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSAoXCJ0ZXh0XCIsIFwiYXVkaW9cIikuXG4gICAgICovXG4gICAgdHlwZT86ICd0ZXh0JyB8ICdhdWRpbyc7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIGEgY29udGVudCBwYXJ0IGlzIGRvbmUgc3RyZWFtaW5nIGluIGFuIGFzc2lzdGFudCBtZXNzYWdlIGl0ZW0uXG4gKiBBbHNvIGVtaXR0ZWQgd2hlbiBhIFJlc3BvbnNlIGlzIGludGVycnVwdGVkLCBpbmNvbXBsZXRlLCBvciBjYW5jZWxsZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VDb250ZW50UGFydERvbmVFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbnRlbnQgcGFydCBpbiB0aGUgaXRlbSdzIGNvbnRlbnQgYXJyYXkuXG4gICAqL1xuICBjb250ZW50X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgaXRlbS5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbSBpbiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgcGFydCB0aGF0IGlzIGRvbmUuXG4gICAqL1xuICBwYXJ0OiBSZXNwb25zZUNvbnRlbnRQYXJ0RG9uZUV2ZW50LlBhcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICByZXNwb25zZV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgcmVzcG9uc2UuY29udGVudF9wYXJ0LmRvbmVgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLmNvbnRlbnRfcGFydC5kb25lJztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSZXNwb25zZUNvbnRlbnRQYXJ0RG9uZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHBhcnQgdGhhdCBpcyBkb25lLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBQYXJ0IHtcbiAgICAvKipcbiAgICAgKiBCYXNlNjQtZW5jb2RlZCBhdWRpbyBkYXRhIChpZiB0eXBlIGlzIFwiYXVkaW9cIikuXG4gICAgICovXG4gICAgYXVkaW8/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBjb250ZW50IChpZiB0eXBlIGlzIFwidGV4dFwiKS5cbiAgICAgKi9cbiAgICB0ZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRyYW5zY3JpcHQgb2YgdGhlIGF1ZGlvIChpZiB0eXBlIGlzIFwiYXVkaW9cIikuXG4gICAgICovXG4gICAgdHJhbnNjcmlwdD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgKFwidGV4dFwiLCBcImF1ZGlvXCIpLlxuICAgICAqL1xuICAgIHR5cGU/OiAndGV4dCcgfCAnYXVkaW8nO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBldmVudCBpbnN0cnVjdHMgdGhlIHNlcnZlciB0byBjcmVhdGUgYSBSZXNwb25zZSwgd2hpY2ggbWVhbnMgdHJpZ2dlcmluZ1xuICogbW9kZWwgaW5mZXJlbmNlLiBXaGVuIGluIFNlcnZlciBWQUQgbW9kZSwgdGhlIHNlcnZlciB3aWxsIGNyZWF0ZSBSZXNwb25zZXNcbiAqIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogQSBSZXNwb25zZSB3aWxsIGluY2x1ZGUgYXQgbGVhc3Qgb25lIEl0ZW0sIGFuZCBtYXkgaGF2ZSB0d28sIGluIHdoaWNoIGNhc2UgdGhlXG4gKiBzZWNvbmQgd2lsbCBiZSBhIGZ1bmN0aW9uIGNhbGwuIFRoZXNlIEl0ZW1zIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGNvbnZlcnNhdGlvblxuICogaGlzdG9yeS5cbiAqXG4gKiBUaGUgc2VydmVyIHdpbGwgcmVzcG9uZCB3aXRoIGEgYHJlc3BvbnNlLmNyZWF0ZWRgIGV2ZW50LCBldmVudHMgZm9yIEl0ZW1zIGFuZFxuICogY29udGVudCBjcmVhdGVkLCBhbmQgZmluYWxseSBhIGByZXNwb25zZS5kb25lYCBldmVudCB0byBpbmRpY2F0ZSB0aGUgUmVzcG9uc2UgaXNcbiAqIGNvbXBsZXRlLlxuICpcbiAqIFRoZSBgcmVzcG9uc2UuY3JlYXRlYCBldmVudCBpbmNsdWRlcyBpbmZlcmVuY2UgY29uZmlndXJhdGlvbiBsaWtlXG4gKiBgaW5zdHJ1Y3Rpb25zYCwgYW5kIGB0ZW1wZXJhdHVyZWAuIFRoZXNlIGZpZWxkcyB3aWxsIG92ZXJyaWRlIHRoZSBTZXNzaW9uJ3NcbiAqIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgUmVzcG9uc2Ugb25seS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNyZWF0ZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGByZXNwb25zZS5jcmVhdGVgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLmNyZWF0ZSc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNsaWVudC1nZW5lcmF0ZWQgSUQgdXNlZCB0byBpZGVudGlmeSB0aGlzIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBSZWFsdGltZSByZXNwb25zZSB3aXRoIHRoZXNlIHBhcmFtZXRlcnNcbiAgICovXG4gIHJlc3BvbnNlPzogUmVzcG9uc2VDcmVhdGVFdmVudC5SZXNwb25zZTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSZXNwb25zZUNyZWF0ZUV2ZW50IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBSZWFsdGltZSByZXNwb25zZSB3aXRoIHRoZXNlIHBhcmFtZXRlcnNcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoaWNoIGNvbnZlcnNhdGlvbiB0aGUgcmVzcG9uc2UgaXMgYWRkZWQgdG8uIEN1cnJlbnRseSBzdXBwb3J0cyBgYXV0b2BcbiAgICAgKiBhbmQgYG5vbmVgLCB3aXRoIGBhdXRvYCBhcyB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlIGBhdXRvYCB2YWx1ZSBtZWFucyB0aGF0IHRoZVxuICAgICAqIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBkZWZhdWx0IGNvbnZlcnNhdGlvbi4gU2V0IHRoaXMgdG9cbiAgICAgKiBgbm9uZWAgdG8gY3JlYXRlIGFuIG91dC1vZi1iYW5kIHJlc3BvbnNlIHdoaWNoIHdpbGwgbm90IGFkZCBpdGVtcyB0byBkZWZhdWx0XG4gICAgICogY29udmVyc2F0aW9uLlxuICAgICAqL1xuICAgIGNvbnZlcnNhdGlvbj86IChzdHJpbmcgJiB7fSkgfCAnYXV0bycgfCAnbm9uZSc7XG5cbiAgICAvKipcbiAgICAgKiBJbnB1dCBpdGVtcyB0byBpbmNsdWRlIGluIHRoZSBwcm9tcHQgZm9yIHRoZSBtb2RlbC4gVXNpbmcgdGhpcyBmaWVsZCBjcmVhdGVzIGFcbiAgICAgKiBuZXcgY29udGV4dCBmb3IgdGhpcyBSZXNwb25zZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IGNvbnZlcnNhdGlvbi4gQW5cbiAgICAgKiBlbXB0eSBhcnJheSBgW11gIHdpbGwgY2xlYXIgdGhlIGNvbnRleHQgZm9yIHRoaXMgUmVzcG9uc2UuIE5vdGUgdGhhdCB0aGlzIGNhblxuICAgICAqIGluY2x1ZGUgcmVmZXJlbmNlcyB0byBpdGVtcyBmcm9tIHRoZSBkZWZhdWx0IGNvbnZlcnNhdGlvbi5cbiAgICAgKi9cbiAgICBpbnB1dD86IEFycmF5PFJlYWx0aW1lQVBJLkNvbnZlcnNhdGlvbkl0ZW1XaXRoUmVmZXJlbmNlPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHN5c3RlbSBpbnN0cnVjdGlvbnMgKGkuZS4gc3lzdGVtIG1lc3NhZ2UpIHByZXBlbmRlZCB0byBtb2RlbCBjYWxscy5cbiAgICAgKiBUaGlzIGZpZWxkIGFsbG93cyB0aGUgY2xpZW50IHRvIGd1aWRlIHRoZSBtb2RlbCBvbiBkZXNpcmVkIHJlc3BvbnNlcy4gVGhlIG1vZGVsXG4gICAgICogY2FuIGJlIGluc3RydWN0ZWQgb24gcmVzcG9uc2UgY29udGVudCBhbmQgZm9ybWF0LCAoZS5nLiBcImJlIGV4dHJlbWVseSBzdWNjaW5jdFwiLFxuICAgICAqIFwiYWN0IGZyaWVuZGx5XCIsIFwiaGVyZSBhcmUgZXhhbXBsZXMgb2YgZ29vZCByZXNwb25zZXNcIikgYW5kIG9uIGF1ZGlvIGJlaGF2aW9yXG4gICAgICogKGUuZy4gXCJ0YWxrIHF1aWNrbHlcIiwgXCJpbmplY3QgZW1vdGlvbiBpbnRvIHlvdXIgdm9pY2VcIiwgXCJsYXVnaCBmcmVxdWVudGx5XCIpLiBUaGVcbiAgICAgKiBpbnN0cnVjdGlvbnMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGZvbGxvd2VkIGJ5IHRoZSBtb2RlbCwgYnV0IHRoZXkgcHJvdmlkZVxuICAgICAqIGd1aWRhbmNlIHRvIHRoZSBtb2RlbCBvbiB0aGUgZGVzaXJlZCBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGUgc2VydmVyIHNldHMgZGVmYXVsdCBpbnN0cnVjdGlvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIGlmIHRoaXMgZmllbGRcbiAgICAgKiBpcyBub3Qgc2V0IGFuZCBhcmUgdmlzaWJsZSBpbiB0aGUgYHNlc3Npb24uY3JlYXRlZGAgZXZlbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZVxuICAgICAqIHNlc3Npb24uXG4gICAgICovXG4gICAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSBudW1iZXIgb2Ygb3V0cHV0IHRva2VucyBmb3IgYSBzaW5nbGUgYXNzaXN0YW50IHJlc3BvbnNlLCBpbmNsdXNpdmUgb2ZcbiAgICAgKiB0b29sIGNhbGxzLiBQcm92aWRlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCA0MDk2IHRvIGxpbWl0IG91dHB1dCB0b2tlbnMsIG9yXG4gICAgICogYGluZmAgZm9yIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSB0b2tlbnMgZm9yIGEgZ2l2ZW4gbW9kZWwuIERlZmF1bHRzIHRvIGBpbmZgLlxuICAgICAqL1xuICAgIG1heF9yZXNwb25zZV9vdXRwdXRfdG9rZW5zPzogbnVtYmVyIHwgJ2luZic7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgICAqIHF1ZXJ5aW5nIGZvciBvYmplY3RzIHZpYSBBUEkgb3IgdGhlIGRhc2hib2FyZC5cbiAgICAgKlxuICAgICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAgICogYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTIgY2hhcmFjdGVycy5cbiAgICAgKi9cbiAgICBtZXRhZGF0YT86IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2V0IG9mIG1vZGFsaXRpZXMgdGhlIG1vZGVsIGNhbiByZXNwb25kIHdpdGguIFRvIGRpc2FibGUgYXVkaW8sIHNldCB0aGlzIHRvXG4gICAgICogW1widGV4dFwiXS5cbiAgICAgKi9cbiAgICBtb2RhbGl0aWVzPzogQXJyYXk8J3RleHQnIHwgJ2F1ZGlvJz47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybWF0IG9mIG91dHB1dCBhdWRpby4gT3B0aW9ucyBhcmUgYHBjbTE2YCwgYGc3MTFfdWxhd2AsIG9yIGBnNzExX2FsYXdgLlxuICAgICAqL1xuICAgIG91dHB1dF9hdWRpb19mb3JtYXQ/OiAncGNtMTYnIHwgJ2c3MTFfdWxhdycgfCAnZzcxMV9hbGF3JztcblxuICAgIC8qKlxuICAgICAqIFNhbXBsaW5nIHRlbXBlcmF0dXJlIGZvciB0aGUgbW9kZWwsIGxpbWl0ZWQgdG8gWzAuNiwgMS4yXS4gRGVmYXVsdHMgdG8gMC44LlxuICAgICAqL1xuICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogSG93IHRoZSBtb2RlbCBjaG9vc2VzIHRvb2xzLiBPcHRpb25zIGFyZSBgYXV0b2AsIGBub25lYCwgYHJlcXVpcmVkYCwgb3Igc3BlY2lmeVxuICAgICAqIGEgZnVuY3Rpb24sIGxpa2UgYHtcInR5cGVcIjogXCJmdW5jdGlvblwiLCBcImZ1bmN0aW9uXCI6IHtcIm5hbWVcIjogXCJteV9mdW5jdGlvblwifX1gLlxuICAgICAqL1xuICAgIHRvb2xfY2hvaWNlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVG9vbHMgKGZ1bmN0aW9ucykgYXZhaWxhYmxlIHRvIHRoZSBtb2RlbC5cbiAgICAgKi9cbiAgICB0b29scz86IEFycmF5PFJlc3BvbnNlLlRvb2w+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZvaWNlIHRoZSBtb2RlbCB1c2VzIHRvIHJlc3BvbmQuIFZvaWNlIGNhbm5vdCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgc2Vzc2lvblxuICAgICAqIG9uY2UgdGhlIG1vZGVsIGhhcyByZXNwb25kZWQgd2l0aCBhdWRpbyBhdCBsZWFzdCBvbmNlLiBDdXJyZW50IHZvaWNlIG9wdGlvbnMgYXJlXG4gICAgICogYGFsbG95YCwgYGFzaGAsIGBiYWxsYWRgLCBgY29yYWxgLCBgZWNob2AgYHNhZ2VgLCBgc2hpbW1lcmAgYW5kIGB2ZXJzZWAuXG4gICAgICovXG4gICAgdm9pY2U/OiAnYWxsb3knIHwgJ2FzaCcgfCAnYmFsbGFkJyB8ICdjb3JhbCcgfCAnZWNobycgfCAnc2FnZScgfCAnc2hpbW1lcicgfCAndmVyc2UnO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBSZXNwb25zZSB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBUb29sIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGd1aWRhbmNlIG9uIHdoZW4gYW5kIGhvdyB0byBjYWxsIGl0LFxuICAgICAgICogYW5kIGd1aWRhbmNlIGFib3V0IHdoYXQgdG8gdGVsbCB0aGUgdXNlciB3aGVuIGNhbGxpbmcgKGlmIGFueXRoaW5nKS5cbiAgICAgICAqL1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgICAgICovXG4gICAgICBuYW1lPzogc3RyaW5nO1xuXG4gICAgICAvKipcbiAgICAgICAqIFBhcmFtZXRlcnMgb2YgdGhlIGZ1bmN0aW9uIGluIEpTT04gU2NoZW1hLlxuICAgICAgICovXG4gICAgICBwYXJhbWV0ZXJzPzogdW5rbm93bjtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdHlwZSBvZiB0aGUgdG9vbCwgaS5lLiBgZnVuY3Rpb25gLlxuICAgICAgICovXG4gICAgICB0eXBlPzogJ2Z1bmN0aW9uJztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIGEgbmV3IFJlc3BvbnNlIGlzIGNyZWF0ZWQuIFRoZSBmaXJzdCBldmVudCBvZiByZXNwb25zZSBjcmVhdGlvbixcbiAqIHdoZXJlIHRoZSByZXNwb25zZSBpcyBpbiBhbiBpbml0aWFsIHN0YXRlIG9mIGBpbl9wcm9ncmVzc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VDcmVhdGVkRXZlbnQge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgc2VydmVyIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIHJlc291cmNlLlxuICAgKi9cbiAgcmVzcG9uc2U6IFJlYWx0aW1lUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGByZXNwb25zZS5jcmVhdGVkYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5jcmVhdGVkJztcbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIGEgUmVzcG9uc2UgaXMgZG9uZSBzdHJlYW1pbmcuIEFsd2F5cyBlbWl0dGVkLCBubyBtYXR0ZXIgdGhlIGZpbmFsXG4gKiBzdGF0ZS4gVGhlIFJlc3BvbnNlIG9iamVjdCBpbmNsdWRlZCBpbiB0aGUgYHJlc3BvbnNlLmRvbmVgIGV2ZW50IHdpbGwgaW5jbHVkZVxuICogYWxsIG91dHB1dCBJdGVtcyBpbiB0aGUgUmVzcG9uc2UgYnV0IHdpbGwgb21pdCB0aGUgcmF3IGF1ZGlvIGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VEb25lRXZlbnQge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgc2VydmVyIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIHJlc291cmNlLlxuICAgKi9cbiAgcmVzcG9uc2U6IFJlYWx0aW1lUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGByZXNwb25zZS5kb25lYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5kb25lJztcbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIHRoZSBtb2RlbC1nZW5lcmF0ZWQgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMgYXJlIHVwZGF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VGdW5jdGlvbkNhbGxBcmd1bWVudHNEZWx0YUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgZnVuY3Rpb24gY2FsbC5cbiAgICovXG4gIGNhbGxfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyBkZWx0YSBhcyBhIEpTT04gc3RyaW5nLlxuICAgKi9cbiAgZGVsdGE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgc2VydmVyIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBmdW5jdGlvbiBjYWxsIGl0ZW0uXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gaW4gdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICByZXNwb25zZV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgcmVzcG9uc2UuZnVuY3Rpb25fY2FsbF9hcmd1bWVudHMuZGVsdGFgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRlbHRhJztcbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIHRoZSBtb2RlbC1nZW5lcmF0ZWQgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMgYXJlIGRvbmUgc3RyZWFtaW5nLlxuICogQWxzbyBlbWl0dGVkIHdoZW4gYSBSZXNwb25zZSBpcyBpbnRlcnJ1cHRlZCwgaW5jb21wbGV0ZSwgb3IgY2FuY2VsbGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRnVuY3Rpb25DYWxsQXJndW1lbnRzRG9uZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBmaW5hbCBhcmd1bWVudHMgYXMgYSBKU09OIHN0cmluZy5cbiAgICovXG4gIGFyZ3VtZW50czogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuXG4gICAqL1xuICBjYWxsX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgZnVuY3Rpb24gY2FsbCBpdGVtLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIGluIHRoZSByZXNwb25zZS5cbiAgICovXG4gIG91dHB1dF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgcmVzcG9uc2VfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYHJlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRvbmVgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRvbmUnO1xufVxuXG4vKipcbiAqIFJldHVybmVkIHdoZW4gYSBuZXcgSXRlbSBpcyBjcmVhdGVkIGR1cmluZyBSZXNwb25zZSBnZW5lcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlT3V0cHV0SXRlbUFkZGVkRXZlbnQge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgc2VydmVyIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGl0ZW0gdG8gYWRkIHRvIHRoZSBjb252ZXJzYXRpb24uXG4gICAqL1xuICBpdGVtOiBDb252ZXJzYXRpb25JdGVtO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIGluIHRoZSBSZXNwb25zZS5cbiAgICovXG4gIG91dHB1dF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFJlc3BvbnNlIHRvIHdoaWNoIHRoZSBpdGVtIGJlbG9uZ3MuXG4gICAqL1xuICByZXNwb25zZV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgcmVzcG9uc2Uub3V0cHV0X2l0ZW0uYWRkZWRgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLm91dHB1dF9pdGVtLmFkZGVkJztcbn1cblxuLyoqXG4gKiBSZXR1cm5lZCB3aGVuIGFuIEl0ZW0gaXMgZG9uZSBzdHJlYW1pbmcuIEFsc28gZW1pdHRlZCB3aGVuIGEgUmVzcG9uc2UgaXNcbiAqIGludGVycnVwdGVkLCBpbmNvbXBsZXRlLCBvciBjYW5jZWxsZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VPdXRwdXRJdGVtRG9uZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpdGVtIHRvIGFkZCB0byB0aGUgY29udmVyc2F0aW9uLlxuICAgKi9cbiAgaXRlbTogQ29udmVyc2F0aW9uSXRlbTtcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbSBpbiB0aGUgUmVzcG9uc2UuXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBSZXNwb25zZSB0byB3aGljaCB0aGUgaXRlbSBiZWxvbmdzLlxuICAgKi9cbiAgcmVzcG9uc2VfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYHJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmUnO1xufVxuXG4vKipcbiAqIFJldHVybmVkIHdoZW4gdGhlIHRleHQgdmFsdWUgb2YgYSBcInRleHRcIiBjb250ZW50IHBhcnQgaXMgdXBkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVRleHREZWx0YUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgY29udGVudCBwYXJ0IGluIHRoZSBpdGVtJ3MgY29udGVudCBhcnJheS5cbiAgICovXG4gIGNvbnRlbnRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRleHQgZGVsdGEuXG4gICAqL1xuICBkZWx0YTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzZXJ2ZXIgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gaW4gdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICByZXNwb25zZV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgcmVzcG9uc2UudGV4dC5kZWx0YWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UudGV4dC5kZWx0YSc7XG59XG5cbi8qKlxuICogUmV0dXJuZWQgd2hlbiB0aGUgdGV4dCB2YWx1ZSBvZiBhIFwidGV4dFwiIGNvbnRlbnQgcGFydCBpcyBkb25lIHN0cmVhbWluZy4gQWxzb1xuICogZW1pdHRlZCB3aGVuIGEgUmVzcG9uc2UgaXMgaW50ZXJydXB0ZWQsIGluY29tcGxldGUsIG9yIGNhbmNlbGxlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVRleHREb25lRXZlbnQge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBjb250ZW50IHBhcnQgaW4gdGhlIGl0ZW0ncyBjb250ZW50IGFycmF5LlxuICAgKi9cbiAgY29udGVudF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzZXJ2ZXIgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gaW4gdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcmVzcG9uc2UuXG4gICAqL1xuICByZXNwb25zZV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmluYWwgdGV4dCBjb250ZW50LlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgcmVzcG9uc2UudGV4dC5kb25lYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS50ZXh0LmRvbmUnO1xufVxuXG4vKipcbiAqIFJldHVybmVkIHdoZW4gYSBTZXNzaW9uIGlzIGNyZWF0ZWQuIEVtaXR0ZWQgYXV0b21hdGljYWxseSB3aGVuIGEgbmV3IGNvbm5lY3Rpb25cbiAqIGlzIGVzdGFibGlzaGVkIGFzIHRoZSBmaXJzdCBzZXJ2ZXIgZXZlbnQuIFRoaXMgZXZlbnQgd2lsbCBjb250YWluIHRoZSBkZWZhdWx0XG4gKiBTZXNzaW9uIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkNyZWF0ZWRFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzZXJ2ZXIgZXZlbnQuXG4gICAqL1xuICBldmVudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWFsdGltZSBzZXNzaW9uIG9iamVjdCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgc2Vzc2lvbjogU2Vzc2lvbnNBUEkuU2Vzc2lvbjtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYHNlc3Npb24uY3JlYXRlZGAuXG4gICAqL1xuICB0eXBlOiAnc2Vzc2lvbi5jcmVhdGVkJztcbn1cblxuLyoqXG4gKiBTZW5kIHRoaXMgZXZlbnQgdG8gdXBkYXRlIHRoZSBzZXNzaW9uXHUyMDE5cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIFRoZSBjbGllbnQgbWF5XG4gKiBzZW5kIHRoaXMgZXZlbnQgYXQgYW55IHRpbWUgdG8gdXBkYXRlIGFueSBmaWVsZCwgZXhjZXB0IGZvciBgdm9pY2VgLiBIb3dldmVyLFxuICogbm90ZSB0aGF0IG9uY2UgYSBzZXNzaW9uIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggYSBwYXJ0aWN1bGFyIGBtb2RlbGAsIGl0XG4gKiBjYW5cdTIwMTl0IGJlIGNoYW5nZWQgdG8gYW5vdGhlciBtb2RlbCB1c2luZyBgc2Vzc2lvbi51cGRhdGVgLlxuICpcbiAqIFdoZW4gdGhlIHNlcnZlciByZWNlaXZlcyBhIGBzZXNzaW9uLnVwZGF0ZWAsIGl0IHdpbGwgcmVzcG9uZCB3aXRoIGFcbiAqIGBzZXNzaW9uLnVwZGF0ZWRgIGV2ZW50IHNob3dpbmcgdGhlIGZ1bGwsIGVmZmVjdGl2ZSBjb25maWd1cmF0aW9uLiBPbmx5IHRoZVxuICogZmllbGRzIHRoYXQgYXJlIHByZXNlbnQgYXJlIHVwZGF0ZWQuIFRvIGNsZWFyIGEgZmllbGQgbGlrZSBgaW5zdHJ1Y3Rpb25zYCwgcGFzc1xuICogYW4gZW1wdHkgc3RyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25VcGRhdGVFdmVudCB7XG4gIC8qKlxuICAgKiBSZWFsdGltZSBzZXNzaW9uIG9iamVjdCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgc2Vzc2lvbjogU2Vzc2lvblVwZGF0ZUV2ZW50LlNlc3Npb247XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGBzZXNzaW9uLnVwZGF0ZWAuXG4gICAqL1xuICB0eXBlOiAnc2Vzc2lvbi51cGRhdGUnO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjbGllbnQtZ2VuZXJhdGVkIElEIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlc3Npb25VcGRhdGVFdmVudCB7XG4gIC8qKlxuICAgKiBSZWFsdGltZSBzZXNzaW9uIG9iamVjdCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybWF0IG9mIGlucHV0IGF1ZGlvLiBPcHRpb25zIGFyZSBgcGNtMTZgLCBgZzcxMV91bGF3YCwgb3IgYGc3MTFfYWxhd2AuIEZvclxuICAgICAqIGBwY20xNmAsIGlucHV0IGF1ZGlvIG11c3QgYmUgMTYtYml0IFBDTSBhdCBhIDI0a0h6IHNhbXBsZSByYXRlLCBzaW5nbGUgY2hhbm5lbFxuICAgICAqIChtb25vKSwgYW5kIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci5cbiAgICAgKi9cbiAgICBpbnB1dF9hdWRpb19mb3JtYXQ/OiAncGNtMTYnIHwgJ2c3MTFfdWxhdycgfCAnZzcxMV9hbGF3JztcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIG5vaXNlIHJlZHVjdGlvbi4gVGhpcyBjYW4gYmUgc2V0IHRvIGBudWxsYCB0byB0dXJuXG4gICAgICogb2ZmLiBOb2lzZSByZWR1Y3Rpb24gZmlsdGVycyBhdWRpbyBhZGRlZCB0byB0aGUgaW5wdXQgYXVkaW8gYnVmZmVyIGJlZm9yZSBpdCBpc1xuICAgICAqIHNlbnQgdG8gVkFEIGFuZCB0aGUgbW9kZWwuIEZpbHRlcmluZyB0aGUgYXVkaW8gY2FuIGltcHJvdmUgVkFEIGFuZCB0dXJuXG4gICAgICogZGV0ZWN0aW9uIGFjY3VyYWN5IChyZWR1Y2luZyBmYWxzZSBwb3NpdGl2ZXMpIGFuZCBtb2RlbCBwZXJmb3JtYW5jZSBieSBpbXByb3ZpbmdcbiAgICAgKiBwZXJjZXB0aW9uIG9mIHRoZSBpbnB1dCBhdWRpby5cbiAgICAgKi9cbiAgICBpbnB1dF9hdWRpb19ub2lzZV9yZWR1Y3Rpb24/OiBTZXNzaW9uLklucHV0QXVkaW9Ob2lzZVJlZHVjdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24sIGRlZmF1bHRzIHRvIG9mZiBhbmQgY2FuIGJlIHNldCB0b1xuICAgICAqIGBudWxsYCB0byB0dXJuIG9mZiBvbmNlIG9uLiBJbnB1dCBhdWRpbyB0cmFuc2NyaXB0aW9uIGlzIG5vdCBuYXRpdmUgdG8gdGhlXG4gICAgICogbW9kZWwsIHNpbmNlIHRoZSBtb2RlbCBjb25zdW1lcyBhdWRpbyBkaXJlY3RseS4gVHJhbnNjcmlwdGlvbiBydW5zXG4gICAgICogYXN5bmNocm9ub3VzbHkgdGhyb3VnaFxuICAgICAqIFt0aGUgL2F1ZGlvL3RyYW5zY3JpcHRpb25zIGVuZHBvaW50XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2F1ZGlvL2NyZWF0ZVRyYW5zY3JpcHRpb24pXG4gICAgICogYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzIGd1aWRhbmNlIG9mIGlucHV0IGF1ZGlvIGNvbnRlbnQgcmF0aGVyIHRoYW4gcHJlY2lzZWx5XG4gICAgICogd2hhdCB0aGUgbW9kZWwgaGVhcmQuIFRoZSBjbGllbnQgY2FuIG9wdGlvbmFsbHkgc2V0IHRoZSBsYW5ndWFnZSBhbmQgcHJvbXB0IGZvclxuICAgICAqIHRyYW5zY3JpcHRpb24sIHRoZXNlIG9mZmVyIGFkZGl0aW9uYWwgZ3VpZGFuY2UgdG8gdGhlIHRyYW5zY3JpcHRpb24gc2VydmljZS5cbiAgICAgKi9cbiAgICBpbnB1dF9hdWRpb190cmFuc2NyaXB0aW9uPzogU2Vzc2lvbi5JbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHN5c3RlbSBpbnN0cnVjdGlvbnMgKGkuZS4gc3lzdGVtIG1lc3NhZ2UpIHByZXBlbmRlZCB0byBtb2RlbCBjYWxscy5cbiAgICAgKiBUaGlzIGZpZWxkIGFsbG93cyB0aGUgY2xpZW50IHRvIGd1aWRlIHRoZSBtb2RlbCBvbiBkZXNpcmVkIHJlc3BvbnNlcy4gVGhlIG1vZGVsXG4gICAgICogY2FuIGJlIGluc3RydWN0ZWQgb24gcmVzcG9uc2UgY29udGVudCBhbmQgZm9ybWF0LCAoZS5nLiBcImJlIGV4dHJlbWVseSBzdWNjaW5jdFwiLFxuICAgICAqIFwiYWN0IGZyaWVuZGx5XCIsIFwiaGVyZSBhcmUgZXhhbXBsZXMgb2YgZ29vZCByZXNwb25zZXNcIikgYW5kIG9uIGF1ZGlvIGJlaGF2aW9yXG4gICAgICogKGUuZy4gXCJ0YWxrIHF1aWNrbHlcIiwgXCJpbmplY3QgZW1vdGlvbiBpbnRvIHlvdXIgdm9pY2VcIiwgXCJsYXVnaCBmcmVxdWVudGx5XCIpLiBUaGVcbiAgICAgKiBpbnN0cnVjdGlvbnMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGZvbGxvd2VkIGJ5IHRoZSBtb2RlbCwgYnV0IHRoZXkgcHJvdmlkZVxuICAgICAqIGd1aWRhbmNlIHRvIHRoZSBtb2RlbCBvbiB0aGUgZGVzaXJlZCBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGUgc2VydmVyIHNldHMgZGVmYXVsdCBpbnN0cnVjdGlvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIGlmIHRoaXMgZmllbGRcbiAgICAgKiBpcyBub3Qgc2V0IGFuZCBhcmUgdmlzaWJsZSBpbiB0aGUgYHNlc3Npb24uY3JlYXRlZGAgZXZlbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZVxuICAgICAqIHNlc3Npb24uXG4gICAgICovXG4gICAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSBudW1iZXIgb2Ygb3V0cHV0IHRva2VucyBmb3IgYSBzaW5nbGUgYXNzaXN0YW50IHJlc3BvbnNlLCBpbmNsdXNpdmUgb2ZcbiAgICAgKiB0b29sIGNhbGxzLiBQcm92aWRlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCA0MDk2IHRvIGxpbWl0IG91dHB1dCB0b2tlbnMsIG9yXG4gICAgICogYGluZmAgZm9yIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSB0b2tlbnMgZm9yIGEgZ2l2ZW4gbW9kZWwuIERlZmF1bHRzIHRvIGBpbmZgLlxuICAgICAqL1xuICAgIG1heF9yZXNwb25zZV9vdXRwdXRfdG9rZW5zPzogbnVtYmVyIHwgJ2luZic7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2V0IG9mIG1vZGFsaXRpZXMgdGhlIG1vZGVsIGNhbiByZXNwb25kIHdpdGguIFRvIGRpc2FibGUgYXVkaW8sIHNldCB0aGlzIHRvXG4gICAgICogW1widGV4dFwiXS5cbiAgICAgKi9cbiAgICBtb2RhbGl0aWVzPzogQXJyYXk8J3RleHQnIHwgJ2F1ZGlvJz47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVhbHRpbWUgbW9kZWwgdXNlZCBmb3IgdGhpcyBzZXNzaW9uLlxuICAgICAqL1xuICAgIG1vZGVsPzpcbiAgICAgIHwgJ2dwdC00by1yZWFsdGltZS1wcmV2aWV3J1xuICAgICAgfCAnZ3B0LTRvLXJlYWx0aW1lLXByZXZpZXctMjAyNC0xMC0wMSdcbiAgICAgIHwgJ2dwdC00by1yZWFsdGltZS1wcmV2aWV3LTIwMjQtMTItMTcnXG4gICAgICB8ICdncHQtNG8tbWluaS1yZWFsdGltZS1wcmV2aWV3J1xuICAgICAgfCAnZ3B0LTRvLW1pbmktcmVhbHRpbWUtcHJldmlldy0yMDI0LTEyLTE3JztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtYXQgb2Ygb3V0cHV0IGF1ZGlvLiBPcHRpb25zIGFyZSBgcGNtMTZgLCBgZzcxMV91bGF3YCwgb3IgYGc3MTFfYWxhd2AuXG4gICAgICogRm9yIGBwY20xNmAsIG91dHB1dCBhdWRpbyBpcyBzYW1wbGVkIGF0IGEgcmF0ZSBvZiAyNGtIei5cbiAgICAgKi9cbiAgICBvdXRwdXRfYXVkaW9fZm9ybWF0PzogJ3BjbTE2JyB8ICdnNzExX3VsYXcnIHwgJ2c3MTFfYWxhdyc7XG5cbiAgICAvKipcbiAgICAgKiBTYW1wbGluZyB0ZW1wZXJhdHVyZSBmb3IgdGhlIG1vZGVsLCBsaW1pdGVkIHRvIFswLjYsIDEuMl0uIEZvciBhdWRpbyBtb2RlbHMgYVxuICAgICAqIHRlbXBlcmF0dXJlIG9mIDAuOCBpcyBoaWdobHkgcmVjb21tZW5kZWQgZm9yIGJlc3QgcGVyZm9ybWFuY2UuXG4gICAgICovXG4gICAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBIb3cgdGhlIG1vZGVsIGNob29zZXMgdG9vbHMuIE9wdGlvbnMgYXJlIGBhdXRvYCwgYG5vbmVgLCBgcmVxdWlyZWRgLCBvciBzcGVjaWZ5XG4gICAgICogYSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICB0b29sX2Nob2ljZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRvb2xzIChmdW5jdGlvbnMpIGF2YWlsYWJsZSB0byB0aGUgbW9kZWwuXG4gICAgICovXG4gICAgdG9vbHM/OiBBcnJheTxTZXNzaW9uLlRvb2w+O1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgdHVybiBkZXRlY3Rpb24sIGV0aGVyIFNlcnZlciBWQUQgb3IgU2VtYW50aWMgVkFELiBUaGlzIGNhbiBiZVxuICAgICAqIHNldCB0byBgbnVsbGAgdG8gdHVybiBvZmYsIGluIHdoaWNoIGNhc2UgdGhlIGNsaWVudCBtdXN0IG1hbnVhbGx5IHRyaWdnZXIgbW9kZWxcbiAgICAgKiByZXNwb25zZS4gU2VydmVyIFZBRCBtZWFucyB0aGF0IHRoZSBtb2RlbCB3aWxsIGRldGVjdCB0aGUgc3RhcnQgYW5kIGVuZCBvZlxuICAgICAqIHNwZWVjaCBiYXNlZCBvbiBhdWRpbyB2b2x1bWUgYW5kIHJlc3BvbmQgYXQgdGhlIGVuZCBvZiB1c2VyIHNwZWVjaC4gU2VtYW50aWMgVkFEXG4gICAgICogaXMgbW9yZSBhZHZhbmNlZCBhbmQgdXNlcyBhIHR1cm4gZGV0ZWN0aW9uIG1vZGVsIChpbiBjb25qdWN0aW9uIHdpdGggVkFEKSB0b1xuICAgICAqIHNlbWFudGljYWxseSBlc3RpbWF0ZSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBmaW5pc2hlZCBzcGVha2luZywgdGhlbiBkeW5hbWljYWxseVxuICAgICAqIHNldHMgYSB0aW1lb3V0IGJhc2VkIG9uIHRoaXMgcHJvYmFiaWxpdHkuIEZvciBleGFtcGxlLCBpZiB1c2VyIGF1ZGlvIHRyYWlscyBvZmZcbiAgICAgKiB3aXRoIFwidWhobVwiLCB0aGUgbW9kZWwgd2lsbCBzY29yZSBhIGxvdyBwcm9iYWJpbGl0eSBvZiB0dXJuIGVuZCBhbmQgd2FpdCBsb25nZXJcbiAgICAgKiBmb3IgdGhlIHVzZXIgdG8gY29udGludWUgc3BlYWtpbmcuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgbW9yZSBuYXR1cmFsXG4gICAgICogY29udmVyc2F0aW9ucywgYnV0IG1heSBoYXZlIGEgaGlnaGVyIGxhdGVuY3kuXG4gICAgICovXG4gICAgdHVybl9kZXRlY3Rpb24/OiBTZXNzaW9uLlR1cm5EZXRlY3Rpb247XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdm9pY2UgdGhlIG1vZGVsIHVzZXMgdG8gcmVzcG9uZC4gVm9pY2UgY2Fubm90IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBzZXNzaW9uXG4gICAgICogb25jZSB0aGUgbW9kZWwgaGFzIHJlc3BvbmRlZCB3aXRoIGF1ZGlvIGF0IGxlYXN0IG9uY2UuIEN1cnJlbnQgdm9pY2Ugb3B0aW9ucyBhcmVcbiAgICAgKiBgYWxsb3lgLCBgYXNoYCwgYGJhbGxhZGAsIGBjb3JhbGAsIGBlY2hvYCBgc2FnZWAsIGBzaGltbWVyYCBhbmQgYHZlcnNlYC5cbiAgICAgKi9cbiAgICB2b2ljZT86ICdhbGxveScgfCAnYXNoJyB8ICdiYWxsYWQnIHwgJ2NvcmFsJyB8ICdlY2hvJyB8ICdzYWdlJyB8ICdzaGltbWVyJyB8ICd2ZXJzZSc7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIFNlc3Npb24ge1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIG5vaXNlIHJlZHVjdGlvbi4gVGhpcyBjYW4gYmUgc2V0IHRvIGBudWxsYCB0byB0dXJuXG4gICAgICogb2ZmLiBOb2lzZSByZWR1Y3Rpb24gZmlsdGVycyBhdWRpbyBhZGRlZCB0byB0aGUgaW5wdXQgYXVkaW8gYnVmZmVyIGJlZm9yZSBpdCBpc1xuICAgICAqIHNlbnQgdG8gVkFEIGFuZCB0aGUgbW9kZWwuIEZpbHRlcmluZyB0aGUgYXVkaW8gY2FuIGltcHJvdmUgVkFEIGFuZCB0dXJuXG4gICAgICogZGV0ZWN0aW9uIGFjY3VyYWN5IChyZWR1Y2luZyBmYWxzZSBwb3NpdGl2ZXMpIGFuZCBtb2RlbCBwZXJmb3JtYW5jZSBieSBpbXByb3ZpbmdcbiAgICAgKiBwZXJjZXB0aW9uIG9mIHRoZSBpbnB1dCBhdWRpby5cbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIElucHV0QXVkaW9Ob2lzZVJlZHVjdGlvbiB7XG4gICAgICAvKipcbiAgICAgICAqIFR5cGUgb2Ygbm9pc2UgcmVkdWN0aW9uLiBgbmVhcl9maWVsZGAgaXMgZm9yIGNsb3NlLXRhbGtpbmcgbWljcm9waG9uZXMgc3VjaCBhc1xuICAgICAgICogaGVhZHBob25lcywgYGZhcl9maWVsZGAgaXMgZm9yIGZhci1maWVsZCBtaWNyb3Bob25lcyBzdWNoIGFzIGxhcHRvcCBvclxuICAgICAgICogY29uZmVyZW5jZSByb29tIG1pY3JvcGhvbmVzLlxuICAgICAgICovXG4gICAgICB0eXBlPzogJ25lYXJfZmllbGQnIHwgJ2Zhcl9maWVsZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgaW5wdXQgYXVkaW8gdHJhbnNjcmlwdGlvbiwgZGVmYXVsdHMgdG8gb2ZmIGFuZCBjYW4gYmUgc2V0IHRvXG4gICAgICogYG51bGxgIHRvIHR1cm4gb2ZmIG9uY2Ugb24uIElucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24gaXMgbm90IG5hdGl2ZSB0byB0aGVcbiAgICAgKiBtb2RlbCwgc2luY2UgdGhlIG1vZGVsIGNvbnN1bWVzIGF1ZGlvIGRpcmVjdGx5LiBUcmFuc2NyaXB0aW9uIHJ1bnNcbiAgICAgKiBhc3luY2hyb25vdXNseSB0aHJvdWdoXG4gICAgICogW3RoZSAvYXVkaW8vdHJhbnNjcmlwdGlvbnMgZW5kcG9pbnRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYXVkaW8vY3JlYXRlVHJhbnNjcmlwdGlvbilcbiAgICAgKiBhbmQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgZ3VpZGFuY2Ugb2YgaW5wdXQgYXVkaW8gY29udGVudCByYXRoZXIgdGhhbiBwcmVjaXNlbHlcbiAgICAgKiB3aGF0IHRoZSBtb2RlbCBoZWFyZC4gVGhlIGNsaWVudCBjYW4gb3B0aW9uYWxseSBzZXQgdGhlIGxhbmd1YWdlIGFuZCBwcm9tcHQgZm9yXG4gICAgICogdHJhbnNjcmlwdGlvbiwgdGhlc2Ugb2ZmZXIgYWRkaXRpb25hbCBndWlkYW5jZSB0byB0aGUgdHJhbnNjcmlwdGlvbiBzZXJ2aWNlLlxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXRBdWRpb1RyYW5zY3JpcHRpb24ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0IGF1ZGlvLiBTdXBwbHlpbmcgdGhlIGlucHV0IGxhbmd1YWdlIGluXG4gICAgICAgKiBbSVNPLTYzOS0xXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0lTT182MzktMV9jb2RlcykgKGUuZy4gYGVuYClcbiAgICAgICAqIGZvcm1hdCB3aWxsIGltcHJvdmUgYWNjdXJhY3kgYW5kIGxhdGVuY3kuXG4gICAgICAgKi9cbiAgICAgIGxhbmd1YWdlPzogc3RyaW5nO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBtb2RlbCB0byB1c2UgZm9yIHRyYW5zY3JpcHRpb24sIGN1cnJlbnQgb3B0aW9ucyBhcmUgYGdwdC00by10cmFuc2NyaWJlYCxcbiAgICAgICAqIGBncHQtNG8tbWluaS10cmFuc2NyaWJlYCwgYW5kIGB3aGlzcGVyLTFgLlxuICAgICAgICovXG4gICAgICBtb2RlbD86IHN0cmluZztcblxuICAgICAgLyoqXG4gICAgICAgKiBBbiBvcHRpb25hbCB0ZXh0IHRvIGd1aWRlIHRoZSBtb2RlbCdzIHN0eWxlIG9yIGNvbnRpbnVlIGEgcHJldmlvdXMgYXVkaW9cbiAgICAgICAqIHNlZ21lbnQuIEZvciBgd2hpc3Blci0xYCwgdGhlXG4gICAgICAgKiBbcHJvbXB0IGlzIGEgbGlzdCBvZiBrZXl3b3Jkc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3NwZWVjaC10by10ZXh0I3Byb21wdGluZykuXG4gICAgICAgKiBGb3IgYGdwdC00by10cmFuc2NyaWJlYCBtb2RlbHMsIHRoZSBwcm9tcHQgaXMgYSBmcmVlIHRleHQgc3RyaW5nLCBmb3IgZXhhbXBsZVxuICAgICAgICogXCJleHBlY3Qgd29yZHMgcmVsYXRlZCB0byB0ZWNobm9sb2d5XCIuXG4gICAgICAgKi9cbiAgICAgIHByb21wdD86IHN0cmluZztcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIFRvb2wge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uLCBpbmNsdWRpbmcgZ3VpZGFuY2Ugb24gd2hlbiBhbmQgaG93IHRvIGNhbGwgaXQsXG4gICAgICAgKiBhbmQgZ3VpZGFuY2UgYWJvdXQgd2hhdCB0byB0ZWxsIHRoZSB1c2VyIHdoZW4gY2FsbGluZyAoaWYgYW55dGhpbmcpLlxuICAgICAgICovXG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uXG4gICAgICAgKi9cbiAgICAgIG5hbWU/OiBzdHJpbmc7XG5cbiAgICAgIC8qKlxuICAgICAgICogUGFyYW1ldGVycyBvZiB0aGUgZnVuY3Rpb24gaW4gSlNPTiBTY2hlbWEuXG4gICAgICAgKi9cbiAgICAgIHBhcmFtZXRlcnM/OiB1bmtub3duO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSB0eXBlIG9mIHRoZSB0b29sLCBpLmUuIGBmdW5jdGlvbmAuXG4gICAgICAgKi9cbiAgICAgIHR5cGU/OiAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIHR1cm4gZGV0ZWN0aW9uLCBldGhlciBTZXJ2ZXIgVkFEIG9yIFNlbWFudGljIFZBRC4gVGhpcyBjYW4gYmVcbiAgICAgKiBzZXQgdG8gYG51bGxgIHRvIHR1cm4gb2ZmLCBpbiB3aGljaCBjYXNlIHRoZSBjbGllbnQgbXVzdCBtYW51YWxseSB0cmlnZ2VyIG1vZGVsXG4gICAgICogcmVzcG9uc2UuIFNlcnZlciBWQUQgbWVhbnMgdGhhdCB0aGUgbW9kZWwgd2lsbCBkZXRlY3QgdGhlIHN0YXJ0IGFuZCBlbmQgb2ZcbiAgICAgKiBzcGVlY2ggYmFzZWQgb24gYXVkaW8gdm9sdW1lIGFuZCByZXNwb25kIGF0IHRoZSBlbmQgb2YgdXNlciBzcGVlY2guIFNlbWFudGljIFZBRFxuICAgICAqIGlzIG1vcmUgYWR2YW5jZWQgYW5kIHVzZXMgYSB0dXJuIGRldGVjdGlvbiBtb2RlbCAoaW4gY29uanVjdGlvbiB3aXRoIFZBRCkgdG9cbiAgICAgKiBzZW1hbnRpY2FsbHkgZXN0aW1hdGUgd2hldGhlciB0aGUgdXNlciBoYXMgZmluaXNoZWQgc3BlYWtpbmcsIHRoZW4gZHluYW1pY2FsbHlcbiAgICAgKiBzZXRzIGEgdGltZW91dCBiYXNlZCBvbiB0aGlzIHByb2JhYmlsaXR5LiBGb3IgZXhhbXBsZSwgaWYgdXNlciBhdWRpbyB0cmFpbHMgb2ZmXG4gICAgICogd2l0aCBcInVoaG1cIiwgdGhlIG1vZGVsIHdpbGwgc2NvcmUgYSBsb3cgcHJvYmFiaWxpdHkgb2YgdHVybiBlbmQgYW5kIHdhaXQgbG9uZ2VyXG4gICAgICogZm9yIHRoZSB1c2VyIHRvIGNvbnRpbnVlIHNwZWFraW5nLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIG1vcmUgbmF0dXJhbFxuICAgICAqIGNvbnZlcnNhdGlvbnMsIGJ1dCBtYXkgaGF2ZSBhIGhpZ2hlciBsYXRlbmN5LlxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgVHVybkRldGVjdGlvbiB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSByZXNwb25zZSB3aGVuIGEgVkFEIHN0b3AgZXZlbnRcbiAgICAgICAqIG9jY3Vycy5cbiAgICAgICAqL1xuICAgICAgY3JlYXRlX3Jlc3BvbnNlPzogYm9vbGVhbjtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZW1hbnRpY192YWRgIG1vZGUuIFRoZSBlYWdlcm5lc3Mgb2YgdGhlIG1vZGVsIHRvIHJlc3BvbmQuIGBsb3dgXG4gICAgICAgKiB3aWxsIHdhaXQgbG9uZ2VyIGZvciB0aGUgdXNlciB0byBjb250aW51ZSBzcGVha2luZywgYGhpZ2hgIHdpbGwgcmVzcG9uZCBtb3JlXG4gICAgICAgKiBxdWlja2x5LiBgYXV0b2AgaXMgdGhlIGRlZmF1bHQgYW5kIGlzIGVxdWl2YWxlbnQgdG8gYG1lZGl1bWAuXG4gICAgICAgKi9cbiAgICAgIGVhZ2VybmVzcz86ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnYXV0byc7XG5cbiAgICAgIC8qKlxuICAgICAgICogV2hldGhlciBvciBub3QgdG8gYXV0b21hdGljYWxseSBpbnRlcnJ1cHQgYW55IG9uZ29pbmcgcmVzcG9uc2Ugd2l0aCBvdXRwdXQgdG9cbiAgICAgICAqIHRoZSBkZWZhdWx0IGNvbnZlcnNhdGlvbiAoaS5lLiBgY29udmVyc2F0aW9uYCBvZiBgYXV0b2ApIHdoZW4gYSBWQUQgc3RhcnQgZXZlbnRcbiAgICAgICAqIG9jY3Vycy5cbiAgICAgICAqL1xuICAgICAgaW50ZXJydXB0X3Jlc3BvbnNlPzogYm9vbGVhbjtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZXJ2ZXJfdmFkYCBtb2RlLiBBbW91bnQgb2YgYXVkaW8gdG8gaW5jbHVkZSBiZWZvcmUgdGhlIFZBRFxuICAgICAgICogZGV0ZWN0ZWQgc3BlZWNoIChpbiBtaWxsaXNlY29uZHMpLiBEZWZhdWx0cyB0byAzMDBtcy5cbiAgICAgICAqL1xuICAgICAgcHJlZml4X3BhZGRpbmdfbXM/OiBudW1iZXI7XG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCBvbmx5IGZvciBgc2VydmVyX3ZhZGAgbW9kZS4gRHVyYXRpb24gb2Ygc2lsZW5jZSB0byBkZXRlY3Qgc3BlZWNoIHN0b3AgKGluXG4gICAgICAgKiBtaWxsaXNlY29uZHMpLiBEZWZhdWx0cyB0byA1MDBtcy4gV2l0aCBzaG9ydGVyIHZhbHVlcyB0aGUgbW9kZWwgd2lsbCByZXNwb25kXG4gICAgICAgKiBtb3JlIHF1aWNrbHksIGJ1dCBtYXkganVtcCBpbiBvbiBzaG9ydCBwYXVzZXMgZnJvbSB0aGUgdXNlci5cbiAgICAgICAqL1xuICAgICAgc2lsZW5jZV9kdXJhdGlvbl9tcz86IG51bWJlcjtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZXJ2ZXJfdmFkYCBtb2RlLiBBY3RpdmF0aW9uIHRocmVzaG9sZCBmb3IgVkFEICgwLjAgdG8gMS4wKSwgdGhpc1xuICAgICAgICogZGVmYXVsdHMgdG8gMC41LiBBIGhpZ2hlciB0aHJlc2hvbGQgd2lsbCByZXF1aXJlIGxvdWRlciBhdWRpbyB0byBhY3RpdmF0ZSB0aGVcbiAgICAgICAqIG1vZGVsLCBhbmQgdGh1cyBtaWdodCBwZXJmb3JtIGJldHRlciBpbiBub2lzeSBlbnZpcm9ubWVudHMuXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IG51bWJlcjtcblxuICAgICAgLyoqXG4gICAgICAgKiBUeXBlIG9mIHR1cm4gZGV0ZWN0aW9uLlxuICAgICAgICovXG4gICAgICB0eXBlPzogJ3NlcnZlcl92YWQnIHwgJ3NlbWFudGljX3ZhZCc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgd2hlbiBhIHNlc3Npb24gaXMgdXBkYXRlZCB3aXRoIGEgYHNlc3Npb24udXBkYXRlYCBldmVudCwgdW5sZXNzIHRoZXJlXG4gKiBpcyBhbiBlcnJvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uVXBkYXRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIHNlcnZlciBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlYWx0aW1lIHNlc3Npb24gb2JqZWN0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBzZXNzaW9uOiBTZXNzaW9uc0FQSS5TZXNzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdHlwZSwgbXVzdCBiZSBgc2Vzc2lvbi51cGRhdGVkYC5cbiAgICovXG4gIHR5cGU6ICdzZXNzaW9uLnVwZGF0ZWQnO1xufVxuXG4vKipcbiAqIFNlbmQgdGhpcyBldmVudCB0byB1cGRhdGUgYSB0cmFuc2NyaXB0aW9uIHNlc3Npb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdGlvblNlc3Npb25VcGRhdGUge1xuICAvKipcbiAgICogUmVhbHRpbWUgdHJhbnNjcmlwdGlvbiBzZXNzaW9uIG9iamVjdCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgc2Vzc2lvbjogVHJhbnNjcmlwdGlvblNlc3Npb25VcGRhdGUuU2Vzc2lvbjtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHR5cGUsIG11c3QgYmUgYHRyYW5zY3JpcHRpb25fc2Vzc2lvbi51cGRhdGVgLlxuICAgKi9cbiAgdHlwZTogJ3RyYW5zY3JpcHRpb25fc2Vzc2lvbi51cGRhdGUnO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjbGllbnQtZ2VuZXJhdGVkIElEIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBldmVudC5cbiAgICovXG4gIGV2ZW50X2lkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFRyYW5zY3JpcHRpb25TZXNzaW9uVXBkYXRlIHtcbiAgLyoqXG4gICAqIFJlYWx0aW1lIHRyYW5zY3JpcHRpb24gc2Vzc2lvbiBvYmplY3QgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIHNldCBvZiBpdGVtcyB0byBpbmNsdWRlIGluIHRoZSB0cmFuc2NyaXB0aW9uLiBDdXJyZW50IGF2YWlsYWJsZSBpdGVtcyBhcmU6XG4gICAgICpcbiAgICAgKiAtIGBpdGVtLmlucHV0X2F1ZGlvX3RyYW5zY3JpcHRpb24ubG9ncHJvYnNgXG4gICAgICovXG4gICAgaW5jbHVkZT86IEFycmF5PHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybWF0IG9mIGlucHV0IGF1ZGlvLiBPcHRpb25zIGFyZSBgcGNtMTZgLCBgZzcxMV91bGF3YCwgb3IgYGc3MTFfYWxhd2AuIEZvclxuICAgICAqIGBwY20xNmAsIGlucHV0IGF1ZGlvIG11c3QgYmUgMTYtYml0IFBDTSBhdCBhIDI0a0h6IHNhbXBsZSByYXRlLCBzaW5nbGUgY2hhbm5lbFxuICAgICAqIChtb25vKSwgYW5kIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci5cbiAgICAgKi9cbiAgICBpbnB1dF9hdWRpb19mb3JtYXQ/OiAncGNtMTYnIHwgJ2c3MTFfdWxhdycgfCAnZzcxMV9hbGF3JztcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIG5vaXNlIHJlZHVjdGlvbi4gVGhpcyBjYW4gYmUgc2V0IHRvIGBudWxsYCB0byB0dXJuXG4gICAgICogb2ZmLiBOb2lzZSByZWR1Y3Rpb24gZmlsdGVycyBhdWRpbyBhZGRlZCB0byB0aGUgaW5wdXQgYXVkaW8gYnVmZmVyIGJlZm9yZSBpdCBpc1xuICAgICAqIHNlbnQgdG8gVkFEIGFuZCB0aGUgbW9kZWwuIEZpbHRlcmluZyB0aGUgYXVkaW8gY2FuIGltcHJvdmUgVkFEIGFuZCB0dXJuXG4gICAgICogZGV0ZWN0aW9uIGFjY3VyYWN5IChyZWR1Y2luZyBmYWxzZSBwb3NpdGl2ZXMpIGFuZCBtb2RlbCBwZXJmb3JtYW5jZSBieSBpbXByb3ZpbmdcbiAgICAgKiBwZXJjZXB0aW9uIG9mIHRoZSBpbnB1dCBhdWRpby5cbiAgICAgKi9cbiAgICBpbnB1dF9hdWRpb19ub2lzZV9yZWR1Y3Rpb24/OiBTZXNzaW9uLklucHV0QXVkaW9Ob2lzZVJlZHVjdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIHRyYW5zY3JpcHRpb24uIFRoZSBjbGllbnQgY2FuIG9wdGlvbmFsbHkgc2V0IHRoZVxuICAgICAqIGxhbmd1YWdlIGFuZCBwcm9tcHQgZm9yIHRyYW5zY3JpcHRpb24sIHRoZXNlIG9mZmVyIGFkZGl0aW9uYWwgZ3VpZGFuY2UgdG8gdGhlXG4gICAgICogdHJhbnNjcmlwdGlvbiBzZXJ2aWNlLlxuICAgICAqL1xuICAgIGlucHV0X2F1ZGlvX3RyYW5zY3JpcHRpb24/OiBTZXNzaW9uLklucHV0QXVkaW9UcmFuc2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNldCBvZiBtb2RhbGl0aWVzIHRoZSBtb2RlbCBjYW4gcmVzcG9uZCB3aXRoLiBUbyBkaXNhYmxlIGF1ZGlvLCBzZXQgdGhpcyB0b1xuICAgICAqIFtcInRleHRcIl0uXG4gICAgICovXG4gICAgbW9kYWxpdGllcz86IEFycmF5PCd0ZXh0JyB8ICdhdWRpbyc+O1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgdHVybiBkZXRlY3Rpb24sIGV0aGVyIFNlcnZlciBWQUQgb3IgU2VtYW50aWMgVkFELiBUaGlzIGNhbiBiZVxuICAgICAqIHNldCB0byBgbnVsbGAgdG8gdHVybiBvZmYsIGluIHdoaWNoIGNhc2UgdGhlIGNsaWVudCBtdXN0IG1hbnVhbGx5IHRyaWdnZXIgbW9kZWxcbiAgICAgKiByZXNwb25zZS4gU2VydmVyIFZBRCBtZWFucyB0aGF0IHRoZSBtb2RlbCB3aWxsIGRldGVjdCB0aGUgc3RhcnQgYW5kIGVuZCBvZlxuICAgICAqIHNwZWVjaCBiYXNlZCBvbiBhdWRpbyB2b2x1bWUgYW5kIHJlc3BvbmQgYXQgdGhlIGVuZCBvZiB1c2VyIHNwZWVjaC4gU2VtYW50aWMgVkFEXG4gICAgICogaXMgbW9yZSBhZHZhbmNlZCBhbmQgdXNlcyBhIHR1cm4gZGV0ZWN0aW9uIG1vZGVsIChpbiBjb25qdWN0aW9uIHdpdGggVkFEKSB0b1xuICAgICAqIHNlbWFudGljYWxseSBlc3RpbWF0ZSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBmaW5pc2hlZCBzcGVha2luZywgdGhlbiBkeW5hbWljYWxseVxuICAgICAqIHNldHMgYSB0aW1lb3V0IGJhc2VkIG9uIHRoaXMgcHJvYmFiaWxpdHkuIEZvciBleGFtcGxlLCBpZiB1c2VyIGF1ZGlvIHRyYWlscyBvZmZcbiAgICAgKiB3aXRoIFwidWhobVwiLCB0aGUgbW9kZWwgd2lsbCBzY29yZSBhIGxvdyBwcm9iYWJpbGl0eSBvZiB0dXJuIGVuZCBhbmQgd2FpdCBsb25nZXJcbiAgICAgKiBmb3IgdGhlIHVzZXIgdG8gY29udGludWUgc3BlYWtpbmcuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgbW9yZSBuYXR1cmFsXG4gICAgICogY29udmVyc2F0aW9ucywgYnV0IG1heSBoYXZlIGEgaGlnaGVyIGxhdGVuY3kuXG4gICAgICovXG4gICAgdHVybl9kZXRlY3Rpb24/OiBTZXNzaW9uLlR1cm5EZXRlY3Rpb247XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIFNlc3Npb24ge1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIGlucHV0IGF1ZGlvIG5vaXNlIHJlZHVjdGlvbi4gVGhpcyBjYW4gYmUgc2V0IHRvIGBudWxsYCB0byB0dXJuXG4gICAgICogb2ZmLiBOb2lzZSByZWR1Y3Rpb24gZmlsdGVycyBhdWRpbyBhZGRlZCB0byB0aGUgaW5wdXQgYXVkaW8gYnVmZmVyIGJlZm9yZSBpdCBpc1xuICAgICAqIHNlbnQgdG8gVkFEIGFuZCB0aGUgbW9kZWwuIEZpbHRlcmluZyB0aGUgYXVkaW8gY2FuIGltcHJvdmUgVkFEIGFuZCB0dXJuXG4gICAgICogZGV0ZWN0aW9uIGFjY3VyYWN5IChyZWR1Y2luZyBmYWxzZSBwb3NpdGl2ZXMpIGFuZCBtb2RlbCBwZXJmb3JtYW5jZSBieSBpbXByb3ZpbmdcbiAgICAgKiBwZXJjZXB0aW9uIG9mIHRoZSBpbnB1dCBhdWRpby5cbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIElucHV0QXVkaW9Ob2lzZVJlZHVjdGlvbiB7XG4gICAgICAvKipcbiAgICAgICAqIFR5cGUgb2Ygbm9pc2UgcmVkdWN0aW9uLiBgbmVhcl9maWVsZGAgaXMgZm9yIGNsb3NlLXRhbGtpbmcgbWljcm9waG9uZXMgc3VjaCBhc1xuICAgICAgICogaGVhZHBob25lcywgYGZhcl9maWVsZGAgaXMgZm9yIGZhci1maWVsZCBtaWNyb3Bob25lcyBzdWNoIGFzIGxhcHRvcCBvclxuICAgICAgICogY29uZmVyZW5jZSByb29tIG1pY3JvcGhvbmVzLlxuICAgICAgICovXG4gICAgICB0eXBlPzogJ25lYXJfZmllbGQnIHwgJ2Zhcl9maWVsZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgaW5wdXQgYXVkaW8gdHJhbnNjcmlwdGlvbi4gVGhlIGNsaWVudCBjYW4gb3B0aW9uYWxseSBzZXQgdGhlXG4gICAgICogbGFuZ3VhZ2UgYW5kIHByb21wdCBmb3IgdHJhbnNjcmlwdGlvbiwgdGhlc2Ugb2ZmZXIgYWRkaXRpb25hbCBndWlkYW5jZSB0byB0aGVcbiAgICAgKiB0cmFuc2NyaXB0aW9uIHNlcnZpY2UuXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBJbnB1dEF1ZGlvVHJhbnNjcmlwdGlvbiB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgaW5wdXQgYXVkaW8uIFN1cHBseWluZyB0aGUgaW5wdXQgbGFuZ3VhZ2UgaW5cbiAgICAgICAqIFtJU08tNjM5LTFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfSVNPXzYzOS0xX2NvZGVzKSAoZS5nLiBgZW5gKVxuICAgICAgICogZm9ybWF0IHdpbGwgaW1wcm92ZSBhY2N1cmFjeSBhbmQgbGF0ZW5jeS5cbiAgICAgICAqL1xuICAgICAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIG1vZGVsIHRvIHVzZSBmb3IgdHJhbnNjcmlwdGlvbiwgY3VycmVudCBvcHRpb25zIGFyZSBgZ3B0LTRvLXRyYW5zY3JpYmVgLFxuICAgICAgICogYGdwdC00by1taW5pLXRyYW5zY3JpYmVgLCBhbmQgYHdoaXNwZXItMWAuXG4gICAgICAgKi9cbiAgICAgIG1vZGVsPzogJ2dwdC00by10cmFuc2NyaWJlJyB8ICdncHQtNG8tbWluaS10cmFuc2NyaWJlJyB8ICd3aGlzcGVyLTEnO1xuXG4gICAgICAvKipcbiAgICAgICAqIEFuIG9wdGlvbmFsIHRleHQgdG8gZ3VpZGUgdGhlIG1vZGVsJ3Mgc3R5bGUgb3IgY29udGludWUgYSBwcmV2aW91cyBhdWRpb1xuICAgICAgICogc2VnbWVudC4gRm9yIGB3aGlzcGVyLTFgLCB0aGVcbiAgICAgICAqIFtwcm9tcHQgaXMgYSBsaXN0IG9mIGtleXdvcmRzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3BlZWNoLXRvLXRleHQjcHJvbXB0aW5nKS5cbiAgICAgICAqIEZvciBgZ3B0LTRvLXRyYW5zY3JpYmVgIG1vZGVscywgdGhlIHByb21wdCBpcyBhIGZyZWUgdGV4dCBzdHJpbmcsIGZvciBleGFtcGxlXG4gICAgICAgKiBcImV4cGVjdCB3b3JkcyByZWxhdGVkIHRvIHRlY2hub2xvZ3lcIi5cbiAgICAgICAqL1xuICAgICAgcHJvbXB0Pzogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIHR1cm4gZGV0ZWN0aW9uLCBldGhlciBTZXJ2ZXIgVkFEIG9yIFNlbWFudGljIFZBRC4gVGhpcyBjYW4gYmVcbiAgICAgKiBzZXQgdG8gYG51bGxgIHRvIHR1cm4gb2ZmLCBpbiB3aGljaCBjYXNlIHRoZSBjbGllbnQgbXVzdCBtYW51YWxseSB0cmlnZ2VyIG1vZGVsXG4gICAgICogcmVzcG9uc2UuIFNlcnZlciBWQUQgbWVhbnMgdGhhdCB0aGUgbW9kZWwgd2lsbCBkZXRlY3QgdGhlIHN0YXJ0IGFuZCBlbmQgb2ZcbiAgICAgKiBzcGVlY2ggYmFzZWQgb24gYXVkaW8gdm9sdW1lIGFuZCByZXNwb25kIGF0IHRoZSBlbmQgb2YgdXNlciBzcGVlY2guIFNlbWFudGljIFZBRFxuICAgICAqIGlzIG1vcmUgYWR2YW5jZWQgYW5kIHVzZXMgYSB0dXJuIGRldGVjdGlvbiBtb2RlbCAoaW4gY29uanVjdGlvbiB3aXRoIFZBRCkgdG9cbiAgICAgKiBzZW1hbnRpY2FsbHkgZXN0aW1hdGUgd2hldGhlciB0aGUgdXNlciBoYXMgZmluaXNoZWQgc3BlYWtpbmcsIHRoZW4gZHluYW1pY2FsbHlcbiAgICAgKiBzZXRzIGEgdGltZW91dCBiYXNlZCBvbiB0aGlzIHByb2JhYmlsaXR5LiBGb3IgZXhhbXBsZSwgaWYgdXNlciBhdWRpbyB0cmFpbHMgb2ZmXG4gICAgICogd2l0aCBcInVoaG1cIiwgdGhlIG1vZGVsIHdpbGwgc2NvcmUgYSBsb3cgcHJvYmFiaWxpdHkgb2YgdHVybiBlbmQgYW5kIHdhaXQgbG9uZ2VyXG4gICAgICogZm9yIHRoZSB1c2VyIHRvIGNvbnRpbnVlIHNwZWFraW5nLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIG1vcmUgbmF0dXJhbFxuICAgICAqIGNvbnZlcnNhdGlvbnMsIGJ1dCBtYXkgaGF2ZSBhIGhpZ2hlciBsYXRlbmN5LlxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgVHVybkRldGVjdGlvbiB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSByZXNwb25zZSB3aGVuIGEgVkFEIHN0b3AgZXZlbnRcbiAgICAgICAqIG9jY3Vycy5cbiAgICAgICAqL1xuICAgICAgY3JlYXRlX3Jlc3BvbnNlPzogYm9vbGVhbjtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZW1hbnRpY192YWRgIG1vZGUuIFRoZSBlYWdlcm5lc3Mgb2YgdGhlIG1vZGVsIHRvIHJlc3BvbmQuIGBsb3dgXG4gICAgICAgKiB3aWxsIHdhaXQgbG9uZ2VyIGZvciB0aGUgdXNlciB0byBjb250aW51ZSBzcGVha2luZywgYGhpZ2hgIHdpbGwgcmVzcG9uZCBtb3JlXG4gICAgICAgKiBxdWlja2x5LiBgYXV0b2AgaXMgdGhlIGRlZmF1bHQgYW5kIGlzIGVxdWl2YWxlbnQgdG8gYG1lZGl1bWAuXG4gICAgICAgKi9cbiAgICAgIGVhZ2VybmVzcz86ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnYXV0byc7XG5cbiAgICAgIC8qKlxuICAgICAgICogV2hldGhlciBvciBub3QgdG8gYXV0b21hdGljYWxseSBpbnRlcnJ1cHQgYW55IG9uZ29pbmcgcmVzcG9uc2Ugd2l0aCBvdXRwdXQgdG9cbiAgICAgICAqIHRoZSBkZWZhdWx0IGNvbnZlcnNhdGlvbiAoaS5lLiBgY29udmVyc2F0aW9uYCBvZiBgYXV0b2ApIHdoZW4gYSBWQUQgc3RhcnQgZXZlbnRcbiAgICAgICAqIG9jY3Vycy5cbiAgICAgICAqL1xuICAgICAgaW50ZXJydXB0X3Jlc3BvbnNlPzogYm9vbGVhbjtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZXJ2ZXJfdmFkYCBtb2RlLiBBbW91bnQgb2YgYXVkaW8gdG8gaW5jbHVkZSBiZWZvcmUgdGhlIFZBRFxuICAgICAgICogZGV0ZWN0ZWQgc3BlZWNoIChpbiBtaWxsaXNlY29uZHMpLiBEZWZhdWx0cyB0byAzMDBtcy5cbiAgICAgICAqL1xuICAgICAgcHJlZml4X3BhZGRpbmdfbXM/OiBudW1iZXI7XG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCBvbmx5IGZvciBgc2VydmVyX3ZhZGAgbW9kZS4gRHVyYXRpb24gb2Ygc2lsZW5jZSB0byBkZXRlY3Qgc3BlZWNoIHN0b3AgKGluXG4gICAgICAgKiBtaWxsaXNlY29uZHMpLiBEZWZhdWx0cyB0byA1MDBtcy4gV2l0aCBzaG9ydGVyIHZhbHVlcyB0aGUgbW9kZWwgd2lsbCByZXNwb25kXG4gICAgICAgKiBtb3JlIHF1aWNrbHksIGJ1dCBtYXkganVtcCBpbiBvbiBzaG9ydCBwYXVzZXMgZnJvbSB0aGUgdXNlci5cbiAgICAgICAqL1xuICAgICAgc2lsZW5jZV9kdXJhdGlvbl9tcz86IG51bWJlcjtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIG9ubHkgZm9yIGBzZXJ2ZXJfdmFkYCBtb2RlLiBBY3RpdmF0aW9uIHRocmVzaG9sZCBmb3IgVkFEICgwLjAgdG8gMS4wKSwgdGhpc1xuICAgICAgICogZGVmYXVsdHMgdG8gMC41LiBBIGhpZ2hlciB0aHJlc2hvbGQgd2lsbCByZXF1aXJlIGxvdWRlciBhdWRpbyB0byBhY3RpdmF0ZSB0aGVcbiAgICAgICAqIG1vZGVsLCBhbmQgdGh1cyBtaWdodCBwZXJmb3JtIGJldHRlciBpbiBub2lzeSBlbnZpcm9ubWVudHMuXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IG51bWJlcjtcblxuICAgICAgLyoqXG4gICAgICAgKiBUeXBlIG9mIHR1cm4gZGV0ZWN0aW9uLlxuICAgICAgICovXG4gICAgICB0eXBlPzogJ3NlcnZlcl92YWQnIHwgJ3NlbWFudGljX3ZhZCc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgd2hlbiBhIHRyYW5zY3JpcHRpb24gc2Vzc2lvbiBpcyB1cGRhdGVkIHdpdGggYVxuICogYHRyYW5zY3JpcHRpb25fc2Vzc2lvbi51cGRhdGVgIGV2ZW50LCB1bmxlc3MgdGhlcmUgaXMgYW4gZXJyb3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdGlvblNlc3Npb25VcGRhdGVkRXZlbnQge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgc2VydmVyIGV2ZW50LlxuICAgKi9cbiAgZXZlbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSBuZXcgUmVhbHRpbWUgdHJhbnNjcmlwdGlvbiBzZXNzaW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFdoZW4gYSBzZXNzaW9uIGlzIGNyZWF0ZWQgb24gdGhlIHNlcnZlciB2aWEgUkVTVCBBUEksIHRoZSBzZXNzaW9uIG9iamVjdCBhbHNvXG4gICAqIGNvbnRhaW5zIGFuIGVwaGVtZXJhbCBrZXkuIERlZmF1bHQgVFRMIGZvciBrZXlzIGlzIG9uZSBtaW51dGUuIFRoaXMgcHJvcGVydHkgaXNcbiAgICogbm90IHByZXNlbnQgd2hlbiBhIHNlc3Npb24gaXMgdXBkYXRlZCB2aWEgdGhlIFdlYlNvY2tldCBBUEkuXG4gICAqL1xuICBzZXNzaW9uOiBUcmFuc2NyaXB0aW9uU2Vzc2lvbnNBUEkuVHJhbnNjcmlwdGlvblNlc3Npb247XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlLCBtdXN0IGJlIGB0cmFuc2NyaXB0aW9uX3Nlc3Npb24udXBkYXRlZGAuXG4gICAqL1xuICB0eXBlOiAndHJhbnNjcmlwdGlvbl9zZXNzaW9uLnVwZGF0ZWQnO1xufVxuXG5SZWFsdGltZS5TZXNzaW9ucyA9IFNlc3Npb25zO1xuUmVhbHRpbWUuVHJhbnNjcmlwdGlvblNlc3Npb25zID0gVHJhbnNjcmlwdGlvblNlc3Npb25zO1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgUmVhbHRpbWUge1xuICBleHBvcnQge1xuICAgIFNlc3Npb25zIGFzIFNlc3Npb25zLFxuICAgIHR5cGUgU2Vzc2lvbnNBUElTZXNzaW9uIGFzIFNlc3Npb24sXG4gICAgdHlwZSBTZXNzaW9uQ3JlYXRlUmVzcG9uc2UgYXMgU2Vzc2lvbkNyZWF0ZVJlc3BvbnNlLFxuICAgIHR5cGUgU2Vzc2lvbkNyZWF0ZVBhcmFtcyBhcyBTZXNzaW9uQ3JlYXRlUGFyYW1zLFxuICB9O1xuXG4gIGV4cG9ydCB7XG4gICAgVHJhbnNjcmlwdGlvblNlc3Npb25zIGFzIFRyYW5zY3JpcHRpb25TZXNzaW9ucyxcbiAgICB0eXBlIFRyYW5zY3JpcHRpb25TZXNzaW9uIGFzIFRyYW5zY3JpcHRpb25TZXNzaW9uLFxuICAgIHR5cGUgVHJhbnNjcmlwdGlvblNlc3Npb25DcmVhdGVQYXJhbXMgYXMgVHJhbnNjcmlwdGlvblNlc3Npb25DcmVhdGVQYXJhbXMsXG4gIH07XG59XG4iLCAiaW1wb3J0IHtcbiAgVGV4dENvbnRlbnRCbG9jayxcbiAgSW1hZ2VGaWxlQ29udGVudEJsb2NrLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlQ29udGVudERlbHRhLFxuICBUZXh0LFxuICBJbWFnZUZpbGUsXG4gIFRleHREZWx0YSxcbiAgTWVzc2FnZURlbHRhLFxuICBNZXNzYWdlQ29udGVudCxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzL2JldGEvdGhyZWFkcy9tZXNzYWdlcyc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7XG4gIFJ1bixcbiAgUnVuQ3JlYXRlUGFyYW1zQmFzZSxcbiAgUnVuQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICBSdW5zLFxuICBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc0Jhc2UsXG4gIFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zU3RyZWFtaW5nLFxufSBmcm9tICcuLi9yZXNvdXJjZXMvYmV0YS90aHJlYWRzL3J1bnMvcnVucyc7XG5pbXBvcnQgeyB0eXBlIFJlYWRhYmxlU3RyZWFtIH0gZnJvbSAnLi4vX3NoaW1zL2luZGV4JztcbmltcG9ydCB7IFN0cmVhbSB9IGZyb20gJy4uL3N0cmVhbWluZyc7XG5pbXBvcnQgeyBBUElVc2VyQWJvcnRFcnJvciwgT3BlbkFJRXJyb3IgfSBmcm9tICcuLi9lcnJvcic7XG5pbXBvcnQge1xuICBBc3Npc3RhbnRTdHJlYW1FdmVudCxcbiAgTWVzc2FnZVN0cmVhbUV2ZW50LFxuICBSdW5TdGVwU3RyZWFtRXZlbnQsXG4gIFJ1blN0cmVhbUV2ZW50LFxufSBmcm9tICcuLi9yZXNvdXJjZXMvYmV0YS9hc3Npc3RhbnRzJztcbmltcG9ydCB7IFJ1blN0ZXAsIFJ1blN0ZXBEZWx0YSwgVG9vbENhbGwsIFRvb2xDYWxsRGVsdGEgfSBmcm9tICcuLi9yZXNvdXJjZXMvYmV0YS90aHJlYWRzL3J1bnMvc3RlcHMnO1xuaW1wb3J0IHsgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zQmFzZSwgVGhyZWFkcyB9IGZyb20gJy4uL3Jlc291cmNlcy9iZXRhL3RocmVhZHMvdGhyZWFkcyc7XG5pbXBvcnQgeyBCYXNlRXZlbnRzLCBFdmVudFN0cmVhbSB9IGZyb20gJy4vRXZlbnRTdHJlYW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2lzdGFudFN0cmVhbUV2ZW50cyBleHRlbmRzIEJhc2VFdmVudHMge1xuICBydW46IChydW46IFJ1bikgPT4gdm9pZDtcblxuICAvL05ldyBldmVudCBzdHJ1Y3R1cmVcbiAgbWVzc2FnZUNyZWF0ZWQ6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiB2b2lkO1xuICBtZXNzYWdlRGVsdGE6IChtZXNzYWdlOiBNZXNzYWdlRGVsdGEsIHNuYXBzaG90OiBNZXNzYWdlKSA9PiB2b2lkO1xuICBtZXNzYWdlRG9uZTogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHZvaWQ7XG5cbiAgcnVuU3RlcENyZWF0ZWQ6IChydW5TdGVwOiBSdW5TdGVwKSA9PiB2b2lkO1xuICBydW5TdGVwRGVsdGE6IChkZWx0YTogUnVuU3RlcERlbHRhLCBzbmFwc2hvdDogUnVucy5SdW5TdGVwKSA9PiB2b2lkO1xuICBydW5TdGVwRG9uZTogKHJ1blN0ZXA6IFJ1bnMuUnVuU3RlcCwgc25hcHNob3Q6IFJ1bnMuUnVuU3RlcCkgPT4gdm9pZDtcblxuICB0b29sQ2FsbENyZWF0ZWQ6ICh0b29sQ2FsbDogVG9vbENhbGwpID0+IHZvaWQ7XG4gIHRvb2xDYWxsRGVsdGE6IChkZWx0YTogVG9vbENhbGxEZWx0YSwgc25hcHNob3Q6IFRvb2xDYWxsKSA9PiB2b2lkO1xuICB0b29sQ2FsbERvbmU6ICh0b29sQ2FsbDogVG9vbENhbGwpID0+IHZvaWQ7XG5cbiAgdGV4dENyZWF0ZWQ6IChjb250ZW50OiBUZXh0KSA9PiB2b2lkO1xuICB0ZXh0RGVsdGE6IChkZWx0YTogVGV4dERlbHRhLCBzbmFwc2hvdDogVGV4dCkgPT4gdm9pZDtcbiAgdGV4dERvbmU6IChjb250ZW50OiBUZXh0LCBzbmFwc2hvdDogTWVzc2FnZSkgPT4gdm9pZDtcblxuICAvL05vIGNyZWF0ZWQgb3IgZGVsdGEgYXMgdGhpcyBpcyBub3Qgc3RyZWFtZWRcbiAgaW1hZ2VGaWxlRG9uZTogKGNvbnRlbnQ6IEltYWdlRmlsZSwgc25hcHNob3Q6IE1lc3NhZ2UpID0+IHZvaWQ7XG5cbiAgZXZlbnQ6IChldmVudDogQXNzaXN0YW50U3RyZWFtRXZlbnQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtc0Jhc2VTdHJlYW0gPSBPbWl0PFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtc0Jhc2UsICdzdHJlYW0nPiAmIHtcbiAgc3RyZWFtPzogdHJ1ZTtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1bkNyZWF0ZVBhcmFtc0Jhc2VTdHJlYW0gPSBPbWl0PFJ1bkNyZWF0ZVBhcmFtc0Jhc2UsICdzdHJlYW0nPiAmIHtcbiAgc3RyZWFtPzogdHJ1ZTtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zU3RyZWFtID0gT21pdDxSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc0Jhc2UsICdzdHJlYW0nPiAmIHtcbiAgc3RyZWFtPzogdHJ1ZTtcbn07XG5cbmV4cG9ydCBjbGFzcyBBc3Npc3RhbnRTdHJlYW1cbiAgZXh0ZW5kcyBFdmVudFN0cmVhbTxBc3Npc3RhbnRTdHJlYW1FdmVudHM+XG4gIGltcGxlbWVudHMgQXN5bmNJdGVyYWJsZTxBc3Npc3RhbnRTdHJlYW1FdmVudD5cbntcbiAgLy9UcmFjayBhbGwgZXZlbnRzIGluIGEgc2luZ2xlIGxpc3QgZm9yIHJlZmVyZW5jZVxuICAjZXZlbnRzOiBBc3Npc3RhbnRTdHJlYW1FdmVudFtdID0gW107XG5cbiAgLy9Vc2VkIHRvIGFjY3VtdWxhdGUgZGVsdGFzXG4gIC8vV2UgYXJlIGFjY3VtdWxhdGluZyBtYW55IHR5cGVzIHNvIHRoZSB2YWx1ZSBoZXJlIGlzIG5vdCBzdHJpY3RcbiAgI3J1blN0ZXBTbmFwc2hvdHM6IHsgW2lkOiBzdHJpbmddOiBSdW5zLlJ1blN0ZXAgfSA9IHt9O1xuICAjbWVzc2FnZVNuYXBzaG90czogeyBbaWQ6IHN0cmluZ106IE1lc3NhZ2UgfSA9IHt9O1xuICAjbWVzc2FnZVNuYXBzaG90OiBNZXNzYWdlIHwgdW5kZWZpbmVkO1xuICAjZmluYWxSdW46IFJ1biB8IHVuZGVmaW5lZDtcbiAgI2N1cnJlbnRDb250ZW50SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgI2N1cnJlbnRDb250ZW50OiBNZXNzYWdlQ29udGVudCB8IHVuZGVmaW5lZDtcbiAgI2N1cnJlbnRUb29sQ2FsbEluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICNjdXJyZW50VG9vbENhbGw6IFRvb2xDYWxsIHwgdW5kZWZpbmVkO1xuXG4gIC8vRm9yIGN1cnJlbnQgc25hcHNob3QgbWV0aG9kc1xuICAjY3VycmVudEV2ZW50OiBBc3Npc3RhbnRTdHJlYW1FdmVudCB8IHVuZGVmaW5lZDtcbiAgI2N1cnJlbnRSdW5TbmFwc2hvdDogUnVuIHwgdW5kZWZpbmVkO1xuICAjY3VycmVudFJ1blN0ZXBTbmFwc2hvdDogUnVucy5SdW5TdGVwIHwgdW5kZWZpbmVkO1xuXG4gIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTogQXN5bmNJdGVyYXRvcjxBc3Npc3RhbnRTdHJlYW1FdmVudD4ge1xuICAgIGNvbnN0IHB1c2hRdWV1ZTogQXNzaXN0YW50U3RyZWFtRXZlbnRbXSA9IFtdO1xuICAgIGNvbnN0IHJlYWRRdWV1ZToge1xuICAgICAgcmVzb2x2ZTogKGNodW5rOiBBc3Npc3RhbnRTdHJlYW1FdmVudCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgICAgIHJlamVjdDogKGVycjogdW5rbm93bikgPT4gdm9pZDtcbiAgICB9W10gPSBbXTtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgLy9DYXRjaCBhbGwgZm9yIHBhc3NpbmcgYWxvbmcgYWxsIGV2ZW50c1xuICAgIHRoaXMub24oJ2V2ZW50JywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSByZWFkUXVldWUuc2hpZnQoKTtcbiAgICAgIGlmIChyZWFkZXIpIHtcbiAgICAgICAgcmVhZGVyLnJlc29sdmUoZXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHVzaFF1ZXVlLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiByZWFkUXVldWUpIHtcbiAgICAgICAgcmVhZGVyLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIHJlYWRRdWV1ZS5sZW5ndGggPSAwO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbignYWJvcnQnLCAoZXJyKSA9PiB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHJlYWRRdWV1ZSkge1xuICAgICAgICByZWFkZXIucmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICByZWFkUXVldWUubGVuZ3RoID0gMDtcbiAgICB9KTtcblxuICAgIHRoaXMub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiByZWFkUXVldWUpIHtcbiAgICAgICAgcmVhZGVyLnJlamVjdChlcnIpO1xuICAgICAgfVxuICAgICAgcmVhZFF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogYXN5bmMgKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8QXNzaXN0YW50U3RyZWFtRXZlbnQ+PiA9PiB7XG4gICAgICAgIGlmICghcHVzaFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxBc3Npc3RhbnRTdHJlYW1FdmVudCB8IHVuZGVmaW5lZD4oKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAgICAgIHJlYWRRdWV1ZS5wdXNoKHsgcmVzb2x2ZSwgcmVqZWN0IH0pLFxuICAgICAgICAgICkudGhlbigoY2h1bmspID0+IChjaHVuayA/IHsgdmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZSB9IDogeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaHVuayA9IHB1c2hRdWV1ZS5zaGlmdCgpITtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZSB9O1xuICAgICAgfSxcbiAgICAgIHJldHVybjogYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzLmFib3J0KCk7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUmVhZGFibGVTdHJlYW0oc3RyZWFtOiBSZWFkYWJsZVN0cmVhbSk6IEFzc2lzdGFudFN0cmVhbSB7XG4gICAgY29uc3QgcnVubmVyID0gbmV3IEFzc2lzdGFudFN0cmVhbSgpO1xuICAgIHJ1bm5lci5fcnVuKCgpID0+IHJ1bm5lci5fZnJvbVJlYWRhYmxlU3RyZWFtKHN0cmVhbSkpO1xuICAgIHJldHVybiBydW5uZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgX2Zyb21SZWFkYWJsZVN0cmVhbShcbiAgICByZWFkYWJsZVN0cmVhbTogUmVhZGFibGVTdHJlYW0sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IFByb21pc2U8UnVuPiB7XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucz8uc2lnbmFsO1xuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhpcy5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKSk7XG4gICAgfVxuICAgIHRoaXMuX2Nvbm5lY3RlZCgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IFN0cmVhbS5mcm9tUmVhZGFibGVTdHJlYW08QXNzaXN0YW50U3RyZWFtRXZlbnQ+KHJlYWRhYmxlU3RyZWFtLCB0aGlzLmNvbnRyb2xsZXIpO1xuICAgIGZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2Ygc3RyZWFtKSB7XG4gICAgICB0aGlzLiNhZGRFdmVudChldmVudCk7XG4gICAgfVxuICAgIGlmIChzdHJlYW0uY29udHJvbGxlci5zaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBBUElVc2VyQWJvcnRFcnJvcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWRkUnVuKHRoaXMuI2VuZFJlcXVlc3QoKSk7XG4gIH1cblxuICB0b1JlYWRhYmxlU3RyZWFtKCk6IFJlYWRhYmxlU3RyZWFtIHtcbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyZWFtKHRoaXNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLmJpbmQodGhpcyksIHRoaXMuY29udHJvbGxlcik7XG4gICAgcmV0dXJuIHN0cmVhbS50b1JlYWRhYmxlU3RyZWFtKCk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9vbEFzc2lzdGFudFN0cmVhbShcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgcnVuczogUnVucyxcbiAgICBwYXJhbXM6IFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zU3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkLFxuICApOiBBc3Npc3RhbnRTdHJlYW0ge1xuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBBc3Npc3RhbnRTdHJlYW0oKTtcbiAgICBydW5uZXIuX3J1bigoKSA9PlxuICAgICAgcnVubmVyLl9ydW5Ub29sQXNzaXN0YW50U3RyZWFtKHRocmVhZElkLCBydW5JZCwgcnVucywgcGFyYW1zLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnM6IHsgLi4ub3B0aW9ucz8uaGVhZGVycywgJ1gtU3RhaW5sZXNzLUhlbHBlci1NZXRob2QnOiAnc3RyZWFtJyB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgICByZXR1cm4gcnVubmVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9jcmVhdGVUb29sQXNzaXN0YW50U3RyZWFtKFxuICAgIHJ1bjogUnVucyxcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc1N0cmVhbSxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxSdW4+IHtcbiAgICBjb25zdCBzaWduYWwgPSBvcHRpb25zPy5zaWduYWw7XG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHRoaXMuY29udHJvbGxlci5hYm9ydCgpKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5OiBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc1N0cmVhbWluZyA9IHsgLi4ucGFyYW1zLCBzdHJlYW06IHRydWUgfTtcbiAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBydW4uc3VibWl0VG9vbE91dHB1dHModGhyZWFkSWQsIHJ1bklkLCBib2R5LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc2lnbmFsOiB0aGlzLmNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fY29ubmVjdGVkKCk7XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHN0cmVhbSkge1xuICAgICAgdGhpcy4jYWRkRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoc3RyZWFtLmNvbnRyb2xsZXIuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJVXNlckFib3J0RXJyb3IoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYWRkUnVuKHRoaXMuI2VuZFJlcXVlc3QoKSk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVGhyZWFkQXNzaXN0YW50U3RyZWFtKFxuICAgIHBhcmFtczogVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zQmFzZVN0cmVhbSxcbiAgICB0aHJlYWQ6IFRocmVhZHMsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICApOiBBc3Npc3RhbnRTdHJlYW0ge1xuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBBc3Npc3RhbnRTdHJlYW0oKTtcbiAgICBydW5uZXIuX3J1bigoKSA9PlxuICAgICAgcnVubmVyLl90aHJlYWRBc3Npc3RhbnRTdHJlYW0ocGFyYW1zLCB0aHJlYWQsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaGVhZGVyczogeyAuLi5vcHRpb25zPy5oZWFkZXJzLCAnWC1TdGFpbmxlc3MtSGVscGVyLU1ldGhvZCc6ICdzdHJlYW0nIH0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiBydW5uZXI7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlQXNzaXN0YW50U3RyZWFtKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcnVuczogUnVucyxcbiAgICBwYXJhbXM6IFJ1bkNyZWF0ZVBhcmFtc0Jhc2VTdHJlYW0sXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICApOiBBc3Npc3RhbnRTdHJlYW0ge1xuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBBc3Npc3RhbnRTdHJlYW0oKTtcbiAgICBydW5uZXIuX3J1bigoKSA9PlxuICAgICAgcnVubmVyLl9ydW5Bc3Npc3RhbnRTdHJlYW0odGhyZWFkSWQsIHJ1bnMsIHBhcmFtcywge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7IC4uLm9wdGlvbnM/LmhlYWRlcnMsICdYLVN0YWlubGVzcy1IZWxwZXItTWV0aG9kJzogJ3N0cmVhbScgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIHJ1bm5lcjtcbiAgfVxuXG4gIGN1cnJlbnRFdmVudCgpOiBBc3Npc3RhbnRTdHJlYW1FdmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRFdmVudDtcbiAgfVxuXG4gIGN1cnJlbnRSdW4oKTogUnVuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudFJ1blNuYXBzaG90O1xuICB9XG5cbiAgY3VycmVudE1lc3NhZ2VTbmFwc2hvdCgpOiBNZXNzYWdlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jbWVzc2FnZVNuYXBzaG90O1xuICB9XG5cbiAgY3VycmVudFJ1blN0ZXBTbmFwc2hvdCgpOiBSdW5zLlJ1blN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50UnVuU3RlcFNuYXBzaG90O1xuICB9XG5cbiAgYXN5bmMgZmluYWxSdW5TdGVwcygpOiBQcm9taXNlPFJ1bnMuUnVuU3RlcFtdPiB7XG4gICAgYXdhaXQgdGhpcy5kb25lKCk7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLiNydW5TdGVwU25hcHNob3RzKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmFsTWVzc2FnZXMoKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgICBhd2FpdCB0aGlzLmRvbmUoKTtcblxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuI21lc3NhZ2VTbmFwc2hvdHMpO1xuICB9XG5cbiAgYXN5bmMgZmluYWxSdW4oKTogUHJvbWlzZTxSdW4+IHtcbiAgICBhd2FpdCB0aGlzLmRvbmUoKTtcbiAgICBpZiAoIXRoaXMuI2ZpbmFsUnVuKSB0aHJvdyBFcnJvcignRmluYWwgcnVuIHdhcyBub3QgcmVjZWl2ZWQuJyk7XG5cbiAgICByZXR1cm4gdGhpcy4jZmluYWxSdW47XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgX2NyZWF0ZVRocmVhZEFzc2lzdGFudFN0cmVhbShcbiAgICB0aHJlYWQ6IFRocmVhZHMsXG4gICAgcGFyYW1zOiBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNCYXNlLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPFJ1bj4ge1xuICAgIGNvbnN0IHNpZ25hbCA9IG9wdGlvbnM/LnNpZ25hbDtcbiAgICBpZiAoc2lnbmFsKSB7XG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHRoaXMuY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gdGhpcy5jb250cm9sbGVyLmFib3J0KCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHk6IFJ1bkNyZWF0ZVBhcmFtc1N0cmVhbWluZyA9IHsgLi4ucGFyYW1zLCBzdHJlYW06IHRydWUgfTtcbiAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCB0aHJlYWQuY3JlYXRlQW5kUnVuKGJvZHksIHsgLi4ub3B0aW9ucywgc2lnbmFsOiB0aGlzLmNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgdGhpcy5fY29ubmVjdGVkKCk7XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHN0cmVhbSkge1xuICAgICAgdGhpcy4jYWRkRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoc3RyZWFtLmNvbnRyb2xsZXIuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJVXNlckFib3J0RXJyb3IoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYWRkUnVuKHRoaXMuI2VuZFJlcXVlc3QoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgX2NyZWF0ZUFzc2lzdGFudFN0cmVhbShcbiAgICBydW46IFJ1bnMsXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBwYXJhbXM6IFJ1bkNyZWF0ZVBhcmFtc0Jhc2UsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IFByb21pc2U8UnVuPiB7XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucz8uc2lnbmFsO1xuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhpcy5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keTogUnVuQ3JlYXRlUGFyYW1zU3RyZWFtaW5nID0geyAuLi5wYXJhbXMsIHN0cmVhbTogdHJ1ZSB9O1xuICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IHJ1bi5jcmVhdGUodGhyZWFkSWQsIGJvZHksIHsgLi4ub3B0aW9ucywgc2lnbmFsOiB0aGlzLmNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgdGhpcy5fY29ubmVjdGVkKCk7XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHN0cmVhbSkge1xuICAgICAgdGhpcy4jYWRkRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoc3RyZWFtLmNvbnRyb2xsZXIuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJVXNlckFib3J0RXJyb3IoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYWRkUnVuKHRoaXMuI2VuZFJlcXVlc3QoKSk7XG4gIH1cblxuICAjYWRkRXZlbnQoZXZlbnQ6IEFzc2lzdGFudFN0cmVhbUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZW5kZWQpIHJldHVybjtcblxuICAgIHRoaXMuI2N1cnJlbnRFdmVudCA9IGV2ZW50O1xuXG4gICAgdGhpcy4jaGFuZGxlRXZlbnQoZXZlbnQpO1xuXG4gICAgc3dpdGNoIChldmVudC5ldmVudCkge1xuICAgICAgY2FzZSAndGhyZWFkLmNyZWF0ZWQnOlxuICAgICAgICAvL05vIGFjdGlvbiBvbiB0aGlzIGV2ZW50LlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5jcmVhdGVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4ucXVldWVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uaW5fcHJvZ3Jlc3MnOlxuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5yZXF1aXJlc19hY3Rpb24nOlxuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5jb21wbGV0ZWQnOlxuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5pbmNvbXBsZXRlJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uZmFpbGVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uY2FuY2VsbGluZyc6XG4gICAgICBjYXNlICd0aHJlYWQucnVuLmNhbmNlbGxlZCc6XG4gICAgICBjYXNlICd0aHJlYWQucnVuLmV4cGlyZWQnOlxuICAgICAgICB0aGlzLiNoYW5kbGVSdW4oZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5zdGVwLmNyZWF0ZWQnOlxuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5zdGVwLmluX3Byb2dyZXNzJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uc3RlcC5kZWx0YSc6XG4gICAgICBjYXNlICd0aHJlYWQucnVuLnN0ZXAuY29tcGxldGVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uc3RlcC5mYWlsZWQnOlxuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5zdGVwLmNhbmNlbGxlZCc6XG4gICAgICBjYXNlICd0aHJlYWQucnVuLnN0ZXAuZXhwaXJlZCc6XG4gICAgICAgIHRoaXMuI2hhbmRsZVJ1blN0ZXAoZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGhyZWFkLm1lc3NhZ2UuY3JlYXRlZCc6XG4gICAgICBjYXNlICd0aHJlYWQubWVzc2FnZS5pbl9wcm9ncmVzcyc6XG4gICAgICBjYXNlICd0aHJlYWQubWVzc2FnZS5kZWx0YSc6XG4gICAgICBjYXNlICd0aHJlYWQubWVzc2FnZS5jb21wbGV0ZWQnOlxuICAgICAgY2FzZSAndGhyZWFkLm1lc3NhZ2UuaW5jb21wbGV0ZSc6XG4gICAgICAgIHRoaXMuI2hhbmRsZU1lc3NhZ2UoZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAvL1RoaXMgaXMgaW5jbHVkZWQgZm9yIGNvbXBsZXRlbmVzcywgYnV0IGVycm9ycyBhcmUgcHJvY2Vzc2VkIGluIHRoZSBTU0UgZXZlbnQgcHJvY2Vzc2luZyBzbyB0aGlzIHNob3VsZCBub3Qgb2NjdXJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdFbmNvdW50ZXJlZCBhbiBlcnJvciBldmVudCBpbiBldmVudCBwcm9jZXNzaW5nIC0gZXJyb3JzIHNob3VsZCBiZSBwcm9jZXNzZWQgZWFybGllcicsXG4gICAgICAgICk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnROZXZlcihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgI2VuZFJlcXVlc3QoKTogUnVuIHtcbiAgICBpZiAodGhpcy5lbmRlZCkge1xuICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBzdHJlYW0gaGFzIGVuZGVkLCB0aGlzIHNob3VsZG4ndCBoYXBwZW5gKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuI2ZpbmFsUnVuKSB0aHJvdyBFcnJvcignRmluYWwgcnVuIGhhcyBub3QgYmVlbiByZWNlaXZlZCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuI2ZpbmFsUnVuO1xuICB9XG5cbiAgI2hhbmRsZU1lc3NhZ2UodGhpczogQXNzaXN0YW50U3RyZWFtLCBldmVudDogTWVzc2FnZVN0cmVhbUV2ZW50KSB7XG4gICAgY29uc3QgW2FjY3VtdWxhdGVkTWVzc2FnZSwgbmV3Q29udGVudF0gPSB0aGlzLiNhY2N1bXVsYXRlTWVzc2FnZShldmVudCwgdGhpcy4jbWVzc2FnZVNuYXBzaG90KTtcbiAgICB0aGlzLiNtZXNzYWdlU25hcHNob3QgPSBhY2N1bXVsYXRlZE1lc3NhZ2U7XG4gICAgdGhpcy4jbWVzc2FnZVNuYXBzaG90c1thY2N1bXVsYXRlZE1lc3NhZ2UuaWRdID0gYWNjdW11bGF0ZWRNZXNzYWdlO1xuXG4gICAgZm9yIChjb25zdCBjb250ZW50IG9mIG5ld0NvbnRlbnQpIHtcbiAgICAgIGNvbnN0IHNuYXBzaG90Q29udGVudCA9IGFjY3VtdWxhdGVkTWVzc2FnZS5jb250ZW50W2NvbnRlbnQuaW5kZXhdO1xuICAgICAgaWYgKHNuYXBzaG90Q29udGVudD8udHlwZSA9PSAndGV4dCcpIHtcbiAgICAgICAgdGhpcy5fZW1pdCgndGV4dENyZWF0ZWQnLCBzbmFwc2hvdENvbnRlbnQudGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5ldmVudCkge1xuICAgICAgY2FzZSAndGhyZWFkLm1lc3NhZ2UuY3JlYXRlZCc6XG4gICAgICAgIHRoaXMuX2VtaXQoJ21lc3NhZ2VDcmVhdGVkJywgZXZlbnQuZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd0aHJlYWQubWVzc2FnZS5pbl9wcm9ncmVzcyc6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd0aHJlYWQubWVzc2FnZS5kZWx0YSc6XG4gICAgICAgIHRoaXMuX2VtaXQoJ21lc3NhZ2VEZWx0YScsIGV2ZW50LmRhdGEuZGVsdGEsIGFjY3VtdWxhdGVkTWVzc2FnZSk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuZGVsdGEuY29udGVudCkge1xuICAgICAgICAgIGZvciAoY29uc3QgY29udGVudCBvZiBldmVudC5kYXRhLmRlbHRhLmNvbnRlbnQpIHtcbiAgICAgICAgICAgIC8vSWYgaXQgaXMgdGV4dCBkZWx0YSwgZW1pdCBhIHRleHQgZGVsdGEgZXZlbnRcbiAgICAgICAgICAgIGlmIChjb250ZW50LnR5cGUgPT0gJ3RleHQnICYmIGNvbnRlbnQudGV4dCkge1xuICAgICAgICAgICAgICBsZXQgdGV4dERlbHRhID0gY29udGVudC50ZXh0O1xuICAgICAgICAgICAgICBsZXQgc25hcHNob3QgPSBhY2N1bXVsYXRlZE1lc3NhZ2UuY29udGVudFtjb250ZW50LmluZGV4XTtcbiAgICAgICAgICAgICAgaWYgKHNuYXBzaG90ICYmIHNuYXBzaG90LnR5cGUgPT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgndGV4dERlbHRhJywgdGV4dERlbHRhLCBzbmFwc2hvdC50ZXh0KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignVGhlIHNuYXBzaG90IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRleHQgZGVsdGEgaXMgbm90IHRleHQgb3IgbWlzc2luZycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb250ZW50LmluZGV4ICE9IHRoaXMuI2N1cnJlbnRDb250ZW50SW5kZXgpIHtcbiAgICAgICAgICAgICAgLy9TZWUgaWYgd2UgaGF2ZSBpbiBwcm9ncmVzcyBjb250ZW50XG4gICAgICAgICAgICAgIGlmICh0aGlzLiNjdXJyZW50Q29udGVudCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy4jY3VycmVudENvbnRlbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoJ3RleHREb25lJywgdGhpcy4jY3VycmVudENvbnRlbnQudGV4dCwgdGhpcy4jbWVzc2FnZVNuYXBzaG90KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlICdpbWFnZV9maWxlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgnaW1hZ2VGaWxlRG9uZScsIHRoaXMuI2N1cnJlbnRDb250ZW50LmltYWdlX2ZpbGUsIHRoaXMuI21lc3NhZ2VTbmFwc2hvdCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuI2N1cnJlbnRDb250ZW50SW5kZXggPSBjb250ZW50LmluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiNjdXJyZW50Q29udGVudCA9IGFjY3VtdWxhdGVkTWVzc2FnZS5jb250ZW50W2NvbnRlbnQuaW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd0aHJlYWQubWVzc2FnZS5jb21wbGV0ZWQnOlxuICAgICAgY2FzZSAndGhyZWFkLm1lc3NhZ2UuaW5jb21wbGV0ZSc6XG4gICAgICAgIC8vV2UgZW1pdCB0aGUgbGF0ZXN0IGNvbnRlbnQgd2Ugd2VyZSB3b3JraW5nIG9uIG9uIGNvbXBsZXRpb24gKGluY2x1ZGluZyBpbmNvbXBsZXRlKVxuICAgICAgICBpZiAodGhpcy4jY3VycmVudENvbnRlbnRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBldmVudC5kYXRhLmNvbnRlbnRbdGhpcy4jY3VycmVudENvbnRlbnRJbmRleF07XG4gICAgICAgICAgaWYgKGN1cnJlbnRDb250ZW50KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnRDb250ZW50LnR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnaW1hZ2VfZmlsZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgnaW1hZ2VGaWxlRG9uZScsIGN1cnJlbnRDb250ZW50LmltYWdlX2ZpbGUsIHRoaXMuI21lc3NhZ2VTbmFwc2hvdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoJ3RleHREb25lJywgY3VycmVudENvbnRlbnQudGV4dCwgdGhpcy4jbWVzc2FnZVNuYXBzaG90KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jbWVzc2FnZVNuYXBzaG90KSB7XG4gICAgICAgICAgdGhpcy5fZW1pdCgnbWVzc2FnZURvbmUnLCBldmVudC5kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI21lc3NhZ2VTbmFwc2hvdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAjaGFuZGxlUnVuU3RlcCh0aGlzOiBBc3Npc3RhbnRTdHJlYW0sIGV2ZW50OiBSdW5TdGVwU3RyZWFtRXZlbnQpIHtcbiAgICBjb25zdCBhY2N1bXVsYXRlZFJ1blN0ZXAgPSB0aGlzLiNhY2N1bXVsYXRlUnVuU3RlcChldmVudCk7XG4gICAgdGhpcy4jY3VycmVudFJ1blN0ZXBTbmFwc2hvdCA9IGFjY3VtdWxhdGVkUnVuU3RlcDtcblxuICAgIHN3aXRjaCAoZXZlbnQuZXZlbnQpIHtcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uc3RlcC5jcmVhdGVkJzpcbiAgICAgICAgdGhpcy5fZW1pdCgncnVuU3RlcENyZWF0ZWQnLCBldmVudC5kYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aHJlYWQucnVuLnN0ZXAuZGVsdGEnOlxuICAgICAgICBjb25zdCBkZWx0YSA9IGV2ZW50LmRhdGEuZGVsdGE7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWx0YS5zdGVwX2RldGFpbHMgJiZcbiAgICAgICAgICBkZWx0YS5zdGVwX2RldGFpbHMudHlwZSA9PSAndG9vbF9jYWxscycgJiZcbiAgICAgICAgICBkZWx0YS5zdGVwX2RldGFpbHMudG9vbF9jYWxscyAmJlxuICAgICAgICAgIGFjY3VtdWxhdGVkUnVuU3RlcC5zdGVwX2RldGFpbHMudHlwZSA9PSAndG9vbF9jYWxscydcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB0b29sQ2FsbCBvZiBkZWx0YS5zdGVwX2RldGFpbHMudG9vbF9jYWxscykge1xuICAgICAgICAgICAgaWYgKHRvb2xDYWxsLmluZGV4ID09IHRoaXMuI2N1cnJlbnRUb29sQ2FsbEluZGV4KSB7XG4gICAgICAgICAgICAgIHRoaXMuX2VtaXQoXG4gICAgICAgICAgICAgICAgJ3Rvb2xDYWxsRGVsdGEnLFxuICAgICAgICAgICAgICAgIHRvb2xDYWxsLFxuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVkUnVuU3RlcC5zdGVwX2RldGFpbHMudG9vbF9jYWxsc1t0b29sQ2FsbC5pbmRleF0gYXMgVG9vbENhbGwsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodGhpcy4jY3VycmVudFRvb2xDYWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgndG9vbENhbGxEb25lJywgdGhpcy4jY3VycmVudFRvb2xDYWxsKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuI2N1cnJlbnRUb29sQ2FsbEluZGV4ID0gdG9vbENhbGwuaW5kZXg7XG4gICAgICAgICAgICAgIHRoaXMuI2N1cnJlbnRUb29sQ2FsbCA9IGFjY3VtdWxhdGVkUnVuU3RlcC5zdGVwX2RldGFpbHMudG9vbF9jYWxsc1t0b29sQ2FsbC5pbmRleF07XG4gICAgICAgICAgICAgIGlmICh0aGlzLiNjdXJyZW50VG9vbENhbGwpIHRoaXMuX2VtaXQoJ3Rvb2xDYWxsQ3JlYXRlZCcsIHRoaXMuI2N1cnJlbnRUb29sQ2FsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZW1pdCgncnVuU3RlcERlbHRhJywgZXZlbnQuZGF0YS5kZWx0YSwgYWNjdW11bGF0ZWRSdW5TdGVwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aHJlYWQucnVuLnN0ZXAuY29tcGxldGVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uc3RlcC5mYWlsZWQnOlxuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5zdGVwLmNhbmNlbGxlZCc6XG4gICAgICBjYXNlICd0aHJlYWQucnVuLnN0ZXAuZXhwaXJlZCc6XG4gICAgICAgIHRoaXMuI2N1cnJlbnRSdW5TdGVwU25hcHNob3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSBldmVudC5kYXRhLnN0ZXBfZGV0YWlscztcbiAgICAgICAgaWYgKGRldGFpbHMudHlwZSA9PSAndG9vbF9jYWxscycpIHtcbiAgICAgICAgICBpZiAodGhpcy4jY3VycmVudFRvb2xDYWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KCd0b29sQ2FsbERvbmUnLCB0aGlzLiNjdXJyZW50VG9vbENhbGwgYXMgVG9vbENhbGwpO1xuICAgICAgICAgICAgdGhpcy4jY3VycmVudFRvb2xDYWxsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbWl0KCdydW5TdGVwRG9uZScsIGV2ZW50LmRhdGEsIGFjY3VtdWxhdGVkUnVuU3RlcCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5zdGVwLmluX3Byb2dyZXNzJzpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgI2hhbmRsZUV2ZW50KHRoaXM6IEFzc2lzdGFudFN0cmVhbSwgZXZlbnQ6IEFzc2lzdGFudFN0cmVhbUV2ZW50KSB7XG4gICAgdGhpcy4jZXZlbnRzLnB1c2goZXZlbnQpO1xuICAgIHRoaXMuX2VtaXQoJ2V2ZW50JywgZXZlbnQpO1xuICB9XG5cbiAgI2FjY3VtdWxhdGVSdW5TdGVwKGV2ZW50OiBSdW5TdGVwU3RyZWFtRXZlbnQpOiBSdW5zLlJ1blN0ZXAge1xuICAgIHN3aXRjaCAoZXZlbnQuZXZlbnQpIHtcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uc3RlcC5jcmVhdGVkJzpcbiAgICAgICAgdGhpcy4jcnVuU3RlcFNuYXBzaG90c1tldmVudC5kYXRhLmlkXSA9IGV2ZW50LmRhdGE7XG4gICAgICAgIHJldHVybiBldmVudC5kYXRhO1xuXG4gICAgICBjYXNlICd0aHJlYWQucnVuLnN0ZXAuZGVsdGEnOlxuICAgICAgICBsZXQgc25hcHNob3QgPSB0aGlzLiNydW5TdGVwU25hcHNob3RzW2V2ZW50LmRhdGEuaWRdIGFzIFJ1bnMuUnVuU3RlcDtcbiAgICAgICAgaWYgKCFzbmFwc2hvdCkge1xuICAgICAgICAgIHRocm93IEVycm9yKCdSZWNlaXZlZCBhIFJ1blN0ZXBEZWx0YSBiZWZvcmUgY3JlYXRpb24gb2YgYSBzbmFwc2hvdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRhdGEgPSBldmVudC5kYXRhO1xuXG4gICAgICAgIGlmIChkYXRhLmRlbHRhKSB7XG4gICAgICAgICAgY29uc3QgYWNjdW11bGF0ZWQgPSBBc3Npc3RhbnRTdHJlYW0uYWNjdW11bGF0ZURlbHRhKHNuYXBzaG90LCBkYXRhLmRlbHRhKSBhcyBSdW5zLlJ1blN0ZXA7XG4gICAgICAgICAgdGhpcy4jcnVuU3RlcFNuYXBzaG90c1tldmVudC5kYXRhLmlkXSA9IGFjY3VtdWxhdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI3J1blN0ZXBTbmFwc2hvdHNbZXZlbnQuZGF0YS5pZF0gYXMgUnVucy5SdW5TdGVwO1xuXG4gICAgICBjYXNlICd0aHJlYWQucnVuLnN0ZXAuY29tcGxldGVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uc3RlcC5mYWlsZWQnOlxuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5zdGVwLmNhbmNlbGxlZCc6XG4gICAgICBjYXNlICd0aHJlYWQucnVuLnN0ZXAuZXhwaXJlZCc6XG4gICAgICBjYXNlICd0aHJlYWQucnVuLnN0ZXAuaW5fcHJvZ3Jlc3MnOlxuICAgICAgICB0aGlzLiNydW5TdGVwU25hcHNob3RzW2V2ZW50LmRhdGEuaWRdID0gZXZlbnQuZGF0YTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI3J1blN0ZXBTbmFwc2hvdHNbZXZlbnQuZGF0YS5pZF0pIHJldHVybiB0aGlzLiNydW5TdGVwU25hcHNob3RzW2V2ZW50LmRhdGEuaWRdIGFzIFJ1bnMuUnVuU3RlcDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNuYXBzaG90IGF2YWlsYWJsZScpO1xuICB9XG5cbiAgI2FjY3VtdWxhdGVNZXNzYWdlKFxuICAgIGV2ZW50OiBBc3Npc3RhbnRTdHJlYW1FdmVudCxcbiAgICBzbmFwc2hvdDogTWVzc2FnZSB8IHVuZGVmaW5lZCxcbiAgKTogW01lc3NhZ2UsIE1lc3NhZ2VDb250ZW50RGVsdGFbXV0ge1xuICAgIGxldCBuZXdDb250ZW50OiBNZXNzYWdlQ29udGVudERlbHRhW10gPSBbXTtcblxuICAgIHN3aXRjaCAoZXZlbnQuZXZlbnQpIHtcbiAgICAgIGNhc2UgJ3RocmVhZC5tZXNzYWdlLmNyZWF0ZWQnOlxuICAgICAgICAvL09uIGNyZWF0aW9uIHRoZSBzbmFwc2hvdCBpcyBqdXN0IHRoZSBpbml0aWFsIG1lc3NhZ2VcbiAgICAgICAgcmV0dXJuIFtldmVudC5kYXRhLCBuZXdDb250ZW50XTtcblxuICAgICAgY2FzZSAndGhyZWFkLm1lc3NhZ2UuZGVsdGEnOlxuICAgICAgICBpZiAoIXNuYXBzaG90KSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAnUmVjZWl2ZWQgYSBkZWx0YSB3aXRoIG5vIGV4aXN0aW5nIHNuYXBzaG90ICh0aGVyZSBzaG91bGQgYmUgb25lIGZyb20gbWVzc2FnZSBjcmVhdGlvbiknLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0YSA9IGV2ZW50LmRhdGE7XG5cbiAgICAgICAgLy9JZiB0aGlzIGRlbHRhIGRvZXMgbm90IGhhdmUgY29udGVudCwgbm90aGluZyB0byBwcm9jZXNzXG4gICAgICAgIGlmIChkYXRhLmRlbHRhLmNvbnRlbnQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRlbnRFbGVtZW50IG9mIGRhdGEuZGVsdGEuY29udGVudCkge1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRFbGVtZW50LmluZGV4IGluIHNuYXBzaG90LmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgbGV0IGN1cnJlbnRDb250ZW50ID0gc25hcHNob3QuY29udGVudFtjb250ZW50RWxlbWVudC5pbmRleF07XG4gICAgICAgICAgICAgIHNuYXBzaG90LmNvbnRlbnRbY29udGVudEVsZW1lbnQuaW5kZXhdID0gdGhpcy4jYWNjdW11bGF0ZUNvbnRlbnQoXG4gICAgICAgICAgICAgICAgY29udGVudEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgY3VycmVudENvbnRlbnQsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzbmFwc2hvdC5jb250ZW50W2NvbnRlbnRFbGVtZW50LmluZGV4XSA9IGNvbnRlbnRFbGVtZW50IGFzIE1lc3NhZ2VDb250ZW50O1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKGNvbnRlbnRFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3NuYXBzaG90LCBuZXdDb250ZW50XTtcblxuICAgICAgY2FzZSAndGhyZWFkLm1lc3NhZ2UuaW5fcHJvZ3Jlc3MnOlxuICAgICAgY2FzZSAndGhyZWFkLm1lc3NhZ2UuY29tcGxldGVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5tZXNzYWdlLmluY29tcGxldGUnOlxuICAgICAgICAvL05vIGNoYW5nZXMgb24gb3RoZXIgdGhyZWFkIGV2ZW50c1xuICAgICAgICBpZiAoc25hcHNob3QpIHtcbiAgICAgICAgICByZXR1cm4gW3NuYXBzaG90LCBuZXdDb250ZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcignUmVjZWl2ZWQgdGhyZWFkIG1lc3NhZ2UgZXZlbnQgd2l0aCBubyBleGlzdGluZyBzbmFwc2hvdCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IEVycm9yKCdUcmllZCB0byBhY2N1bXVsYXRlIGEgbm9uLW1lc3NhZ2UgZXZlbnQnKTtcbiAgfVxuXG4gICNhY2N1bXVsYXRlQ29udGVudChcbiAgICBjb250ZW50RWxlbWVudDogTWVzc2FnZUNvbnRlbnREZWx0YSxcbiAgICBjdXJyZW50Q29udGVudDogTWVzc2FnZUNvbnRlbnQgfCB1bmRlZmluZWQsXG4gICk6IFRleHRDb250ZW50QmxvY2sgfCBJbWFnZUZpbGVDb250ZW50QmxvY2sge1xuICAgIHJldHVybiBBc3Npc3RhbnRTdHJlYW0uYWNjdW11bGF0ZURlbHRhKGN1cnJlbnRDb250ZW50IGFzIHVua25vd24gYXMgUmVjb3JkPGFueSwgYW55PiwgY29udGVudEVsZW1lbnQpIGFzXG4gICAgICB8IFRleHRDb250ZW50QmxvY2tcbiAgICAgIHwgSW1hZ2VGaWxlQ29udGVudEJsb2NrO1xuICB9XG5cbiAgc3RhdGljIGFjY3VtdWxhdGVEZWx0YShhY2M6IFJlY29yZDxzdHJpbmcsIGFueT4sIGRlbHRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgZm9yIChjb25zdCBba2V5LCBkZWx0YVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWx0YSkpIHtcbiAgICAgIGlmICghYWNjLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBkZWx0YVZhbHVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGFjY1ZhbHVlID0gYWNjW2tleV07XG4gICAgICBpZiAoYWNjVmFsdWUgPT09IG51bGwgfHwgYWNjVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY2Nba2V5XSA9IGRlbHRhVmFsdWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBkb24ndCBhY2N1bXVsYXRlIHRoZXNlIHNwZWNpYWwgcHJvcGVydGllc1xuICAgICAgaWYgKGtleSA9PT0gJ2luZGV4JyB8fCBrZXkgPT09ICd0eXBlJykge1xuICAgICAgICBhY2Nba2V5XSA9IGRlbHRhVmFsdWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUeXBlLXNwZWNpZmljIGFjY3VtdWxhdGlvbiBsb2dpY1xuICAgICAgaWYgKHR5cGVvZiBhY2NWYWx1ZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGRlbHRhVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGFjY1ZhbHVlICs9IGRlbHRhVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY2NWYWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGRlbHRhVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGFjY1ZhbHVlICs9IGRlbHRhVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKENvcmUuaXNPYmooYWNjVmFsdWUpICYmIENvcmUuaXNPYmooZGVsdGFWYWx1ZSkpIHtcbiAgICAgICAgYWNjVmFsdWUgPSB0aGlzLmFjY3VtdWxhdGVEZWx0YShhY2NWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBkZWx0YVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFjY1ZhbHVlKSAmJiBBcnJheS5pc0FycmF5KGRlbHRhVmFsdWUpKSB7XG4gICAgICAgIGlmIChhY2NWYWx1ZS5ldmVyeSgoeCkgPT4gdHlwZW9mIHggPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB4ID09PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICBhY2NWYWx1ZS5wdXNoKC4uLmRlbHRhVmFsdWUpOyAvLyBVc2Ugc3ByZWFkIHN5bnRheCBmb3IgZWZmaWNpZW50IGFkZGl0aW9uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGRlbHRhRW50cnkgb2YgZGVsdGFWYWx1ZSkge1xuICAgICAgICAgIGlmICghQ29yZS5pc09iaihkZWx0YUVudHJ5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSBkZWx0YSBlbnRyeSB0byBiZSBhbiBvYmplY3QgYnV0IGdvdDogJHtkZWx0YUVudHJ5fWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGVsdGFFbnRyeVsnaW5kZXgnXTtcbiAgICAgICAgICBpZiAoaW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihkZWx0YUVudHJ5KTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYXJyYXkgZGVsdGEgZW50cnkgdG8gaGF2ZSBhbiBgaW5kZXhgIHByb3BlcnR5Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkgZGVsdGEgZW50cnkgXFxgaW5kZXhcXGAgcHJvcGVydHkgdG8gYmUgYSBudW1iZXIgYnV0IGdvdCAke2luZGV4fWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGFjY0VudHJ5ID0gYWNjVmFsdWVbaW5kZXhdO1xuICAgICAgICAgIGlmIChhY2NFbnRyeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBhY2NWYWx1ZS5wdXNoKGRlbHRhRW50cnkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2NWYWx1ZVtpbmRleF0gPSB0aGlzLmFjY3VtdWxhdGVEZWx0YShhY2NFbnRyeSwgZGVsdGFFbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYFVuaGFuZGxlZCByZWNvcmQgdHlwZTogJHtrZXl9LCBkZWx0YVZhbHVlOiAke2RlbHRhVmFsdWV9LCBhY2NWYWx1ZTogJHthY2NWYWx1ZX1gKTtcbiAgICAgIH1cbiAgICAgIGFjY1trZXldID0gYWNjVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gICNoYW5kbGVSdW4odGhpczogQXNzaXN0YW50U3RyZWFtLCBldmVudDogUnVuU3RyZWFtRXZlbnQpIHtcbiAgICB0aGlzLiNjdXJyZW50UnVuU25hcHNob3QgPSBldmVudC5kYXRhO1xuICAgIHN3aXRjaCAoZXZlbnQuZXZlbnQpIHtcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uY3JlYXRlZCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5xdWV1ZWQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uaW5fcHJvZ3Jlc3MnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4ucmVxdWlyZXNfYWN0aW9uJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uY2FuY2VsbGVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uZmFpbGVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uY29tcGxldGVkJzpcbiAgICAgIGNhc2UgJ3RocmVhZC5ydW4uZXhwaXJlZCc6XG4gICAgICAgIHRoaXMuI2ZpbmFsUnVuID0gZXZlbnQuZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuI2N1cnJlbnRUb29sQ2FsbCkge1xuICAgICAgICAgIHRoaXMuX2VtaXQoJ3Rvb2xDYWxsRG9uZScsIHRoaXMuI2N1cnJlbnRUb29sQ2FsbCk7XG4gICAgICAgICAgdGhpcy4jY3VycmVudFRvb2xDYWxsID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGhyZWFkLnJ1bi5jYW5jZWxsaW5nJzpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9hZGRSdW4ocnVuOiBSdW4pOiBSdW4ge1xuICAgIHJldHVybiBydW47XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgX3RocmVhZEFzc2lzdGFudFN0cmVhbShcbiAgICBwYXJhbXM6IFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtc0Jhc2UsXG4gICAgdGhyZWFkOiBUaHJlYWRzLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPFJ1bj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jcmVhdGVUaHJlYWRBc3Npc3RhbnRTdHJlYW0odGhyZWFkLCBwYXJhbXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9ydW5Bc3Npc3RhbnRTdHJlYW0oXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBydW5zOiBSdW5zLFxuICAgIHBhcmFtczogUnVuQ3JlYXRlUGFyYW1zQmFzZSxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxSdW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY3JlYXRlQXNzaXN0YW50U3RyZWFtKHJ1bnMsIHRocmVhZElkLCBwYXJhbXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9ydW5Ub29sQXNzaXN0YW50U3RyZWFtKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBydW5zOiBSdW5zLFxuICAgIHBhcmFtczogUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXNTdHJlYW0sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IFByb21pc2U8UnVuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2NyZWF0ZVRvb2xBc3Npc3RhbnRTdHJlYW0ocnVucywgdGhyZWFkSWQsIHJ1bklkLCBwYXJhbXMsIG9wdGlvbnMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKF94OiBuZXZlcikge31cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCB7IGlzUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBTaGFyZWQgZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCAqIGFzIEFzc2lzdGFudHNBUEkgZnJvbSAnLi4vYXNzaXN0YW50cyc7XG5pbXBvcnQgeyBDdXJzb3JQYWdlLCB0eXBlIEN1cnNvclBhZ2VQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi9wYWdpbmF0aW9uJztcblxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbWVzc2FnZS5cbiAgICovXG4gIGNyZWF0ZShcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIGJvZHk6IE1lc3NhZ2VDcmVhdGVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxNZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KGAvdGhyZWFkcy8ke3RocmVhZElkfS9tZXNzYWdlc2AsIHtcbiAgICAgIGJvZHksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIG1lc3NhZ2UuXG4gICAqL1xuICByZXRyaWV2ZSh0aHJlYWRJZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkFQSVByb21pc2U8TWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0KGAvdGhyZWFkcy8ke3RocmVhZElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH1gLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmllcyBhIG1lc3NhZ2UuXG4gICAqL1xuICB1cGRhdGUoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBib2R5OiBNZXNzYWdlVXBkYXRlUGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLkFQSVByb21pc2U8TWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdChgL3RocmVhZHMvJHt0aHJlYWRJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9YCwge1xuICAgICAgYm9keSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIG1lc3NhZ2VzIGZvciBhIGdpdmVuIHRocmVhZC5cbiAgICovXG4gIGxpc3QoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBxdWVyeT86IE1lc3NhZ2VMaXN0UGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPE1lc3NhZ2VzUGFnZSwgTWVzc2FnZT47XG4gIGxpc3QodGhyZWFkSWQ6IHN0cmluZywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLlBhZ2VQcm9taXNlPE1lc3NhZ2VzUGFnZSwgTWVzc2FnZT47XG4gIGxpc3QoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBxdWVyeTogTWVzc2FnZUxpc3RQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8TWVzc2FnZXNQYWdlLCBNZXNzYWdlPiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0KHRocmVhZElkLCB7fSwgcXVlcnkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldEFQSUxpc3QoYC90aHJlYWRzLyR7dGhyZWFkSWR9L21lc3NhZ2VzYCwgTWVzc2FnZXNQYWdlLCB7XG4gICAgICBxdWVyeSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBtZXNzYWdlLlxuICAgKi9cbiAgZGVsKHRocmVhZElkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxNZXNzYWdlRGVsZXRlZD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZGVsZXRlKGAvdGhyZWFkcy8ke3RocmVhZElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH1gLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWVzc2FnZXNQYWdlIGV4dGVuZHMgQ3Vyc29yUGFnZTxNZXNzYWdlPiB7fVxuXG4vKipcbiAqIEEgY2l0YXRpb24gd2l0aGluIHRoZSBtZXNzYWdlIHRoYXQgcG9pbnRzIHRvIGEgc3BlY2lmaWMgcXVvdGUgZnJvbSBhIHNwZWNpZmljXG4gKiBGaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzaXN0YW50IG9yIHRoZSBtZXNzYWdlLiBHZW5lcmF0ZWQgd2hlbiB0aGUgYXNzaXN0YW50XG4gKiB1c2VzIHRoZSBcImZpbGVfc2VhcmNoXCIgdG9vbCB0byBzZWFyY2ggZmlsZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFubm90YXRpb24gPSBGaWxlQ2l0YXRpb25Bbm5vdGF0aW9uIHwgRmlsZVBhdGhBbm5vdGF0aW9uO1xuXG4vKipcbiAqIEEgY2l0YXRpb24gd2l0aGluIHRoZSBtZXNzYWdlIHRoYXQgcG9pbnRzIHRvIGEgc3BlY2lmaWMgcXVvdGUgZnJvbSBhIHNwZWNpZmljXG4gKiBGaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzaXN0YW50IG9yIHRoZSBtZXNzYWdlLiBHZW5lcmF0ZWQgd2hlbiB0aGUgYXNzaXN0YW50XG4gKiB1c2VzIHRoZSBcImZpbGVfc2VhcmNoXCIgdG9vbCB0byBzZWFyY2ggZmlsZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFubm90YXRpb25EZWx0YSA9IEZpbGVDaXRhdGlvbkRlbHRhQW5ub3RhdGlvbiB8IEZpbGVQYXRoRGVsdGFBbm5vdGF0aW9uO1xuXG4vKipcbiAqIEEgY2l0YXRpb24gd2l0aGluIHRoZSBtZXNzYWdlIHRoYXQgcG9pbnRzIHRvIGEgc3BlY2lmaWMgcXVvdGUgZnJvbSBhIHNwZWNpZmljXG4gKiBGaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzaXN0YW50IG9yIHRoZSBtZXNzYWdlLiBHZW5lcmF0ZWQgd2hlbiB0aGUgYXNzaXN0YW50XG4gKiB1c2VzIHRoZSBcImZpbGVfc2VhcmNoXCIgdG9vbCB0byBzZWFyY2ggZmlsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUNpdGF0aW9uQW5ub3RhdGlvbiB7XG4gIGVuZF9pbmRleDogbnVtYmVyO1xuXG4gIGZpbGVfY2l0YXRpb246IEZpbGVDaXRhdGlvbkFubm90YXRpb24uRmlsZUNpdGF0aW9uO1xuXG4gIHN0YXJ0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGluIHRoZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCBuZWVkcyB0byBiZSByZXBsYWNlZC5cbiAgICovXG4gIHRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWx3YXlzIGBmaWxlX2NpdGF0aW9uYC5cbiAgICovXG4gIHR5cGU6ICdmaWxlX2NpdGF0aW9uJztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGaWxlQ2l0YXRpb25Bbm5vdGF0aW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBGaWxlQ2l0YXRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgc3BlY2lmaWMgRmlsZSB0aGUgY2l0YXRpb24gaXMgZnJvbS5cbiAgICAgKi9cbiAgICBmaWxlX2lkOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNpdGF0aW9uIHdpdGhpbiB0aGUgbWVzc2FnZSB0aGF0IHBvaW50cyB0byBhIHNwZWNpZmljIHF1b3RlIGZyb20gYSBzcGVjaWZpY1xuICogRmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGFzc2lzdGFudCBvciB0aGUgbWVzc2FnZS4gR2VuZXJhdGVkIHdoZW4gdGhlIGFzc2lzdGFudFxuICogdXNlcyB0aGUgXCJmaWxlX3NlYXJjaFwiIHRvb2wgdG8gc2VhcmNoIGZpbGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDaXRhdGlvbkRlbHRhQW5ub3RhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGFubm90YXRpb24gaW4gdGhlIHRleHQgY29udGVudCBwYXJ0LlxuICAgKi9cbiAgaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogQWx3YXlzIGBmaWxlX2NpdGF0aW9uYC5cbiAgICovXG4gIHR5cGU6ICdmaWxlX2NpdGF0aW9uJztcblxuICBlbmRfaW5kZXg/OiBudW1iZXI7XG5cbiAgZmlsZV9jaXRhdGlvbj86IEZpbGVDaXRhdGlvbkRlbHRhQW5ub3RhdGlvbi5GaWxlQ2l0YXRpb247XG5cbiAgc3RhcnRfaW5kZXg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGluIHRoZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCBuZWVkcyB0byBiZSByZXBsYWNlZC5cbiAgICovXG4gIHRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmlsZUNpdGF0aW9uRGVsdGFBbm5vdGF0aW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBGaWxlQ2l0YXRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgc3BlY2lmaWMgRmlsZSB0aGUgY2l0YXRpb24gaXMgZnJvbS5cbiAgICAgKi9cbiAgICBmaWxlX2lkPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNwZWNpZmljIHF1b3RlIGluIHRoZSBmaWxlLlxuICAgICAqL1xuICAgIHF1b3RlPzogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogQSBVUkwgZm9yIHRoZSBmaWxlIHRoYXQncyBnZW5lcmF0ZWQgd2hlbiB0aGUgYXNzaXN0YW50IHVzZWQgdGhlXG4gKiBgY29kZV9pbnRlcnByZXRlcmAgdG9vbCB0byBnZW5lcmF0ZSBhIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVBhdGhBbm5vdGF0aW9uIHtcbiAgZW5kX2luZGV4OiBudW1iZXI7XG5cbiAgZmlsZV9wYXRoOiBGaWxlUGF0aEFubm90YXRpb24uRmlsZVBhdGg7XG5cbiAgc3RhcnRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRleHQgaW4gdGhlIG1lc3NhZ2UgY29udGVudCB0aGF0IG5lZWRzIHRvIGJlIHJlcGxhY2VkLlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbHdheXMgYGZpbGVfcGF0aGAuXG4gICAqL1xuICB0eXBlOiAnZmlsZV9wYXRoJztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGaWxlUGF0aEFubm90YXRpb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIEZpbGVQYXRoIHtcbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIGZpbGUgdGhhdCB3YXMgZ2VuZXJhdGVkLlxuICAgICAqL1xuICAgIGZpbGVfaWQ6IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIEEgVVJMIGZvciB0aGUgZmlsZSB0aGF0J3MgZ2VuZXJhdGVkIHdoZW4gdGhlIGFzc2lzdGFudCB1c2VkIHRoZVxuICogYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgdG8gZ2VuZXJhdGUgYSBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVQYXRoRGVsdGFBbm5vdGF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgYW5ub3RhdGlvbiBpbiB0aGUgdGV4dCBjb250ZW50IHBhcnQuXG4gICAqL1xuICBpbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbHdheXMgYGZpbGVfcGF0aGAuXG4gICAqL1xuICB0eXBlOiAnZmlsZV9wYXRoJztcblxuICBlbmRfaW5kZXg/OiBudW1iZXI7XG5cbiAgZmlsZV9wYXRoPzogRmlsZVBhdGhEZWx0YUFubm90YXRpb24uRmlsZVBhdGg7XG5cbiAgc3RhcnRfaW5kZXg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGluIHRoZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCBuZWVkcyB0byBiZSByZXBsYWNlZC5cbiAgICovXG4gIHRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmlsZVBhdGhEZWx0YUFubm90YXRpb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIEZpbGVQYXRoIHtcbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIGZpbGUgdGhhdCB3YXMgZ2VuZXJhdGVkLlxuICAgICAqL1xuICAgIGZpbGVfaWQ/OiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZUZpbGUge1xuICAvKipcbiAgICogVGhlIFtGaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzKSBJRCBvZiB0aGUgaW1hZ2VcbiAgICogaW4gdGhlIG1lc3NhZ2UgY29udGVudC4gU2V0IGBwdXJwb3NlPVwidmlzaW9uXCJgIHdoZW4gdXBsb2FkaW5nIHRoZSBGaWxlIGlmIHlvdVxuICAgKiBuZWVkIHRvIGxhdGVyIGRpc3BsYXkgdGhlIGZpbGUgY29udGVudC5cbiAgICovXG4gIGZpbGVfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkZXRhaWwgbGV2ZWwgb2YgdGhlIGltYWdlIGlmIHNwZWNpZmllZCBieSB0aGUgdXNlci4gYGxvd2AgdXNlc1xuICAgKiBmZXdlciB0b2tlbnMsIHlvdSBjYW4gb3B0IGluIHRvIGhpZ2ggcmVzb2x1dGlvbiB1c2luZyBgaGlnaGAuXG4gICAqL1xuICBkZXRhaWw/OiAnYXV0bycgfCAnbG93JyB8ICdoaWdoJztcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2VzIGFuIGltYWdlIFtGaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzKVxuICogaW4gdGhlIGNvbnRlbnQgb2YgYSBtZXNzYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlRmlsZUNvbnRlbnRCbG9jayB7XG4gIGltYWdlX2ZpbGU6IEltYWdlRmlsZTtcblxuICAvKipcbiAgICogQWx3YXlzIGBpbWFnZV9maWxlYC5cbiAgICovXG4gIHR5cGU6ICdpbWFnZV9maWxlJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZUZpbGVEZWx0YSB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRldGFpbCBsZXZlbCBvZiB0aGUgaW1hZ2UgaWYgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLiBgbG93YCB1c2VzXG4gICAqIGZld2VyIHRva2VucywgeW91IGNhbiBvcHQgaW4gdG8gaGlnaCByZXNvbHV0aW9uIHVzaW5nIGBoaWdoYC5cbiAgICovXG4gIGRldGFpbD86ICdhdXRvJyB8ICdsb3cnIHwgJ2hpZ2gnO1xuXG4gIC8qKlxuICAgKiBUaGUgW0ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIElEIG9mIHRoZSBpbWFnZVxuICAgKiBpbiB0aGUgbWVzc2FnZSBjb250ZW50LiBTZXQgYHB1cnBvc2U9XCJ2aXNpb25cImAgd2hlbiB1cGxvYWRpbmcgdGhlIEZpbGUgaWYgeW91XG4gICAqIG5lZWQgdG8gbGF0ZXIgZGlzcGxheSB0aGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgZmlsZV9pZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2VzIGFuIGltYWdlIFtGaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzKVxuICogaW4gdGhlIGNvbnRlbnQgb2YgYSBtZXNzYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlRmlsZURlbHRhQmxvY2sge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBjb250ZW50IHBhcnQgaW4gdGhlIG1lc3NhZ2UuXG4gICAqL1xuICBpbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbHdheXMgYGltYWdlX2ZpbGVgLlxuICAgKi9cbiAgdHlwZTogJ2ltYWdlX2ZpbGUnO1xuXG4gIGltYWdlX2ZpbGU/OiBJbWFnZUZpbGVEZWx0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZVVSTCB7XG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgVVJMIG9mIHRoZSBpbWFnZSwgbXVzdCBiZSBhIHN1cHBvcnRlZCBpbWFnZSB0eXBlczoganBlZywganBnLCBwbmcsXG4gICAqIGdpZiwgd2VicC5cbiAgICovXG4gIHVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRldGFpbCBsZXZlbCBvZiB0aGUgaW1hZ2UuIGBsb3dgIHVzZXMgZmV3ZXIgdG9rZW5zLCB5b3UgY2FuIG9wdCBpblxuICAgKiB0byBoaWdoIHJlc29sdXRpb24gdXNpbmcgYGhpZ2hgLiBEZWZhdWx0IHZhbHVlIGlzIGBhdXRvYFxuICAgKi9cbiAgZGV0YWlsPzogJ2F1dG8nIHwgJ2xvdycgfCAnaGlnaCc7XG59XG5cbi8qKlxuICogUmVmZXJlbmNlcyBhbiBpbWFnZSBVUkwgaW4gdGhlIGNvbnRlbnQgb2YgYSBtZXNzYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlVVJMQ29udGVudEJsb2NrIHtcbiAgaW1hZ2VfdXJsOiBJbWFnZVVSTDtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbnRlbnQgcGFydC5cbiAgICovXG4gIHR5cGU6ICdpbWFnZV91cmwnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlVVJMRGVsdGEge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkZXRhaWwgbGV2ZWwgb2YgdGhlIGltYWdlLiBgbG93YCB1c2VzIGZld2VyIHRva2VucywgeW91IGNhbiBvcHQgaW5cbiAgICogdG8gaGlnaCByZXNvbHV0aW9uIHVzaW5nIGBoaWdoYC5cbiAgICovXG4gIGRldGFpbD86ICdhdXRvJyB8ICdsb3cnIHwgJ2hpZ2gnO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBpbWFnZSwgbXVzdCBiZSBhIHN1cHBvcnRlZCBpbWFnZSB0eXBlczoganBlZywganBnLCBwbmcsIGdpZixcbiAgICogd2VicC5cbiAgICovXG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2VzIGFuIGltYWdlIFVSTCBpbiB0aGUgY29udGVudCBvZiBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VVUkxEZWx0YUJsb2NrIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgY29udGVudCBwYXJ0IGluIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogQWx3YXlzIGBpbWFnZV91cmxgLlxuICAgKi9cbiAgdHlwZTogJ2ltYWdlX3VybCc7XG5cbiAgaW1hZ2VfdXJsPzogSW1hZ2VVUkxEZWx0YTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbWVzc2FnZSB3aXRoaW4gYVxuICogW3RocmVhZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS90aHJlYWRzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyLCB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBpbiBBUEkgZW5kcG9pbnRzLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYXBwbGljYWJsZSwgdGhlIElEIG9mIHRoZVxuICAgKiBbYXNzaXN0YW50XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2Fzc2lzdGFudHMpIHRoYXRcbiAgICogYXV0aG9yZWQgdGhpcyBtZXNzYWdlLlxuICAgKi9cbiAgYXNzaXN0YW50X2lkOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZmlsZXMgYXR0YWNoZWQgdG8gdGhlIG1lc3NhZ2UsIGFuZCB0aGUgdG9vbHMgdGhleSB3ZXJlIGFkZGVkIHRvLlxuICAgKi9cbiAgYXR0YWNobWVudHM6IEFycmF5PE1lc3NhZ2UuQXR0YWNobWVudD4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSBtZXNzYWdlIHdhcyBjb21wbGV0ZWQuXG4gICAqL1xuICBjb21wbGV0ZWRfYXQ6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlIGluIGFycmF5IG9mIHRleHQgYW5kL29yIGltYWdlcy5cbiAgICovXG4gIGNvbnRlbnQ6IEFycmF5PE1lc3NhZ2VDb250ZW50PjtcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgbWVzc2FnZSB3YXMgY3JlYXRlZC5cbiAgICovXG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgbWVzc2FnZSB3YXMgbWFya2VkIGFzIGluY29tcGxldGUuXG4gICAqL1xuICBpbmNvbXBsZXRlX2F0OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBPbiBhbiBpbmNvbXBsZXRlIG1lc3NhZ2UsIGRldGFpbHMgYWJvdXQgd2h5IHRoZSBtZXNzYWdlIGlzIGluY29tcGxldGUuXG4gICAqL1xuICBpbmNvbXBsZXRlX2RldGFpbHM6IE1lc3NhZ2UuSW5jb21wbGV0ZURldGFpbHMgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgKlxuICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbWV0YWRhdGE6IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSwgd2hpY2ggaXMgYWx3YXlzIGB0aHJlYWQubWVzc2FnZWAuXG4gICAqL1xuICBvYmplY3Q6ICd0aHJlYWQubWVzc2FnZSc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnRpdHkgdGhhdCBwcm9kdWNlZCB0aGUgbWVzc2FnZS4gT25lIG9mIGB1c2VyYCBvciBgYXNzaXN0YW50YC5cbiAgICovXG4gIHJvbGU6ICd1c2VyJyB8ICdhc3Npc3RhbnQnO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFtydW5dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvcnVucylcbiAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBjcmVhdGlvbiBvZiB0aGlzIG1lc3NhZ2UuIFZhbHVlIGlzIGBudWxsYCB3aGVuIG1lc3NhZ2VzIGFyZVxuICAgKiBjcmVhdGVkIG1hbnVhbGx5IHVzaW5nIHRoZSBjcmVhdGUgbWVzc2FnZSBvciBjcmVhdGUgdGhyZWFkIGVuZHBvaW50cy5cbiAgICovXG4gIHJ1bl9pZDogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgbWVzc2FnZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBgaW5fcHJvZ3Jlc3NgLCBgaW5jb21wbGV0ZWAsIG9yXG4gICAqIGBjb21wbGV0ZWRgLlxuICAgKi9cbiAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnIHwgJ2luY29tcGxldGUnIHwgJ2NvbXBsZXRlZCc7XG5cbiAgLyoqXG4gICAqIFRoZSBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpIElEIHRoYXRcbiAgICogdGhpcyBtZXNzYWdlIGJlbG9uZ3MgdG8uXG4gICAqL1xuICB0aHJlYWRfaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBNZXNzYWdlIHtcbiAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIGZpbGUgdG8gYXR0YWNoIHRvIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIGZpbGVfaWQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdG9vbHMgdG8gYWRkIHRoaXMgZmlsZSB0by5cbiAgICAgKi9cbiAgICB0b29scz86IEFycmF5PEFzc2lzdGFudHNBUEkuQ29kZUludGVycHJldGVyVG9vbCB8IEF0dGFjaG1lbnQuQXNzaXN0YW50VG9vbHNGaWxlU2VhcmNoVHlwZU9ubHk+O1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBBdHRhY2htZW50IHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzc2lzdGFudFRvb2xzRmlsZVNlYXJjaFR5cGVPbmx5IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIHR5cGUgb2YgdG9vbCBiZWluZyBkZWZpbmVkOiBgZmlsZV9zZWFyY2hgXG4gICAgICAgKi9cbiAgICAgIHR5cGU6ICdmaWxlX3NlYXJjaCc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9uIGFuIGluY29tcGxldGUgbWVzc2FnZSwgZGV0YWlscyBhYm91dCB3aHkgdGhlIG1lc3NhZ2UgaXMgaW5jb21wbGV0ZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5jb21wbGV0ZURldGFpbHMge1xuICAgIC8qKlxuICAgICAqIFRoZSByZWFzb24gdGhlIG1lc3NhZ2UgaXMgaW5jb21wbGV0ZS5cbiAgICAgKi9cbiAgICByZWFzb246ICdjb250ZW50X2ZpbHRlcicgfCAnbWF4X3Rva2VucycgfCAncnVuX2NhbmNlbGxlZCcgfCAncnVuX2V4cGlyZWQnIHwgJ3J1bl9mYWlsZWQnO1xuICB9XG59XG5cbi8qKlxuICogUmVmZXJlbmNlcyBhbiBpbWFnZSBbRmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcylcbiAqIGluIHRoZSBjb250ZW50IG9mIGEgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZUNvbnRlbnQgPVxuICB8IEltYWdlRmlsZUNvbnRlbnRCbG9ja1xuICB8IEltYWdlVVJMQ29udGVudEJsb2NrXG4gIHwgVGV4dENvbnRlbnRCbG9ja1xuICB8IFJlZnVzYWxDb250ZW50QmxvY2s7XG5cbi8qKlxuICogUmVmZXJlbmNlcyBhbiBpbWFnZSBbRmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcylcbiAqIGluIHRoZSBjb250ZW50IG9mIGEgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZUNvbnRlbnREZWx0YSA9XG4gIHwgSW1hZ2VGaWxlRGVsdGFCbG9ja1xuICB8IFRleHREZWx0YUJsb2NrXG4gIHwgUmVmdXNhbERlbHRhQmxvY2tcbiAgfCBJbWFnZVVSTERlbHRhQmxvY2s7XG5cbi8qKlxuICogUmVmZXJlbmNlcyBhbiBpbWFnZSBbRmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcylcbiAqIGluIHRoZSBjb250ZW50IG9mIGEgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZUNvbnRlbnRQYXJ0UGFyYW0gPSBJbWFnZUZpbGVDb250ZW50QmxvY2sgfCBJbWFnZVVSTENvbnRlbnRCbG9jayB8IFRleHRDb250ZW50QmxvY2tQYXJhbTtcblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRGVsZXRlZCB7XG4gIGlkOiBzdHJpbmc7XG5cbiAgZGVsZXRlZDogYm9vbGVhbjtcblxuICBvYmplY3Q6ICd0aHJlYWQubWVzc2FnZS5kZWxldGVkJztcbn1cblxuLyoqXG4gKiBUaGUgZGVsdGEgY29udGFpbmluZyB0aGUgZmllbGRzIHRoYXQgaGF2ZSBjaGFuZ2VkIG9uIHRoZSBNZXNzYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VEZWx0YSB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgbWVzc2FnZSBpbiBhcnJheSBvZiB0ZXh0IGFuZC9vciBpbWFnZXMuXG4gICAqL1xuICBjb250ZW50PzogQXJyYXk8TWVzc2FnZUNvbnRlbnREZWx0YT47XG5cbiAgLyoqXG4gICAqIFRoZSBlbnRpdHkgdGhhdCBwcm9kdWNlZCB0aGUgbWVzc2FnZS4gT25lIG9mIGB1c2VyYCBvciBgYXNzaXN0YW50YC5cbiAgICovXG4gIHJvbGU/OiAndXNlcicgfCAnYXNzaXN0YW50Jztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbWVzc2FnZSBkZWx0YSBpLmUuIGFueSBjaGFuZ2VkIGZpZWxkcyBvbiBhIG1lc3NhZ2UgZHVyaW5nXG4gKiBzdHJlYW1pbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZURlbHRhRXZlbnQge1xuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIG1lc3NhZ2UsIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGluIEFQSSBlbmRwb2ludHMuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVsdGEgY29udGFpbmluZyB0aGUgZmllbGRzIHRoYXQgaGF2ZSBjaGFuZ2VkIG9uIHRoZSBNZXNzYWdlLlxuICAgKi9cbiAgZGVsdGE6IE1lc3NhZ2VEZWx0YTtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0eXBlLCB3aGljaCBpcyBhbHdheXMgYHRocmVhZC5tZXNzYWdlLmRlbHRhYC5cbiAgICovXG4gIG9iamVjdDogJ3RocmVhZC5tZXNzYWdlLmRlbHRhJztcbn1cblxuLyoqXG4gKiBUaGUgcmVmdXNhbCBjb250ZW50IGdlbmVyYXRlZCBieSB0aGUgYXNzaXN0YW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnVzYWxDb250ZW50QmxvY2sge1xuICByZWZ1c2FsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBgcmVmdXNhbGAuXG4gICAqL1xuICB0eXBlOiAncmVmdXNhbCc7XG59XG5cbi8qKlxuICogVGhlIHJlZnVzYWwgY29udGVudCB0aGF0IGlzIHBhcnQgb2YgYSBtZXNzYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnVzYWxEZWx0YUJsb2NrIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgcmVmdXNhbCBwYXJ0IGluIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogQWx3YXlzIGByZWZ1c2FsYC5cbiAgICovXG4gIHR5cGU6ICdyZWZ1c2FsJztcblxuICByZWZ1c2FsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRleHQge1xuICBhbm5vdGF0aW9uczogQXJyYXk8QW5ub3RhdGlvbj47XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHRoYXQgbWFrZXMgdXAgdGhlIHRleHQuXG4gICAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSB0ZXh0IGNvbnRlbnQgdGhhdCBpcyBwYXJ0IG9mIGEgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0Q29udGVudEJsb2NrIHtcbiAgdGV4dDogVGV4dDtcblxuICAvKipcbiAgICogQWx3YXlzIGB0ZXh0YC5cbiAgICovXG4gIHR5cGU6ICd0ZXh0Jztcbn1cblxuLyoqXG4gKiBUaGUgdGV4dCBjb250ZW50IHRoYXQgaXMgcGFydCBvZiBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dENvbnRlbnRCbG9ja1BhcmFtIHtcbiAgLyoqXG4gICAqIFRleHQgY29udGVudCB0byBiZSBzZW50IHRvIHRoZSBtb2RlbFxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbHdheXMgYHRleHRgLlxuICAgKi9cbiAgdHlwZTogJ3RleHQnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRleHREZWx0YSB7XG4gIGFubm90YXRpb25zPzogQXJyYXk8QW5ub3RhdGlvbkRlbHRhPjtcblxuICAvKipcbiAgICogVGhlIGRhdGEgdGhhdCBtYWtlcyB1cCB0aGUgdGV4dC5cbiAgICovXG4gIHZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSB0ZXh0IGNvbnRlbnQgdGhhdCBpcyBwYXJ0IG9mIGEgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0RGVsdGFCbG9jayB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbnRlbnQgcGFydCBpbiB0aGUgbWVzc2FnZS5cbiAgICovXG4gIGluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBgdGV4dGAuXG4gICAqL1xuICB0eXBlOiAndGV4dCc7XG5cbiAgdGV4dD86IFRleHREZWx0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQ3JlYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgY29udGVudDogc3RyaW5nIHwgQXJyYXk8TWVzc2FnZUNvbnRlbnRQYXJ0UGFyYW0+O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBvZiB0aGUgZW50aXR5IHRoYXQgaXMgY3JlYXRpbmcgdGhlIG1lc3NhZ2UuIEFsbG93ZWQgdmFsdWVzIGluY2x1ZGU6XG4gICAqXG4gICAqIC0gYHVzZXJgOiBJbmRpY2F0ZXMgdGhlIG1lc3NhZ2UgaXMgc2VudCBieSBhbiBhY3R1YWwgdXNlciBhbmQgc2hvdWxkIGJlIHVzZWQgaW5cbiAgICogICBtb3N0IGNhc2VzIHRvIHJlcHJlc2VudCB1c2VyLWdlbmVyYXRlZCBtZXNzYWdlcy5cbiAgICogLSBgYXNzaXN0YW50YDogSW5kaWNhdGVzIHRoZSBtZXNzYWdlIGlzIGdlbmVyYXRlZCBieSB0aGUgYXNzaXN0YW50LiBVc2UgdGhpc1xuICAgKiAgIHZhbHVlIHRvIGluc2VydCBtZXNzYWdlcyBmcm9tIHRoZSBhc3Npc3RhbnQgaW50byB0aGUgY29udmVyc2F0aW9uLlxuICAgKi9cbiAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCc7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBmaWxlcyBhdHRhY2hlZCB0byB0aGUgbWVzc2FnZSwgYW5kIHRoZSB0b29scyB0aGV5IHNob3VsZCBiZSBhZGRlZCB0by5cbiAgICovXG4gIGF0dGFjaG1lbnRzPzogQXJyYXk8TWVzc2FnZUNyZWF0ZVBhcmFtcy5BdHRhY2htZW50PiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAqXG4gICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBtZXRhZGF0YT86IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTWVzc2FnZUNyZWF0ZVBhcmFtcyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSBmaWxlIHRvIGF0dGFjaCB0byB0aGUgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBmaWxlX2lkPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRvb2xzIHRvIGFkZCB0aGlzIGZpbGUgdG8uXG4gICAgICovXG4gICAgdG9vbHM/OiBBcnJheTxBc3Npc3RhbnRzQVBJLkNvZGVJbnRlcnByZXRlclRvb2wgfCBBdHRhY2htZW50LkZpbGVTZWFyY2g+O1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBBdHRhY2htZW50IHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIEZpbGVTZWFyY2gge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdHlwZSBvZiB0b29sIGJlaW5nIGRlZmluZWQ6IGBmaWxlX3NlYXJjaGBcbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2ZpbGVfc2VhcmNoJztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVXBkYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAqXG4gICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBtZXRhZGF0YT86IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUxpc3RQYXJhbXMgZXh0ZW5kcyBDdXJzb3JQYWdlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgY3Vyc29yIGZvciB1c2UgaW4gcGFnaW5hdGlvbi4gYGJlZm9yZWAgaXMgYW4gb2JqZWN0IElEIHRoYXQgZGVmaW5lcyB5b3VyIHBsYWNlXG4gICAqIGluIHRoZSBsaXN0LiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBtYWtlIGEgbGlzdCByZXF1ZXN0IGFuZCByZWNlaXZlIDEwMCBvYmplY3RzLFxuICAgKiBzdGFydGluZyB3aXRoIG9ial9mb28sIHlvdXIgc3Vic2VxdWVudCBjYWxsIGNhbiBpbmNsdWRlIGJlZm9yZT1vYmpfZm9vIGluIG9yZGVyXG4gICAqIHRvIGZldGNoIHRoZSBwcmV2aW91cyBwYWdlIG9mIHRoZSBsaXN0LlxuICAgKi9cbiAgYmVmb3JlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTb3J0IG9yZGVyIGJ5IHRoZSBgY3JlYXRlZF9hdGAgdGltZXN0YW1wIG9mIHRoZSBvYmplY3RzLiBgYXNjYCBmb3IgYXNjZW5kaW5nXG4gICAqIG9yZGVyIGFuZCBgZGVzY2AgZm9yIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqL1xuICBvcmRlcj86ICdhc2MnIHwgJ2Rlc2MnO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgbWVzc2FnZXMgYnkgdGhlIHJ1biBJRCB0aGF0IGdlbmVyYXRlZCB0aGVtLlxuICAgKi9cbiAgcnVuX2lkPzogc3RyaW5nO1xufVxuXG5NZXNzYWdlcy5NZXNzYWdlc1BhZ2UgPSBNZXNzYWdlc1BhZ2U7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBNZXNzYWdlcyB7XG4gIGV4cG9ydCB7XG4gICAgdHlwZSBBbm5vdGF0aW9uIGFzIEFubm90YXRpb24sXG4gICAgdHlwZSBBbm5vdGF0aW9uRGVsdGEgYXMgQW5ub3RhdGlvbkRlbHRhLFxuICAgIHR5cGUgRmlsZUNpdGF0aW9uQW5ub3RhdGlvbiBhcyBGaWxlQ2l0YXRpb25Bbm5vdGF0aW9uLFxuICAgIHR5cGUgRmlsZUNpdGF0aW9uRGVsdGFBbm5vdGF0aW9uIGFzIEZpbGVDaXRhdGlvbkRlbHRhQW5ub3RhdGlvbixcbiAgICB0eXBlIEZpbGVQYXRoQW5ub3RhdGlvbiBhcyBGaWxlUGF0aEFubm90YXRpb24sXG4gICAgdHlwZSBGaWxlUGF0aERlbHRhQW5ub3RhdGlvbiBhcyBGaWxlUGF0aERlbHRhQW5ub3RhdGlvbixcbiAgICB0eXBlIEltYWdlRmlsZSBhcyBJbWFnZUZpbGUsXG4gICAgdHlwZSBJbWFnZUZpbGVDb250ZW50QmxvY2sgYXMgSW1hZ2VGaWxlQ29udGVudEJsb2NrLFxuICAgIHR5cGUgSW1hZ2VGaWxlRGVsdGEgYXMgSW1hZ2VGaWxlRGVsdGEsXG4gICAgdHlwZSBJbWFnZUZpbGVEZWx0YUJsb2NrIGFzIEltYWdlRmlsZURlbHRhQmxvY2ssXG4gICAgdHlwZSBJbWFnZVVSTCBhcyBJbWFnZVVSTCxcbiAgICB0eXBlIEltYWdlVVJMQ29udGVudEJsb2NrIGFzIEltYWdlVVJMQ29udGVudEJsb2NrLFxuICAgIHR5cGUgSW1hZ2VVUkxEZWx0YSBhcyBJbWFnZVVSTERlbHRhLFxuICAgIHR5cGUgSW1hZ2VVUkxEZWx0YUJsb2NrIGFzIEltYWdlVVJMRGVsdGFCbG9jayxcbiAgICB0eXBlIE1lc3NhZ2UgYXMgTWVzc2FnZSxcbiAgICB0eXBlIE1lc3NhZ2VDb250ZW50IGFzIE1lc3NhZ2VDb250ZW50LFxuICAgIHR5cGUgTWVzc2FnZUNvbnRlbnREZWx0YSBhcyBNZXNzYWdlQ29udGVudERlbHRhLFxuICAgIHR5cGUgTWVzc2FnZUNvbnRlbnRQYXJ0UGFyYW0gYXMgTWVzc2FnZUNvbnRlbnRQYXJ0UGFyYW0sXG4gICAgdHlwZSBNZXNzYWdlRGVsZXRlZCBhcyBNZXNzYWdlRGVsZXRlZCxcbiAgICB0eXBlIE1lc3NhZ2VEZWx0YSBhcyBNZXNzYWdlRGVsdGEsXG4gICAgdHlwZSBNZXNzYWdlRGVsdGFFdmVudCBhcyBNZXNzYWdlRGVsdGFFdmVudCxcbiAgICB0eXBlIFJlZnVzYWxDb250ZW50QmxvY2sgYXMgUmVmdXNhbENvbnRlbnRCbG9jayxcbiAgICB0eXBlIFJlZnVzYWxEZWx0YUJsb2NrIGFzIFJlZnVzYWxEZWx0YUJsb2NrLFxuICAgIHR5cGUgVGV4dCBhcyBUZXh0LFxuICAgIHR5cGUgVGV4dENvbnRlbnRCbG9jayBhcyBUZXh0Q29udGVudEJsb2NrLFxuICAgIHR5cGUgVGV4dENvbnRlbnRCbG9ja1BhcmFtIGFzIFRleHRDb250ZW50QmxvY2tQYXJhbSxcbiAgICB0eXBlIFRleHREZWx0YSBhcyBUZXh0RGVsdGEsXG4gICAgdHlwZSBUZXh0RGVsdGFCbG9jayBhcyBUZXh0RGVsdGFCbG9jayxcbiAgICBNZXNzYWdlc1BhZ2UgYXMgTWVzc2FnZXNQYWdlLFxuICAgIHR5cGUgTWVzc2FnZUNyZWF0ZVBhcmFtcyBhcyBNZXNzYWdlQ3JlYXRlUGFyYW1zLFxuICAgIHR5cGUgTWVzc2FnZVVwZGF0ZVBhcmFtcyBhcyBNZXNzYWdlVXBkYXRlUGFyYW1zLFxuICAgIHR5cGUgTWVzc2FnZUxpc3RQYXJhbXMgYXMgTWVzc2FnZUxpc3RQYXJhbXMsXG4gIH07XG59XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBpc1JlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uLy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgU3RlcHNBUEkgZnJvbSAnLi9zdGVwcyc7XG5pbXBvcnQgKiBhcyBTaGFyZWQgZnJvbSAnLi4vLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IEN1cnNvclBhZ2UsIHR5cGUgQ3Vyc29yUGFnZVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uLy4uL3BhZ2luYXRpb24nO1xuXG5leHBvcnQgY2xhc3MgU3RlcHMgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBydW4gc3RlcC5cbiAgICovXG4gIHJldHJpZXZlKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBzdGVwSWQ6IHN0cmluZyxcbiAgICBxdWVyeT86IFN0ZXBSZXRyaWV2ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFJ1blN0ZXA+O1xuICByZXRyaWV2ZShcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgc3RlcElkOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxSdW5TdGVwPjtcbiAgcmV0cmlldmUoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBydW5JZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBTdGVwUmV0cmlldmVQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxSdW5TdGVwPiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSh0aHJlYWRJZCwgcnVuSWQsIHN0ZXBJZCwge30sIHF1ZXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXQoYC90aHJlYWRzLyR7dGhyZWFkSWR9L3J1bnMvJHtydW5JZH0vc3RlcHMvJHtzdGVwSWR9YCwge1xuICAgICAgcXVlcnksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBydW4gc3RlcHMgYmVsb25naW5nIHRvIGEgcnVuLlxuICAgKi9cbiAgbGlzdChcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBTdGVwTGlzdFBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxSdW5TdGVwc1BhZ2UsIFJ1blN0ZXA+O1xuICBsaXN0KFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxSdW5TdGVwc1BhZ2UsIFJ1blN0ZXA+O1xuICBsaXN0KFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBxdWVyeTogU3RlcExpc3RQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8UnVuU3RlcHNQYWdlLCBSdW5TdGVwPiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0KHRocmVhZElkLCBydW5JZCwge30sIHF1ZXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRBUElMaXN0KGAvdGhyZWFkcy8ke3RocmVhZElkfS9ydW5zLyR7cnVuSWR9L3N0ZXBzYCwgUnVuU3RlcHNQYWdlLCB7XG4gICAgICBxdWVyeSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW5TdGVwc1BhZ2UgZXh0ZW5kcyBDdXJzb3JQYWdlPFJ1blN0ZXA+IHt9XG5cbi8qKlxuICogVGV4dCBvdXRwdXQgZnJvbSB0aGUgQ29kZSBJbnRlcnByZXRlciB0b29sIGNhbGwgYXMgcGFydCBvZiBhIHJ1biBzdGVwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVJbnRlcnByZXRlckxvZ3Mge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaW4gdGhlIG91dHB1dHMgYXJyYXkuXG4gICAqL1xuICBpbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbHdheXMgYGxvZ3NgLlxuICAgKi9cbiAgdHlwZTogJ2xvZ3MnO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBvdXRwdXQgZnJvbSB0aGUgQ29kZSBJbnRlcnByZXRlciB0b29sIGNhbGwuXG4gICAqL1xuICBsb2dzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVJbnRlcnByZXRlck91dHB1dEltYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGluIHRoZSBvdXRwdXRzIGFycmF5LlxuICAgKi9cbiAgaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogQWx3YXlzIGBpbWFnZWAuXG4gICAqL1xuICB0eXBlOiAnaW1hZ2UnO1xuXG4gIGltYWdlPzogQ29kZUludGVycHJldGVyT3V0cHV0SW1hZ2UuSW1hZ2U7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29kZUludGVycHJldGVyT3V0cHV0SW1hZ2Uge1xuICBleHBvcnQgaW50ZXJmYWNlIEltYWdlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgW2ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIElEIG9mIHRoZVxuICAgICAqIGltYWdlLlxuICAgICAqL1xuICAgIGZpbGVfaWQ/OiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRhaWxzIG9mIHRoZSBDb2RlIEludGVycHJldGVyIHRvb2wgY2FsbCB0aGUgcnVuIHN0ZXAgd2FzIGludm9sdmVkIGluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVJbnRlcnByZXRlclRvb2xDYWxsIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgdG9vbCBjYWxsLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIENvZGUgSW50ZXJwcmV0ZXIgdG9vbCBjYWxsIGRlZmluaXRpb24uXG4gICAqL1xuICBjb2RlX2ludGVycHJldGVyOiBDb2RlSW50ZXJwcmV0ZXJUb29sQ2FsbC5Db2RlSW50ZXJwcmV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRvb2wgY2FsbC4gVGhpcyBpcyBhbHdheXMgZ29pbmcgdG8gYmUgYGNvZGVfaW50ZXJwcmV0ZXJgIGZvciB0aGlzXG4gICAqIHR5cGUgb2YgdG9vbCBjYWxsLlxuICAgKi9cbiAgdHlwZTogJ2NvZGVfaW50ZXJwcmV0ZXInO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvZGVJbnRlcnByZXRlclRvb2xDYWxsIHtcbiAgLyoqXG4gICAqIFRoZSBDb2RlIEludGVycHJldGVyIHRvb2wgY2FsbCBkZWZpbml0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBDb2RlSW50ZXJwcmV0ZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBpbnB1dCB0byB0aGUgQ29kZSBJbnRlcnByZXRlciB0b29sIGNhbGwuXG4gICAgICovXG4gICAgaW5wdXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBvdXRwdXRzIGZyb20gdGhlIENvZGUgSW50ZXJwcmV0ZXIgdG9vbCBjYWxsLiBDb2RlIEludGVycHJldGVyIGNhbiBvdXRwdXQgb25lXG4gICAgICogb3IgbW9yZSBpdGVtcywgaW5jbHVkaW5nIHRleHQgKGBsb2dzYCkgb3IgaW1hZ2VzIChgaW1hZ2VgKS4gRWFjaCBvZiB0aGVzZSBhcmVcbiAgICAgKiByZXByZXNlbnRlZCBieSBhIGRpZmZlcmVudCBvYmplY3QgdHlwZS5cbiAgICAgKi9cbiAgICBvdXRwdXRzOiBBcnJheTxDb2RlSW50ZXJwcmV0ZXIuTG9ncyB8IENvZGVJbnRlcnByZXRlci5JbWFnZT47XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIENvZGVJbnRlcnByZXRlciB7XG4gICAgLyoqXG4gICAgICogVGV4dCBvdXRwdXQgZnJvbSB0aGUgQ29kZSBJbnRlcnByZXRlciB0b29sIGNhbGwgYXMgcGFydCBvZiBhIHJ1biBzdGVwLlxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgTG9ncyB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSB0ZXh0IG91dHB1dCBmcm9tIHRoZSBDb2RlIEludGVycHJldGVyIHRvb2wgY2FsbC5cbiAgICAgICAqL1xuICAgICAgbG9nczogc3RyaW5nO1xuXG4gICAgICAvKipcbiAgICAgICAqIEFsd2F5cyBgbG9nc2AuXG4gICAgICAgKi9cbiAgICAgIHR5cGU6ICdsb2dzJztcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIEltYWdlIHtcbiAgICAgIGltYWdlOiBJbWFnZS5JbWFnZTtcblxuICAgICAgLyoqXG4gICAgICAgKiBBbHdheXMgYGltYWdlYC5cbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2ltYWdlJztcbiAgICB9XG5cbiAgICBleHBvcnQgbmFtZXNwYWNlIEltYWdlIHtcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSW1hZ2Uge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIFtmaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzKSBJRCBvZiB0aGVcbiAgICAgICAgICogaW1hZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBmaWxlX2lkOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGV0YWlscyBvZiB0aGUgQ29kZSBJbnRlcnByZXRlciB0b29sIGNhbGwgdGhlIHJ1biBzdGVwIHdhcyBpbnZvbHZlZCBpbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlSW50ZXJwcmV0ZXJUb29sQ2FsbERlbHRhIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgdG9vbCBjYWxsIGluIHRoZSB0b29sIGNhbGxzIGFycmF5LlxuICAgKi9cbiAgaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdG9vbCBjYWxsLiBUaGlzIGlzIGFsd2F5cyBnb2luZyB0byBiZSBgY29kZV9pbnRlcnByZXRlcmAgZm9yIHRoaXNcbiAgICogdHlwZSBvZiB0b29sIGNhbGwuXG4gICAqL1xuICB0eXBlOiAnY29kZV9pbnRlcnByZXRlcic7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgdG9vbCBjYWxsLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2RlIEludGVycHJldGVyIHRvb2wgY2FsbCBkZWZpbml0aW9uLlxuICAgKi9cbiAgY29kZV9pbnRlcnByZXRlcj86IENvZGVJbnRlcnByZXRlclRvb2xDYWxsRGVsdGEuQ29kZUludGVycHJldGVyO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvZGVJbnRlcnByZXRlclRvb2xDYWxsRGVsdGEge1xuICAvKipcbiAgICogVGhlIENvZGUgSW50ZXJwcmV0ZXIgdG9vbCBjYWxsIGRlZmluaXRpb24uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIENvZGVJbnRlcnByZXRlciB7XG4gICAgLyoqXG4gICAgICogVGhlIGlucHV0IHRvIHRoZSBDb2RlIEludGVycHJldGVyIHRvb2wgY2FsbC5cbiAgICAgKi9cbiAgICBpbnB1dD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBvdXRwdXRzIGZyb20gdGhlIENvZGUgSW50ZXJwcmV0ZXIgdG9vbCBjYWxsLiBDb2RlIEludGVycHJldGVyIGNhbiBvdXRwdXQgb25lXG4gICAgICogb3IgbW9yZSBpdGVtcywgaW5jbHVkaW5nIHRleHQgKGBsb2dzYCkgb3IgaW1hZ2VzIChgaW1hZ2VgKS4gRWFjaCBvZiB0aGVzZSBhcmVcbiAgICAgKiByZXByZXNlbnRlZCBieSBhIGRpZmZlcmVudCBvYmplY3QgdHlwZS5cbiAgICAgKi9cbiAgICBvdXRwdXRzPzogQXJyYXk8U3RlcHNBUEkuQ29kZUludGVycHJldGVyTG9ncyB8IFN0ZXBzQVBJLkNvZGVJbnRlcnByZXRlck91dHB1dEltYWdlPjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVTZWFyY2hUb29sQ2FsbCB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHRvb2wgY2FsbCBvYmplY3QuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb3Igbm93LCB0aGlzIGlzIGFsd2F5cyBnb2luZyB0byBiZSBhbiBlbXB0eSBvYmplY3QuXG4gICAqL1xuICBmaWxlX3NlYXJjaDogRmlsZVNlYXJjaFRvb2xDYWxsLkZpbGVTZWFyY2g7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRvb2wgY2FsbC4gVGhpcyBpcyBhbHdheXMgZ29pbmcgdG8gYmUgYGZpbGVfc2VhcmNoYCBmb3IgdGhpcyB0eXBlIG9mXG4gICAqIHRvb2wgY2FsbC5cbiAgICovXG4gIHR5cGU6ICdmaWxlX3NlYXJjaCc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmlsZVNlYXJjaFRvb2xDYWxsIHtcbiAgLyoqXG4gICAqIEZvciBub3csIHRoaXMgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGFuIGVtcHR5IG9iamVjdC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRmlsZVNlYXJjaCB7XG4gICAgLyoqXG4gICAgICogVGhlIHJhbmtpbmcgb3B0aW9ucyBmb3IgdGhlIGZpbGUgc2VhcmNoLlxuICAgICAqL1xuICAgIHJhbmtpbmdfb3B0aW9ucz86IEZpbGVTZWFyY2guUmFua2luZ09wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzdWx0cyBvZiB0aGUgZmlsZSBzZWFyY2guXG4gICAgICovXG4gICAgcmVzdWx0cz86IEFycmF5PEZpbGVTZWFyY2guUmVzdWx0PjtcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgRmlsZVNlYXJjaCB7XG4gICAgLyoqXG4gICAgICogVGhlIHJhbmtpbmcgb3B0aW9ucyBmb3IgdGhlIGZpbGUgc2VhcmNoLlxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgUmFua2luZ09wdGlvbnMge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgcmFua2VyIHVzZWQgZm9yIHRoZSBmaWxlIHNlYXJjaC5cbiAgICAgICAqL1xuICAgICAgcmFua2VyOiAnZGVmYXVsdF8yMDI0XzA4XzIxJztcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgc2NvcmUgdGhyZXNob2xkIGZvciB0aGUgZmlsZSBzZWFyY2guIEFsbCB2YWx1ZXMgbXVzdCBiZSBhIGZsb2F0aW5nIHBvaW50XG4gICAgICAgKiBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLlxuICAgICAgICovXG4gICAgICBzY29yZV90aHJlc2hvbGQ6IG51bWJlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHJlc3VsdCBpbnN0YW5jZSBvZiB0aGUgZmlsZSBzZWFyY2guXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBSZXN1bHQge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgSUQgb2YgdGhlIGZpbGUgdGhhdCByZXN1bHQgd2FzIGZvdW5kIGluLlxuICAgICAgICovXG4gICAgICBmaWxlX2lkOiBzdHJpbmc7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCByZXN1bHQgd2FzIGZvdW5kIGluLlxuICAgICAgICovXG4gICAgICBmaWxlX25hbWU6IHN0cmluZztcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgc2NvcmUgb2YgdGhlIHJlc3VsdC4gQWxsIHZhbHVlcyBtdXN0IGJlIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJldHdlZW4gMFxuICAgICAgICogYW5kIDEuXG4gICAgICAgKi9cbiAgICAgIHNjb3JlOiBudW1iZXI7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIHJlc3VsdCB0aGF0IHdhcyBmb3VuZC4gVGhlIGNvbnRlbnQgaXMgb25seSBpbmNsdWRlZCBpZlxuICAgICAgICogcmVxdWVzdGVkIHZpYSB0aGUgaW5jbHVkZSBxdWVyeSBwYXJhbWV0ZXIuXG4gICAgICAgKi9cbiAgICAgIGNvbnRlbnQ/OiBBcnJheTxSZXN1bHQuQ29udGVudD47XG4gICAgfVxuXG4gICAgZXhwb3J0IG5hbWVzcGFjZSBSZXN1bHQge1xuICAgICAgZXhwb3J0IGludGVyZmFjZSBDb250ZW50IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gICAgICAgICAqL1xuICAgICAgICB0ZXh0Pzogc3RyaW5nO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdHlwZSBvZiB0aGUgY29udGVudC5cbiAgICAgICAgICovXG4gICAgICAgIHR5cGU/OiAndGV4dCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNlYXJjaFRvb2xDYWxsRGVsdGEge1xuICAvKipcbiAgICogRm9yIG5vdywgdGhpcyBpcyBhbHdheXMgZ29pbmcgdG8gYmUgYW4gZW1wdHkgb2JqZWN0LlxuICAgKi9cbiAgZmlsZV9zZWFyY2g6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgdG9vbCBjYWxsIGluIHRoZSB0b29sIGNhbGxzIGFycmF5LlxuICAgKi9cbiAgaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdG9vbCBjYWxsLiBUaGlzIGlzIGFsd2F5cyBnb2luZyB0byBiZSBgZmlsZV9zZWFyY2hgIGZvciB0aGlzIHR5cGUgb2ZcbiAgICogdG9vbCBjYWxsLlxuICAgKi9cbiAgdHlwZTogJ2ZpbGVfc2VhcmNoJztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSB0b29sIGNhbGwgb2JqZWN0LlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25Ub29sQ2FsbCB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHRvb2wgY2FsbCBvYmplY3QuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgY2FsbGVkLlxuICAgKi9cbiAgZnVuY3Rpb246IEZ1bmN0aW9uVG9vbENhbGwuRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRvb2wgY2FsbC4gVGhpcyBpcyBhbHdheXMgZ29pbmcgdG8gYmUgYGZ1bmN0aW9uYCBmb3IgdGhpcyB0eXBlIG9mXG4gICAqIHRvb2wgY2FsbC5cbiAgICovXG4gIHR5cGU6ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRnVuY3Rpb25Ub29sQ2FsbCB7XG4gIC8qKlxuICAgKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgY2FsbGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGFyZ3VtZW50czogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBvdXRwdXQgb2YgdGhlIGZ1bmN0aW9uLiBUaGlzIHdpbGwgYmUgYG51bGxgIGlmIHRoZSBvdXRwdXRzIGhhdmUgbm90IGJlZW5cbiAgICAgKiBbc3VibWl0dGVkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMvc3VibWl0VG9vbE91dHB1dHMpXG4gICAgICogeWV0LlxuICAgICAqL1xuICAgIG91dHB1dDogc3RyaW5nIHwgbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uVG9vbENhbGxEZWx0YSB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIHRvb2wgY2FsbCBpbiB0aGUgdG9vbCBjYWxscyBhcnJheS5cbiAgICovXG4gIGluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRvb2wgY2FsbC4gVGhpcyBpcyBhbHdheXMgZ29pbmcgdG8gYmUgYGZ1bmN0aW9uYCBmb3IgdGhpcyB0eXBlIG9mXG4gICAqIHRvb2wgY2FsbC5cbiAgICovXG4gIHR5cGU6ICdmdW5jdGlvbic7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgdG9vbCBjYWxsIG9iamVjdC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgY2FsbGVkLlxuICAgKi9cbiAgZnVuY3Rpb24/OiBGdW5jdGlvblRvb2xDYWxsRGVsdGEuRnVuY3Rpb247XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRnVuY3Rpb25Ub29sQ2FsbERlbHRhIHtcbiAgLyoqXG4gICAqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBjYWxsZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uXG4gICAgICovXG4gICAgYXJndW1lbnRzPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbi4gVGhpcyB3aWxsIGJlIGBudWxsYCBpZiB0aGUgb3V0cHV0cyBoYXZlIG5vdCBiZWVuXG4gICAgICogW3N1Ym1pdHRlZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW5zL3N1Ym1pdFRvb2xPdXRwdXRzKVxuICAgICAqIHlldC5cbiAgICAgKi9cbiAgICBvdXRwdXQ/OiBzdHJpbmcgfCBudWxsO1xuICB9XG59XG5cbi8qKlxuICogRGV0YWlscyBvZiB0aGUgbWVzc2FnZSBjcmVhdGlvbiBieSB0aGUgcnVuIHN0ZXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUNyZWF0aW9uU3RlcERldGFpbHMge1xuICBtZXNzYWdlX2NyZWF0aW9uOiBNZXNzYWdlQ3JlYXRpb25TdGVwRGV0YWlscy5NZXNzYWdlQ3JlYXRpb247XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBgbWVzc2FnZV9jcmVhdGlvbmAuXG4gICAqL1xuICB0eXBlOiAnbWVzc2FnZV9jcmVhdGlvbic7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTWVzc2FnZUNyZWF0aW9uU3RlcERldGFpbHMge1xuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VDcmVhdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhpcyBydW4gc3RlcC5cbiAgICAgKi9cbiAgICBtZXNzYWdlX2lkOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3RlcCBpbiBleGVjdXRpb24gb2YgYSBydW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU3RlcCB7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcnVuIHN0ZXAsIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGluIEFQSSBlbmRwb2ludHMuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlXG4gICAqIFthc3Npc3RhbnRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYXNzaXN0YW50cylcbiAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBydW4gc3RlcC5cbiAgICovXG4gIGFzc2lzdGFudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSBydW4gc3RlcCB3YXMgY2FuY2VsbGVkLlxuICAgKi9cbiAgY2FuY2VsbGVkX2F0OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSBydW4gc3RlcCBjb21wbGV0ZWQuXG4gICAqL1xuICBjb21wbGV0ZWRfYXQ6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIHJ1biBzdGVwIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgY3JlYXRlZF9hdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSBydW4gc3RlcCBleHBpcmVkLiBBIHN0ZXAgaXNcbiAgICogY29uc2lkZXJlZCBleHBpcmVkIGlmIHRoZSBwYXJlbnQgcnVuIGlzIGV4cGlyZWQuXG4gICAqL1xuICBleHBpcmVkX2F0OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSBydW4gc3RlcCBmYWlsZWQuXG4gICAqL1xuICBmYWlsZWRfYXQ6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJ1biBzdGVwLiBXaWxsIGJlIGBudWxsYCBpZiB0aGVyZSBhcmUgbm9cbiAgICogZXJyb3JzLlxuICAgKi9cbiAgbGFzdF9lcnJvcjogUnVuU3RlcC5MYXN0RXJyb3IgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgKlxuICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbWV0YWRhdGE6IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSwgd2hpY2ggaXMgYWx3YXlzIGB0aHJlYWQucnVuLnN0ZXBgLlxuICAgKi9cbiAgb2JqZWN0OiAndGhyZWFkLnJ1bi5zdGVwJztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBbcnVuXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3J1bnMpIHRoYXRcbiAgICogdGhpcyBydW4gc3RlcCBpcyBhIHBhcnQgb2YuXG4gICAqL1xuICBydW5faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgcnVuIHN0ZXAsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYGluX3Byb2dyZXNzYCwgYGNhbmNlbGxlZGAsXG4gICAqIGBmYWlsZWRgLCBgY29tcGxldGVkYCwgb3IgYGV4cGlyZWRgLlxuICAgKi9cbiAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnIHwgJ2NhbmNlbGxlZCcgfCAnZmFpbGVkJyB8ICdjb21wbGV0ZWQnIHwgJ2V4cGlyZWQnO1xuXG4gIC8qKlxuICAgKiBUaGUgZGV0YWlscyBvZiB0aGUgcnVuIHN0ZXAuXG4gICAqL1xuICBzdGVwX2RldGFpbHM6IE1lc3NhZ2VDcmVhdGlvblN0ZXBEZXRhaWxzIHwgVG9vbENhbGxzU3RlcERldGFpbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgW3RocmVhZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS90aHJlYWRzKVxuICAgKiB0aGF0IHdhcyBydW4uXG4gICAqL1xuICB0aHJlYWRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcnVuIHN0ZXAsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYG1lc3NhZ2VfY3JlYXRpb25gIG9yIGB0b29sX2NhbGxzYC5cbiAgICovXG4gIHR5cGU6ICdtZXNzYWdlX2NyZWF0aW9uJyB8ICd0b29sX2NhbGxzJztcblxuICAvKipcbiAgICogVXNhZ2Ugc3RhdGlzdGljcyByZWxhdGVkIHRvIHRoZSBydW4gc3RlcC4gVGhpcyB2YWx1ZSB3aWxsIGJlIGBudWxsYCB3aGlsZSB0aGVcbiAgICogcnVuIHN0ZXAncyBzdGF0dXMgaXMgYGluX3Byb2dyZXNzYC5cbiAgICovXG4gIHVzYWdlOiBSdW5TdGVwLlVzYWdlIHwgbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSdW5TdGVwIHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJ1biBzdGVwLiBXaWxsIGJlIGBudWxsYCBpZiB0aGVyZSBhcmUgbm9cbiAgICogZXJyb3JzLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBMYXN0RXJyb3Ige1xuICAgIC8qKlxuICAgICAqIE9uZSBvZiBgc2VydmVyX2Vycm9yYCBvciBgcmF0ZV9saW1pdF9leGNlZWRlZGAuXG4gICAgICovXG4gICAgY29kZTogJ3NlcnZlcl9lcnJvcicgfCAncmF0ZV9saW1pdF9leGNlZWRlZCc7XG5cbiAgICAvKipcbiAgICAgKiBBIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvci5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogVXNhZ2Ugc3RhdGlzdGljcyByZWxhdGVkIHRvIHRoZSBydW4gc3RlcC4gVGhpcyB2YWx1ZSB3aWxsIGJlIGBudWxsYCB3aGlsZSB0aGVcbiAgICogcnVuIHN0ZXAncyBzdGF0dXMgaXMgYGluX3Byb2dyZXNzYC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXNhZ2Uge1xuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBjb21wbGV0aW9uIHRva2VucyB1c2VkIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgcnVuIHN0ZXAuXG4gICAgICovXG4gICAgY29tcGxldGlvbl90b2tlbnM6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBwcm9tcHQgdG9rZW5zIHVzZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZSBydW4gc3RlcC5cbiAgICAgKi9cbiAgICBwcm9tcHRfdG9rZW5zOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUb3RhbCBudW1iZXIgb2YgdG9rZW5zIHVzZWQgKHByb21wdCArIGNvbXBsZXRpb24pLlxuICAgICAqL1xuICAgIHRvdGFsX3Rva2VuczogbnVtYmVyO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGRlbHRhIGNvbnRhaW5pbmcgdGhlIGZpZWxkcyB0aGF0IGhhdmUgY2hhbmdlZCBvbiB0aGUgcnVuIHN0ZXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU3RlcERlbHRhIHtcbiAgLyoqXG4gICAqIFRoZSBkZXRhaWxzIG9mIHRoZSBydW4gc3RlcC5cbiAgICovXG4gIHN0ZXBfZGV0YWlscz86IFJ1blN0ZXBEZWx0YU1lc3NhZ2VEZWx0YSB8IFRvb2xDYWxsRGVsdGFPYmplY3Q7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJ1biBzdGVwIGRlbHRhIGkuZS4gYW55IGNoYW5nZWQgZmllbGRzIG9uIGEgcnVuIHN0ZXAgZHVyaW5nXG4gKiBzdHJlYW1pbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU3RlcERlbHRhRXZlbnQge1xuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHJ1biBzdGVwLCB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBpbiBBUEkgZW5kcG9pbnRzLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlbHRhIGNvbnRhaW5pbmcgdGhlIGZpZWxkcyB0aGF0IGhhdmUgY2hhbmdlZCBvbiB0aGUgcnVuIHN0ZXAuXG4gICAqL1xuICBkZWx0YTogUnVuU3RlcERlbHRhO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHR5cGUsIHdoaWNoIGlzIGFsd2F5cyBgdGhyZWFkLnJ1bi5zdGVwLmRlbHRhYC5cbiAgICovXG4gIG9iamVjdDogJ3RocmVhZC5ydW4uc3RlcC5kZWx0YSc7XG59XG5cbi8qKlxuICogRGV0YWlscyBvZiB0aGUgbWVzc2FnZSBjcmVhdGlvbiBieSB0aGUgcnVuIHN0ZXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU3RlcERlbHRhTWVzc2FnZURlbHRhIHtcbiAgLyoqXG4gICAqIEFsd2F5cyBgbWVzc2FnZV9jcmVhdGlvbmAuXG4gICAqL1xuICB0eXBlOiAnbWVzc2FnZV9jcmVhdGlvbic7XG5cbiAgbWVzc2FnZV9jcmVhdGlvbj86IFJ1blN0ZXBEZWx0YU1lc3NhZ2VEZWx0YS5NZXNzYWdlQ3JlYXRpb247XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUnVuU3RlcERlbHRhTWVzc2FnZURlbHRhIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQ3JlYXRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoaXMgcnVuIHN0ZXAuXG4gICAgICovXG4gICAgbWVzc2FnZV9pZD86IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSdW5TdGVwSW5jbHVkZSA9ICdzdGVwX2RldGFpbHMudG9vbF9jYWxsc1sqXS5maWxlX3NlYXJjaC5yZXN1bHRzWypdLmNvbnRlbnQnO1xuXG4vKipcbiAqIERldGFpbHMgb2YgdGhlIENvZGUgSW50ZXJwcmV0ZXIgdG9vbCBjYWxsIHRoZSBydW4gc3RlcCB3YXMgaW52b2x2ZWQgaW4uXG4gKi9cbmV4cG9ydCB0eXBlIFRvb2xDYWxsID0gQ29kZUludGVycHJldGVyVG9vbENhbGwgfCBGaWxlU2VhcmNoVG9vbENhbGwgfCBGdW5jdGlvblRvb2xDYWxsO1xuXG4vKipcbiAqIERldGFpbHMgb2YgdGhlIENvZGUgSW50ZXJwcmV0ZXIgdG9vbCBjYWxsIHRoZSBydW4gc3RlcCB3YXMgaW52b2x2ZWQgaW4uXG4gKi9cbmV4cG9ydCB0eXBlIFRvb2xDYWxsRGVsdGEgPSBDb2RlSW50ZXJwcmV0ZXJUb29sQ2FsbERlbHRhIHwgRmlsZVNlYXJjaFRvb2xDYWxsRGVsdGEgfCBGdW5jdGlvblRvb2xDYWxsRGVsdGE7XG5cbi8qKlxuICogRGV0YWlscyBvZiB0aGUgdG9vbCBjYWxsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xDYWxsRGVsdGFPYmplY3Qge1xuICAvKipcbiAgICogQWx3YXlzIGB0b29sX2NhbGxzYC5cbiAgICovXG4gIHR5cGU6ICd0b29sX2NhbGxzJztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgdG9vbCBjYWxscyB0aGUgcnVuIHN0ZXAgd2FzIGludm9sdmVkIGluLiBUaGVzZSBjYW4gYmUgYXNzb2NpYXRlZFxuICAgKiB3aXRoIG9uZSBvZiB0aHJlZSB0eXBlcyBvZiB0b29sczogYGNvZGVfaW50ZXJwcmV0ZXJgLCBgZmlsZV9zZWFyY2hgLCBvclxuICAgKiBgZnVuY3Rpb25gLlxuICAgKi9cbiAgdG9vbF9jYWxscz86IEFycmF5PFRvb2xDYWxsRGVsdGE+O1xufVxuXG4vKipcbiAqIERldGFpbHMgb2YgdGhlIHRvb2wgY2FsbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sQ2FsbHNTdGVwRGV0YWlscyB7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiB0b29sIGNhbGxzIHRoZSBydW4gc3RlcCB3YXMgaW52b2x2ZWQgaW4uIFRoZXNlIGNhbiBiZSBhc3NvY2lhdGVkXG4gICAqIHdpdGggb25lIG9mIHRocmVlIHR5cGVzIG9mIHRvb2xzOiBgY29kZV9pbnRlcnByZXRlcmAsIGBmaWxlX3NlYXJjaGAsIG9yXG4gICAqIGBmdW5jdGlvbmAuXG4gICAqL1xuICB0b29sX2NhbGxzOiBBcnJheTxUb29sQ2FsbD47XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBgdG9vbF9jYWxsc2AuXG4gICAqL1xuICB0eXBlOiAndG9vbF9jYWxscyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFJldHJpZXZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhZGRpdGlvbmFsIGZpZWxkcyB0byBpbmNsdWRlIGluIHRoZSByZXNwb25zZS4gQ3VycmVudGx5IHRoZSBvbmx5XG4gICAqIHN1cHBvcnRlZCB2YWx1ZSBpcyBgc3RlcF9kZXRhaWxzLnRvb2xfY2FsbHNbKl0uZmlsZV9zZWFyY2gucmVzdWx0c1sqXS5jb250ZW50YFxuICAgKiB0byBmZXRjaCB0aGUgZmlsZSBzZWFyY2ggcmVzdWx0IGNvbnRlbnQuXG4gICAqXG4gICAqIFNlZSB0aGVcbiAgICogW2ZpbGUgc2VhcmNoIHRvb2wgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXNzaXN0YW50cy90b29scy9maWxlLXNlYXJjaCNjdXN0b21pemluZy1maWxlLXNlYXJjaC1zZXR0aW5ncylcbiAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICBpbmNsdWRlPzogQXJyYXk8UnVuU3RlcEluY2x1ZGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBMaXN0UGFyYW1zIGV4dGVuZHMgQ3Vyc29yUGFnZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGN1cnNvciBmb3IgdXNlIGluIHBhZ2luYXRpb24uIGBiZWZvcmVgIGlzIGFuIG9iamVjdCBJRCB0aGF0IGRlZmluZXMgeW91ciBwbGFjZVxuICAgKiBpbiB0aGUgbGlzdC4gRm9yIGluc3RhbmNlLCBpZiB5b3UgbWFrZSBhIGxpc3QgcmVxdWVzdCBhbmQgcmVjZWl2ZSAxMDAgb2JqZWN0cyxcbiAgICogc3RhcnRpbmcgd2l0aCBvYmpfZm9vLCB5b3VyIHN1YnNlcXVlbnQgY2FsbCBjYW4gaW5jbHVkZSBiZWZvcmU9b2JqX2ZvbyBpbiBvcmRlclxuICAgKiB0byBmZXRjaCB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgbGlzdC5cbiAgICovXG4gIGJlZm9yZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGFkZGl0aW9uYWwgZmllbGRzIHRvIGluY2x1ZGUgaW4gdGhlIHJlc3BvbnNlLiBDdXJyZW50bHkgdGhlIG9ubHlcbiAgICogc3VwcG9ydGVkIHZhbHVlIGlzIGBzdGVwX2RldGFpbHMudG9vbF9jYWxsc1sqXS5maWxlX3NlYXJjaC5yZXN1bHRzWypdLmNvbnRlbnRgXG4gICAqIHRvIGZldGNoIHRoZSBmaWxlIHNlYXJjaCByZXN1bHQgY29udGVudC5cbiAgICpcbiAgICogU2VlIHRoZVxuICAgKiBbZmlsZSBzZWFyY2ggdG9vbCBkb2N1bWVudGF0aW9uXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hc3Npc3RhbnRzL3Rvb2xzL2ZpbGUtc2VhcmNoI2N1c3RvbWl6aW5nLWZpbGUtc2VhcmNoLXNldHRpbmdzKVxuICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIGluY2x1ZGU/OiBBcnJheTxSdW5TdGVwSW5jbHVkZT47XG5cbiAgLyoqXG4gICAqIFNvcnQgb3JkZXIgYnkgdGhlIGBjcmVhdGVkX2F0YCB0aW1lc3RhbXAgb2YgdGhlIG9iamVjdHMuIGBhc2NgIGZvciBhc2NlbmRpbmdcbiAgICogb3JkZXIgYW5kIGBkZXNjYCBmb3IgZGVzY2VuZGluZyBvcmRlci5cbiAgICovXG4gIG9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cblN0ZXBzLlJ1blN0ZXBzUGFnZSA9IFJ1blN0ZXBzUGFnZTtcblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIFN0ZXBzIHtcbiAgZXhwb3J0IHtcbiAgICB0eXBlIENvZGVJbnRlcnByZXRlckxvZ3MgYXMgQ29kZUludGVycHJldGVyTG9ncyxcbiAgICB0eXBlIENvZGVJbnRlcnByZXRlck91dHB1dEltYWdlIGFzIENvZGVJbnRlcnByZXRlck91dHB1dEltYWdlLFxuICAgIHR5cGUgQ29kZUludGVycHJldGVyVG9vbENhbGwgYXMgQ29kZUludGVycHJldGVyVG9vbENhbGwsXG4gICAgdHlwZSBDb2RlSW50ZXJwcmV0ZXJUb29sQ2FsbERlbHRhIGFzIENvZGVJbnRlcnByZXRlclRvb2xDYWxsRGVsdGEsXG4gICAgdHlwZSBGaWxlU2VhcmNoVG9vbENhbGwgYXMgRmlsZVNlYXJjaFRvb2xDYWxsLFxuICAgIHR5cGUgRmlsZVNlYXJjaFRvb2xDYWxsRGVsdGEgYXMgRmlsZVNlYXJjaFRvb2xDYWxsRGVsdGEsXG4gICAgdHlwZSBGdW5jdGlvblRvb2xDYWxsIGFzIEZ1bmN0aW9uVG9vbENhbGwsXG4gICAgdHlwZSBGdW5jdGlvblRvb2xDYWxsRGVsdGEgYXMgRnVuY3Rpb25Ub29sQ2FsbERlbHRhLFxuICAgIHR5cGUgTWVzc2FnZUNyZWF0aW9uU3RlcERldGFpbHMgYXMgTWVzc2FnZUNyZWF0aW9uU3RlcERldGFpbHMsXG4gICAgdHlwZSBSdW5TdGVwIGFzIFJ1blN0ZXAsXG4gICAgdHlwZSBSdW5TdGVwRGVsdGEgYXMgUnVuU3RlcERlbHRhLFxuICAgIHR5cGUgUnVuU3RlcERlbHRhRXZlbnQgYXMgUnVuU3RlcERlbHRhRXZlbnQsXG4gICAgdHlwZSBSdW5TdGVwRGVsdGFNZXNzYWdlRGVsdGEgYXMgUnVuU3RlcERlbHRhTWVzc2FnZURlbHRhLFxuICAgIHR5cGUgUnVuU3RlcEluY2x1ZGUgYXMgUnVuU3RlcEluY2x1ZGUsXG4gICAgdHlwZSBUb29sQ2FsbCBhcyBUb29sQ2FsbCxcbiAgICB0eXBlIFRvb2xDYWxsRGVsdGEgYXMgVG9vbENhbGxEZWx0YSxcbiAgICB0eXBlIFRvb2xDYWxsRGVsdGFPYmplY3QgYXMgVG9vbENhbGxEZWx0YU9iamVjdCxcbiAgICB0eXBlIFRvb2xDYWxsc1N0ZXBEZXRhaWxzIGFzIFRvb2xDYWxsc1N0ZXBEZXRhaWxzLFxuICAgIFJ1blN0ZXBzUGFnZSBhcyBSdW5TdGVwc1BhZ2UsXG4gICAgdHlwZSBTdGVwUmV0cmlldmVQYXJhbXMgYXMgU3RlcFJldHJpZXZlUGFyYW1zLFxuICAgIHR5cGUgU3RlcExpc3RQYXJhbXMgYXMgU3RlcExpc3RQYXJhbXMsXG4gIH07XG59XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBpc1JlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBUElQcm9taXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uLy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQXNzaXN0YW50U3RyZWFtLCBSdW5DcmVhdGVQYXJhbXNCYXNlU3RyZWFtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL0Fzc2lzdGFudFN0cmVhbSc7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXNTdHJlYW0gfSBmcm9tICcuLi8uLi8uLi8uLi9saWIvQXNzaXN0YW50U3RyZWFtJztcbmltcG9ydCAqIGFzIFJ1bnNBUEkgZnJvbSAnLi9ydW5zJztcbmltcG9ydCAqIGFzIFNoYXJlZCBmcm9tICcuLi8uLi8uLi9zaGFyZWQnO1xuaW1wb3J0ICogYXMgQXNzaXN0YW50c0FQSSBmcm9tICcuLi8uLi9hc3Npc3RhbnRzJztcbmltcG9ydCAqIGFzIE1lc3NhZ2VzQVBJIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCAqIGFzIFRocmVhZHNBUEkgZnJvbSAnLi4vdGhyZWFkcyc7XG5pbXBvcnQgKiBhcyBTdGVwc0FQSSBmcm9tICcuL3N0ZXBzJztcbmltcG9ydCB7XG4gIENvZGVJbnRlcnByZXRlckxvZ3MsXG4gIENvZGVJbnRlcnByZXRlck91dHB1dEltYWdlLFxuICBDb2RlSW50ZXJwcmV0ZXJUb29sQ2FsbCxcbiAgQ29kZUludGVycHJldGVyVG9vbENhbGxEZWx0YSxcbiAgRmlsZVNlYXJjaFRvb2xDYWxsLFxuICBGaWxlU2VhcmNoVG9vbENhbGxEZWx0YSxcbiAgRnVuY3Rpb25Ub29sQ2FsbCxcbiAgRnVuY3Rpb25Ub29sQ2FsbERlbHRhLFxuICBNZXNzYWdlQ3JlYXRpb25TdGVwRGV0YWlscyxcbiAgUnVuU3RlcCxcbiAgUnVuU3RlcERlbHRhLFxuICBSdW5TdGVwRGVsdGFFdmVudCxcbiAgUnVuU3RlcERlbHRhTWVzc2FnZURlbHRhLFxuICBSdW5TdGVwSW5jbHVkZSxcbiAgUnVuU3RlcHNQYWdlLFxuICBTdGVwTGlzdFBhcmFtcyxcbiAgU3RlcFJldHJpZXZlUGFyYW1zLFxuICBTdGVwcyxcbiAgVG9vbENhbGwsXG4gIFRvb2xDYWxsRGVsdGEsXG4gIFRvb2xDYWxsRGVsdGFPYmplY3QsXG4gIFRvb2xDYWxsc1N0ZXBEZXRhaWxzLFxufSBmcm9tICcuL3N0ZXBzJztcbmltcG9ydCB7IEN1cnNvclBhZ2UsIHR5cGUgQ3Vyc29yUGFnZVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uLy4uL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgU3RyZWFtIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3RyZWFtaW5nJztcblxuZXhwb3J0IGNsYXNzIFJ1bnMgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIHN0ZXBzOiBTdGVwc0FQSS5TdGVwcyA9IG5ldyBTdGVwc0FQSS5TdGVwcyh0aGlzLl9jbGllbnQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBydW4uXG4gICAqL1xuICBjcmVhdGUoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBwYXJhbXM6IFJ1bkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQVBJUHJvbWlzZTxSdW4+O1xuICBjcmVhdGUoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBwYXJhbXM6IFJ1bkNyZWF0ZVBhcmFtc1N0cmVhbWluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQVBJUHJvbWlzZTxTdHJlYW08QXNzaXN0YW50c0FQSS5Bc3Npc3RhbnRTdHJlYW1FdmVudD4+O1xuICBjcmVhdGUoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBwYXJhbXM6IFJ1bkNyZWF0ZVBhcmFtc0Jhc2UsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IEFQSVByb21pc2U8U3RyZWFtPEFzc2lzdGFudHNBUEkuQXNzaXN0YW50U3RyZWFtRXZlbnQ+IHwgUnVuPjtcbiAgY3JlYXRlKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBSdW5DcmVhdGVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IEFQSVByb21pc2U8UnVuPiB8IEFQSVByb21pc2U8U3RyZWFtPEFzc2lzdGFudHNBUEkuQXNzaXN0YW50U3RyZWFtRXZlbnQ+PiB7XG4gICAgY29uc3QgeyBpbmNsdWRlLCAuLi5ib2R5IH0gPSBwYXJhbXM7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KGAvdGhyZWFkcy8ke3RocmVhZElkfS9ydW5zYCwge1xuICAgICAgcXVlcnk6IHsgaW5jbHVkZSB9LFxuICAgICAgYm9keSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgICAgc3RyZWFtOiBwYXJhbXMuc3RyZWFtID8/IGZhbHNlLFxuICAgIH0pIGFzIEFQSVByb21pc2U8UnVuPiB8IEFQSVByb21pc2U8U3RyZWFtPEFzc2lzdGFudHNBUEkuQXNzaXN0YW50U3RyZWFtRXZlbnQ+PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBydW4uXG4gICAqL1xuICByZXRyaWV2ZSh0aHJlYWRJZDogc3RyaW5nLCBydW5JZDogc3RyaW5nLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxSdW4+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldChgL3RocmVhZHMvJHt0aHJlYWRJZH0vcnVucy8ke3J1bklkfWAsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIGEgcnVuLlxuICAgKi9cbiAgdXBkYXRlKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBib2R5OiBSdW5VcGRhdGVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxSdW4+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoYC90aHJlYWRzLyR7dGhyZWFkSWR9L3J1bnMvJHtydW5JZH1gLCB7XG4gICAgICBib2R5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgcnVucyBiZWxvbmdpbmcgdG8gYSB0aHJlYWQuXG4gICAqL1xuICBsaXN0KFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBSdW5MaXN0UGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPFJ1bnNQYWdlLCBSdW4+O1xuICBsaXN0KHRocmVhZElkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5QYWdlUHJvbWlzZTxSdW5zUGFnZSwgUnVuPjtcbiAgbGlzdChcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBSdW5MaXN0UGFyYW1zIHwgQ29yZS5SZXF1ZXN0T3B0aW9ucyA9IHt9LFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPFJ1bnNQYWdlLCBSdW4+IHtcbiAgICBpZiAoaXNSZXF1ZXN0T3B0aW9ucyhxdWVyeSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3QodGhyZWFkSWQsIHt9LCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdChgL3RocmVhZHMvJHt0aHJlYWRJZH0vcnVuc2AsIFJ1bnNQYWdlLCB7XG4gICAgICBxdWVyeSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgYSBydW4gdGhhdCBpcyBgaW5fcHJvZ3Jlc3NgLlxuICAgKi9cbiAgY2FuY2VsKHRocmVhZElkOiBzdHJpbmcsIHJ1bklkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPFJ1bj4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdChgL3RocmVhZHMvJHt0aHJlYWRJZH0vcnVucy8ke3J1bklkfS9jYW5jZWxgLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGhlbHBlciB0byBjcmVhdGUgYSBydW4gYW4gcG9sbCBmb3IgYSB0ZXJtaW5hbCBzdGF0ZS4gTW9yZSBpbmZvcm1hdGlvbiBvbiBSdW5cbiAgICogbGlmZWN5Y2xlcyBjYW4gYmUgZm91bmQgaGVyZTpcbiAgICogaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXNzaXN0YW50cy9ob3ctaXQtd29ya3MvcnVucy1hbmQtcnVuLXN0ZXBzXG4gICAqL1xuICBhc3luYyBjcmVhdGVBbmRQb2xsKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgYm9keTogUnVuQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zICYgeyBwb2xsSW50ZXJ2YWxNcz86IG51bWJlciB9LFxuICApOiBQcm9taXNlPFJ1bj4ge1xuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHRoaXMuY3JlYXRlKHRocmVhZElkLCBib2R5LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wb2xsKHRocmVhZElkLCBydW4uaWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFJ1biBzdHJlYW1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBzdHJlYW1gIGluc3RlYWRcbiAgICovXG4gIGNyZWF0ZUFuZFN0cmVhbShcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIGJvZHk6IFJ1bkNyZWF0ZVBhcmFtc0Jhc2VTdHJlYW0sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IEFzc2lzdGFudFN0cmVhbSB7XG4gICAgcmV0dXJuIEFzc2lzdGFudFN0cmVhbS5jcmVhdGVBc3Npc3RhbnRTdHJlYW0odGhyZWFkSWQsIHRoaXMuX2NsaWVudC5iZXRhLnRocmVhZHMucnVucywgYm9keSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQSBoZWxwZXIgdG8gcG9sbCBhIHJ1biBzdGF0dXMgdW50aWwgaXQgcmVhY2hlcyBhIHRlcm1pbmFsIHN0YXRlLiBNb3JlXG4gICAqIGluZm9ybWF0aW9uIG9uIFJ1biBsaWZlY3ljbGVzIGNhbiBiZSBmb3VuZCBoZXJlOlxuICAgKiBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hc3Npc3RhbnRzL2hvdy1pdC13b3Jrcy9ydW5zLWFuZC1ydW4tc3RlcHNcbiAgICovXG4gIGFzeW5jIHBvbGwoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBydW5JZDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zICYgeyBwb2xsSW50ZXJ2YWxNcz86IG51bWJlciB9LFxuICApOiBQcm9taXNlPFJ1bj4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7IC4uLm9wdGlvbnM/LmhlYWRlcnMsICdYLVN0YWlubGVzcy1Qb2xsLUhlbHBlcic6ICd0cnVlJyB9O1xuXG4gICAgaWYgKG9wdGlvbnM/LnBvbGxJbnRlcnZhbE1zKSB7XG4gICAgICBoZWFkZXJzWydYLVN0YWlubGVzcy1DdXN0b20tUG9sbC1JbnRlcnZhbCddID0gb3B0aW9ucy5wb2xsSW50ZXJ2YWxNcy50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRhdGE6IHJ1biwgcmVzcG9uc2UgfSA9IGF3YWl0IHRoaXMucmV0cmlldmUodGhyZWFkSWQsIHJ1bklkLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnM6IHsgLi4ub3B0aW9ucz8uaGVhZGVycywgLi4uaGVhZGVycyB9LFxuICAgICAgfSkud2l0aFJlc3BvbnNlKCk7XG5cbiAgICAgIHN3aXRjaCAocnVuLnN0YXR1cykge1xuICAgICAgICAvL0lmIHdlIGFyZSBpbiBhbnkgc29ydCBvZiBpbnRlcm1lZGlhdGUgc3RhdGUgd2UgcG9sbFxuICAgICAgICBjYXNlICdxdWV1ZWQnOlxuICAgICAgICBjYXNlICdpbl9wcm9ncmVzcyc6XG4gICAgICAgIGNhc2UgJ2NhbmNlbGxpbmcnOlxuICAgICAgICAgIGxldCBzbGVlcEludGVydmFsID0gNTAwMDtcblxuICAgICAgICAgIGlmIChvcHRpb25zPy5wb2xsSW50ZXJ2YWxNcykge1xuICAgICAgICAgICAgc2xlZXBJbnRlcnZhbCA9IG9wdGlvbnMucG9sbEludGVydmFsTXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckludGVydmFsID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ29wZW5haS1wb2xsLWFmdGVyLW1zJyk7XG4gICAgICAgICAgICBpZiAoaGVhZGVySW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgY29uc3QgaGVhZGVySW50ZXJ2YWxNcyA9IHBhcnNlSW50KGhlYWRlckludGVydmFsKTtcbiAgICAgICAgICAgICAgaWYgKCFpc05hTihoZWFkZXJJbnRlcnZhbE1zKSkge1xuICAgICAgICAgICAgICAgIHNsZWVwSW50ZXJ2YWwgPSBoZWFkZXJJbnRlcnZhbE1zO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHNsZWVwKHNsZWVwSW50ZXJ2YWwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvL1dlIHJldHVybiB0aGUgcnVuIGluIGFueSB0ZXJtaW5hbCBzdGF0ZS5cbiAgICAgICAgY2FzZSAncmVxdWlyZXNfYWN0aW9uJzpcbiAgICAgICAgY2FzZSAnaW5jb21wbGV0ZSc6XG4gICAgICAgIGNhc2UgJ2NhbmNlbGxlZCc6XG4gICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIGNhc2UgJ2V4cGlyZWQnOlxuICAgICAgICAgIHJldHVybiBydW47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFJ1biBzdHJlYW1cbiAgICovXG4gIHN0cmVhbSh0aHJlYWRJZDogc3RyaW5nLCBib2R5OiBSdW5DcmVhdGVQYXJhbXNCYXNlU3RyZWFtLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IEFzc2lzdGFudFN0cmVhbSB7XG4gICAgcmV0dXJuIEFzc2lzdGFudFN0cmVhbS5jcmVhdGVBc3Npc3RhbnRTdHJlYW0odGhyZWFkSWQsIHRoaXMuX2NsaWVudC5iZXRhLnRocmVhZHMucnVucywgYm9keSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhIHJ1biBoYXMgdGhlIGBzdGF0dXM6IFwicmVxdWlyZXNfYWN0aW9uXCJgIGFuZCBgcmVxdWlyZWRfYWN0aW9uLnR5cGVgIGlzXG4gICAqIGBzdWJtaXRfdG9vbF9vdXRwdXRzYCwgdGhpcyBlbmRwb2ludCBjYW4gYmUgdXNlZCB0byBzdWJtaXQgdGhlIG91dHB1dHMgZnJvbSB0aGVcbiAgICogdG9vbCBjYWxscyBvbmNlIHRoZXkncmUgYWxsIGNvbXBsZXRlZC4gQWxsIG91dHB1dHMgbXVzdCBiZSBzdWJtaXR0ZWQgaW4gYSBzaW5nbGVcbiAgICogcmVxdWVzdC5cbiAgICovXG4gIHN1Ym1pdFRvb2xPdXRwdXRzKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBib2R5OiBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc05vblN0cmVhbWluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQVBJUHJvbWlzZTxSdW4+O1xuICBzdWJtaXRUb29sT3V0cHV0cyhcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgYm9keTogUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXNTdHJlYW1pbmcsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IEFQSVByb21pc2U8U3RyZWFtPEFzc2lzdGFudHNBUEkuQXNzaXN0YW50U3RyZWFtRXZlbnQ+PjtcbiAgc3VibWl0VG9vbE91dHB1dHMoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBydW5JZDogc3RyaW5nLFxuICAgIGJvZHk6IFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zQmFzZSxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQVBJUHJvbWlzZTxTdHJlYW08QXNzaXN0YW50c0FQSS5Bc3Npc3RhbnRTdHJlYW1FdmVudD4gfCBSdW4+O1xuICBzdWJtaXRUb29sT3V0cHV0cyhcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgYm9keTogUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IEFQSVByb21pc2U8UnVuPiB8IEFQSVByb21pc2U8U3RyZWFtPEFzc2lzdGFudHNBUEkuQXNzaXN0YW50U3RyZWFtRXZlbnQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KGAvdGhyZWFkcy8ke3RocmVhZElkfS9ydW5zLyR7cnVuSWR9L3N1Ym1pdF90b29sX291dHB1dHNgLCB7XG4gICAgICBib2R5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgICBzdHJlYW06IGJvZHkuc3RyZWFtID8/IGZhbHNlLFxuICAgIH0pIGFzIEFQSVByb21pc2U8UnVuPiB8IEFQSVByb21pc2U8U3RyZWFtPEFzc2lzdGFudHNBUEkuQXNzaXN0YW50U3RyZWFtRXZlbnQ+PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGhlbHBlciB0byBzdWJtaXQgYSB0b29sIG91dHB1dCB0byBhIHJ1biBhbmQgcG9sbCBmb3IgYSB0ZXJtaW5hbCBydW4gc3RhdGUuXG4gICAqIE1vcmUgaW5mb3JtYXRpb24gb24gUnVuIGxpZmVjeWNsZXMgY2FuIGJlIGZvdW5kIGhlcmU6XG4gICAqIGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2Fzc2lzdGFudHMvaG93LWl0LXdvcmtzL3J1bnMtYW5kLXJ1bi1zdGVwc1xuICAgKi9cbiAgYXN5bmMgc3VibWl0VG9vbE91dHB1dHNBbmRQb2xsKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBib2R5OiBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc05vblN0cmVhbWluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyAmIHsgcG9sbEludGVydmFsTXM/OiBudW1iZXIgfSxcbiAgKTogUHJvbWlzZTxSdW4+IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB0aGlzLnN1Ym1pdFRvb2xPdXRwdXRzKHRocmVhZElkLCBydW5JZCwgYm9keSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucG9sbCh0aHJlYWRJZCwgcnVuLmlkLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXQgdGhlIHRvb2wgb3V0cHV0cyBmcm9tIGEgcHJldmlvdXMgcnVuIGFuZCBzdHJlYW0gdGhlIHJ1biB0byBhIHRlcm1pbmFsXG4gICAqIHN0YXRlLiBNb3JlIGluZm9ybWF0aW9uIG9uIFJ1biBsaWZlY3ljbGVzIGNhbiBiZSBmb3VuZCBoZXJlOlxuICAgKiBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hc3Npc3RhbnRzL2hvdy1pdC13b3Jrcy9ydW5zLWFuZC1ydW4tc3RlcHNcbiAgICovXG4gIHN1Ym1pdFRvb2xPdXRwdXRzU3RyZWFtKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBib2R5OiBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc1N0cmVhbSxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQXNzaXN0YW50U3RyZWFtIHtcbiAgICByZXR1cm4gQXNzaXN0YW50U3RyZWFtLmNyZWF0ZVRvb2xBc3Npc3RhbnRTdHJlYW0oXG4gICAgICB0aHJlYWRJZCxcbiAgICAgIHJ1bklkLFxuICAgICAgdGhpcy5fY2xpZW50LmJldGEudGhyZWFkcy5ydW5zLFxuICAgICAgYm9keSxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUnVuc1BhZ2UgZXh0ZW5kcyBDdXJzb3JQYWdlPFJ1bj4ge31cblxuLyoqXG4gKiBUb29sIGNhbGwgb2JqZWN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVkQWN0aW9uRnVuY3Rpb25Ub29sQ2FsbCB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHRvb2wgY2FsbC4gVGhpcyBJRCBtdXN0IGJlIHJlZmVyZW5jZWQgd2hlbiB5b3Ugc3VibWl0IHRoZSB0b29sXG4gICAqIG91dHB1dHMgaW4gdXNpbmcgdGhlXG4gICAqIFtTdWJtaXQgdG9vbCBvdXRwdXRzIHRvIHJ1bl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9ydW5zL3N1Ym1pdFRvb2xPdXRwdXRzKVxuICAgKiBlbmRwb2ludC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb246IFJlcXVpcmVkQWN0aW9uRnVuY3Rpb25Ub29sQ2FsbC5GdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdG9vbCBjYWxsIHRoZSBvdXRwdXQgaXMgcmVxdWlyZWQgZm9yLiBGb3Igbm93LCB0aGlzIGlzIGFsd2F5c1xuICAgKiBgZnVuY3Rpb25gLlxuICAgKi9cbiAgdHlwZTogJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSZXF1aXJlZEFjdGlvbkZ1bmN0aW9uVG9vbENhbGwge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYXJndW1lbnRzIHRoYXQgdGhlIG1vZGVsIGV4cGVjdHMgeW91IHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGFyZ3VtZW50czogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gZXhlY3V0aW9uIHJ1biBvbiBhXG4gKiBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1biB7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciwgd2hpY2ggY2FuIGJlIHJlZmVyZW5jZWQgaW4gQVBJIGVuZHBvaW50cy5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGVcbiAgICogW2Fzc2lzdGFudF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9hc3Npc3RhbnRzKSB1c2VkIGZvclxuICAgKiBleGVjdXRpb24gb2YgdGhpcyBydW4uXG4gICAqL1xuICBhc3Npc3RhbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgcnVuIHdhcyBjYW5jZWxsZWQuXG4gICAqL1xuICBjYW5jZWxsZWRfYXQ6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIHJ1biB3YXMgY29tcGxldGVkLlxuICAgKi9cbiAgY29tcGxldGVkX2F0OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSBydW4gd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIHJ1biB3aWxsIGV4cGlyZS5cbiAgICovXG4gIGV4cGlyZXNfYXQ6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIHJ1biBmYWlsZWQuXG4gICAqL1xuICBmYWlsZWRfYXQ6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIERldGFpbHMgb24gd2h5IHRoZSBydW4gaXMgaW5jb21wbGV0ZS4gV2lsbCBiZSBgbnVsbGAgaWYgdGhlIHJ1biBpcyBub3RcbiAgICogaW5jb21wbGV0ZS5cbiAgICovXG4gIGluY29tcGxldGVfZGV0YWlsczogUnVuLkluY29tcGxldGVEZXRhaWxzIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGluc3RydWN0aW9ucyB0aGF0IHRoZVxuICAgKiBbYXNzaXN0YW50XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2Fzc2lzdGFudHMpIHVzZWQgZm9yXG4gICAqIHRoaXMgcnVuLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJ1bi4gV2lsbCBiZSBgbnVsbGAgaWYgdGhlcmUgYXJlIG5vIGVycm9ycy5cbiAgICovXG4gIGxhc3RfZXJyb3I6IFJ1bi5MYXN0RXJyb3IgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29tcGxldGlvbiB0b2tlbnMgc3BlY2lmaWVkIHRvIGhhdmUgYmVlbiB1c2VkIG92ZXIgdGhlXG4gICAqIGNvdXJzZSBvZiB0aGUgcnVuLlxuICAgKi9cbiAgbWF4X2NvbXBsZXRpb25fdG9rZW5zOiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvbXB0IHRva2VucyBzcGVjaWZpZWQgdG8gaGF2ZSBiZWVuIHVzZWQgb3ZlciB0aGUgY291cnNlXG4gICAqIG9mIHRoZSBydW4uXG4gICAqL1xuICBtYXhfcHJvbXB0X3Rva2VuczogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kXG4gICAqIHF1ZXJ5aW5nIGZvciBvYmplY3RzIHZpYSBBUEkgb3IgdGhlIGRhc2hib2FyZC5cbiAgICpcbiAgICogS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGhcbiAgICogYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTIgY2hhcmFjdGVycy5cbiAgICovXG4gIG1ldGFkYXRhOiBTaGFyZWQuTWV0YWRhdGEgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZWwgdGhhdCB0aGVcbiAgICogW2Fzc2lzdGFudF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9hc3Npc3RhbnRzKSB1c2VkIGZvclxuICAgKiB0aGlzIHJ1bi5cbiAgICovXG4gIG1vZGVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSwgd2hpY2ggaXMgYWx3YXlzIGB0aHJlYWQucnVuYC5cbiAgICovXG4gIG9iamVjdDogJ3RocmVhZC5ydW4nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZVxuICAgKiBbcGFyYWxsZWwgZnVuY3Rpb24gY2FsbGluZ10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2Z1bmN0aW9uLWNhbGxpbmcjY29uZmlndXJpbmctcGFyYWxsZWwtZnVuY3Rpb24tY2FsbGluZylcbiAgICogZHVyaW5nIHRvb2wgdXNlLlxuICAgKi9cbiAgcGFyYWxsZWxfdG9vbF9jYWxsczogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGV0YWlscyBvbiB0aGUgYWN0aW9uIHJlcXVpcmVkIHRvIGNvbnRpbnVlIHRoZSBydW4uIFdpbGwgYmUgYG51bGxgIGlmIG5vIGFjdGlvblxuICAgKiBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkX2FjdGlvbjogUnVuLlJlcXVpcmVkQWN0aW9uIHwgbnVsbDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBmb3JtYXQgdGhhdCB0aGUgbW9kZWwgbXVzdCBvdXRwdXQuIENvbXBhdGlibGUgd2l0aFxuICAgKiBbR1BULTRvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMjZ3B0LTRvKSxcbiAgICogW0dQVC00IFR1cmJvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMjZ3B0LTQtdHVyYm8tYW5kLWdwdC00KSxcbiAgICogYW5kIGFsbCBHUFQtMy41IFR1cmJvIG1vZGVscyBzaW5jZSBgZ3B0LTMuNS10dXJiby0xMTA2YC5cbiAgICpcbiAgICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX3NjaGVtYVwiLCBcImpzb25fc2NoZW1hXCI6IHsuLi59IH1gIGVuYWJsZXMgU3RydWN0dXJlZFxuICAgKiBPdXRwdXRzIHdoaWNoIGVuc3VyZXMgdGhlIG1vZGVsIHdpbGwgbWF0Y2ggeW91ciBzdXBwbGllZCBKU09OIHNjaGVtYS4gTGVhcm4gbW9yZVxuICAgKiBpbiB0aGVcbiAgICogW1N0cnVjdHVyZWQgT3V0cHV0cyBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3N0cnVjdHVyZWQtb3V0cHV0cykuXG4gICAqXG4gICAqIFNldHRpbmcgdG8gYHsgXCJ0eXBlXCI6IFwianNvbl9vYmplY3RcIiB9YCBlbmFibGVzIEpTT04gbW9kZSwgd2hpY2ggZW5zdXJlcyB0aGVcbiAgICogbWVzc2FnZSB0aGUgbW9kZWwgZ2VuZXJhdGVzIGlzIHZhbGlkIEpTT04uXG4gICAqXG4gICAqICoqSW1wb3J0YW50OioqIHdoZW4gdXNpbmcgSlNPTiBtb2RlLCB5b3UgKiptdXN0KiogYWxzbyBpbnN0cnVjdCB0aGUgbW9kZWwgdG9cbiAgICogcHJvZHVjZSBKU09OIHlvdXJzZWxmIHZpYSBhIHN5c3RlbSBvciB1c2VyIG1lc3NhZ2UuIFdpdGhvdXQgdGhpcywgdGhlIG1vZGVsIG1heVxuICAgKiBnZW5lcmF0ZSBhbiB1bmVuZGluZyBzdHJlYW0gb2Ygd2hpdGVzcGFjZSB1bnRpbCB0aGUgZ2VuZXJhdGlvbiByZWFjaGVzIHRoZSB0b2tlblxuICAgKiBsaW1pdCwgcmVzdWx0aW5nIGluIGEgbG9uZy1ydW5uaW5nIGFuZCBzZWVtaW5nbHkgXCJzdHVja1wiIHJlcXVlc3QuIEFsc28gbm90ZSB0aGF0XG4gICAqIHRoZSBtZXNzYWdlIGNvbnRlbnQgbWF5IGJlIHBhcnRpYWxseSBjdXQgb2ZmIGlmIGBmaW5pc2hfcmVhc29uPVwibGVuZ3RoXCJgLCB3aGljaFxuICAgKiBpbmRpY2F0ZXMgdGhlIGdlbmVyYXRpb24gZXhjZWVkZWQgYG1heF90b2tlbnNgIG9yIHRoZSBjb252ZXJzYXRpb24gZXhjZWVkZWQgdGhlXG4gICAqIG1heCBjb250ZXh0IGxlbmd0aC5cbiAgICovXG4gIHJlc3BvbnNlX2Zvcm1hdDogVGhyZWFkc0FQSS5Bc3Npc3RhbnRSZXNwb25zZUZvcm1hdE9wdGlvbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIHJ1biB3YXMgc3RhcnRlZC5cbiAgICovXG4gIHN0YXJ0ZWRfYXQ6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIHJ1biwgd2hpY2ggY2FuIGJlIGVpdGhlciBgcXVldWVkYCwgYGluX3Byb2dyZXNzYCxcbiAgICogYHJlcXVpcmVzX2FjdGlvbmAsIGBjYW5jZWxsaW5nYCwgYGNhbmNlbGxlZGAsIGBmYWlsZWRgLCBgY29tcGxldGVkYCxcbiAgICogYGluY29tcGxldGVgLCBvciBgZXhwaXJlZGAuXG4gICAqL1xuICBzdGF0dXM6IFJ1blN0YXR1cztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBbdGhyZWFkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3RocmVhZHMpXG4gICAqIHRoYXQgd2FzIGV4ZWN1dGVkIG9uIGFzIGEgcGFydCBvZiB0aGlzIHJ1bi5cbiAgICovXG4gIHRocmVhZF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGljaCAoaWYgYW55KSB0b29sIGlzIGNhbGxlZCBieSB0aGUgbW9kZWwuIGBub25lYCBtZWFucyB0aGUgbW9kZWwgd2lsbFxuICAgKiBub3QgY2FsbCBhbnkgdG9vbHMgYW5kIGluc3RlYWQgZ2VuZXJhdGVzIGEgbWVzc2FnZS4gYGF1dG9gIGlzIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAqIGFuZCBtZWFucyB0aGUgbW9kZWwgY2FuIHBpY2sgYmV0d2VlbiBnZW5lcmF0aW5nIGEgbWVzc2FnZSBvciBjYWxsaW5nIG9uZSBvciBtb3JlXG4gICAqIHRvb2xzLiBgcmVxdWlyZWRgIG1lYW5zIHRoZSBtb2RlbCBtdXN0IGNhbGwgb25lIG9yIG1vcmUgdG9vbHMgYmVmb3JlIHJlc3BvbmRpbmdcbiAgICogdG8gdGhlIHVzZXIuIFNwZWNpZnlpbmcgYSBwYXJ0aWN1bGFyIHRvb2wgbGlrZSBge1widHlwZVwiOiBcImZpbGVfc2VhcmNoXCJ9YCBvclxuICAgKiBge1widHlwZVwiOiBcImZ1bmN0aW9uXCIsIFwiZnVuY3Rpb25cIjoge1wibmFtZVwiOiBcIm15X2Z1bmN0aW9uXCJ9fWAgZm9yY2VzIHRoZSBtb2RlbCB0b1xuICAgKiBjYWxsIHRoYXQgdG9vbC5cbiAgICovXG4gIHRvb2xfY2hvaWNlOiBUaHJlYWRzQVBJLkFzc2lzdGFudFRvb2xDaG9pY2VPcHRpb24gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiB0b29scyB0aGF0IHRoZVxuICAgKiBbYXNzaXN0YW50XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2Fzc2lzdGFudHMpIHVzZWQgZm9yXG4gICAqIHRoaXMgcnVuLlxuICAgKi9cbiAgdG9vbHM6IEFycmF5PEFzc2lzdGFudHNBUEkuQXNzaXN0YW50VG9vbD47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIGZvciBob3cgYSB0aHJlYWQgd2lsbCBiZSB0cnVuY2F0ZWQgcHJpb3IgdG8gdGhlIHJ1bi4gVXNlIHRoaXMgdG9cbiAgICogY29udHJvbCB0aGUgaW50aWFsIGNvbnRleHQgd2luZG93IG9mIHRoZSBydW4uXG4gICAqL1xuICB0cnVuY2F0aW9uX3N0cmF0ZWd5OiBSdW4uVHJ1bmNhdGlvblN0cmF0ZWd5IHwgbnVsbDtcblxuICAvKipcbiAgICogVXNhZ2Ugc3RhdGlzdGljcyByZWxhdGVkIHRvIHRoZSBydW4uIFRoaXMgdmFsdWUgd2lsbCBiZSBgbnVsbGAgaWYgdGhlIHJ1biBpcyBub3RcbiAgICogaW4gYSB0ZXJtaW5hbCBzdGF0ZSAoaS5lLiBgaW5fcHJvZ3Jlc3NgLCBgcXVldWVkYCwgZXRjLikuXG4gICAqL1xuICB1c2FnZTogUnVuLlVzYWdlIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHNhbXBsaW5nIHRlbXBlcmF0dXJlIHVzZWQgZm9yIHRoaXMgcnVuLiBJZiBub3Qgc2V0LCBkZWZhdWx0cyB0byAxLlxuICAgKi9cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVjbGV1cyBzYW1wbGluZyB2YWx1ZSB1c2VkIGZvciB0aGlzIHJ1bi4gSWYgbm90IHNldCwgZGVmYXVsdHMgdG8gMS5cbiAgICovXG4gIHRvcF9wPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSdW4ge1xuICAvKipcbiAgICogRGV0YWlscyBvbiB3aHkgdGhlIHJ1biBpcyBpbmNvbXBsZXRlLiBXaWxsIGJlIGBudWxsYCBpZiB0aGUgcnVuIGlzIG5vdFxuICAgKiBpbmNvbXBsZXRlLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBJbmNvbXBsZXRlRGV0YWlscyB7XG4gICAgLyoqXG4gICAgICogVGhlIHJlYXNvbiB3aHkgdGhlIHJ1biBpcyBpbmNvbXBsZXRlLiBUaGlzIHdpbGwgcG9pbnQgdG8gd2hpY2ggc3BlY2lmaWMgdG9rZW5cbiAgICAgKiBsaW1pdCB3YXMgcmVhY2hlZCBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIHJ1bi5cbiAgICAgKi9cbiAgICByZWFzb24/OiAnbWF4X2NvbXBsZXRpb25fdG9rZW5zJyB8ICdtYXhfcHJvbXB0X3Rva2Vucyc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxhc3QgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcnVuLiBXaWxsIGJlIGBudWxsYCBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBMYXN0RXJyb3Ige1xuICAgIC8qKlxuICAgICAqIE9uZSBvZiBgc2VydmVyX2Vycm9yYCwgYHJhdGVfbGltaXRfZXhjZWVkZWRgLCBvciBgaW52YWxpZF9wcm9tcHRgLlxuICAgICAqL1xuICAgIGNvZGU6ICdzZXJ2ZXJfZXJyb3InIHwgJ3JhdGVfbGltaXRfZXhjZWVkZWQnIHwgJ2ludmFsaWRfcHJvbXB0JztcblxuICAgIC8qKlxuICAgICAqIEEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yLlxuICAgICAqL1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRhaWxzIG9uIHRoZSBhY3Rpb24gcmVxdWlyZWQgdG8gY29udGludWUgdGhlIHJ1bi4gV2lsbCBiZSBgbnVsbGAgaWYgbm8gYWN0aW9uXG4gICAqIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlZEFjdGlvbiB7XG4gICAgLyoqXG4gICAgICogRGV0YWlscyBvbiB0aGUgdG9vbCBvdXRwdXRzIG5lZWRlZCBmb3IgdGhpcyBydW4gdG8gY29udGludWUuXG4gICAgICovXG4gICAgc3VibWl0X3Rvb2xfb3V0cHV0czogUmVxdWlyZWRBY3Rpb24uU3VibWl0VG9vbE91dHB1dHM7XG5cbiAgICAvKipcbiAgICAgKiBGb3Igbm93LCB0aGlzIGlzIGFsd2F5cyBgc3VibWl0X3Rvb2xfb3V0cHV0c2AuXG4gICAgICovXG4gICAgdHlwZTogJ3N1Ym1pdF90b29sX291dHB1dHMnO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBSZXF1aXJlZEFjdGlvbiB7XG4gICAgLyoqXG4gICAgICogRGV0YWlscyBvbiB0aGUgdG9vbCBvdXRwdXRzIG5lZWRlZCBmb3IgdGhpcyBydW4gdG8gY29udGludWUuXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBTdWJtaXRUb29sT3V0cHV0cyB7XG4gICAgICAvKipcbiAgICAgICAqIEEgbGlzdCBvZiB0aGUgcmVsZXZhbnQgdG9vbCBjYWxscy5cbiAgICAgICAqL1xuICAgICAgdG9vbF9jYWxsczogQXJyYXk8UnVuc0FQSS5SZXF1aXJlZEFjdGlvbkZ1bmN0aW9uVG9vbENhbGw+O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9scyBmb3IgaG93IGEgdGhyZWFkIHdpbGwgYmUgdHJ1bmNhdGVkIHByaW9yIHRvIHRoZSBydW4uIFVzZSB0aGlzIHRvXG4gICAqIGNvbnRyb2wgdGhlIGludGlhbCBjb250ZXh0IHdpbmRvdyBvZiB0aGUgcnVuLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUcnVuY2F0aW9uU3RyYXRlZ3kge1xuICAgIC8qKlxuICAgICAqIFRoZSB0cnVuY2F0aW9uIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHRocmVhZC4gVGhlIGRlZmF1bHQgaXMgYGF1dG9gLiBJZiBzZXQgdG9cbiAgICAgKiBgbGFzdF9tZXNzYWdlc2AsIHRoZSB0aHJlYWQgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIG4gbW9zdCByZWNlbnQgbWVzc2FnZXMgaW5cbiAgICAgKiB0aGUgdGhyZWFkLiBXaGVuIHNldCB0byBgYXV0b2AsIG1lc3NhZ2VzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRocmVhZCB3aWxsIGJlXG4gICAgICogZHJvcHBlZCB0byBmaXQgdGhlIGNvbnRleHQgbGVuZ3RoIG9mIHRoZSBtb2RlbCwgYG1heF9wcm9tcHRfdG9rZW5zYC5cbiAgICAgKi9cbiAgICB0eXBlOiAnYXV0bycgfCAnbGFzdF9tZXNzYWdlcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIG1vc3QgcmVjZW50IG1lc3NhZ2VzIGZyb20gdGhlIHRocmVhZCB3aGVuIGNvbnN0cnVjdGluZyB0aGUgY29udGV4dFxuICAgICAqIGZvciB0aGUgcnVuLlxuICAgICAqL1xuICAgIGxhc3RfbWVzc2FnZXM/OiBudW1iZXIgfCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzYWdlIHN0YXRpc3RpY3MgcmVsYXRlZCB0byB0aGUgcnVuLiBUaGlzIHZhbHVlIHdpbGwgYmUgYG51bGxgIGlmIHRoZSBydW4gaXMgbm90XG4gICAqIGluIGEgdGVybWluYWwgc3RhdGUgKGkuZS4gYGluX3Byb2dyZXNzYCwgYHF1ZXVlZGAsIGV0Yy4pLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBVc2FnZSB7XG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIGNvbXBsZXRpb24gdG9rZW5zIHVzZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZSBydW4uXG4gICAgICovXG4gICAgY29tcGxldGlvbl90b2tlbnM6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBwcm9tcHQgdG9rZW5zIHVzZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZSBydW4uXG4gICAgICovXG4gICAgcHJvbXB0X3Rva2VuczogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVG90YWwgbnVtYmVyIG9mIHRva2VucyB1c2VkIChwcm9tcHQgKyBjb21wbGV0aW9uKS5cbiAgICAgKi9cbiAgICB0b3RhbF90b2tlbnM6IG51bWJlcjtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBzdGF0dXMgb2YgdGhlIHJ1biwgd2hpY2ggY2FuIGJlIGVpdGhlciBgcXVldWVkYCwgYGluX3Byb2dyZXNzYCxcbiAqIGByZXF1aXJlc19hY3Rpb25gLCBgY2FuY2VsbGluZ2AsIGBjYW5jZWxsZWRgLCBgZmFpbGVkYCwgYGNvbXBsZXRlZGAsXG4gKiBgaW5jb21wbGV0ZWAsIG9yIGBleHBpcmVkYC5cbiAqL1xuZXhwb3J0IHR5cGUgUnVuU3RhdHVzID1cbiAgfCAncXVldWVkJ1xuICB8ICdpbl9wcm9ncmVzcydcbiAgfCAncmVxdWlyZXNfYWN0aW9uJ1xuICB8ICdjYW5jZWxsaW5nJ1xuICB8ICdjYW5jZWxsZWQnXG4gIHwgJ2ZhaWxlZCdcbiAgfCAnY29tcGxldGVkJ1xuICB8ICdpbmNvbXBsZXRlJ1xuICB8ICdleHBpcmVkJztcblxuZXhwb3J0IHR5cGUgUnVuQ3JlYXRlUGFyYW1zID0gUnVuQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nIHwgUnVuQ3JlYXRlUGFyYW1zU3RyZWFtaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bkNyZWF0ZVBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogQm9keSBwYXJhbTogVGhlIElEIG9mIHRoZVxuICAgKiBbYXNzaXN0YW50XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2Fzc2lzdGFudHMpIHRvIHVzZSB0b1xuICAgKiBleGVjdXRlIHRoaXMgcnVuLlxuICAgKi9cbiAgYXNzaXN0YW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHBhcmFtOiBBIGxpc3Qgb2YgYWRkaXRpb25hbCBmaWVsZHMgdG8gaW5jbHVkZSBpbiB0aGUgcmVzcG9uc2UuIEN1cnJlbnRseVxuICAgKiB0aGUgb25seSBzdXBwb3J0ZWQgdmFsdWUgaXNcbiAgICogYHN0ZXBfZGV0YWlscy50b29sX2NhbGxzWypdLmZpbGVfc2VhcmNoLnJlc3VsdHNbKl0uY29udGVudGAgdG8gZmV0Y2ggdGhlIGZpbGVcbiAgICogc2VhcmNoIHJlc3VsdCBjb250ZW50LlxuICAgKlxuICAgKiBTZWUgdGhlXG4gICAqIFtmaWxlIHNlYXJjaCB0b29sIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2Fzc2lzdGFudHMvdG9vbHMvZmlsZS1zZWFyY2gjY3VzdG9taXppbmctZmlsZS1zZWFyY2gtc2V0dGluZ3MpXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgaW5jbHVkZT86IEFycmF5PFN0ZXBzQVBJLlJ1blN0ZXBJbmNsdWRlPjtcblxuICAvKipcbiAgICogQm9keSBwYXJhbTogQXBwZW5kcyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSBpbnN0cnVjdGlvbnMgZm9yXG4gICAqIHRoZSBydW4uIFRoaXMgaXMgdXNlZnVsIGZvciBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9uIGEgcGVyLXJ1biBiYXNpcyB3aXRob3V0XG4gICAqIG92ZXJyaWRpbmcgb3RoZXIgaW5zdHJ1Y3Rpb25zLlxuICAgKi9cbiAgYWRkaXRpb25hbF9pbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBCb2R5IHBhcmFtOiBBZGRzIGFkZGl0aW9uYWwgbWVzc2FnZXMgdG8gdGhlIHRocmVhZCBiZWZvcmUgY3JlYXRpbmcgdGhlIHJ1bi5cbiAgICovXG4gIGFkZGl0aW9uYWxfbWVzc2FnZXM/OiBBcnJheTxSdW5DcmVhdGVQYXJhbXMuQWRkaXRpb25hbE1lc3NhZ2U+IHwgbnVsbDtcblxuICAvKipcbiAgICogQm9keSBwYXJhbTogT3ZlcnJpZGVzIHRoZVxuICAgKiBbaW5zdHJ1Y3Rpb25zXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2Fzc2lzdGFudHMvY3JlYXRlQXNzaXN0YW50KVxuICAgKiBvZiB0aGUgYXNzaXN0YW50LiBUaGlzIGlzIHVzZWZ1bCBmb3IgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvbiBhIHBlci1ydW4gYmFzaXMuXG4gICAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBCb2R5IHBhcmFtOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29tcGxldGlvbiB0b2tlbnMgdGhhdCBtYXkgYmUgdXNlZCBvdmVyIHRoZVxuICAgKiBjb3Vyc2Ugb2YgdGhlIHJ1bi4gVGhlIHJ1biB3aWxsIG1ha2UgYSBiZXN0IGVmZm9ydCB0byB1c2Ugb25seSB0aGUgbnVtYmVyIG9mXG4gICAqIGNvbXBsZXRpb24gdG9rZW5zIHNwZWNpZmllZCwgYWNyb3NzIG11bHRpcGxlIHR1cm5zIG9mIHRoZSBydW4uIElmIHRoZSBydW5cbiAgICogZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRpb24gdG9rZW5zIHNwZWNpZmllZCwgdGhlIHJ1biB3aWxsIGVuZCB3aXRoIHN0YXR1c1xuICAgKiBgaW5jb21wbGV0ZWAuIFNlZSBgaW5jb21wbGV0ZV9kZXRhaWxzYCBmb3IgbW9yZSBpbmZvLlxuICAgKi9cbiAgbWF4X2NvbXBsZXRpb25fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQm9keSBwYXJhbTogVGhlIG1heGltdW0gbnVtYmVyIG9mIHByb21wdCB0b2tlbnMgdGhhdCBtYXkgYmUgdXNlZCBvdmVyIHRoZSBjb3Vyc2VcbiAgICogb2YgdGhlIHJ1bi4gVGhlIHJ1biB3aWxsIG1ha2UgYSBiZXN0IGVmZm9ydCB0byB1c2Ugb25seSB0aGUgbnVtYmVyIG9mIHByb21wdFxuICAgKiB0b2tlbnMgc3BlY2lmaWVkLCBhY3Jvc3MgbXVsdGlwbGUgdHVybnMgb2YgdGhlIHJ1bi4gSWYgdGhlIHJ1biBleGNlZWRzIHRoZVxuICAgKiBudW1iZXIgb2YgcHJvbXB0IHRva2VucyBzcGVjaWZpZWQsIHRoZSBydW4gd2lsbCBlbmQgd2l0aCBzdGF0dXMgYGluY29tcGxldGVgLlxuICAgKiBTZWUgYGluY29tcGxldGVfZGV0YWlsc2AgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIG1heF9wcm9tcHRfdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQm9keSBwYXJhbTogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXNcbiAgICogY2FuIGJlIHVzZWZ1bCBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYVxuICAgKiBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kIHF1ZXJ5aW5nIGZvciBvYmplY3RzIHZpYSBBUEkgb3IgdGhlIGRhc2hib2FyZC5cbiAgICpcbiAgICogS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGhcbiAgICogYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTIgY2hhcmFjdGVycy5cbiAgICovXG4gIG1ldGFkYXRhPzogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogQm9keSBwYXJhbTogVGhlIElEIG9mIHRoZVxuICAgKiBbTW9kZWxdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbW9kZWxzKSB0byBiZSB1c2VkIHRvXG4gICAqIGV4ZWN1dGUgdGhpcyBydW4uIElmIGEgdmFsdWUgaXMgcHJvdmlkZWQgaGVyZSwgaXQgd2lsbCBvdmVycmlkZSB0aGUgbW9kZWxcbiAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBhc3Npc3RhbnQuIElmIG5vdCwgdGhlIG1vZGVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzaXN0YW50XG4gICAqIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIG1vZGVsPzogKHN0cmluZyAmIHt9KSB8IFNoYXJlZC5DaGF0TW9kZWwgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBCb2R5IHBhcmFtOiBXaGV0aGVyIHRvIGVuYWJsZVxuICAgKiBbcGFyYWxsZWwgZnVuY3Rpb24gY2FsbGluZ10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2Z1bmN0aW9uLWNhbGxpbmcjY29uZmlndXJpbmctcGFyYWxsZWwtZnVuY3Rpb24tY2FsbGluZylcbiAgICogZHVyaW5nIHRvb2wgdXNlLlxuICAgKi9cbiAgcGFyYWxsZWxfdG9vbF9jYWxscz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJvZHkgcGFyYW06ICoqby1zZXJpZXMgbW9kZWxzIG9ubHkqKlxuICAgKlxuICAgKiBDb25zdHJhaW5zIGVmZm9ydCBvbiByZWFzb25pbmcgZm9yXG4gICAqIFtyZWFzb25pbmcgbW9kZWxzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvcmVhc29uaW5nKS4gQ3VycmVudGx5XG4gICAqIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGBsb3dgLCBgbWVkaXVtYCwgYW5kIGBoaWdoYC4gUmVkdWNpbmcgcmVhc29uaW5nIGVmZm9ydCBjYW5cbiAgICogcmVzdWx0IGluIGZhc3RlciByZXNwb25zZXMgYW5kIGZld2VyIHRva2VucyB1c2VkIG9uIHJlYXNvbmluZyBpbiBhIHJlc3BvbnNlLlxuICAgKi9cbiAgcmVhc29uaW5nX2VmZm9ydD86IFNoYXJlZC5SZWFzb25pbmdFZmZvcnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBCb2R5IHBhcmFtOiBTcGVjaWZpZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2RlbCBtdXN0IG91dHB1dC4gQ29tcGF0aWJsZSB3aXRoXG4gICAqIFtHUFQtNG9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscyNncHQtNG8pLFxuICAgKiBbR1BULTQgVHVyYm9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscyNncHQtNC10dXJiby1hbmQtZ3B0LTQpLFxuICAgKiBhbmQgYWxsIEdQVC0zLjUgVHVyYm8gbW9kZWxzIHNpbmNlIGBncHQtMy41LXR1cmJvLTExMDZgLlxuICAgKlxuICAgKiBTZXR0aW5nIHRvIGB7IFwidHlwZVwiOiBcImpzb25fc2NoZW1hXCIsIFwianNvbl9zY2hlbWFcIjogey4uLn0gfWAgZW5hYmxlcyBTdHJ1Y3R1cmVkXG4gICAqIE91dHB1dHMgd2hpY2ggZW5zdXJlcyB0aGUgbW9kZWwgd2lsbCBtYXRjaCB5b3VyIHN1cHBsaWVkIEpTT04gc2NoZW1hLiBMZWFybiBtb3JlXG4gICAqIGluIHRoZVxuICAgKiBbU3RydWN0dXJlZCBPdXRwdXRzIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3RydWN0dXJlZC1vdXRwdXRzKS5cbiAgICpcbiAgICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX29iamVjdFwiIH1gIGVuYWJsZXMgSlNPTiBtb2RlLCB3aGljaCBlbnN1cmVzIHRoZVxuICAgKiBtZXNzYWdlIHRoZSBtb2RlbCBnZW5lcmF0ZXMgaXMgdmFsaWQgSlNPTi5cbiAgICpcbiAgICogKipJbXBvcnRhbnQ6Kiogd2hlbiB1c2luZyBKU09OIG1vZGUsIHlvdSAqKm11c3QqKiBhbHNvIGluc3RydWN0IHRoZSBtb2RlbCB0b1xuICAgKiBwcm9kdWNlIEpTT04geW91cnNlbGYgdmlhIGEgc3lzdGVtIG9yIHVzZXIgbWVzc2FnZS4gV2l0aG91dCB0aGlzLCB0aGUgbW9kZWwgbWF5XG4gICAqIGdlbmVyYXRlIGFuIHVuZW5kaW5nIHN0cmVhbSBvZiB3aGl0ZXNwYWNlIHVudGlsIHRoZSBnZW5lcmF0aW9uIHJlYWNoZXMgdGhlIHRva2VuXG4gICAqIGxpbWl0LCByZXN1bHRpbmcgaW4gYSBsb25nLXJ1bm5pbmcgYW5kIHNlZW1pbmdseSBcInN0dWNrXCIgcmVxdWVzdC4gQWxzbyBub3RlIHRoYXRcbiAgICogdGhlIG1lc3NhZ2UgY29udGVudCBtYXkgYmUgcGFydGlhbGx5IGN1dCBvZmYgaWYgYGZpbmlzaF9yZWFzb249XCJsZW5ndGhcImAsIHdoaWNoXG4gICAqIGluZGljYXRlcyB0aGUgZ2VuZXJhdGlvbiBleGNlZWRlZCBgbWF4X3Rva2Vuc2Agb3IgdGhlIGNvbnZlcnNhdGlvbiBleGNlZWRlZCB0aGVcbiAgICogbWF4IGNvbnRleHQgbGVuZ3RoLlxuICAgKi9cbiAgcmVzcG9uc2VfZm9ybWF0PzogVGhyZWFkc0FQSS5Bc3Npc3RhbnRSZXNwb25zZUZvcm1hdE9wdGlvbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEJvZHkgcGFyYW06IElmIGB0cnVlYCwgcmV0dXJucyBhIHN0cmVhbSBvZiBldmVudHMgdGhhdCBoYXBwZW4gZHVyaW5nIHRoZSBSdW4gYXNcbiAgICogc2VydmVyLXNlbnQgZXZlbnRzLCB0ZXJtaW5hdGluZyB3aGVuIHRoZSBSdW4gZW50ZXJzIGEgdGVybWluYWwgc3RhdGUgd2l0aCBhXG4gICAqIGBkYXRhOiBbRE9ORV1gIG1lc3NhZ2UuXG4gICAqL1xuICBzdHJlYW0/OiBib29sZWFuIHwgbnVsbDtcblxuICAvKipcbiAgICogQm9keSBwYXJhbTogV2hhdCBzYW1wbGluZyB0ZW1wZXJhdHVyZSB0byB1c2UsIGJldHdlZW4gMCBhbmQgMi4gSGlnaGVyIHZhbHVlc1xuICAgKiBsaWtlIDAuOCB3aWxsIG1ha2UgdGhlIG91dHB1dCBtb3JlIHJhbmRvbSwgd2hpbGUgbG93ZXIgdmFsdWVzIGxpa2UgMC4yIHdpbGwgbWFrZVxuICAgKiBpdCBtb3JlIGZvY3VzZWQgYW5kIGRldGVybWluaXN0aWMuXG4gICAqL1xuICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEJvZHkgcGFyYW06IENvbnRyb2xzIHdoaWNoIChpZiBhbnkpIHRvb2wgaXMgY2FsbGVkIGJ5IHRoZSBtb2RlbC4gYG5vbmVgIG1lYW5zXG4gICAqIHRoZSBtb2RlbCB3aWxsIG5vdCBjYWxsIGFueSB0b29scyBhbmQgaW5zdGVhZCBnZW5lcmF0ZXMgYSBtZXNzYWdlLiBgYXV0b2AgaXMgdGhlXG4gICAqIGRlZmF1bHQgdmFsdWUgYW5kIG1lYW5zIHRoZSBtb2RlbCBjYW4gcGljayBiZXR3ZWVuIGdlbmVyYXRpbmcgYSBtZXNzYWdlIG9yXG4gICAqIGNhbGxpbmcgb25lIG9yIG1vcmUgdG9vbHMuIGByZXF1aXJlZGAgbWVhbnMgdGhlIG1vZGVsIG11c3QgY2FsbCBvbmUgb3IgbW9yZVxuICAgKiB0b29scyBiZWZvcmUgcmVzcG9uZGluZyB0byB0aGUgdXNlci4gU3BlY2lmeWluZyBhIHBhcnRpY3VsYXIgdG9vbCBsaWtlXG4gICAqIGB7XCJ0eXBlXCI6IFwiZmlsZV9zZWFyY2hcIn1gIG9yXG4gICAqIGB7XCJ0eXBlXCI6IFwiZnVuY3Rpb25cIiwgXCJmdW5jdGlvblwiOiB7XCJuYW1lXCI6IFwibXlfZnVuY3Rpb25cIn19YCBmb3JjZXMgdGhlIG1vZGVsIHRvXG4gICAqIGNhbGwgdGhhdCB0b29sLlxuICAgKi9cbiAgdG9vbF9jaG9pY2U/OiBUaHJlYWRzQVBJLkFzc2lzdGFudFRvb2xDaG9pY2VPcHRpb24gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBCb2R5IHBhcmFtOiBPdmVycmlkZSB0aGUgdG9vbHMgdGhlIGFzc2lzdGFudCBjYW4gdXNlIGZvciB0aGlzIHJ1bi4gVGhpcyBpc1xuICAgKiB1c2VmdWwgZm9yIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb24gYSBwZXItcnVuIGJhc2lzLlxuICAgKi9cbiAgdG9vbHM/OiBBcnJheTxBc3Npc3RhbnRzQVBJLkFzc2lzdGFudFRvb2w+IHwgbnVsbDtcblxuICAvKipcbiAgICogQm9keSBwYXJhbTogQW4gYWx0ZXJuYXRpdmUgdG8gc2FtcGxpbmcgd2l0aCB0ZW1wZXJhdHVyZSwgY2FsbGVkIG51Y2xldXNcbiAgICogc2FtcGxpbmcsIHdoZXJlIHRoZSBtb2RlbCBjb25zaWRlcnMgdGhlIHJlc3VsdHMgb2YgdGhlIHRva2VucyB3aXRoIHRvcF9wXG4gICAqIHByb2JhYmlsaXR5IG1hc3MuIFNvIDAuMSBtZWFucyBvbmx5IHRoZSB0b2tlbnMgY29tcHJpc2luZyB0aGUgdG9wIDEwJVxuICAgKiBwcm9iYWJpbGl0eSBtYXNzIGFyZSBjb25zaWRlcmVkLlxuICAgKlxuICAgKiBXZSBnZW5lcmFsbHkgcmVjb21tZW5kIGFsdGVyaW5nIHRoaXMgb3IgdGVtcGVyYXR1cmUgYnV0IG5vdCBib3RoLlxuICAgKi9cbiAgdG9wX3A/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBCb2R5IHBhcmFtOiBDb250cm9scyBmb3IgaG93IGEgdGhyZWFkIHdpbGwgYmUgdHJ1bmNhdGVkIHByaW9yIHRvIHRoZSBydW4uIFVzZVxuICAgKiB0aGlzIHRvIGNvbnRyb2wgdGhlIGludGlhbCBjb250ZXh0IHdpbmRvdyBvZiB0aGUgcnVuLlxuICAgKi9cbiAgdHJ1bmNhdGlvbl9zdHJhdGVneT86IFJ1bkNyZWF0ZVBhcmFtcy5UcnVuY2F0aW9uU3RyYXRlZ3kgfCBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFJ1bkNyZWF0ZVBhcmFtcyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgQWRkaXRpb25hbE1lc3NhZ2Uge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIGNvbnRlbnQ6IHN0cmluZyB8IEFycmF5PE1lc3NhZ2VzQVBJLk1lc3NhZ2VDb250ZW50UGFydFBhcmFtPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSByb2xlIG9mIHRoZSBlbnRpdHkgdGhhdCBpcyBjcmVhdGluZyB0aGUgbWVzc2FnZS4gQWxsb3dlZCB2YWx1ZXMgaW5jbHVkZTpcbiAgICAgKlxuICAgICAqIC0gYHVzZXJgOiBJbmRpY2F0ZXMgdGhlIG1lc3NhZ2UgaXMgc2VudCBieSBhbiBhY3R1YWwgdXNlciBhbmQgc2hvdWxkIGJlIHVzZWQgaW5cbiAgICAgKiAgIG1vc3QgY2FzZXMgdG8gcmVwcmVzZW50IHVzZXItZ2VuZXJhdGVkIG1lc3NhZ2VzLlxuICAgICAqIC0gYGFzc2lzdGFudGA6IEluZGljYXRlcyB0aGUgbWVzc2FnZSBpcyBnZW5lcmF0ZWQgYnkgdGhlIGFzc2lzdGFudC4gVXNlIHRoaXNcbiAgICAgKiAgIHZhbHVlIHRvIGluc2VydCBtZXNzYWdlcyBmcm9tIHRoZSBhc3Npc3RhbnQgaW50byB0aGUgY29udmVyc2F0aW9uLlxuICAgICAqL1xuICAgIHJvbGU6ICd1c2VyJyB8ICdhc3Npc3RhbnQnO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGZpbGVzIGF0dGFjaGVkIHRvIHRoZSBtZXNzYWdlLCBhbmQgdGhlIHRvb2xzIHRoZXkgc2hvdWxkIGJlIGFkZGVkIHRvLlxuICAgICAqL1xuICAgIGF0dGFjaG1lbnRzPzogQXJyYXk8QWRkaXRpb25hbE1lc3NhZ2UuQXR0YWNobWVudD4gfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAgICpcbiAgICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAgICovXG4gICAgbWV0YWRhdGE/OiBTaGFyZWQuTWV0YWRhdGEgfCBudWxsO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBBZGRpdGlvbmFsTWVzc2FnZSB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIElEIG9mIHRoZSBmaWxlIHRvIGF0dGFjaCB0byB0aGUgbWVzc2FnZS5cbiAgICAgICAqL1xuICAgICAgZmlsZV9pZD86IHN0cmluZztcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdG9vbHMgdG8gYWRkIHRoaXMgZmlsZSB0by5cbiAgICAgICAqL1xuICAgICAgdG9vbHM/OiBBcnJheTxBc3Npc3RhbnRzQVBJLkNvZGVJbnRlcnByZXRlclRvb2wgfCBBdHRhY2htZW50LkZpbGVTZWFyY2g+O1xuICAgIH1cblxuICAgIGV4cG9ydCBuYW1lc3BhY2UgQXR0YWNobWVudCB7XG4gICAgICBleHBvcnQgaW50ZXJmYWNlIEZpbGVTZWFyY2gge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHR5cGUgb2YgdG9vbCBiZWluZyBkZWZpbmVkOiBgZmlsZV9zZWFyY2hgXG4gICAgICAgICAqL1xuICAgICAgICB0eXBlOiAnZmlsZV9zZWFyY2gnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9scyBmb3IgaG93IGEgdGhyZWFkIHdpbGwgYmUgdHJ1bmNhdGVkIHByaW9yIHRvIHRoZSBydW4uIFVzZSB0aGlzIHRvXG4gICAqIGNvbnRyb2wgdGhlIGludGlhbCBjb250ZXh0IHdpbmRvdyBvZiB0aGUgcnVuLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUcnVuY2F0aW9uU3RyYXRlZ3kge1xuICAgIC8qKlxuICAgICAqIFRoZSB0cnVuY2F0aW9uIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHRocmVhZC4gVGhlIGRlZmF1bHQgaXMgYGF1dG9gLiBJZiBzZXQgdG9cbiAgICAgKiBgbGFzdF9tZXNzYWdlc2AsIHRoZSB0aHJlYWQgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIG4gbW9zdCByZWNlbnQgbWVzc2FnZXMgaW5cbiAgICAgKiB0aGUgdGhyZWFkLiBXaGVuIHNldCB0byBgYXV0b2AsIG1lc3NhZ2VzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRocmVhZCB3aWxsIGJlXG4gICAgICogZHJvcHBlZCB0byBmaXQgdGhlIGNvbnRleHQgbGVuZ3RoIG9mIHRoZSBtb2RlbCwgYG1heF9wcm9tcHRfdG9rZW5zYC5cbiAgICAgKi9cbiAgICB0eXBlOiAnYXV0bycgfCAnbGFzdF9tZXNzYWdlcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIG1vc3QgcmVjZW50IG1lc3NhZ2VzIGZyb20gdGhlIHRocmVhZCB3aGVuIGNvbnN0cnVjdGluZyB0aGUgY29udGV4dFxuICAgICAqIGZvciB0aGUgcnVuLlxuICAgICAqL1xuICAgIGxhc3RfbWVzc2FnZXM/OiBudW1iZXIgfCBudWxsO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUnVuQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nID0gUnVuc0FQSS5SdW5DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmc7XG4gIGV4cG9ydCB0eXBlIFJ1bkNyZWF0ZVBhcmFtc1N0cmVhbWluZyA9IFJ1bnNBUEkuUnVuQ3JlYXRlUGFyYW1zU3RyZWFtaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyBleHRlbmRzIFJ1bkNyZWF0ZVBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogQm9keSBwYXJhbTogSWYgYHRydWVgLCByZXR1cm5zIGEgc3RyZWFtIG9mIGV2ZW50cyB0aGF0IGhhcHBlbiBkdXJpbmcgdGhlIFJ1biBhc1xuICAgKiBzZXJ2ZXItc2VudCBldmVudHMsIHRlcm1pbmF0aW5nIHdoZW4gdGhlIFJ1biBlbnRlcnMgYSB0ZXJtaW5hbCBzdGF0ZSB3aXRoIGFcbiAgICogYGRhdGE6IFtET05FXWAgbWVzc2FnZS5cbiAgICovXG4gIHN0cmVhbT86IGZhbHNlIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5DcmVhdGVQYXJhbXNTdHJlYW1pbmcgZXh0ZW5kcyBSdW5DcmVhdGVQYXJhbXNCYXNlIHtcbiAgLyoqXG4gICAqIEJvZHkgcGFyYW06IElmIGB0cnVlYCwgcmV0dXJucyBhIHN0cmVhbSBvZiBldmVudHMgdGhhdCBoYXBwZW4gZHVyaW5nIHRoZSBSdW4gYXNcbiAgICogc2VydmVyLXNlbnQgZXZlbnRzLCB0ZXJtaW5hdGluZyB3aGVuIHRoZSBSdW4gZW50ZXJzIGEgdGVybWluYWwgc3RhdGUgd2l0aCBhXG4gICAqIGBkYXRhOiBbRE9ORV1gIG1lc3NhZ2UuXG4gICAqL1xuICBzdHJlYW06IHRydWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuVXBkYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAqXG4gICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBtZXRhZGF0YT86IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuTGlzdFBhcmFtcyBleHRlbmRzIEN1cnNvclBhZ2VQYXJhbXMge1xuICAvKipcbiAgICogQSBjdXJzb3IgZm9yIHVzZSBpbiBwYWdpbmF0aW9uLiBgYmVmb3JlYCBpcyBhbiBvYmplY3QgSUQgdGhhdCBkZWZpbmVzIHlvdXIgcGxhY2VcbiAgICogaW4gdGhlIGxpc3QuIEZvciBpbnN0YW5jZSwgaWYgeW91IG1ha2UgYSBsaXN0IHJlcXVlc3QgYW5kIHJlY2VpdmUgMTAwIG9iamVjdHMsXG4gICAqIHN0YXJ0aW5nIHdpdGggb2JqX2ZvbywgeW91ciBzdWJzZXF1ZW50IGNhbGwgY2FuIGluY2x1ZGUgYmVmb3JlPW9ial9mb28gaW4gb3JkZXJcbiAgICogdG8gZmV0Y2ggdGhlIHByZXZpb3VzIHBhZ2Ugb2YgdGhlIGxpc3QuXG4gICAqL1xuICBiZWZvcmU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNvcnQgb3JkZXIgYnkgdGhlIGBjcmVhdGVkX2F0YCB0aW1lc3RhbXAgb2YgdGhlIG9iamVjdHMuIGBhc2NgIGZvciBhc2NlbmRpbmdcbiAgICogb3JkZXIgYW5kIGBkZXNjYCBmb3IgZGVzY2VuZGluZyBvcmRlci5cbiAgICovXG4gIG9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuQ3JlYXRlQW5kUG9sbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlXG4gICAqIFthc3Npc3RhbnRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYXNzaXN0YW50cykgdG8gdXNlIHRvXG4gICAqIGV4ZWN1dGUgdGhpcyBydW4uXG4gICAqL1xuICBhc3Npc3RhbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQXBwZW5kcyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSBydW4uIFRoaXNcbiAgICogaXMgdXNlZnVsIGZvciBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9uIGEgcGVyLXJ1biBiYXNpcyB3aXRob3V0IG92ZXJyaWRpbmcgb3RoZXJcbiAgICogaW5zdHJ1Y3Rpb25zLlxuICAgKi9cbiAgYWRkaXRpb25hbF9pbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBZGRzIGFkZGl0aW9uYWwgbWVzc2FnZXMgdG8gdGhlIHRocmVhZCBiZWZvcmUgY3JlYXRpbmcgdGhlIHJ1bi5cbiAgICovXG4gIGFkZGl0aW9uYWxfbWVzc2FnZXM/OiBBcnJheTxSdW5DcmVhdGVBbmRQb2xsUGFyYW1zLkFkZGl0aW9uYWxNZXNzYWdlPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGVcbiAgICogW2luc3RydWN0aW9uc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9hc3Npc3RhbnRzL2NyZWF0ZUFzc2lzdGFudClcbiAgICogb2YgdGhlIGFzc2lzdGFudC4gVGhpcyBpcyB1c2VmdWwgZm9yIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb24gYSBwZXItcnVuIGJhc2lzLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbXBsZXRpb24gdG9rZW5zIHRoYXQgbWF5IGJlIHVzZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZVxuICAgKiBydW4uIFRoZSBydW4gd2lsbCBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gdXNlIG9ubHkgdGhlIG51bWJlciBvZiBjb21wbGV0aW9uIHRva2Vuc1xuICAgKiBzcGVjaWZpZWQsIGFjcm9zcyBtdWx0aXBsZSB0dXJucyBvZiB0aGUgcnVuLiBJZiB0aGUgcnVuIGV4Y2VlZHMgdGhlIG51bWJlciBvZlxuICAgKiBjb21wbGV0aW9uIHRva2VucyBzcGVjaWZpZWQsIHRoZSBydW4gd2lsbCBlbmQgd2l0aCBzdGF0dXMgYGluY29tcGxldGVgLiBTZWVcbiAgICogYGluY29tcGxldGVfZGV0YWlsc2AgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIG1heF9jb21wbGV0aW9uX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9tcHQgdG9rZW5zIHRoYXQgbWF5IGJlIHVzZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZSBydW4uXG4gICAqIFRoZSBydW4gd2lsbCBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gdXNlIG9ubHkgdGhlIG51bWJlciBvZiBwcm9tcHQgdG9rZW5zXG4gICAqIHNwZWNpZmllZCwgYWNyb3NzIG11bHRpcGxlIHR1cm5zIG9mIHRoZSBydW4uIElmIHRoZSBydW4gZXhjZWVkcyB0aGUgbnVtYmVyIG9mXG4gICAqIHByb21wdCB0b2tlbnMgc3BlY2lmaWVkLCB0aGUgcnVuIHdpbGwgZW5kIHdpdGggc3RhdHVzIGBpbmNvbXBsZXRlYC4gU2VlXG4gICAqIGBpbmNvbXBsZXRlX2RldGFpbHNgIGZvciBtb3JlIGluZm8uXG4gICAqL1xuICBtYXhfcHJvbXB0X3Rva2Vucz86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQuIEtleXNcbiAgICogY2FuIGJlIGEgbWF4aW11bSBvZiA2NCBjaGFyYWN0ZXJzIGxvbmcgYW5kIHZhbHVlcyBjYW4gYmUgYSBtYXhpdW0gb2YgNTEyXG4gICAqIGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIG1ldGFkYXRhPzogdW5rbm93biB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgW01vZGVsXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL21vZGVscykgdG9cbiAgICogYmUgdXNlZCB0byBleGVjdXRlIHRoaXMgcnVuLiBJZiBhIHZhbHVlIGlzIHByb3ZpZGVkIGhlcmUsIGl0IHdpbGwgb3ZlcnJpZGUgdGhlXG4gICAqIG1vZGVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzaXN0YW50LiBJZiBub3QsIHRoZSBtb2RlbCBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAqIGFzc2lzdGFudCB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBtb2RlbD86XG4gICAgfCAoc3RyaW5nICYge30pXG4gICAgfCAnZ3B0LTRvJ1xuICAgIHwgJ2dwdC00by0yMDI0LTA1LTEzJ1xuICAgIHwgJ2dwdC00LXR1cmJvJ1xuICAgIHwgJ2dwdC00LXR1cmJvLTIwMjQtMDQtMDknXG4gICAgfCAnZ3B0LTQtMDEyNS1wcmV2aWV3J1xuICAgIHwgJ2dwdC00LXR1cmJvLXByZXZpZXcnXG4gICAgfCAnZ3B0LTQtMTEwNi1wcmV2aWV3J1xuICAgIHwgJ2dwdC00LXZpc2lvbi1wcmV2aWV3J1xuICAgIHwgJ2dwdC00J1xuICAgIHwgJ2dwdC00LTAzMTQnXG4gICAgfCAnZ3B0LTQtMDYxMydcbiAgICB8ICdncHQtNC0zMmsnXG4gICAgfCAnZ3B0LTQtMzJrLTAzMTQnXG4gICAgfCAnZ3B0LTQtMzJrLTA2MTMnXG4gICAgfCAnZ3B0LTMuNS10dXJibydcbiAgICB8ICdncHQtMy41LXR1cmJvLTE2aydcbiAgICB8ICdncHQtMy41LXR1cmJvLTA2MTMnXG4gICAgfCAnZ3B0LTMuNS10dXJiby0xMTA2J1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8tMDEyNSdcbiAgICB8ICdncHQtMy41LXR1cmJvLTE2ay0wNjEzJ1xuICAgIHwgbnVsbDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBmb3JtYXQgdGhhdCB0aGUgbW9kZWwgbXVzdCBvdXRwdXQuIENvbXBhdGlibGUgd2l0aFxuICAgKiBbR1BULTRvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMvZ3B0LTRvKSxcbiAgICogW0dQVC00IFR1cmJvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMvZ3B0LTQtdHVyYm8tYW5kLWdwdC00KSxcbiAgICogYW5kIGFsbCBHUFQtMy41IFR1cmJvIG1vZGVscyBzaW5jZSBgZ3B0LTMuNS10dXJiby0xMTA2YC5cbiAgICpcbiAgICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX29iamVjdFwiIH1gIGVuYWJsZXMgSlNPTiBtb2RlLCB3aGljaCBndWFyYW50ZWVzIHRoZVxuICAgKiBtZXNzYWdlIHRoZSBtb2RlbCBnZW5lcmF0ZXMgaXMgdmFsaWQgSlNPTi5cbiAgICpcbiAgICogKipJbXBvcnRhbnQ6Kiogd2hlbiB1c2luZyBKU09OIG1vZGUsIHlvdSAqKm11c3QqKiBhbHNvIGluc3RydWN0IHRoZSBtb2RlbCB0b1xuICAgKiBwcm9kdWNlIEpTT04geW91cnNlbGYgdmlhIGEgc3lzdGVtIG9yIHVzZXIgbWVzc2FnZS4gV2l0aG91dCB0aGlzLCB0aGUgbW9kZWwgbWF5XG4gICAqIGdlbmVyYXRlIGFuIHVuZW5kaW5nIHN0cmVhbSBvZiB3aGl0ZXNwYWNlIHVudGlsIHRoZSBnZW5lcmF0aW9uIHJlYWNoZXMgdGhlIHRva2VuXG4gICAqIGxpbWl0LCByZXN1bHRpbmcgaW4gYSBsb25nLXJ1bm5pbmcgYW5kIHNlZW1pbmdseSBcInN0dWNrXCIgcmVxdWVzdC4gQWxzbyBub3RlIHRoYXRcbiAgICogdGhlIG1lc3NhZ2UgY29udGVudCBtYXkgYmUgcGFydGlhbGx5IGN1dCBvZmYgaWYgYGZpbmlzaF9yZWFzb249XCJsZW5ndGhcImAsIHdoaWNoXG4gICAqIGluZGljYXRlcyB0aGUgZ2VuZXJhdGlvbiBleGNlZWRlZCBgbWF4X3Rva2Vuc2Agb3IgdGhlIGNvbnZlcnNhdGlvbiBleGNlZWRlZCB0aGVcbiAgICogbWF4IGNvbnRleHQgbGVuZ3RoLlxuICAgKi9cbiAgcmVzcG9uc2VfZm9ybWF0PzogVGhyZWFkc0FQSS5Bc3Npc3RhbnRSZXNwb25zZUZvcm1hdE9wdGlvbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoYXQgc2FtcGxpbmcgdGVtcGVyYXR1cmUgdG8gdXNlLCBiZXR3ZWVuIDAgYW5kIDIuIEhpZ2hlciB2YWx1ZXMgbGlrZSAwLjggd2lsbFxuICAgKiBtYWtlIHRoZSBvdXRwdXQgbW9yZSByYW5kb20sIHdoaWxlIGxvd2VyIHZhbHVlcyBsaWtlIDAuMiB3aWxsIG1ha2UgaXQgbW9yZVxuICAgKiBmb2N1c2VkIGFuZCBkZXRlcm1pbmlzdGljLlxuICAgKi9cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGljaCAoaWYgYW55KSB0b29sIGlzIGNhbGxlZCBieSB0aGUgbW9kZWwuIGBub25lYCBtZWFucyB0aGUgbW9kZWwgd2lsbFxuICAgKiBub3QgY2FsbCBhbnkgdG9vbHMgYW5kIGluc3RlYWQgZ2VuZXJhdGVzIGEgbWVzc2FnZS4gYGF1dG9gIGlzIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAqIGFuZCBtZWFucyB0aGUgbW9kZWwgY2FuIHBpY2sgYmV0d2VlbiBnZW5lcmF0aW5nIGEgbWVzc2FnZSBvciBjYWxsaW5nIG9uZSBvciBtb3JlXG4gICAqIHRvb2xzLiBgcmVxdWlyZWRgIG1lYW5zIHRoZSBtb2RlbCBtdXN0IGNhbGwgb25lIG9yIG1vcmUgdG9vbHMgYmVmb3JlIHJlc3BvbmRpbmdcbiAgICogdG8gdGhlIHVzZXIuIFNwZWNpZnlpbmcgYSBwYXJ0aWN1bGFyIHRvb2wgbGlrZSBge1widHlwZVwiOiBcImZpbGVfc2VhcmNoXCJ9YCBvclxuICAgKiBge1widHlwZVwiOiBcImZ1bmN0aW9uXCIsIFwiZnVuY3Rpb25cIjoge1wibmFtZVwiOiBcIm15X2Z1bmN0aW9uXCJ9fWAgZm9yY2VzIHRoZSBtb2RlbCB0b1xuICAgKiBjYWxsIHRoYXQgdG9vbC5cbiAgICovXG4gIHRvb2xfY2hvaWNlPzogVGhyZWFkc0FQSS5Bc3Npc3RhbnRUb29sQ2hvaWNlT3B0aW9uIHwgbnVsbDtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRvb2xzIHRoZSBhc3Npc3RhbnQgY2FuIHVzZSBmb3IgdGhpcyBydW4uIFRoaXMgaXMgdXNlZnVsIGZvclxuICAgKiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9uIGEgcGVyLXJ1biBiYXNpcy5cbiAgICovXG4gIHRvb2xzPzogQXJyYXk8QXNzaXN0YW50c0FQSS5Bc3Npc3RhbnRUb29sPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIGFsdGVybmF0aXZlIHRvIHNhbXBsaW5nIHdpdGggdGVtcGVyYXR1cmUsIGNhbGxlZCBudWNsZXVzIHNhbXBsaW5nLCB3aGVyZSB0aGVcbiAgICogbW9kZWwgY29uc2lkZXJzIHRoZSByZXN1bHRzIG9mIHRoZSB0b2tlbnMgd2l0aCB0b3BfcCBwcm9iYWJpbGl0eSBtYXNzLiBTbyAwLjFcbiAgICogbWVhbnMgb25seSB0aGUgdG9rZW5zIGNvbXByaXNpbmcgdGhlIHRvcCAxMCUgcHJvYmFiaWxpdHkgbWFzcyBhcmUgY29uc2lkZXJlZC5cbiAgICpcbiAgICogV2UgZ2VuZXJhbGx5IHJlY29tbWVuZCBhbHRlcmluZyB0aGlzIG9yIHRlbXBlcmF0dXJlIGJ1dCBub3QgYm90aC5cbiAgICovXG4gIHRvcF9wPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29udHJvbHMgZm9yIGhvdyBhIHRocmVhZCB3aWxsIGJlIHRydW5jYXRlZCBwcmlvciB0byB0aGUgcnVuLiBVc2UgdGhpcyB0b1xuICAgKiBjb250cm9sIHRoZSBpbnRpYWwgY29udGV4dCB3aW5kb3cgb2YgdGhlIHJ1bi5cbiAgICovXG4gIHRydW5jYXRpb25fc3RyYXRlZ3k/OiBSdW5DcmVhdGVBbmRQb2xsUGFyYW1zLlRydW5jYXRpb25TdHJhdGVneSB8IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUnVuQ3JlYXRlQW5kUG9sbFBhcmFtcyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgQWRkaXRpb25hbE1lc3NhZ2Uge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIGNvbnRlbnQ6IHN0cmluZyB8IEFycmF5PE1lc3NhZ2VzQVBJLk1lc3NhZ2VDb250ZW50UGFydFBhcmFtPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSByb2xlIG9mIHRoZSBlbnRpdHkgdGhhdCBpcyBjcmVhdGluZyB0aGUgbWVzc2FnZS4gQWxsb3dlZCB2YWx1ZXMgaW5jbHVkZTpcbiAgICAgKlxuICAgICAqIC0gYHVzZXJgOiBJbmRpY2F0ZXMgdGhlIG1lc3NhZ2UgaXMgc2VudCBieSBhbiBhY3R1YWwgdXNlciBhbmQgc2hvdWxkIGJlIHVzZWQgaW5cbiAgICAgKiAgIG1vc3QgY2FzZXMgdG8gcmVwcmVzZW50IHVzZXItZ2VuZXJhdGVkIG1lc3NhZ2VzLlxuICAgICAqIC0gYGFzc2lzdGFudGA6IEluZGljYXRlcyB0aGUgbWVzc2FnZSBpcyBnZW5lcmF0ZWQgYnkgdGhlIGFzc2lzdGFudC4gVXNlIHRoaXNcbiAgICAgKiAgIHZhbHVlIHRvIGluc2VydCBtZXNzYWdlcyBmcm9tIHRoZSBhc3Npc3RhbnQgaW50byB0aGUgY29udmVyc2F0aW9uLlxuICAgICAqL1xuICAgIHJvbGU6ICd1c2VyJyB8ICdhc3Npc3RhbnQnO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGZpbGVzIGF0dGFjaGVkIHRvIHRoZSBtZXNzYWdlLCBhbmQgdGhlIHRvb2xzIHRoZXkgc2hvdWxkIGJlIGFkZGVkIHRvLlxuICAgICAqL1xuICAgIGF0dGFjaG1lbnRzPzogQXJyYXk8QWRkaXRpb25hbE1lc3NhZ2UuQXR0YWNobWVudD4gfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LiBLZXlzXG4gICAgICogY2FuIGJlIGEgbWF4aW11bSBvZiA2NCBjaGFyYWN0ZXJzIGxvbmcgYW5kIHZhbHVlcyBjYW4gYmUgYSBtYXhpdW0gb2YgNTEyXG4gICAgICogY2hhcmFjdGVycyBsb25nLlxuICAgICAqL1xuICAgIG1ldGFkYXRhPzogdW5rbm93biB8IG51bGw7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIEFkZGl0aW9uYWxNZXNzYWdlIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgSUQgb2YgdGhlIGZpbGUgdG8gYXR0YWNoIHRvIHRoZSBtZXNzYWdlLlxuICAgICAgICovXG4gICAgICBmaWxlX2lkPzogc3RyaW5nO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSB0b29scyB0byBhZGQgdGhpcyBmaWxlIHRvLlxuICAgICAgICovXG4gICAgICB0b29scz86IEFycmF5PEFzc2lzdGFudHNBUEkuQ29kZUludGVycHJldGVyVG9vbCB8IEFzc2lzdGFudHNBUEkuRmlsZVNlYXJjaFRvb2w+O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9scyBmb3IgaG93IGEgdGhyZWFkIHdpbGwgYmUgdHJ1bmNhdGVkIHByaW9yIHRvIHRoZSBydW4uIFVzZSB0aGlzIHRvXG4gICAqIGNvbnRyb2wgdGhlIGludGlhbCBjb250ZXh0IHdpbmRvdyBvZiB0aGUgcnVuLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUcnVuY2F0aW9uU3RyYXRlZ3kge1xuICAgIC8qKlxuICAgICAqIFRoZSB0cnVuY2F0aW9uIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHRocmVhZC4gVGhlIGRlZmF1bHQgaXMgYGF1dG9gLiBJZiBzZXQgdG9cbiAgICAgKiBgbGFzdF9tZXNzYWdlc2AsIHRoZSB0aHJlYWQgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIG4gbW9zdCByZWNlbnQgbWVzc2FnZXMgaW5cbiAgICAgKiB0aGUgdGhyZWFkLiBXaGVuIHNldCB0byBgYXV0b2AsIG1lc3NhZ2VzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRocmVhZCB3aWxsIGJlXG4gICAgICogZHJvcHBlZCB0byBmaXQgdGhlIGNvbnRleHQgbGVuZ3RoIG9mIHRoZSBtb2RlbCwgYG1heF9wcm9tcHRfdG9rZW5zYC5cbiAgICAgKi9cbiAgICB0eXBlOiAnYXV0bycgfCAnbGFzdF9tZXNzYWdlcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIG1vc3QgcmVjZW50IG1lc3NhZ2VzIGZyb20gdGhlIHRocmVhZCB3aGVuIGNvbnN0cnVjdGluZyB0aGUgY29udGV4dFxuICAgICAqIGZvciB0aGUgcnVuLlxuICAgICAqL1xuICAgIGxhc3RfbWVzc2FnZXM/OiBudW1iZXIgfCBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuQ3JlYXRlQW5kU3RyZWFtUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGVcbiAgICogW2Fzc2lzdGFudF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9hc3Npc3RhbnRzKSB0byB1c2UgdG9cbiAgICogZXhlY3V0ZSB0aGlzIHJ1bi5cbiAgICovXG4gIGFzc2lzdGFudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIGF0IHRoZSBlbmQgb2YgdGhlIGluc3RydWN0aW9ucyBmb3IgdGhlIHJ1bi4gVGhpc1xuICAgKiBpcyB1c2VmdWwgZm9yIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb24gYSBwZXItcnVuIGJhc2lzIHdpdGhvdXQgb3ZlcnJpZGluZyBvdGhlclxuICAgKiBpbnN0cnVjdGlvbnMuXG4gICAqL1xuICBhZGRpdGlvbmFsX2luc3RydWN0aW9ucz86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYWRkaXRpb25hbCBtZXNzYWdlcyB0byB0aGUgdGhyZWFkIGJlZm9yZSBjcmVhdGluZyB0aGUgcnVuLlxuICAgKi9cbiAgYWRkaXRpb25hbF9tZXNzYWdlcz86IEFycmF5PFJ1bkNyZWF0ZUFuZFN0cmVhbVBhcmFtcy5BZGRpdGlvbmFsTWVzc2FnZT4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlXG4gICAqIFtpbnN0cnVjdGlvbnNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYXNzaXN0YW50cy9jcmVhdGVBc3Npc3RhbnQpXG4gICAqIG9mIHRoZSBhc3Npc3RhbnQuIFRoaXMgaXMgdXNlZnVsIGZvciBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9uIGEgcGVyLXJ1biBiYXNpcy5cbiAgICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb21wbGV0aW9uIHRva2VucyB0aGF0IG1heSBiZSB1c2VkIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGVcbiAgICogcnVuLiBUaGUgcnVuIHdpbGwgbWFrZSBhIGJlc3QgZWZmb3J0IHRvIHVzZSBvbmx5IHRoZSBudW1iZXIgb2YgY29tcGxldGlvbiB0b2tlbnNcbiAgICogc3BlY2lmaWVkLCBhY3Jvc3MgbXVsdGlwbGUgdHVybnMgb2YgdGhlIHJ1bi4gSWYgdGhlIHJ1biBleGNlZWRzIHRoZSBudW1iZXIgb2ZcbiAgICogY29tcGxldGlvbiB0b2tlbnMgc3BlY2lmaWVkLCB0aGUgcnVuIHdpbGwgZW5kIHdpdGggc3RhdHVzIGBpbmNvbXBsZXRlYC4gU2VlXG4gICAqIGBpbmNvbXBsZXRlX2RldGFpbHNgIGZvciBtb3JlIGluZm8uXG4gICAqL1xuICBtYXhfY29tcGxldGlvbl90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvbXB0IHRva2VucyB0aGF0IG1heSBiZSB1c2VkIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgcnVuLlxuICAgKiBUaGUgcnVuIHdpbGwgbWFrZSBhIGJlc3QgZWZmb3J0IHRvIHVzZSBvbmx5IHRoZSBudW1iZXIgb2YgcHJvbXB0IHRva2Vuc1xuICAgKiBzcGVjaWZpZWQsIGFjcm9zcyBtdWx0aXBsZSB0dXJucyBvZiB0aGUgcnVuLiBJZiB0aGUgcnVuIGV4Y2VlZHMgdGhlIG51bWJlciBvZlxuICAgKiBwcm9tcHQgdG9rZW5zIHNwZWNpZmllZCwgdGhlIHJ1biB3aWxsIGVuZCB3aXRoIHN0YXR1cyBgaW5jb21wbGV0ZWAuIFNlZVxuICAgKiBgaW5jb21wbGV0ZV9kZXRhaWxzYCBmb3IgbW9yZSBpbmZvLlxuICAgKi9cbiAgbWF4X3Byb21wdF90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LiBLZXlzXG4gICAqIGNhbiBiZSBhIG1heGltdW0gb2YgNjQgY2hhcmFjdGVycyBsb25nIGFuZCB2YWx1ZXMgY2FuIGJlIGEgbWF4aXVtIG9mIDUxMlxuICAgKiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICBtZXRhZGF0YT86IHVua25vd24gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFtNb2RlbF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tb2RlbHMpIHRvXG4gICAqIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGlzIHJ1bi4gSWYgYSB2YWx1ZSBpcyBwcm92aWRlZCBoZXJlLCBpdCB3aWxsIG92ZXJyaWRlIHRoZVxuICAgKiBtb2RlbCBhc3NvY2lhdGVkIHdpdGggdGhlIGFzc2lzdGFudC4gSWYgbm90LCB0aGUgbW9kZWwgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAgKiBhc3Npc3RhbnQgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgbW9kZWw/OlxuICAgIHwgKHN0cmluZyAmIHt9KVxuICAgIHwgJ2dwdC00bydcbiAgICB8ICdncHQtNG8tMjAyNC0wNS0xMydcbiAgICB8ICdncHQtNC10dXJibydcbiAgICB8ICdncHQtNC10dXJiby0yMDI0LTA0LTA5J1xuICAgIHwgJ2dwdC00LTAxMjUtcHJldmlldydcbiAgICB8ICdncHQtNC10dXJiby1wcmV2aWV3J1xuICAgIHwgJ2dwdC00LTExMDYtcHJldmlldydcbiAgICB8ICdncHQtNC12aXNpb24tcHJldmlldydcbiAgICB8ICdncHQtNCdcbiAgICB8ICdncHQtNC0wMzE0J1xuICAgIHwgJ2dwdC00LTA2MTMnXG4gICAgfCAnZ3B0LTQtMzJrJ1xuICAgIHwgJ2dwdC00LTMyay0wMzE0J1xuICAgIHwgJ2dwdC00LTMyay0wNjEzJ1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8nXG4gICAgfCAnZ3B0LTMuNS10dXJiby0xNmsnXG4gICAgfCAnZ3B0LTMuNS10dXJiby0wNjEzJ1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8tMTEwNidcbiAgICB8ICdncHQtMy41LXR1cmJvLTAxMjUnXG4gICAgfCAnZ3B0LTMuNS10dXJiby0xNmstMDYxMydcbiAgICB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZGVsIG11c3Qgb3V0cHV0LiBDb21wYXRpYmxlIHdpdGhcbiAgICogW0dQVC00b10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvbW9kZWxzL2dwdC00byksXG4gICAqIFtHUFQtNCBUdXJib10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvbW9kZWxzL2dwdC00LXR1cmJvLWFuZC1ncHQtNCksXG4gICAqIGFuZCBhbGwgR1BULTMuNSBUdXJibyBtb2RlbHMgc2luY2UgYGdwdC0zLjUtdHVyYm8tMTEwNmAuXG4gICAqXG4gICAqIFNldHRpbmcgdG8gYHsgXCJ0eXBlXCI6IFwianNvbl9vYmplY3RcIiB9YCBlbmFibGVzIEpTT04gbW9kZSwgd2hpY2ggZ3VhcmFudGVlcyB0aGVcbiAgICogbWVzc2FnZSB0aGUgbW9kZWwgZ2VuZXJhdGVzIGlzIHZhbGlkIEpTT04uXG4gICAqXG4gICAqICoqSW1wb3J0YW50OioqIHdoZW4gdXNpbmcgSlNPTiBtb2RlLCB5b3UgKiptdXN0KiogYWxzbyBpbnN0cnVjdCB0aGUgbW9kZWwgdG9cbiAgICogcHJvZHVjZSBKU09OIHlvdXJzZWxmIHZpYSBhIHN5c3RlbSBvciB1c2VyIG1lc3NhZ2UuIFdpdGhvdXQgdGhpcywgdGhlIG1vZGVsIG1heVxuICAgKiBnZW5lcmF0ZSBhbiB1bmVuZGluZyBzdHJlYW0gb2Ygd2hpdGVzcGFjZSB1bnRpbCB0aGUgZ2VuZXJhdGlvbiByZWFjaGVzIHRoZSB0b2tlblxuICAgKiBsaW1pdCwgcmVzdWx0aW5nIGluIGEgbG9uZy1ydW5uaW5nIGFuZCBzZWVtaW5nbHkgXCJzdHVja1wiIHJlcXVlc3QuIEFsc28gbm90ZSB0aGF0XG4gICAqIHRoZSBtZXNzYWdlIGNvbnRlbnQgbWF5IGJlIHBhcnRpYWxseSBjdXQgb2ZmIGlmIGBmaW5pc2hfcmVhc29uPVwibGVuZ3RoXCJgLCB3aGljaFxuICAgKiBpbmRpY2F0ZXMgdGhlIGdlbmVyYXRpb24gZXhjZWVkZWQgYG1heF90b2tlbnNgIG9yIHRoZSBjb252ZXJzYXRpb24gZXhjZWVkZWQgdGhlXG4gICAqIG1heCBjb250ZXh0IGxlbmd0aC5cbiAgICovXG4gIHJlc3BvbnNlX2Zvcm1hdD86IFRocmVhZHNBUEkuQXNzaXN0YW50UmVzcG9uc2VGb3JtYXRPcHRpb24gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGF0IHNhbXBsaW5nIHRlbXBlcmF0dXJlIHRvIHVzZSwgYmV0d2VlbiAwIGFuZCAyLiBIaWdoZXIgdmFsdWVzIGxpa2UgMC44IHdpbGxcbiAgICogbWFrZSB0aGUgb3V0cHV0IG1vcmUgcmFuZG9tLCB3aGlsZSBsb3dlciB2YWx1ZXMgbGlrZSAwLjIgd2lsbCBtYWtlIGl0IG1vcmVcbiAgICogZm9jdXNlZCBhbmQgZGV0ZXJtaW5pc3RpYy5cbiAgICovXG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hpY2ggKGlmIGFueSkgdG9vbCBpcyBjYWxsZWQgYnkgdGhlIG1vZGVsLiBgbm9uZWAgbWVhbnMgdGhlIG1vZGVsIHdpbGxcbiAgICogbm90IGNhbGwgYW55IHRvb2xzIGFuZCBpbnN0ZWFkIGdlbmVyYXRlcyBhIG1lc3NhZ2UuIGBhdXRvYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgKiBhbmQgbWVhbnMgdGhlIG1vZGVsIGNhbiBwaWNrIGJldHdlZW4gZ2VuZXJhdGluZyBhIG1lc3NhZ2Ugb3IgY2FsbGluZyBvbmUgb3IgbW9yZVxuICAgKiB0b29scy4gYHJlcXVpcmVkYCBtZWFucyB0aGUgbW9kZWwgbXVzdCBjYWxsIG9uZSBvciBtb3JlIHRvb2xzIGJlZm9yZSByZXNwb25kaW5nXG4gICAqIHRvIHRoZSB1c2VyLiBTcGVjaWZ5aW5nIGEgcGFydGljdWxhciB0b29sIGxpa2UgYHtcInR5cGVcIjogXCJmaWxlX3NlYXJjaFwifWAgb3JcbiAgICogYHtcInR5cGVcIjogXCJmdW5jdGlvblwiLCBcImZ1bmN0aW9uXCI6IHtcIm5hbWVcIjogXCJteV9mdW5jdGlvblwifX1gIGZvcmNlcyB0aGUgbW9kZWwgdG9cbiAgICogY2FsbCB0aGF0IHRvb2wuXG4gICAqL1xuICB0b29sX2Nob2ljZT86IFRocmVhZHNBUEkuQXNzaXN0YW50VG9vbENob2ljZU9wdGlvbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0b29scyB0aGUgYXNzaXN0YW50IGNhbiB1c2UgZm9yIHRoaXMgcnVuLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgICogbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvbiBhIHBlci1ydW4gYmFzaXMuXG4gICAqL1xuICB0b29scz86IEFycmF5PEFzc2lzdGFudHNBUEkuQXNzaXN0YW50VG9vbD4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBzYW1wbGluZyB3aXRoIHRlbXBlcmF0dXJlLCBjYWxsZWQgbnVjbGV1cyBzYW1wbGluZywgd2hlcmUgdGhlXG4gICAqIG1vZGVsIGNvbnNpZGVycyB0aGUgcmVzdWx0cyBvZiB0aGUgdG9rZW5zIHdpdGggdG9wX3AgcHJvYmFiaWxpdHkgbWFzcy4gU28gMC4xXG4gICAqIG1lYW5zIG9ubHkgdGhlIHRva2VucyBjb21wcmlzaW5nIHRoZSB0b3AgMTAlIHByb2JhYmlsaXR5IG1hc3MgYXJlIGNvbnNpZGVyZWQuXG4gICAqXG4gICAqIFdlIGdlbmVyYWxseSByZWNvbW1lbmQgYWx0ZXJpbmcgdGhpcyBvciB0ZW1wZXJhdHVyZSBidXQgbm90IGJvdGguXG4gICAqL1xuICB0b3BfcD86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIGZvciBob3cgYSB0aHJlYWQgd2lsbCBiZSB0cnVuY2F0ZWQgcHJpb3IgdG8gdGhlIHJ1bi4gVXNlIHRoaXMgdG9cbiAgICogY29udHJvbCB0aGUgaW50aWFsIGNvbnRleHQgd2luZG93IG9mIHRoZSBydW4uXG4gICAqL1xuICB0cnVuY2F0aW9uX3N0cmF0ZWd5PzogUnVuQ3JlYXRlQW5kU3RyZWFtUGFyYW1zLlRydW5jYXRpb25TdHJhdGVneSB8IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUnVuQ3JlYXRlQW5kU3RyZWFtUGFyYW1zIHtcbiAgZXhwb3J0IGludGVyZmFjZSBBZGRpdGlvbmFsTWVzc2FnZSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgY29udGVudHMgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICovXG4gICAgY29udGVudDogc3RyaW5nIHwgQXJyYXk8TWVzc2FnZXNBUEkuTWVzc2FnZUNvbnRlbnRQYXJ0UGFyYW0+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvbGUgb2YgdGhlIGVudGl0eSB0aGF0IGlzIGNyZWF0aW5nIHRoZSBtZXNzYWdlLiBBbGxvd2VkIHZhbHVlcyBpbmNsdWRlOlxuICAgICAqXG4gICAgICogLSBgdXNlcmA6IEluZGljYXRlcyB0aGUgbWVzc2FnZSBpcyBzZW50IGJ5IGFuIGFjdHVhbCB1c2VyIGFuZCBzaG91bGQgYmUgdXNlZCBpblxuICAgICAqICAgbW9zdCBjYXNlcyB0byByZXByZXNlbnQgdXNlci1nZW5lcmF0ZWQgbWVzc2FnZXMuXG4gICAgICogLSBgYXNzaXN0YW50YDogSW5kaWNhdGVzIHRoZSBtZXNzYWdlIGlzIGdlbmVyYXRlZCBieSB0aGUgYXNzaXN0YW50LiBVc2UgdGhpc1xuICAgICAqICAgdmFsdWUgdG8gaW5zZXJ0IG1lc3NhZ2VzIGZyb20gdGhlIGFzc2lzdGFudCBpbnRvIHRoZSBjb252ZXJzYXRpb24uXG4gICAgICovXG4gICAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCc7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgZmlsZXMgYXR0YWNoZWQgdG8gdGhlIG1lc3NhZ2UsIGFuZCB0aGUgdG9vbHMgdGhleSBzaG91bGQgYmUgYWRkZWQgdG8uXG4gICAgICovXG4gICAgYXR0YWNobWVudHM/OiBBcnJheTxBZGRpdGlvbmFsTWVzc2FnZS5BdHRhY2htZW50PiB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQuIEtleXNcbiAgICAgKiBjYW4gYmUgYSBtYXhpbXVtIG9mIDY0IGNoYXJhY3RlcnMgbG9uZyBhbmQgdmFsdWVzIGNhbiBiZSBhIG1heGl1bSBvZiA1MTJcbiAgICAgKiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAgICovXG4gICAgbWV0YWRhdGE/OiB1bmtub3duIHwgbnVsbDtcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgQWRkaXRpb25hbE1lc3NhZ2Uge1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBJRCBvZiB0aGUgZmlsZSB0byBhdHRhY2ggdG8gdGhlIG1lc3NhZ2UuXG4gICAgICAgKi9cbiAgICAgIGZpbGVfaWQ/OiBzdHJpbmc7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHRvb2xzIHRvIGFkZCB0aGlzIGZpbGUgdG8uXG4gICAgICAgKi9cbiAgICAgIHRvb2xzPzogQXJyYXk8QXNzaXN0YW50c0FQSS5Db2RlSW50ZXJwcmV0ZXJUb29sIHwgQXNzaXN0YW50c0FQSS5GaWxlU2VhcmNoVG9vbD47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIGZvciBob3cgYSB0aHJlYWQgd2lsbCBiZSB0cnVuY2F0ZWQgcHJpb3IgdG8gdGhlIHJ1bi4gVXNlIHRoaXMgdG9cbiAgICogY29udHJvbCB0aGUgaW50aWFsIGNvbnRleHQgd2luZG93IG9mIHRoZSBydW4uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRydW5jYXRpb25TdHJhdGVneSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRydW5jYXRpb24gc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgdGhyZWFkLiBUaGUgZGVmYXVsdCBpcyBgYXV0b2AuIElmIHNldCB0b1xuICAgICAqIGBsYXN0X21lc3NhZ2VzYCwgdGhlIHRocmVhZCB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgbiBtb3N0IHJlY2VudCBtZXNzYWdlcyBpblxuICAgICAqIHRoZSB0aHJlYWQuIFdoZW4gc2V0IHRvIGBhdXRvYCwgbWVzc2FnZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdGhyZWFkIHdpbGwgYmVcbiAgICAgKiBkcm9wcGVkIHRvIGZpdCB0aGUgY29udGV4dCBsZW5ndGggb2YgdGhlIG1vZGVsLCBgbWF4X3Byb21wdF90b2tlbnNgLlxuICAgICAqL1xuICAgIHR5cGU6ICdhdXRvJyB8ICdsYXN0X21lc3NhZ2VzJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgbW9zdCByZWNlbnQgbWVzc2FnZXMgZnJvbSB0aGUgdGhyZWFkIHdoZW4gY29uc3RydWN0aW5nIHRoZSBjb250ZXh0XG4gICAgICogZm9yIHRoZSBydW4uXG4gICAgICovXG4gICAgbGFzdF9tZXNzYWdlcz86IG51bWJlciB8IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5TdHJlYW1QYXJhbXMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZVxuICAgKiBbYXNzaXN0YW50XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2Fzc2lzdGFudHMpIHRvIHVzZSB0b1xuICAgKiBleGVjdXRlIHRoaXMgcnVuLlxuICAgKi9cbiAgYXNzaXN0YW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgcnVuLiBUaGlzXG4gICAqIGlzIHVzZWZ1bCBmb3IgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvbiBhIHBlci1ydW4gYmFzaXMgd2l0aG91dCBvdmVycmlkaW5nIG90aGVyXG4gICAqIGluc3RydWN0aW9ucy5cbiAgICovXG4gIGFkZGl0aW9uYWxfaW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhZGRpdGlvbmFsIG1lc3NhZ2VzIHRvIHRoZSB0aHJlYWQgYmVmb3JlIGNyZWF0aW5nIHRoZSBydW4uXG4gICAqL1xuICBhZGRpdGlvbmFsX21lc3NhZ2VzPzogQXJyYXk8UnVuU3RyZWFtUGFyYW1zLkFkZGl0aW9uYWxNZXNzYWdlPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGVcbiAgICogW2luc3RydWN0aW9uc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9hc3Npc3RhbnRzL2NyZWF0ZUFzc2lzdGFudClcbiAgICogb2YgdGhlIGFzc2lzdGFudC4gVGhpcyBpcyB1c2VmdWwgZm9yIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb24gYSBwZXItcnVuIGJhc2lzLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbXBsZXRpb24gdG9rZW5zIHRoYXQgbWF5IGJlIHVzZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZVxuICAgKiBydW4uIFRoZSBydW4gd2lsbCBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gdXNlIG9ubHkgdGhlIG51bWJlciBvZiBjb21wbGV0aW9uIHRva2Vuc1xuICAgKiBzcGVjaWZpZWQsIGFjcm9zcyBtdWx0aXBsZSB0dXJucyBvZiB0aGUgcnVuLiBJZiB0aGUgcnVuIGV4Y2VlZHMgdGhlIG51bWJlciBvZlxuICAgKiBjb21wbGV0aW9uIHRva2VucyBzcGVjaWZpZWQsIHRoZSBydW4gd2lsbCBlbmQgd2l0aCBzdGF0dXMgYGluY29tcGxldGVgLiBTZWVcbiAgICogYGluY29tcGxldGVfZGV0YWlsc2AgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIG1heF9jb21wbGV0aW9uX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9tcHQgdG9rZW5zIHRoYXQgbWF5IGJlIHVzZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZSBydW4uXG4gICAqIFRoZSBydW4gd2lsbCBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gdXNlIG9ubHkgdGhlIG51bWJlciBvZiBwcm9tcHQgdG9rZW5zXG4gICAqIHNwZWNpZmllZCwgYWNyb3NzIG11bHRpcGxlIHR1cm5zIG9mIHRoZSBydW4uIElmIHRoZSBydW4gZXhjZWVkcyB0aGUgbnVtYmVyIG9mXG4gICAqIHByb21wdCB0b2tlbnMgc3BlY2lmaWVkLCB0aGUgcnVuIHdpbGwgZW5kIHdpdGggc3RhdHVzIGBpbmNvbXBsZXRlYC4gU2VlXG4gICAqIGBpbmNvbXBsZXRlX2RldGFpbHNgIGZvciBtb3JlIGluZm8uXG4gICAqL1xuICBtYXhfcHJvbXB0X3Rva2Vucz86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQuIEtleXNcbiAgICogY2FuIGJlIGEgbWF4aW11bSBvZiA2NCBjaGFyYWN0ZXJzIGxvbmcgYW5kIHZhbHVlcyBjYW4gYmUgYSBtYXhpdW0gb2YgNTEyXG4gICAqIGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIG1ldGFkYXRhPzogdW5rbm93biB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgW01vZGVsXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL21vZGVscykgdG9cbiAgICogYmUgdXNlZCB0byBleGVjdXRlIHRoaXMgcnVuLiBJZiBhIHZhbHVlIGlzIHByb3ZpZGVkIGhlcmUsIGl0IHdpbGwgb3ZlcnJpZGUgdGhlXG4gICAqIG1vZGVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzaXN0YW50LiBJZiBub3QsIHRoZSBtb2RlbCBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAqIGFzc2lzdGFudCB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBtb2RlbD86XG4gICAgfCAoc3RyaW5nICYge30pXG4gICAgfCAnZ3B0LTRvJ1xuICAgIHwgJ2dwdC00by0yMDI0LTA1LTEzJ1xuICAgIHwgJ2dwdC00LXR1cmJvJ1xuICAgIHwgJ2dwdC00LXR1cmJvLTIwMjQtMDQtMDknXG4gICAgfCAnZ3B0LTQtMDEyNS1wcmV2aWV3J1xuICAgIHwgJ2dwdC00LXR1cmJvLXByZXZpZXcnXG4gICAgfCAnZ3B0LTQtMTEwNi1wcmV2aWV3J1xuICAgIHwgJ2dwdC00LXZpc2lvbi1wcmV2aWV3J1xuICAgIHwgJ2dwdC00J1xuICAgIHwgJ2dwdC00LTAzMTQnXG4gICAgfCAnZ3B0LTQtMDYxMydcbiAgICB8ICdncHQtNC0zMmsnXG4gICAgfCAnZ3B0LTQtMzJrLTAzMTQnXG4gICAgfCAnZ3B0LTQtMzJrLTA2MTMnXG4gICAgfCAnZ3B0LTMuNS10dXJibydcbiAgICB8ICdncHQtMy41LXR1cmJvLTE2aydcbiAgICB8ICdncHQtMy41LXR1cmJvLTA2MTMnXG4gICAgfCAnZ3B0LTMuNS10dXJiby0xMTA2J1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8tMDEyNSdcbiAgICB8ICdncHQtMy41LXR1cmJvLTE2ay0wNjEzJ1xuICAgIHwgbnVsbDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBmb3JtYXQgdGhhdCB0aGUgbW9kZWwgbXVzdCBvdXRwdXQuIENvbXBhdGlibGUgd2l0aFxuICAgKiBbR1BULTRvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMvZ3B0LTRvKSxcbiAgICogW0dQVC00IFR1cmJvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMvZ3B0LTQtdHVyYm8tYW5kLWdwdC00KSxcbiAgICogYW5kIGFsbCBHUFQtMy41IFR1cmJvIG1vZGVscyBzaW5jZSBgZ3B0LTMuNS10dXJiby0xMTA2YC5cbiAgICpcbiAgICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX29iamVjdFwiIH1gIGVuYWJsZXMgSlNPTiBtb2RlLCB3aGljaCBndWFyYW50ZWVzIHRoZVxuICAgKiBtZXNzYWdlIHRoZSBtb2RlbCBnZW5lcmF0ZXMgaXMgdmFsaWQgSlNPTi5cbiAgICpcbiAgICogKipJbXBvcnRhbnQ6Kiogd2hlbiB1c2luZyBKU09OIG1vZGUsIHlvdSAqKm11c3QqKiBhbHNvIGluc3RydWN0IHRoZSBtb2RlbCB0b1xuICAgKiBwcm9kdWNlIEpTT04geW91cnNlbGYgdmlhIGEgc3lzdGVtIG9yIHVzZXIgbWVzc2FnZS4gV2l0aG91dCB0aGlzLCB0aGUgbW9kZWwgbWF5XG4gICAqIGdlbmVyYXRlIGFuIHVuZW5kaW5nIHN0cmVhbSBvZiB3aGl0ZXNwYWNlIHVudGlsIHRoZSBnZW5lcmF0aW9uIHJlYWNoZXMgdGhlIHRva2VuXG4gICAqIGxpbWl0LCByZXN1bHRpbmcgaW4gYSBsb25nLXJ1bm5pbmcgYW5kIHNlZW1pbmdseSBcInN0dWNrXCIgcmVxdWVzdC4gQWxzbyBub3RlIHRoYXRcbiAgICogdGhlIG1lc3NhZ2UgY29udGVudCBtYXkgYmUgcGFydGlhbGx5IGN1dCBvZmYgaWYgYGZpbmlzaF9yZWFzb249XCJsZW5ndGhcImAsIHdoaWNoXG4gICAqIGluZGljYXRlcyB0aGUgZ2VuZXJhdGlvbiBleGNlZWRlZCBgbWF4X3Rva2Vuc2Agb3IgdGhlIGNvbnZlcnNhdGlvbiBleGNlZWRlZCB0aGVcbiAgICogbWF4IGNvbnRleHQgbGVuZ3RoLlxuICAgKi9cbiAgcmVzcG9uc2VfZm9ybWF0PzogVGhyZWFkc0FQSS5Bc3Npc3RhbnRSZXNwb25zZUZvcm1hdE9wdGlvbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoYXQgc2FtcGxpbmcgdGVtcGVyYXR1cmUgdG8gdXNlLCBiZXR3ZWVuIDAgYW5kIDIuIEhpZ2hlciB2YWx1ZXMgbGlrZSAwLjggd2lsbFxuICAgKiBtYWtlIHRoZSBvdXRwdXQgbW9yZSByYW5kb20sIHdoaWxlIGxvd2VyIHZhbHVlcyBsaWtlIDAuMiB3aWxsIG1ha2UgaXQgbW9yZVxuICAgKiBmb2N1c2VkIGFuZCBkZXRlcm1pbmlzdGljLlxuICAgKi9cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGljaCAoaWYgYW55KSB0b29sIGlzIGNhbGxlZCBieSB0aGUgbW9kZWwuIGBub25lYCBtZWFucyB0aGUgbW9kZWwgd2lsbFxuICAgKiBub3QgY2FsbCBhbnkgdG9vbHMgYW5kIGluc3RlYWQgZ2VuZXJhdGVzIGEgbWVzc2FnZS4gYGF1dG9gIGlzIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAqIGFuZCBtZWFucyB0aGUgbW9kZWwgY2FuIHBpY2sgYmV0d2VlbiBnZW5lcmF0aW5nIGEgbWVzc2FnZSBvciBjYWxsaW5nIG9uZSBvciBtb3JlXG4gICAqIHRvb2xzLiBgcmVxdWlyZWRgIG1lYW5zIHRoZSBtb2RlbCBtdXN0IGNhbGwgb25lIG9yIG1vcmUgdG9vbHMgYmVmb3JlIHJlc3BvbmRpbmdcbiAgICogdG8gdGhlIHVzZXIuIFNwZWNpZnlpbmcgYSBwYXJ0aWN1bGFyIHRvb2wgbGlrZSBge1widHlwZVwiOiBcImZpbGVfc2VhcmNoXCJ9YCBvclxuICAgKiBge1widHlwZVwiOiBcImZ1bmN0aW9uXCIsIFwiZnVuY3Rpb25cIjoge1wibmFtZVwiOiBcIm15X2Z1bmN0aW9uXCJ9fWAgZm9yY2VzIHRoZSBtb2RlbCB0b1xuICAgKiBjYWxsIHRoYXQgdG9vbC5cbiAgICovXG4gIHRvb2xfY2hvaWNlPzogVGhyZWFkc0FQSS5Bc3Npc3RhbnRUb29sQ2hvaWNlT3B0aW9uIHwgbnVsbDtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRvb2xzIHRoZSBhc3Npc3RhbnQgY2FuIHVzZSBmb3IgdGhpcyBydW4uIFRoaXMgaXMgdXNlZnVsIGZvclxuICAgKiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9uIGEgcGVyLXJ1biBiYXNpcy5cbiAgICovXG4gIHRvb2xzPzogQXJyYXk8QXNzaXN0YW50c0FQSS5Bc3Npc3RhbnRUb29sPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIGFsdGVybmF0aXZlIHRvIHNhbXBsaW5nIHdpdGggdGVtcGVyYXR1cmUsIGNhbGxlZCBudWNsZXVzIHNhbXBsaW5nLCB3aGVyZSB0aGVcbiAgICogbW9kZWwgY29uc2lkZXJzIHRoZSByZXN1bHRzIG9mIHRoZSB0b2tlbnMgd2l0aCB0b3BfcCBwcm9iYWJpbGl0eSBtYXNzLiBTbyAwLjFcbiAgICogbWVhbnMgb25seSB0aGUgdG9rZW5zIGNvbXByaXNpbmcgdGhlIHRvcCAxMCUgcHJvYmFiaWxpdHkgbWFzcyBhcmUgY29uc2lkZXJlZC5cbiAgICpcbiAgICogV2UgZ2VuZXJhbGx5IHJlY29tbWVuZCBhbHRlcmluZyB0aGlzIG9yIHRlbXBlcmF0dXJlIGJ1dCBub3QgYm90aC5cbiAgICovXG4gIHRvcF9wPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29udHJvbHMgZm9yIGhvdyBhIHRocmVhZCB3aWxsIGJlIHRydW5jYXRlZCBwcmlvciB0byB0aGUgcnVuLiBVc2UgdGhpcyB0b1xuICAgKiBjb250cm9sIHRoZSBpbnRpYWwgY29udGV4dCB3aW5kb3cgb2YgdGhlIHJ1bi5cbiAgICovXG4gIHRydW5jYXRpb25fc3RyYXRlZ3k/OiBSdW5TdHJlYW1QYXJhbXMuVHJ1bmNhdGlvblN0cmF0ZWd5IHwgbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSdW5TdHJlYW1QYXJhbXMge1xuICBleHBvcnQgaW50ZXJmYWNlIEFkZGl0aW9uYWxNZXNzYWdlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBjb250ZW50cyBvZiB0aGUgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBjb250ZW50OiBzdHJpbmcgfCBBcnJheTxNZXNzYWdlc0FQSS5NZXNzYWdlQ29udGVudFBhcnRQYXJhbT47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm9sZSBvZiB0aGUgZW50aXR5IHRoYXQgaXMgY3JlYXRpbmcgdGhlIG1lc3NhZ2UuIEFsbG93ZWQgdmFsdWVzIGluY2x1ZGU6XG4gICAgICpcbiAgICAgKiAtIGB1c2VyYDogSW5kaWNhdGVzIHRoZSBtZXNzYWdlIGlzIHNlbnQgYnkgYW4gYWN0dWFsIHVzZXIgYW5kIHNob3VsZCBiZSB1c2VkIGluXG4gICAgICogICBtb3N0IGNhc2VzIHRvIHJlcHJlc2VudCB1c2VyLWdlbmVyYXRlZCBtZXNzYWdlcy5cbiAgICAgKiAtIGBhc3Npc3RhbnRgOiBJbmRpY2F0ZXMgdGhlIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBhc3Npc3RhbnQuIFVzZSB0aGlzXG4gICAgICogICB2YWx1ZSB0byBpbnNlcnQgbWVzc2FnZXMgZnJvbSB0aGUgYXNzaXN0YW50IGludG8gdGhlIGNvbnZlcnNhdGlvbi5cbiAgICAgKi9cbiAgICByb2xlOiAndXNlcicgfCAnYXNzaXN0YW50JztcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBmaWxlcyBhdHRhY2hlZCB0byB0aGUgbWVzc2FnZSwgYW5kIHRoZSB0b29scyB0aGV5IHNob3VsZCBiZSBhZGRlZCB0by5cbiAgICAgKi9cbiAgICBhdHRhY2htZW50cz86IEFycmF5PEFkZGl0aW9uYWxNZXNzYWdlLkF0dGFjaG1lbnQ+IHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdC4gS2V5c1xuICAgICAqIGNhbiBiZSBhIG1heGltdW0gb2YgNjQgY2hhcmFjdGVycyBsb25nIGFuZCB2YWx1ZXMgY2FuIGJlIGEgbWF4aXVtIG9mIDUxMlxuICAgICAqIGNoYXJhY3RlcnMgbG9uZy5cbiAgICAgKi9cbiAgICBtZXRhZGF0YT86IHVua25vd24gfCBudWxsO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBBZGRpdGlvbmFsTWVzc2FnZSB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIElEIG9mIHRoZSBmaWxlIHRvIGF0dGFjaCB0byB0aGUgbWVzc2FnZS5cbiAgICAgICAqL1xuICAgICAgZmlsZV9pZD86IHN0cmluZztcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdG9vbHMgdG8gYWRkIHRoaXMgZmlsZSB0by5cbiAgICAgICAqL1xuICAgICAgdG9vbHM/OiBBcnJheTxBc3Npc3RhbnRzQVBJLkNvZGVJbnRlcnByZXRlclRvb2wgfCBBc3Npc3RhbnRzQVBJLkZpbGVTZWFyY2hUb29sPjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udHJvbHMgZm9yIGhvdyBhIHRocmVhZCB3aWxsIGJlIHRydW5jYXRlZCBwcmlvciB0byB0aGUgcnVuLiBVc2UgdGhpcyB0b1xuICAgKiBjb250cm9sIHRoZSBpbnRpYWwgY29udGV4dCB3aW5kb3cgb2YgdGhlIHJ1bi5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVHJ1bmNhdGlvblN0cmF0ZWd5IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdHJ1bmNhdGlvbiBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSB0aHJlYWQuIFRoZSBkZWZhdWx0IGlzIGBhdXRvYC4gSWYgc2V0IHRvXG4gICAgICogYGxhc3RfbWVzc2FnZXNgLCB0aGUgdGhyZWFkIHdpbGwgYmUgdHJ1bmNhdGVkIHRvIHRoZSBuIG1vc3QgcmVjZW50IG1lc3NhZ2VzIGluXG4gICAgICogdGhlIHRocmVhZC4gV2hlbiBzZXQgdG8gYGF1dG9gLCBtZXNzYWdlcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSB0aHJlYWQgd2lsbCBiZVxuICAgICAqIGRyb3BwZWQgdG8gZml0IHRoZSBjb250ZXh0IGxlbmd0aCBvZiB0aGUgbW9kZWwsIGBtYXhfcHJvbXB0X3Rva2Vuc2AuXG4gICAgICovXG4gICAgdHlwZTogJ2F1dG8nIHwgJ2xhc3RfbWVzc2FnZXMnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBtb3N0IHJlY2VudCBtZXNzYWdlcyBmcm9tIHRoZSB0aHJlYWQgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGNvbnRleHRcbiAgICAgKiBmb3IgdGhlIHJ1bi5cbiAgICAgKi9cbiAgICBsYXN0X21lc3NhZ2VzPzogbnVtYmVyIHwgbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtcyA9XG4gIHwgUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXNOb25TdHJlYW1pbmdcbiAgfCBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc1N0cmVhbWluZztcblxuZXhwb3J0IGludGVyZmFjZSBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogQSBsaXN0IG9mIHRvb2xzIGZvciB3aGljaCB0aGUgb3V0cHV0cyBhcmUgYmVpbmcgc3VibWl0dGVkLlxuICAgKi9cbiAgdG9vbF9vdXRwdXRzOiBBcnJheTxSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtcy5Ub29sT3V0cHV0PjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCByZXR1cm5zIGEgc3RyZWFtIG9mIGV2ZW50cyB0aGF0IGhhcHBlbiBkdXJpbmcgdGhlIFJ1biBhcyBzZXJ2ZXItc2VudFxuICAgKiBldmVudHMsIHRlcm1pbmF0aW5nIHdoZW4gdGhlIFJ1biBlbnRlcnMgYSB0ZXJtaW5hbCBzdGF0ZSB3aXRoIGEgYGRhdGE6IFtET05FXWBcbiAgICogbWVzc2FnZS5cbiAgICovXG4gIHN0cmVhbT86IGJvb2xlYW4gfCBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zIHtcbiAgZXhwb3J0IGludGVyZmFjZSBUb29sT3V0cHV0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgb3V0cHV0IG9mIHRoZSB0b29sIGNhbGwgdG8gYmUgc3VibWl0dGVkIHRvIGNvbnRpbnVlIHRoZSBydW4uXG4gICAgICovXG4gICAgb3V0cHV0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSB0b29sIGNhbGwgaW4gdGhlIGByZXF1aXJlZF9hY3Rpb25gIG9iamVjdCB3aXRoaW4gdGhlIHJ1biBvYmplY3RcbiAgICAgKiB0aGUgb3V0cHV0IGlzIGJlaW5nIHN1Ym1pdHRlZCBmb3IuXG4gICAgICovXG4gICAgdG9vbF9jYWxsX2lkPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXNOb25TdHJlYW1pbmcgPSBSdW5zQVBJLlJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zTm9uU3RyZWFtaW5nO1xuICBleHBvcnQgdHlwZSBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc1N0cmVhbWluZyA9IFJ1bnNBUEkuUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXNTdHJlYW1pbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXNOb25TdHJlYW1pbmcgZXh0ZW5kcyBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogSWYgYHRydWVgLCByZXR1cm5zIGEgc3RyZWFtIG9mIGV2ZW50cyB0aGF0IGhhcHBlbiBkdXJpbmcgdGhlIFJ1biBhcyBzZXJ2ZXItc2VudFxuICAgKiBldmVudHMsIHRlcm1pbmF0aW5nIHdoZW4gdGhlIFJ1biBlbnRlcnMgYSB0ZXJtaW5hbCBzdGF0ZSB3aXRoIGEgYGRhdGE6IFtET05FXWBcbiAgICogbWVzc2FnZS5cbiAgICovXG4gIHN0cmVhbT86IGZhbHNlIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc1N0cmVhbWluZyBleHRlbmRzIFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHJldHVybnMgYSBzdHJlYW0gb2YgZXZlbnRzIHRoYXQgaGFwcGVuIGR1cmluZyB0aGUgUnVuIGFzIHNlcnZlci1zZW50XG4gICAqIGV2ZW50cywgdGVybWluYXRpbmcgd2hlbiB0aGUgUnVuIGVudGVycyBhIHRlcm1pbmFsIHN0YXRlIHdpdGggYSBgZGF0YTogW0RPTkVdYFxuICAgKiBtZXNzYWdlLlxuICAgKi9cbiAgc3RyZWFtOiB0cnVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1blN1Ym1pdFRvb2xPdXRwdXRzQW5kUG9sbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdG9vbHMgZm9yIHdoaWNoIHRoZSBvdXRwdXRzIGFyZSBiZWluZyBzdWJtaXR0ZWQuXG4gICAqL1xuICB0b29sX291dHB1dHM6IEFycmF5PFJ1blN1Ym1pdFRvb2xPdXRwdXRzQW5kUG9sbFBhcmFtcy5Ub29sT3V0cHV0Pjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSdW5TdWJtaXRUb29sT3V0cHV0c0FuZFBvbGxQYXJhbXMge1xuICBleHBvcnQgaW50ZXJmYWNlIFRvb2xPdXRwdXQge1xuICAgIC8qKlxuICAgICAqIFRoZSBvdXRwdXQgb2YgdGhlIHRvb2wgY2FsbCB0byBiZSBzdWJtaXR0ZWQgdG8gY29udGludWUgdGhlIHJ1bi5cbiAgICAgKi9cbiAgICBvdXRwdXQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIHRvb2wgY2FsbCBpbiB0aGUgYHJlcXVpcmVkX2FjdGlvbmAgb2JqZWN0IHdpdGhpbiB0aGUgcnVuIG9iamVjdFxuICAgICAqIHRoZSBvdXRwdXQgaXMgYmVpbmcgc3VibWl0dGVkIGZvci5cbiAgICAgKi9cbiAgICB0b29sX2NhbGxfaWQ/OiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5TdWJtaXRUb29sT3V0cHV0c1N0cmVhbVBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdG9vbHMgZm9yIHdoaWNoIHRoZSBvdXRwdXRzIGFyZSBiZWluZyBzdWJtaXR0ZWQuXG4gICAqL1xuICB0b29sX291dHB1dHM6IEFycmF5PFJ1blN1Ym1pdFRvb2xPdXRwdXRzU3RyZWFtUGFyYW1zLlRvb2xPdXRwdXQ+O1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFJ1blN1Ym1pdFRvb2xPdXRwdXRzU3RyZWFtUGFyYW1zIHtcbiAgZXhwb3J0IGludGVyZmFjZSBUb29sT3V0cHV0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgb3V0cHV0IG9mIHRoZSB0b29sIGNhbGwgdG8gYmUgc3VibWl0dGVkIHRvIGNvbnRpbnVlIHRoZSBydW4uXG4gICAgICovXG4gICAgb3V0cHV0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSB0b29sIGNhbGwgaW4gdGhlIGByZXF1aXJlZF9hY3Rpb25gIG9iamVjdCB3aXRoaW4gdGhlIHJ1biBvYmplY3RcbiAgICAgKiB0aGUgb3V0cHV0IGlzIGJlaW5nIHN1Ym1pdHRlZCBmb3IuXG4gICAgICovXG4gICAgdG9vbF9jYWxsX2lkPzogc3RyaW5nO1xuICB9XG59XG5cblJ1bnMuUnVuc1BhZ2UgPSBSdW5zUGFnZTtcblJ1bnMuU3RlcHMgPSBTdGVwcztcblJ1bnMuUnVuU3RlcHNQYWdlID0gUnVuU3RlcHNQYWdlO1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgUnVucyB7XG4gIGV4cG9ydCB7XG4gICAgdHlwZSBSZXF1aXJlZEFjdGlvbkZ1bmN0aW9uVG9vbENhbGwgYXMgUmVxdWlyZWRBY3Rpb25GdW5jdGlvblRvb2xDYWxsLFxuICAgIHR5cGUgUnVuIGFzIFJ1bixcbiAgICB0eXBlIFJ1blN0YXR1cyBhcyBSdW5TdGF0dXMsXG4gICAgUnVuc1BhZ2UgYXMgUnVuc1BhZ2UsXG4gICAgdHlwZSBSdW5DcmVhdGVQYXJhbXMgYXMgUnVuQ3JlYXRlUGFyYW1zLFxuICAgIHR5cGUgUnVuQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nIGFzIFJ1bkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgICB0eXBlIFJ1bkNyZWF0ZVBhcmFtc1N0cmVhbWluZyBhcyBSdW5DcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gICAgdHlwZSBSdW5VcGRhdGVQYXJhbXMgYXMgUnVuVXBkYXRlUGFyYW1zLFxuICAgIHR5cGUgUnVuTGlzdFBhcmFtcyBhcyBSdW5MaXN0UGFyYW1zLFxuICAgIHR5cGUgUnVuQ3JlYXRlQW5kUG9sbFBhcmFtcyxcbiAgICB0eXBlIFJ1bkNyZWF0ZUFuZFN0cmVhbVBhcmFtcyxcbiAgICB0eXBlIFJ1blN0cmVhbVBhcmFtcyxcbiAgICB0eXBlIFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zIGFzIFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zLFxuICAgIHR5cGUgUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXNOb25TdHJlYW1pbmcgYXMgUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXNOb25TdHJlYW1pbmcsXG4gICAgdHlwZSBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc1N0cmVhbWluZyBhcyBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc1N0cmVhbWluZyxcbiAgICB0eXBlIFJ1blN1Ym1pdFRvb2xPdXRwdXRzQW5kUG9sbFBhcmFtcyxcbiAgICB0eXBlIFJ1blN1Ym1pdFRvb2xPdXRwdXRzU3RyZWFtUGFyYW1zLFxuICB9O1xuXG4gIGV4cG9ydCB7XG4gICAgU3RlcHMgYXMgU3RlcHMsXG4gICAgdHlwZSBDb2RlSW50ZXJwcmV0ZXJMb2dzIGFzIENvZGVJbnRlcnByZXRlckxvZ3MsXG4gICAgdHlwZSBDb2RlSW50ZXJwcmV0ZXJPdXRwdXRJbWFnZSBhcyBDb2RlSW50ZXJwcmV0ZXJPdXRwdXRJbWFnZSxcbiAgICB0eXBlIENvZGVJbnRlcnByZXRlclRvb2xDYWxsIGFzIENvZGVJbnRlcnByZXRlclRvb2xDYWxsLFxuICAgIHR5cGUgQ29kZUludGVycHJldGVyVG9vbENhbGxEZWx0YSBhcyBDb2RlSW50ZXJwcmV0ZXJUb29sQ2FsbERlbHRhLFxuICAgIHR5cGUgRmlsZVNlYXJjaFRvb2xDYWxsIGFzIEZpbGVTZWFyY2hUb29sQ2FsbCxcbiAgICB0eXBlIEZpbGVTZWFyY2hUb29sQ2FsbERlbHRhIGFzIEZpbGVTZWFyY2hUb29sQ2FsbERlbHRhLFxuICAgIHR5cGUgRnVuY3Rpb25Ub29sQ2FsbCBhcyBGdW5jdGlvblRvb2xDYWxsLFxuICAgIHR5cGUgRnVuY3Rpb25Ub29sQ2FsbERlbHRhIGFzIEZ1bmN0aW9uVG9vbENhbGxEZWx0YSxcbiAgICB0eXBlIE1lc3NhZ2VDcmVhdGlvblN0ZXBEZXRhaWxzIGFzIE1lc3NhZ2VDcmVhdGlvblN0ZXBEZXRhaWxzLFxuICAgIHR5cGUgUnVuU3RlcCBhcyBSdW5TdGVwLFxuICAgIHR5cGUgUnVuU3RlcERlbHRhIGFzIFJ1blN0ZXBEZWx0YSxcbiAgICB0eXBlIFJ1blN0ZXBEZWx0YUV2ZW50IGFzIFJ1blN0ZXBEZWx0YUV2ZW50LFxuICAgIHR5cGUgUnVuU3RlcERlbHRhTWVzc2FnZURlbHRhIGFzIFJ1blN0ZXBEZWx0YU1lc3NhZ2VEZWx0YSxcbiAgICB0eXBlIFJ1blN0ZXBJbmNsdWRlIGFzIFJ1blN0ZXBJbmNsdWRlLFxuICAgIHR5cGUgVG9vbENhbGwgYXMgVG9vbENhbGwsXG4gICAgdHlwZSBUb29sQ2FsbERlbHRhIGFzIFRvb2xDYWxsRGVsdGEsXG4gICAgdHlwZSBUb29sQ2FsbERlbHRhT2JqZWN0IGFzIFRvb2xDYWxsRGVsdGFPYmplY3QsXG4gICAgdHlwZSBUb29sQ2FsbHNTdGVwRGV0YWlscyBhcyBUb29sQ2FsbHNTdGVwRGV0YWlscyxcbiAgICBSdW5TdGVwc1BhZ2UgYXMgUnVuU3RlcHNQYWdlLFxuICAgIHR5cGUgU3RlcFJldHJpZXZlUGFyYW1zIGFzIFN0ZXBSZXRyaWV2ZVBhcmFtcyxcbiAgICB0eXBlIFN0ZXBMaXN0UGFyYW1zIGFzIFN0ZXBMaXN0UGFyYW1zLFxuICB9O1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgaXNSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQXNzaXN0YW50U3RyZWFtLCBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNCYXNlU3RyZWFtIH0gZnJvbSAnLi4vLi4vLi4vbGliL0Fzc2lzdGFudFN0cmVhbSc7XG5pbXBvcnQgeyBBUElQcm9taXNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgVGhyZWFkc0FQSSBmcm9tICcuL3RocmVhZHMnO1xuaW1wb3J0ICogYXMgU2hhcmVkIGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgKiBhcyBBc3Npc3RhbnRzQVBJIGZyb20gJy4uL2Fzc2lzdGFudHMnO1xuaW1wb3J0ICogYXMgTWVzc2FnZXNBUEkgZnJvbSAnLi9tZXNzYWdlcyc7XG5pbXBvcnQge1xuICBBbm5vdGF0aW9uLFxuICBBbm5vdGF0aW9uRGVsdGEsXG4gIEZpbGVDaXRhdGlvbkFubm90YXRpb24sXG4gIEZpbGVDaXRhdGlvbkRlbHRhQW5ub3RhdGlvbixcbiAgRmlsZVBhdGhBbm5vdGF0aW9uLFxuICBGaWxlUGF0aERlbHRhQW5ub3RhdGlvbixcbiAgSW1hZ2VGaWxlLFxuICBJbWFnZUZpbGVDb250ZW50QmxvY2ssXG4gIEltYWdlRmlsZURlbHRhLFxuICBJbWFnZUZpbGVEZWx0YUJsb2NrLFxuICBJbWFnZVVSTCxcbiAgSW1hZ2VVUkxDb250ZW50QmxvY2ssXG4gIEltYWdlVVJMRGVsdGEsXG4gIEltYWdlVVJMRGVsdGFCbG9jayxcbiAgTWVzc2FnZSBhcyBNZXNzYWdlc0FQSU1lc3NhZ2UsXG4gIE1lc3NhZ2VDb250ZW50LFxuICBNZXNzYWdlQ29udGVudERlbHRhLFxuICBNZXNzYWdlQ29udGVudFBhcnRQYXJhbSxcbiAgTWVzc2FnZUNyZWF0ZVBhcmFtcyxcbiAgTWVzc2FnZURlbGV0ZWQsXG4gIE1lc3NhZ2VEZWx0YSxcbiAgTWVzc2FnZURlbHRhRXZlbnQsXG4gIE1lc3NhZ2VMaXN0UGFyYW1zLFxuICBNZXNzYWdlVXBkYXRlUGFyYW1zLFxuICBNZXNzYWdlcyxcbiAgTWVzc2FnZXNQYWdlLFxuICBSZWZ1c2FsQ29udGVudEJsb2NrLFxuICBSZWZ1c2FsRGVsdGFCbG9jayxcbiAgVGV4dCxcbiAgVGV4dENvbnRlbnRCbG9jayxcbiAgVGV4dENvbnRlbnRCbG9ja1BhcmFtLFxuICBUZXh0RGVsdGEsXG4gIFRleHREZWx0YUJsb2NrLFxufSBmcm9tICcuL21lc3NhZ2VzJztcbmltcG9ydCAqIGFzIFJ1bnNBUEkgZnJvbSAnLi9ydW5zL3J1bnMnO1xuaW1wb3J0IHtcbiAgUmVxdWlyZWRBY3Rpb25GdW5jdGlvblRvb2xDYWxsLFxuICBSdW4sXG4gIFJ1bkNyZWF0ZUFuZFBvbGxQYXJhbXMsXG4gIFJ1bkNyZWF0ZUFuZFN0cmVhbVBhcmFtcyxcbiAgUnVuQ3JlYXRlUGFyYW1zLFxuICBSdW5DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcsXG4gIFJ1bkNyZWF0ZVBhcmFtc1N0cmVhbWluZyxcbiAgUnVuTGlzdFBhcmFtcyxcbiAgUnVuU3RhdHVzLFxuICBSdW5TdHJlYW1QYXJhbXMsXG4gIFJ1blN1Ym1pdFRvb2xPdXRwdXRzQW5kUG9sbFBhcmFtcyxcbiAgUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXMsXG4gIFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zTm9uU3RyZWFtaW5nLFxuICBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc1N0cmVhbWluZyxcbiAgUnVuU3VibWl0VG9vbE91dHB1dHNTdHJlYW1QYXJhbXMsXG4gIFJ1blVwZGF0ZVBhcmFtcyxcbiAgUnVucyxcbiAgUnVuc1BhZ2UsXG59IGZyb20gJy4vcnVucy9ydW5zJztcbmltcG9ydCB7IFN0cmVhbSB9IGZyb20gJy4uLy4uLy4uL3N0cmVhbWluZyc7XG5cbmV4cG9ydCBjbGFzcyBUaHJlYWRzIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICBydW5zOiBSdW5zQVBJLlJ1bnMgPSBuZXcgUnVuc0FQSS5SdW5zKHRoaXMuX2NsaWVudCk7XG4gIG1lc3NhZ2VzOiBNZXNzYWdlc0FQSS5NZXNzYWdlcyA9IG5ldyBNZXNzYWdlc0FQSS5NZXNzYWdlcyh0aGlzLl9jbGllbnQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB0aHJlYWQuXG4gICAqL1xuICBjcmVhdGUoYm9keT86IFRocmVhZENyZWF0ZVBhcmFtcywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkFQSVByb21pc2U8VGhyZWFkPjtcbiAgY3JlYXRlKG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPFRocmVhZD47XG4gIGNyZWF0ZShcbiAgICBib2R5OiBUaHJlYWRDcmVhdGVQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxUaHJlYWQ+IHtcbiAgICBpZiAoaXNSZXF1ZXN0T3B0aW9ucyhib2R5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHt9LCBib2R5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvdGhyZWFkcycsIHtcbiAgICAgIGJvZHksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSB0aHJlYWQuXG4gICAqL1xuICByZXRyaWV2ZSh0aHJlYWRJZDogc3RyaW5nLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxUaHJlYWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldChgL3RocmVhZHMvJHt0aHJlYWRJZH1gLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmllcyBhIHRocmVhZC5cbiAgICovXG4gIHVwZGF0ZSh0aHJlYWRJZDogc3RyaW5nLCBib2R5OiBUaHJlYWRVcGRhdGVQYXJhbXMsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPFRocmVhZD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdChgL3RocmVhZHMvJHt0aHJlYWRJZH1gLCB7XG4gICAgICBib2R5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgdGhyZWFkLlxuICAgKi9cbiAgZGVsKHRocmVhZElkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPFRocmVhZERlbGV0ZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmRlbGV0ZShgL3RocmVhZHMvJHt0aHJlYWRJZH1gLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB0aHJlYWQgYW5kIHJ1biBpdCBpbiBvbmUgcmVxdWVzdC5cbiAgICovXG4gIGNyZWF0ZUFuZFJ1bihcbiAgICBib2R5OiBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNOb25TdHJlYW1pbmcsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IEFQSVByb21pc2U8UnVuc0FQSS5SdW4+O1xuICBjcmVhdGVBbmRSdW4oXG4gICAgYm9keTogVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zU3RyZWFtaW5nLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBBUElQcm9taXNlPFN0cmVhbTxBc3Npc3RhbnRzQVBJLkFzc2lzdGFudFN0cmVhbUV2ZW50Pj47XG4gIGNyZWF0ZUFuZFJ1bihcbiAgICBib2R5OiBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNCYXNlLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBBUElQcm9taXNlPFN0cmVhbTxBc3Npc3RhbnRzQVBJLkFzc2lzdGFudFN0cmVhbUV2ZW50PiB8IFJ1bnNBUEkuUnVuPjtcbiAgY3JlYXRlQW5kUnVuKFxuICAgIGJvZHk6IFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQVBJUHJvbWlzZTxSdW5zQVBJLlJ1bj4gfCBBUElQcm9taXNlPFN0cmVhbTxBc3Npc3RhbnRzQVBJLkFzc2lzdGFudFN0cmVhbUV2ZW50Pj4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdCgnL3RocmVhZHMvcnVucycsIHtcbiAgICAgIGJvZHksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICAgIHN0cmVhbTogYm9keS5zdHJlYW0gPz8gZmFsc2UsXG4gICAgfSkgYXMgQVBJUHJvbWlzZTxSdW5zQVBJLlJ1bj4gfCBBUElQcm9taXNlPFN0cmVhbTxBc3Npc3RhbnRzQVBJLkFzc2lzdGFudFN0cmVhbUV2ZW50Pj47XG4gIH1cblxuICAvKipcbiAgICogQSBoZWxwZXIgdG8gY3JlYXRlIGEgdGhyZWFkLCBzdGFydCBhIHJ1biBhbmQgdGhlbiBwb2xsIGZvciBhIHRlcm1pbmFsIHN0YXRlLlxuICAgKiBNb3JlIGluZm9ybWF0aW9uIG9uIFJ1biBsaWZlY3ljbGVzIGNhbiBiZSBmb3VuZCBoZXJlOlxuICAgKiBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hc3Npc3RhbnRzL2hvdy1pdC13b3Jrcy9ydW5zLWFuZC1ydW4tc3RlcHNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUFuZFJ1blBvbGwoXG4gICAgYm9keTogVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zTm9uU3RyZWFtaW5nLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zICYgeyBwb2xsSW50ZXJ2YWxNcz86IG51bWJlciB9LFxuICApOiBQcm9taXNlPFRocmVhZHMuUnVuPiB7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgdGhpcy5jcmVhdGVBbmRSdW4oYm9keSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucnVucy5wb2xsKHJ1bi50aHJlYWRfaWQsIHJ1bi5pZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgdGhyZWFkIGFuZCBzdHJlYW0gdGhlIHJ1biBiYWNrXG4gICAqL1xuICBjcmVhdGVBbmRSdW5TdHJlYW0oXG4gICAgYm9keTogVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zQmFzZVN0cmVhbSxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQXNzaXN0YW50U3RyZWFtIHtcbiAgICByZXR1cm4gQXNzaXN0YW50U3RyZWFtLmNyZWF0ZVRocmVhZEFzc2lzdGFudFN0cmVhbShib2R5LCB0aGlzLl9jbGllbnQuYmV0YS50aHJlYWRzLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZGVsIG11c3Qgb3V0cHV0LiBDb21wYXRpYmxlIHdpdGhcbiAqIFtHUFQtNG9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscyNncHQtNG8pLFxuICogW0dQVC00IFR1cmJvXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMjZ3B0LTQtdHVyYm8tYW5kLWdwdC00KSxcbiAqIGFuZCBhbGwgR1BULTMuNSBUdXJibyBtb2RlbHMgc2luY2UgYGdwdC0zLjUtdHVyYm8tMTEwNmAuXG4gKlxuICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX3NjaGVtYVwiLCBcImpzb25fc2NoZW1hXCI6IHsuLi59IH1gIGVuYWJsZXMgU3RydWN0dXJlZFxuICogT3V0cHV0cyB3aGljaCBlbnN1cmVzIHRoZSBtb2RlbCB3aWxsIG1hdGNoIHlvdXIgc3VwcGxpZWQgSlNPTiBzY2hlbWEuIExlYXJuIG1vcmVcbiAqIGluIHRoZVxuICogW1N0cnVjdHVyZWQgT3V0cHV0cyBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3N0cnVjdHVyZWQtb3V0cHV0cykuXG4gKlxuICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX29iamVjdFwiIH1gIGVuYWJsZXMgSlNPTiBtb2RlLCB3aGljaCBlbnN1cmVzIHRoZVxuICogbWVzc2FnZSB0aGUgbW9kZWwgZ2VuZXJhdGVzIGlzIHZhbGlkIEpTT04uXG4gKlxuICogKipJbXBvcnRhbnQ6Kiogd2hlbiB1c2luZyBKU09OIG1vZGUsIHlvdSAqKm11c3QqKiBhbHNvIGluc3RydWN0IHRoZSBtb2RlbCB0b1xuICogcHJvZHVjZSBKU09OIHlvdXJzZWxmIHZpYSBhIHN5c3RlbSBvciB1c2VyIG1lc3NhZ2UuIFdpdGhvdXQgdGhpcywgdGhlIG1vZGVsIG1heVxuICogZ2VuZXJhdGUgYW4gdW5lbmRpbmcgc3RyZWFtIG9mIHdoaXRlc3BhY2UgdW50aWwgdGhlIGdlbmVyYXRpb24gcmVhY2hlcyB0aGUgdG9rZW5cbiAqIGxpbWl0LCByZXN1bHRpbmcgaW4gYSBsb25nLXJ1bm5pbmcgYW5kIHNlZW1pbmdseSBcInN0dWNrXCIgcmVxdWVzdC4gQWxzbyBub3RlIHRoYXRcbiAqIHRoZSBtZXNzYWdlIGNvbnRlbnQgbWF5IGJlIHBhcnRpYWxseSBjdXQgb2ZmIGlmIGBmaW5pc2hfcmVhc29uPVwibGVuZ3RoXCJgLCB3aGljaFxuICogaW5kaWNhdGVzIHRoZSBnZW5lcmF0aW9uIGV4Y2VlZGVkIGBtYXhfdG9rZW5zYCBvciB0aGUgY29udmVyc2F0aW9uIGV4Y2VlZGVkIHRoZVxuICogbWF4IGNvbnRleHQgbGVuZ3RoLlxuICovXG5leHBvcnQgdHlwZSBBc3Npc3RhbnRSZXNwb25zZUZvcm1hdE9wdGlvbiA9XG4gIHwgJ2F1dG8nXG4gIHwgU2hhcmVkLlJlc3BvbnNlRm9ybWF0VGV4dFxuICB8IFNoYXJlZC5SZXNwb25zZUZvcm1hdEpTT05PYmplY3RcbiAgfCBTaGFyZWQuUmVzcG9uc2VGb3JtYXRKU09OU2NoZW1hO1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHRvb2wgdGhlIG1vZGVsIHNob3VsZCB1c2UuIFVzZSB0byBmb3JjZSB0aGUgbW9kZWwgdG8gY2FsbCBhIHNwZWNpZmljXG4gKiB0b29sLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2lzdGFudFRvb2xDaG9pY2Uge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHRvb2wuIElmIHR5cGUgaXMgYGZ1bmN0aW9uYCwgdGhlIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBzZXRcbiAgICovXG4gIHR5cGU6ICdmdW5jdGlvbicgfCAnY29kZV9pbnRlcnByZXRlcicgfCAnZmlsZV9zZWFyY2gnO1xuXG4gIGZ1bmN0aW9uPzogQXNzaXN0YW50VG9vbENob2ljZUZ1bmN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2lzdGFudFRvb2xDaG9pY2VGdW5jdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb250cm9scyB3aGljaCAoaWYgYW55KSB0b29sIGlzIGNhbGxlZCBieSB0aGUgbW9kZWwuIGBub25lYCBtZWFucyB0aGUgbW9kZWwgd2lsbFxuICogbm90IGNhbGwgYW55IHRvb2xzIGFuZCBpbnN0ZWFkIGdlbmVyYXRlcyBhIG1lc3NhZ2UuIGBhdXRvYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxuICogYW5kIG1lYW5zIHRoZSBtb2RlbCBjYW4gcGljayBiZXR3ZWVuIGdlbmVyYXRpbmcgYSBtZXNzYWdlIG9yIGNhbGxpbmcgb25lIG9yIG1vcmVcbiAqIHRvb2xzLiBgcmVxdWlyZWRgIG1lYW5zIHRoZSBtb2RlbCBtdXN0IGNhbGwgb25lIG9yIG1vcmUgdG9vbHMgYmVmb3JlIHJlc3BvbmRpbmdcbiAqIHRvIHRoZSB1c2VyLiBTcGVjaWZ5aW5nIGEgcGFydGljdWxhciB0b29sIGxpa2UgYHtcInR5cGVcIjogXCJmaWxlX3NlYXJjaFwifWAgb3JcbiAqIGB7XCJ0eXBlXCI6IFwiZnVuY3Rpb25cIiwgXCJmdW5jdGlvblwiOiB7XCJuYW1lXCI6IFwibXlfZnVuY3Rpb25cIn19YCBmb3JjZXMgdGhlIG1vZGVsIHRvXG4gKiBjYWxsIHRoYXQgdG9vbC5cbiAqL1xuZXhwb3J0IHR5cGUgQXNzaXN0YW50VG9vbENob2ljZU9wdGlvbiA9ICdub25lJyB8ICdhdXRvJyB8ICdyZXF1aXJlZCcgfCBBc3Npc3RhbnRUb29sQ2hvaWNlO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0aHJlYWQgdGhhdCBjb250YWluc1xuICogW21lc3NhZ2VzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL21lc3NhZ2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaHJlYWQge1xuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIsIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGluIEFQSSBlbmRwb2ludHMuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSB0aHJlYWQgd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAqXG4gICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBtZXRhZGF0YTogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0eXBlLCB3aGljaCBpcyBhbHdheXMgYHRocmVhZGAuXG4gICAqL1xuICBvYmplY3Q6ICd0aHJlYWQnO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGFzc2lzdGFudCdzIHRvb2xzIGluIHRoaXNcbiAgICogdGhyZWFkLiBUaGUgcmVzb3VyY2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB0b29sLiBGb3IgZXhhbXBsZSwgdGhlXG4gICAqIGBjb2RlX2ludGVycHJldGVyYCB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiBmaWxlIElEcywgd2hpbGUgdGhlIGBmaWxlX3NlYXJjaGBcbiAgICogdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgdmVjdG9yIHN0b3JlIElEcy5cbiAgICovXG4gIHRvb2xfcmVzb3VyY2VzOiBUaHJlYWQuVG9vbFJlc291cmNlcyB8IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGhyZWFkIHtcbiAgLyoqXG4gICAqIEEgc2V0IG9mIHJlc291cmNlcyB0aGF0IGFyZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgYXNzaXN0YW50J3MgdG9vbHMgaW4gdGhpc1xuICAgKiB0aHJlYWQuIFRoZSByZXNvdXJjZXMgYXJlIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHRvb2wuIEZvciBleGFtcGxlLCB0aGVcbiAgICogYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIGZpbGUgSURzLCB3aGlsZSB0aGUgYGZpbGVfc2VhcmNoYFxuICAgKiB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiB2ZWN0b3Igc3RvcmUgSURzLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICBjb2RlX2ludGVycHJldGVyPzogVG9vbFJlc291cmNlcy5Db2RlSW50ZXJwcmV0ZXI7XG5cbiAgICBmaWxlX3NlYXJjaD86IFRvb2xSZXNvdXJjZXMuRmlsZVNlYXJjaDtcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgVG9vbFJlc291cmNlcyB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBDb2RlSW50ZXJwcmV0ZXIge1xuICAgICAgLyoqXG4gICAgICAgKiBBIGxpc3Qgb2YgW2ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIElEcyBtYWRlXG4gICAgICAgKiBhdmFpbGFibGUgdG8gdGhlIGBjb2RlX2ludGVycHJldGVyYCB0b29sLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDIwIGZpbGVzXG4gICAgICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHRvb2wuXG4gICAgICAgKi9cbiAgICAgIGZpbGVfaWRzPzogQXJyYXk8c3RyaW5nPjtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIEZpbGVTZWFyY2gge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGVcbiAgICAgICAqIFt2ZWN0b3Igc3RvcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdmVjdG9yLXN0b3Jlcy9vYmplY3QpXG4gICAgICAgKiBhdHRhY2hlZCB0byB0aGlzIHRocmVhZC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAxIHZlY3RvciBzdG9yZSBhdHRhY2hlZCB0b1xuICAgICAgICogdGhlIHRocmVhZC5cbiAgICAgICAqL1xuICAgICAgdmVjdG9yX3N0b3JlX2lkcz86IEFycmF5PHN0cmluZz47XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkRGVsZXRlZCB7XG4gIGlkOiBzdHJpbmc7XG5cbiAgZGVsZXRlZDogYm9vbGVhbjtcblxuICBvYmplY3Q6ICd0aHJlYWQuZGVsZXRlZCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkQ3JlYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBbbWVzc2FnZXNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbWVzc2FnZXMpIHRvXG4gICAqIHN0YXJ0IHRoZSB0aHJlYWQgd2l0aC5cbiAgICovXG4gIG1lc3NhZ2VzPzogQXJyYXk8VGhyZWFkQ3JlYXRlUGFyYW1zLk1lc3NhZ2U+O1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgKlxuICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbWV0YWRhdGE/OiBTaGFyZWQuTWV0YWRhdGEgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGFzc2lzdGFudCdzIHRvb2xzIGluIHRoaXNcbiAgICogdGhyZWFkLiBUaGUgcmVzb3VyY2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB0b29sLiBGb3IgZXhhbXBsZSwgdGhlXG4gICAqIGBjb2RlX2ludGVycHJldGVyYCB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiBmaWxlIElEcywgd2hpbGUgdGhlIGBmaWxlX3NlYXJjaGBcbiAgICogdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgdmVjdG9yIHN0b3JlIElEcy5cbiAgICovXG4gIHRvb2xfcmVzb3VyY2VzPzogVGhyZWFkQ3JlYXRlUGFyYW1zLlRvb2xSZXNvdXJjZXMgfCBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFRocmVhZENyZWF0ZVBhcmFtcyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgY29udGVudHMgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICovXG4gICAgY29udGVudDogc3RyaW5nIHwgQXJyYXk8TWVzc2FnZXNBUEkuTWVzc2FnZUNvbnRlbnRQYXJ0UGFyYW0+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvbGUgb2YgdGhlIGVudGl0eSB0aGF0IGlzIGNyZWF0aW5nIHRoZSBtZXNzYWdlLiBBbGxvd2VkIHZhbHVlcyBpbmNsdWRlOlxuICAgICAqXG4gICAgICogLSBgdXNlcmA6IEluZGljYXRlcyB0aGUgbWVzc2FnZSBpcyBzZW50IGJ5IGFuIGFjdHVhbCB1c2VyIGFuZCBzaG91bGQgYmUgdXNlZCBpblxuICAgICAqICAgbW9zdCBjYXNlcyB0byByZXByZXNlbnQgdXNlci1nZW5lcmF0ZWQgbWVzc2FnZXMuXG4gICAgICogLSBgYXNzaXN0YW50YDogSW5kaWNhdGVzIHRoZSBtZXNzYWdlIGlzIGdlbmVyYXRlZCBieSB0aGUgYXNzaXN0YW50LiBVc2UgdGhpc1xuICAgICAqICAgdmFsdWUgdG8gaW5zZXJ0IG1lc3NhZ2VzIGZyb20gdGhlIGFzc2lzdGFudCBpbnRvIHRoZSBjb252ZXJzYXRpb24uXG4gICAgICovXG4gICAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCc7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgZmlsZXMgYXR0YWNoZWQgdG8gdGhlIG1lc3NhZ2UsIGFuZCB0aGUgdG9vbHMgdGhleSBzaG91bGQgYmUgYWRkZWQgdG8uXG4gICAgICovXG4gICAgYXR0YWNobWVudHM/OiBBcnJheTxNZXNzYWdlLkF0dGFjaG1lbnQ+IHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kXG4gICAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgICAqXG4gICAgICogS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGhcbiAgICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgICAqL1xuICAgIG1ldGFkYXRhPzogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgTWVzc2FnZSB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIElEIG9mIHRoZSBmaWxlIHRvIGF0dGFjaCB0byB0aGUgbWVzc2FnZS5cbiAgICAgICAqL1xuICAgICAgZmlsZV9pZD86IHN0cmluZztcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdG9vbHMgdG8gYWRkIHRoaXMgZmlsZSB0by5cbiAgICAgICAqL1xuICAgICAgdG9vbHM/OiBBcnJheTxBc3Npc3RhbnRzQVBJLkNvZGVJbnRlcnByZXRlclRvb2wgfCBBdHRhY2htZW50LkZpbGVTZWFyY2g+O1xuICAgIH1cblxuICAgIGV4cG9ydCBuYW1lc3BhY2UgQXR0YWNobWVudCB7XG4gICAgICBleHBvcnQgaW50ZXJmYWNlIEZpbGVTZWFyY2gge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHR5cGUgb2YgdG9vbCBiZWluZyBkZWZpbmVkOiBgZmlsZV9zZWFyY2hgXG4gICAgICAgICAqL1xuICAgICAgICB0eXBlOiAnZmlsZV9zZWFyY2gnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGFzc2lzdGFudCdzIHRvb2xzIGluIHRoaXNcbiAgICogdGhyZWFkLiBUaGUgcmVzb3VyY2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB0b29sLiBGb3IgZXhhbXBsZSwgdGhlXG4gICAqIGBjb2RlX2ludGVycHJldGVyYCB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiBmaWxlIElEcywgd2hpbGUgdGhlIGBmaWxlX3NlYXJjaGBcbiAgICogdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgdmVjdG9yIHN0b3JlIElEcy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVG9vbFJlc291cmNlcyB7XG4gICAgY29kZV9pbnRlcnByZXRlcj86IFRvb2xSZXNvdXJjZXMuQ29kZUludGVycHJldGVyO1xuXG4gICAgZmlsZV9zZWFyY2g/OiBUb29sUmVzb3VyY2VzLkZpbGVTZWFyY2g7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIFRvb2xSZXNvdXJjZXMge1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQ29kZUludGVycHJldGVyIHtcbiAgICAgIC8qKlxuICAgICAgICogQSBsaXN0IG9mIFtmaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzKSBJRHMgbWFkZVxuICAgICAgICogYXZhaWxhYmxlIHRvIHRoZSBgY29kZV9pbnRlcnByZXRlcmAgdG9vbC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAyMCBmaWxlc1xuICAgICAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSB0b29sLlxuICAgICAgICovXG4gICAgICBmaWxlX2lkcz86IEFycmF5PHN0cmluZz47XG4gICAgfVxuXG4gICAgZXhwb3J0IGludGVyZmFjZSBGaWxlU2VhcmNoIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlXG4gICAgICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgICAgICogYXR0YWNoZWQgdG8gdGhpcyB0aHJlYWQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMSB2ZWN0b3Igc3RvcmUgYXR0YWNoZWQgdG9cbiAgICAgICAqIHRoZSB0aHJlYWQuXG4gICAgICAgKi9cbiAgICAgIHZlY3Rvcl9zdG9yZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgICAvKipcbiAgICAgICAqIEEgaGVscGVyIHRvIGNyZWF0ZSBhXG4gICAgICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgICAgICogd2l0aCBmaWxlX2lkcyBhbmQgYXR0YWNoIGl0IHRvIHRoaXMgdGhyZWFkLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDEgdmVjdG9yXG4gICAgICAgKiBzdG9yZSBhdHRhY2hlZCB0byB0aGUgdGhyZWFkLlxuICAgICAgICovXG4gICAgICB2ZWN0b3Jfc3RvcmVzPzogQXJyYXk8RmlsZVNlYXJjaC5WZWN0b3JTdG9yZT47XG4gICAgfVxuXG4gICAgZXhwb3J0IG5hbWVzcGFjZSBGaWxlU2VhcmNoIHtcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yU3RvcmUge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGNodW5raW5nIHN0cmF0ZWd5IHVzZWQgdG8gY2h1bmsgdGhlIGZpbGUocykuIElmIG5vdCBzZXQsIHdpbGwgdXNlIHRoZSBgYXV0b2BcbiAgICAgICAgICogc3RyYXRlZ3kuXG4gICAgICAgICAqL1xuICAgICAgICBjaHVua2luZ19zdHJhdGVneT86IFZlY3RvclN0b3JlLkF1dG8gfCBWZWN0b3JTdG9yZS5TdGF0aWM7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbGlzdCBvZiBbZmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgSURzIHRvXG4gICAgICAgICAqIGFkZCB0byB0aGUgdmVjdG9yIHN0b3JlLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDEwMDAwIGZpbGVzIGluIGEgdmVjdG9yXG4gICAgICAgICAqIHN0b3JlLlxuICAgICAgICAgKi9cbiAgICAgICAgZmlsZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAgICAgICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICAgICAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgICAgICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgICAgICAgKi9cbiAgICAgICAgbWV0YWRhdGE/OiBTaGFyZWQuTWV0YWRhdGEgfCBudWxsO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgbmFtZXNwYWNlIFZlY3RvclN0b3JlIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IHN0cmF0ZWd5LiBUaGlzIHN0cmF0ZWd5IGN1cnJlbnRseSB1c2VzIGEgYG1heF9jaHVua19zaXplX3Rva2Vuc2Agb2ZcbiAgICAgICAgICogYDgwMGAgYW5kIGBjaHVua19vdmVybGFwX3Rva2Vuc2Agb2YgYDQwMGAuXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnQgaW50ZXJmYWNlIEF1dG8ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEFsd2F5cyBgYXV0b2AuXG4gICAgICAgICAgICovXG4gICAgICAgICAgdHlwZTogJ2F1dG8nO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwb3J0IGludGVyZmFjZSBTdGF0aWMge1xuICAgICAgICAgIHN0YXRpYzogU3RhdGljLlN0YXRpYztcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEFsd2F5cyBgc3RhdGljYC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0eXBlOiAnc3RhdGljJztcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cG9ydCBuYW1lc3BhY2UgU3RhdGljIHtcbiAgICAgICAgICBleHBvcnQgaW50ZXJmYWNlIFN0YXRpYyB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBudW1iZXIgb2YgdG9rZW5zIHRoYXQgb3ZlcmxhcCBiZXR3ZWVuIGNodW5rcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDQwMGAuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogTm90ZSB0aGF0IHRoZSBvdmVybGFwIG11c3Qgbm90IGV4Y2VlZCBoYWxmIG9mIGBtYXhfY2h1bmtfc2l6ZV90b2tlbnNgLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjaHVua19vdmVybGFwX3Rva2VuczogbnVtYmVyO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0b2tlbnMgaW4gZWFjaCBjaHVuay4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDgwMGAuIFRoZVxuICAgICAgICAgICAgICogbWluaW11bSB2YWx1ZSBpcyBgMTAwYCBhbmQgdGhlIG1heGltdW0gdmFsdWUgaXMgYDQwOTZgLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBtYXhfY2h1bmtfc2l6ZV90b2tlbnM6IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHJlYWRVcGRhdGVQYXJhbXMge1xuICAvKipcbiAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kXG4gICAqIHF1ZXJ5aW5nIGZvciBvYmplY3RzIHZpYSBBUEkgb3IgdGhlIGRhc2hib2FyZC5cbiAgICpcbiAgICogS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGhcbiAgICogYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTIgY2hhcmFjdGVycy5cbiAgICovXG4gIG1ldGFkYXRhPzogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBhc3Npc3RhbnQncyB0b29scyBpbiB0aGlzXG4gICAqIHRocmVhZC4gVGhlIHJlc291cmNlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgdG9vbC4gRm9yIGV4YW1wbGUsIHRoZVxuICAgKiBgY29kZV9pbnRlcnByZXRlcmAgdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgZmlsZSBJRHMsIHdoaWxlIHRoZSBgZmlsZV9zZWFyY2hgXG4gICAqIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZSBJRHMuXG4gICAqL1xuICB0b29sX3Jlc291cmNlcz86IFRocmVhZFVwZGF0ZVBhcmFtcy5Ub29sUmVzb3VyY2VzIHwgbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUaHJlYWRVcGRhdGVQYXJhbXMge1xuICAvKipcbiAgICogQSBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBhc3Npc3RhbnQncyB0b29scyBpbiB0aGlzXG4gICAqIHRocmVhZC4gVGhlIHJlc291cmNlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgdG9vbC4gRm9yIGV4YW1wbGUsIHRoZVxuICAgKiBgY29kZV9pbnRlcnByZXRlcmAgdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgZmlsZSBJRHMsIHdoaWxlIHRoZSBgZmlsZV9zZWFyY2hgXG4gICAqIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZSBJRHMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRvb2xSZXNvdXJjZXMge1xuICAgIGNvZGVfaW50ZXJwcmV0ZXI/OiBUb29sUmVzb3VyY2VzLkNvZGVJbnRlcnByZXRlcjtcblxuICAgIGZpbGVfc2VhcmNoPzogVG9vbFJlc291cmNlcy5GaWxlU2VhcmNoO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIENvZGVJbnRlcnByZXRlciB7XG4gICAgICAvKipcbiAgICAgICAqIEEgbGlzdCBvZiBbZmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgSURzIG1hZGVcbiAgICAgICAqIGF2YWlsYWJsZSB0byB0aGUgYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMjAgZmlsZXNcbiAgICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgdG9vbC5cbiAgICAgICAqL1xuICAgICAgZmlsZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuICAgIH1cblxuICAgIGV4cG9ydCBpbnRlcmZhY2UgRmlsZVNlYXJjaCB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZVxuICAgICAgICogW3ZlY3RvciBzdG9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS92ZWN0b3Itc3RvcmVzL29iamVjdClcbiAgICAgICAqIGF0dGFjaGVkIHRvIHRoaXMgdGhyZWFkLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDEgdmVjdG9yIHN0b3JlIGF0dGFjaGVkIHRvXG4gICAgICAgKiB0aGUgdGhyZWFkLlxuICAgICAgICovXG4gICAgICB2ZWN0b3Jfc3RvcmVfaWRzPzogQXJyYXk8c3RyaW5nPjtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zID1cbiAgfCBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNOb25TdHJlYW1pbmdcbiAgfCBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNTdHJlYW1pbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlXG4gICAqIFthc3Npc3RhbnRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYXNzaXN0YW50cykgdG8gdXNlIHRvXG4gICAqIGV4ZWN1dGUgdGhpcyBydW4uXG4gICAqL1xuICBhc3Npc3RhbnRfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3lzdGVtIG1lc3NhZ2Ugb2YgdGhlIGFzc2lzdGFudC4gVGhpcyBpcyB1c2VmdWwgZm9yXG4gICAqIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb24gYSBwZXItcnVuIGJhc2lzLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbXBsZXRpb24gdG9rZW5zIHRoYXQgbWF5IGJlIHVzZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZVxuICAgKiBydW4uIFRoZSBydW4gd2lsbCBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gdXNlIG9ubHkgdGhlIG51bWJlciBvZiBjb21wbGV0aW9uIHRva2Vuc1xuICAgKiBzcGVjaWZpZWQsIGFjcm9zcyBtdWx0aXBsZSB0dXJucyBvZiB0aGUgcnVuLiBJZiB0aGUgcnVuIGV4Y2VlZHMgdGhlIG51bWJlciBvZlxuICAgKiBjb21wbGV0aW9uIHRva2VucyBzcGVjaWZpZWQsIHRoZSBydW4gd2lsbCBlbmQgd2l0aCBzdGF0dXMgYGluY29tcGxldGVgLiBTZWVcbiAgICogYGluY29tcGxldGVfZGV0YWlsc2AgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIG1heF9jb21wbGV0aW9uX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9tcHQgdG9rZW5zIHRoYXQgbWF5IGJlIHVzZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZSBydW4uXG4gICAqIFRoZSBydW4gd2lsbCBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gdXNlIG9ubHkgdGhlIG51bWJlciBvZiBwcm9tcHQgdG9rZW5zXG4gICAqIHNwZWNpZmllZCwgYWNyb3NzIG11bHRpcGxlIHR1cm5zIG9mIHRoZSBydW4uIElmIHRoZSBydW4gZXhjZWVkcyB0aGUgbnVtYmVyIG9mXG4gICAqIHByb21wdCB0b2tlbnMgc3BlY2lmaWVkLCB0aGUgcnVuIHdpbGwgZW5kIHdpdGggc3RhdHVzIGBpbmNvbXBsZXRlYC4gU2VlXG4gICAqIGBpbmNvbXBsZXRlX2RldGFpbHNgIGZvciBtb3JlIGluZm8uXG4gICAqL1xuICBtYXhfcHJvbXB0X3Rva2Vucz86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAqXG4gICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBtZXRhZGF0YT86IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgW01vZGVsXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL21vZGVscykgdG9cbiAgICogYmUgdXNlZCB0byBleGVjdXRlIHRoaXMgcnVuLiBJZiBhIHZhbHVlIGlzIHByb3ZpZGVkIGhlcmUsIGl0IHdpbGwgb3ZlcnJpZGUgdGhlXG4gICAqIG1vZGVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzaXN0YW50LiBJZiBub3QsIHRoZSBtb2RlbCBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAqIGFzc2lzdGFudCB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBtb2RlbD86IChzdHJpbmcgJiB7fSkgfCBTaGFyZWQuQ2hhdE1vZGVsIHwgbnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGVcbiAgICogW3BhcmFsbGVsIGZ1bmN0aW9uIGNhbGxpbmddKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9mdW5jdGlvbi1jYWxsaW5nI2NvbmZpZ3VyaW5nLXBhcmFsbGVsLWZ1bmN0aW9uLWNhbGxpbmcpXG4gICAqIGR1cmluZyB0b29sIHVzZS5cbiAgICovXG4gIHBhcmFsbGVsX3Rvb2xfY2FsbHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2RlbCBtdXN0IG91dHB1dC4gQ29tcGF0aWJsZSB3aXRoXG4gICAqIFtHUFQtNG9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscyNncHQtNG8pLFxuICAgKiBbR1BULTQgVHVyYm9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscyNncHQtNC10dXJiby1hbmQtZ3B0LTQpLFxuICAgKiBhbmQgYWxsIEdQVC0zLjUgVHVyYm8gbW9kZWxzIHNpbmNlIGBncHQtMy41LXR1cmJvLTExMDZgLlxuICAgKlxuICAgKiBTZXR0aW5nIHRvIGB7IFwidHlwZVwiOiBcImpzb25fc2NoZW1hXCIsIFwianNvbl9zY2hlbWFcIjogey4uLn0gfWAgZW5hYmxlcyBTdHJ1Y3R1cmVkXG4gICAqIE91dHB1dHMgd2hpY2ggZW5zdXJlcyB0aGUgbW9kZWwgd2lsbCBtYXRjaCB5b3VyIHN1cHBsaWVkIEpTT04gc2NoZW1hLiBMZWFybiBtb3JlXG4gICAqIGluIHRoZVxuICAgKiBbU3RydWN0dXJlZCBPdXRwdXRzIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3RydWN0dXJlZC1vdXRwdXRzKS5cbiAgICpcbiAgICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX29iamVjdFwiIH1gIGVuYWJsZXMgSlNPTiBtb2RlLCB3aGljaCBlbnN1cmVzIHRoZVxuICAgKiBtZXNzYWdlIHRoZSBtb2RlbCBnZW5lcmF0ZXMgaXMgdmFsaWQgSlNPTi5cbiAgICpcbiAgICogKipJbXBvcnRhbnQ6Kiogd2hlbiB1c2luZyBKU09OIG1vZGUsIHlvdSAqKm11c3QqKiBhbHNvIGluc3RydWN0IHRoZSBtb2RlbCB0b1xuICAgKiBwcm9kdWNlIEpTT04geW91cnNlbGYgdmlhIGEgc3lzdGVtIG9yIHVzZXIgbWVzc2FnZS4gV2l0aG91dCB0aGlzLCB0aGUgbW9kZWwgbWF5XG4gICAqIGdlbmVyYXRlIGFuIHVuZW5kaW5nIHN0cmVhbSBvZiB3aGl0ZXNwYWNlIHVudGlsIHRoZSBnZW5lcmF0aW9uIHJlYWNoZXMgdGhlIHRva2VuXG4gICAqIGxpbWl0LCByZXN1bHRpbmcgaW4gYSBsb25nLXJ1bm5pbmcgYW5kIHNlZW1pbmdseSBcInN0dWNrXCIgcmVxdWVzdC4gQWxzbyBub3RlIHRoYXRcbiAgICogdGhlIG1lc3NhZ2UgY29udGVudCBtYXkgYmUgcGFydGlhbGx5IGN1dCBvZmYgaWYgYGZpbmlzaF9yZWFzb249XCJsZW5ndGhcImAsIHdoaWNoXG4gICAqIGluZGljYXRlcyB0aGUgZ2VuZXJhdGlvbiBleGNlZWRlZCBgbWF4X3Rva2Vuc2Agb3IgdGhlIGNvbnZlcnNhdGlvbiBleGNlZWRlZCB0aGVcbiAgICogbWF4IGNvbnRleHQgbGVuZ3RoLlxuICAgKi9cbiAgcmVzcG9uc2VfZm9ybWF0PzogQXNzaXN0YW50UmVzcG9uc2VGb3JtYXRPcHRpb24gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHJldHVybnMgYSBzdHJlYW0gb2YgZXZlbnRzIHRoYXQgaGFwcGVuIGR1cmluZyB0aGUgUnVuIGFzIHNlcnZlci1zZW50XG4gICAqIGV2ZW50cywgdGVybWluYXRpbmcgd2hlbiB0aGUgUnVuIGVudGVycyBhIHRlcm1pbmFsIHN0YXRlIHdpdGggYSBgZGF0YTogW0RPTkVdYFxuICAgKiBtZXNzYWdlLlxuICAgKi9cbiAgc3RyZWFtPzogYm9vbGVhbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoYXQgc2FtcGxpbmcgdGVtcGVyYXR1cmUgdG8gdXNlLCBiZXR3ZWVuIDAgYW5kIDIuIEhpZ2hlciB2YWx1ZXMgbGlrZSAwLjggd2lsbFxuICAgKiBtYWtlIHRoZSBvdXRwdXQgbW9yZSByYW5kb20sIHdoaWxlIGxvd2VyIHZhbHVlcyBsaWtlIDAuMiB3aWxsIG1ha2UgaXQgbW9yZVxuICAgKiBmb2N1c2VkIGFuZCBkZXRlcm1pbmlzdGljLlxuICAgKi9cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHRvIGNyZWF0ZSBhIG5ldyB0aHJlYWQuIElmIG5vIHRocmVhZCBpcyBwcm92aWRlZCB3aGVuIHJ1bm5pbmcgYSByZXF1ZXN0LFxuICAgKiBhbiBlbXB0eSB0aHJlYWQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgdGhyZWFkPzogVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zLlRocmVhZDtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hpY2ggKGlmIGFueSkgdG9vbCBpcyBjYWxsZWQgYnkgdGhlIG1vZGVsLiBgbm9uZWAgbWVhbnMgdGhlIG1vZGVsIHdpbGxcbiAgICogbm90IGNhbGwgYW55IHRvb2xzIGFuZCBpbnN0ZWFkIGdlbmVyYXRlcyBhIG1lc3NhZ2UuIGBhdXRvYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgKiBhbmQgbWVhbnMgdGhlIG1vZGVsIGNhbiBwaWNrIGJldHdlZW4gZ2VuZXJhdGluZyBhIG1lc3NhZ2Ugb3IgY2FsbGluZyBvbmUgb3IgbW9yZVxuICAgKiB0b29scy4gYHJlcXVpcmVkYCBtZWFucyB0aGUgbW9kZWwgbXVzdCBjYWxsIG9uZSBvciBtb3JlIHRvb2xzIGJlZm9yZSByZXNwb25kaW5nXG4gICAqIHRvIHRoZSB1c2VyLiBTcGVjaWZ5aW5nIGEgcGFydGljdWxhciB0b29sIGxpa2UgYHtcInR5cGVcIjogXCJmaWxlX3NlYXJjaFwifWAgb3JcbiAgICogYHtcInR5cGVcIjogXCJmdW5jdGlvblwiLCBcImZ1bmN0aW9uXCI6IHtcIm5hbWVcIjogXCJteV9mdW5jdGlvblwifX1gIGZvcmNlcyB0aGUgbW9kZWwgdG9cbiAgICogY2FsbCB0aGF0IHRvb2wuXG4gICAqL1xuICB0b29sX2Nob2ljZT86IEFzc2lzdGFudFRvb2xDaG9pY2VPcHRpb24gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXNzaXN0YW50J3MgdG9vbHMuIFRoZSByZXNvdXJjZXMgYXJlXG4gICAqIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHRvb2wuIEZvciBleGFtcGxlLCB0aGUgYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgcmVxdWlyZXNcbiAgICogYSBsaXN0IG9mIGZpbGUgSURzLCB3aGlsZSB0aGUgYGZpbGVfc2VhcmNoYCB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiB2ZWN0b3Igc3RvcmVcbiAgICogSURzLlxuICAgKi9cbiAgdG9vbF9yZXNvdXJjZXM/OiBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXMuVG9vbFJlc291cmNlcyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0b29scyB0aGUgYXNzaXN0YW50IGNhbiB1c2UgZm9yIHRoaXMgcnVuLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgICogbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvbiBhIHBlci1ydW4gYmFzaXMuXG4gICAqL1xuICB0b29scz86IEFycmF5PFxuICAgIEFzc2lzdGFudHNBUEkuQ29kZUludGVycHJldGVyVG9vbCB8IEFzc2lzdGFudHNBUEkuRmlsZVNlYXJjaFRvb2wgfCBBc3Npc3RhbnRzQVBJLkZ1bmN0aW9uVG9vbFxuICA+IHwgbnVsbDtcblxuICAvKipcbiAgICogQW4gYWx0ZXJuYXRpdmUgdG8gc2FtcGxpbmcgd2l0aCB0ZW1wZXJhdHVyZSwgY2FsbGVkIG51Y2xldXMgc2FtcGxpbmcsIHdoZXJlIHRoZVxuICAgKiBtb2RlbCBjb25zaWRlcnMgdGhlIHJlc3VsdHMgb2YgdGhlIHRva2VucyB3aXRoIHRvcF9wIHByb2JhYmlsaXR5IG1hc3MuIFNvIDAuMVxuICAgKiBtZWFucyBvbmx5IHRoZSB0b2tlbnMgY29tcHJpc2luZyB0aGUgdG9wIDEwJSBwcm9iYWJpbGl0eSBtYXNzIGFyZSBjb25zaWRlcmVkLlxuICAgKlxuICAgKiBXZSBnZW5lcmFsbHkgcmVjb21tZW5kIGFsdGVyaW5nIHRoaXMgb3IgdGVtcGVyYXR1cmUgYnV0IG5vdCBib3RoLlxuICAgKi9cbiAgdG9wX3A/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBmb3IgaG93IGEgdGhyZWFkIHdpbGwgYmUgdHJ1bmNhdGVkIHByaW9yIHRvIHRoZSBydW4uIFVzZSB0aGlzIHRvXG4gICAqIGNvbnRyb2wgdGhlIGludGlhbCBjb250ZXh0IHdpbmRvdyBvZiB0aGUgcnVuLlxuICAgKi9cbiAgdHJ1bmNhdGlvbl9zdHJhdGVneT86IFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtcy5UcnVuY2F0aW9uU3RyYXRlZ3kgfCBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtcyB7XG4gIC8qKlxuICAgKiBPcHRpb25zIHRvIGNyZWF0ZSBhIG5ldyB0aHJlYWQuIElmIG5vIHRocmVhZCBpcyBwcm92aWRlZCB3aGVuIHJ1bm5pbmcgYSByZXF1ZXN0LFxuICAgKiBhbiBlbXB0eSB0aHJlYWQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWQge1xuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBbbWVzc2FnZXNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbWVzc2FnZXMpIHRvXG4gICAgICogc3RhcnQgdGhlIHRocmVhZCB3aXRoLlxuICAgICAqL1xuICAgIG1lc3NhZ2VzPzogQXJyYXk8VGhyZWFkLk1lc3NhZ2U+O1xuXG4gICAgLyoqXG4gICAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAgICpcbiAgICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAgICovXG4gICAgbWV0YWRhdGE/OiBTaGFyZWQuTWV0YWRhdGEgfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQSBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBhc3Npc3RhbnQncyB0b29scyBpbiB0aGlzXG4gICAgICogdGhyZWFkLiBUaGUgcmVzb3VyY2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB0b29sLiBGb3IgZXhhbXBsZSwgdGhlXG4gICAgICogYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIGZpbGUgSURzLCB3aGlsZSB0aGUgYGZpbGVfc2VhcmNoYFxuICAgICAqIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZSBJRHMuXG4gICAgICovXG4gICAgdG9vbF9yZXNvdXJjZXM/OiBUaHJlYWQuVG9vbFJlc291cmNlcyB8IG51bGw7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIFRocmVhZCB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIHRleHQgY29udGVudHMgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICAgKi9cbiAgICAgIGNvbnRlbnQ6IHN0cmluZyB8IEFycmF5PE1lc3NhZ2VzQVBJLk1lc3NhZ2VDb250ZW50UGFydFBhcmFtPjtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgcm9sZSBvZiB0aGUgZW50aXR5IHRoYXQgaXMgY3JlYXRpbmcgdGhlIG1lc3NhZ2UuIEFsbG93ZWQgdmFsdWVzIGluY2x1ZGU6XG4gICAgICAgKlxuICAgICAgICogLSBgdXNlcmA6IEluZGljYXRlcyB0aGUgbWVzc2FnZSBpcyBzZW50IGJ5IGFuIGFjdHVhbCB1c2VyIGFuZCBzaG91bGQgYmUgdXNlZCBpblxuICAgICAgICogICBtb3N0IGNhc2VzIHRvIHJlcHJlc2VudCB1c2VyLWdlbmVyYXRlZCBtZXNzYWdlcy5cbiAgICAgICAqIC0gYGFzc2lzdGFudGA6IEluZGljYXRlcyB0aGUgbWVzc2FnZSBpcyBnZW5lcmF0ZWQgYnkgdGhlIGFzc2lzdGFudC4gVXNlIHRoaXNcbiAgICAgICAqICAgdmFsdWUgdG8gaW5zZXJ0IG1lc3NhZ2VzIGZyb20gdGhlIGFzc2lzdGFudCBpbnRvIHRoZSBjb252ZXJzYXRpb24uXG4gICAgICAgKi9cbiAgICAgIHJvbGU6ICd1c2VyJyB8ICdhc3Npc3RhbnQnO1xuXG4gICAgICAvKipcbiAgICAgICAqIEEgbGlzdCBvZiBmaWxlcyBhdHRhY2hlZCB0byB0aGUgbWVzc2FnZSwgYW5kIHRoZSB0b29scyB0aGV5IHNob3VsZCBiZSBhZGRlZCB0by5cbiAgICAgICAqL1xuICAgICAgYXR0YWNobWVudHM/OiBBcnJheTxNZXNzYWdlLkF0dGFjaG1lbnQ+IHwgbnVsbDtcblxuICAgICAgLyoqXG4gICAgICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAgICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kXG4gICAgICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAgICAgKlxuICAgICAgICogS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGhcbiAgICAgICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAgICAgKi9cbiAgICAgIG1ldGFkYXRhPzogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcbiAgICB9XG5cbiAgICBleHBvcnQgbmFtZXNwYWNlIE1lc3NhZ2Uge1xuICAgICAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBJRCBvZiB0aGUgZmlsZSB0byBhdHRhY2ggdG8gdGhlIG1lc3NhZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBmaWxlX2lkPzogc3RyaW5nO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdG9vbHMgdG8gYWRkIHRoaXMgZmlsZSB0by5cbiAgICAgICAgICovXG4gICAgICAgIHRvb2xzPzogQXJyYXk8QXNzaXN0YW50c0FQSS5Db2RlSW50ZXJwcmV0ZXJUb29sIHwgQXR0YWNobWVudC5GaWxlU2VhcmNoPjtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IG5hbWVzcGFjZSBBdHRhY2htZW50IHtcbiAgICAgICAgZXhwb3J0IGludGVyZmFjZSBGaWxlU2VhcmNoIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBUaGUgdHlwZSBvZiB0b29sIGJlaW5nIGRlZmluZWQ6IGBmaWxlX3NlYXJjaGBcbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0eXBlOiAnZmlsZV9zZWFyY2gnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBhc3Npc3RhbnQncyB0b29scyBpbiB0aGlzXG4gICAgICogdGhyZWFkLiBUaGUgcmVzb3VyY2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB0b29sLiBGb3IgZXhhbXBsZSwgdGhlXG4gICAgICogYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIGZpbGUgSURzLCB3aGlsZSB0aGUgYGZpbGVfc2VhcmNoYFxuICAgICAqIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZSBJRHMuXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICAgIGNvZGVfaW50ZXJwcmV0ZXI/OiBUb29sUmVzb3VyY2VzLkNvZGVJbnRlcnByZXRlcjtcblxuICAgICAgZmlsZV9zZWFyY2g/OiBUb29sUmVzb3VyY2VzLkZpbGVTZWFyY2g7XG4gICAgfVxuXG4gICAgZXhwb3J0IG5hbWVzcGFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgQ29kZUludGVycHJldGVyIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbGlzdCBvZiBbZmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgSURzIG1hZGVcbiAgICAgICAgICogYXZhaWxhYmxlIHRvIHRoZSBgY29kZV9pbnRlcnByZXRlcmAgdG9vbC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAyMCBmaWxlc1xuICAgICAgICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHRvb2wuXG4gICAgICAgICAqL1xuICAgICAgICBmaWxlX2lkcz86IEFycmF5PHN0cmluZz47XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgRmlsZVNlYXJjaCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGVcbiAgICAgICAgICogW3ZlY3RvciBzdG9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS92ZWN0b3Itc3RvcmVzL29iamVjdClcbiAgICAgICAgICogYXR0YWNoZWQgdG8gdGhpcyB0aHJlYWQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMSB2ZWN0b3Igc3RvcmUgYXR0YWNoZWQgdG9cbiAgICAgICAgICogdGhlIHRocmVhZC5cbiAgICAgICAgICovXG4gICAgICAgIHZlY3Rvcl9zdG9yZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGhlbHBlciB0byBjcmVhdGUgYVxuICAgICAgICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgICAgICAgKiB3aXRoIGZpbGVfaWRzIGFuZCBhdHRhY2ggaXQgdG8gdGhpcyB0aHJlYWQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMSB2ZWN0b3JcbiAgICAgICAgICogc3RvcmUgYXR0YWNoZWQgdG8gdGhlIHRocmVhZC5cbiAgICAgICAgICovXG4gICAgICAgIHZlY3Rvcl9zdG9yZXM/OiBBcnJheTxGaWxlU2VhcmNoLlZlY3RvclN0b3JlPjtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IG5hbWVzcGFjZSBGaWxlU2VhcmNoIHtcbiAgICAgICAgZXhwb3J0IGludGVyZmFjZSBWZWN0b3JTdG9yZSB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogVGhlIGNodW5raW5nIHN0cmF0ZWd5IHVzZWQgdG8gY2h1bmsgdGhlIGZpbGUocykuIElmIG5vdCBzZXQsIHdpbGwgdXNlIHRoZSBgYXV0b2BcbiAgICAgICAgICAgKiBzdHJhdGVneS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjaHVua2luZ19zdHJhdGVneT86IFZlY3RvclN0b3JlLkF1dG8gfCBWZWN0b3JTdG9yZS5TdGF0aWM7XG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBBIGxpc3Qgb2YgW2ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIElEcyB0b1xuICAgICAgICAgICAqIGFkZCB0byB0aGUgdmVjdG9yIHN0b3JlLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDEwMDAwIGZpbGVzIGluIGEgdmVjdG9yXG4gICAgICAgICAgICogc3RvcmUuXG4gICAgICAgICAgICovXG4gICAgICAgICAgZmlsZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgICAgICAgICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICAgICAgICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgICAgICAgICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICovXG4gICAgICAgICAgbWV0YWRhdGE/OiBTaGFyZWQuTWV0YWRhdGEgfCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwb3J0IG5hbWVzcGFjZSBWZWN0b3JTdG9yZSB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogVGhlIGRlZmF1bHQgc3RyYXRlZ3kuIFRoaXMgc3RyYXRlZ3kgY3VycmVudGx5IHVzZXMgYSBgbWF4X2NodW5rX3NpemVfdG9rZW5zYCBvZlxuICAgICAgICAgICAqIGA4MDBgIGFuZCBgY2h1bmtfb3ZlcmxhcF90b2tlbnNgIG9mIGA0MDBgLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGV4cG9ydCBpbnRlcmZhY2UgQXV0byB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFsd2F5cyBgYXV0b2AuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHR5cGU6ICdhdXRvJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBleHBvcnQgaW50ZXJmYWNlIFN0YXRpYyB7XG4gICAgICAgICAgICBzdGF0aWM6IFN0YXRpYy5TdGF0aWM7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWx3YXlzIGBzdGF0aWNgLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0eXBlOiAnc3RhdGljJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBleHBvcnQgbmFtZXNwYWNlIFN0YXRpYyB7XG4gICAgICAgICAgICBleHBvcnQgaW50ZXJmYWNlIFN0YXRpYyB7XG4gICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIHRva2VucyB0aGF0IG92ZXJsYXAgYmV0d2VlbiBjaHVua3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA0MDBgLlxuICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIG92ZXJsYXAgbXVzdCBub3QgZXhjZWVkIGhhbGYgb2YgYG1heF9jaHVua19zaXplX3Rva2Vuc2AuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBjaHVua19vdmVybGFwX3Rva2VuczogbnVtYmVyO1xuXG4gICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdG9rZW5zIGluIGVhY2ggY2h1bmsuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA4MDBgLiBUaGVcbiAgICAgICAgICAgICAgICogbWluaW11bSB2YWx1ZSBpcyBgMTAwYCBhbmQgdGhlIG1heGltdW0gdmFsdWUgaXMgYDQwOTZgLlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgbWF4X2NodW5rX3NpemVfdG9rZW5zOiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIHJlc291cmNlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBhc3Npc3RhbnQncyB0b29scy4gVGhlIHJlc291cmNlcyBhcmVcbiAgICogc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgdG9vbC4gRm9yIGV4YW1wbGUsIHRoZSBgY29kZV9pbnRlcnByZXRlcmAgdG9vbCByZXF1aXJlc1xuICAgKiBhIGxpc3Qgb2YgZmlsZSBJRHMsIHdoaWxlIHRoZSBgZmlsZV9zZWFyY2hgIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZVxuICAgKiBJRHMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRvb2xSZXNvdXJjZXMge1xuICAgIGNvZGVfaW50ZXJwcmV0ZXI/OiBUb29sUmVzb3VyY2VzLkNvZGVJbnRlcnByZXRlcjtcblxuICAgIGZpbGVfc2VhcmNoPzogVG9vbFJlc291cmNlcy5GaWxlU2VhcmNoO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIENvZGVJbnRlcnByZXRlciB7XG4gICAgICAvKipcbiAgICAgICAqIEEgbGlzdCBvZiBbZmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgSURzIG1hZGVcbiAgICAgICAqIGF2YWlsYWJsZSB0byB0aGUgYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMjAgZmlsZXNcbiAgICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgdG9vbC5cbiAgICAgICAqL1xuICAgICAgZmlsZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuICAgIH1cblxuICAgIGV4cG9ydCBpbnRlcmZhY2UgRmlsZVNlYXJjaCB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBJRCBvZiB0aGVcbiAgICAgICAqIFt2ZWN0b3Igc3RvcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdmVjdG9yLXN0b3Jlcy9vYmplY3QpXG4gICAgICAgKiBhdHRhY2hlZCB0byB0aGlzIGFzc2lzdGFudC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAxIHZlY3RvciBzdG9yZSBhdHRhY2hlZCB0b1xuICAgICAgICogdGhlIGFzc2lzdGFudC5cbiAgICAgICAqL1xuICAgICAgdmVjdG9yX3N0b3JlX2lkcz86IEFycmF5PHN0cmluZz47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIGZvciBob3cgYSB0aHJlYWQgd2lsbCBiZSB0cnVuY2F0ZWQgcHJpb3IgdG8gdGhlIHJ1bi4gVXNlIHRoaXMgdG9cbiAgICogY29udHJvbCB0aGUgaW50aWFsIGNvbnRleHQgd2luZG93IG9mIHRoZSBydW4uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRydW5jYXRpb25TdHJhdGVneSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRydW5jYXRpb24gc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgdGhyZWFkLiBUaGUgZGVmYXVsdCBpcyBgYXV0b2AuIElmIHNldCB0b1xuICAgICAqIGBsYXN0X21lc3NhZ2VzYCwgdGhlIHRocmVhZCB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgbiBtb3N0IHJlY2VudCBtZXNzYWdlcyBpblxuICAgICAqIHRoZSB0aHJlYWQuIFdoZW4gc2V0IHRvIGBhdXRvYCwgbWVzc2FnZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdGhyZWFkIHdpbGwgYmVcbiAgICAgKiBkcm9wcGVkIHRvIGZpdCB0aGUgY29udGV4dCBsZW5ndGggb2YgdGhlIG1vZGVsLCBgbWF4X3Byb21wdF90b2tlbnNgLlxuICAgICAqL1xuICAgIHR5cGU6ICdhdXRvJyB8ICdsYXN0X21lc3NhZ2VzJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgbW9zdCByZWNlbnQgbWVzc2FnZXMgZnJvbSB0aGUgdGhyZWFkIHdoZW4gY29uc3RydWN0aW5nIHRoZSBjb250ZXh0XG4gICAgICogZm9yIHRoZSBydW4uXG4gICAgICovXG4gICAgbGFzdF9tZXNzYWdlcz86IG51bWJlciB8IG51bGw7XG4gIH1cblxuICBleHBvcnQgdHlwZSBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNOb25TdHJlYW1pbmcgPSBUaHJlYWRzQVBJLlRocmVhZENyZWF0ZUFuZFJ1blBhcmFtc05vblN0cmVhbWluZztcbiAgZXhwb3J0IHR5cGUgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zU3RyZWFtaW5nID0gVGhyZWFkc0FQSS5UaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNTdHJlYW1pbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zTm9uU3RyZWFtaW5nIGV4dGVuZHMgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHJldHVybnMgYSBzdHJlYW0gb2YgZXZlbnRzIHRoYXQgaGFwcGVuIGR1cmluZyB0aGUgUnVuIGFzIHNlcnZlci1zZW50XG4gICAqIGV2ZW50cywgdGVybWluYXRpbmcgd2hlbiB0aGUgUnVuIGVudGVycyBhIHRlcm1pbmFsIHN0YXRlIHdpdGggYSBgZGF0YTogW0RPTkVdYFxuICAgKiBtZXNzYWdlLlxuICAgKi9cbiAgc3RyZWFtPzogZmFsc2UgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtc1N0cmVhbWluZyBleHRlbmRzIFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogSWYgYHRydWVgLCByZXR1cm5zIGEgc3RyZWFtIG9mIGV2ZW50cyB0aGF0IGhhcHBlbiBkdXJpbmcgdGhlIFJ1biBhcyBzZXJ2ZXItc2VudFxuICAgKiBldmVudHMsIHRlcm1pbmF0aW5nIHdoZW4gdGhlIFJ1biBlbnRlcnMgYSB0ZXJtaW5hbCBzdGF0ZSB3aXRoIGEgYGRhdGE6IFtET05FXWBcbiAgICogbWVzc2FnZS5cbiAgICovXG4gIHN0cmVhbTogdHJ1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHJlYWRDcmVhdGVBbmRSdW5Qb2xsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGVcbiAgICogW2Fzc2lzdGFudF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9hc3Npc3RhbnRzKSB0byB1c2UgdG9cbiAgICogZXhlY3V0ZSB0aGlzIHJ1bi5cbiAgICovXG4gIGFzc2lzdGFudF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBzeXN0ZW0gbWVzc2FnZSBvZiB0aGUgYXNzaXN0YW50LiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgICogbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvbiBhIHBlci1ydW4gYmFzaXMuXG4gICAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29tcGxldGlvbiB0b2tlbnMgdGhhdCBtYXkgYmUgdXNlZCBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlXG4gICAqIHJ1bi4gVGhlIHJ1biB3aWxsIG1ha2UgYSBiZXN0IGVmZm9ydCB0byB1c2Ugb25seSB0aGUgbnVtYmVyIG9mIGNvbXBsZXRpb24gdG9rZW5zXG4gICAqIHNwZWNpZmllZCwgYWNyb3NzIG11bHRpcGxlIHR1cm5zIG9mIHRoZSBydW4uIElmIHRoZSBydW4gZXhjZWVkcyB0aGUgbnVtYmVyIG9mXG4gICAqIGNvbXBsZXRpb24gdG9rZW5zIHNwZWNpZmllZCwgdGhlIHJ1biB3aWxsIGVuZCB3aXRoIHN0YXR1cyBgaW5jb21wbGV0ZWAuIFNlZVxuICAgKiBgaW5jb21wbGV0ZV9kZXRhaWxzYCBmb3IgbW9yZSBpbmZvLlxuICAgKi9cbiAgbWF4X2NvbXBsZXRpb25fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHByb21wdCB0b2tlbnMgdGhhdCBtYXkgYmUgdXNlZCBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIHJ1bi5cbiAgICogVGhlIHJ1biB3aWxsIG1ha2UgYSBiZXN0IGVmZm9ydCB0byB1c2Ugb25seSB0aGUgbnVtYmVyIG9mIHByb21wdCB0b2tlbnNcbiAgICogc3BlY2lmaWVkLCBhY3Jvc3MgbXVsdGlwbGUgdHVybnMgb2YgdGhlIHJ1bi4gSWYgdGhlIHJ1biBleGNlZWRzIHRoZSBudW1iZXIgb2ZcbiAgICogcHJvbXB0IHRva2VucyBzcGVjaWZpZWQsIHRoZSBydW4gd2lsbCBlbmQgd2l0aCBzdGF0dXMgYGluY29tcGxldGVgLiBTZWVcbiAgICogYGluY29tcGxldGVfZGV0YWlsc2AgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIG1heF9wcm9tcHRfdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdC4gS2V5c1xuICAgKiBjYW4gYmUgYSBtYXhpbXVtIG9mIDY0IGNoYXJhY3RlcnMgbG9uZyBhbmQgdmFsdWVzIGNhbiBiZSBhIG1heGl1bSBvZiA1MTJcbiAgICogY2hhcmFjdGVycyBsb25nLlxuICAgKi9cbiAgbWV0YWRhdGE/OiB1bmtub3duIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBbTW9kZWxdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbW9kZWxzKSB0b1xuICAgKiBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhpcyBydW4uIElmIGEgdmFsdWUgaXMgcHJvdmlkZWQgaGVyZSwgaXQgd2lsbCBvdmVycmlkZSB0aGVcbiAgICogbW9kZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBhc3Npc3RhbnQuIElmIG5vdCwgdGhlIG1vZGVsIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgICogYXNzaXN0YW50IHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIG1vZGVsPzpcbiAgICB8IChzdHJpbmcgJiB7fSlcbiAgICB8ICdncHQtNG8nXG4gICAgfCAnZ3B0LTRvLTIwMjQtMDUtMTMnXG4gICAgfCAnZ3B0LTQtdHVyYm8nXG4gICAgfCAnZ3B0LTQtdHVyYm8tMjAyNC0wNC0wOSdcbiAgICB8ICdncHQtNC0wMTI1LXByZXZpZXcnXG4gICAgfCAnZ3B0LTQtdHVyYm8tcHJldmlldydcbiAgICB8ICdncHQtNC0xMTA2LXByZXZpZXcnXG4gICAgfCAnZ3B0LTQtdmlzaW9uLXByZXZpZXcnXG4gICAgfCAnZ3B0LTQnXG4gICAgfCAnZ3B0LTQtMDMxNCdcbiAgICB8ICdncHQtNC0wNjEzJ1xuICAgIHwgJ2dwdC00LTMyaydcbiAgICB8ICdncHQtNC0zMmstMDMxNCdcbiAgICB8ICdncHQtNC0zMmstMDYxMydcbiAgICB8ICdncHQtMy41LXR1cmJvJ1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8tMTZrJ1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8tMDYxMydcbiAgICB8ICdncHQtMy41LXR1cmJvLTExMDYnXG4gICAgfCAnZ3B0LTMuNS10dXJiby0wMTI1J1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8tMTZrLTA2MTMnXG4gICAgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2RlbCBtdXN0IG91dHB1dC4gQ29tcGF0aWJsZSB3aXRoXG4gICAqIFtHUFQtNG9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscy9ncHQtNG8pLFxuICAgKiBbR1BULTQgVHVyYm9dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscy9ncHQtNC10dXJiby1hbmQtZ3B0LTQpLFxuICAgKiBhbmQgYWxsIEdQVC0zLjUgVHVyYm8gbW9kZWxzIHNpbmNlIGBncHQtMy41LXR1cmJvLTExMDZgLlxuICAgKlxuICAgKiBTZXR0aW5nIHRvIGB7IFwidHlwZVwiOiBcImpzb25fb2JqZWN0XCIgfWAgZW5hYmxlcyBKU09OIG1vZGUsIHdoaWNoIGd1YXJhbnRlZXMgdGhlXG4gICAqIG1lc3NhZ2UgdGhlIG1vZGVsIGdlbmVyYXRlcyBpcyB2YWxpZCBKU09OLlxuICAgKlxuICAgKiAqKkltcG9ydGFudDoqKiB3aGVuIHVzaW5nIEpTT04gbW9kZSwgeW91ICoqbXVzdCoqIGFsc28gaW5zdHJ1Y3QgdGhlIG1vZGVsIHRvXG4gICAqIHByb2R1Y2UgSlNPTiB5b3Vyc2VsZiB2aWEgYSBzeXN0ZW0gb3IgdXNlciBtZXNzYWdlLiBXaXRob3V0IHRoaXMsIHRoZSBtb2RlbCBtYXlcbiAgICogZ2VuZXJhdGUgYW4gdW5lbmRpbmcgc3RyZWFtIG9mIHdoaXRlc3BhY2UgdW50aWwgdGhlIGdlbmVyYXRpb24gcmVhY2hlcyB0aGUgdG9rZW5cbiAgICogbGltaXQsIHJlc3VsdGluZyBpbiBhIGxvbmctcnVubmluZyBhbmQgc2VlbWluZ2x5IFwic3R1Y2tcIiByZXF1ZXN0LiBBbHNvIG5vdGUgdGhhdFxuICAgKiB0aGUgbWVzc2FnZSBjb250ZW50IG1heSBiZSBwYXJ0aWFsbHkgY3V0IG9mZiBpZiBgZmluaXNoX3JlYXNvbj1cImxlbmd0aFwiYCwgd2hpY2hcbiAgICogaW5kaWNhdGVzIHRoZSBnZW5lcmF0aW9uIGV4Y2VlZGVkIGBtYXhfdG9rZW5zYCBvciB0aGUgY29udmVyc2F0aW9uIGV4Y2VlZGVkIHRoZVxuICAgKiBtYXggY29udGV4dCBsZW5ndGguXG4gICAqL1xuICByZXNwb25zZV9mb3JtYXQ/OiBBc3Npc3RhbnRSZXNwb25zZUZvcm1hdE9wdGlvbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoYXQgc2FtcGxpbmcgdGVtcGVyYXR1cmUgdG8gdXNlLCBiZXR3ZWVuIDAgYW5kIDIuIEhpZ2hlciB2YWx1ZXMgbGlrZSAwLjggd2lsbFxuICAgKiBtYWtlIHRoZSBvdXRwdXQgbW9yZSByYW5kb20sIHdoaWxlIGxvd2VyIHZhbHVlcyBsaWtlIDAuMiB3aWxsIG1ha2UgaXQgbW9yZVxuICAgKiBmb2N1c2VkIGFuZCBkZXRlcm1pbmlzdGljLlxuICAgKi9cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJZiBubyB0aHJlYWQgaXMgcHJvdmlkZWQsIGFuIGVtcHR5IHRocmVhZCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICB0aHJlYWQ/OiBUaHJlYWRDcmVhdGVBbmRSdW5Qb2xsUGFyYW1zLlRocmVhZDtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hpY2ggKGlmIGFueSkgdG9vbCBpcyBjYWxsZWQgYnkgdGhlIG1vZGVsLiBgbm9uZWAgbWVhbnMgdGhlIG1vZGVsIHdpbGxcbiAgICogbm90IGNhbGwgYW55IHRvb2xzIGFuZCBpbnN0ZWFkIGdlbmVyYXRlcyBhIG1lc3NhZ2UuIGBhdXRvYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgKiBhbmQgbWVhbnMgdGhlIG1vZGVsIGNhbiBwaWNrIGJldHdlZW4gZ2VuZXJhdGluZyBhIG1lc3NhZ2Ugb3IgY2FsbGluZyBvbmUgb3IgbW9yZVxuICAgKiB0b29scy4gYHJlcXVpcmVkYCBtZWFucyB0aGUgbW9kZWwgbXVzdCBjYWxsIG9uZSBvciBtb3JlIHRvb2xzIGJlZm9yZSByZXNwb25kaW5nXG4gICAqIHRvIHRoZSB1c2VyLiBTcGVjaWZ5aW5nIGEgcGFydGljdWxhciB0b29sIGxpa2UgYHtcInR5cGVcIjogXCJmaWxlX3NlYXJjaFwifWAgb3JcbiAgICogYHtcInR5cGVcIjogXCJmdW5jdGlvblwiLCBcImZ1bmN0aW9uXCI6IHtcIm5hbWVcIjogXCJteV9mdW5jdGlvblwifX1gIGZvcmNlcyB0aGUgbW9kZWwgdG9cbiAgICogY2FsbCB0aGF0IHRvb2wuXG4gICAqL1xuICB0b29sX2Nob2ljZT86IEFzc2lzdGFudFRvb2xDaG9pY2VPcHRpb24gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXNzaXN0YW50J3MgdG9vbHMuIFRoZSByZXNvdXJjZXMgYXJlXG4gICAqIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHRvb2wuIEZvciBleGFtcGxlLCB0aGUgYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgcmVxdWlyZXNcbiAgICogYSBsaXN0IG9mIGZpbGUgSURzLCB3aGlsZSB0aGUgYGZpbGVfc2VhcmNoYCB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiB2ZWN0b3Igc3RvcmVcbiAgICogSURzLlxuICAgKi9cbiAgdG9vbF9yZXNvdXJjZXM/OiBUaHJlYWRDcmVhdGVBbmRSdW5Qb2xsUGFyYW1zLlRvb2xSZXNvdXJjZXMgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdG9vbHMgdGhlIGFzc2lzdGFudCBjYW4gdXNlIGZvciB0aGlzIHJ1bi4gVGhpcyBpcyB1c2VmdWwgZm9yXG4gICAqIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb24gYSBwZXItcnVuIGJhc2lzLlxuICAgKi9cbiAgdG9vbHM/OiBBcnJheTxcbiAgICBBc3Npc3RhbnRzQVBJLkNvZGVJbnRlcnByZXRlclRvb2wgfCBBc3Npc3RhbnRzQVBJLkZpbGVTZWFyY2hUb29sIHwgQXNzaXN0YW50c0FQSS5GdW5jdGlvblRvb2xcbiAgPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIGFsdGVybmF0aXZlIHRvIHNhbXBsaW5nIHdpdGggdGVtcGVyYXR1cmUsIGNhbGxlZCBudWNsZXVzIHNhbXBsaW5nLCB3aGVyZSB0aGVcbiAgICogbW9kZWwgY29uc2lkZXJzIHRoZSByZXN1bHRzIG9mIHRoZSB0b2tlbnMgd2l0aCB0b3BfcCBwcm9iYWJpbGl0eSBtYXNzLiBTbyAwLjFcbiAgICogbWVhbnMgb25seSB0aGUgdG9rZW5zIGNvbXByaXNpbmcgdGhlIHRvcCAxMCUgcHJvYmFiaWxpdHkgbWFzcyBhcmUgY29uc2lkZXJlZC5cbiAgICpcbiAgICogV2UgZ2VuZXJhbGx5IHJlY29tbWVuZCBhbHRlcmluZyB0aGlzIG9yIHRlbXBlcmF0dXJlIGJ1dCBub3QgYm90aC5cbiAgICovXG4gIHRvcF9wPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29udHJvbHMgZm9yIGhvdyBhIHRocmVhZCB3aWxsIGJlIHRydW5jYXRlZCBwcmlvciB0byB0aGUgcnVuLiBVc2UgdGhpcyB0b1xuICAgKiBjb250cm9sIHRoZSBpbnRpYWwgY29udGV4dCB3aW5kb3cgb2YgdGhlIHJ1bi5cbiAgICovXG4gIHRydW5jYXRpb25fc3RyYXRlZ3k/OiBUaHJlYWRDcmVhdGVBbmRSdW5Qb2xsUGFyYW1zLlRydW5jYXRpb25TdHJhdGVneSB8IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGhyZWFkQ3JlYXRlQW5kUnVuUG9sbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBJZiBubyB0aHJlYWQgaXMgcHJvdmlkZWQsIGFuIGVtcHR5IHRocmVhZCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRocmVhZCB7XG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIFttZXNzYWdlc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tZXNzYWdlcykgdG9cbiAgICAgKiBzdGFydCB0aGUgdGhyZWFkIHdpdGguXG4gICAgICovXG4gICAgbWVzc2FnZXM/OiBBcnJheTxUaHJlYWQuTWVzc2FnZT47XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQuIEtleXNcbiAgICAgKiBjYW4gYmUgYSBtYXhpbXVtIG9mIDY0IGNoYXJhY3RlcnMgbG9uZyBhbmQgdmFsdWVzIGNhbiBiZSBhIG1heGl1bSBvZiA1MTJcbiAgICAgKiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAgICovXG4gICAgbWV0YWRhdGE/OiB1bmtub3duIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEEgc2V0IG9mIHJlc291cmNlcyB0aGF0IGFyZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgYXNzaXN0YW50J3MgdG9vbHMgaW4gdGhpc1xuICAgICAqIHRocmVhZC4gVGhlIHJlc291cmNlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgdG9vbC4gRm9yIGV4YW1wbGUsIHRoZVxuICAgICAqIGBjb2RlX2ludGVycHJldGVyYCB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiBmaWxlIElEcywgd2hpbGUgdGhlIGBmaWxlX3NlYXJjaGBcbiAgICAgKiB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiB2ZWN0b3Igc3RvcmUgSURzLlxuICAgICAqL1xuICAgIHRvb2xfcmVzb3VyY2VzPzogVGhyZWFkLlRvb2xSZXNvdXJjZXMgfCBudWxsO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBUaHJlYWQge1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSB0ZXh0IGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlLlxuICAgICAgICovXG4gICAgICBjb250ZW50OiBzdHJpbmcgfCBBcnJheTxNZXNzYWdlc0FQSS5NZXNzYWdlQ29udGVudFBhcnRQYXJhbT47XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHJvbGUgb2YgdGhlIGVudGl0eSB0aGF0IGlzIGNyZWF0aW5nIHRoZSBtZXNzYWdlLiBBbGxvd2VkIHZhbHVlcyBpbmNsdWRlOlxuICAgICAgICpcbiAgICAgICAqIC0gYHVzZXJgOiBJbmRpY2F0ZXMgdGhlIG1lc3NhZ2UgaXMgc2VudCBieSBhbiBhY3R1YWwgdXNlciBhbmQgc2hvdWxkIGJlIHVzZWQgaW5cbiAgICAgICAqICAgbW9zdCBjYXNlcyB0byByZXByZXNlbnQgdXNlci1nZW5lcmF0ZWQgbWVzc2FnZXMuXG4gICAgICAgKiAtIGBhc3Npc3RhbnRgOiBJbmRpY2F0ZXMgdGhlIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBhc3Npc3RhbnQuIFVzZSB0aGlzXG4gICAgICAgKiAgIHZhbHVlIHRvIGluc2VydCBtZXNzYWdlcyBmcm9tIHRoZSBhc3Npc3RhbnQgaW50byB0aGUgY29udmVyc2F0aW9uLlxuICAgICAgICovXG4gICAgICByb2xlOiAndXNlcicgfCAnYXNzaXN0YW50JztcblxuICAgICAgLyoqXG4gICAgICAgKiBBIGxpc3Qgb2YgZmlsZXMgYXR0YWNoZWQgdG8gdGhlIG1lc3NhZ2UsIGFuZCB0aGUgdG9vbHMgdGhleSBzaG91bGQgYmUgYWRkZWQgdG8uXG4gICAgICAgKi9cbiAgICAgIGF0dGFjaG1lbnRzPzogQXJyYXk8TWVzc2FnZS5BdHRhY2htZW50PiB8IG51bGw7XG5cbiAgICAgIC8qKlxuICAgICAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgICAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQuIEtleXNcbiAgICAgICAqIGNhbiBiZSBhIG1heGltdW0gb2YgNjQgY2hhcmFjdGVycyBsb25nIGFuZCB2YWx1ZXMgY2FuIGJlIGEgbWF4aXVtIG9mIDUxMlxuICAgICAgICogY2hhcmFjdGVycyBsb25nLlxuICAgICAgICovXG4gICAgICBtZXRhZGF0YT86IHVua25vd24gfCBudWxsO1xuICAgIH1cblxuICAgIGV4cG9ydCBuYW1lc3BhY2UgTWVzc2FnZSB7XG4gICAgICBleHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIElEIG9mIHRoZSBmaWxlIHRvIGF0dGFjaCB0byB0aGUgbWVzc2FnZS5cbiAgICAgICAgICovXG4gICAgICAgIGZpbGVfaWQ/OiBzdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0b29scyB0byBhZGQgdGhpcyBmaWxlIHRvLlxuICAgICAgICAgKi9cbiAgICAgICAgdG9vbHM/OiBBcnJheTxBc3Npc3RhbnRzQVBJLkNvZGVJbnRlcnByZXRlclRvb2wgfCBBc3Npc3RhbnRzQVBJLkZpbGVTZWFyY2hUb29sPjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGFzc2lzdGFudCdzIHRvb2xzIGluIHRoaXNcbiAgICAgKiB0aHJlYWQuIFRoZSByZXNvdXJjZXMgYXJlIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHRvb2wuIEZvciBleGFtcGxlLCB0aGVcbiAgICAgKiBgY29kZV9pbnRlcnByZXRlcmAgdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgZmlsZSBJRHMsIHdoaWxlIHRoZSBgZmlsZV9zZWFyY2hgXG4gICAgICogdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgdmVjdG9yIHN0b3JlIElEcy5cbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIFRvb2xSZXNvdXJjZXMge1xuICAgICAgY29kZV9pbnRlcnByZXRlcj86IFRvb2xSZXNvdXJjZXMuQ29kZUludGVycHJldGVyO1xuXG4gICAgICBmaWxlX3NlYXJjaD86IFRvb2xSZXNvdXJjZXMuRmlsZVNlYXJjaDtcbiAgICB9XG5cbiAgICBleHBvcnQgbmFtZXNwYWNlIFRvb2xSZXNvdXJjZXMge1xuICAgICAgZXhwb3J0IGludGVyZmFjZSBDb2RlSW50ZXJwcmV0ZXIge1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBsaXN0IG9mIFtmaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzKSBJRHMgbWFkZVxuICAgICAgICAgKiBhdmFpbGFibGUgdG8gdGhlIGBjb2RlX2ludGVycHJldGVyYCB0b29sLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDIwIGZpbGVzXG4gICAgICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgdG9vbC5cbiAgICAgICAgICovXG4gICAgICAgIGZpbGVfaWRzPzogQXJyYXk8c3RyaW5nPjtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGludGVyZmFjZSBGaWxlU2VhcmNoIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZVxuICAgICAgICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgICAgICAgKiBhdHRhY2hlZCB0byB0aGlzIHRocmVhZC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAxIHZlY3RvciBzdG9yZSBhdHRhY2hlZCB0b1xuICAgICAgICAgKiB0aGUgdGhyZWFkLlxuICAgICAgICAgKi9cbiAgICAgICAgdmVjdG9yX3N0b3JlX2lkcz86IEFycmF5PHN0cmluZz47XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgaGVscGVyIHRvIGNyZWF0ZSBhXG4gICAgICAgICAqIFt2ZWN0b3Igc3RvcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdmVjdG9yLXN0b3Jlcy9vYmplY3QpXG4gICAgICAgICAqIHdpdGggZmlsZV9pZHMgYW5kIGF0dGFjaCBpdCB0byB0aGlzIHRocmVhZC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAxIHZlY3RvclxuICAgICAgICAgKiBzdG9yZSBhdHRhY2hlZCB0byB0aGUgdGhyZWFkLlxuICAgICAgICAgKi9cbiAgICAgICAgdmVjdG9yX3N0b3Jlcz86IEFycmF5PEZpbGVTZWFyY2guVmVjdG9yU3RvcmU+O1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgbmFtZXNwYWNlIEZpbGVTZWFyY2gge1xuICAgICAgICBleHBvcnQgaW50ZXJmYWNlIFZlY3RvclN0b3JlIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBBIGxpc3Qgb2YgW2ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIElEcyB0b1xuICAgICAgICAgICAqIGFkZCB0byB0aGUgdmVjdG9yIHN0b3JlLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDEwMDAwIGZpbGVzIGluIGEgdmVjdG9yXG4gICAgICAgICAgICogc3RvcmUuXG4gICAgICAgICAgICovXG4gICAgICAgICAgZmlsZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhIHZlY3RvciBzdG9yZS4gVGhpcyBjYW4gYmVcbiAgICAgICAgICAgKiB1c2VmdWwgZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmVjdG9yIHN0b3JlIGluIGEgc3RydWN0dXJlZFxuICAgICAgICAgICAqIGZvcm1hdC4gS2V5cyBjYW4gYmUgYSBtYXhpbXVtIG9mIDY0IGNoYXJhY3RlcnMgbG9uZyBhbmQgdmFsdWVzIGNhbiBiZSBhIG1heGl1bVxuICAgICAgICAgICAqIG9mIDUxMiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAgICAgICAgICovXG4gICAgICAgICAgbWV0YWRhdGE/OiB1bmtub3duO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIHJlc291cmNlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBhc3Npc3RhbnQncyB0b29scy4gVGhlIHJlc291cmNlcyBhcmVcbiAgICogc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgdG9vbC4gRm9yIGV4YW1wbGUsIHRoZSBgY29kZV9pbnRlcnByZXRlcmAgdG9vbCByZXF1aXJlc1xuICAgKiBhIGxpc3Qgb2YgZmlsZSBJRHMsIHdoaWxlIHRoZSBgZmlsZV9zZWFyY2hgIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZVxuICAgKiBJRHMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRvb2xSZXNvdXJjZXMge1xuICAgIGNvZGVfaW50ZXJwcmV0ZXI/OiBUb29sUmVzb3VyY2VzLkNvZGVJbnRlcnByZXRlcjtcblxuICAgIGZpbGVfc2VhcmNoPzogVG9vbFJlc291cmNlcy5GaWxlU2VhcmNoO1xuICB9XG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIENvZGVJbnRlcnByZXRlciB7XG4gICAgICAvKipcbiAgICAgICAqIEEgbGlzdCBvZiBbZmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgSURzIG1hZGVcbiAgICAgICAqIGF2YWlsYWJsZSB0byB0aGUgYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMjAgZmlsZXNcbiAgICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgdG9vbC5cbiAgICAgICAqL1xuICAgICAgZmlsZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuICAgIH1cblxuICAgIGV4cG9ydCBpbnRlcmZhY2UgRmlsZVNlYXJjaCB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBJRCBvZiB0aGVcbiAgICAgICAqIFt2ZWN0b3Igc3RvcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdmVjdG9yLXN0b3Jlcy9vYmplY3QpXG4gICAgICAgKiBhdHRhY2hlZCB0byB0aGlzIGFzc2lzdGFudC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAxIHZlY3RvciBzdG9yZSBhdHRhY2hlZCB0b1xuICAgICAgICogdGhlIGFzc2lzdGFudC5cbiAgICAgICAqL1xuICAgICAgdmVjdG9yX3N0b3JlX2lkcz86IEFycmF5PHN0cmluZz47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIGZvciBob3cgYSB0aHJlYWQgd2lsbCBiZSB0cnVuY2F0ZWQgcHJpb3IgdG8gdGhlIHJ1bi4gVXNlIHRoaXMgdG9cbiAgICogY29udHJvbCB0aGUgaW50aWFsIGNvbnRleHQgd2luZG93IG9mIHRoZSBydW4uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFRydW5jYXRpb25TdHJhdGVneSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRydW5jYXRpb24gc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgdGhyZWFkLiBUaGUgZGVmYXVsdCBpcyBgYXV0b2AuIElmIHNldCB0b1xuICAgICAqIGBsYXN0X21lc3NhZ2VzYCwgdGhlIHRocmVhZCB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgbiBtb3N0IHJlY2VudCBtZXNzYWdlcyBpblxuICAgICAqIHRoZSB0aHJlYWQuIFdoZW4gc2V0IHRvIGBhdXRvYCwgbWVzc2FnZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdGhyZWFkIHdpbGwgYmVcbiAgICAgKiBkcm9wcGVkIHRvIGZpdCB0aGUgY29udGV4dCBsZW5ndGggb2YgdGhlIG1vZGVsLCBgbWF4X3Byb21wdF90b2tlbnNgLlxuICAgICAqL1xuICAgIHR5cGU6ICdhdXRvJyB8ICdsYXN0X21lc3NhZ2VzJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgbW9zdCByZWNlbnQgbWVzc2FnZXMgZnJvbSB0aGUgdGhyZWFkIHdoZW4gY29uc3RydWN0aW5nIHRoZSBjb250ZXh0XG4gICAgICogZm9yIHRoZSBydW4uXG4gICAgICovXG4gICAgbGFzdF9tZXNzYWdlcz86IG51bWJlciB8IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHJlYWRDcmVhdGVBbmRSdW5TdHJlYW1QYXJhbXMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZVxuICAgKiBbYXNzaXN0YW50XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2Fzc2lzdGFudHMpIHRvIHVzZSB0b1xuICAgKiBleGVjdXRlIHRoaXMgcnVuLlxuICAgKi9cbiAgYXNzaXN0YW50X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHN5c3RlbSBtZXNzYWdlIG9mIHRoZSBhc3Npc3RhbnQuIFRoaXMgaXMgdXNlZnVsIGZvclxuICAgKiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9uIGEgcGVyLXJ1biBiYXNpcy5cbiAgICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb21wbGV0aW9uIHRva2VucyB0aGF0IG1heSBiZSB1c2VkIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGVcbiAgICogcnVuLiBUaGUgcnVuIHdpbGwgbWFrZSBhIGJlc3QgZWZmb3J0IHRvIHVzZSBvbmx5IHRoZSBudW1iZXIgb2YgY29tcGxldGlvbiB0b2tlbnNcbiAgICogc3BlY2lmaWVkLCBhY3Jvc3MgbXVsdGlwbGUgdHVybnMgb2YgdGhlIHJ1bi4gSWYgdGhlIHJ1biBleGNlZWRzIHRoZSBudW1iZXIgb2ZcbiAgICogY29tcGxldGlvbiB0b2tlbnMgc3BlY2lmaWVkLCB0aGUgcnVuIHdpbGwgZW5kIHdpdGggc3RhdHVzIGBpbmNvbXBsZXRlYC4gU2VlXG4gICAqIGBpbmNvbXBsZXRlX2RldGFpbHNgIGZvciBtb3JlIGluZm8uXG4gICAqL1xuICBtYXhfY29tcGxldGlvbl90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvbXB0IHRva2VucyB0aGF0IG1heSBiZSB1c2VkIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgcnVuLlxuICAgKiBUaGUgcnVuIHdpbGwgbWFrZSBhIGJlc3QgZWZmb3J0IHRvIHVzZSBvbmx5IHRoZSBudW1iZXIgb2YgcHJvbXB0IHRva2Vuc1xuICAgKiBzcGVjaWZpZWQsIGFjcm9zcyBtdWx0aXBsZSB0dXJucyBvZiB0aGUgcnVuLiBJZiB0aGUgcnVuIGV4Y2VlZHMgdGhlIG51bWJlciBvZlxuICAgKiBwcm9tcHQgdG9rZW5zIHNwZWNpZmllZCwgdGhlIHJ1biB3aWxsIGVuZCB3aXRoIHN0YXR1cyBgaW5jb21wbGV0ZWAuIFNlZVxuICAgKiBgaW5jb21wbGV0ZV9kZXRhaWxzYCBmb3IgbW9yZSBpbmZvLlxuICAgKi9cbiAgbWF4X3Byb21wdF90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LiBLZXlzXG4gICAqIGNhbiBiZSBhIG1heGltdW0gb2YgNjQgY2hhcmFjdGVycyBsb25nIGFuZCB2YWx1ZXMgY2FuIGJlIGEgbWF4aXVtIG9mIDUxMlxuICAgKiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICBtZXRhZGF0YT86IHVua25vd24gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFtNb2RlbF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9tb2RlbHMpIHRvXG4gICAqIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGlzIHJ1bi4gSWYgYSB2YWx1ZSBpcyBwcm92aWRlZCBoZXJlLCBpdCB3aWxsIG92ZXJyaWRlIHRoZVxuICAgKiBtb2RlbCBhc3NvY2lhdGVkIHdpdGggdGhlIGFzc2lzdGFudC4gSWYgbm90LCB0aGUgbW9kZWwgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAgKiBhc3Npc3RhbnQgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgbW9kZWw/OlxuICAgIHwgKHN0cmluZyAmIHt9KVxuICAgIHwgJ2dwdC00bydcbiAgICB8ICdncHQtNG8tMjAyNC0wNS0xMydcbiAgICB8ICdncHQtNC10dXJibydcbiAgICB8ICdncHQtNC10dXJiby0yMDI0LTA0LTA5J1xuICAgIHwgJ2dwdC00LTAxMjUtcHJldmlldydcbiAgICB8ICdncHQtNC10dXJiby1wcmV2aWV3J1xuICAgIHwgJ2dwdC00LTExMDYtcHJldmlldydcbiAgICB8ICdncHQtNC12aXNpb24tcHJldmlldydcbiAgICB8ICdncHQtNCdcbiAgICB8ICdncHQtNC0wMzE0J1xuICAgIHwgJ2dwdC00LTA2MTMnXG4gICAgfCAnZ3B0LTQtMzJrJ1xuICAgIHwgJ2dwdC00LTMyay0wMzE0J1xuICAgIHwgJ2dwdC00LTMyay0wNjEzJ1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8nXG4gICAgfCAnZ3B0LTMuNS10dXJiby0xNmsnXG4gICAgfCAnZ3B0LTMuNS10dXJiby0wNjEzJ1xuICAgIHwgJ2dwdC0zLjUtdHVyYm8tMTEwNidcbiAgICB8ICdncHQtMy41LXR1cmJvLTAxMjUnXG4gICAgfCAnZ3B0LTMuNS10dXJiby0xNmstMDYxMydcbiAgICB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZGVsIG11c3Qgb3V0cHV0LiBDb21wYXRpYmxlIHdpdGhcbiAgICogW0dQVC00b10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvbW9kZWxzL2dwdC00byksXG4gICAqIFtHUFQtNCBUdXJib10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvbW9kZWxzL2dwdC00LXR1cmJvLWFuZC1ncHQtNCksXG4gICAqIGFuZCBhbGwgR1BULTMuNSBUdXJibyBtb2RlbHMgc2luY2UgYGdwdC0zLjUtdHVyYm8tMTEwNmAuXG4gICAqXG4gICAqIFNldHRpbmcgdG8gYHsgXCJ0eXBlXCI6IFwianNvbl9vYmplY3RcIiB9YCBlbmFibGVzIEpTT04gbW9kZSwgd2hpY2ggZ3VhcmFudGVlcyB0aGVcbiAgICogbWVzc2FnZSB0aGUgbW9kZWwgZ2VuZXJhdGVzIGlzIHZhbGlkIEpTT04uXG4gICAqXG4gICAqICoqSW1wb3J0YW50OioqIHdoZW4gdXNpbmcgSlNPTiBtb2RlLCB5b3UgKiptdXN0KiogYWxzbyBpbnN0cnVjdCB0aGUgbW9kZWwgdG9cbiAgICogcHJvZHVjZSBKU09OIHlvdXJzZWxmIHZpYSBhIHN5c3RlbSBvciB1c2VyIG1lc3NhZ2UuIFdpdGhvdXQgdGhpcywgdGhlIG1vZGVsIG1heVxuICAgKiBnZW5lcmF0ZSBhbiB1bmVuZGluZyBzdHJlYW0gb2Ygd2hpdGVzcGFjZSB1bnRpbCB0aGUgZ2VuZXJhdGlvbiByZWFjaGVzIHRoZSB0b2tlblxuICAgKiBsaW1pdCwgcmVzdWx0aW5nIGluIGEgbG9uZy1ydW5uaW5nIGFuZCBzZWVtaW5nbHkgXCJzdHVja1wiIHJlcXVlc3QuIEFsc28gbm90ZSB0aGF0XG4gICAqIHRoZSBtZXNzYWdlIGNvbnRlbnQgbWF5IGJlIHBhcnRpYWxseSBjdXQgb2ZmIGlmIGBmaW5pc2hfcmVhc29uPVwibGVuZ3RoXCJgLCB3aGljaFxuICAgKiBpbmRpY2F0ZXMgdGhlIGdlbmVyYXRpb24gZXhjZWVkZWQgYG1heF90b2tlbnNgIG9yIHRoZSBjb252ZXJzYXRpb24gZXhjZWVkZWQgdGhlXG4gICAqIG1heCBjb250ZXh0IGxlbmd0aC5cbiAgICovXG4gIHJlc3BvbnNlX2Zvcm1hdD86IEFzc2lzdGFudFJlc3BvbnNlRm9ybWF0T3B0aW9uIHwgbnVsbDtcblxuICAvKipcbiAgICogV2hhdCBzYW1wbGluZyB0ZW1wZXJhdHVyZSB0byB1c2UsIGJldHdlZW4gMCBhbmQgMi4gSGlnaGVyIHZhbHVlcyBsaWtlIDAuOCB3aWxsXG4gICAqIG1ha2UgdGhlIG91dHB1dCBtb3JlIHJhbmRvbSwgd2hpbGUgbG93ZXIgdmFsdWVzIGxpa2UgMC4yIHdpbGwgbWFrZSBpdCBtb3JlXG4gICAqIGZvY3VzZWQgYW5kIGRldGVybWluaXN0aWMuXG4gICAqL1xuICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElmIG5vIHRocmVhZCBpcyBwcm92aWRlZCwgYW4gZW1wdHkgdGhyZWFkIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHRocmVhZD86IFRocmVhZENyZWF0ZUFuZFJ1blN0cmVhbVBhcmFtcy5UaHJlYWQ7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoaWNoIChpZiBhbnkpIHRvb2wgaXMgY2FsbGVkIGJ5IHRoZSBtb2RlbC4gYG5vbmVgIG1lYW5zIHRoZSBtb2RlbCB3aWxsXG4gICAqIG5vdCBjYWxsIGFueSB0b29scyBhbmQgaW5zdGVhZCBnZW5lcmF0ZXMgYSBtZXNzYWdlLiBgYXV0b2AgaXMgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICogYW5kIG1lYW5zIHRoZSBtb2RlbCBjYW4gcGljayBiZXR3ZWVuIGdlbmVyYXRpbmcgYSBtZXNzYWdlIG9yIGNhbGxpbmcgb25lIG9yIG1vcmVcbiAgICogdG9vbHMuIGByZXF1aXJlZGAgbWVhbnMgdGhlIG1vZGVsIG11c3QgY2FsbCBvbmUgb3IgbW9yZSB0b29scyBiZWZvcmUgcmVzcG9uZGluZ1xuICAgKiB0byB0aGUgdXNlci4gU3BlY2lmeWluZyBhIHBhcnRpY3VsYXIgdG9vbCBsaWtlIGB7XCJ0eXBlXCI6IFwiZmlsZV9zZWFyY2hcIn1gIG9yXG4gICAqIGB7XCJ0eXBlXCI6IFwiZnVuY3Rpb25cIiwgXCJmdW5jdGlvblwiOiB7XCJuYW1lXCI6IFwibXlfZnVuY3Rpb25cIn19YCBmb3JjZXMgdGhlIG1vZGVsIHRvXG4gICAqIGNhbGwgdGhhdCB0b29sLlxuICAgKi9cbiAgdG9vbF9jaG9pY2U/OiBBc3Npc3RhbnRUb29sQ2hvaWNlT3B0aW9uIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGFzc2lzdGFudCdzIHRvb2xzLiBUaGUgcmVzb3VyY2VzIGFyZVxuICAgKiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB0b29sLiBGb3IgZXhhbXBsZSwgdGhlIGBjb2RlX2ludGVycHJldGVyYCB0b29sIHJlcXVpcmVzXG4gICAqIGEgbGlzdCBvZiBmaWxlIElEcywgd2hpbGUgdGhlIGBmaWxlX3NlYXJjaGAgdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgdmVjdG9yIHN0b3JlXG4gICAqIElEcy5cbiAgICovXG4gIHRvb2xfcmVzb3VyY2VzPzogVGhyZWFkQ3JlYXRlQW5kUnVuU3RyZWFtUGFyYW1zLlRvb2xSZXNvdXJjZXMgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdG9vbHMgdGhlIGFzc2lzdGFudCBjYW4gdXNlIGZvciB0aGlzIHJ1bi4gVGhpcyBpcyB1c2VmdWwgZm9yXG4gICAqIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb24gYSBwZXItcnVuIGJhc2lzLlxuICAgKi9cbiAgdG9vbHM/OiBBcnJheTxcbiAgICBBc3Npc3RhbnRzQVBJLkNvZGVJbnRlcnByZXRlclRvb2wgfCBBc3Npc3RhbnRzQVBJLkZpbGVTZWFyY2hUb29sIHwgQXNzaXN0YW50c0FQSS5GdW5jdGlvblRvb2xcbiAgPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIGFsdGVybmF0aXZlIHRvIHNhbXBsaW5nIHdpdGggdGVtcGVyYXR1cmUsIGNhbGxlZCBudWNsZXVzIHNhbXBsaW5nLCB3aGVyZSB0aGVcbiAgICogbW9kZWwgY29uc2lkZXJzIHRoZSByZXN1bHRzIG9mIHRoZSB0b2tlbnMgd2l0aCB0b3BfcCBwcm9iYWJpbGl0eSBtYXNzLiBTbyAwLjFcbiAgICogbWVhbnMgb25seSB0aGUgdG9rZW5zIGNvbXByaXNpbmcgdGhlIHRvcCAxMCUgcHJvYmFiaWxpdHkgbWFzcyBhcmUgY29uc2lkZXJlZC5cbiAgICpcbiAgICogV2UgZ2VuZXJhbGx5IHJlY29tbWVuZCBhbHRlcmluZyB0aGlzIG9yIHRlbXBlcmF0dXJlIGJ1dCBub3QgYm90aC5cbiAgICovXG4gIHRvcF9wPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29udHJvbHMgZm9yIGhvdyBhIHRocmVhZCB3aWxsIGJlIHRydW5jYXRlZCBwcmlvciB0byB0aGUgcnVuLiBVc2UgdGhpcyB0b1xuICAgKiBjb250cm9sIHRoZSBpbnRpYWwgY29udGV4dCB3aW5kb3cgb2YgdGhlIHJ1bi5cbiAgICovXG4gIHRydW5jYXRpb25fc3RyYXRlZ3k/OiBUaHJlYWRDcmVhdGVBbmRSdW5TdHJlYW1QYXJhbXMuVHJ1bmNhdGlvblN0cmF0ZWd5IHwgbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUaHJlYWRDcmVhdGVBbmRSdW5TdHJlYW1QYXJhbXMge1xuICAvKipcbiAgICogSWYgbm8gdGhyZWFkIGlzIHByb3ZpZGVkLCBhbiBlbXB0eSB0aHJlYWQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUaHJlYWQge1xuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBbbWVzc2FnZXNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbWVzc2FnZXMpIHRvXG4gICAgICogc3RhcnQgdGhlIHRocmVhZCB3aXRoLlxuICAgICAqL1xuICAgIG1lc3NhZ2VzPzogQXJyYXk8VGhyZWFkLk1lc3NhZ2U+O1xuXG4gICAgLyoqXG4gICAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LiBLZXlzXG4gICAgICogY2FuIGJlIGEgbWF4aW11bSBvZiA2NCBjaGFyYWN0ZXJzIGxvbmcgYW5kIHZhbHVlcyBjYW4gYmUgYSBtYXhpdW0gb2YgNTEyXG4gICAgICogY2hhcmFjdGVycyBsb25nLlxuICAgICAqL1xuICAgIG1ldGFkYXRhPzogdW5rbm93biB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGFzc2lzdGFudCdzIHRvb2xzIGluIHRoaXNcbiAgICAgKiB0aHJlYWQuIFRoZSByZXNvdXJjZXMgYXJlIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHRvb2wuIEZvciBleGFtcGxlLCB0aGVcbiAgICAgKiBgY29kZV9pbnRlcnByZXRlcmAgdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgZmlsZSBJRHMsIHdoaWxlIHRoZSBgZmlsZV9zZWFyY2hgXG4gICAgICogdG9vbCByZXF1aXJlcyBhIGxpc3Qgb2YgdmVjdG9yIHN0b3JlIElEcy5cbiAgICAgKi9cbiAgICB0b29sX3Jlc291cmNlcz86IFRocmVhZC5Ub29sUmVzb3VyY2VzIHwgbnVsbDtcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgVGhyZWFkIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdGV4dCBjb250ZW50cyBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAqL1xuICAgICAgY29udGVudDogc3RyaW5nIHwgQXJyYXk8TWVzc2FnZXNBUEkuTWVzc2FnZUNvbnRlbnRQYXJ0UGFyYW0+O1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSByb2xlIG9mIHRoZSBlbnRpdHkgdGhhdCBpcyBjcmVhdGluZyB0aGUgbWVzc2FnZS4gQWxsb3dlZCB2YWx1ZXMgaW5jbHVkZTpcbiAgICAgICAqXG4gICAgICAgKiAtIGB1c2VyYDogSW5kaWNhdGVzIHRoZSBtZXNzYWdlIGlzIHNlbnQgYnkgYW4gYWN0dWFsIHVzZXIgYW5kIHNob3VsZCBiZSB1c2VkIGluXG4gICAgICAgKiAgIG1vc3QgY2FzZXMgdG8gcmVwcmVzZW50IHVzZXItZ2VuZXJhdGVkIG1lc3NhZ2VzLlxuICAgICAgICogLSBgYXNzaXN0YW50YDogSW5kaWNhdGVzIHRoZSBtZXNzYWdlIGlzIGdlbmVyYXRlZCBieSB0aGUgYXNzaXN0YW50LiBVc2UgdGhpc1xuICAgICAgICogICB2YWx1ZSB0byBpbnNlcnQgbWVzc2FnZXMgZnJvbSB0aGUgYXNzaXN0YW50IGludG8gdGhlIGNvbnZlcnNhdGlvbi5cbiAgICAgICAqL1xuICAgICAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCc7XG5cbiAgICAgIC8qKlxuICAgICAgICogQSBsaXN0IG9mIGZpbGVzIGF0dGFjaGVkIHRvIHRoZSBtZXNzYWdlLCBhbmQgdGhlIHRvb2xzIHRoZXkgc2hvdWxkIGJlIGFkZGVkIHRvLlxuICAgICAgICovXG4gICAgICBhdHRhY2htZW50cz86IEFycmF5PE1lc3NhZ2UuQXR0YWNobWVudD4gfCBudWxsO1xuXG4gICAgICAvKipcbiAgICAgICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICAgICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LiBLZXlzXG4gICAgICAgKiBjYW4gYmUgYSBtYXhpbXVtIG9mIDY0IGNoYXJhY3RlcnMgbG9uZyBhbmQgdmFsdWVzIGNhbiBiZSBhIG1heGl1bSBvZiA1MTJcbiAgICAgICAqIGNoYXJhY3RlcnMgbG9uZy5cbiAgICAgICAqL1xuICAgICAgbWV0YWRhdGE/OiB1bmtub3duIHwgbnVsbDtcbiAgICB9XG5cbiAgICBleHBvcnQgbmFtZXNwYWNlIE1lc3NhZ2Uge1xuICAgICAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBJRCBvZiB0aGUgZmlsZSB0byBhdHRhY2ggdG8gdGhlIG1lc3NhZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBmaWxlX2lkPzogc3RyaW5nO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdG9vbHMgdG8gYWRkIHRoaXMgZmlsZSB0by5cbiAgICAgICAgICovXG4gICAgICAgIHRvb2xzPzogQXJyYXk8QXNzaXN0YW50c0FQSS5Db2RlSW50ZXJwcmV0ZXJUb29sIHwgQXNzaXN0YW50c0FQSS5GaWxlU2VhcmNoVG9vbD47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBhc3Npc3RhbnQncyB0b29scyBpbiB0aGlzXG4gICAgICogdGhyZWFkLiBUaGUgcmVzb3VyY2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB0b29sLiBGb3IgZXhhbXBsZSwgdGhlXG4gICAgICogYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIGZpbGUgSURzLCB3aGlsZSB0aGUgYGZpbGVfc2VhcmNoYFxuICAgICAqIHRvb2wgcmVxdWlyZXMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZSBJRHMuXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICAgIGNvZGVfaW50ZXJwcmV0ZXI/OiBUb29sUmVzb3VyY2VzLkNvZGVJbnRlcnByZXRlcjtcblxuICAgICAgZmlsZV9zZWFyY2g/OiBUb29sUmVzb3VyY2VzLkZpbGVTZWFyY2g7XG4gICAgfVxuXG4gICAgZXhwb3J0IG5hbWVzcGFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgQ29kZUludGVycHJldGVyIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbGlzdCBvZiBbZmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgSURzIG1hZGVcbiAgICAgICAgICogYXZhaWxhYmxlIHRvIHRoZSBgY29kZV9pbnRlcnByZXRlcmAgdG9vbC4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAyMCBmaWxlc1xuICAgICAgICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHRvb2wuXG4gICAgICAgICAqL1xuICAgICAgICBmaWxlX2lkcz86IEFycmF5PHN0cmluZz47XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgRmlsZVNlYXJjaCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGVcbiAgICAgICAgICogW3ZlY3RvciBzdG9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS92ZWN0b3Itc3RvcmVzL29iamVjdClcbiAgICAgICAgICogYXR0YWNoZWQgdG8gdGhpcyB0aHJlYWQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMSB2ZWN0b3Igc3RvcmUgYXR0YWNoZWQgdG9cbiAgICAgICAgICogdGhlIHRocmVhZC5cbiAgICAgICAgICovXG4gICAgICAgIHZlY3Rvcl9zdG9yZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGhlbHBlciB0byBjcmVhdGUgYVxuICAgICAgICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgICAgICAgKiB3aXRoIGZpbGVfaWRzIGFuZCBhdHRhY2ggaXQgdG8gdGhpcyB0aHJlYWQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMSB2ZWN0b3JcbiAgICAgICAgICogc3RvcmUgYXR0YWNoZWQgdG8gdGhlIHRocmVhZC5cbiAgICAgICAgICovXG4gICAgICAgIHZlY3Rvcl9zdG9yZXM/OiBBcnJheTxGaWxlU2VhcmNoLlZlY3RvclN0b3JlPjtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IG5hbWVzcGFjZSBGaWxlU2VhcmNoIHtcbiAgICAgICAgZXhwb3J0IGludGVyZmFjZSBWZWN0b3JTdG9yZSB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQSBsaXN0IG9mIFtmaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzKSBJRHMgdG9cbiAgICAgICAgICAgKiBhZGQgdG8gdGhlIHZlY3RvciBzdG9yZS4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAxMDAwMCBmaWxlcyBpbiBhIHZlY3RvclxuICAgICAgICAgICAqIHN0b3JlLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGZpbGVfaWRzPzogQXJyYXk8c3RyaW5nPjtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYSB2ZWN0b3Igc3RvcmUuIFRoaXMgY2FuIGJlXG4gICAgICAgICAgICogdXNlZnVsIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZlY3RvciBzdG9yZSBpbiBhIHN0cnVjdHVyZWRcbiAgICAgICAgICAgKiBmb3JtYXQuIEtleXMgY2FuIGJlIGEgbWF4aW11bSBvZiA2NCBjaGFyYWN0ZXJzIGxvbmcgYW5kIHZhbHVlcyBjYW4gYmUgYSBtYXhpdW1cbiAgICAgICAgICAgKiBvZiA1MTIgY2hhcmFjdGVycyBsb25nLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIG1ldGFkYXRhPzogdW5rbm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXNzaXN0YW50J3MgdG9vbHMuIFRoZSByZXNvdXJjZXMgYXJlXG4gICAqIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHRvb2wuIEZvciBleGFtcGxlLCB0aGUgYGNvZGVfaW50ZXJwcmV0ZXJgIHRvb2wgcmVxdWlyZXNcbiAgICogYSBsaXN0IG9mIGZpbGUgSURzLCB3aGlsZSB0aGUgYGZpbGVfc2VhcmNoYCB0b29sIHJlcXVpcmVzIGEgbGlzdCBvZiB2ZWN0b3Igc3RvcmVcbiAgICogSURzLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUb29sUmVzb3VyY2VzIHtcbiAgICBjb2RlX2ludGVycHJldGVyPzogVG9vbFJlc291cmNlcy5Db2RlSW50ZXJwcmV0ZXI7XG5cbiAgICBmaWxlX3NlYXJjaD86IFRvb2xSZXNvdXJjZXMuRmlsZVNlYXJjaDtcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgVG9vbFJlc291cmNlcyB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBDb2RlSW50ZXJwcmV0ZXIge1xuICAgICAgLyoqXG4gICAgICAgKiBBIGxpc3Qgb2YgW2ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIElEcyBtYWRlXG4gICAgICAgKiBhdmFpbGFibGUgdG8gdGhlIGBjb2RlX2ludGVycHJldGVyYCB0b29sLiBUaGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDIwIGZpbGVzXG4gICAgICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHRvb2wuXG4gICAgICAgKi9cbiAgICAgIGZpbGVfaWRzPzogQXJyYXk8c3RyaW5nPjtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIEZpbGVTZWFyY2gge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgSUQgb2YgdGhlXG4gICAgICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgICAgICogYXR0YWNoZWQgdG8gdGhpcyBhc3Npc3RhbnQuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMSB2ZWN0b3Igc3RvcmUgYXR0YWNoZWQgdG9cbiAgICAgICAqIHRoZSBhc3Npc3RhbnQuXG4gICAgICAgKi9cbiAgICAgIHZlY3Rvcl9zdG9yZV9pZHM/OiBBcnJheTxzdHJpbmc+O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9scyBmb3IgaG93IGEgdGhyZWFkIHdpbGwgYmUgdHJ1bmNhdGVkIHByaW9yIHRvIHRoZSBydW4uIFVzZSB0aGlzIHRvXG4gICAqIGNvbnRyb2wgdGhlIGludGlhbCBjb250ZXh0IHdpbmRvdyBvZiB0aGUgcnVuLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBUcnVuY2F0aW9uU3RyYXRlZ3kge1xuICAgIC8qKlxuICAgICAqIFRoZSB0cnVuY2F0aW9uIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHRocmVhZC4gVGhlIGRlZmF1bHQgaXMgYGF1dG9gLiBJZiBzZXQgdG9cbiAgICAgKiBgbGFzdF9tZXNzYWdlc2AsIHRoZSB0aHJlYWQgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIG4gbW9zdCByZWNlbnQgbWVzc2FnZXMgaW5cbiAgICAgKiB0aGUgdGhyZWFkLiBXaGVuIHNldCB0byBgYXV0b2AsIG1lc3NhZ2VzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRocmVhZCB3aWxsIGJlXG4gICAgICogZHJvcHBlZCB0byBmaXQgdGhlIGNvbnRleHQgbGVuZ3RoIG9mIHRoZSBtb2RlbCwgYG1heF9wcm9tcHRfdG9rZW5zYC5cbiAgICAgKi9cbiAgICB0eXBlOiAnYXV0bycgfCAnbGFzdF9tZXNzYWdlcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIG1vc3QgcmVjZW50IG1lc3NhZ2VzIGZyb20gdGhlIHRocmVhZCB3aGVuIGNvbnN0cnVjdGluZyB0aGUgY29udGV4dFxuICAgICAqIGZvciB0aGUgcnVuLlxuICAgICAqL1xuICAgIGxhc3RfbWVzc2FnZXM/OiBudW1iZXIgfCBudWxsO1xuICB9XG59XG5cblRocmVhZHMuUnVucyA9IFJ1bnM7XG5UaHJlYWRzLlJ1bnNQYWdlID0gUnVuc1BhZ2U7XG5UaHJlYWRzLk1lc3NhZ2VzID0gTWVzc2FnZXM7XG5UaHJlYWRzLk1lc3NhZ2VzUGFnZSA9IE1lc3NhZ2VzUGFnZTtcblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIFRocmVhZHMge1xuICBleHBvcnQge1xuICAgIHR5cGUgQXNzaXN0YW50UmVzcG9uc2VGb3JtYXRPcHRpb24gYXMgQXNzaXN0YW50UmVzcG9uc2VGb3JtYXRPcHRpb24sXG4gICAgdHlwZSBBc3Npc3RhbnRUb29sQ2hvaWNlIGFzIEFzc2lzdGFudFRvb2xDaG9pY2UsXG4gICAgdHlwZSBBc3Npc3RhbnRUb29sQ2hvaWNlRnVuY3Rpb24gYXMgQXNzaXN0YW50VG9vbENob2ljZUZ1bmN0aW9uLFxuICAgIHR5cGUgQXNzaXN0YW50VG9vbENob2ljZU9wdGlvbiBhcyBBc3Npc3RhbnRUb29sQ2hvaWNlT3B0aW9uLFxuICAgIHR5cGUgVGhyZWFkIGFzIFRocmVhZCxcbiAgICB0eXBlIFRocmVhZERlbGV0ZWQgYXMgVGhyZWFkRGVsZXRlZCxcbiAgICB0eXBlIFRocmVhZENyZWF0ZVBhcmFtcyBhcyBUaHJlYWRDcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBUaHJlYWRVcGRhdGVQYXJhbXMgYXMgVGhyZWFkVXBkYXRlUGFyYW1zLFxuICAgIHR5cGUgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zIGFzIFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtcyxcbiAgICB0eXBlIFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtc05vblN0cmVhbWluZyBhcyBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNOb25TdHJlYW1pbmcsXG4gICAgdHlwZSBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNTdHJlYW1pbmcgYXMgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zU3RyZWFtaW5nLFxuICAgIHR5cGUgVGhyZWFkQ3JlYXRlQW5kUnVuUG9sbFBhcmFtcyxcbiAgICB0eXBlIFRocmVhZENyZWF0ZUFuZFJ1blN0cmVhbVBhcmFtcyxcbiAgfTtcblxuICBleHBvcnQge1xuICAgIFJ1bnMgYXMgUnVucyxcbiAgICB0eXBlIFJlcXVpcmVkQWN0aW9uRnVuY3Rpb25Ub29sQ2FsbCBhcyBSZXF1aXJlZEFjdGlvbkZ1bmN0aW9uVG9vbENhbGwsXG4gICAgdHlwZSBSdW4gYXMgUnVuLFxuICAgIHR5cGUgUnVuU3RhdHVzIGFzIFJ1blN0YXR1cyxcbiAgICBSdW5zUGFnZSBhcyBSdW5zUGFnZSxcbiAgICB0eXBlIFJ1bkNyZWF0ZVBhcmFtcyBhcyBSdW5DcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBSdW5DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcgYXMgUnVuQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICAgIHR5cGUgUnVuQ3JlYXRlUGFyYW1zU3RyZWFtaW5nIGFzIFJ1bkNyZWF0ZVBhcmFtc1N0cmVhbWluZyxcbiAgICB0eXBlIFJ1blVwZGF0ZVBhcmFtcyBhcyBSdW5VcGRhdGVQYXJhbXMsXG4gICAgdHlwZSBSdW5MaXN0UGFyYW1zIGFzIFJ1bkxpc3RQYXJhbXMsXG4gICAgdHlwZSBSdW5DcmVhdGVBbmRQb2xsUGFyYW1zLFxuICAgIHR5cGUgUnVuQ3JlYXRlQW5kU3RyZWFtUGFyYW1zLFxuICAgIHR5cGUgUnVuU3RyZWFtUGFyYW1zLFxuICAgIHR5cGUgUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXMgYXMgUnVuU3VibWl0VG9vbE91dHB1dHNQYXJhbXMsXG4gICAgdHlwZSBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc05vblN0cmVhbWluZyBhcyBSdW5TdWJtaXRUb29sT3V0cHV0c1BhcmFtc05vblN0cmVhbWluZyxcbiAgICB0eXBlIFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zU3RyZWFtaW5nIGFzIFJ1blN1Ym1pdFRvb2xPdXRwdXRzUGFyYW1zU3RyZWFtaW5nLFxuICAgIHR5cGUgUnVuU3VibWl0VG9vbE91dHB1dHNBbmRQb2xsUGFyYW1zLFxuICAgIHR5cGUgUnVuU3VibWl0VG9vbE91dHB1dHNTdHJlYW1QYXJhbXMsXG4gIH07XG5cbiAgZXhwb3J0IHtcbiAgICBNZXNzYWdlcyBhcyBNZXNzYWdlcyxcbiAgICB0eXBlIEFubm90YXRpb24gYXMgQW5ub3RhdGlvbixcbiAgICB0eXBlIEFubm90YXRpb25EZWx0YSBhcyBBbm5vdGF0aW9uRGVsdGEsXG4gICAgdHlwZSBGaWxlQ2l0YXRpb25Bbm5vdGF0aW9uIGFzIEZpbGVDaXRhdGlvbkFubm90YXRpb24sXG4gICAgdHlwZSBGaWxlQ2l0YXRpb25EZWx0YUFubm90YXRpb24gYXMgRmlsZUNpdGF0aW9uRGVsdGFBbm5vdGF0aW9uLFxuICAgIHR5cGUgRmlsZVBhdGhBbm5vdGF0aW9uIGFzIEZpbGVQYXRoQW5ub3RhdGlvbixcbiAgICB0eXBlIEZpbGVQYXRoRGVsdGFBbm5vdGF0aW9uIGFzIEZpbGVQYXRoRGVsdGFBbm5vdGF0aW9uLFxuICAgIHR5cGUgSW1hZ2VGaWxlIGFzIEltYWdlRmlsZSxcbiAgICB0eXBlIEltYWdlRmlsZUNvbnRlbnRCbG9jayBhcyBJbWFnZUZpbGVDb250ZW50QmxvY2ssXG4gICAgdHlwZSBJbWFnZUZpbGVEZWx0YSBhcyBJbWFnZUZpbGVEZWx0YSxcbiAgICB0eXBlIEltYWdlRmlsZURlbHRhQmxvY2sgYXMgSW1hZ2VGaWxlRGVsdGFCbG9jayxcbiAgICB0eXBlIEltYWdlVVJMIGFzIEltYWdlVVJMLFxuICAgIHR5cGUgSW1hZ2VVUkxDb250ZW50QmxvY2sgYXMgSW1hZ2VVUkxDb250ZW50QmxvY2ssXG4gICAgdHlwZSBJbWFnZVVSTERlbHRhIGFzIEltYWdlVVJMRGVsdGEsXG4gICAgdHlwZSBJbWFnZVVSTERlbHRhQmxvY2sgYXMgSW1hZ2VVUkxEZWx0YUJsb2NrLFxuICAgIHR5cGUgTWVzc2FnZXNBUElNZXNzYWdlIGFzIE1lc3NhZ2UsXG4gICAgdHlwZSBNZXNzYWdlQ29udGVudCBhcyBNZXNzYWdlQ29udGVudCxcbiAgICB0eXBlIE1lc3NhZ2VDb250ZW50RGVsdGEgYXMgTWVzc2FnZUNvbnRlbnREZWx0YSxcbiAgICB0eXBlIE1lc3NhZ2VDb250ZW50UGFydFBhcmFtIGFzIE1lc3NhZ2VDb250ZW50UGFydFBhcmFtLFxuICAgIHR5cGUgTWVzc2FnZURlbGV0ZWQgYXMgTWVzc2FnZURlbGV0ZWQsXG4gICAgdHlwZSBNZXNzYWdlRGVsdGEgYXMgTWVzc2FnZURlbHRhLFxuICAgIHR5cGUgTWVzc2FnZURlbHRhRXZlbnQgYXMgTWVzc2FnZURlbHRhRXZlbnQsXG4gICAgdHlwZSBSZWZ1c2FsQ29udGVudEJsb2NrIGFzIFJlZnVzYWxDb250ZW50QmxvY2ssXG4gICAgdHlwZSBSZWZ1c2FsRGVsdGFCbG9jayBhcyBSZWZ1c2FsRGVsdGFCbG9jayxcbiAgICB0eXBlIFRleHQgYXMgVGV4dCxcbiAgICB0eXBlIFRleHRDb250ZW50QmxvY2sgYXMgVGV4dENvbnRlbnRCbG9jayxcbiAgICB0eXBlIFRleHRDb250ZW50QmxvY2tQYXJhbSBhcyBUZXh0Q29udGVudEJsb2NrUGFyYW0sXG4gICAgdHlwZSBUZXh0RGVsdGEgYXMgVGV4dERlbHRhLFxuICAgIHR5cGUgVGV4dERlbHRhQmxvY2sgYXMgVGV4dERlbHRhQmxvY2ssXG4gICAgTWVzc2FnZXNQYWdlIGFzIE1lc3NhZ2VzUGFnZSxcbiAgICB0eXBlIE1lc3NhZ2VDcmVhdGVQYXJhbXMgYXMgTWVzc2FnZUNyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIE1lc3NhZ2VVcGRhdGVQYXJhbXMgYXMgTWVzc2FnZVVwZGF0ZVBhcmFtcyxcbiAgICB0eXBlIE1lc3NhZ2VMaXN0UGFyYW1zIGFzIE1lc3NhZ2VMaXN0UGFyYW1zLFxuICB9O1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2UnO1xuaW1wb3J0ICogYXMgQXNzaXN0YW50c0FQSSBmcm9tICcuL2Fzc2lzdGFudHMnO1xuaW1wb3J0ICogYXMgQ2hhdEFQSSBmcm9tICcuL2NoYXQvY2hhdCc7XG5pbXBvcnQge1xuICBBc3Npc3RhbnQsXG4gIEFzc2lzdGFudENyZWF0ZVBhcmFtcyxcbiAgQXNzaXN0YW50RGVsZXRlZCxcbiAgQXNzaXN0YW50TGlzdFBhcmFtcyxcbiAgQXNzaXN0YW50U3RyZWFtRXZlbnQsXG4gIEFzc2lzdGFudFRvb2wsXG4gIEFzc2lzdGFudFVwZGF0ZVBhcmFtcyxcbiAgQXNzaXN0YW50cyxcbiAgQXNzaXN0YW50c1BhZ2UsXG4gIENvZGVJbnRlcnByZXRlclRvb2wsXG4gIEZpbGVTZWFyY2hUb29sLFxuICBGdW5jdGlvblRvb2wsXG4gIE1lc3NhZ2VTdHJlYW1FdmVudCxcbiAgUnVuU3RlcFN0cmVhbUV2ZW50LFxuICBSdW5TdHJlYW1FdmVudCxcbiAgVGhyZWFkU3RyZWFtRXZlbnQsXG59IGZyb20gJy4vYXNzaXN0YW50cyc7XG5pbXBvcnQgKiBhcyBSZWFsdGltZUFQSSBmcm9tICcuL3JlYWx0aW1lL3JlYWx0aW1lJztcbmltcG9ydCB7IFJlYWx0aW1lIH0gZnJvbSAnLi9yZWFsdGltZS9yZWFsdGltZSc7XG5pbXBvcnQgKiBhcyBUaHJlYWRzQVBJIGZyb20gJy4vdGhyZWFkcy90aHJlYWRzJztcbmltcG9ydCB7XG4gIEFzc2lzdGFudFJlc3BvbnNlRm9ybWF0T3B0aW9uLFxuICBBc3Npc3RhbnRUb29sQ2hvaWNlLFxuICBBc3Npc3RhbnRUb29sQ2hvaWNlRnVuY3Rpb24sXG4gIEFzc2lzdGFudFRvb2xDaG9pY2VPcHRpb24sXG4gIFRocmVhZCxcbiAgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zLFxuICBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNOb25TdHJlYW1pbmcsXG4gIFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtc1N0cmVhbWluZyxcbiAgVGhyZWFkQ3JlYXRlQW5kUnVuUG9sbFBhcmFtcyxcbiAgVGhyZWFkQ3JlYXRlQW5kUnVuU3RyZWFtUGFyYW1zLFxuICBUaHJlYWRDcmVhdGVQYXJhbXMsXG4gIFRocmVhZERlbGV0ZWQsXG4gIFRocmVhZFVwZGF0ZVBhcmFtcyxcbiAgVGhyZWFkcyxcbn0gZnJvbSAnLi90aHJlYWRzL3RocmVhZHMnO1xuaW1wb3J0IHsgQ2hhdCB9IGZyb20gJy4vY2hhdC9jaGF0JztcblxuZXhwb3J0IGNsYXNzIEJldGEgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIHJlYWx0aW1lOiBSZWFsdGltZUFQSS5SZWFsdGltZSA9IG5ldyBSZWFsdGltZUFQSS5SZWFsdGltZSh0aGlzLl9jbGllbnQpO1xuICBjaGF0OiBDaGF0QVBJLkNoYXQgPSBuZXcgQ2hhdEFQSS5DaGF0KHRoaXMuX2NsaWVudCk7XG4gIGFzc2lzdGFudHM6IEFzc2lzdGFudHNBUEkuQXNzaXN0YW50cyA9IG5ldyBBc3Npc3RhbnRzQVBJLkFzc2lzdGFudHModGhpcy5fY2xpZW50KTtcbiAgdGhyZWFkczogVGhyZWFkc0FQSS5UaHJlYWRzID0gbmV3IFRocmVhZHNBUEkuVGhyZWFkcyh0aGlzLl9jbGllbnQpO1xufVxuXG5CZXRhLlJlYWx0aW1lID0gUmVhbHRpbWU7XG5CZXRhLkFzc2lzdGFudHMgPSBBc3Npc3RhbnRzO1xuQmV0YS5Bc3Npc3RhbnRzUGFnZSA9IEFzc2lzdGFudHNQYWdlO1xuQmV0YS5UaHJlYWRzID0gVGhyZWFkcztcblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIEJldGEge1xuICBleHBvcnQgeyBSZWFsdGltZSBhcyBSZWFsdGltZSB9O1xuXG4gIGV4cG9ydCB7IENoYXQgfTtcblxuICBleHBvcnQge1xuICAgIEFzc2lzdGFudHMgYXMgQXNzaXN0YW50cyxcbiAgICB0eXBlIEFzc2lzdGFudCBhcyBBc3Npc3RhbnQsXG4gICAgdHlwZSBBc3Npc3RhbnREZWxldGVkIGFzIEFzc2lzdGFudERlbGV0ZWQsXG4gICAgdHlwZSBBc3Npc3RhbnRTdHJlYW1FdmVudCBhcyBBc3Npc3RhbnRTdHJlYW1FdmVudCxcbiAgICB0eXBlIEFzc2lzdGFudFRvb2wgYXMgQXNzaXN0YW50VG9vbCxcbiAgICB0eXBlIENvZGVJbnRlcnByZXRlclRvb2wgYXMgQ29kZUludGVycHJldGVyVG9vbCxcbiAgICB0eXBlIEZpbGVTZWFyY2hUb29sIGFzIEZpbGVTZWFyY2hUb29sLFxuICAgIHR5cGUgRnVuY3Rpb25Ub29sIGFzIEZ1bmN0aW9uVG9vbCxcbiAgICB0eXBlIE1lc3NhZ2VTdHJlYW1FdmVudCBhcyBNZXNzYWdlU3RyZWFtRXZlbnQsXG4gICAgdHlwZSBSdW5TdGVwU3RyZWFtRXZlbnQgYXMgUnVuU3RlcFN0cmVhbUV2ZW50LFxuICAgIHR5cGUgUnVuU3RyZWFtRXZlbnQgYXMgUnVuU3RyZWFtRXZlbnQsXG4gICAgdHlwZSBUaHJlYWRTdHJlYW1FdmVudCBhcyBUaHJlYWRTdHJlYW1FdmVudCxcbiAgICBBc3Npc3RhbnRzUGFnZSBhcyBBc3Npc3RhbnRzUGFnZSxcbiAgICB0eXBlIEFzc2lzdGFudENyZWF0ZVBhcmFtcyBhcyBBc3Npc3RhbnRDcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBBc3Npc3RhbnRVcGRhdGVQYXJhbXMgYXMgQXNzaXN0YW50VXBkYXRlUGFyYW1zLFxuICAgIHR5cGUgQXNzaXN0YW50TGlzdFBhcmFtcyBhcyBBc3Npc3RhbnRMaXN0UGFyYW1zLFxuICB9O1xuXG4gIGV4cG9ydCB7XG4gICAgVGhyZWFkcyBhcyBUaHJlYWRzLFxuICAgIHR5cGUgQXNzaXN0YW50UmVzcG9uc2VGb3JtYXRPcHRpb24gYXMgQXNzaXN0YW50UmVzcG9uc2VGb3JtYXRPcHRpb24sXG4gICAgdHlwZSBBc3Npc3RhbnRUb29sQ2hvaWNlIGFzIEFzc2lzdGFudFRvb2xDaG9pY2UsXG4gICAgdHlwZSBBc3Npc3RhbnRUb29sQ2hvaWNlRnVuY3Rpb24gYXMgQXNzaXN0YW50VG9vbENob2ljZUZ1bmN0aW9uLFxuICAgIHR5cGUgQXNzaXN0YW50VG9vbENob2ljZU9wdGlvbiBhcyBBc3Npc3RhbnRUb29sQ2hvaWNlT3B0aW9uLFxuICAgIHR5cGUgVGhyZWFkIGFzIFRocmVhZCxcbiAgICB0eXBlIFRocmVhZERlbGV0ZWQgYXMgVGhyZWFkRGVsZXRlZCxcbiAgICB0eXBlIFRocmVhZENyZWF0ZVBhcmFtcyBhcyBUaHJlYWRDcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBUaHJlYWRVcGRhdGVQYXJhbXMgYXMgVGhyZWFkVXBkYXRlUGFyYW1zLFxuICAgIHR5cGUgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zIGFzIFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtcyxcbiAgICB0eXBlIFRocmVhZENyZWF0ZUFuZFJ1blBhcmFtc05vblN0cmVhbWluZyBhcyBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNOb25TdHJlYW1pbmcsXG4gICAgdHlwZSBUaHJlYWRDcmVhdGVBbmRSdW5QYXJhbXNTdHJlYW1pbmcgYXMgVGhyZWFkQ3JlYXRlQW5kUnVuUGFyYW1zU3RyZWFtaW5nLFxuICAgIHR5cGUgVGhyZWFkQ3JlYXRlQW5kUnVuUG9sbFBhcmFtcyxcbiAgICB0eXBlIFRocmVhZENyZWF0ZUFuZFJ1blN0cmVhbVBhcmFtcyxcbiAgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uL3Jlc291cmNlJztcbmltcG9ydCB7IEFQSVByb21pc2UgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBDb21wbGV0aW9uc0FQSSBmcm9tICcuL2NvbXBsZXRpb25zJztcbmltcG9ydCAqIGFzIENvbXBsZXRpb25zQ29tcGxldGlvbnNBUEkgZnJvbSAnLi9jaGF0L2NvbXBsZXRpb25zL2NvbXBsZXRpb25zJztcbmltcG9ydCB7IFN0cmVhbSB9IGZyb20gJy4uL3N0cmVhbWluZyc7XG5cbmV4cG9ydCBjbGFzcyBDb21wbGV0aW9ucyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb21wbGV0aW9uIGZvciB0aGUgcHJvdmlkZWQgcHJvbXB0IGFuZCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgY3JlYXRlKGJvZHk6IENvbXBsZXRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQVBJUHJvbWlzZTxDb21wbGV0aW9uPjtcbiAgY3JlYXRlKFxuICAgIGJvZHk6IENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IEFQSVByb21pc2U8U3RyZWFtPENvbXBsZXRpb24+PjtcbiAgY3JlYXRlKFxuICAgIGJvZHk6IENvbXBsZXRpb25DcmVhdGVQYXJhbXNCYXNlLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBBUElQcm9taXNlPFN0cmVhbTxDb21wbGV0aW9uPiB8IENvbXBsZXRpb24+O1xuICBjcmVhdGUoXG4gICAgYm9keTogQ29tcGxldGlvbkNyZWF0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQVBJUHJvbWlzZTxDb21wbGV0aW9uPiB8IEFQSVByb21pc2U8U3RyZWFtPENvbXBsZXRpb24+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvY29tcGxldGlvbnMnLCB7IGJvZHksIC4uLm9wdGlvbnMsIHN0cmVhbTogYm9keS5zdHJlYW0gPz8gZmFsc2UgfSkgYXNcbiAgICAgIHwgQVBJUHJvbWlzZTxDb21wbGV0aW9uPlxuICAgICAgfCBBUElQcm9taXNlPFN0cmVhbTxDb21wbGV0aW9uPj47XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29tcGxldGlvbiByZXNwb25zZSBmcm9tIHRoZSBBUEkuIE5vdGU6IGJvdGggdGhlIHN0cmVhbWVkIGFuZFxuICogbm9uLXN0cmVhbWVkIHJlc3BvbnNlIG9iamVjdHMgc2hhcmUgdGhlIHNhbWUgc2hhcGUgKHVubGlrZSB0aGUgY2hhdCBlbmRwb2ludCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxldGlvbiB7XG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29tcGxldGlvbi5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGNvbXBsZXRpb24gY2hvaWNlcyB0aGUgbW9kZWwgZ2VuZXJhdGVkIGZvciB0aGUgaW5wdXQgcHJvbXB0LlxuICAgKi9cbiAgY2hvaWNlczogQXJyYXk8Q29tcGxldGlvbkNob2ljZT47XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgb2Ygd2hlbiB0aGUgY29tcGxldGlvbiB3YXMgY3JlYXRlZC5cbiAgICovXG4gIGNyZWF0ZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1vZGVsIHVzZWQgZm9yIGNvbXBsZXRpb24uXG4gICAqL1xuICBtb2RlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHR5cGUsIHdoaWNoIGlzIGFsd2F5cyBcInRleHRfY29tcGxldGlvblwiXG4gICAqL1xuICBvYmplY3Q6ICd0ZXh0X2NvbXBsZXRpb24nO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZpbmdlcnByaW50IHJlcHJlc2VudHMgdGhlIGJhY2tlbmQgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBtb2RlbCBydW5zIHdpdGguXG4gICAqXG4gICAqIENhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGBzZWVkYCByZXF1ZXN0IHBhcmFtZXRlciB0byB1bmRlcnN0YW5kIHdoZW5cbiAgICogYmFja2VuZCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRoYXQgbWlnaHQgaW1wYWN0IGRldGVybWluaXNtLlxuICAgKi9cbiAgc3lzdGVtX2ZpbmdlcnByaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2FnZSBzdGF0aXN0aWNzIGZvciB0aGUgY29tcGxldGlvbiByZXF1ZXN0LlxuICAgKi9cbiAgdXNhZ2U/OiBDb21wbGV0aW9uVXNhZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxldGlvbkNob2ljZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVhc29uIHRoZSBtb2RlbCBzdG9wcGVkIGdlbmVyYXRpbmcgdG9rZW5zLiBUaGlzIHdpbGwgYmUgYHN0b3BgIGlmIHRoZSBtb2RlbFxuICAgKiBoaXQgYSBuYXR1cmFsIHN0b3AgcG9pbnQgb3IgYSBwcm92aWRlZCBzdG9wIHNlcXVlbmNlLCBgbGVuZ3RoYCBpZiB0aGUgbWF4aW11bVxuICAgKiBudW1iZXIgb2YgdG9rZW5zIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdCB3YXMgcmVhY2hlZCwgb3IgYGNvbnRlbnRfZmlsdGVyYCBpZlxuICAgKiBjb250ZW50IHdhcyBvbWl0dGVkIGR1ZSB0byBhIGZsYWcgZnJvbSBvdXIgY29udGVudCBmaWx0ZXJzLlxuICAgKi9cbiAgZmluaXNoX3JlYXNvbjogJ3N0b3AnIHwgJ2xlbmd0aCcgfCAnY29udGVudF9maWx0ZXInO1xuXG4gIGluZGV4OiBudW1iZXI7XG5cbiAgbG9ncHJvYnM6IENvbXBsZXRpb25DaG9pY2UuTG9ncHJvYnMgfCBudWxsO1xuXG4gIHRleHQ6IHN0cmluZztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb21wbGV0aW9uQ2hvaWNlIHtcbiAgZXhwb3J0IGludGVyZmFjZSBMb2dwcm9icyB7XG4gICAgdGV4dF9vZmZzZXQ/OiBBcnJheTxudW1iZXI+O1xuXG4gICAgdG9rZW5fbG9ncHJvYnM/OiBBcnJheTxudW1iZXI+O1xuXG4gICAgdG9rZW5zPzogQXJyYXk8c3RyaW5nPjtcblxuICAgIHRvcF9sb2dwcm9icz86IEFycmF5PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+O1xuICB9XG59XG5cbi8qKlxuICogVXNhZ2Ugc3RhdGlzdGljcyBmb3IgdGhlIGNvbXBsZXRpb24gcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0aW9uVXNhZ2Uge1xuICAvKipcbiAgICogTnVtYmVyIG9mIHRva2VucyBpbiB0aGUgZ2VuZXJhdGVkIGNvbXBsZXRpb24uXG4gICAqL1xuICBjb21wbGV0aW9uX3Rva2VuczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgdG9rZW5zIGluIHRoZSBwcm9tcHQuXG4gICAqL1xuICBwcm9tcHRfdG9rZW5zOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRvdGFsIG51bWJlciBvZiB0b2tlbnMgdXNlZCBpbiB0aGUgcmVxdWVzdCAocHJvbXB0ICsgY29tcGxldGlvbikuXG4gICAqL1xuICB0b3RhbF90b2tlbnM6IG51bWJlcjtcblxuICAvKipcbiAgICogQnJlYWtkb3duIG9mIHRva2VucyB1c2VkIGluIGEgY29tcGxldGlvbi5cbiAgICovXG4gIGNvbXBsZXRpb25fdG9rZW5zX2RldGFpbHM/OiBDb21wbGV0aW9uVXNhZ2UuQ29tcGxldGlvblRva2Vuc0RldGFpbHM7XG5cbiAgLyoqXG4gICAqIEJyZWFrZG93biBvZiB0b2tlbnMgdXNlZCBpbiB0aGUgcHJvbXB0LlxuICAgKi9cbiAgcHJvbXB0X3Rva2Vuc19kZXRhaWxzPzogQ29tcGxldGlvblVzYWdlLlByb21wdFRva2Vuc0RldGFpbHM7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29tcGxldGlvblVzYWdlIHtcbiAgLyoqXG4gICAqIEJyZWFrZG93biBvZiB0b2tlbnMgdXNlZCBpbiBhIGNvbXBsZXRpb24uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIENvbXBsZXRpb25Ub2tlbnNEZXRhaWxzIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHVzaW5nIFByZWRpY3RlZCBPdXRwdXRzLCB0aGUgbnVtYmVyIG9mIHRva2VucyBpbiB0aGUgcHJlZGljdGlvbiB0aGF0XG4gICAgICogYXBwZWFyZWQgaW4gdGhlIGNvbXBsZXRpb24uXG4gICAgICovXG4gICAgYWNjZXB0ZWRfcHJlZGljdGlvbl90b2tlbnM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBdWRpbyBpbnB1dCB0b2tlbnMgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbC5cbiAgICAgKi9cbiAgICBhdWRpb190b2tlbnM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUb2tlbnMgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbCBmb3IgcmVhc29uaW5nLlxuICAgICAqL1xuICAgIHJlYXNvbmluZ190b2tlbnM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHVzaW5nIFByZWRpY3RlZCBPdXRwdXRzLCB0aGUgbnVtYmVyIG9mIHRva2VucyBpbiB0aGUgcHJlZGljdGlvbiB0aGF0IGRpZFxuICAgICAqIG5vdCBhcHBlYXIgaW4gdGhlIGNvbXBsZXRpb24uIEhvd2V2ZXIsIGxpa2UgcmVhc29uaW5nIHRva2VucywgdGhlc2UgdG9rZW5zIGFyZVxuICAgICAqIHN0aWxsIGNvdW50ZWQgaW4gdGhlIHRvdGFsIGNvbXBsZXRpb24gdG9rZW5zIGZvciBwdXJwb3NlcyBvZiBiaWxsaW5nLCBvdXRwdXQsXG4gICAgICogYW5kIGNvbnRleHQgd2luZG93IGxpbWl0cy5cbiAgICAgKi9cbiAgICByZWplY3RlZF9wcmVkaWN0aW9uX3Rva2Vucz86IG51bWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCcmVha2Rvd24gb2YgdG9rZW5zIHVzZWQgaW4gdGhlIHByb21wdC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgUHJvbXB0VG9rZW5zRGV0YWlscyB7XG4gICAgLyoqXG4gICAgICogQXVkaW8gaW5wdXQgdG9rZW5zIHByZXNlbnQgaW4gdGhlIHByb21wdC5cbiAgICAgKi9cbiAgICBhdWRpb190b2tlbnM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZWQgdG9rZW5zIHByZXNlbnQgaW4gdGhlIHByb21wdC5cbiAgICAgKi9cbiAgICBjYWNoZWRfdG9rZW5zPzogbnVtYmVyO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIENvbXBsZXRpb25DcmVhdGVQYXJhbXMgPSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nIHwgQ29tcGxldGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZztcblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBJRCBvZiB0aGUgbW9kZWwgdG8gdXNlLiBZb3UgY2FuIHVzZSB0aGVcbiAgICogW0xpc3QgbW9kZWxzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL21vZGVscy9saXN0KSBBUEkgdG9cbiAgICogc2VlIGFsbCBvZiB5b3VyIGF2YWlsYWJsZSBtb2RlbHMsIG9yIHNlZSBvdXJcbiAgICogW01vZGVsIG92ZXJ2aWV3XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMpIGZvciBkZXNjcmlwdGlvbnMgb2ZcbiAgICogdGhlbS5cbiAgICovXG4gIG1vZGVsOiAoc3RyaW5nICYge30pIHwgJ2dwdC0zLjUtdHVyYm8taW5zdHJ1Y3QnIHwgJ2RhdmluY2ktMDAyJyB8ICdiYWJiYWdlLTAwMic7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9tcHQocykgdG8gZ2VuZXJhdGUgY29tcGxldGlvbnMgZm9yLCBlbmNvZGVkIGFzIGEgc3RyaW5nLCBhcnJheSBvZlxuICAgKiBzdHJpbmdzLCBhcnJheSBvZiB0b2tlbnMsIG9yIGFycmF5IG9mIHRva2VuIGFycmF5cy5cbiAgICpcbiAgICogTm90ZSB0aGF0IDx8ZW5kb2Z0ZXh0fD4gaXMgdGhlIGRvY3VtZW50IHNlcGFyYXRvciB0aGF0IHRoZSBtb2RlbCBzZWVzIGR1cmluZ1xuICAgKiB0cmFpbmluZywgc28gaWYgYSBwcm9tcHQgaXMgbm90IHNwZWNpZmllZCB0aGUgbW9kZWwgd2lsbCBnZW5lcmF0ZSBhcyBpZiBmcm9tIHRoZVxuICAgKiBiZWdpbm5pbmcgb2YgYSBuZXcgZG9jdW1lbnQuXG4gICAqL1xuICBwcm9tcHQ6IHN0cmluZyB8IEFycmF5PHN0cmluZz4gfCBBcnJheTxudW1iZXI+IHwgQXJyYXk8QXJyYXk8bnVtYmVyPj4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYGJlc3Rfb2ZgIGNvbXBsZXRpb25zIHNlcnZlci1zaWRlIGFuZCByZXR1cm5zIHRoZSBcImJlc3RcIiAodGhlIG9uZSB3aXRoXG4gICAqIHRoZSBoaWdoZXN0IGxvZyBwcm9iYWJpbGl0eSBwZXIgdG9rZW4pLiBSZXN1bHRzIGNhbm5vdCBiZSBzdHJlYW1lZC5cbiAgICpcbiAgICogV2hlbiB1c2VkIHdpdGggYG5gLCBgYmVzdF9vZmAgY29udHJvbHMgdGhlIG51bWJlciBvZiBjYW5kaWRhdGUgY29tcGxldGlvbnMgYW5kXG4gICAqIGBuYCBzcGVjaWZpZXMgaG93IG1hbnkgdG8gcmV0dXJuIFx1MjAxMyBgYmVzdF9vZmAgbXVzdCBiZSBncmVhdGVyIHRoYW4gYG5gLlxuICAgKlxuICAgKiAqKk5vdGU6KiogQmVjYXVzZSB0aGlzIHBhcmFtZXRlciBnZW5lcmF0ZXMgbWFueSBjb21wbGV0aW9ucywgaXQgY2FuIHF1aWNrbHlcbiAgICogY29uc3VtZSB5b3VyIHRva2VuIHF1b3RhLiBVc2UgY2FyZWZ1bGx5IGFuZCBlbnN1cmUgdGhhdCB5b3UgaGF2ZSByZWFzb25hYmxlXG4gICAqIHNldHRpbmdzIGZvciBgbWF4X3Rva2Vuc2AgYW5kIGBzdG9wYC5cbiAgICovXG4gIGJlc3Rfb2Y/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBFY2hvIGJhY2sgdGhlIHByb21wdCBpbiBhZGRpdGlvbiB0byB0aGUgY29tcGxldGlvblxuICAgKi9cbiAgZWNobz86IGJvb2xlYW4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgYmV0d2VlbiAtMi4wIGFuZCAyLjAuIFBvc2l0aXZlIHZhbHVlcyBwZW5hbGl6ZSBuZXcgdG9rZW5zIGJhc2VkIG9uIHRoZWlyXG4gICAqIGV4aXN0aW5nIGZyZXF1ZW5jeSBpbiB0aGUgdGV4dCBzbyBmYXIsIGRlY3JlYXNpbmcgdGhlIG1vZGVsJ3MgbGlrZWxpaG9vZCB0b1xuICAgKiByZXBlYXQgdGhlIHNhbWUgbGluZSB2ZXJiYXRpbS5cbiAgICpcbiAgICogW1NlZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGZyZXF1ZW5jeSBhbmQgcHJlc2VuY2UgcGVuYWx0aWVzLl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3RleHQtZ2VuZXJhdGlvbilcbiAgICovXG4gIGZyZXF1ZW5jeV9wZW5hbHR5PzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogTW9kaWZ5IHRoZSBsaWtlbGlob29kIG9mIHNwZWNpZmllZCB0b2tlbnMgYXBwZWFyaW5nIGluIHRoZSBjb21wbGV0aW9uLlxuICAgKlxuICAgKiBBY2NlcHRzIGEgSlNPTiBvYmplY3QgdGhhdCBtYXBzIHRva2VucyAoc3BlY2lmaWVkIGJ5IHRoZWlyIHRva2VuIElEIGluIHRoZSBHUFRcbiAgICogdG9rZW5pemVyKSB0byBhbiBhc3NvY2lhdGVkIGJpYXMgdmFsdWUgZnJvbSAtMTAwIHRvIDEwMC4gWW91IGNhbiB1c2UgdGhpc1xuICAgKiBbdG9rZW5pemVyIHRvb2xdKC90b2tlbml6ZXI/dmlldz1icGUpIHRvIGNvbnZlcnQgdGV4dCB0byB0b2tlbiBJRHMuXG4gICAqIE1hdGhlbWF0aWNhbGx5LCB0aGUgYmlhcyBpcyBhZGRlZCB0byB0aGUgbG9naXRzIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwgcHJpb3IgdG9cbiAgICogc2FtcGxpbmcuIFRoZSBleGFjdCBlZmZlY3Qgd2lsbCB2YXJ5IHBlciBtb2RlbCwgYnV0IHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxXG4gICAqIHNob3VsZCBkZWNyZWFzZSBvciBpbmNyZWFzZSBsaWtlbGlob29kIG9mIHNlbGVjdGlvbjsgdmFsdWVzIGxpa2UgLTEwMCBvciAxMDBcbiAgICogc2hvdWxkIHJlc3VsdCBpbiBhIGJhbiBvciBleGNsdXNpdmUgc2VsZWN0aW9uIG9mIHRoZSByZWxldmFudCB0b2tlbi5cbiAgICpcbiAgICogQXMgYW4gZXhhbXBsZSwgeW91IGNhbiBwYXNzIGB7XCI1MDI1NlwiOiAtMTAwfWAgdG8gcHJldmVudCB0aGUgPHxlbmRvZnRleHR8PiB0b2tlblxuICAgKiBmcm9tIGJlaW5nIGdlbmVyYXRlZC5cbiAgICovXG4gIGxvZ2l0X2JpYXM/OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbDtcblxuICAvKipcbiAgICogSW5jbHVkZSB0aGUgbG9nIHByb2JhYmlsaXRpZXMgb24gdGhlIGBsb2dwcm9ic2AgbW9zdCBsaWtlbHkgb3V0cHV0IHRva2VucywgYXNcbiAgICogd2VsbCB0aGUgY2hvc2VuIHRva2Vucy4gRm9yIGV4YW1wbGUsIGlmIGBsb2dwcm9ic2AgaXMgNSwgdGhlIEFQSSB3aWxsIHJldHVybiBhXG4gICAqIGxpc3Qgb2YgdGhlIDUgbW9zdCBsaWtlbHkgdG9rZW5zLiBUaGUgQVBJIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgYGxvZ3Byb2JgIG9mXG4gICAqIHRoZSBzYW1wbGVkIHRva2VuLCBzbyB0aGVyZSBtYXkgYmUgdXAgdG8gYGxvZ3Byb2JzKzFgIGVsZW1lbnRzIGluIHRoZSByZXNwb25zZS5cbiAgICpcbiAgICogVGhlIG1heGltdW0gdmFsdWUgZm9yIGBsb2dwcm9ic2AgaXMgNS5cbiAgICovXG4gIGxvZ3Byb2JzPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIFt0b2tlbnNdKC90b2tlbml6ZXIpIHRoYXQgY2FuIGJlIGdlbmVyYXRlZCBpbiB0aGVcbiAgICogY29tcGxldGlvbi5cbiAgICpcbiAgICogVGhlIHRva2VuIGNvdW50IG9mIHlvdXIgcHJvbXB0IHBsdXMgYG1heF90b2tlbnNgIGNhbm5vdCBleGNlZWQgdGhlIG1vZGVsJ3NcbiAgICogY29udGV4dCBsZW5ndGguXG4gICAqIFtFeGFtcGxlIFB5dGhvbiBjb2RlXShodHRwczovL2Nvb2tib29rLm9wZW5haS5jb20vZXhhbXBsZXMvaG93X3RvX2NvdW50X3Rva2Vuc193aXRoX3Rpa3Rva2VuKVxuICAgKiBmb3IgY291bnRpbmcgdG9rZW5zLlxuICAgKi9cbiAgbWF4X3Rva2Vucz86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IGNvbXBsZXRpb25zIHRvIGdlbmVyYXRlIGZvciBlYWNoIHByb21wdC5cbiAgICpcbiAgICogKipOb3RlOioqIEJlY2F1c2UgdGhpcyBwYXJhbWV0ZXIgZ2VuZXJhdGVzIG1hbnkgY29tcGxldGlvbnMsIGl0IGNhbiBxdWlja2x5XG4gICAqIGNvbnN1bWUgeW91ciB0b2tlbiBxdW90YS4gVXNlIGNhcmVmdWxseSBhbmQgZW5zdXJlIHRoYXQgeW91IGhhdmUgcmVhc29uYWJsZVxuICAgKiBzZXR0aW5ncyBmb3IgYG1heF90b2tlbnNgIGFuZCBgc3RvcGAuXG4gICAqL1xuICBuPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogTnVtYmVyIGJldHdlZW4gLTIuMCBhbmQgMi4wLiBQb3NpdGl2ZSB2YWx1ZXMgcGVuYWxpemUgbmV3IHRva2VucyBiYXNlZCBvblxuICAgKiB3aGV0aGVyIHRoZXkgYXBwZWFyIGluIHRoZSB0ZXh0IHNvIGZhciwgaW5jcmVhc2luZyB0aGUgbW9kZWwncyBsaWtlbGlob29kIHRvXG4gICAqIHRhbGsgYWJvdXQgbmV3IHRvcGljcy5cbiAgICpcbiAgICogW1NlZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGZyZXF1ZW5jeSBhbmQgcHJlc2VuY2UgcGVuYWx0aWVzLl0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3RleHQtZ2VuZXJhdGlvbilcbiAgICovXG4gIHByZXNlbmNlX3BlbmFsdHk/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJZiBzcGVjaWZpZWQsIG91ciBzeXN0ZW0gd2lsbCBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gc2FtcGxlIGRldGVybWluaXN0aWNhbGx5LFxuICAgKiBzdWNoIHRoYXQgcmVwZWF0ZWQgcmVxdWVzdHMgd2l0aCB0aGUgc2FtZSBgc2VlZGAgYW5kIHBhcmFtZXRlcnMgc2hvdWxkIHJldHVyblxuICAgKiB0aGUgc2FtZSByZXN1bHQuXG4gICAqXG4gICAqIERldGVybWluaXNtIGlzIG5vdCBndWFyYW50ZWVkLCBhbmQgeW91IHNob3VsZCByZWZlciB0byB0aGUgYHN5c3RlbV9maW5nZXJwcmludGBcbiAgICogcmVzcG9uc2UgcGFyYW1ldGVyIHRvIG1vbml0b3IgY2hhbmdlcyBpbiB0aGUgYmFja2VuZC5cbiAgICovXG4gIHNlZWQ/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBVcCB0byA0IHNlcXVlbmNlcyB3aGVyZSB0aGUgQVBJIHdpbGwgc3RvcCBnZW5lcmF0aW5nIGZ1cnRoZXIgdG9rZW5zLiBUaGVcbiAgICogcmV0dXJuZWQgdGV4dCB3aWxsIG5vdCBjb250YWluIHRoZSBzdG9wIHNlcXVlbmNlLlxuICAgKi9cbiAgc3RvcD86IHN0cmluZyB8IG51bGwgfCBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0cmVhbSBiYWNrIHBhcnRpYWwgcHJvZ3Jlc3MuIElmIHNldCwgdG9rZW5zIHdpbGwgYmUgc2VudCBhc1xuICAgKiBkYXRhLW9ubHlcbiAgICogW3NlcnZlci1zZW50IGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHMjRXZlbnRfc3RyZWFtX2Zvcm1hdClcbiAgICogYXMgdGhleSBiZWNvbWUgYXZhaWxhYmxlLCB3aXRoIHRoZSBzdHJlYW0gdGVybWluYXRlZCBieSBhIGBkYXRhOiBbRE9ORV1gXG4gICAqIG1lc3NhZ2UuXG4gICAqIFtFeGFtcGxlIFB5dGhvbiBjb2RlXShodHRwczovL2Nvb2tib29rLm9wZW5haS5jb20vZXhhbXBsZXMvaG93X3RvX3N0cmVhbV9jb21wbGV0aW9ucykuXG4gICAqL1xuICBzdHJlYW0/OiBib29sZWFuIHwgbnVsbDtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlLiBPbmx5IHNldCB0aGlzIHdoZW4geW91IHNldCBgc3RyZWFtOiB0cnVlYC5cbiAgICovXG4gIHN0cmVhbV9vcHRpb25zPzogQ29tcGxldGlvbnNDb21wbGV0aW9uc0FQSS5DaGF0Q29tcGxldGlvblN0cmVhbU9wdGlvbnMgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VmZml4IHRoYXQgY29tZXMgYWZ0ZXIgYSBjb21wbGV0aW9uIG9mIGluc2VydGVkIHRleHQuXG4gICAqXG4gICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBgZ3B0LTMuNS10dXJiby1pbnN0cnVjdGAuXG4gICAqL1xuICBzdWZmaXg/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGF0IHNhbXBsaW5nIHRlbXBlcmF0dXJlIHRvIHVzZSwgYmV0d2VlbiAwIGFuZCAyLiBIaWdoZXIgdmFsdWVzIGxpa2UgMC44IHdpbGxcbiAgICogbWFrZSB0aGUgb3V0cHV0IG1vcmUgcmFuZG9tLCB3aGlsZSBsb3dlciB2YWx1ZXMgbGlrZSAwLjIgd2lsbCBtYWtlIGl0IG1vcmVcbiAgICogZm9jdXNlZCBhbmQgZGV0ZXJtaW5pc3RpYy5cbiAgICpcbiAgICogV2UgZ2VuZXJhbGx5IHJlY29tbWVuZCBhbHRlcmluZyB0aGlzIG9yIGB0b3BfcGAgYnV0IG5vdCBib3RoLlxuICAgKi9cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBzYW1wbGluZyB3aXRoIHRlbXBlcmF0dXJlLCBjYWxsZWQgbnVjbGV1cyBzYW1wbGluZywgd2hlcmUgdGhlXG4gICAqIG1vZGVsIGNvbnNpZGVycyB0aGUgcmVzdWx0cyBvZiB0aGUgdG9rZW5zIHdpdGggdG9wX3AgcHJvYmFiaWxpdHkgbWFzcy4gU28gMC4xXG4gICAqIG1lYW5zIG9ubHkgdGhlIHRva2VucyBjb21wcmlzaW5nIHRoZSB0b3AgMTAlIHByb2JhYmlsaXR5IG1hc3MgYXJlIGNvbnNpZGVyZWQuXG4gICAqXG4gICAqIFdlIGdlbmVyYWxseSByZWNvbW1lbmQgYWx0ZXJpbmcgdGhpcyBvciBgdGVtcGVyYXR1cmVgIGJ1dCBub3QgYm90aC5cbiAgICovXG4gIHRvcF9wPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQSB1bmlxdWUgaWRlbnRpZmllciByZXByZXNlbnRpbmcgeW91ciBlbmQtdXNlciwgd2hpY2ggY2FuIGhlbHAgT3BlbkFJIHRvIG1vbml0b3JcbiAgICogYW5kIGRldGVjdCBhYnVzZS5cbiAgICogW0xlYXJuIG1vcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zYWZldHktYmVzdC1wcmFjdGljZXMjZW5kLXVzZXItaWRzKS5cbiAgICovXG4gIHVzZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29tcGxldGlvbkNyZWF0ZVBhcmFtcyB7XG4gIGV4cG9ydCB0eXBlIENvbXBsZXRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcgPSBDb21wbGV0aW9uc0FQSS5Db21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nO1xuICBleHBvcnQgdHlwZSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nID0gQ29tcGxldGlvbnNBUEkuQ29tcGxldGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nIGV4dGVuZHMgQ29tcGxldGlvbkNyZWF0ZVBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogV2hldGhlciB0byBzdHJlYW0gYmFjayBwYXJ0aWFsIHByb2dyZXNzLiBJZiBzZXQsIHRva2VucyB3aWxsIGJlIHNlbnQgYXNcbiAgICogZGF0YS1vbmx5XG4gICAqIFtzZXJ2ZXItc2VudCBldmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2ZXItc2VudF9ldmVudHMvVXNpbmdfc2VydmVyLXNlbnRfZXZlbnRzI0V2ZW50X3N0cmVhbV9mb3JtYXQpXG4gICAqIGFzIHRoZXkgYmVjb21lIGF2YWlsYWJsZSwgd2l0aCB0aGUgc3RyZWFtIHRlcm1pbmF0ZWQgYnkgYSBgZGF0YTogW0RPTkVdYFxuICAgKiBtZXNzYWdlLlxuICAgKiBbRXhhbXBsZSBQeXRob24gY29kZV0oaHR0cHM6Ly9jb29rYm9vay5vcGVuYWkuY29tL2V4YW1wbGVzL2hvd190b19zdHJlYW1fY29tcGxldGlvbnMpLlxuICAgKi9cbiAgc3RyZWFtPzogZmFsc2UgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcgZXh0ZW5kcyBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0cmVhbSBiYWNrIHBhcnRpYWwgcHJvZ3Jlc3MuIElmIHNldCwgdG9rZW5zIHdpbGwgYmUgc2VudCBhc1xuICAgKiBkYXRhLW9ubHlcbiAgICogW3NlcnZlci1zZW50IGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHMjRXZlbnRfc3RyZWFtX2Zvcm1hdClcbiAgICogYXMgdGhleSBiZWNvbWUgYXZhaWxhYmxlLCB3aXRoIHRoZSBzdHJlYW0gdGVybWluYXRlZCBieSBhIGBkYXRhOiBbRE9ORV1gXG4gICAqIG1lc3NhZ2UuXG4gICAqIFtFeGFtcGxlIFB5dGhvbiBjb2RlXShodHRwczovL2Nvb2tib29rLm9wZW5haS5jb20vZXhhbXBsZXMvaG93X3RvX3N0cmVhbV9jb21wbGV0aW9ucykuXG4gICAqL1xuICBzdHJlYW06IHRydWU7XG59XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBDb21wbGV0aW9ucyB7XG4gIGV4cG9ydCB7XG4gICAgdHlwZSBDb21wbGV0aW9uIGFzIENvbXBsZXRpb24sXG4gICAgdHlwZSBDb21wbGV0aW9uQ2hvaWNlIGFzIENvbXBsZXRpb25DaG9pY2UsXG4gICAgdHlwZSBDb21wbGV0aW9uVXNhZ2UgYXMgQ29tcGxldGlvblVzYWdlLFxuICAgIHR5cGUgQ29tcGxldGlvbkNyZWF0ZVBhcmFtcyBhcyBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLFxuICAgIHR5cGUgQ29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyBhcyBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICAgIHR5cGUgQ29tcGxldGlvbkNyZWF0ZVBhcmFtc1N0cmVhbWluZyBhcyBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICB9O1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi9jb3JlJztcblxuZXhwb3J0IGNsYXNzIEVtYmVkZGluZ3MgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtYmVkZGluZyB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBpbnB1dCB0ZXh0LlxuICAgKi9cbiAgY3JlYXRlKFxuICAgIGJvZHk6IEVtYmVkZGluZ0NyZWF0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPENyZWF0ZUVtYmVkZGluZ1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvZW1iZWRkaW5ncycsIHsgYm9keSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUVtYmVkZGluZ1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGVtYmVkZGluZ3MgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbC5cbiAgICovXG4gIGRhdGE6IEFycmF5PEVtYmVkZGluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtb2RlbCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBlbWJlZGRpbmcuXG4gICAqL1xuICBtb2RlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHR5cGUsIHdoaWNoIGlzIGFsd2F5cyBcImxpc3RcIi5cbiAgICovXG4gIG9iamVjdDogJ2xpc3QnO1xuXG4gIC8qKlxuICAgKiBUaGUgdXNhZ2UgaW5mb3JtYXRpb24gZm9yIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgdXNhZ2U6IENyZWF0ZUVtYmVkZGluZ1Jlc3BvbnNlLlVzYWdlO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENyZWF0ZUVtYmVkZGluZ1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFRoZSB1c2FnZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlcXVlc3QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFVzYWdlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHRva2VucyB1c2VkIGJ5IHRoZSBwcm9tcHQuXG4gICAgICovXG4gICAgcHJvbXB0X3Rva2VuczogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiB0b2tlbnMgdXNlZCBieSB0aGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICB0b3RhbF90b2tlbnM6IG51bWJlcjtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gZW1iZWRkaW5nIHZlY3RvciByZXR1cm5lZCBieSBlbWJlZGRpbmcgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1iZWRkaW5nIHtcbiAgLyoqXG4gICAqIFRoZSBlbWJlZGRpbmcgdmVjdG9yLCB3aGljaCBpcyBhIGxpc3Qgb2YgZmxvYXRzLiBUaGUgbGVuZ3RoIG9mIHZlY3RvciBkZXBlbmRzIG9uXG4gICAqIHRoZSBtb2RlbCBhcyBsaXN0ZWQgaW4gdGhlXG4gICAqIFtlbWJlZGRpbmcgZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9lbWJlZGRpbmdzKS5cbiAgICovXG4gIGVtYmVkZGluZzogQXJyYXk8bnVtYmVyPjtcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBlbWJlZGRpbmcgaW4gdGhlIGxpc3Qgb2YgZW1iZWRkaW5ncy5cbiAgICovXG4gIGluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSwgd2hpY2ggaXMgYWx3YXlzIFwiZW1iZWRkaW5nXCIuXG4gICAqL1xuICBvYmplY3Q6ICdlbWJlZGRpbmcnO1xufVxuXG5leHBvcnQgdHlwZSBFbWJlZGRpbmdNb2RlbCA9ICd0ZXh0LWVtYmVkZGluZy1hZGEtMDAyJyB8ICd0ZXh0LWVtYmVkZGluZy0zLXNtYWxsJyB8ICd0ZXh0LWVtYmVkZGluZy0zLWxhcmdlJztcblxuZXhwb3J0IGludGVyZmFjZSBFbWJlZGRpbmdDcmVhdGVQYXJhbXMge1xuICAvKipcbiAgICogSW5wdXQgdGV4dCB0byBlbWJlZCwgZW5jb2RlZCBhcyBhIHN0cmluZyBvciBhcnJheSBvZiB0b2tlbnMuIFRvIGVtYmVkIG11bHRpcGxlXG4gICAqIGlucHV0cyBpbiBhIHNpbmdsZSByZXF1ZXN0LCBwYXNzIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgYXJyYXkgb2YgdG9rZW4gYXJyYXlzLlxuICAgKiBUaGUgaW5wdXQgbXVzdCBub3QgZXhjZWVkIHRoZSBtYXggaW5wdXQgdG9rZW5zIGZvciB0aGUgbW9kZWwgKDgxOTIgdG9rZW5zIGZvclxuICAgKiBgdGV4dC1lbWJlZGRpbmctYWRhLTAwMmApLCBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nLCBhbmQgYW55IGFycmF5IG11c3QgYmUgMjA0OFxuICAgKiBkaW1lbnNpb25zIG9yIGxlc3MuXG4gICAqIFtFeGFtcGxlIFB5dGhvbiBjb2RlXShodHRwczovL2Nvb2tib29rLm9wZW5haS5jb20vZXhhbXBsZXMvaG93X3RvX2NvdW50X3Rva2Vuc193aXRoX3Rpa3Rva2VuKVxuICAgKiBmb3IgY291bnRpbmcgdG9rZW5zLiBTb21lIG1vZGVscyBtYXkgYWxzbyBpbXBvc2UgYSBsaW1pdCBvbiB0b3RhbCBudW1iZXIgb2ZcbiAgICogdG9rZW5zIHN1bW1lZCBhY3Jvc3MgaW5wdXRzLlxuICAgKi9cbiAgaW5wdXQ6IHN0cmluZyB8IEFycmF5PHN0cmluZz4gfCBBcnJheTxudW1iZXI+IHwgQXJyYXk8QXJyYXk8bnVtYmVyPj47XG5cbiAgLyoqXG4gICAqIElEIG9mIHRoZSBtb2RlbCB0byB1c2UuIFlvdSBjYW4gdXNlIHRoZVxuICAgKiBbTGlzdCBtb2RlbHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvbW9kZWxzL2xpc3QpIEFQSSB0b1xuICAgKiBzZWUgYWxsIG9mIHlvdXIgYXZhaWxhYmxlIG1vZGVscywgb3Igc2VlIG91clxuICAgKiBbTW9kZWwgb3ZlcnZpZXddKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL21vZGVscykgZm9yIGRlc2NyaXB0aW9ucyBvZlxuICAgKiB0aGVtLlxuICAgKi9cbiAgbW9kZWw6IChzdHJpbmcgJiB7fSkgfCBFbWJlZGRpbmdNb2RlbDtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBkaW1lbnNpb25zIHRoZSByZXN1bHRpbmcgb3V0cHV0IGVtYmVkZGluZ3Mgc2hvdWxkIGhhdmUuIE9ubHlcbiAgICogc3VwcG9ydGVkIGluIGB0ZXh0LWVtYmVkZGluZy0zYCBhbmQgbGF0ZXIgbW9kZWxzLlxuICAgKi9cbiAgZGltZW5zaW9ucz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCB0byByZXR1cm4gdGhlIGVtYmVkZGluZ3MgaW4uIENhbiBiZSBlaXRoZXIgYGZsb2F0YCBvclxuICAgKiBbYGJhc2U2NGBdKGh0dHBzOi8vcHlwaS5vcmcvcHJvamVjdC9weWJhc2U2NC8pLlxuICAgKi9cbiAgZW5jb2RpbmdfZm9ybWF0PzogJ2Zsb2F0JyB8ICdiYXNlNjQnO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIHJlcHJlc2VudGluZyB5b3VyIGVuZC11c2VyLCB3aGljaCBjYW4gaGVscCBPcGVuQUkgdG8gbW9uaXRvclxuICAgKiBhbmQgZGV0ZWN0IGFidXNlLlxuICAgKiBbTGVhcm4gbW9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3NhZmV0eS1iZXN0LXByYWN0aWNlcyNlbmQtdXNlci1pZHMpLlxuICAgKi9cbiAgdXNlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIEVtYmVkZGluZ3Mge1xuICBleHBvcnQge1xuICAgIHR5cGUgQ3JlYXRlRW1iZWRkaW5nUmVzcG9uc2UgYXMgQ3JlYXRlRW1iZWRkaW5nUmVzcG9uc2UsXG4gICAgdHlwZSBFbWJlZGRpbmcgYXMgRW1iZWRkaW5nLFxuICAgIHR5cGUgRW1iZWRkaW5nTW9kZWwgYXMgRW1iZWRkaW5nTW9kZWwsXG4gICAgdHlwZSBFbWJlZGRpbmdDcmVhdGVQYXJhbXMgYXMgRW1iZWRkaW5nQ3JlYXRlUGFyYW1zLFxuICB9O1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgaXNSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IEFQSUNvbm5lY3Rpb25UaW1lb3V0RXJyb3IgfSBmcm9tICcuLi9lcnJvcic7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQ3Vyc29yUGFnZSwgdHlwZSBDdXJzb3JQYWdlUGFyYW1zIH0gZnJvbSAnLi4vcGFnaW5hdGlvbic7XG5pbXBvcnQgeyB0eXBlIFJlc3BvbnNlIH0gZnJvbSAnLi4vX3NoaW1zL2luZGV4JztcblxuZXhwb3J0IGNsYXNzIEZpbGVzIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVXBsb2FkIGEgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIGFjcm9zcyB2YXJpb3VzIGVuZHBvaW50cy4gSW5kaXZpZHVhbCBmaWxlcyBjYW4gYmVcbiAgICogdXAgdG8gNTEyIE1CLCBhbmQgdGhlIHNpemUgb2YgYWxsIGZpbGVzIHVwbG9hZGVkIGJ5IG9uZSBvcmdhbml6YXRpb24gY2FuIGJlIHVwXG4gICAqIHRvIDEwMCBHQi5cbiAgICpcbiAgICogVGhlIEFzc2lzdGFudHMgQVBJIHN1cHBvcnRzIGZpbGVzIHVwIHRvIDIgbWlsbGlvbiB0b2tlbnMgYW5kIG9mIHNwZWNpZmljIGZpbGVcbiAgICogdHlwZXMuIFNlZSB0aGVcbiAgICogW0Fzc2lzdGFudHMgVG9vbHMgZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2Fzc2lzdGFudHMvdG9vbHMpIGZvclxuICAgKiBkZXRhaWxzLlxuICAgKlxuICAgKiBUaGUgRmluZS10dW5pbmcgQVBJIG9ubHkgc3VwcG9ydHMgYC5qc29ubGAgZmlsZXMuIFRoZSBpbnB1dCBhbHNvIGhhcyBjZXJ0YWluXG4gICAqIHJlcXVpcmVkIGZvcm1hdHMgZm9yIGZpbmUtdHVuaW5nXG4gICAqIFtjaGF0XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbmUtdHVuaW5nL2NoYXQtaW5wdXQpIG9yXG4gICAqIFtjb21wbGV0aW9uc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maW5lLXR1bmluZy9jb21wbGV0aW9ucy1pbnB1dClcbiAgICogbW9kZWxzLlxuICAgKlxuICAgKiBUaGUgQmF0Y2ggQVBJIG9ubHkgc3VwcG9ydHMgYC5qc29ubGAgZmlsZXMgdXAgdG8gMjAwIE1CIGluIHNpemUuIFRoZSBpbnB1dCBhbHNvXG4gICAqIGhhcyBhIHNwZWNpZmljIHJlcXVpcmVkXG4gICAqIFtmb3JtYXRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvYmF0Y2gvcmVxdWVzdC1pbnB1dCkuXG4gICAqXG4gICAqIFBsZWFzZSBbY29udGFjdCB1c10oaHR0cHM6Ly9oZWxwLm9wZW5haS5jb20vKSBpZiB5b3UgbmVlZCB0byBpbmNyZWFzZSB0aGVzZVxuICAgKiBzdG9yYWdlIGxpbWl0cy5cbiAgICovXG4gIGNyZWF0ZShib2R5OiBGaWxlQ3JlYXRlUGFyYW1zLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxGaWxlT2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvZmlsZXMnLCBDb3JlLm11bHRpcGFydEZvcm1SZXF1ZXN0T3B0aW9ucyh7IGJvZHksIC4uLm9wdGlvbnMgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBmaWxlLlxuICAgKi9cbiAgcmV0cmlldmUoZmlsZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEZpbGVPYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldChgL2ZpbGVzLyR7ZmlsZUlkfWAsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGZpbGVzLlxuICAgKi9cbiAgbGlzdChxdWVyeT86IEZpbGVMaXN0UGFyYW1zLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuUGFnZVByb21pc2U8RmlsZU9iamVjdHNQYWdlLCBGaWxlT2JqZWN0PjtcbiAgbGlzdChvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuUGFnZVByb21pc2U8RmlsZU9iamVjdHNQYWdlLCBGaWxlT2JqZWN0PjtcbiAgbGlzdChcbiAgICBxdWVyeTogRmlsZUxpc3RQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8RmlsZU9iamVjdHNQYWdlLCBGaWxlT2JqZWN0PiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0KHt9LCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdCgnL2ZpbGVzJywgRmlsZU9iamVjdHNQYWdlLCB7IHF1ZXJ5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIGZpbGUuXG4gICAqL1xuICBkZWwoZmlsZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEZpbGVEZWxldGVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5kZWxldGUoYC9maWxlcy8ke2ZpbGVJZH1gLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUuXG4gICAqL1xuICBjb250ZW50KGZpbGVJZDogc3RyaW5nLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0KGAvZmlsZXMvJHtmaWxlSWR9L2NvbnRlbnRgLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9iaW5hcnknLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgICBfX2JpbmFyeVJlc3BvbnNlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZmlsZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGAuY29udGVudCgpYCBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZFxuICAgKi9cbiAgcmV0cmlldmVDb250ZW50KGZpbGVJZDogc3RyaW5nLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldChgL2ZpbGVzLyR7ZmlsZUlkfS9jb250ZW50YCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIHRoZSBnaXZlbiBmaWxlIHRvIGJlIHByb2Nlc3NlZCwgZGVmYXVsdCB0aW1lb3V0IGlzIDMwIG1pbnMuXG4gICAqL1xuICBhc3luYyB3YWl0Rm9yUHJvY2Vzc2luZyhcbiAgICBpZDogc3RyaW5nLFxuICAgIHsgcG9sbEludGVydmFsID0gNTAwMCwgbWF4V2FpdCA9IDMwICogNjAgKiAxMDAwIH06IHsgcG9sbEludGVydmFsPzogbnVtYmVyOyBtYXhXYWl0PzogbnVtYmVyIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxGaWxlT2JqZWN0PiB7XG4gICAgY29uc3QgVEVSTUlOQUxfU1RBVEVTID0gbmV3IFNldChbJ3Byb2Nlc3NlZCcsICdlcnJvcicsICdkZWxldGVkJ10pO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBmaWxlID0gYXdhaXQgdGhpcy5yZXRyaWV2ZShpZCk7XG5cbiAgICB3aGlsZSAoIWZpbGUuc3RhdHVzIHx8ICFURVJNSU5BTF9TVEFURVMuaGFzKGZpbGUuc3RhdHVzKSkge1xuICAgICAgYXdhaXQgc2xlZXAocG9sbEludGVydmFsKTtcblxuICAgICAgZmlsZSA9IGF3YWl0IHRoaXMucmV0cmlldmUoaWQpO1xuICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydCA+IG1heFdhaXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSUNvbm5lY3Rpb25UaW1lb3V0RXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2U6IGBHaXZpbmcgdXAgb24gd2FpdGluZyBmb3IgZmlsZSAke2lkfSB0byBmaW5pc2ggcHJvY2Vzc2luZyBhZnRlciAke21heFdhaXR9IG1pbGxpc2Vjb25kcy5gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsZU9iamVjdHNQYWdlIGV4dGVuZHMgQ3Vyc29yUGFnZTxGaWxlT2JqZWN0PiB7fVxuXG5leHBvcnQgdHlwZSBGaWxlQ29udGVudCA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBGaWxlRGVsZXRlZCB7XG4gIGlkOiBzdHJpbmc7XG5cbiAgZGVsZXRlZDogYm9vbGVhbjtcblxuICBvYmplY3Q6ICdmaWxlJztcbn1cblxuLyoqXG4gKiBUaGUgYEZpbGVgIG9iamVjdCByZXByZXNlbnRzIGEgZG9jdW1lbnQgdGhhdCBoYXMgYmVlbiB1cGxvYWRlZCB0byBPcGVuQUkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZU9iamVjdCB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBpZGVudGlmaWVyLCB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBpbiB0aGUgQVBJIGVuZHBvaW50cy5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBmaWxlLCBpbiBieXRlcy5cbiAgICovXG4gIGJ5dGVzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIGZpbGUgd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICAgKi9cbiAgZmlsZW5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0eXBlLCB3aGljaCBpcyBhbHdheXMgYGZpbGVgLlxuICAgKi9cbiAgb2JqZWN0OiAnZmlsZSc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoZSBmaWxlLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBgYXNzaXN0YW50c2AsXG4gICAqIGBhc3Npc3RhbnRzX291dHB1dGAsIGBiYXRjaGAsIGBiYXRjaF9vdXRwdXRgLCBgZmluZS10dW5lYCwgYGZpbmUtdHVuZS1yZXN1bHRzYFxuICAgKiBhbmQgYHZpc2lvbmAuXG4gICAqL1xuICBwdXJwb3NlOlxuICAgIHwgJ2Fzc2lzdGFudHMnXG4gICAgfCAnYXNzaXN0YW50c19vdXRwdXQnXG4gICAgfCAnYmF0Y2gnXG4gICAgfCAnYmF0Y2hfb3V0cHV0J1xuICAgIHwgJ2ZpbmUtdHVuZSdcbiAgICB8ICdmaW5lLXR1bmUtcmVzdWx0cydcbiAgICB8ICd2aXNpb24nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkLiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGZpbGUsIHdoaWNoIGNhbiBiZSBlaXRoZXJcbiAgICogYHVwbG9hZGVkYCwgYHByb2Nlc3NlZGAsIG9yIGBlcnJvcmAuXG4gICAqL1xuICBzdGF0dXM6ICd1cGxvYWRlZCcgfCAncHJvY2Vzc2VkJyB8ICdlcnJvcic7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIGZpbGUgd2lsbCBleHBpcmUuXG4gICAqL1xuICBleHBpcmVzX2F0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkLiBGb3IgZGV0YWlscyBvbiB3aHkgYSBmaW5lLXR1bmluZyB0cmFpbmluZyBmaWxlIGZhaWxlZFxuICAgKiB2YWxpZGF0aW9uLCBzZWUgdGhlIGBlcnJvcmAgZmllbGQgb24gYGZpbmVfdHVuaW5nLmpvYmAuXG4gICAqL1xuICBzdGF0dXNfZGV0YWlscz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW50ZW5kZWQgcHVycG9zZSBvZiB0aGUgdXBsb2FkZWQgZmlsZS4gT25lIG9mOiAtIGBhc3Npc3RhbnRzYDogVXNlZCBpbiB0aGVcbiAqIEFzc2lzdGFudHMgQVBJIC0gYGJhdGNoYDogVXNlZCBpbiB0aGUgQmF0Y2ggQVBJIC0gYGZpbmUtdHVuZWA6IFVzZWQgZm9yXG4gKiBmaW5lLXR1bmluZyAtIGB2aXNpb25gOiBJbWFnZXMgdXNlZCBmb3IgdmlzaW9uIGZpbmUtdHVuaW5nIC0gYHVzZXJfZGF0YWA6XG4gKiBGbGV4aWJsZSBmaWxlIHR5cGUgZm9yIGFueSBwdXJwb3NlIC0gYGV2YWxzYDogVXNlZCBmb3IgZXZhbCBkYXRhIHNldHNcbiAqL1xuZXhwb3J0IHR5cGUgRmlsZVB1cnBvc2UgPSAnYXNzaXN0YW50cycgfCAnYmF0Y2gnIHwgJ2ZpbmUtdHVuZScgfCAndmlzaW9uJyB8ICd1c2VyX2RhdGEnIHwgJ2V2YWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWxlQ3JlYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBGaWxlIG9iamVjdCAobm90IGZpbGUgbmFtZSkgdG8gYmUgdXBsb2FkZWQuXG4gICAqL1xuICBmaWxlOiBDb3JlLlVwbG9hZGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoZSB1cGxvYWRlZCBmaWxlLiBPbmUgb2Y6IC0gYGFzc2lzdGFudHNgOiBVc2VkIGluIHRoZVxuICAgKiBBc3Npc3RhbnRzIEFQSSAtIGBiYXRjaGA6IFVzZWQgaW4gdGhlIEJhdGNoIEFQSSAtIGBmaW5lLXR1bmVgOiBVc2VkIGZvclxuICAgKiBmaW5lLXR1bmluZyAtIGB2aXNpb25gOiBJbWFnZXMgdXNlZCBmb3IgdmlzaW9uIGZpbmUtdHVuaW5nIC0gYHVzZXJfZGF0YWA6XG4gICAqIEZsZXhpYmxlIGZpbGUgdHlwZSBmb3IgYW55IHB1cnBvc2UgLSBgZXZhbHNgOiBVc2VkIGZvciBldmFsIGRhdGEgc2V0c1xuICAgKi9cbiAgcHVycG9zZTogRmlsZVB1cnBvc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUxpc3RQYXJhbXMgZXh0ZW5kcyBDdXJzb3JQYWdlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFNvcnQgb3JkZXIgYnkgdGhlIGBjcmVhdGVkX2F0YCB0aW1lc3RhbXAgb2YgdGhlIG9iamVjdHMuIGBhc2NgIGZvciBhc2NlbmRpbmdcbiAgICogb3JkZXIgYW5kIGBkZXNjYCBmb3IgZGVzY2VuZGluZyBvcmRlci5cbiAgICovXG4gIG9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG5cbiAgLyoqXG4gICAqIE9ubHkgcmV0dXJuIGZpbGVzIHdpdGggdGhlIGdpdmVuIHB1cnBvc2UuXG4gICAqL1xuICBwdXJwb3NlPzogc3RyaW5nO1xufVxuXG5GaWxlcy5GaWxlT2JqZWN0c1BhZ2UgPSBGaWxlT2JqZWN0c1BhZ2U7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBGaWxlcyB7XG4gIGV4cG9ydCB7XG4gICAgdHlwZSBGaWxlQ29udGVudCBhcyBGaWxlQ29udGVudCxcbiAgICB0eXBlIEZpbGVEZWxldGVkIGFzIEZpbGVEZWxldGVkLFxuICAgIHR5cGUgRmlsZU9iamVjdCBhcyBGaWxlT2JqZWN0LFxuICAgIHR5cGUgRmlsZVB1cnBvc2UgYXMgRmlsZVB1cnBvc2UsXG4gICAgRmlsZU9iamVjdHNQYWdlIGFzIEZpbGVPYmplY3RzUGFnZSxcbiAgICB0eXBlIEZpbGVDcmVhdGVQYXJhbXMgYXMgRmlsZUNyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIEZpbGVMaXN0UGFyYW1zIGFzIEZpbGVMaXN0UGFyYW1zLFxuICB9O1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgaXNSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCB7IEN1cnNvclBhZ2UsIHR5cGUgQ3Vyc29yUGFnZVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3BhZ2luYXRpb24nO1xuXG5leHBvcnQgY2xhc3MgQ2hlY2twb2ludHMgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBMaXN0IGNoZWNrcG9pbnRzIGZvciBhIGZpbmUtdHVuaW5nIGpvYi5cbiAgICovXG4gIGxpc3QoXG4gICAgZmluZVR1bmluZ0pvYklkOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBDaGVja3BvaW50TGlzdFBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxGaW5lVHVuaW5nSm9iQ2hlY2twb2ludHNQYWdlLCBGaW5lVHVuaW5nSm9iQ2hlY2twb2ludD47XG4gIGxpc3QoXG4gICAgZmluZVR1bmluZ0pvYklkOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8RmluZVR1bmluZ0pvYkNoZWNrcG9pbnRzUGFnZSwgRmluZVR1bmluZ0pvYkNoZWNrcG9pbnQ+O1xuICBsaXN0KFxuICAgIGZpbmVUdW5pbmdKb2JJZDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBDaGVja3BvaW50TGlzdFBhcmFtcyB8IENvcmUuUmVxdWVzdE9wdGlvbnMgPSB7fSxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxGaW5lVHVuaW5nSm9iQ2hlY2twb2ludHNQYWdlLCBGaW5lVHVuaW5nSm9iQ2hlY2twb2ludD4ge1xuICAgIGlmIChpc1JlcXVlc3RPcHRpb25zKHF1ZXJ5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdChmaW5lVHVuaW5nSm9iSWQsIHt9LCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdChcbiAgICAgIGAvZmluZV90dW5pbmcvam9icy8ke2ZpbmVUdW5pbmdKb2JJZH0vY2hlY2twb2ludHNgLFxuICAgICAgRmluZVR1bmluZ0pvYkNoZWNrcG9pbnRzUGFnZSxcbiAgICAgIHsgcXVlcnksIC4uLm9wdGlvbnMgfSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaW5lVHVuaW5nSm9iQ2hlY2twb2ludHNQYWdlIGV4dGVuZHMgQ3Vyc29yUGFnZTxGaW5lVHVuaW5nSm9iQ2hlY2twb2ludD4ge31cblxuLyoqXG4gKiBUaGUgYGZpbmVfdHVuaW5nLmpvYi5jaGVja3BvaW50YCBvYmplY3QgcmVwcmVzZW50cyBhIG1vZGVsIGNoZWNrcG9pbnQgZm9yIGFcbiAqIGZpbmUtdHVuaW5nIGpvYiB0aGF0IGlzIHJlYWR5IHRvIHVzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5lVHVuaW5nSm9iQ2hlY2twb2ludCB7XG4gIC8qKlxuICAgKiBUaGUgY2hlY2twb2ludCBpZGVudGlmaWVyLCB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBpbiB0aGUgQVBJIGVuZHBvaW50cy5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIGNoZWNrcG9pbnQgd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaW5lLXR1bmVkIGNoZWNrcG9pbnQgbW9kZWwgdGhhdCBpcyBjcmVhdGVkLlxuICAgKi9cbiAgZmluZV90dW5lZF9tb2RlbF9jaGVja3BvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaW5lLXR1bmluZyBqb2IgdGhhdCB0aGlzIGNoZWNrcG9pbnQgd2FzIGNyZWF0ZWQgZnJvbS5cbiAgICovXG4gIGZpbmVfdHVuaW5nX2pvYl9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXRyaWNzIGF0IHRoZSBzdGVwIG51bWJlciBkdXJpbmcgdGhlIGZpbmUtdHVuaW5nIGpvYi5cbiAgICovXG4gIG1ldHJpY3M6IEZpbmVUdW5pbmdKb2JDaGVja3BvaW50Lk1ldHJpY3M7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSwgd2hpY2ggaXMgYWx3YXlzIFwiZmluZV90dW5pbmcuam9iLmNoZWNrcG9pbnRcIi5cbiAgICovXG4gIG9iamVjdDogJ2ZpbmVfdHVuaW5nLmpvYi5jaGVja3BvaW50JztcblxuICAvKipcbiAgICogVGhlIHN0ZXAgbnVtYmVyIHRoYXQgdGhlIGNoZWNrcG9pbnQgd2FzIGNyZWF0ZWQgYXQuXG4gICAqL1xuICBzdGVwX251bWJlcjogbnVtYmVyO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpbmVUdW5pbmdKb2JDaGVja3BvaW50IHtcbiAgLyoqXG4gICAqIE1ldHJpY3MgYXQgdGhlIHN0ZXAgbnVtYmVyIGR1cmluZyB0aGUgZmluZS10dW5pbmcgam9iLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBNZXRyaWNzIHtcbiAgICBmdWxsX3ZhbGlkX2xvc3M/OiBudW1iZXI7XG5cbiAgICBmdWxsX3ZhbGlkX21lYW5fdG9rZW5fYWNjdXJhY3k/OiBudW1iZXI7XG5cbiAgICBzdGVwPzogbnVtYmVyO1xuXG4gICAgdHJhaW5fbG9zcz86IG51bWJlcjtcblxuICAgIHRyYWluX21lYW5fdG9rZW5fYWNjdXJhY3k/OiBudW1iZXI7XG5cbiAgICB2YWxpZF9sb3NzPzogbnVtYmVyO1xuXG4gICAgdmFsaWRfbWVhbl90b2tlbl9hY2N1cmFjeT86IG51bWJlcjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrcG9pbnRMaXN0UGFyYW1zIGV4dGVuZHMgQ3Vyc29yUGFnZVBhcmFtcyB7fVxuXG5DaGVja3BvaW50cy5GaW5lVHVuaW5nSm9iQ2hlY2twb2ludHNQYWdlID0gRmluZVR1bmluZ0pvYkNoZWNrcG9pbnRzUGFnZTtcblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIENoZWNrcG9pbnRzIHtcbiAgZXhwb3J0IHtcbiAgICB0eXBlIEZpbmVUdW5pbmdKb2JDaGVja3BvaW50IGFzIEZpbmVUdW5pbmdKb2JDaGVja3BvaW50LFxuICAgIEZpbmVUdW5pbmdKb2JDaGVja3BvaW50c1BhZ2UgYXMgRmluZVR1bmluZ0pvYkNoZWNrcG9pbnRzUGFnZSxcbiAgICB0eXBlIENoZWNrcG9pbnRMaXN0UGFyYW1zIGFzIENoZWNrcG9pbnRMaXN0UGFyYW1zLFxuICB9O1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgaXNSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCAqIGFzIENoZWNrcG9pbnRzQVBJIGZyb20gJy4vY2hlY2twb2ludHMnO1xuaW1wb3J0IHtcbiAgQ2hlY2twb2ludExpc3RQYXJhbXMsXG4gIENoZWNrcG9pbnRzLFxuICBGaW5lVHVuaW5nSm9iQ2hlY2twb2ludCxcbiAgRmluZVR1bmluZ0pvYkNoZWNrcG9pbnRzUGFnZSxcbn0gZnJvbSAnLi9jaGVja3BvaW50cyc7XG5pbXBvcnQgeyBDdXJzb3JQYWdlLCB0eXBlIEN1cnNvclBhZ2VQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi9wYWdpbmF0aW9uJztcblxuZXhwb3J0IGNsYXNzIEpvYnMgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIGNoZWNrcG9pbnRzOiBDaGVja3BvaW50c0FQSS5DaGVja3BvaW50cyA9IG5ldyBDaGVja3BvaW50c0FQSS5DaGVja3BvaW50cyh0aGlzLl9jbGllbnQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmluZS10dW5pbmcgam9iIHdoaWNoIGJlZ2lucyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhIG5ldyBtb2RlbCBmcm9tXG4gICAqIGEgZ2l2ZW4gZGF0YXNldC5cbiAgICpcbiAgICogUmVzcG9uc2UgaW5jbHVkZXMgZGV0YWlscyBvZiB0aGUgZW5xdWV1ZWQgam9iIGluY2x1ZGluZyBqb2Igc3RhdHVzIGFuZCB0aGUgbmFtZVxuICAgKiBvZiB0aGUgZmluZS10dW5lZCBtb2RlbHMgb25jZSBjb21wbGV0ZS5cbiAgICpcbiAgICogW0xlYXJuIG1vcmUgYWJvdXQgZmluZS10dW5pbmddKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9maW5lLXR1bmluZylcbiAgICovXG4gIGNyZWF0ZShib2R5OiBKb2JDcmVhdGVQYXJhbXMsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEZpbmVUdW5pbmdKb2I+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoJy9maW5lX3R1bmluZy9qb2JzJywgeyBib2R5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpbmZvIGFib3V0IGEgZmluZS10dW5pbmcgam9iLlxuICAgKlxuICAgKiBbTGVhcm4gbW9yZSBhYm91dCBmaW5lLXR1bmluZ10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2ZpbmUtdHVuaW5nKVxuICAgKi9cbiAgcmV0cmlldmUoZmluZVR1bmluZ0pvYklkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEZpbmVUdW5pbmdKb2I+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldChgL2ZpbmVfdHVuaW5nL2pvYnMvJHtmaW5lVHVuaW5nSm9iSWR9YCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdCB5b3VyIG9yZ2FuaXphdGlvbidzIGZpbmUtdHVuaW5nIGpvYnNcbiAgICovXG4gIGxpc3QoXG4gICAgcXVlcnk/OiBKb2JMaXN0UGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPEZpbmVUdW5pbmdKb2JzUGFnZSwgRmluZVR1bmluZ0pvYj47XG4gIGxpc3Qob3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLlBhZ2VQcm9taXNlPEZpbmVUdW5pbmdKb2JzUGFnZSwgRmluZVR1bmluZ0pvYj47XG4gIGxpc3QoXG4gICAgcXVlcnk6IEpvYkxpc3RQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8RmluZVR1bmluZ0pvYnNQYWdlLCBGaW5lVHVuaW5nSm9iPiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0KHt9LCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdCgnL2ZpbmVfdHVuaW5nL2pvYnMnLCBGaW5lVHVuaW5nSm9ic1BhZ2UsIHsgcXVlcnksIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1tZWRpYXRlbHkgY2FuY2VsIGEgZmluZS10dW5lIGpvYi5cbiAgICovXG4gIGNhbmNlbChmaW5lVHVuaW5nSm9iSWQ6IHN0cmluZywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkFQSVByb21pc2U8RmluZVR1bmluZ0pvYj4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdChgL2ZpbmVfdHVuaW5nL2pvYnMvJHtmaW5lVHVuaW5nSm9iSWR9L2NhbmNlbGAsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdGF0dXMgdXBkYXRlcyBmb3IgYSBmaW5lLXR1bmluZyBqb2IuXG4gICAqL1xuICBsaXN0RXZlbnRzKFxuICAgIGZpbmVUdW5pbmdKb2JJZDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogSm9iTGlzdEV2ZW50c1BhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxGaW5lVHVuaW5nSm9iRXZlbnRzUGFnZSwgRmluZVR1bmluZ0pvYkV2ZW50PjtcbiAgbGlzdEV2ZW50cyhcbiAgICBmaW5lVHVuaW5nSm9iSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxGaW5lVHVuaW5nSm9iRXZlbnRzUGFnZSwgRmluZVR1bmluZ0pvYkV2ZW50PjtcbiAgbGlzdEV2ZW50cyhcbiAgICBmaW5lVHVuaW5nSm9iSWQ6IHN0cmluZyxcbiAgICBxdWVyeTogSm9iTGlzdEV2ZW50c1BhcmFtcyB8IENvcmUuUmVxdWVzdE9wdGlvbnMgPSB7fSxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxGaW5lVHVuaW5nSm9iRXZlbnRzUGFnZSwgRmluZVR1bmluZ0pvYkV2ZW50PiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0RXZlbnRzKGZpbmVUdW5pbmdKb2JJZCwge30sIHF1ZXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRBUElMaXN0KGAvZmluZV90dW5pbmcvam9icy8ke2ZpbmVUdW5pbmdKb2JJZH0vZXZlbnRzYCwgRmluZVR1bmluZ0pvYkV2ZW50c1BhZ2UsIHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmluZVR1bmluZ0pvYnNQYWdlIGV4dGVuZHMgQ3Vyc29yUGFnZTxGaW5lVHVuaW5nSm9iPiB7fVxuXG5leHBvcnQgY2xhc3MgRmluZVR1bmluZ0pvYkV2ZW50c1BhZ2UgZXh0ZW5kcyBDdXJzb3JQYWdlPEZpbmVUdW5pbmdKb2JFdmVudD4ge31cblxuLyoqXG4gKiBUaGUgYGZpbmVfdHVuaW5nLmpvYmAgb2JqZWN0IHJlcHJlc2VudHMgYSBmaW5lLXR1bmluZyBqb2IgdGhhdCBoYXMgYmVlbiBjcmVhdGVkXG4gKiB0aHJvdWdoIHRoZSBBUEkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmluZVR1bmluZ0pvYiB7XG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IGlkZW50aWZpZXIsIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGluIHRoZSBBUEkgZW5kcG9pbnRzLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgZmluZS10dW5pbmcgam9iIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgY3JlYXRlZF9hdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGb3IgZmluZS10dW5pbmcgam9icyB0aGF0IGhhdmUgYGZhaWxlZGAsIHRoaXMgd2lsbCBjb250YWluIG1vcmUgaW5mb3JtYXRpb24gb25cbiAgICogdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlLlxuICAgKi9cbiAgZXJyb3I6IEZpbmVUdW5pbmdKb2IuRXJyb3IgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmluZS10dW5lZCBtb2RlbCB0aGF0IGlzIGJlaW5nIGNyZWF0ZWQuIFRoZSB2YWx1ZSB3aWxsIGJlIG51bGxcbiAgICogaWYgdGhlIGZpbmUtdHVuaW5nIGpvYiBpcyBzdGlsbCBydW5uaW5nLlxuICAgKi9cbiAgZmluZV90dW5lZF9tb2RlbDogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgZmluZS10dW5pbmcgam9iIHdhcyBmaW5pc2hlZC4gVGhlXG4gICAqIHZhbHVlIHdpbGwgYmUgbnVsbCBpZiB0aGUgZmluZS10dW5pbmcgam9iIGlzIHN0aWxsIHJ1bm5pbmcuXG4gICAqL1xuICBmaW5pc2hlZF9hdDogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGh5cGVycGFyYW1ldGVycyB1c2VkIGZvciB0aGUgZmluZS10dW5pbmcgam9iLiBUaGlzIHZhbHVlIHdpbGwgb25seSBiZVxuICAgKiByZXR1cm5lZCB3aGVuIHJ1bm5pbmcgYHN1cGVydmlzZWRgIGpvYnMuXG4gICAqL1xuICBoeXBlcnBhcmFtZXRlcnM6IEZpbmVUdW5pbmdKb2IuSHlwZXJwYXJhbWV0ZXJzO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBtb2RlbCB0aGF0IGlzIGJlaW5nIGZpbmUtdHVuZWQuXG4gICAqL1xuICBtb2RlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHR5cGUsIHdoaWNoIGlzIGFsd2F5cyBcImZpbmVfdHVuaW5nLmpvYlwiLlxuICAgKi9cbiAgb2JqZWN0OiAnZmluZV90dW5pbmcuam9iJztcblxuICAvKipcbiAgICogVGhlIG9yZ2FuaXphdGlvbiB0aGF0IG93bnMgdGhlIGZpbmUtdHVuaW5nIGpvYi5cbiAgICovXG4gIG9yZ2FuaXphdGlvbl9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcGlsZWQgcmVzdWx0cyBmaWxlIElEKHMpIGZvciB0aGUgZmluZS10dW5pbmcgam9iLiBZb3UgY2FuIHJldHJpZXZlIHRoZVxuICAgKiByZXN1bHRzIHdpdGggdGhlXG4gICAqIFtGaWxlcyBBUEldKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMvcmV0cmlldmUtY29udGVudHMpLlxuICAgKi9cbiAgcmVzdWx0X2ZpbGVzOiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2VlZCB1c2VkIGZvciB0aGUgZmluZS10dW5pbmcgam9iLlxuICAgKi9cbiAgc2VlZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGZpbmUtdHVuaW5nIGpvYiwgd2hpY2ggY2FuIGJlIGVpdGhlclxuICAgKiBgdmFsaWRhdGluZ19maWxlc2AsIGBxdWV1ZWRgLCBgcnVubmluZ2AsIGBzdWNjZWVkZWRgLCBgZmFpbGVkYCwgb3IgYGNhbmNlbGxlZGAuXG4gICAqL1xuICBzdGF0dXM6ICd2YWxpZGF0aW5nX2ZpbGVzJyB8ICdxdWV1ZWQnIHwgJ3J1bm5pbmcnIHwgJ3N1Y2NlZWRlZCcgfCAnZmFpbGVkJyB8ICdjYW5jZWxsZWQnO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGJpbGxhYmxlIHRva2VucyBwcm9jZXNzZWQgYnkgdGhpcyBmaW5lLXR1bmluZyBqb2IuIFRoZSB2YWx1ZVxuICAgKiB3aWxsIGJlIG51bGwgaWYgdGhlIGZpbmUtdHVuaW5nIGpvYiBpcyBzdGlsbCBydW5uaW5nLlxuICAgKi9cbiAgdHJhaW5lZF90b2tlbnM6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIElEIHVzZWQgZm9yIHRyYWluaW5nLiBZb3UgY2FuIHJldHJpZXZlIHRoZSB0cmFpbmluZyBkYXRhIHdpdGggdGhlXG4gICAqIFtGaWxlcyBBUEldKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMvcmV0cmlldmUtY29udGVudHMpLlxuICAgKi9cbiAgdHJhaW5pbmdfZmlsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBJRCB1c2VkIGZvciB2YWxpZGF0aW9uLiBZb3UgY2FuIHJldHJpZXZlIHRoZSB2YWxpZGF0aW9uIHJlc3VsdHMgd2l0aFxuICAgKiB0aGVcbiAgICogW0ZpbGVzIEFQSV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcy9yZXRyaWV2ZS1jb250ZW50cykuXG4gICAqL1xuICB2YWxpZGF0aW9uX2ZpbGU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIGZpbmUtdHVuaW5nIGpvYiBpcyBlc3RpbWF0ZWQgdG9cbiAgICogZmluaXNoLiBUaGUgdmFsdWUgd2lsbCBiZSBudWxsIGlmIHRoZSBmaW5lLXR1bmluZyBqb2IgaXMgbm90IHJ1bm5pbmcuXG4gICAqL1xuICBlc3RpbWF0ZWRfZmluaXNoPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGludGVncmF0aW9ucyB0byBlbmFibGUgZm9yIHRoaXMgZmluZS10dW5pbmcgam9iLlxuICAgKi9cbiAgaW50ZWdyYXRpb25zPzogQXJyYXk8RmluZVR1bmluZ0pvYldhbmRiSW50ZWdyYXRpb25PYmplY3Q+IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1ldGhvZCB1c2VkIGZvciBmaW5lLXR1bmluZy5cbiAgICovXG4gIG1ldGhvZD86IEZpbmVUdW5pbmdKb2IuTWV0aG9kO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpbmVUdW5pbmdKb2Ige1xuICAvKipcbiAgICogRm9yIGZpbmUtdHVuaW5nIGpvYnMgdGhhdCBoYXZlIGBmYWlsZWRgLCB0aGlzIHdpbGwgY29udGFpbiBtb3JlIGluZm9ybWF0aW9uIG9uXG4gICAqIHRoZSBjYXVzZSBvZiB0aGUgZmFpbHVyZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRXJyb3Ige1xuICAgIC8qKlxuICAgICAqIEEgbWFjaGluZS1yZWFkYWJsZSBlcnJvciBjb2RlLlxuICAgICAqL1xuICAgIGNvZGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGFyYW1ldGVyIHRoYXQgd2FzIGludmFsaWQsIHVzdWFsbHkgYHRyYWluaW5nX2ZpbGVgIG9yIGB2YWxpZGF0aW9uX2ZpbGVgLlxuICAgICAqIFRoaXMgZmllbGQgd2lsbCBiZSBudWxsIGlmIHRoZSBmYWlsdXJlIHdhcyBub3QgcGFyYW1ldGVyLXNwZWNpZmljLlxuICAgICAqL1xuICAgIHBhcmFtOiBzdHJpbmcgfCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBoeXBlcnBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIGZpbmUtdHVuaW5nIGpvYi4gVGhpcyB2YWx1ZSB3aWxsIG9ubHkgYmVcbiAgICogcmV0dXJuZWQgd2hlbiBydW5uaW5nIGBzdXBlcnZpc2VkYCBqb2JzLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBIeXBlcnBhcmFtZXRlcnMge1xuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBleGFtcGxlcyBpbiBlYWNoIGJhdGNoLiBBIGxhcmdlciBiYXRjaCBzaXplIG1lYW5zIHRoYXQgbW9kZWxcbiAgICAgKiBwYXJhbWV0ZXJzIGFyZSB1cGRhdGVkIGxlc3MgZnJlcXVlbnRseSwgYnV0IHdpdGggbG93ZXIgdmFyaWFuY2UuXG4gICAgICovXG4gICAgYmF0Y2hfc2l6ZT86ICdhdXRvJyB8IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNjYWxpbmcgZmFjdG9yIGZvciB0aGUgbGVhcm5pbmcgcmF0ZS4gQSBzbWFsbGVyIGxlYXJuaW5nIHJhdGUgbWF5IGJlIHVzZWZ1bCB0b1xuICAgICAqIGF2b2lkIG92ZXJmaXR0aW5nLlxuICAgICAqL1xuICAgIGxlYXJuaW5nX3JhdGVfbXVsdGlwbGllcj86ICdhdXRvJyB8IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgZXBvY2hzIHRvIHRyYWluIHRoZSBtb2RlbCBmb3IuIEFuIGVwb2NoIHJlZmVycyB0byBvbmUgZnVsbCBjeWNsZVxuICAgICAqIHRocm91Z2ggdGhlIHRyYWluaW5nIGRhdGFzZXQuXG4gICAgICovXG4gICAgbl9lcG9jaHM/OiAnYXV0bycgfCBudW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldGhvZCB1c2VkIGZvciBmaW5lLXR1bmluZy5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWV0aG9kIHtcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgRFBPIGZpbmUtdHVuaW5nIG1ldGhvZC5cbiAgICAgKi9cbiAgICBkcG8/OiBNZXRob2QuRHBvO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHN1cGVydmlzZWQgZmluZS10dW5pbmcgbWV0aG9kLlxuICAgICAqL1xuICAgIHN1cGVydmlzZWQ/OiBNZXRob2QuU3VwZXJ2aXNlZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIG1ldGhvZC4gSXMgZWl0aGVyIGBzdXBlcnZpc2VkYCBvciBgZHBvYC5cbiAgICAgKi9cbiAgICB0eXBlPzogJ3N1cGVydmlzZWQnIHwgJ2Rwbyc7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIE1ldGhvZCB7XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIERQTyBmaW5lLXR1bmluZyBtZXRob2QuXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBEcG8ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgaHlwZXJwYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBmaW5lLXR1bmluZyBqb2IuXG4gICAgICAgKi9cbiAgICAgIGh5cGVycGFyYW1ldGVycz86IERwby5IeXBlcnBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgZXhwb3J0IG5hbWVzcGFjZSBEcG8ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgaHlwZXJwYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBmaW5lLXR1bmluZyBqb2IuXG4gICAgICAgKi9cbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSHlwZXJwYXJhbWV0ZXJzIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiBleGFtcGxlcyBpbiBlYWNoIGJhdGNoLiBBIGxhcmdlciBiYXRjaCBzaXplIG1lYW5zIHRoYXQgbW9kZWxcbiAgICAgICAgICogcGFyYW1ldGVycyBhcmUgdXBkYXRlZCBsZXNzIGZyZXF1ZW50bHksIGJ1dCB3aXRoIGxvd2VyIHZhcmlhbmNlLlxuICAgICAgICAgKi9cbiAgICAgICAgYmF0Y2hfc2l6ZT86ICdhdXRvJyB8IG51bWJlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGJldGEgdmFsdWUgZm9yIHRoZSBEUE8gbWV0aG9kLiBBIGhpZ2hlciBiZXRhIHZhbHVlIHdpbGwgaW5jcmVhc2UgdGhlIHdlaWdodFxuICAgICAgICAgKiBvZiB0aGUgcGVuYWx0eSBiZXR3ZWVuIHRoZSBwb2xpY3kgYW5kIHJlZmVyZW5jZSBtb2RlbC5cbiAgICAgICAgICovXG4gICAgICAgIGJldGE/OiAnYXV0bycgfCBudW1iZXI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNjYWxpbmcgZmFjdG9yIGZvciB0aGUgbGVhcm5pbmcgcmF0ZS4gQSBzbWFsbGVyIGxlYXJuaW5nIHJhdGUgbWF5IGJlIHVzZWZ1bCB0b1xuICAgICAgICAgKiBhdm9pZCBvdmVyZml0dGluZy5cbiAgICAgICAgICovXG4gICAgICAgIGxlYXJuaW5nX3JhdGVfbXVsdGlwbGllcj86ICdhdXRvJyB8IG51bWJlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG51bWJlciBvZiBlcG9jaHMgdG8gdHJhaW4gdGhlIG1vZGVsIGZvci4gQW4gZXBvY2ggcmVmZXJzIHRvIG9uZSBmdWxsIGN5Y2xlXG4gICAgICAgICAqIHRocm91Z2ggdGhlIHRyYWluaW5nIGRhdGFzZXQuXG4gICAgICAgICAqL1xuICAgICAgICBuX2Vwb2Nocz86ICdhdXRvJyB8IG51bWJlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgc3VwZXJ2aXNlZCBmaW5lLXR1bmluZyBtZXRob2QuXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBTdXBlcnZpc2VkIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGh5cGVycGFyYW1ldGVycyB1c2VkIGZvciB0aGUgZmluZS10dW5pbmcgam9iLlxuICAgICAgICovXG4gICAgICBoeXBlcnBhcmFtZXRlcnM/OiBTdXBlcnZpc2VkLkh5cGVycGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBleHBvcnQgbmFtZXNwYWNlIFN1cGVydmlzZWQge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgaHlwZXJwYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBmaW5lLXR1bmluZyBqb2IuXG4gICAgICAgKi9cbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgSHlwZXJwYXJhbWV0ZXJzIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiBleGFtcGxlcyBpbiBlYWNoIGJhdGNoLiBBIGxhcmdlciBiYXRjaCBzaXplIG1lYW5zIHRoYXQgbW9kZWxcbiAgICAgICAgICogcGFyYW1ldGVycyBhcmUgdXBkYXRlZCBsZXNzIGZyZXF1ZW50bHksIGJ1dCB3aXRoIGxvd2VyIHZhcmlhbmNlLlxuICAgICAgICAgKi9cbiAgICAgICAgYmF0Y2hfc2l6ZT86ICdhdXRvJyB8IG51bWJlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogU2NhbGluZyBmYWN0b3IgZm9yIHRoZSBsZWFybmluZyByYXRlLiBBIHNtYWxsZXIgbGVhcm5pbmcgcmF0ZSBtYXkgYmUgdXNlZnVsIHRvXG4gICAgICAgICAqIGF2b2lkIG92ZXJmaXR0aW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgbGVhcm5pbmdfcmF0ZV9tdWx0aXBsaWVyPzogJ2F1dG8nIHwgbnVtYmVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIGVwb2NocyB0byB0cmFpbiB0aGUgbW9kZWwgZm9yLiBBbiBlcG9jaCByZWZlcnMgdG8gb25lIGZ1bGwgY3ljbGVcbiAgICAgICAgICogdGhyb3VnaCB0aGUgdHJhaW5pbmcgZGF0YXNldC5cbiAgICAgICAgICovXG4gICAgICAgIG5fZXBvY2hzPzogJ2F1dG8nIHwgbnVtYmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZpbmUtdHVuaW5nIGpvYiBldmVudCBvYmplY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5lVHVuaW5nSm9iRXZlbnQge1xuICAvKipcbiAgICogVGhlIG9iamVjdCBpZGVudGlmaWVyLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgZmluZS10dW5pbmcgam9iIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgY3JlYXRlZF9hdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGxldmVsIG9mIHRoZSBldmVudC5cbiAgICovXG4gIGxldmVsOiAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSwgd2hpY2ggaXMgYWx3YXlzIFwiZmluZV90dW5pbmcuam9iLmV2ZW50XCIuXG4gICAqL1xuICBvYmplY3Q6ICdmaW5lX3R1bmluZy5qb2IuZXZlbnQnO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50LlxuICAgKi9cbiAgZGF0YT86IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGV2ZW50LlxuICAgKi9cbiAgdHlwZT86ICdtZXNzYWdlJyB8ICdtZXRyaWNzJztcbn1cblxuZXhwb3J0IHR5cGUgRmluZVR1bmluZ0pvYkludGVncmF0aW9uID0gRmluZVR1bmluZ0pvYldhbmRiSW50ZWdyYXRpb25PYmplY3Q7XG5cbi8qKlxuICogVGhlIHNldHRpbmdzIGZvciB5b3VyIGludGVncmF0aW9uIHdpdGggV2VpZ2h0cyBhbmQgQmlhc2VzLiBUaGlzIHBheWxvYWRcbiAqIHNwZWNpZmllcyB0aGUgcHJvamVjdCB0aGF0IG1ldHJpY3Mgd2lsbCBiZSBzZW50IHRvLiBPcHRpb25hbGx5LCB5b3UgY2FuIHNldCBhblxuICogZXhwbGljaXQgZGlzcGxheSBuYW1lIGZvciB5b3VyIHJ1biwgYWRkIHRhZ3MgdG8geW91ciBydW4sIGFuZCBzZXQgYSBkZWZhdWx0XG4gKiBlbnRpdHkgKHRlYW0sIHVzZXJuYW1lLCBldGMpIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHJ1bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5lVHVuaW5nSm9iV2FuZGJJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IHRoZSBuZXcgcnVuIHdpbGwgYmUgY3JlYXRlZCB1bmRlci5cbiAgICovXG4gIHByb2plY3Q6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVudGl0eSB0byB1c2UgZm9yIHRoZSBydW4uIFRoaXMgYWxsb3dzIHlvdSB0byBzZXQgdGhlIHRlYW0gb3IgdXNlcm5hbWUgb2ZcbiAgICogdGhlIFdhbmRCIHVzZXIgdGhhdCB5b3Ugd291bGQgbGlrZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJ1bi4gSWYgbm90IHNldCwgdGhlXG4gICAqIGRlZmF1bHQgZW50aXR5IGZvciB0aGUgcmVnaXN0ZXJlZCBXYW5kQiBBUEkga2V5IGlzIHVzZWQuXG4gICAqL1xuICBlbnRpdHk/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGRpc3BsYXkgbmFtZSB0byBzZXQgZm9yIHRoZSBydW4uIElmIG5vdCBzZXQsIHdlIHdpbGwgdXNlIHRoZSBKb2IgSUQgYXMgdGhlXG4gICAqIG5hbWUuXG4gICAqL1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHRhZ3MgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgcnVuLiBUaGVzZSB0YWdzIGFyZSBwYXNzZWRcbiAgICogdGhyb3VnaCBkaXJlY3RseSB0byBXYW5kQi4gU29tZSBkZWZhdWx0IHRhZ3MgYXJlIGdlbmVyYXRlZCBieSBPcGVuQUk6XG4gICAqIFwib3BlbmFpL2ZpbmV0dW5lXCIsIFwib3BlbmFpL3tiYXNlLW1vZGVsfVwiLCBcIm9wZW5haS97ZnRqb2ItYWJjZGVmfVwiLlxuICAgKi9cbiAgdGFncz86IEFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZVR1bmluZ0pvYldhbmRiSW50ZWdyYXRpb25PYmplY3Qge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGludGVncmF0aW9uIGJlaW5nIGVuYWJsZWQgZm9yIHRoZSBmaW5lLXR1bmluZyBqb2JcbiAgICovXG4gIHR5cGU6ICd3YW5kYic7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBmb3IgeW91ciBpbnRlZ3JhdGlvbiB3aXRoIFdlaWdodHMgYW5kIEJpYXNlcy4gVGhpcyBwYXlsb2FkXG4gICAqIHNwZWNpZmllcyB0aGUgcHJvamVjdCB0aGF0IG1ldHJpY3Mgd2lsbCBiZSBzZW50IHRvLiBPcHRpb25hbGx5LCB5b3UgY2FuIHNldCBhblxuICAgKiBleHBsaWNpdCBkaXNwbGF5IG5hbWUgZm9yIHlvdXIgcnVuLCBhZGQgdGFncyB0byB5b3VyIHJ1biwgYW5kIHNldCBhIGRlZmF1bHRcbiAgICogZW50aXR5ICh0ZWFtLCB1c2VybmFtZSwgZXRjKSB0byBiZSBhc3NvY2lhdGVkIHdpdGggeW91ciBydW4uXG4gICAqL1xuICB3YW5kYjogRmluZVR1bmluZ0pvYldhbmRiSW50ZWdyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSm9iQ3JlYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtb2RlbCB0byBmaW5lLXR1bmUuIFlvdSBjYW4gc2VsZWN0IG9uZSBvZiB0aGVcbiAgICogW3N1cHBvcnRlZCBtb2RlbHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9maW5lLXR1bmluZyN3aGljaC1tb2RlbHMtY2FuLWJlLWZpbmUtdHVuZWQpLlxuICAgKi9cbiAgbW9kZWw6IChzdHJpbmcgJiB7fSkgfCAnYmFiYmFnZS0wMDInIHwgJ2RhdmluY2ktMDAyJyB8ICdncHQtMy41LXR1cmJvJyB8ICdncHQtNG8tbWluaSc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiB1cGxvYWRlZCBmaWxlIHRoYXQgY29udGFpbnMgdHJhaW5pbmcgZGF0YS5cbiAgICpcbiAgICogU2VlIFt1cGxvYWQgZmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcy9jcmVhdGUpXG4gICAqIGZvciBob3cgdG8gdXBsb2FkIGEgZmlsZS5cbiAgICpcbiAgICogWW91ciBkYXRhc2V0IG11c3QgYmUgZm9ybWF0dGVkIGFzIGEgSlNPTkwgZmlsZS4gQWRkaXRpb25hbGx5LCB5b3UgbXVzdCB1cGxvYWRcbiAgICogeW91ciBmaWxlIHdpdGggdGhlIHB1cnBvc2UgYGZpbmUtdHVuZWAuXG4gICAqXG4gICAqIFRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBzaG91bGQgZGlmZmVyIGRlcGVuZGluZyBvbiBpZiB0aGUgbW9kZWwgdXNlcyB0aGVcbiAgICogW2NoYXRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmluZS10dW5pbmcvY2hhdC1pbnB1dCksXG4gICAqIFtjb21wbGV0aW9uc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maW5lLXR1bmluZy9jb21wbGV0aW9ucy1pbnB1dClcbiAgICogZm9ybWF0LCBvciBpZiB0aGUgZmluZS10dW5pbmcgbWV0aG9kIHVzZXMgdGhlXG4gICAqIFtwcmVmZXJlbmNlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbmUtdHVuaW5nL3ByZWZlcmVuY2UtaW5wdXQpXG4gICAqIGZvcm1hdC5cbiAgICpcbiAgICogU2VlIHRoZSBbZmluZS10dW5pbmcgZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9maW5lLXR1bmluZylcbiAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIHRyYWluaW5nX2ZpbGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGh5cGVycGFyYW1ldGVycyB1c2VkIGZvciB0aGUgZmluZS10dW5pbmcgam9iLiBUaGlzIHZhbHVlIGlzIG5vdyBkZXByZWNhdGVkXG4gICAqIGluIGZhdm9yIG9mIGBtZXRob2RgLCBhbmQgc2hvdWxkIGJlIHBhc3NlZCBpbiB1bmRlciB0aGUgYG1ldGhvZGAgcGFyYW1ldGVyLlxuICAgKi9cbiAgaHlwZXJwYXJhbWV0ZXJzPzogSm9iQ3JlYXRlUGFyYW1zLkh5cGVycGFyYW1ldGVycztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGludGVncmF0aW9ucyB0byBlbmFibGUgZm9yIHlvdXIgZmluZS10dW5pbmcgam9iLlxuICAgKi9cbiAgaW50ZWdyYXRpb25zPzogQXJyYXk8Sm9iQ3JlYXRlUGFyYW1zLkludGVncmF0aW9uPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdXNlZCBmb3IgZmluZS10dW5pbmcuXG4gICAqL1xuICBtZXRob2Q/OiBKb2JDcmVhdGVQYXJhbXMuTWV0aG9kO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VlZCBjb250cm9scyB0aGUgcmVwcm9kdWNpYmlsaXR5IG9mIHRoZSBqb2IuIFBhc3NpbmcgaW4gdGhlIHNhbWUgc2VlZCBhbmRcbiAgICogam9iIHBhcmFtZXRlcnMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgcmVzdWx0cywgYnV0IG1heSBkaWZmZXIgaW4gcmFyZSBjYXNlcy4gSWZcbiAgICogYSBzZWVkIGlzIG5vdCBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgeW91LlxuICAgKi9cbiAgc2VlZD86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIG9mIHVwIHRvIDY0IGNoYXJhY3RlcnMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHlvdXIgZmluZS10dW5lZCBtb2RlbFxuICAgKiBuYW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgYSBgc3VmZml4YCBvZiBcImN1c3RvbS1tb2RlbC1uYW1lXCIgd291bGQgcHJvZHVjZSBhIG1vZGVsIG5hbWUgbGlrZVxuICAgKiBgZnQ6Z3B0LTRvLW1pbmk6b3BlbmFpOmN1c3RvbS1tb2RlbC1uYW1lOjdwNGxVUmVsYC5cbiAgICovXG4gIHN1ZmZpeD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiB1cGxvYWRlZCBmaWxlIHRoYXQgY29udGFpbnMgdmFsaWRhdGlvbiBkYXRhLlxuICAgKlxuICAgKiBJZiB5b3UgcHJvdmlkZSB0aGlzIGZpbGUsIHRoZSBkYXRhIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdmFsaWRhdGlvbiBtZXRyaWNzXG4gICAqIHBlcmlvZGljYWxseSBkdXJpbmcgZmluZS10dW5pbmcuIFRoZXNlIG1ldHJpY3MgY2FuIGJlIHZpZXdlZCBpbiB0aGUgZmluZS10dW5pbmdcbiAgICogcmVzdWx0cyBmaWxlLiBUaGUgc2FtZSBkYXRhIHNob3VsZCBub3QgYmUgcHJlc2VudCBpbiBib3RoIHRyYWluIGFuZCB2YWxpZGF0aW9uXG4gICAqIGZpbGVzLlxuICAgKlxuICAgKiBZb3VyIGRhdGFzZXQgbXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBKU09OTCBmaWxlLiBZb3UgbXVzdCB1cGxvYWQgeW91ciBmaWxlIHdpdGhcbiAgICogdGhlIHB1cnBvc2UgYGZpbmUtdHVuZWAuXG4gICAqXG4gICAqIFNlZSB0aGUgW2ZpbmUtdHVuaW5nIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvZmluZS10dW5pbmcpXG4gICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICB2YWxpZGF0aW9uX2ZpbGU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEpvYkNyZWF0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgaHlwZXJwYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBmaW5lLXR1bmluZyBqb2IuIFRoaXMgdmFsdWUgaXMgbm93XG4gICAqIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYG1ldGhvZGAsIGFuZCBzaG91bGQgYmUgcGFzc2VkIGluIHVuZGVyIHRoZSBgbWV0aG9kYFxuICAgKiBwYXJhbWV0ZXIuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEh5cGVycGFyYW1ldGVycyB7XG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIGV4YW1wbGVzIGluIGVhY2ggYmF0Y2guIEEgbGFyZ2VyIGJhdGNoIHNpemUgbWVhbnMgdGhhdCBtb2RlbFxuICAgICAqIHBhcmFtZXRlcnMgYXJlIHVwZGF0ZWQgbGVzcyBmcmVxdWVudGx5LCBidXQgd2l0aCBsb3dlciB2YXJpYW5jZS5cbiAgICAgKi9cbiAgICBiYXRjaF9zaXplPzogJ2F1dG8nIHwgbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2NhbGluZyBmYWN0b3IgZm9yIHRoZSBsZWFybmluZyByYXRlLiBBIHNtYWxsZXIgbGVhcm5pbmcgcmF0ZSBtYXkgYmUgdXNlZnVsIHRvXG4gICAgICogYXZvaWQgb3ZlcmZpdHRpbmcuXG4gICAgICovXG4gICAgbGVhcm5pbmdfcmF0ZV9tdWx0aXBsaWVyPzogJ2F1dG8nIHwgbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBlcG9jaHMgdG8gdHJhaW4gdGhlIG1vZGVsIGZvci4gQW4gZXBvY2ggcmVmZXJzIHRvIG9uZSBmdWxsIGN5Y2xlXG4gICAgICogdGhyb3VnaCB0aGUgdHJhaW5pbmcgZGF0YXNldC5cbiAgICAgKi9cbiAgICBuX2Vwb2Nocz86ICdhdXRvJyB8IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGludGVncmF0aW9uIHRvIGVuYWJsZS4gQ3VycmVudGx5LCBvbmx5IFwid2FuZGJcIiAoV2VpZ2h0cyBhbmQgQmlhc2VzKVxuICAgICAqIGlzIHN1cHBvcnRlZC5cbiAgICAgKi9cbiAgICB0eXBlOiAnd2FuZGInO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNldHRpbmdzIGZvciB5b3VyIGludGVncmF0aW9uIHdpdGggV2VpZ2h0cyBhbmQgQmlhc2VzLiBUaGlzIHBheWxvYWRcbiAgICAgKiBzcGVjaWZpZXMgdGhlIHByb2plY3QgdGhhdCBtZXRyaWNzIHdpbGwgYmUgc2VudCB0by4gT3B0aW9uYWxseSwgeW91IGNhbiBzZXQgYW5cbiAgICAgKiBleHBsaWNpdCBkaXNwbGF5IG5hbWUgZm9yIHlvdXIgcnVuLCBhZGQgdGFncyB0byB5b3VyIHJ1biwgYW5kIHNldCBhIGRlZmF1bHRcbiAgICAgKiBlbnRpdHkgKHRlYW0sIHVzZXJuYW1lLCBldGMpIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHJ1bi5cbiAgICAgKi9cbiAgICB3YW5kYjogSW50ZWdyYXRpb24uV2FuZGI7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIEludGVncmF0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2V0dGluZ3MgZm9yIHlvdXIgaW50ZWdyYXRpb24gd2l0aCBXZWlnaHRzIGFuZCBCaWFzZXMuIFRoaXMgcGF5bG9hZFxuICAgICAqIHNwZWNpZmllcyB0aGUgcHJvamVjdCB0aGF0IG1ldHJpY3Mgd2lsbCBiZSBzZW50IHRvLiBPcHRpb25hbGx5LCB5b3UgY2FuIHNldCBhblxuICAgICAqIGV4cGxpY2l0IGRpc3BsYXkgbmFtZSBmb3IgeW91ciBydW4sIGFkZCB0YWdzIHRvIHlvdXIgcnVuLCBhbmQgc2V0IGEgZGVmYXVsdFxuICAgICAqIGVudGl0eSAodGVhbSwgdXNlcm5hbWUsIGV0YykgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgcnVuLlxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgV2FuZGIge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IHRoZSBuZXcgcnVuIHdpbGwgYmUgY3JlYXRlZCB1bmRlci5cbiAgICAgICAqL1xuICAgICAgcHJvamVjdDogc3RyaW5nO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBlbnRpdHkgdG8gdXNlIGZvciB0aGUgcnVuLiBUaGlzIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB0ZWFtIG9yIHVzZXJuYW1lIG9mXG4gICAgICAgKiB0aGUgV2FuZEIgdXNlciB0aGF0IHlvdSB3b3VsZCBsaWtlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcnVuLiBJZiBub3Qgc2V0LCB0aGVcbiAgICAgICAqIGRlZmF1bHQgZW50aXR5IGZvciB0aGUgcmVnaXN0ZXJlZCBXYW5kQiBBUEkga2V5IGlzIHVzZWQuXG4gICAgICAgKi9cbiAgICAgIGVudGl0eT86IHN0cmluZyB8IG51bGw7XG5cbiAgICAgIC8qKlxuICAgICAgICogQSBkaXNwbGF5IG5hbWUgdG8gc2V0IGZvciB0aGUgcnVuLiBJZiBub3Qgc2V0LCB3ZSB3aWxsIHVzZSB0aGUgSm9iIElEIGFzIHRoZVxuICAgICAgICogbmFtZS5cbiAgICAgICAqL1xuICAgICAgbmFtZT86IHN0cmluZyB8IG51bGw7XG5cbiAgICAgIC8qKlxuICAgICAgICogQSBsaXN0IG9mIHRhZ3MgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgcnVuLiBUaGVzZSB0YWdzIGFyZSBwYXNzZWRcbiAgICAgICAqIHRocm91Z2ggZGlyZWN0bHkgdG8gV2FuZEIuIFNvbWUgZGVmYXVsdCB0YWdzIGFyZSBnZW5lcmF0ZWQgYnkgT3BlbkFJOlxuICAgICAgICogXCJvcGVuYWkvZmluZXR1bmVcIiwgXCJvcGVuYWkve2Jhc2UtbW9kZWx9XCIsIFwib3BlbmFpL3tmdGpvYi1hYmNkZWZ9XCIuXG4gICAgICAgKi9cbiAgICAgIHRhZ3M/OiBBcnJheTxzdHJpbmc+O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIHVzZWQgZm9yIGZpbmUtdHVuaW5nLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBNZXRob2Qge1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBEUE8gZmluZS10dW5pbmcgbWV0aG9kLlxuICAgICAqL1xuICAgIGRwbz86IE1ldGhvZC5EcG87XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgc3VwZXJ2aXNlZCBmaW5lLXR1bmluZyBtZXRob2QuXG4gICAgICovXG4gICAgc3VwZXJ2aXNlZD86IE1ldGhvZC5TdXBlcnZpc2VkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgbWV0aG9kLiBJcyBlaXRoZXIgYHN1cGVydmlzZWRgIG9yIGBkcG9gLlxuICAgICAqL1xuICAgIHR5cGU/OiAnc3VwZXJ2aXNlZCcgfCAnZHBvJztcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgTWV0aG9kIHtcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgRFBPIGZpbmUtdHVuaW5nIG1ldGhvZC5cbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIERwbyB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBoeXBlcnBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIGZpbmUtdHVuaW5nIGpvYi5cbiAgICAgICAqL1xuICAgICAgaHlwZXJwYXJhbWV0ZXJzPzogRHBvLkh5cGVycGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBleHBvcnQgbmFtZXNwYWNlIERwbyB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBoeXBlcnBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIGZpbmUtdHVuaW5nIGpvYi5cbiAgICAgICAqL1xuICAgICAgZXhwb3J0IGludGVyZmFjZSBIeXBlcnBhcmFtZXRlcnMge1xuICAgICAgICAvKipcbiAgICAgICAgICogTnVtYmVyIG9mIGV4YW1wbGVzIGluIGVhY2ggYmF0Y2guIEEgbGFyZ2VyIGJhdGNoIHNpemUgbWVhbnMgdGhhdCBtb2RlbFxuICAgICAgICAgKiBwYXJhbWV0ZXJzIGFyZSB1cGRhdGVkIGxlc3MgZnJlcXVlbnRseSwgYnV0IHdpdGggbG93ZXIgdmFyaWFuY2UuXG4gICAgICAgICAqL1xuICAgICAgICBiYXRjaF9zaXplPzogJ2F1dG8nIHwgbnVtYmVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYmV0YSB2YWx1ZSBmb3IgdGhlIERQTyBtZXRob2QuIEEgaGlnaGVyIGJldGEgdmFsdWUgd2lsbCBpbmNyZWFzZSB0aGUgd2VpZ2h0XG4gICAgICAgICAqIG9mIHRoZSBwZW5hbHR5IGJldHdlZW4gdGhlIHBvbGljeSBhbmQgcmVmZXJlbmNlIG1vZGVsLlxuICAgICAgICAgKi9cbiAgICAgICAgYmV0YT86ICdhdXRvJyB8IG51bWJlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogU2NhbGluZyBmYWN0b3IgZm9yIHRoZSBsZWFybmluZyByYXRlLiBBIHNtYWxsZXIgbGVhcm5pbmcgcmF0ZSBtYXkgYmUgdXNlZnVsIHRvXG4gICAgICAgICAqIGF2b2lkIG92ZXJmaXR0aW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgbGVhcm5pbmdfcmF0ZV9tdWx0aXBsaWVyPzogJ2F1dG8nIHwgbnVtYmVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIGVwb2NocyB0byB0cmFpbiB0aGUgbW9kZWwgZm9yLiBBbiBlcG9jaCByZWZlcnMgdG8gb25lIGZ1bGwgY3ljbGVcbiAgICAgICAgICogdGhyb3VnaCB0aGUgdHJhaW5pbmcgZGF0YXNldC5cbiAgICAgICAgICovXG4gICAgICAgIG5fZXBvY2hzPzogJ2F1dG8nIHwgbnVtYmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdXBlcnZpc2VkIGZpbmUtdHVuaW5nIG1ldGhvZC5cbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIFN1cGVydmlzZWQge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgaHlwZXJwYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBmaW5lLXR1bmluZyBqb2IuXG4gICAgICAgKi9cbiAgICAgIGh5cGVycGFyYW1ldGVycz86IFN1cGVydmlzZWQuSHlwZXJwYXJhbWV0ZXJzO1xuICAgIH1cblxuICAgIGV4cG9ydCBuYW1lc3BhY2UgU3VwZXJ2aXNlZCB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBoeXBlcnBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIGZpbmUtdHVuaW5nIGpvYi5cbiAgICAgICAqL1xuICAgICAgZXhwb3J0IGludGVyZmFjZSBIeXBlcnBhcmFtZXRlcnMge1xuICAgICAgICAvKipcbiAgICAgICAgICogTnVtYmVyIG9mIGV4YW1wbGVzIGluIGVhY2ggYmF0Y2guIEEgbGFyZ2VyIGJhdGNoIHNpemUgbWVhbnMgdGhhdCBtb2RlbFxuICAgICAgICAgKiBwYXJhbWV0ZXJzIGFyZSB1cGRhdGVkIGxlc3MgZnJlcXVlbnRseSwgYnV0IHdpdGggbG93ZXIgdmFyaWFuY2UuXG4gICAgICAgICAqL1xuICAgICAgICBiYXRjaF9zaXplPzogJ2F1dG8nIHwgbnVtYmVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTY2FsaW5nIGZhY3RvciBmb3IgdGhlIGxlYXJuaW5nIHJhdGUuIEEgc21hbGxlciBsZWFybmluZyByYXRlIG1heSBiZSB1c2VmdWwgdG9cbiAgICAgICAgICogYXZvaWQgb3ZlcmZpdHRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICBsZWFybmluZ19yYXRlX211bHRpcGxpZXI/OiAnYXV0bycgfCBudW1iZXI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBudW1iZXIgb2YgZXBvY2hzIHRvIHRyYWluIHRoZSBtb2RlbCBmb3IuIEFuIGVwb2NoIHJlZmVycyB0byBvbmUgZnVsbCBjeWNsZVxuICAgICAgICAgKiB0aHJvdWdoIHRoZSB0cmFpbmluZyBkYXRhc2V0LlxuICAgICAgICAgKi9cbiAgICAgICAgbl9lcG9jaHM/OiAnYXV0bycgfCBudW1iZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSm9iTGlzdFBhcmFtcyBleHRlbmRzIEN1cnNvclBhZ2VQYXJhbXMge31cblxuZXhwb3J0IGludGVyZmFjZSBKb2JMaXN0RXZlbnRzUGFyYW1zIGV4dGVuZHMgQ3Vyc29yUGFnZVBhcmFtcyB7fVxuXG5Kb2JzLkZpbmVUdW5pbmdKb2JzUGFnZSA9IEZpbmVUdW5pbmdKb2JzUGFnZTtcbkpvYnMuRmluZVR1bmluZ0pvYkV2ZW50c1BhZ2UgPSBGaW5lVHVuaW5nSm9iRXZlbnRzUGFnZTtcbkpvYnMuQ2hlY2twb2ludHMgPSBDaGVja3BvaW50cztcbkpvYnMuRmluZVR1bmluZ0pvYkNoZWNrcG9pbnRzUGFnZSA9IEZpbmVUdW5pbmdKb2JDaGVja3BvaW50c1BhZ2U7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBKb2JzIHtcbiAgZXhwb3J0IHtcbiAgICB0eXBlIEZpbmVUdW5pbmdKb2IgYXMgRmluZVR1bmluZ0pvYixcbiAgICB0eXBlIEZpbmVUdW5pbmdKb2JFdmVudCBhcyBGaW5lVHVuaW5nSm9iRXZlbnQsXG4gICAgdHlwZSBGaW5lVHVuaW5nSm9iSW50ZWdyYXRpb24gYXMgRmluZVR1bmluZ0pvYkludGVncmF0aW9uLFxuICAgIHR5cGUgRmluZVR1bmluZ0pvYldhbmRiSW50ZWdyYXRpb24gYXMgRmluZVR1bmluZ0pvYldhbmRiSW50ZWdyYXRpb24sXG4gICAgdHlwZSBGaW5lVHVuaW5nSm9iV2FuZGJJbnRlZ3JhdGlvbk9iamVjdCBhcyBGaW5lVHVuaW5nSm9iV2FuZGJJbnRlZ3JhdGlvbk9iamVjdCxcbiAgICBGaW5lVHVuaW5nSm9ic1BhZ2UgYXMgRmluZVR1bmluZ0pvYnNQYWdlLFxuICAgIEZpbmVUdW5pbmdKb2JFdmVudHNQYWdlIGFzIEZpbmVUdW5pbmdKb2JFdmVudHNQYWdlLFxuICAgIHR5cGUgSm9iQ3JlYXRlUGFyYW1zIGFzIEpvYkNyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIEpvYkxpc3RQYXJhbXMgYXMgSm9iTGlzdFBhcmFtcyxcbiAgICB0eXBlIEpvYkxpc3RFdmVudHNQYXJhbXMgYXMgSm9iTGlzdEV2ZW50c1BhcmFtcyxcbiAgfTtcblxuICBleHBvcnQge1xuICAgIENoZWNrcG9pbnRzIGFzIENoZWNrcG9pbnRzLFxuICAgIHR5cGUgRmluZVR1bmluZ0pvYkNoZWNrcG9pbnQgYXMgRmluZVR1bmluZ0pvYkNoZWNrcG9pbnQsXG4gICAgRmluZVR1bmluZ0pvYkNoZWNrcG9pbnRzUGFnZSBhcyBGaW5lVHVuaW5nSm9iQ2hlY2twb2ludHNQYWdlLFxuICAgIHR5cGUgQ2hlY2twb2ludExpc3RQYXJhbXMgYXMgQ2hlY2twb2ludExpc3RQYXJhbXMsXG4gIH07XG59XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9yZXNvdXJjZSc7XG5pbXBvcnQgKiBhcyBKb2JzQVBJIGZyb20gJy4vam9icy9qb2JzJztcbmltcG9ydCB7XG4gIEZpbmVUdW5pbmdKb2IsXG4gIEZpbmVUdW5pbmdKb2JFdmVudCxcbiAgRmluZVR1bmluZ0pvYkV2ZW50c1BhZ2UsXG4gIEZpbmVUdW5pbmdKb2JJbnRlZ3JhdGlvbixcbiAgRmluZVR1bmluZ0pvYldhbmRiSW50ZWdyYXRpb24sXG4gIEZpbmVUdW5pbmdKb2JXYW5kYkludGVncmF0aW9uT2JqZWN0LFxuICBGaW5lVHVuaW5nSm9ic1BhZ2UsXG4gIEpvYkNyZWF0ZVBhcmFtcyxcbiAgSm9iTGlzdEV2ZW50c1BhcmFtcyxcbiAgSm9iTGlzdFBhcmFtcyxcbiAgSm9icyxcbn0gZnJvbSAnLi9qb2JzL2pvYnMnO1xuXG5leHBvcnQgY2xhc3MgRmluZVR1bmluZyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgam9iczogSm9ic0FQSS5Kb2JzID0gbmV3IEpvYnNBUEkuSm9icyh0aGlzLl9jbGllbnQpO1xufVxuXG5GaW5lVHVuaW5nLkpvYnMgPSBKb2JzO1xuRmluZVR1bmluZy5GaW5lVHVuaW5nSm9ic1BhZ2UgPSBGaW5lVHVuaW5nSm9ic1BhZ2U7XG5GaW5lVHVuaW5nLkZpbmVUdW5pbmdKb2JFdmVudHNQYWdlID0gRmluZVR1bmluZ0pvYkV2ZW50c1BhZ2U7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBGaW5lVHVuaW5nIHtcbiAgZXhwb3J0IHtcbiAgICBKb2JzIGFzIEpvYnMsXG4gICAgdHlwZSBGaW5lVHVuaW5nSm9iIGFzIEZpbmVUdW5pbmdKb2IsXG4gICAgdHlwZSBGaW5lVHVuaW5nSm9iRXZlbnQgYXMgRmluZVR1bmluZ0pvYkV2ZW50LFxuICAgIHR5cGUgRmluZVR1bmluZ0pvYkludGVncmF0aW9uIGFzIEZpbmVUdW5pbmdKb2JJbnRlZ3JhdGlvbixcbiAgICB0eXBlIEZpbmVUdW5pbmdKb2JXYW5kYkludGVncmF0aW9uIGFzIEZpbmVUdW5pbmdKb2JXYW5kYkludGVncmF0aW9uLFxuICAgIHR5cGUgRmluZVR1bmluZ0pvYldhbmRiSW50ZWdyYXRpb25PYmplY3QgYXMgRmluZVR1bmluZ0pvYldhbmRiSW50ZWdyYXRpb25PYmplY3QsXG4gICAgRmluZVR1bmluZ0pvYnNQYWdlIGFzIEZpbmVUdW5pbmdKb2JzUGFnZSxcbiAgICBGaW5lVHVuaW5nSm9iRXZlbnRzUGFnZSBhcyBGaW5lVHVuaW5nSm9iRXZlbnRzUGFnZSxcbiAgICB0eXBlIEpvYkNyZWF0ZVBhcmFtcyBhcyBKb2JDcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBKb2JMaXN0UGFyYW1zIGFzIEpvYkxpc3RQYXJhbXMsXG4gICAgdHlwZSBKb2JMaXN0RXZlbnRzUGFyYW1zIGFzIEpvYkxpc3RFdmVudHNQYXJhbXMsXG4gIH07XG59XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VzIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHZhcmlhdGlvbiBvZiBhIGdpdmVuIGltYWdlLlxuICAgKi9cbiAgY3JlYXRlVmFyaWF0aW9uKFxuICAgIGJvZHk6IEltYWdlQ3JlYXRlVmFyaWF0aW9uUGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLkFQSVByb21pc2U8SW1hZ2VzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoJy9pbWFnZXMvdmFyaWF0aW9ucycsIENvcmUubXVsdGlwYXJ0Rm9ybVJlcXVlc3RPcHRpb25zKHsgYm9keSwgLi4ub3B0aW9ucyB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0ZWQgb3IgZXh0ZW5kZWQgaW1hZ2UgZ2l2ZW4gYW4gb3JpZ2luYWwgaW1hZ2UgYW5kIGEgcHJvbXB0LlxuICAgKi9cbiAgZWRpdChib2R5OiBJbWFnZUVkaXRQYXJhbXMsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPEltYWdlc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvaW1hZ2VzL2VkaXRzJywgQ29yZS5tdWx0aXBhcnRGb3JtUmVxdWVzdE9wdGlvbnMoeyBib2R5LCAuLi5vcHRpb25zIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGltYWdlIGdpdmVuIGEgcHJvbXB0LlxuICAgKi9cbiAgZ2VuZXJhdGUoYm9keTogSW1hZ2VHZW5lcmF0ZVBhcmFtcywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkFQSVByb21pc2U8SW1hZ2VzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoJy9pbWFnZXMvZ2VuZXJhdGlvbnMnLCB7IGJvZHksIC4uLm9wdGlvbnMgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB1cmwgb3IgdGhlIGNvbnRlbnQgb2YgYW4gaW1hZ2UgZ2VuZXJhdGVkIGJ5IHRoZSBPcGVuQUkgQVBJLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlNjQtZW5jb2RlZCBKU09OIG9mIHRoZSBnZW5lcmF0ZWQgaW1hZ2UsIGlmIGByZXNwb25zZV9mb3JtYXRgIGlzXG4gICAqIGBiNjRfanNvbmAuXG4gICAqL1xuICBiNjRfanNvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb21wdCB0aGF0IHdhcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpbWFnZSwgaWYgdGhlcmUgd2FzIGFueSByZXZpc2lvbiB0byB0aGVcbiAgICogcHJvbXB0LlxuICAgKi9cbiAgcmV2aXNlZF9wcm9tcHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGdlbmVyYXRlZCBpbWFnZSwgaWYgYHJlc3BvbnNlX2Zvcm1hdGAgaXMgYHVybGAgKGRlZmF1bHQpLlxuICAgKi9cbiAgdXJsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBJbWFnZU1vZGVsID0gJ2RhbGwtZS0yJyB8ICdkYWxsLWUtMyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VzUmVzcG9uc2Uge1xuICBjcmVhdGVkOiBudW1iZXI7XG5cbiAgZGF0YTogQXJyYXk8SW1hZ2U+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlQ3JlYXRlVmFyaWF0aW9uUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB0byB1c2UgYXMgdGhlIGJhc2lzIGZvciB0aGUgdmFyaWF0aW9uKHMpLiBNdXN0IGJlIGEgdmFsaWQgUE5HIGZpbGUsXG4gICAqIGxlc3MgdGhhbiA0TUIsIGFuZCBzcXVhcmUuXG4gICAqL1xuICBpbWFnZTogQ29yZS5VcGxvYWRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZWwgdG8gdXNlIGZvciBpbWFnZSBnZW5lcmF0aW9uLiBPbmx5IGBkYWxsLWUtMmAgaXMgc3VwcG9ydGVkIGF0IHRoaXNcbiAgICogdGltZS5cbiAgICovXG4gIG1vZGVsPzogKHN0cmluZyAmIHt9KSB8IEltYWdlTW9kZWwgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyB0byBnZW5lcmF0ZS4gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwLiBGb3IgYGRhbGwtZS0zYCwgb25seVxuICAgKiBgbj0xYCBpcyBzdXBwb3J0ZWQuXG4gICAqL1xuICBuPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgZ2VuZXJhdGVkIGltYWdlcyBhcmUgcmV0dXJuZWQuIE11c3QgYmUgb25lIG9mIGB1cmxgIG9yXG4gICAqIGBiNjRfanNvbmAuIFVSTHMgYXJlIG9ubHkgdmFsaWQgZm9yIDYwIG1pbnV0ZXMgYWZ0ZXIgdGhlIGltYWdlIGhhcyBiZWVuXG4gICAqIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlc3BvbnNlX2Zvcm1hdD86ICd1cmwnIHwgJ2I2NF9qc29uJyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgaW1hZ2VzLiBNdXN0IGJlIG9uZSBvZiBgMjU2eDI1NmAsIGA1MTJ4NTEyYCwgb3JcbiAgICogYDEwMjR4MTAyNGAuXG4gICAqL1xuICBzaXplPzogJzI1NngyNTYnIHwgJzUxMng1MTInIHwgJzEwMjR4MTAyNCcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIHJlcHJlc2VudGluZyB5b3VyIGVuZC11c2VyLCB3aGljaCBjYW4gaGVscCBPcGVuQUkgdG8gbW9uaXRvclxuICAgKiBhbmQgZGV0ZWN0IGFidXNlLlxuICAgKiBbTGVhcm4gbW9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3NhZmV0eS1iZXN0LXByYWN0aWNlcyNlbmQtdXNlci1pZHMpLlxuICAgKi9cbiAgdXNlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZUVkaXRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGltYWdlIHRvIGVkaXQuIE11c3QgYmUgYSB2YWxpZCBQTkcgZmlsZSwgbGVzcyB0aGFuIDRNQiwgYW5kIHNxdWFyZS4gSWYgbWFza1xuICAgKiBpcyBub3QgcHJvdmlkZWQsIGltYWdlIG11c3QgaGF2ZSB0cmFuc3BhcmVuY3ksIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyB0aGUgbWFzay5cbiAgICovXG4gIGltYWdlOiBDb3JlLlVwbG9hZGFibGU7XG5cbiAgLyoqXG4gICAqIEEgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUgZGVzaXJlZCBpbWFnZShzKS4gVGhlIG1heGltdW0gbGVuZ3RoIGlzIDEwMDBcbiAgICogY2hhcmFjdGVycy5cbiAgICovXG4gIHByb21wdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBhZGRpdGlvbmFsIGltYWdlIHdob3NlIGZ1bGx5IHRyYW5zcGFyZW50IGFyZWFzIChlLmcuIHdoZXJlIGFscGhhIGlzIHplcm8pXG4gICAqIGluZGljYXRlIHdoZXJlIGBpbWFnZWAgc2hvdWxkIGJlIGVkaXRlZC4gTXVzdCBiZSBhIHZhbGlkIFBORyBmaWxlLCBsZXNzIHRoYW5cbiAgICogNE1CLCBhbmQgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25zIGFzIGBpbWFnZWAuXG4gICAqL1xuICBtYXNrPzogQ29yZS5VcGxvYWRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZWwgdG8gdXNlIGZvciBpbWFnZSBnZW5lcmF0aW9uLiBPbmx5IGBkYWxsLWUtMmAgaXMgc3VwcG9ydGVkIGF0IHRoaXNcbiAgICogdGltZS5cbiAgICovXG4gIG1vZGVsPzogKHN0cmluZyAmIHt9KSB8IEltYWdlTW9kZWwgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyB0byBnZW5lcmF0ZS4gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwLlxuICAgKi9cbiAgbj86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGdlbmVyYXRlZCBpbWFnZXMgYXJlIHJldHVybmVkLiBNdXN0IGJlIG9uZSBvZiBgdXJsYCBvclxuICAgKiBgYjY0X2pzb25gLiBVUkxzIGFyZSBvbmx5IHZhbGlkIGZvciA2MCBtaW51dGVzIGFmdGVyIHRoZSBpbWFnZSBoYXMgYmVlblxuICAgKiBnZW5lcmF0ZWQuXG4gICAqL1xuICByZXNwb25zZV9mb3JtYXQ/OiAndXJsJyB8ICdiNjRfanNvbicgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGltYWdlcy4gTXVzdCBiZSBvbmUgb2YgYDI1NngyNTZgLCBgNTEyeDUxMmAsIG9yXG4gICAqIGAxMDI0eDEwMjRgLlxuICAgKi9cbiAgc2l6ZT86ICcyNTZ4MjU2JyB8ICc1MTJ4NTEyJyB8ICcxMDI0eDEwMjQnIHwgbnVsbDtcblxuICAvKipcbiAgICogQSB1bmlxdWUgaWRlbnRpZmllciByZXByZXNlbnRpbmcgeW91ciBlbmQtdXNlciwgd2hpY2ggY2FuIGhlbHAgT3BlbkFJIHRvIG1vbml0b3JcbiAgICogYW5kIGRldGVjdCBhYnVzZS5cbiAgICogW0xlYXJuIG1vcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zYWZldHktYmVzdC1wcmFjdGljZXMjZW5kLXVzZXItaWRzKS5cbiAgICovXG4gIHVzZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VHZW5lcmF0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGRlc2lyZWQgaW1hZ2UocykuIFRoZSBtYXhpbXVtIGxlbmd0aCBpcyAxMDAwXG4gICAqIGNoYXJhY3RlcnMgZm9yIGBkYWxsLWUtMmAgYW5kIDQwMDAgY2hhcmFjdGVycyBmb3IgYGRhbGwtZS0zYC5cbiAgICovXG4gIHByb21wdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZWwgdG8gdXNlIGZvciBpbWFnZSBnZW5lcmF0aW9uLlxuICAgKi9cbiAgbW9kZWw/OiAoc3RyaW5nICYge30pIHwgSW1hZ2VNb2RlbCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIHRvIGdlbmVyYXRlLiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAuIEZvciBgZGFsbC1lLTNgLCBvbmx5XG4gICAqIGBuPTFgIGlzIHN1cHBvcnRlZC5cbiAgICovXG4gIG4/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgcXVhbGl0eSBvZiB0aGUgaW1hZ2UgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZC4gYGhkYCBjcmVhdGVzIGltYWdlcyB3aXRoIGZpbmVyXG4gICAqIGRldGFpbHMgYW5kIGdyZWF0ZXIgY29uc2lzdGVuY3kgYWNyb3NzIHRoZSBpbWFnZS4gVGhpcyBwYXJhbSBpcyBvbmx5IHN1cHBvcnRlZFxuICAgKiBmb3IgYGRhbGwtZS0zYC5cbiAgICovXG4gIHF1YWxpdHk/OiAnc3RhbmRhcmQnIHwgJ2hkJztcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgZ2VuZXJhdGVkIGltYWdlcyBhcmUgcmV0dXJuZWQuIE11c3QgYmUgb25lIG9mIGB1cmxgIG9yXG4gICAqIGBiNjRfanNvbmAuIFVSTHMgYXJlIG9ubHkgdmFsaWQgZm9yIDYwIG1pbnV0ZXMgYWZ0ZXIgdGhlIGltYWdlIGhhcyBiZWVuXG4gICAqIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlc3BvbnNlX2Zvcm1hdD86ICd1cmwnIHwgJ2I2NF9qc29uJyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgaW1hZ2VzLiBNdXN0IGJlIG9uZSBvZiBgMjU2eDI1NmAsIGA1MTJ4NTEyYCwgb3JcbiAgICogYDEwMjR4MTAyNGAgZm9yIGBkYWxsLWUtMmAuIE11c3QgYmUgb25lIG9mIGAxMDI0eDEwMjRgLCBgMTc5MngxMDI0YCwgb3JcbiAgICogYDEwMjR4MTc5MmAgZm9yIGBkYWxsLWUtM2AgbW9kZWxzLlxuICAgKi9cbiAgc2l6ZT86ICcyNTZ4MjU2JyB8ICc1MTJ4NTEyJyB8ICcxMDI0eDEwMjQnIHwgJzE3OTJ4MTAyNCcgfCAnMTAyNHgxNzkyJyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHlsZSBvZiB0aGUgZ2VuZXJhdGVkIGltYWdlcy4gTXVzdCBiZSBvbmUgb2YgYHZpdmlkYCBvciBgbmF0dXJhbGAuIFZpdmlkXG4gICAqIGNhdXNlcyB0aGUgbW9kZWwgdG8gbGVhbiB0b3dhcmRzIGdlbmVyYXRpbmcgaHlwZXItcmVhbCBhbmQgZHJhbWF0aWMgaW1hZ2VzLlxuICAgKiBOYXR1cmFsIGNhdXNlcyB0aGUgbW9kZWwgdG8gcHJvZHVjZSBtb3JlIG5hdHVyYWwsIGxlc3MgaHlwZXItcmVhbCBsb29raW5nXG4gICAqIGltYWdlcy4gVGhpcyBwYXJhbSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgYGRhbGwtZS0zYC5cbiAgICovXG4gIHN0eWxlPzogJ3ZpdmlkJyB8ICduYXR1cmFsJyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgcmVwcmVzZW50aW5nIHlvdXIgZW5kLXVzZXIsIHdoaWNoIGNhbiBoZWxwIE9wZW5BSSB0byBtb25pdG9yXG4gICAqIGFuZCBkZXRlY3QgYWJ1c2UuXG4gICAqIFtMZWFybiBtb3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc2FmZXR5LWJlc3QtcHJhY3RpY2VzI2VuZC11c2VyLWlkcykuXG4gICAqL1xuICB1c2VyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgSW1hZ2VzIHtcbiAgZXhwb3J0IHtcbiAgICB0eXBlIEltYWdlIGFzIEltYWdlLFxuICAgIHR5cGUgSW1hZ2VNb2RlbCBhcyBJbWFnZU1vZGVsLFxuICAgIHR5cGUgSW1hZ2VzUmVzcG9uc2UgYXMgSW1hZ2VzUmVzcG9uc2UsXG4gICAgdHlwZSBJbWFnZUNyZWF0ZVZhcmlhdGlvblBhcmFtcyBhcyBJbWFnZUNyZWF0ZVZhcmlhdGlvblBhcmFtcyxcbiAgICB0eXBlIEltYWdlRWRpdFBhcmFtcyBhcyBJbWFnZUVkaXRQYXJhbXMsXG4gICAgdHlwZSBJbWFnZUdlbmVyYXRlUGFyYW1zIGFzIEltYWdlR2VuZXJhdGVQYXJhbXMsXG4gIH07XG59XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgUGFnZSB9IGZyb20gJy4uL3BhZ2luYXRpb24nO1xuXG5leHBvcnQgY2xhc3MgTW9kZWxzIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogUmV0cmlldmVzIGEgbW9kZWwgaW5zdGFuY2UsIHByb3ZpZGluZyBiYXNpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kZWwgc3VjaCBhc1xuICAgKiB0aGUgb3duZXIgYW5kIHBlcm1pc3Npb25pbmcuXG4gICAqL1xuICByZXRyaWV2ZShtb2RlbDogc3RyaW5nLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0KGAvbW9kZWxzLyR7bW9kZWx9YCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgbW9kZWxzLCBhbmQgcHJvdmlkZXMgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgZWFjaFxuICAgKiBvbmUgc3VjaCBhcyB0aGUgb3duZXIgYW5kIGF2YWlsYWJpbGl0eS5cbiAgICovXG4gIGxpc3Qob3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLlBhZ2VQcm9taXNlPE1vZGVsc1BhZ2UsIE1vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRBUElMaXN0KCcvbW9kZWxzJywgTW9kZWxzUGFnZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgZmluZS10dW5lZCBtb2RlbC4gWW91IG11c3QgaGF2ZSB0aGUgT3duZXIgcm9sZSBpbiB5b3VyIG9yZ2FuaXphdGlvbiB0b1xuICAgKiBkZWxldGUgYSBtb2RlbC5cbiAgICovXG4gIGRlbChtb2RlbDogc3RyaW5nLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxNb2RlbERlbGV0ZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmRlbGV0ZShgL21vZGVscy8ke21vZGVsfWAsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogTm90ZTogbm8gcGFnaW5hdGlvbiBhY3R1YWxseSBvY2N1cnMgeWV0LCB0aGlzIGlzIGZvciBmb3J3YXJkcy1jb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWxzUGFnZSBleHRlbmRzIFBhZ2U8TW9kZWw+IHt9XG5cbi8qKlxuICogRGVzY3JpYmVzIGFuIE9wZW5BSSBtb2RlbCBvZmZlcmluZyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlIEFQSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbCB7XG4gIC8qKlxuICAgKiBUaGUgbW9kZWwgaWRlbnRpZmllciwgd2hpY2ggY2FuIGJlIHJlZmVyZW5jZWQgaW4gdGhlIEFQSSBlbmRwb2ludHMuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIHdoZW4gdGhlIG1vZGVsIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgY3JlYXRlZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHR5cGUsIHdoaWNoIGlzIGFsd2F5cyBcIm1vZGVsXCIuXG4gICAqL1xuICBvYmplY3Q6ICdtb2RlbCc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcmdhbml6YXRpb24gdGhhdCBvd25zIHRoZSBtb2RlbC5cbiAgICovXG4gIG93bmVkX2J5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxEZWxldGVkIHtcbiAgaWQ6IHN0cmluZztcblxuICBkZWxldGVkOiBib29sZWFuO1xuXG4gIG9iamVjdDogc3RyaW5nO1xufVxuXG5Nb2RlbHMuTW9kZWxzUGFnZSA9IE1vZGVsc1BhZ2U7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBNb2RlbHMge1xuICBleHBvcnQgeyB0eXBlIE1vZGVsIGFzIE1vZGVsLCB0eXBlIE1vZGVsRGVsZXRlZCBhcyBNb2RlbERlbGV0ZWQsIE1vZGVsc1BhZ2UgYXMgTW9kZWxzUGFnZSB9O1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi9jb3JlJztcblxuZXhwb3J0IGNsYXNzIE1vZGVyYXRpb25zIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogQ2xhc3NpZmllcyBpZiB0ZXh0IGFuZC9vciBpbWFnZSBpbnB1dHMgYXJlIHBvdGVudGlhbGx5IGhhcm1mdWwuIExlYXJuIG1vcmUgaW5cbiAgICogdGhlIFttb2RlcmF0aW9uIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvbW9kZXJhdGlvbikuXG4gICAqL1xuICBjcmVhdGUoXG4gICAgYm9keTogTW9kZXJhdGlvbkNyZWF0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPE1vZGVyYXRpb25DcmVhdGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdCgnL21vZGVyYXRpb25zJywgeyBib2R5LCAuLi5vcHRpb25zIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdGhlIGNhdGVnb3JpZXMsIGFuZCB3aGV0aGVyIHRoZXkgYXJlIGZsYWdnZWQgb3Igbm90LlxuICAgKi9cbiAgY2F0ZWdvcmllczogTW9kZXJhdGlvbi5DYXRlZ29yaWVzO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdGhlIGNhdGVnb3JpZXMgYWxvbmcgd2l0aCB0aGUgaW5wdXQgdHlwZShzKSB0aGF0IHRoZSBzY29yZSBhcHBsaWVzIHRvLlxuICAgKi9cbiAgY2F0ZWdvcnlfYXBwbGllZF9pbnB1dF90eXBlczogTW9kZXJhdGlvbi5DYXRlZ29yeUFwcGxpZWRJbnB1dFR5cGVzO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdGhlIGNhdGVnb3JpZXMgYWxvbmcgd2l0aCB0aGVpciBzY29yZXMgYXMgcHJlZGljdGVkIGJ5IG1vZGVsLlxuICAgKi9cbiAgY2F0ZWdvcnlfc2NvcmVzOiBNb2RlcmF0aW9uLkNhdGVnb3J5U2NvcmVzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFueSBvZiB0aGUgYmVsb3cgY2F0ZWdvcmllcyBhcmUgZmxhZ2dlZC5cbiAgICovXG4gIGZsYWdnZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTW9kZXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdGhlIGNhdGVnb3JpZXMsIGFuZCB3aGV0aGVyIHRoZXkgYXJlIGZsYWdnZWQgb3Igbm90LlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBDYXRlZ29yaWVzIHtcbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRoYXQgZXhwcmVzc2VzLCBpbmNpdGVzLCBvciBwcm9tb3RlcyBoYXJhc3NpbmcgbGFuZ3VhZ2UgdG93YXJkcyBhbnlcbiAgICAgKiB0YXJnZXQuXG4gICAgICovXG4gICAgaGFyYXNzbWVudDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEhhcmFzc21lbnQgY29udGVudCB0aGF0IGFsc28gaW5jbHVkZXMgdmlvbGVuY2Ugb3Igc2VyaW91cyBoYXJtIHRvd2FyZHMgYW55XG4gICAgICogdGFyZ2V0LlxuICAgICAqL1xuICAgICdoYXJhc3NtZW50L3RocmVhdGVuaW5nJzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvbnRlbnQgdGhhdCBleHByZXNzZXMsIGluY2l0ZXMsIG9yIHByb21vdGVzIGhhdGUgYmFzZWQgb24gcmFjZSwgZ2VuZGVyLFxuICAgICAqIGV0aG5pY2l0eSwgcmVsaWdpb24sIG5hdGlvbmFsaXR5LCBzZXh1YWwgb3JpZW50YXRpb24sIGRpc2FiaWxpdHkgc3RhdHVzLCBvclxuICAgICAqIGNhc3RlLiBIYXRlZnVsIGNvbnRlbnQgYWltZWQgYXQgbm9uLXByb3RlY3RlZCBncm91cHMgKGUuZy4sIGNoZXNzIHBsYXllcnMpIGlzXG4gICAgICogaGFyYXNzbWVudC5cbiAgICAgKi9cbiAgICBoYXRlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSGF0ZWZ1bCBjb250ZW50IHRoYXQgYWxzbyBpbmNsdWRlcyB2aW9sZW5jZSBvciBzZXJpb3VzIGhhcm0gdG93YXJkcyB0aGUgdGFyZ2V0ZWRcbiAgICAgKiBncm91cCBiYXNlZCBvbiByYWNlLCBnZW5kZXIsIGV0aG5pY2l0eSwgcmVsaWdpb24sIG5hdGlvbmFsaXR5LCBzZXh1YWxcbiAgICAgKiBvcmllbnRhdGlvbiwgZGlzYWJpbGl0eSBzdGF0dXMsIG9yIGNhc3RlLlxuICAgICAqL1xuICAgICdoYXRlL3RocmVhdGVuaW5nJzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvbnRlbnQgdGhhdCBpbmNsdWRlcyBpbnN0cnVjdGlvbnMgb3IgYWR2aWNlIHRoYXQgZmFjaWxpdGF0ZSB0aGUgcGxhbm5pbmcgb3JcbiAgICAgKiBleGVjdXRpb24gb2Ygd3Jvbmdkb2luZywgb3IgdGhhdCBnaXZlcyBhZHZpY2Ugb3IgaW5zdHJ1Y3Rpb24gb24gaG93IHRvIGNvbW1pdFxuICAgICAqIGlsbGljaXQgYWN0cy4gRm9yIGV4YW1wbGUsIFwiaG93IHRvIHNob3BsaWZ0XCIgd291bGQgZml0IHRoaXMgY2F0ZWdvcnkuXG4gICAgICovXG4gICAgaWxsaWNpdDogYm9vbGVhbiB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRoYXQgaW5jbHVkZXMgaW5zdHJ1Y3Rpb25zIG9yIGFkdmljZSB0aGF0IGZhY2lsaXRhdGUgdGhlIHBsYW5uaW5nIG9yXG4gICAgICogZXhlY3V0aW9uIG9mIHdyb25nZG9pbmcgdGhhdCBhbHNvIGluY2x1ZGVzIHZpb2xlbmNlLCBvciB0aGF0IGdpdmVzIGFkdmljZSBvclxuICAgICAqIGluc3RydWN0aW9uIG9uIHRoZSBwcm9jdXJlbWVudCBvZiBhbnkgd2VhcG9uLlxuICAgICAqL1xuICAgICdpbGxpY2l0L3Zpb2xlbnQnOiBib29sZWFuIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIENvbnRlbnQgdGhhdCBwcm9tb3RlcywgZW5jb3VyYWdlcywgb3IgZGVwaWN0cyBhY3RzIG9mIHNlbGYtaGFybSwgc3VjaCBhc1xuICAgICAqIHN1aWNpZGUsIGN1dHRpbmcsIGFuZCBlYXRpbmcgZGlzb3JkZXJzLlxuICAgICAqL1xuICAgICdzZWxmLWhhcm0nOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCB0aGF0IGVuY291cmFnZXMgcGVyZm9ybWluZyBhY3RzIG9mIHNlbGYtaGFybSwgc3VjaCBhcyBzdWljaWRlLCBjdXR0aW5nLFxuICAgICAqIGFuZCBlYXRpbmcgZGlzb3JkZXJzLCBvciB0aGF0IGdpdmVzIGluc3RydWN0aW9ucyBvciBhZHZpY2Ugb24gaG93IHRvIGNvbW1pdCBzdWNoXG4gICAgICogYWN0cy5cbiAgICAgKi9cbiAgICAnc2VsZi1oYXJtL2luc3RydWN0aW9ucyc6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb250ZW50IHdoZXJlIHRoZSBzcGVha2VyIGV4cHJlc3NlcyB0aGF0IHRoZXkgYXJlIGVuZ2FnaW5nIG9yIGludGVuZCB0byBlbmdhZ2VcbiAgICAgKiBpbiBhY3RzIG9mIHNlbGYtaGFybSwgc3VjaCBhcyBzdWljaWRlLCBjdXR0aW5nLCBhbmQgZWF0aW5nIGRpc29yZGVycy5cbiAgICAgKi9cbiAgICAnc2VsZi1oYXJtL2ludGVudCc6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb250ZW50IG1lYW50IHRvIGFyb3VzZSBzZXh1YWwgZXhjaXRlbWVudCwgc3VjaCBhcyB0aGUgZGVzY3JpcHRpb24gb2Ygc2V4dWFsXG4gICAgICogYWN0aXZpdHksIG9yIHRoYXQgcHJvbW90ZXMgc2V4dWFsIHNlcnZpY2VzIChleGNsdWRpbmcgc2V4IGVkdWNhdGlvbiBhbmRcbiAgICAgKiB3ZWxsbmVzcykuXG4gICAgICovXG4gICAgc2V4dWFsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU2V4dWFsIGNvbnRlbnQgdGhhdCBpbmNsdWRlcyBhbiBpbmRpdmlkdWFsIHdobyBpcyB1bmRlciAxOCB5ZWFycyBvbGQuXG4gICAgICovXG4gICAgJ3NleHVhbC9taW5vcnMnOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCB0aGF0IGRlcGljdHMgZGVhdGgsIHZpb2xlbmNlLCBvciBwaHlzaWNhbCBpbmp1cnkuXG4gICAgICovXG4gICAgdmlvbGVuY2U6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRoYXQgZGVwaWN0cyBkZWF0aCwgdmlvbGVuY2UsIG9yIHBoeXNpY2FsIGluanVyeSBpbiBncmFwaGljIGRldGFpbC5cbiAgICAgKi9cbiAgICAndmlvbGVuY2UvZ3JhcGhpYyc6IGJvb2xlYW47XG4gIH1cblxuICAvKipcbiAgICogQSBsaXN0IG9mIHRoZSBjYXRlZ29yaWVzIGFsb25nIHdpdGggdGhlIGlucHV0IHR5cGUocykgdGhhdCB0aGUgc2NvcmUgYXBwbGllcyB0by5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcnlBcHBsaWVkSW5wdXRUeXBlcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGFwcGxpZWQgaW5wdXQgdHlwZShzKSBmb3IgdGhlIGNhdGVnb3J5ICdoYXJhc3NtZW50Jy5cbiAgICAgKi9cbiAgICBoYXJhc3NtZW50OiBBcnJheTwndGV4dCc+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFwcGxpZWQgaW5wdXQgdHlwZShzKSBmb3IgdGhlIGNhdGVnb3J5ICdoYXJhc3NtZW50L3RocmVhdGVuaW5nJy5cbiAgICAgKi9cbiAgICAnaGFyYXNzbWVudC90aHJlYXRlbmluZyc6IEFycmF5PCd0ZXh0Jz47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXBwbGllZCBpbnB1dCB0eXBlKHMpIGZvciB0aGUgY2F0ZWdvcnkgJ2hhdGUnLlxuICAgICAqL1xuICAgIGhhdGU6IEFycmF5PCd0ZXh0Jz47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXBwbGllZCBpbnB1dCB0eXBlKHMpIGZvciB0aGUgY2F0ZWdvcnkgJ2hhdGUvdGhyZWF0ZW5pbmcnLlxuICAgICAqL1xuICAgICdoYXRlL3RocmVhdGVuaW5nJzogQXJyYXk8J3RleHQnPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcHBsaWVkIGlucHV0IHR5cGUocykgZm9yIHRoZSBjYXRlZ29yeSAnaWxsaWNpdCcuXG4gICAgICovXG4gICAgaWxsaWNpdDogQXJyYXk8J3RleHQnPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcHBsaWVkIGlucHV0IHR5cGUocykgZm9yIHRoZSBjYXRlZ29yeSAnaWxsaWNpdC92aW9sZW50Jy5cbiAgICAgKi9cbiAgICAnaWxsaWNpdC92aW9sZW50JzogQXJyYXk8J3RleHQnPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcHBsaWVkIGlucHV0IHR5cGUocykgZm9yIHRoZSBjYXRlZ29yeSAnc2VsZi1oYXJtJy5cbiAgICAgKi9cbiAgICAnc2VsZi1oYXJtJzogQXJyYXk8J3RleHQnIHwgJ2ltYWdlJz47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXBwbGllZCBpbnB1dCB0eXBlKHMpIGZvciB0aGUgY2F0ZWdvcnkgJ3NlbGYtaGFybS9pbnN0cnVjdGlvbnMnLlxuICAgICAqL1xuICAgICdzZWxmLWhhcm0vaW5zdHJ1Y3Rpb25zJzogQXJyYXk8J3RleHQnIHwgJ2ltYWdlJz47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXBwbGllZCBpbnB1dCB0eXBlKHMpIGZvciB0aGUgY2F0ZWdvcnkgJ3NlbGYtaGFybS9pbnRlbnQnLlxuICAgICAqL1xuICAgICdzZWxmLWhhcm0vaW50ZW50JzogQXJyYXk8J3RleHQnIHwgJ2ltYWdlJz47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXBwbGllZCBpbnB1dCB0eXBlKHMpIGZvciB0aGUgY2F0ZWdvcnkgJ3NleHVhbCcuXG4gICAgICovXG4gICAgc2V4dWFsOiBBcnJheTwndGV4dCcgfCAnaW1hZ2UnPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcHBsaWVkIGlucHV0IHR5cGUocykgZm9yIHRoZSBjYXRlZ29yeSAnc2V4dWFsL21pbm9ycycuXG4gICAgICovXG4gICAgJ3NleHVhbC9taW5vcnMnOiBBcnJheTwndGV4dCc+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFwcGxpZWQgaW5wdXQgdHlwZShzKSBmb3IgdGhlIGNhdGVnb3J5ICd2aW9sZW5jZScuXG4gICAgICovXG4gICAgdmlvbGVuY2U6IEFycmF5PCd0ZXh0JyB8ICdpbWFnZSc+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFwcGxpZWQgaW5wdXQgdHlwZShzKSBmb3IgdGhlIGNhdGVnb3J5ICd2aW9sZW5jZS9ncmFwaGljJy5cbiAgICAgKi9cbiAgICAndmlvbGVuY2UvZ3JhcGhpYyc6IEFycmF5PCd0ZXh0JyB8ICdpbWFnZSc+O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiB0aGUgY2F0ZWdvcmllcyBhbG9uZyB3aXRoIHRoZWlyIHNjb3JlcyBhcyBwcmVkaWN0ZWQgYnkgbW9kZWwuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIENhdGVnb3J5U2NvcmVzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NvcmUgZm9yIHRoZSBjYXRlZ29yeSAnaGFyYXNzbWVudCcuXG4gICAgICovXG4gICAgaGFyYXNzbWVudDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjb3JlIGZvciB0aGUgY2F0ZWdvcnkgJ2hhcmFzc21lbnQvdGhyZWF0ZW5pbmcnLlxuICAgICAqL1xuICAgICdoYXJhc3NtZW50L3RocmVhdGVuaW5nJzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjb3JlIGZvciB0aGUgY2F0ZWdvcnkgJ2hhdGUnLlxuICAgICAqL1xuICAgIGhhdGU6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY29yZSBmb3IgdGhlIGNhdGVnb3J5ICdoYXRlL3RocmVhdGVuaW5nJy5cbiAgICAgKi9cbiAgICAnaGF0ZS90aHJlYXRlbmluZyc6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY29yZSBmb3IgdGhlIGNhdGVnb3J5ICdpbGxpY2l0Jy5cbiAgICAgKi9cbiAgICBpbGxpY2l0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NvcmUgZm9yIHRoZSBjYXRlZ29yeSAnaWxsaWNpdC92aW9sZW50Jy5cbiAgICAgKi9cbiAgICAnaWxsaWNpdC92aW9sZW50JzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjb3JlIGZvciB0aGUgY2F0ZWdvcnkgJ3NlbGYtaGFybScuXG4gICAgICovXG4gICAgJ3NlbGYtaGFybSc6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY29yZSBmb3IgdGhlIGNhdGVnb3J5ICdzZWxmLWhhcm0vaW5zdHJ1Y3Rpb25zJy5cbiAgICAgKi9cbiAgICAnc2VsZi1oYXJtL2luc3RydWN0aW9ucyc6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY29yZSBmb3IgdGhlIGNhdGVnb3J5ICdzZWxmLWhhcm0vaW50ZW50Jy5cbiAgICAgKi9cbiAgICAnc2VsZi1oYXJtL2ludGVudCc6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY29yZSBmb3IgdGhlIGNhdGVnb3J5ICdzZXh1YWwnLlxuICAgICAqL1xuICAgIHNleHVhbDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjb3JlIGZvciB0aGUgY2F0ZWdvcnkgJ3NleHVhbC9taW5vcnMnLlxuICAgICAqL1xuICAgICdzZXh1YWwvbWlub3JzJzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjb3JlIGZvciB0aGUgY2F0ZWdvcnkgJ3Zpb2xlbmNlJy5cbiAgICAgKi9cbiAgICB2aW9sZW5jZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjb3JlIGZvciB0aGUgY2F0ZWdvcnkgJ3Zpb2xlbmNlL2dyYXBoaWMnLlxuICAgICAqL1xuICAgICd2aW9sZW5jZS9ncmFwaGljJzogbnVtYmVyO1xuICB9XG59XG5cbi8qKlxuICogQW4gb2JqZWN0IGRlc2NyaWJpbmcgYW4gaW1hZ2UgdG8gY2xhc3NpZnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZXJhdGlvbkltYWdlVVJMSW5wdXQge1xuICAvKipcbiAgICogQ29udGFpbnMgZWl0aGVyIGFuIGltYWdlIFVSTCBvciBhIGRhdGEgVVJMIGZvciBhIGJhc2U2NCBlbmNvZGVkIGltYWdlLlxuICAgKi9cbiAgaW1hZ2VfdXJsOiBNb2RlcmF0aW9uSW1hZ2VVUkxJbnB1dC5JbWFnZVVSTDtcblxuICAvKipcbiAgICogQWx3YXlzIGBpbWFnZV91cmxgLlxuICAgKi9cbiAgdHlwZTogJ2ltYWdlX3VybCc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTW9kZXJhdGlvbkltYWdlVVJMSW5wdXQge1xuICAvKipcbiAgICogQ29udGFpbnMgZWl0aGVyIGFuIGltYWdlIFVSTCBvciBhIGRhdGEgVVJMIGZvciBhIGJhc2U2NCBlbmNvZGVkIGltYWdlLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBJbWFnZVVSTCB7XG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgVVJMIG9mIHRoZSBpbWFnZSBvciB0aGUgYmFzZTY0IGVuY29kZWQgaW1hZ2UgZGF0YS5cbiAgICAgKi9cbiAgICB1cmw6IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBNb2RlcmF0aW9uTW9kZWwgPVxuICB8ICdvbW5pLW1vZGVyYXRpb24tbGF0ZXN0J1xuICB8ICdvbW5pLW1vZGVyYXRpb24tMjAyNC0wOS0yNidcbiAgfCAndGV4dC1tb2RlcmF0aW9uLWxhdGVzdCdcbiAgfCAndGV4dC1tb2RlcmF0aW9uLXN0YWJsZSc7XG5cbi8qKlxuICogQW4gb2JqZWN0IGRlc2NyaWJpbmcgYW4gaW1hZ2UgdG8gY2xhc3NpZnkuXG4gKi9cbmV4cG9ydCB0eXBlIE1vZGVyYXRpb25NdWx0aU1vZGFsSW5wdXQgPSBNb2RlcmF0aW9uSW1hZ2VVUkxJbnB1dCB8IE1vZGVyYXRpb25UZXh0SW5wdXQ7XG5cbi8qKlxuICogQW4gb2JqZWN0IGRlc2NyaWJpbmcgdGV4dCB0byBjbGFzc2lmeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlcmF0aW9uVGV4dElucHV0IHtcbiAgLyoqXG4gICAqIEEgc3RyaW5nIG9mIHRleHQgdG8gY2xhc3NpZnkuXG4gICAqL1xuICB0ZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBgdGV4dGAuXG4gICAqL1xuICB0eXBlOiAndGV4dCc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBpZiBhIGdpdmVuIHRleHQgaW5wdXQgaXMgcG90ZW50aWFsbHkgaGFybWZ1bC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlcmF0aW9uQ3JlYXRlUmVzcG9uc2Uge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbW9kZXJhdGlvbiByZXF1ZXN0LlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZGVsIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIG1vZGVyYXRpb24gcmVzdWx0cy5cbiAgICovXG4gIG1vZGVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBtb2RlcmF0aW9uIG9iamVjdHMuXG4gICAqL1xuICByZXN1bHRzOiBBcnJheTxNb2RlcmF0aW9uPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2RlcmF0aW9uQ3JlYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIElucHV0IChvciBpbnB1dHMpIHRvIGNsYXNzaWZ5LiBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nLCBhbiBhcnJheSBvZiBzdHJpbmdzLCBvclxuICAgKiBhbiBhcnJheSBvZiBtdWx0aS1tb2RhbCBpbnB1dCBvYmplY3RzIHNpbWlsYXIgdG8gb3RoZXIgbW9kZWxzLlxuICAgKi9cbiAgaW5wdXQ6IHN0cmluZyB8IEFycmF5PHN0cmluZz4gfCBBcnJheTxNb2RlcmF0aW9uTXVsdGlNb2RhbElucHV0PjtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgbW9kZXJhdGlvbiBtb2RlbCB5b3Ugd291bGQgbGlrZSB0byB1c2UuIExlYXJuIG1vcmUgaW5cbiAgICogW3RoZSBtb2RlcmF0aW9uIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvbW9kZXJhdGlvbiksIGFuZFxuICAgKiBsZWFybiBhYm91dCBhdmFpbGFibGUgbW9kZWxzXG4gICAqIFtoZXJlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMjbW9kZXJhdGlvbikuXG4gICAqL1xuICBtb2RlbD86IChzdHJpbmcgJiB7fSkgfCBNb2RlcmF0aW9uTW9kZWw7XG59XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBNb2RlcmF0aW9ucyB7XG4gIGV4cG9ydCB7XG4gICAgdHlwZSBNb2RlcmF0aW9uIGFzIE1vZGVyYXRpb24sXG4gICAgdHlwZSBNb2RlcmF0aW9uSW1hZ2VVUkxJbnB1dCBhcyBNb2RlcmF0aW9uSW1hZ2VVUkxJbnB1dCxcbiAgICB0eXBlIE1vZGVyYXRpb25Nb2RlbCBhcyBNb2RlcmF0aW9uTW9kZWwsXG4gICAgdHlwZSBNb2RlcmF0aW9uTXVsdGlNb2RhbElucHV0IGFzIE1vZGVyYXRpb25NdWx0aU1vZGFsSW5wdXQsXG4gICAgdHlwZSBNb2RlcmF0aW9uVGV4dElucHV0IGFzIE1vZGVyYXRpb25UZXh0SW5wdXQsXG4gICAgdHlwZSBNb2RlcmF0aW9uQ3JlYXRlUmVzcG9uc2UgYXMgTW9kZXJhdGlvbkNyZWF0ZVJlc3BvbnNlLFxuICAgIHR5cGUgTW9kZXJhdGlvbkNyZWF0ZVBhcmFtcyBhcyBNb2RlcmF0aW9uQ3JlYXRlUGFyYW1zLFxuICB9O1xufVxuIiwgImltcG9ydCB7IE9wZW5BSUVycm9yIH0gZnJvbSAnLi4vZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBDaGF0Q29tcGxldGlvblRvb2wgfSBmcm9tICcuLi9yZXNvdXJjZXMvY2hhdC9jb21wbGV0aW9ucyc7XG5pbXBvcnQge1xuICB0eXBlIEZ1bmN0aW9uVG9vbCxcbiAgdHlwZSBQYXJzZWRDb250ZW50LFxuICB0eXBlIFBhcnNlZFJlc3BvbnNlLFxuICB0eXBlIFBhcnNlZFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbCxcbiAgdHlwZSBQYXJzZWRSZXNwb25zZU91dHB1dEl0ZW0sXG4gIHR5cGUgUmVzcG9uc2UsXG4gIHR5cGUgUmVzcG9uc2VDcmVhdGVQYXJhbXNCYXNlLFxuICB0eXBlIFJlc3BvbnNlQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICB0eXBlIFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbCxcbiAgdHlwZSBUb29sLFxufSBmcm9tICcuLi9yZXNvdXJjZXMvcmVzcG9uc2VzL3Jlc3BvbnNlcyc7XG5pbXBvcnQgeyB0eXBlIEF1dG9QYXJzZWFibGVUZXh0Rm9ybWF0LCBpc0F1dG9QYXJzYWJsZVJlc3BvbnNlRm9ybWF0IH0gZnJvbSAnLi4vbGliL3BhcnNlcic7XG5cbnR5cGUgUGFyc2VhYmxlVG9vbHNQYXJhbXMgPSBBcnJheTxUb29sPiB8IENoYXRDb21wbGV0aW9uVG9vbCB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ3JlYXRlUGFyYW1zV2l0aFRvb2xzID0gUmVzcG9uc2VDcmVhdGVQYXJhbXNCYXNlICYge1xuICB0b29scz86IFBhcnNlYWJsZVRvb2xzUGFyYW1zO1xufTtcblxuZXhwb3J0IHR5cGUgRXh0cmFjdFBhcnNlZENvbnRlbnRGcm9tUGFyYW1zPFBhcmFtcyBleHRlbmRzIFJlc3BvbnNlQ3JlYXRlUGFyYW1zV2l0aFRvb2xzPiA9XG4gIE5vbk51bGxhYmxlPFBhcmFtc1sndGV4dCddPlsnZm9ybWF0J10gZXh0ZW5kcyBBdXRvUGFyc2VhYmxlVGV4dEZvcm1hdDxpbmZlciBQPiA/IFAgOiBudWxsO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVQYXJzZVJlc3BvbnNlPFxuICBQYXJhbXMgZXh0ZW5kcyBSZXNwb25zZUNyZWF0ZVBhcmFtc0Jhc2UgfCBudWxsLFxuICBQYXJzZWRUID0gUGFyYW1zIGV4dGVuZHMgbnVsbCA/IG51bGwgOiBFeHRyYWN0UGFyc2VkQ29udGVudEZyb21QYXJhbXM8Tm9uTnVsbGFibGU8UGFyYW1zPj4sXG4+KHJlc3BvbnNlOiBSZXNwb25zZSwgcGFyYW1zOiBQYXJhbXMpOiBQYXJzZWRSZXNwb25zZTxQYXJzZWRUPiB7XG4gIGlmICghcGFyYW1zIHx8ICFoYXNBdXRvUGFyc2VhYmxlSW5wdXQocGFyYW1zKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIG91dHB1dF9wYXJzZWQ6IG51bGwsXG4gICAgICBvdXRwdXQ6IHJlc3BvbnNlLm91dHB1dC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2Z1bmN0aW9uX2NhbGwnKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBwYXJzZWRfYXJndW1lbnRzOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0uY29udGVudC5tYXAoKGNvbnRlbnQpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmNvbnRlbnQsXG4gICAgICAgICAgICAgIHBhcnNlZDogbnVsbCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlUmVzcG9uc2UocmVzcG9uc2UsIHBhcmFtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlc3BvbnNlPFxuICBQYXJhbXMgZXh0ZW5kcyBSZXNwb25zZUNyZWF0ZVBhcmFtc0Jhc2UsXG4gIFBhcnNlZFQgPSBFeHRyYWN0UGFyc2VkQ29udGVudEZyb21QYXJhbXM8UGFyYW1zPixcbj4ocmVzcG9uc2U6IFJlc3BvbnNlLCBwYXJhbXM6IFBhcmFtcyk6IFBhcnNlZFJlc3BvbnNlPFBhcnNlZFQ+IHtcbiAgY29uc3Qgb3V0cHV0OiBBcnJheTxQYXJzZWRSZXNwb25zZU91dHB1dEl0ZW08UGFyc2VkVD4+ID0gcmVzcG9uc2Uub3V0cHV0Lm1hcChcbiAgICAoaXRlbSk6IFBhcnNlZFJlc3BvbnNlT3V0cHV0SXRlbTxQYXJzZWRUPiA9PiB7XG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnZnVuY3Rpb25fY2FsbCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIHBhcnNlZF9hcmd1bWVudHM6IHBhcnNlVG9vbENhbGwocGFyYW1zLCBpdGVtKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgICBjb25zdCBjb250ZW50OiBBcnJheTxQYXJzZWRDb250ZW50PFBhcnNlZFQ+PiA9IGl0ZW0uY29udGVudC5tYXAoKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICBpZiAoY29udGVudC50eXBlID09PSAnb3V0cHV0X3RleHQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb250ZW50LFxuICAgICAgICAgICAgICBwYXJzZWQ6IHBhcnNlVGV4dEZvcm1hdChwYXJhbXMsIGNvbnRlbnQudGV4dCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSxcbiAgKTtcblxuICBjb25zdCBwYXJzZWQ6IE9taXQ8UGFyc2VkUmVzcG9uc2U8UGFyc2VkVD4sICdvdXRwdXRfcGFyc2VkJz4gPSBPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSwgeyBvdXRwdXQgfSk7XG4gIGlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyZXNwb25zZSwgJ291dHB1dF90ZXh0JykpIHtcbiAgICBhZGRPdXRwdXRUZXh0KHBhcnNlZCk7XG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyc2VkLCAnb3V0cHV0X3BhcnNlZCcsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIHBhcnNlZC5vdXRwdXQpIHtcbiAgICAgICAgaWYgKG91dHB1dC50eXBlICE9PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY29udGVudCBvZiBvdXRwdXQuY29udGVudCkge1xuICAgICAgICAgIGlmIChjb250ZW50LnR5cGUgPT09ICdvdXRwdXRfdGV4dCcgJiYgY29udGVudC5wYXJzZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50LnBhcnNlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBQYXJzZWRSZXNwb25zZTxQYXJzZWRUPjtcbn1cblxuZnVuY3Rpb24gcGFyc2VUZXh0Rm9ybWF0PFxuICBQYXJhbXMgZXh0ZW5kcyBSZXNwb25zZUNyZWF0ZVBhcmFtc0Jhc2UsXG4gIFBhcnNlZFQgPSBFeHRyYWN0UGFyc2VkQ29udGVudEZyb21QYXJhbXM8UGFyYW1zPixcbj4ocGFyYW1zOiBQYXJhbXMsIGNvbnRlbnQ6IHN0cmluZyk6IFBhcnNlZFQgfCBudWxsIHtcbiAgaWYgKHBhcmFtcy50ZXh0Py5mb3JtYXQ/LnR5cGUgIT09ICdqc29uX3NjaGVtYScpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICgnJHBhcnNlUmF3JyBpbiBwYXJhbXMudGV4dD8uZm9ybWF0KSB7XG4gICAgY29uc3QgdGV4dF9mb3JtYXQgPSBwYXJhbXMudGV4dD8uZm9ybWF0IGFzIHVua25vd24gYXMgQXV0b1BhcnNlYWJsZVRleHRGb3JtYXQ8UGFyc2VkVD47XG4gICAgcmV0dXJuIHRleHRfZm9ybWF0LiRwYXJzZVJhdyhjb250ZW50KTtcbiAgfVxuXG4gIHJldHVybiBKU09OLnBhcnNlKGNvbnRlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQXV0b1BhcnNlYWJsZUlucHV0KHBhcmFtczogUmVzcG9uc2VDcmVhdGVQYXJhbXNXaXRoVG9vbHMpOiBib29sZWFuIHtcbiAgaWYgKGlzQXV0b1BhcnNhYmxlUmVzcG9uc2VGb3JtYXQocGFyYW1zLnRleHQ/LmZvcm1hdCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudHlwZSBUb29sT3B0aW9ucyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBhcmd1bWVudHM6IGFueTtcbiAgZnVuY3Rpb24/OiAoKGFyZ3M6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIEF1dG9QYXJzZWFibGVSZXNwb25zZVRvb2w8XG4gIE9wdGlvbnNUIGV4dGVuZHMgVG9vbE9wdGlvbnMsXG4gIEhhc0Z1bmN0aW9uID0gT3B0aW9uc1RbJ2Z1bmN0aW9uJ10gZXh0ZW5kcyBGdW5jdGlvbiA/IHRydWUgOiBmYWxzZSxcbj4gPSBGdW5jdGlvblRvb2wgJiB7XG4gIF9fYXJndW1lbnRzOiBPcHRpb25zVFsnYXJndW1lbnRzJ107IC8vIHR5cGUtbGV2ZWwgb25seVxuICBfX25hbWU6IE9wdGlvbnNUWyduYW1lJ107IC8vIHR5cGUtbGV2ZWwgb25seVxuXG4gICRicmFuZDogJ2F1dG8tcGFyc2VhYmxlLXRvb2wnO1xuICAkY2FsbGJhY2s6ICgoYXJnczogT3B0aW9uc1RbJ2FyZ3VtZW50cyddKSA9PiBhbnkpIHwgdW5kZWZpbmVkO1xuICAkcGFyc2VSYXcoYXJnczogc3RyaW5nKTogT3B0aW9uc1RbJ2FyZ3VtZW50cyddO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYXJzZWFibGVSZXNwb25zZVRvb2w8T3B0aW9uc1QgZXh0ZW5kcyBUb29sT3B0aW9ucz4oXG4gIHRvb2w6IEZ1bmN0aW9uVG9vbCxcbiAge1xuICAgIHBhcnNlcixcbiAgICBjYWxsYmFjayxcbiAgfToge1xuICAgIHBhcnNlcjogKGNvbnRlbnQ6IHN0cmluZykgPT4gT3B0aW9uc1RbJ2FyZ3VtZW50cyddO1xuICAgIGNhbGxiYWNrOiAoKGFyZ3M6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDtcbiAgfSxcbik6IEF1dG9QYXJzZWFibGVSZXNwb25zZVRvb2w8T3B0aW9uc1RbJ2FyZ3VtZW50cyddPiB7XG4gIGNvbnN0IG9iaiA9IHsgLi4udG9vbCB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwge1xuICAgICRicmFuZDoge1xuICAgICAgdmFsdWU6ICdhdXRvLXBhcnNlYWJsZS10b29sJyxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0sXG4gICAgJHBhcnNlUmF3OiB7XG4gICAgICB2YWx1ZTogcGFyc2VyLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICAkY2FsbGJhY2s6IHtcbiAgICAgIHZhbHVlOiBjYWxsYmFjayxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiBvYmogYXMgQXV0b1BhcnNlYWJsZVJlc3BvbnNlVG9vbDxPcHRpb25zVFsnYXJndW1lbnRzJ10+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBdXRvUGFyc2FibGVUb29sKHRvb2w6IGFueSk6IHRvb2wgaXMgQXV0b1BhcnNlYWJsZVJlc3BvbnNlVG9vbDxhbnk+IHtcbiAgcmV0dXJuIHRvb2w/LlsnJGJyYW5kJ10gPT09ICdhdXRvLXBhcnNlYWJsZS10b29sJztcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRUb29sQnlOYW1lKGlucHV0X3Rvb2xzOiBBcnJheTxUb29sPiwgbmFtZTogc3RyaW5nKTogRnVuY3Rpb25Ub29sIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGlucHV0X3Rvb2xzLmZpbmQoKHRvb2wpID0+IHRvb2wudHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b29sLm5hbWUgPT09IG5hbWUpIGFzXG4gICAgfCBGdW5jdGlvblRvb2xcbiAgICB8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb29sQ2FsbDxQYXJhbXMgZXh0ZW5kcyBSZXNwb25zZUNyZWF0ZVBhcmFtc0Jhc2U+KFxuICBwYXJhbXM6IFBhcmFtcyxcbiAgdG9vbENhbGw6IFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbCxcbik6IFBhcnNlZFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbCB7XG4gIGNvbnN0IGlucHV0VG9vbCA9IGdldElucHV0VG9vbEJ5TmFtZShwYXJhbXMudG9vbHMgPz8gW10sIHRvb2xDYWxsLm5hbWUpO1xuXG4gIHJldHVybiB7XG4gICAgLi4udG9vbENhbGwsXG4gICAgLi4udG9vbENhbGwsXG4gICAgcGFyc2VkX2FyZ3VtZW50czpcbiAgICAgIGlzQXV0b1BhcnNhYmxlVG9vbChpbnB1dFRvb2wpID8gaW5wdXRUb29sLiRwYXJzZVJhdyh0b29sQ2FsbC5hcmd1bWVudHMpXG4gICAgICA6IGlucHV0VG9vbD8uc3RyaWN0ID8gSlNPTi5wYXJzZSh0b29sQ2FsbC5hcmd1bWVudHMpXG4gICAgICA6IG51bGwsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRQYXJzZVRvb2xDYWxsKFxuICBwYXJhbXM6IFJlc3BvbnNlQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgdG9vbENhbGw6IFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbCxcbik6IGJvb2xlYW4ge1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0VG9vbCA9IGdldElucHV0VG9vbEJ5TmFtZShwYXJhbXMudG9vbHMgPz8gW10sIHRvb2xDYWxsLm5hbWUpO1xuICByZXR1cm4gaXNBdXRvUGFyc2FibGVUb29sKGlucHV0VG9vbCkgfHwgaW5wdXRUb29sPy5zdHJpY3QgfHwgZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUlucHV0VG9vbHModG9vbHM6IENoYXRDb21wbGV0aW9uVG9vbFtdIHwgdW5kZWZpbmVkKSB7XG4gIGZvciAoY29uc3QgdG9vbCBvZiB0b29scyA/PyBbXSkge1xuICAgIGlmICh0b29sLnR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihcbiAgICAgICAgYEN1cnJlbnRseSBvbmx5IFxcYGZ1bmN0aW9uXFxgIHRvb2wgdHlwZXMgc3VwcG9ydCBhdXRvLXBhcnNpbmc7IFJlY2VpdmVkIFxcYCR7dG9vbC50eXBlfVxcYGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0b29sLmZ1bmN0aW9uLnN0cmljdCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKFxuICAgICAgICBgVGhlIFxcYCR7dG9vbC5mdW5jdGlvbi5uYW1lfVxcYCB0b29sIGlzIG5vdCBtYXJrZWQgd2l0aCBcXGBzdHJpY3Q6IHRydWVcXGAuIE9ubHkgc3RyaWN0IGZ1bmN0aW9uIHRvb2xzIGNhbiBiZSBhdXRvLXBhcnNlZGAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkT3V0cHV0VGV4dChyc3A6IFJlc3BvbnNlKTogdm9pZCB7XG4gIGNvbnN0IHRleHRzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG91dHB1dCBvZiByc3Aub3V0cHV0KSB7XG4gICAgaWYgKG91dHB1dC50eXBlICE9PSAnbWVzc2FnZScpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29udGVudCBvZiBvdXRwdXQuY29udGVudCkge1xuICAgICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gJ291dHB1dF90ZXh0Jykge1xuICAgICAgICB0ZXh0cy5wdXNoKGNvbnRlbnQudGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcnNwLm91dHB1dF90ZXh0ID0gdGV4dHMuam9pbignJyk7XG59XG4iLCAiLy8gRmlsZSBnZW5lcmF0ZWQgZnJvbSBvdXIgT3BlbkFQSSBzcGVjIGJ5IFN0YWlubGVzcy4gU2VlIENPTlRSSUJVVElORy5tZCBmb3IgZGV0YWlscy5cblxuaW1wb3J0IHsgQVBJUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBpc1JlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgUmVzcG9uc2VzQVBJIGZyb20gJy4vcmVzcG9uc2VzJztcbmltcG9ydCB7IFJlc3BvbnNlSXRlbXNQYWdlIH0gZnJvbSAnLi9yZXNwb25zZXMnO1xuaW1wb3J0IHsgdHlwZSBDdXJzb3JQYWdlUGFyYW1zIH0gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBJbnB1dEl0ZW1zIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgaW5wdXQgaXRlbXMgZm9yIGEgZ2l2ZW4gcmVzcG9uc2UuXG4gICAqL1xuICBsaXN0KFxuICAgIHJlc3BvbnNlSWQ6IHN0cmluZyxcbiAgICBxdWVyeT86IElucHV0SXRlbUxpc3RQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8UmVzcG9uc2VJdGVtc1BhZ2UsIFJlc3BvbnNlc0FQSS5SZXNwb25zZUl0ZW0+O1xuICBsaXN0KFxuICAgIHJlc3BvbnNlSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxSZXNwb25zZUl0ZW1zUGFnZSwgUmVzcG9uc2VzQVBJLlJlc3BvbnNlSXRlbT47XG4gIGxpc3QoXG4gICAgcmVzcG9uc2VJZDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBJbnB1dEl0ZW1MaXN0UGFyYW1zIHwgQ29yZS5SZXF1ZXN0T3B0aW9ucyA9IHt9LFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPFJlc3BvbnNlSXRlbXNQYWdlLCBSZXNwb25zZXNBUEkuUmVzcG9uc2VJdGVtPiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0KHJlc3BvbnNlSWQsIHt9LCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdChgL3Jlc3BvbnNlcy8ke3Jlc3BvbnNlSWR9L2lucHV0X2l0ZW1zYCwgUmVzcG9uc2VJdGVtc1BhZ2UsIHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbGlzdCBvZiBSZXNwb25zZSBpdGVtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUl0ZW1MaXN0IHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBpdGVtcyB1c2VkIHRvIGdlbmVyYXRlIHRoaXMgcmVzcG9uc2UuXG4gICAqL1xuICBkYXRhOiBBcnJheTxSZXNwb25zZXNBUEkuUmVzcG9uc2VJdGVtPjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgKi9cbiAgZmlyc3RfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGVyZSBhcmUgbW9yZSBpdGVtcyBhdmFpbGFibGUuXG4gICAqL1xuICBoYXNfbW9yZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAqL1xuICBsYXN0X2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIG9iamVjdCByZXR1cm5lZCwgbXVzdCBiZSBgbGlzdGAuXG4gICAqL1xuICBvYmplY3Q6ICdsaXN0Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dEl0ZW1MaXN0UGFyYW1zIGV4dGVuZHMgQ3Vyc29yUGFnZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBpdGVtIElEIHRvIGxpc3QgaXRlbXMgYmVmb3JlLCB1c2VkIGluIHBhZ2luYXRpb24uXG4gICAqL1xuICBiZWZvcmU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcmRlciB0byByZXR1cm4gdGhlIGlucHV0IGl0ZW1zIGluLiBEZWZhdWx0IGlzIGBhc2NgLlxuICAgKlxuICAgKiAtIGBhc2NgOiBSZXR1cm4gdGhlIGlucHV0IGl0ZW1zIGluIGFzY2VuZGluZyBvcmRlci5cbiAgICogLSBgZGVzY2A6IFJldHVybiB0aGUgaW5wdXQgaXRlbXMgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICovXG4gIG9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBJbnB1dEl0ZW1zIHtcbiAgZXhwb3J0IHsgdHlwZSBSZXNwb25zZUl0ZW1MaXN0IGFzIFJlc3BvbnNlSXRlbUxpc3QsIHR5cGUgSW5wdXRJdGVtTGlzdFBhcmFtcyBhcyBJbnB1dEl0ZW1MaXN0UGFyYW1zIH07XG59XG5cbmV4cG9ydCB7IFJlc3BvbnNlSXRlbXNQYWdlIH07XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBQYXJzZWRSZXNwb25zZSxcbiAgdHlwZSBSZXNwb25zZSxcbiAgdHlwZSBSZXNwb25zZUNyZWF0ZVBhcmFtc0Jhc2UsXG4gIHR5cGUgUmVzcG9uc2VDcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gIHR5cGUgUmVzcG9uc2VTdHJlYW1FdmVudCxcbn0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Jlc3BvbnNlcy9yZXNwb25zZXMnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IEFQSVVzZXJBYm9ydEVycm9yLCBPcGVuQUlFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yJztcbmltcG9ydCBPcGVuQUkgZnJvbSAnLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHsgdHlwZSBCYXNlRXZlbnRzLCBFdmVudFN0cmVhbSB9IGZyb20gJy4uL0V2ZW50U3RyZWFtJztcbmltcG9ydCB7IHR5cGUgUmVzcG9uc2VGdW5jdGlvbkNhbGxBcmd1bWVudHNEZWx0YUV2ZW50LCB0eXBlIFJlc3BvbnNlVGV4dERlbHRhRXZlbnQgfSBmcm9tICcuL0V2ZW50VHlwZXMnO1xuaW1wb3J0IHsgbWF5YmVQYXJzZVJlc3BvbnNlIH0gZnJvbSAnLi4vUmVzcG9uc2VzUGFyc2VyJztcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VTdHJlYW1QYXJhbXMgPSBPbWl0PFJlc3BvbnNlQ3JlYXRlUGFyYW1zQmFzZSwgJ3N0cmVhbSc+ICYge1xuICBzdHJlYW0/OiB0cnVlO1xufTtcblxudHlwZSBSZXNwb25zZUV2ZW50cyA9IEJhc2VFdmVudHMgJlxuICBPbWl0PFxuICAgIHtcbiAgICAgIFtLIGluIFJlc3BvbnNlU3RyZWFtRXZlbnRbJ3R5cGUnXV06IChldmVudDogRXh0cmFjdDxSZXNwb25zZVN0cmVhbUV2ZW50LCB7IHR5cGU6IEsgfT4pID0+IHZvaWQ7XG4gICAgfSxcbiAgICAncmVzcG9uc2Uub3V0cHV0X3RleHQuZGVsdGEnIHwgJ3Jlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRlbHRhJ1xuICA+ICYge1xuICAgIGV2ZW50OiAoZXZlbnQ6IFJlc3BvbnNlU3RyZWFtRXZlbnQpID0+IHZvaWQ7XG4gICAgJ3Jlc3BvbnNlLm91dHB1dF90ZXh0LmRlbHRhJzogKGV2ZW50OiBSZXNwb25zZVRleHREZWx0YUV2ZW50KSA9PiB2b2lkO1xuICAgICdyZXNwb25zZS5mdW5jdGlvbl9jYWxsX2FyZ3VtZW50cy5kZWx0YSc6IChldmVudDogUmVzcG9uc2VGdW5jdGlvbkNhbGxBcmd1bWVudHNEZWx0YUV2ZW50KSA9PiB2b2lkO1xuICB9O1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZVN0cmVhbWluZ1BhcmFtcyA9IE9taXQ8UmVzcG9uc2VDcmVhdGVQYXJhbXNCYXNlLCAnc3RyZWFtJz4gJiB7XG4gIHN0cmVhbT86IHRydWU7XG59O1xuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VTdHJlYW08UGFyc2VkVCA9IG51bGw+XG4gIGV4dGVuZHMgRXZlbnRTdHJlYW08UmVzcG9uc2VFdmVudHM+XG4gIGltcGxlbWVudHMgQXN5bmNJdGVyYWJsZTxSZXNwb25zZVN0cmVhbUV2ZW50Plxue1xuICAjcGFyYW1zOiBSZXNwb25zZVN0cmVhbWluZ1BhcmFtcyB8IG51bGw7XG4gICNjdXJyZW50UmVzcG9uc2VTbmFwc2hvdDogUmVzcG9uc2UgfCB1bmRlZmluZWQ7XG4gICNmaW5hbFJlc3BvbnNlOiBQYXJzZWRSZXNwb25zZTxQYXJzZWRUPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihwYXJhbXM6IFJlc3BvbnNlU3RyZWFtaW5nUGFyYW1zIHwgbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jcGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVJlc3BvbnNlPFBhcnNlZFQ+KFxuICAgIGNsaWVudDogT3BlbkFJLFxuICAgIHBhcmFtczogUmVzcG9uc2VTdHJlYW1QYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IFJlc3BvbnNlU3RyZWFtPFBhcnNlZFQ+IHtcbiAgICBjb25zdCBydW5uZXIgPSBuZXcgUmVzcG9uc2VTdHJlYW08UGFyc2VkVD4ocGFyYW1zIGFzIFJlc3BvbnNlQ3JlYXRlUGFyYW1zU3RyZWFtaW5nKTtcbiAgICBydW5uZXIuX3J1bigoKSA9PlxuICAgICAgcnVubmVyLl9jcmVhdGVSZXNwb25zZShjbGllbnQsIHBhcmFtcywge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7IC4uLm9wdGlvbnM/LmhlYWRlcnMsICdYLVN0YWlubGVzcy1IZWxwZXItTWV0aG9kJzogJ3N0cmVhbScgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIHJ1bm5lcjtcbiAgfVxuXG4gICNiZWdpblJlcXVlc3QoKSB7XG4gICAgaWYgKHRoaXMuZW5kZWQpIHJldHVybjtcbiAgICB0aGlzLiNjdXJyZW50UmVzcG9uc2VTbmFwc2hvdCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gICNhZGRFdmVudCh0aGlzOiBSZXNwb25zZVN0cmVhbTxQYXJzZWRUPiwgZXZlbnQ6IFJlc3BvbnNlU3RyZWFtRXZlbnQpIHtcbiAgICBpZiAodGhpcy5lbmRlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLiNhY2N1bXVsYXRlUmVzcG9uc2UoZXZlbnQpO1xuICAgIHRoaXMuX2VtaXQoJ2V2ZW50JywgZXZlbnQpO1xuXG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdyZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YSc6IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gcmVzcG9uc2Uub3V0cHV0W2V2ZW50Lm91dHB1dF9pbmRleF07XG4gICAgICAgIGlmICghb3V0cHV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBtaXNzaW5nIG91dHB1dCBhdCBpbmRleCAke2V2ZW50Lm91dHB1dF9pbmRleH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0cHV0LnR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBvdXRwdXQuY29udGVudFtldmVudC5jb250ZW50X2luZGV4XTtcbiAgICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihgbWlzc2luZyBjb250ZW50IGF0IGluZGV4ICR7ZXZlbnQuY29udGVudF9pbmRleH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRlbnQudHlwZSAhPT0gJ291dHB1dF90ZXh0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBleHBlY3RlZCBjb250ZW50IHRvIGJlICdvdXRwdXRfdGV4dCcsIGdvdCAke2NvbnRlbnQudHlwZX1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9lbWl0KCdyZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YScsIHtcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgc25hcHNob3Q6IGNvbnRlbnQudGV4dCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3Jlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRlbHRhJzoge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSByZXNwb25zZS5vdXRwdXRbZXZlbnQub3V0cHV0X2luZGV4XTtcbiAgICAgICAgaWYgKCFvdXRwdXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoYG1pc3Npbmcgb3V0cHV0IGF0IGluZGV4ICR7ZXZlbnQub3V0cHV0X2luZGV4fWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdXRwdXQudHlwZSA9PT0gJ2Z1bmN0aW9uX2NhbGwnKSB7XG4gICAgICAgICAgdGhpcy5fZW1pdCgncmVzcG9uc2UuZnVuY3Rpb25fY2FsbF9hcmd1bWVudHMuZGVsdGEnLCB7XG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgIHNuYXBzaG90OiBvdXRwdXQuYXJndW1lbnRzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLl9lbWl0KGV2ZW50LnR5cGUsIGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgI2VuZFJlcXVlc3QoKTogUGFyc2VkUmVzcG9uc2U8UGFyc2VkVD4ge1xuICAgIGlmICh0aGlzLmVuZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgT3BlbkFJRXJyb3IoYHN0cmVhbSBoYXMgZW5kZWQsIHRoaXMgc2hvdWxkbid0IGhhcHBlbmApO1xuICAgIH1cbiAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMuI2N1cnJlbnRSZXNwb25zZVNuYXBzaG90O1xuICAgIGlmICghc25hcHNob3QpIHtcbiAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihgcmVxdWVzdCBlbmRlZCB3aXRob3V0IHNlbmRpbmcgYW55IGV2ZW50c2ApO1xuICAgIH1cbiAgICB0aGlzLiNjdXJyZW50UmVzcG9uc2VTbmFwc2hvdCA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJzZWRSZXNwb25zZSA9IGZpbmFsaXplUmVzcG9uc2U8UGFyc2VkVD4oc25hcHNob3QsIHRoaXMuI3BhcmFtcyk7XG4gICAgdGhpcy4jZmluYWxSZXNwb25zZSA9IHBhcnNlZFJlc3BvbnNlO1xuXG4gICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9jcmVhdGVSZXNwb25zZShcbiAgICBjbGllbnQ6IE9wZW5BSSxcbiAgICBwYXJhbXM6IFJlc3BvbnNlU3RyZWFtaW5nUGFyYW1zLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPFBhcnNlZFJlc3BvbnNlPFBhcnNlZFQ+PiB7XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucz8uc2lnbmFsO1xuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhpcy5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKSk7XG4gICAgfVxuICAgIHRoaXMuI2JlZ2luUmVxdWVzdCgpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgY2xpZW50LnJlc3BvbnNlcy5jcmVhdGUoXG4gICAgICB7IC4uLnBhcmFtcywgc3RyZWFtOiB0cnVlIH0sXG4gICAgICB7IC4uLm9wdGlvbnMsIHNpZ25hbDogdGhpcy5jb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICk7XG4gICAgdGhpcy5fY29ubmVjdGVkKCk7XG4gICAgZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBzdHJlYW0pIHtcbiAgICAgIHRoaXMuI2FkZEV2ZW50KGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5jb250cm9sbGVyLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEFQSVVzZXJBYm9ydEVycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNlbmRSZXF1ZXN0KCk7XG4gIH1cblxuICAjYWNjdW11bGF0ZVJlc3BvbnNlKGV2ZW50OiBSZXNwb25zZVN0cmVhbUV2ZW50KTogUmVzcG9uc2Uge1xuICAgIGxldCBzbmFwc2hvdCA9IHRoaXMuI2N1cnJlbnRSZXNwb25zZVNuYXBzaG90O1xuICAgIGlmICghc25hcHNob3QpIHtcbiAgICAgIGlmIChldmVudC50eXBlICE9PSAncmVzcG9uc2UuY3JlYXRlZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKFxuICAgICAgICAgIGBXaGVuIHNuYXBzaG90IGhhc24ndCBiZWVuIHNldCB5ZXQsIGV4cGVjdGVkICdyZXNwb25zZS5jcmVhdGVkJyBldmVudCwgZ290ICR7ZXZlbnQudHlwZX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc25hcHNob3QgPSB0aGlzLiNjdXJyZW50UmVzcG9uc2VTbmFwc2hvdCA9IGV2ZW50LnJlc3BvbnNlO1xuICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAncmVzcG9uc2Uub3V0cHV0X2l0ZW0uYWRkZWQnOiB7XG4gICAgICAgIHNuYXBzaG90Lm91dHB1dC5wdXNoKGV2ZW50Lml0ZW0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3Jlc3BvbnNlLmNvbnRlbnRfcGFydC5hZGRlZCc6IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gc25hcHNob3Qub3V0cHV0W2V2ZW50Lm91dHB1dF9pbmRleF07XG4gICAgICAgIGlmICghb3V0cHV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBtaXNzaW5nIG91dHB1dCBhdCBpbmRleCAke2V2ZW50Lm91dHB1dF9pbmRleH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0cHV0LnR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgICAgIG91dHB1dC5jb250ZW50LnB1c2goZXZlbnQucGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdyZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YSc6IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gc25hcHNob3Qub3V0cHV0W2V2ZW50Lm91dHB1dF9pbmRleF07XG4gICAgICAgIGlmICghb3V0cHV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBtaXNzaW5nIG91dHB1dCBhdCBpbmRleCAke2V2ZW50Lm91dHB1dF9pbmRleH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0cHV0LnR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBvdXRwdXQuY29udGVudFtldmVudC5jb250ZW50X2luZGV4XTtcbiAgICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihgbWlzc2luZyBjb250ZW50IGF0IGluZGV4ICR7ZXZlbnQuY29udGVudF9pbmRleH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRlbnQudHlwZSAhPT0gJ291dHB1dF90ZXh0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSUVycm9yKGBleHBlY3RlZCBjb250ZW50IHRvIGJlICdvdXRwdXRfdGV4dCcsIGdvdCAke2NvbnRlbnQudHlwZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGVudC50ZXh0ICs9IGV2ZW50LmRlbHRhO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncmVzcG9uc2UuZnVuY3Rpb25fY2FsbF9hcmd1bWVudHMuZGVsdGEnOiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHNuYXBzaG90Lm91dHB1dFtldmVudC5vdXRwdXRfaW5kZXhdO1xuICAgICAgICBpZiAoIW91dHB1dCkge1xuICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlFcnJvcihgbWlzc2luZyBvdXRwdXQgYXQgaW5kZXggJHtldmVudC5vdXRwdXRfaW5kZXh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG91dHB1dC50eXBlID09PSAnZnVuY3Rpb25fY2FsbCcpIHtcbiAgICAgICAgICBvdXRwdXQuYXJndW1lbnRzICs9IGV2ZW50LmRlbHRhO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncmVzcG9uc2UuY29tcGxldGVkJzoge1xuICAgICAgICB0aGlzLiNjdXJyZW50UmVzcG9uc2VTbmFwc2hvdCA9IGV2ZW50LnJlc3BvbnNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc25hcHNob3Q7XG4gIH1cblxuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKHRoaXM6IFJlc3BvbnNlU3RyZWFtPFBhcnNlZFQ+KTogQXN5bmNJdGVyYXRvcjxSZXNwb25zZVN0cmVhbUV2ZW50PiB7XG4gICAgY29uc3QgcHVzaFF1ZXVlOiBSZXNwb25zZVN0cmVhbUV2ZW50W10gPSBbXTtcbiAgICBjb25zdCByZWFkUXVldWU6IHtcbiAgICAgIHJlc29sdmU6IChldmVudDogUmVzcG9uc2VTdHJlYW1FdmVudCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgICAgIHJlamVjdDogKGVycjogdW5rbm93bikgPT4gdm9pZDtcbiAgICB9W10gPSBbXTtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5vbignZXZlbnQnLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlYWRRdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKHJlYWRlcikge1xuICAgICAgICByZWFkZXIucmVzb2x2ZShldmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwdXNoUXVldWUucHVzaChldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHJlYWRRdWV1ZSkge1xuICAgICAgICByZWFkZXIucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgcmVhZFF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uKCdhYm9ydCcsIChlcnIpID0+IHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCByZWFkZXIgb2YgcmVhZFF1ZXVlKSB7XG4gICAgICAgIHJlYWRlci5yZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlYWRRdWV1ZS5sZW5ndGggPSAwO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHJlYWRRdWV1ZSkge1xuICAgICAgICByZWFkZXIucmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICByZWFkUXVldWUubGVuZ3RoID0gMDtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiBhc3luYyAoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxSZXNwb25zZVN0cmVhbUV2ZW50Pj4gPT4ge1xuICAgICAgICBpZiAoIXB1c2hRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8UmVzcG9uc2VTdHJlYW1FdmVudCB8IHVuZGVmaW5lZD4oKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAgICAgIHJlYWRRdWV1ZS5wdXNoKHsgcmVzb2x2ZSwgcmVqZWN0IH0pLFxuICAgICAgICAgICkudGhlbigoZXZlbnQpID0+IChldmVudCA/IHsgdmFsdWU6IGV2ZW50LCBkb25lOiBmYWxzZSB9IDogeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudCA9IHB1c2hRdWV1ZS5zaGlmdCgpITtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGV2ZW50LCBkb25lOiBmYWxzZSB9O1xuICAgICAgfSxcbiAgICAgIHJldHVybjogYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzLmFib3J0KCk7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBmaW5hbCBSZXNwb25zZSwgb3IgcmVqZWN0c1xuICAgKiBpZiBhbiBlcnJvciBvY2N1cnJlZCBvciB0aGUgc3RyZWFtIGVuZGVkIHByZW1hdHVyZWx5IHdpdGhvdXQgcHJvZHVjaW5nIGEgUkVzcG9uc2UuXG4gICAqL1xuICBhc3luYyBmaW5hbFJlc3BvbnNlKCk6IFByb21pc2U8UGFyc2VkUmVzcG9uc2U8UGFyc2VkVD4+IHtcbiAgICBhd2FpdCB0aGlzLmRvbmUoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuI2ZpbmFsUmVzcG9uc2U7XG4gICAgaWYgKCFyZXNwb25zZSkgdGhyb3cgbmV3IE9wZW5BSUVycm9yKCdzdHJlYW0gZW5kZWQgd2l0aG91dCBwcm9kdWNpbmcgYSBDaGF0Q29tcGxldGlvbicpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5hbGl6ZVJlc3BvbnNlPFBhcnNlZFQ+KFxuICBzbmFwc2hvdDogUmVzcG9uc2UsXG4gIHBhcmFtczogUmVzcG9uc2VTdHJlYW1pbmdQYXJhbXMgfCBudWxsLFxuKTogUGFyc2VkUmVzcG9uc2U8UGFyc2VkVD4ge1xuICByZXR1cm4gbWF5YmVQYXJzZVJlc3BvbnNlKHNuYXBzaG90LCBwYXJhbXMpO1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7XG4gIHR5cGUgRXh0cmFjdFBhcnNlZENvbnRlbnRGcm9tUGFyYW1zLFxuICBwYXJzZVJlc3BvbnNlLFxuICB0eXBlIFJlc3BvbnNlQ3JlYXRlUGFyYW1zV2l0aFRvb2xzLFxuICBhZGRPdXRwdXRUZXh0LFxufSBmcm9tICcuLi8uLi9saWIvUmVzcG9uc2VzUGFyc2VyJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBUElQcm9taXNlLCBpc1JlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCAqIGFzIFNoYXJlZCBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0ICogYXMgSW5wdXRJdGVtc0FQSSBmcm9tICcuL2lucHV0LWl0ZW1zJztcbmltcG9ydCB7IElucHV0SXRlbUxpc3RQYXJhbXMsIElucHV0SXRlbXMsIFJlc3BvbnNlSXRlbUxpc3QgfSBmcm9tICcuL2lucHV0LWl0ZW1zJztcbmltcG9ydCAqIGFzIFJlc3BvbnNlc0FQSSBmcm9tICcuL3Jlc3BvbnNlcyc7XG5pbXBvcnQgeyBSZXNwb25zZVN0cmVhbSwgUmVzcG9uc2VTdHJlYW1QYXJhbXMgfSBmcm9tICcuLi8uLi9saWIvcmVzcG9uc2VzL1Jlc3BvbnNlU3RyZWFtJztcbmltcG9ydCB7IEN1cnNvclBhZ2UgfSBmcm9tICcuLi8uLi9wYWdpbmF0aW9uJztcbmltcG9ydCB7IFN0cmVhbSB9IGZyb20gJy4uLy4uL3N0cmVhbWluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmVzcG9uc2VPdXRwdXRUZXh0PFBhcnNlZFQ+IGV4dGVuZHMgUmVzcG9uc2VPdXRwdXRUZXh0IHtcbiAgcGFyc2VkOiBQYXJzZWRUIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkQ29udGVudDxQYXJzZWRUPiA9IFBhcnNlZFJlc3BvbnNlT3V0cHV0VGV4dDxQYXJzZWRUPiB8IFJlc3BvbnNlT3V0cHV0UmVmdXNhbDtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRSZXNwb25zZU91dHB1dE1lc3NhZ2U8UGFyc2VkVD4gZXh0ZW5kcyBSZXNwb25zZU91dHB1dE1lc3NhZ2Uge1xuICBjb250ZW50OiBQYXJzZWRDb250ZW50PFBhcnNlZFQ+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmVzcG9uc2VGdW5jdGlvblRvb2xDYWxsIGV4dGVuZHMgUmVzcG9uc2VGdW5jdGlvblRvb2xDYWxsIHtcbiAgcGFyc2VkX2FyZ3VtZW50czogYW55O1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRSZXNwb25zZU91dHB1dEl0ZW08UGFyc2VkVD4gPVxuICB8IFBhcnNlZFJlc3BvbnNlT3V0cHV0TWVzc2FnZTxQYXJzZWRUPlxuICB8IFBhcnNlZFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbFxuICB8IFJlc3BvbnNlRmlsZVNlYXJjaFRvb2xDYWxsXG4gIHwgUmVzcG9uc2VGdW5jdGlvbldlYlNlYXJjaFxuICB8IFJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbFxuICB8IFJlc3BvbnNlUmVhc29uaW5nSXRlbTtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRSZXNwb25zZTxQYXJzZWRUPiBleHRlbmRzIFJlc3BvbnNlIHtcbiAgb3V0cHV0OiBBcnJheTxQYXJzZWRSZXNwb25zZU91dHB1dEl0ZW08UGFyc2VkVD4+O1xuXG4gIG91dHB1dF9wYXJzZWQ6IFBhcnNlZFQgfCBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBSZXNwb25zZVBhcnNlUGFyYW1zID0gUmVzcG9uc2VDcmVhdGVQYXJhbXNOb25TdHJlYW1pbmc7XG5leHBvcnQgY2xhc3MgUmVzcG9uc2VzIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICBpbnB1dEl0ZW1zOiBJbnB1dEl0ZW1zQVBJLklucHV0SXRlbXMgPSBuZXcgSW5wdXRJdGVtc0FQSS5JbnB1dEl0ZW1zKHRoaXMuX2NsaWVudCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtb2RlbCByZXNwb25zZS4gUHJvdmlkZVxuICAgKiBbdGV4dF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3RleHQpIG9yXG4gICAqIFtpbWFnZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2ltYWdlcykgaW5wdXRzIHRvIGdlbmVyYXRlXG4gICAqIFt0ZXh0XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdGV4dCkgb3JcbiAgICogW0pTT05dKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zdHJ1Y3R1cmVkLW91dHB1dHMpIG91dHB1dHMuIEhhdmVcbiAgICogdGhlIG1vZGVsIGNhbGwgeW91ciBvd25cbiAgICogW2N1c3RvbSBjb2RlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvZnVuY3Rpb24tY2FsbGluZykgb3IgdXNlXG4gICAqIGJ1aWx0LWluIFt0b29sc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3Rvb2xzKSBsaWtlXG4gICAqIFt3ZWIgc2VhcmNoXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdG9vbHMtd2ViLXNlYXJjaCkgb3JcbiAgICogW2ZpbGUgc2VhcmNoXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdG9vbHMtZmlsZS1zZWFyY2gpIHRvIHVzZVxuICAgKiB5b3VyIG93biBkYXRhIGFzIGlucHV0IGZvciB0aGUgbW9kZWwncyByZXNwb25zZS5cbiAgICovXG4gIGNyZWF0ZShib2R5OiBSZXNwb25zZUNyZWF0ZVBhcmFtc05vblN0cmVhbWluZywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBBUElQcm9taXNlPFJlc3BvbnNlPjtcbiAgY3JlYXRlKFxuICAgIGJvZHk6IFJlc3BvbnNlQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBBUElQcm9taXNlPFN0cmVhbTxSZXNwb25zZVN0cmVhbUV2ZW50Pj47XG4gIGNyZWF0ZShcbiAgICBib2R5OiBSZXNwb25zZUNyZWF0ZVBhcmFtc0Jhc2UsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IEFQSVByb21pc2U8U3RyZWFtPFJlc3BvbnNlU3RyZWFtRXZlbnQ+IHwgUmVzcG9uc2U+O1xuICBjcmVhdGUoXG4gICAgYm9keTogUmVzcG9uc2VDcmVhdGVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IEFQSVByb21pc2U8UmVzcG9uc2U+IHwgQVBJUHJvbWlzZTxTdHJlYW08UmVzcG9uc2VTdHJlYW1FdmVudD4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fY2xpZW50LnBvc3QoJy9yZXNwb25zZXMnLCB7IGJvZHksIC4uLm9wdGlvbnMsIHN0cmVhbTogYm9keS5zdHJlYW0gPz8gZmFsc2UgfSkgYXNcbiAgICAgICAgfCBBUElQcm9taXNlPFJlc3BvbnNlPlxuICAgICAgICB8IEFQSVByb21pc2U8U3RyZWFtPFJlc3BvbnNlU3RyZWFtRXZlbnQ+PlxuICAgICkuX3RoZW5VbndyYXAoKHJzcCkgPT4ge1xuICAgICAgaWYgKCdvYmplY3QnIGluIHJzcCAmJiByc3Aub2JqZWN0ID09PSAncmVzcG9uc2UnKSB7XG4gICAgICAgIGFkZE91dHB1dFRleHQocnNwIGFzIFJlc3BvbnNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJzcDtcbiAgICB9KSBhcyBBUElQcm9taXNlPFJlc3BvbnNlPiB8IEFQSVByb21pc2U8U3RyZWFtPFJlc3BvbnNlU3RyZWFtRXZlbnQ+PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBtb2RlbCByZXNwb25zZSB3aXRoIHRoZSBnaXZlbiBJRC5cbiAgICovXG4gIHJldHJpZXZlKFxuICAgIHJlc3BvbnNlSWQ6IHN0cmluZyxcbiAgICBxdWVyeT86IFJlc3BvbnNlUmV0cmlldmVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxSZXNwb25zZT47XG4gIHJldHJpZXZlKHJlc3BvbnNlSWQ6IHN0cmluZywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkFQSVByb21pc2U8UmVzcG9uc2U+O1xuICByZXRyaWV2ZShcbiAgICByZXNwb25zZUlkOiBzdHJpbmcsXG4gICAgcXVlcnk6IFJlc3BvbnNlUmV0cmlldmVQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGlmIChpc1JlcXVlc3RPcHRpb25zKHF1ZXJ5KSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV0cmlldmUocmVzcG9uc2VJZCwge30sIHF1ZXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXQoYC9yZXNwb25zZXMvJHtyZXNwb25zZUlkfWAsIHsgcXVlcnksIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIG1vZGVsIHJlc3BvbnNlIHdpdGggdGhlIGdpdmVuIElELlxuICAgKi9cbiAgZGVsKHJlc3BvbnNlSWQ6IHN0cmluZywgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkFQSVByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZGVsZXRlKGAvcmVzcG9uc2VzLyR7cmVzcG9uc2VJZH1gLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyBBY2NlcHQ6ICcqLyonLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cblxuICBwYXJzZTxQYXJhbXMgZXh0ZW5kcyBSZXNwb25zZUNyZWF0ZVBhcmFtc1dpdGhUb29scywgUGFyc2VkVCA9IEV4dHJhY3RQYXJzZWRDb250ZW50RnJvbVBhcmFtczxQYXJhbXM+PihcbiAgICBib2R5OiBQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxQYXJzZWRSZXNwb25zZTxQYXJzZWRUPj4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucmVzcG9uc2VzXG4gICAgICAuY3JlYXRlKGJvZHksIG9wdGlvbnMpXG4gICAgICAuX3RoZW5VbndyYXAoKHJlc3BvbnNlKSA9PiBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlIGFzIFJlc3BvbnNlLCBib2R5KSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNoYXQgY29tcGxldGlvbiBzdHJlYW1cbiAgICovXG4gIHN0cmVhbTxQYXJhbXMgZXh0ZW5kcyBSZXNwb25zZVN0cmVhbVBhcmFtcywgUGFyc2VkVCA9IEV4dHJhY3RQYXJzZWRDb250ZW50RnJvbVBhcmFtczxQYXJhbXM+PihcbiAgICBib2R5OiBQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IFJlc3BvbnNlU3RyZWFtPFBhcnNlZFQ+IHtcbiAgICByZXR1cm4gUmVzcG9uc2VTdHJlYW0uY3JlYXRlUmVzcG9uc2U8UGFyc2VkVD4odGhpcy5fY2xpZW50LCBib2R5LCBvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VJdGVtc1BhZ2UgZXh0ZW5kcyBDdXJzb3JQYWdlPFJlc3BvbnNlSXRlbT4ge31cblxuLyoqXG4gKiBBIHRvb2wgdGhhdCBjb250cm9scyBhIHZpcnR1YWwgY29tcHV0ZXIuIExlYXJuIG1vcmUgYWJvdXQgdGhlXG4gKiBbY29tcHV0ZXIgdG9vbF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3Rvb2xzLWNvbXB1dGVyLXVzZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZXJUb29sIHtcbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNvbXB1dGVyIGRpc3BsYXkuXG4gICAqL1xuICBkaXNwbGF5X2hlaWdodDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGNvbXB1dGVyIGRpc3BsYXkuXG4gICAqL1xuICBkaXNwbGF5X3dpZHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGNvbXB1dGVyIGVudmlyb25tZW50IHRvIGNvbnRyb2wuXG4gICAqL1xuICBlbnZpcm9ubWVudDogJ21hYycgfCAnd2luZG93cycgfCAndWJ1bnR1JyB8ICdicm93c2VyJztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbXB1dGVyIHVzZSB0b29sLiBBbHdheXMgYGNvbXB1dGVyX3VzZV9wcmV2aWV3YC5cbiAgICovXG4gIHR5cGU6ICdjb21wdXRlci1wcmV2aWV3Jztcbn1cblxuLyoqXG4gKiBBIG1lc3NhZ2UgaW5wdXQgdG8gdGhlIG1vZGVsIHdpdGggYSByb2xlIGluZGljYXRpbmcgaW5zdHJ1Y3Rpb24gZm9sbG93aW5nXG4gKiBoaWVyYXJjaHkuIEluc3RydWN0aW9ucyBnaXZlbiB3aXRoIHRoZSBgZGV2ZWxvcGVyYCBvciBgc3lzdGVtYCByb2xlIHRha2VcbiAqIHByZWNlZGVuY2Ugb3ZlciBpbnN0cnVjdGlvbnMgZ2l2ZW4gd2l0aCB0aGUgYHVzZXJgIHJvbGUuIE1lc3NhZ2VzIHdpdGggdGhlXG4gKiBgYXNzaXN0YW50YCByb2xlIGFyZSBwcmVzdW1lZCB0byBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbCBpbiBwcmV2aW91c1xuICogaW50ZXJhY3Rpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVhc3lJbnB1dE1lc3NhZ2Uge1xuICAvKipcbiAgICogVGV4dCwgaW1hZ2UsIG9yIGF1ZGlvIGlucHV0IHRvIHRoZSBtb2RlbCwgdXNlZCB0byBnZW5lcmF0ZSBhIHJlc3BvbnNlLiBDYW4gYWxzb1xuICAgKiBjb250YWluIHByZXZpb3VzIGFzc2lzdGFudCByZXNwb25zZXMuXG4gICAqL1xuICBjb250ZW50OiBzdHJpbmcgfCBSZXNwb25zZUlucHV0TWVzc2FnZUNvbnRlbnRMaXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBvZiB0aGUgbWVzc2FnZSBpbnB1dC4gT25lIG9mIGB1c2VyYCwgYGFzc2lzdGFudGAsIGBzeXN0ZW1gLCBvclxuICAgKiBgZGV2ZWxvcGVyYC5cbiAgICovXG4gIHJvbGU6ICd1c2VyJyB8ICdhc3Npc3RhbnQnIHwgJ3N5c3RlbScgfCAnZGV2ZWxvcGVyJztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UgaW5wdXQuIEFsd2F5cyBgbWVzc2FnZWAuXG4gICAqL1xuICB0eXBlPzogJ21lc3NhZ2UnO1xufVxuXG4vKipcbiAqIEEgdG9vbCB0aGF0IHNlYXJjaGVzIGZvciByZWxldmFudCBjb250ZW50IGZyb20gdXBsb2FkZWQgZmlsZXMuIExlYXJuIG1vcmUgYWJvdXRcbiAqIHRoZVxuICogW2ZpbGUgc2VhcmNoIHRvb2xdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90b29scy1maWxlLXNlYXJjaCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNlYXJjaFRvb2wge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGZpbGUgc2VhcmNoIHRvb2wuIEFsd2F5cyBgZmlsZV9zZWFyY2hgLlxuICAgKi9cbiAgdHlwZTogJ2ZpbGVfc2VhcmNoJztcblxuICAvKipcbiAgICogVGhlIElEcyBvZiB0aGUgdmVjdG9yIHN0b3JlcyB0byBzZWFyY2guXG4gICAqL1xuICB2ZWN0b3Jfc3RvcmVfaWRzOiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGZpbHRlciB0byBhcHBseSBiYXNlZCBvbiBmaWxlIGF0dHJpYnV0ZXMuXG4gICAqL1xuICBmaWx0ZXJzPzogU2hhcmVkLkNvbXBhcmlzb25GaWx0ZXIgfCBTaGFyZWQuQ29tcG91bmRGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZXN1bHRzIHRvIHJldHVybi4gVGhpcyBudW1iZXIgc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgNTBcbiAgICogaW5jbHVzaXZlLlxuICAgKi9cbiAgbWF4X251bV9yZXN1bHRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSYW5raW5nIG9wdGlvbnMgZm9yIHNlYXJjaC5cbiAgICovXG4gIHJhbmtpbmdfb3B0aW9ucz86IEZpbGVTZWFyY2hUb29sLlJhbmtpbmdPcHRpb25zO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpbGVTZWFyY2hUb29sIHtcbiAgLyoqXG4gICAqIFJhbmtpbmcgb3B0aW9ucyBmb3Igc2VhcmNoLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBSYW5raW5nT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHJhbmtlciB0byB1c2UgZm9yIHRoZSBmaWxlIHNlYXJjaC5cbiAgICAgKi9cbiAgICByYW5rZXI/OiAnYXV0bycgfCAnZGVmYXVsdC0yMDI0LTExLTE1JztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY29yZSB0aHJlc2hvbGQgZm9yIHRoZSBmaWxlIHNlYXJjaCwgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLiBOdW1iZXJzXG4gICAgICogY2xvc2VyIHRvIDEgd2lsbCBhdHRlbXB0IHRvIHJldHVybiBvbmx5IHRoZSBtb3N0IHJlbGV2YW50IHJlc3VsdHMsIGJ1dCBtYXlcbiAgICAgKiByZXR1cm4gZmV3ZXIgcmVzdWx0cy5cbiAgICAgKi9cbiAgICBzY29yZV90aHJlc2hvbGQ/OiBudW1iZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgZnVuY3Rpb24gaW4geW91ciBvd24gY29kZSB0aGUgbW9kZWwgY2FuIGNob29zZSB0byBjYWxsLiBMZWFybiBtb3JlXG4gKiBhYm91dFxuICogW2Z1bmN0aW9uIGNhbGxpbmddKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9mdW5jdGlvbi1jYWxsaW5nKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblRvb2wge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgSlNPTiBzY2hlbWEgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5mb3JjZSBzdHJpY3QgcGFyYW1ldGVyIHZhbGlkYXRpb24uIERlZmF1bHQgYHRydWVgLlxuICAgKi9cbiAgc3RyaWN0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gdG9vbC4gQWx3YXlzIGBmdW5jdGlvbmAuXG4gICAqL1xuICB0eXBlOiAnZnVuY3Rpb24nO1xuXG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvbi4gVXNlZCBieSB0aGUgbW9kZWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvXG4gICAqIGNhbGwgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIFJlc3BvbnNlLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIG9mIHdoZW4gdGhpcyBSZXNwb25zZSB3YXMgY3JlYXRlZC5cbiAgICovXG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcblxuICBvdXRwdXRfdGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciBvYmplY3QgcmV0dXJuZWQgd2hlbiB0aGUgbW9kZWwgZmFpbHMgdG8gZ2VuZXJhdGUgYSBSZXNwb25zZS5cbiAgICovXG4gIGVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbDtcblxuICAvKipcbiAgICogRGV0YWlscyBhYm91dCB3aHkgdGhlIHJlc3BvbnNlIGlzIGluY29tcGxldGUuXG4gICAqL1xuICBpbmNvbXBsZXRlX2RldGFpbHM6IFJlc3BvbnNlLkluY29tcGxldGVEZXRhaWxzIHwgbnVsbDtcblxuICAvKipcbiAgICogSW5zZXJ0cyBhIHN5c3RlbSAob3IgZGV2ZWxvcGVyKSBtZXNzYWdlIGFzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBtb2RlbCdzXG4gICAqIGNvbnRleHQuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgYWxvbmcgd2l0aCBgcHJldmlvdXNfcmVzcG9uc2VfaWRgLCB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20gYSBwcmV2aW91c1xuICAgKiByZXNwb25zZSB3aWxsIGJlIG5vdCBiZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQgcmVzcG9uc2UuIFRoaXMgbWFrZXMgaXQgc2ltcGxlXG4gICAqIHRvIHN3YXAgb3V0IHN5c3RlbSAob3IgZGV2ZWxvcGVyKSBtZXNzYWdlcyBpbiBuZXcgcmVzcG9uc2VzLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgMTYga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFuIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZnVsXG4gICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICogcXVlcnlpbmcgZm9yIG9iamVjdHMgdmlhIEFQSSBvciB0aGUgZGFzaGJvYXJkLlxuICAgKlxuICAgKiBLZXlzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLiBWYWx1ZXMgYXJlIHN0cmluZ3Mgd2l0aFxuICAgKiBhIG1heGltdW0gbGVuZ3RoIG9mIDUxMiBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgbWV0YWRhdGE6IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIE1vZGVsIElEIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJlc3BvbnNlLCBsaWtlIGBncHQtNG9gIG9yIGBvMWAuIE9wZW5BSSBvZmZlcnMgYVxuICAgKiB3aWRlIHJhbmdlIG9mIG1vZGVscyB3aXRoIGRpZmZlcmVudCBjYXBhYmlsaXRpZXMsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyxcbiAgICogYW5kIHByaWNlIHBvaW50cy4gUmVmZXIgdG8gdGhlXG4gICAqIFttb2RlbCBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvbW9kZWxzKSB0byBicm93c2UgYW5kIGNvbXBhcmVcbiAgICogYXZhaWxhYmxlIG1vZGVscy5cbiAgICovXG4gIG1vZGVsOiBTaGFyZWQuUmVzcG9uc2VzTW9kZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSBvZiB0aGlzIHJlc291cmNlIC0gYWx3YXlzIHNldCB0byBgcmVzcG9uc2VgLlxuICAgKi9cbiAgb2JqZWN0OiAncmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBjb250ZW50IGl0ZW1zIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwuXG4gICAqXG4gICAqIC0gVGhlIGxlbmd0aCBhbmQgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIGBvdXRwdXRgIGFycmF5IGlzIGRlcGVuZGVudCBvbiB0aGVcbiAgICogICBtb2RlbCdzIHJlc3BvbnNlLlxuICAgKiAtIFJhdGhlciB0aGFuIGFjY2Vzc2luZyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgYG91dHB1dGAgYXJyYXkgYW5kIGFzc3VtaW5nIGl0J3NcbiAgICogICBhbiBgYXNzaXN0YW50YCBtZXNzYWdlIHdpdGggdGhlIGNvbnRlbnQgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbCwgeW91IG1pZ2h0XG4gICAqICAgY29uc2lkZXIgdXNpbmcgdGhlIGBvdXRwdXRfdGV4dGAgcHJvcGVydHkgd2hlcmUgc3VwcG9ydGVkIGluIFNES3MuXG4gICAqL1xuICBvdXRwdXQ6IEFycmF5PFJlc3BvbnNlT3V0cHV0SXRlbT47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgdGhlIG1vZGVsIHRvIHJ1biB0b29sIGNhbGxzIGluIHBhcmFsbGVsLlxuICAgKi9cbiAgcGFyYWxsZWxfdG9vbF9jYWxsczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hhdCBzYW1wbGluZyB0ZW1wZXJhdHVyZSB0byB1c2UsIGJldHdlZW4gMCBhbmQgMi4gSGlnaGVyIHZhbHVlcyBsaWtlIDAuOCB3aWxsXG4gICAqIG1ha2UgdGhlIG91dHB1dCBtb3JlIHJhbmRvbSwgd2hpbGUgbG93ZXIgdmFsdWVzIGxpa2UgMC4yIHdpbGwgbWFrZSBpdCBtb3JlXG4gICAqIGZvY3VzZWQgYW5kIGRldGVybWluaXN0aWMuIFdlIGdlbmVyYWxseSByZWNvbW1lbmQgYWx0ZXJpbmcgdGhpcyBvciBgdG9wX3BgIGJ1dFxuICAgKiBub3QgYm90aC5cbiAgICovXG4gIHRlbXBlcmF0dXJlOiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIG1vZGVsIHNob3VsZCBzZWxlY3Qgd2hpY2ggdG9vbCAob3IgdG9vbHMpIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgYVxuICAgKiByZXNwb25zZS4gU2VlIHRoZSBgdG9vbHNgIHBhcmFtZXRlciB0byBzZWUgaG93IHRvIHNwZWNpZnkgd2hpY2ggdG9vbHMgdGhlIG1vZGVsXG4gICAqIGNhbiBjYWxsLlxuICAgKi9cbiAgdG9vbF9jaG9pY2U6IFRvb2xDaG9pY2VPcHRpb25zIHwgVG9vbENob2ljZVR5cGVzIHwgVG9vbENob2ljZUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiB0b29scyB0aGUgbW9kZWwgbWF5IGNhbGwgd2hpbGUgZ2VuZXJhdGluZyBhIHJlc3BvbnNlLiBZb3UgY2FuXG4gICAqIHNwZWNpZnkgd2hpY2ggdG9vbCB0byB1c2UgYnkgc2V0dGluZyB0aGUgYHRvb2xfY2hvaWNlYCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIFRoZSB0d28gY2F0ZWdvcmllcyBvZiB0b29scyB5b3UgY2FuIHByb3ZpZGUgdGhlIG1vZGVsIGFyZTpcbiAgICpcbiAgICogLSAqKkJ1aWx0LWluIHRvb2xzKio6IFRvb2xzIHRoYXQgYXJlIHByb3ZpZGVkIGJ5IE9wZW5BSSB0aGF0IGV4dGVuZCB0aGUgbW9kZWwnc1xuICAgKiAgIGNhcGFiaWxpdGllcywgbGlrZVxuICAgKiAgIFt3ZWIgc2VhcmNoXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdG9vbHMtd2ViLXNlYXJjaCkgb3JcbiAgICogICBbZmlsZSBzZWFyY2hdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90b29scy1maWxlLXNlYXJjaCkuXG4gICAqICAgTGVhcm4gbW9yZSBhYm91dFxuICAgKiAgIFtidWlsdC1pbiB0b29sc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3Rvb2xzKS5cbiAgICogLSAqKkZ1bmN0aW9uIGNhbGxzIChjdXN0b20gdG9vbHMpKio6IEZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGJ5IHlvdSwgZW5hYmxpbmdcbiAgICogICB0aGUgbW9kZWwgdG8gY2FsbCB5b3VyIG93biBjb2RlLiBMZWFybiBtb3JlIGFib3V0XG4gICAqICAgW2Z1bmN0aW9uIGNhbGxpbmddKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9mdW5jdGlvbi1jYWxsaW5nKS5cbiAgICovXG4gIHRvb2xzOiBBcnJheTxUb29sPjtcblxuICAvKipcbiAgICogQW4gYWx0ZXJuYXRpdmUgdG8gc2FtcGxpbmcgd2l0aCB0ZW1wZXJhdHVyZSwgY2FsbGVkIG51Y2xldXMgc2FtcGxpbmcsIHdoZXJlIHRoZVxuICAgKiBtb2RlbCBjb25zaWRlcnMgdGhlIHJlc3VsdHMgb2YgdGhlIHRva2VucyB3aXRoIHRvcF9wIHByb2JhYmlsaXR5IG1hc3MuIFNvIDAuMVxuICAgKiBtZWFucyBvbmx5IHRoZSB0b2tlbnMgY29tcHJpc2luZyB0aGUgdG9wIDEwJSBwcm9iYWJpbGl0eSBtYXNzIGFyZSBjb25zaWRlcmVkLlxuICAgKlxuICAgKiBXZSBnZW5lcmFsbHkgcmVjb21tZW5kIGFsdGVyaW5nIHRoaXMgb3IgYHRlbXBlcmF0dXJlYCBidXQgbm90IGJvdGguXG4gICAqL1xuICB0b3BfcDogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQW4gdXBwZXIgYm91bmQgZm9yIHRoZSBudW1iZXIgb2YgdG9rZW5zIHRoYXQgY2FuIGJlIGdlbmVyYXRlZCBmb3IgYSByZXNwb25zZSxcbiAgICogaW5jbHVkaW5nIHZpc2libGUgb3V0cHV0IHRva2VucyBhbmRcbiAgICogW3JlYXNvbmluZyB0b2tlbnNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9yZWFzb25pbmcpLlxuICAgKi9cbiAgbWF4X291dHB1dF90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBwcmV2aW91cyByZXNwb25zZSB0byB0aGUgbW9kZWwuIFVzZSB0aGlzIHRvIGNyZWF0ZVxuICAgKiBtdWx0aS10dXJuIGNvbnZlcnNhdGlvbnMuIExlYXJuIG1vcmUgYWJvdXRcbiAgICogW2NvbnZlcnNhdGlvbiBzdGF0ZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2NvbnZlcnNhdGlvbi1zdGF0ZSkuXG4gICAqL1xuICBwcmV2aW91c19yZXNwb25zZV9pZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqICoqby1zZXJpZXMgbW9kZWxzIG9ubHkqKlxuICAgKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yXG4gICAqIFtyZWFzb25pbmcgbW9kZWxzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvcmVhc29uaW5nKS5cbiAgICovXG4gIHJlYXNvbmluZz86IFNoYXJlZC5SZWFzb25pbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSByZXNwb25zZSBnZW5lcmF0aW9uLiBPbmUgb2YgYGNvbXBsZXRlZGAsIGBmYWlsZWRgLFxuICAgKiBgaW5fcHJvZ3Jlc3NgLCBvciBgaW5jb21wbGV0ZWAuXG4gICAqL1xuICBzdGF0dXM/OiBSZXNwb25zZVN0YXR1cztcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHRleHQgcmVzcG9uc2UgZnJvbSB0aGUgbW9kZWwuIENhbiBiZSBwbGFpbiB0ZXh0IG9yXG4gICAqIHN0cnVjdHVyZWQgSlNPTiBkYXRhLiBMZWFybiBtb3JlOlxuICAgKlxuICAgKiAtIFtUZXh0IGlucHV0cyBhbmQgb3V0cHV0c10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3RleHQpXG4gICAqIC0gW1N0cnVjdHVyZWQgT3V0cHV0c10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3N0cnVjdHVyZWQtb3V0cHV0cylcbiAgICovXG4gIHRleHQ/OiBSZXNwb25zZVRleHRDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSB0cnVuY2F0aW9uIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIG1vZGVsIHJlc3BvbnNlLlxuICAgKlxuICAgKiAtIGBhdXRvYDogSWYgdGhlIGNvbnRleHQgb2YgdGhpcyByZXNwb25zZSBhbmQgcHJldmlvdXMgb25lcyBleGNlZWRzIHRoZSBtb2RlbCdzXG4gICAqICAgY29udGV4dCB3aW5kb3cgc2l6ZSwgdGhlIG1vZGVsIHdpbGwgdHJ1bmNhdGUgdGhlIHJlc3BvbnNlIHRvIGZpdCB0aGUgY29udGV4dFxuICAgKiAgIHdpbmRvdyBieSBkcm9wcGluZyBpbnB1dCBpdGVtcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjb252ZXJzYXRpb24uXG4gICAqIC0gYGRpc2FibGVkYCAoZGVmYXVsdCk6IElmIGEgbW9kZWwgcmVzcG9uc2Ugd2lsbCBleGNlZWQgdGhlIGNvbnRleHQgd2luZG93IHNpemVcbiAgICogICBmb3IgYSBtb2RlbCwgdGhlIHJlcXVlc3Qgd2lsbCBmYWlsIHdpdGggYSA0MDAgZXJyb3IuXG4gICAqL1xuICB0cnVuY2F0aW9uPzogJ2F1dG8nIHwgJ2Rpc2FibGVkJyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdG9rZW4gdXNhZ2UgZGV0YWlscyBpbmNsdWRpbmcgaW5wdXQgdG9rZW5zLCBvdXRwdXQgdG9rZW5zLCBhXG4gICAqIGJyZWFrZG93biBvZiBvdXRwdXQgdG9rZW5zLCBhbmQgdGhlIHRvdGFsIHRva2VucyB1c2VkLlxuICAgKi9cbiAgdXNhZ2U/OiBSZXNwb25zZVVzYWdlO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIHJlcHJlc2VudGluZyB5b3VyIGVuZC11c2VyLCB3aGljaCBjYW4gaGVscCBPcGVuQUkgdG8gbW9uaXRvclxuICAgKiBhbmQgZGV0ZWN0IGFidXNlLlxuICAgKiBbTGVhcm4gbW9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3NhZmV0eS1iZXN0LXByYWN0aWNlcyNlbmQtdXNlci1pZHMpLlxuICAgKi9cbiAgdXNlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSZXNwb25zZSB7XG4gIC8qKlxuICAgKiBEZXRhaWxzIGFib3V0IHdoeSB0aGUgcmVzcG9uc2UgaXMgaW5jb21wbGV0ZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5jb21wbGV0ZURldGFpbHMge1xuICAgIC8qKlxuICAgICAqIFRoZSByZWFzb24gd2h5IHRoZSByZXNwb25zZSBpcyBpbmNvbXBsZXRlLlxuICAgICAqL1xuICAgIHJlYXNvbj86ICdtYXhfb3V0cHV0X3Rva2VucycgfCAnY29udGVudF9maWx0ZXInO1xuICB9XG59XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIHRoZXJlIGlzIGEgcGFydGlhbCBhdWRpbyByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUF1ZGlvRGVsdGFFdmVudCB7XG4gIC8qKlxuICAgKiBBIGNodW5rIG9mIEJhc2U2NCBlbmNvZGVkIHJlc3BvbnNlIGF1ZGlvIGJ5dGVzLlxuICAgKi9cbiAgZGVsdGE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLmF1ZGlvLmRlbHRhYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5hdWRpby5kZWx0YSc7XG59XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIHRoZSBhdWRpbyByZXNwb25zZSBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUF1ZGlvRG9uZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5hdWRpby5kb25lYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5hdWRpby5kb25lJztcbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gdGhlcmUgaXMgYSBwYXJ0aWFsIHRyYW5zY3JpcHQgb2YgYXVkaW8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VBdWRpb1RyYW5zY3JpcHREZWx0YUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBwYXJ0aWFsIHRyYW5zY3JpcHQgb2YgdGhlIGF1ZGlvIHJlc3BvbnNlLlxuICAgKi9cbiAgZGVsdGE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLmF1ZGlvLnRyYW5zY3JpcHQuZGVsdGFgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLmF1ZGlvLnRyYW5zY3JpcHQuZGVsdGEnO1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiB0aGUgZnVsbCBhdWRpbyB0cmFuc2NyaXB0IGlzIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUF1ZGlvVHJhbnNjcmlwdERvbmVFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuIEFsd2F5cyBgcmVzcG9uc2UuYXVkaW8udHJhbnNjcmlwdC5kb25lYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5hdWRpby50cmFuc2NyaXB0LmRvbmUnO1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiBhIHBhcnRpYWwgY29kZSBzbmlwcGV0IGlzIGFkZGVkIGJ5IHRoZSBjb2RlIGludGVycHJldGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlQ29kZUludGVycHJldGVyQ2FsbENvZGVEZWx0YUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBwYXJ0aWFsIGNvZGUgc25pcHBldCBhZGRlZCBieSB0aGUgY29kZSBpbnRlcnByZXRlci5cbiAgICovXG4gIGRlbHRhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gdGhhdCB0aGUgY29kZSBpbnRlcnByZXRlciBjYWxsIGlzIGluIHByb2dyZXNzLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5jb2RlX2ludGVycHJldGVyX2NhbGwuY29kZS5kZWx0YWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuY29kZV9pbnRlcnByZXRlcl9jYWxsLmNvZGUuZGVsdGEnO1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiBjb2RlIHNuaXBwZXQgb3V0cHV0IGlzIGZpbmFsaXplZCBieSB0aGUgY29kZSBpbnRlcnByZXRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNvZGVJbnRlcnByZXRlckNhbGxDb2RlRG9uZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBmaW5hbCBjb2RlIHNuaXBwZXQgb3V0cHV0IGJ5IHRoZSBjb2RlIGludGVycHJldGVyLlxuICAgKi9cbiAgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgY2FsbCBpcyBpbiBwcm9ncmVzcy5cbiAgICovXG4gIG91dHB1dF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuIEFsd2F5cyBgcmVzcG9uc2UuY29kZV9pbnRlcnByZXRlcl9jYWxsLmNvZGUuZG9uZWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuY29kZV9pbnRlcnByZXRlcl9jYWxsLmNvZGUuZG9uZSc7XG59XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIHRoZSBjb2RlIGludGVycHJldGVyIGNhbGwgaXMgY29tcGxldGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlQ29kZUludGVycHJldGVyQ2FsbENvbXBsZXRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIEEgdG9vbCBjYWxsIHRvIHJ1biBjb2RlLlxuICAgKi9cbiAgY29kZV9pbnRlcnByZXRlcl9jYWxsOiBSZXNwb25zZUNvZGVJbnRlcnByZXRlclRvb2xDYWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgY2FsbCBpcyBpbiBwcm9ncmVzcy5cbiAgICovXG4gIG91dHB1dF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuIEFsd2F5cyBgcmVzcG9uc2UuY29kZV9pbnRlcnByZXRlcl9jYWxsLmNvbXBsZXRlZGAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuY29kZV9pbnRlcnByZXRlcl9jYWxsLmNvbXBsZXRlZCc7XG59XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIGEgY29kZSBpbnRlcnByZXRlciBjYWxsIGlzIGluIHByb2dyZXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlQ29kZUludGVycHJldGVyQ2FsbEluUHJvZ3Jlc3NFdmVudCB7XG4gIC8qKlxuICAgKiBBIHRvb2wgY2FsbCB0byBydW4gY29kZS5cbiAgICovXG4gIGNvZGVfaW50ZXJwcmV0ZXJfY2FsbDogUmVzcG9uc2VDb2RlSW50ZXJwcmV0ZXJUb29sQ2FsbDtcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbSB0aGF0IHRoZSBjb2RlIGludGVycHJldGVyIGNhbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLmNvZGVfaW50ZXJwcmV0ZXJfY2FsbC5pbl9wcm9ncmVzc2AuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuY29kZV9pbnRlcnByZXRlcl9jYWxsLmluX3Byb2dyZXNzJztcbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gdGhlIGNvZGUgaW50ZXJwcmV0ZXIgaXMgYWN0aXZlbHkgaW50ZXJwcmV0aW5nIHRoZSBjb2RlIHNuaXBwZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VDb2RlSW50ZXJwcmV0ZXJDYWxsSW50ZXJwcmV0aW5nRXZlbnQge1xuICAvKipcbiAgICogQSB0b29sIGNhbGwgdG8gcnVuIGNvZGUuXG4gICAqL1xuICBjb2RlX2ludGVycHJldGVyX2NhbGw6IFJlc3BvbnNlQ29kZUludGVycHJldGVyVG9vbENhbGw7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gdGhhdCB0aGUgY29kZSBpbnRlcnByZXRlciBjYWxsIGlzIGluIHByb2dyZXNzLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5jb2RlX2ludGVycHJldGVyX2NhbGwuaW50ZXJwcmV0aW5nYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5jb2RlX2ludGVycHJldGVyX2NhbGwuaW50ZXJwcmV0aW5nJztcbn1cblxuLyoqXG4gKiBBIHRvb2wgY2FsbCB0byBydW4gY29kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNvZGVJbnRlcnByZXRlclRvb2xDYWxsIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgdG9vbCBjYWxsLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvZGUgdG8gcnVuLlxuICAgKi9cbiAgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzdWx0cyBvZiB0aGUgY29kZSBpbnRlcnByZXRlciB0b29sIGNhbGwuXG4gICAqL1xuICByZXN1bHRzOiBBcnJheTxSZXNwb25zZUNvZGVJbnRlcnByZXRlclRvb2xDYWxsLkxvZ3MgfCBSZXNwb25zZUNvZGVJbnRlcnByZXRlclRvb2xDYWxsLkZpbGVzPjtcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgY29kZSBpbnRlcnByZXRlciB0b29sIGNhbGwuXG4gICAqL1xuICBzdGF0dXM6ICdpbl9wcm9ncmVzcycgfCAnaW50ZXJwcmV0aW5nJyB8ICdjb21wbGV0ZWQnO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgY29kZSBpbnRlcnByZXRlciB0b29sIGNhbGwuIEFsd2F5cyBgY29kZV9pbnRlcnByZXRlcl9jYWxsYC5cbiAgICovXG4gIHR5cGU6ICdjb2RlX2ludGVycHJldGVyX2NhbGwnO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFJlc3BvbnNlQ29kZUludGVycHJldGVyVG9vbENhbGwge1xuICAvKipcbiAgICogVGhlIG91dHB1dCBvZiBhIGNvZGUgaW50ZXJwcmV0ZXIgdG9vbCBjYWxsIHRoYXQgaXMgdGV4dC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgTG9ncyB7XG4gICAgLyoqXG4gICAgICogVGhlIGxvZ3Mgb2YgdGhlIGNvZGUgaW50ZXJwcmV0ZXIgdG9vbCBjYWxsLlxuICAgICAqL1xuICAgIGxvZ3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBjb2RlIGludGVycHJldGVyIHRleHQgb3V0cHV0LiBBbHdheXMgYGxvZ3NgLlxuICAgICAqL1xuICAgIHR5cGU6ICdsb2dzJztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb3V0cHV0IG9mIGEgY29kZSBpbnRlcnByZXRlciB0b29sIGNhbGwgdGhhdCBpcyBhIGZpbGUuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZpbGVzIHtcbiAgICBmaWxlczogQXJyYXk8RmlsZXMuRmlsZT47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgY29kZSBpbnRlcnByZXRlciBmaWxlIG91dHB1dC4gQWx3YXlzIGBmaWxlc2AuXG4gICAgICovXG4gICAgdHlwZTogJ2ZpbGVzJztcbiAgfVxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgRmlsZXMge1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgRmlsZSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBJRCBvZiB0aGUgZmlsZS5cbiAgICAgICAqL1xuICAgICAgZmlsZV9pZDogc3RyaW5nO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBNSU1FIHR5cGUgb2YgdGhlIGZpbGUuXG4gICAgICAgKi9cbiAgICAgIG1pbWVfdHlwZTogc3RyaW5nO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiB0aGUgbW9kZWwgcmVzcG9uc2UgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VDb21wbGV0ZWRFdmVudCB7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIG9mIHRoZSBjb21wbGV0ZWQgcmVzcG9uc2UuXG4gICAqL1xuICByZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5jb21wbGV0ZWRgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLmNvbXBsZXRlZCc7XG59XG5cbi8qKlxuICogQSB0b29sIGNhbGwgdG8gYSBjb21wdXRlciB1c2UgdG9vbC4gU2VlIHRoZVxuICogW2NvbXB1dGVyIHVzZSBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3Rvb2xzLWNvbXB1dGVyLXVzZSlcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbCB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBjb21wdXRlciBjYWxsLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSBjbGljayBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246XG4gICAgfCBSZXNwb25zZUNvbXB1dGVyVG9vbENhbGwuQ2xpY2tcbiAgICB8IFJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbC5Eb3VibGVDbGlja1xuICAgIHwgUmVzcG9uc2VDb21wdXRlclRvb2xDYWxsLkRyYWdcbiAgICB8IFJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbC5LZXlwcmVzc1xuICAgIHwgUmVzcG9uc2VDb21wdXRlclRvb2xDYWxsLk1vdmVcbiAgICB8IFJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbC5TY3JlZW5zaG90XG4gICAgfCBSZXNwb25zZUNvbXB1dGVyVG9vbENhbGwuU2Nyb2xsXG4gICAgfCBSZXNwb25zZUNvbXB1dGVyVG9vbENhbGwuVHlwZVxuICAgIHwgUmVzcG9uc2VDb21wdXRlclRvb2xDYWxsLldhaXQ7XG5cbiAgLyoqXG4gICAqIEFuIGlkZW50aWZpZXIgdXNlZCB3aGVuIHJlc3BvbmRpbmcgdG8gdGhlIHRvb2wgY2FsbCB3aXRoIG91dHB1dC5cbiAgICovXG4gIGNhbGxfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBlbmRpbmcgc2FmZXR5IGNoZWNrcyBmb3IgdGhlIGNvbXB1dGVyIGNhbGwuXG4gICAqL1xuICBwZW5kaW5nX3NhZmV0eV9jaGVja3M6IEFycmF5PFJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbC5QZW5kaW5nU2FmZXR5Q2hlY2s+O1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBpdGVtLiBPbmUgb2YgYGluX3Byb2dyZXNzYCwgYGNvbXBsZXRlZGAsIG9yIGBpbmNvbXBsZXRlYC5cbiAgICogUG9wdWxhdGVkIHdoZW4gaXRlbXMgYXJlIHJldHVybmVkIHZpYSBBUEkuXG4gICAqL1xuICBzdGF0dXM6ICdpbl9wcm9ncmVzcycgfCAnY29tcGxldGVkJyB8ICdpbmNvbXBsZXRlJztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbXB1dGVyIGNhbGwuIEFsd2F5cyBgY29tcHV0ZXJfY2FsbGAuXG4gICAqL1xuICB0eXBlOiAnY29tcHV0ZXJfY2FsbCc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUmVzcG9uc2VDb21wdXRlclRvb2xDYWxsIHtcbiAgLyoqXG4gICAqIEEgY2xpY2sgYWN0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBDbGljayB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoaWNoIG1vdXNlIGJ1dHRvbiB3YXMgcHJlc3NlZCBkdXJpbmcgdGhlIGNsaWNrLiBPbmUgb2YgYGxlZnRgLFxuICAgICAqIGByaWdodGAsIGB3aGVlbGAsIGBiYWNrYCwgb3IgYGZvcndhcmRgLlxuICAgICAqL1xuICAgIGJ1dHRvbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd3aGVlbCcgfCAnYmFjaycgfCAnZm9yd2FyZCc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGV2ZW50IHR5cGUuIEZvciBhIGNsaWNrIGFjdGlvbiwgdGhpcyBwcm9wZXJ0eSBpcyBhbHdheXMgc2V0IHRvXG4gICAgICogYGNsaWNrYC5cbiAgICAgKi9cbiAgICB0eXBlOiAnY2xpY2snO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHgtY29vcmRpbmF0ZSB3aGVyZSB0aGUgY2xpY2sgb2NjdXJyZWQuXG4gICAgICovXG4gICAgeDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHktY29vcmRpbmF0ZSB3aGVyZSB0aGUgY2xpY2sgb2NjdXJyZWQuXG4gICAgICovXG4gICAgeTogbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZG91YmxlIGNsaWNrIGFjdGlvbi5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRG91YmxlQ2xpY2sge1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZS4gRm9yIGEgZG91YmxlIGNsaWNrIGFjdGlvbiwgdGhpcyBwcm9wZXJ0eSBpcyBhbHdheXMgc2V0XG4gICAgICogdG8gYGRvdWJsZV9jbGlja2AuXG4gICAgICovXG4gICAgdHlwZTogJ2RvdWJsZV9jbGljayc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgeC1jb29yZGluYXRlIHdoZXJlIHRoZSBkb3VibGUgY2xpY2sgb2NjdXJyZWQuXG4gICAgICovXG4gICAgeDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHktY29vcmRpbmF0ZSB3aGVyZSB0aGUgZG91YmxlIGNsaWNrIG9jY3VycmVkLlxuICAgICAqL1xuICAgIHk6IG51bWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGRyYWcgYWN0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBEcmFnIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb29yZGluYXRlcyByZXByZXNlbnRpbmcgdGhlIHBhdGggb2YgdGhlIGRyYWcgYWN0aW9uLiBDb29yZGluYXRlc1xuICAgICAqIHdpbGwgYXBwZWFyIGFzIGFuIGFycmF5IG9mIG9iamVjdHMsIGVnXG4gICAgICpcbiAgICAgKiBgYGBcbiAgICAgKiBbXG4gICAgICogICB7IHg6IDEwMCwgeTogMjAwIH0sXG4gICAgICogICB7IHg6IDIwMCwgeTogMzAwIH1cbiAgICAgKiBdXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcGF0aDogQXJyYXk8RHJhZy5QYXRoPjtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZS4gRm9yIGEgZHJhZyBhY3Rpb24sIHRoaXMgcHJvcGVydHkgaXMgYWx3YXlzIHNldCB0b1xuICAgICAqIGBkcmFnYC5cbiAgICAgKi9cbiAgICB0eXBlOiAnZHJhZyc7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIERyYWcge1xuICAgIC8qKlxuICAgICAqIEEgc2VyaWVzIG9mIHgveSBjb29yZGluYXRlIHBhaXJzIGluIHRoZSBkcmFnIHBhdGguXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBQYXRoIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIHgtY29vcmRpbmF0ZS5cbiAgICAgICAqL1xuICAgICAgeDogbnVtYmVyO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSB5LWNvb3JkaW5hdGUuXG4gICAgICAgKi9cbiAgICAgIHk6IG51bWJlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIGtleXByZXNzZXMgdGhlIG1vZGVsIHdvdWxkIGxpa2UgdG8gcGVyZm9ybS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgS2V5cHJlc3Mge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb21iaW5hdGlvbiBvZiBrZXlzIHRoZSBtb2RlbCBpcyByZXF1ZXN0aW5nIHRvIGJlIHByZXNzZWQuIFRoaXMgaXMgYW4gYXJyYXlcbiAgICAgKiBvZiBzdHJpbmdzLCBlYWNoIHJlcHJlc2VudGluZyBhIGtleS5cbiAgICAgKi9cbiAgICBrZXlzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBldmVudCB0eXBlLiBGb3IgYSBrZXlwcmVzcyBhY3Rpb24sIHRoaXMgcHJvcGVydHkgaXMgYWx3YXlzIHNldCB0b1xuICAgICAqIGBrZXlwcmVzc2AuXG4gICAgICovXG4gICAgdHlwZTogJ2tleXByZXNzJztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIG1vdXNlIG1vdmUgYWN0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBNb3ZlIHtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGV2ZW50IHR5cGUuIEZvciBhIG1vdmUgYWN0aW9uLCB0aGlzIHByb3BlcnR5IGlzIGFsd2F5cyBzZXQgdG9cbiAgICAgKiBgbW92ZWAuXG4gICAgICovXG4gICAgdHlwZTogJ21vdmUnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHgtY29vcmRpbmF0ZSB0byBtb3ZlIHRvLlxuICAgICAqL1xuICAgIHg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB5LWNvb3JkaW5hdGUgdG8gbW92ZSB0by5cbiAgICAgKi9cbiAgICB5OiBudW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogQSBzY3JlZW5zaG90IGFjdGlvbi5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2NyZWVuc2hvdCB7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBldmVudCB0eXBlLiBGb3IgYSBzY3JlZW5zaG90IGFjdGlvbiwgdGhpcyBwcm9wZXJ0eSBpcyBhbHdheXMgc2V0XG4gICAgICogdG8gYHNjcmVlbnNob3RgLlxuICAgICAqL1xuICAgIHR5cGU6ICdzY3JlZW5zaG90JztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNjcm9sbCBhY3Rpb24uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFNjcm9sbCB7XG4gICAgLyoqXG4gICAgICogVGhlIGhvcml6b250YWwgc2Nyb2xsIGRpc3RhbmNlLlxuICAgICAqL1xuICAgIHNjcm9sbF94OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGljYWwgc2Nyb2xsIGRpc3RhbmNlLlxuICAgICAqL1xuICAgIHNjcm9sbF95OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGV2ZW50IHR5cGUuIEZvciBhIHNjcm9sbCBhY3Rpb24sIHRoaXMgcHJvcGVydHkgaXMgYWx3YXlzIHNldCB0b1xuICAgICAqIGBzY3JvbGxgLlxuICAgICAqL1xuICAgIHR5cGU6ICdzY3JvbGwnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHgtY29vcmRpbmF0ZSB3aGVyZSB0aGUgc2Nyb2xsIG9jY3VycmVkLlxuICAgICAqL1xuICAgIHg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB5LWNvb3JkaW5hdGUgd2hlcmUgdGhlIHNjcm9sbCBvY2N1cnJlZC5cbiAgICAgKi9cbiAgICB5OiBudW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogQW4gYWN0aW9uIHRvIHR5cGUgaW4gdGV4dC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgdG8gdHlwZS5cbiAgICAgKi9cbiAgICB0ZXh0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGV2ZW50IHR5cGUuIEZvciBhIHR5cGUgYWN0aW9uLCB0aGlzIHByb3BlcnR5IGlzIGFsd2F5cyBzZXQgdG9cbiAgICAgKiBgdHlwZWAuXG4gICAgICovXG4gICAgdHlwZTogJ3R5cGUnO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgd2FpdCBhY3Rpb24uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFdhaXQge1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZS4gRm9yIGEgd2FpdCBhY3Rpb24sIHRoaXMgcHJvcGVydHkgaXMgYWx3YXlzIHNldCB0b1xuICAgICAqIGB3YWl0YC5cbiAgICAgKi9cbiAgICB0eXBlOiAnd2FpdCc7XG4gIH1cblxuICAvKipcbiAgICogQSBwZW5kaW5nIHNhZmV0eSBjaGVjayBmb3IgdGhlIGNvbXB1dGVyIGNhbGwuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFBlbmRpbmdTYWZldHlDaGVjayB7XG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSBwZW5kaW5nIHNhZmV0eSBjaGVjay5cbiAgICAgKi9cbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHBlbmRpbmcgc2FmZXR5IGNoZWNrLlxuICAgICAqL1xuICAgIGNvZGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIERldGFpbHMgYWJvdXQgdGhlIHBlbmRpbmcgc2FmZXR5IGNoZWNrLlxuICAgICAqL1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbE91dHB1dEl0ZW0ge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgY29tcHV0ZXIgY2FsbCB0b29sIG91dHB1dC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgY29tcHV0ZXIgdG9vbCBjYWxsIHRoYXQgcHJvZHVjZWQgdGhlIG91dHB1dC5cbiAgICovXG4gIGNhbGxfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb21wdXRlciBzY3JlZW5zaG90IGltYWdlIHVzZWQgd2l0aCB0aGUgY29tcHV0ZXIgdXNlIHRvb2wuXG4gICAqL1xuICBvdXRwdXQ6IFJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbE91dHB1dFNjcmVlbnNob3Q7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBjb21wdXRlciB0b29sIGNhbGwgb3V0cHV0LiBBbHdheXMgYGNvbXB1dGVyX2NhbGxfb3V0cHV0YC5cbiAgICovXG4gIHR5cGU6ICdjb21wdXRlcl9jYWxsX291dHB1dCc7XG5cbiAgLyoqXG4gICAqIFRoZSBzYWZldHkgY2hlY2tzIHJlcG9ydGVkIGJ5IHRoZSBBUEkgdGhhdCBoYXZlIGJlZW4gYWNrbm93bGVkZ2VkIGJ5IHRoZVxuICAgKiBkZXZlbG9wZXIuXG4gICAqL1xuICBhY2tub3dsZWRnZWRfc2FmZXR5X2NoZWNrcz86IEFycmF5PFJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbE91dHB1dEl0ZW0uQWNrbm93bGVkZ2VkU2FmZXR5Q2hlY2s+O1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZXNzYWdlIGlucHV0LiBPbmUgb2YgYGluX3Byb2dyZXNzYCwgYGNvbXBsZXRlZGAsIG9yXG4gICAqIGBpbmNvbXBsZXRlYC4gUG9wdWxhdGVkIHdoZW4gaW5wdXQgaXRlbXMgYXJlIHJldHVybmVkIHZpYSBBUEkuXG4gICAqL1xuICBzdGF0dXM/OiAnaW5fcHJvZ3Jlc3MnIHwgJ2NvbXBsZXRlZCcgfCAnaW5jb21wbGV0ZSc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUmVzcG9uc2VDb21wdXRlclRvb2xDYWxsT3V0cHV0SXRlbSB7XG4gIC8qKlxuICAgKiBBIHBlbmRpbmcgc2FmZXR5IGNoZWNrIGZvciB0aGUgY29tcHV0ZXIgY2FsbC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQWNrbm93bGVkZ2VkU2FmZXR5Q2hlY2sge1xuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgcGVuZGluZyBzYWZldHkgY2hlY2suXG4gICAgICovXG4gICAgaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBwZW5kaW5nIHNhZmV0eSBjaGVjay5cbiAgICAgKi9cbiAgICBjb2RlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEZXRhaWxzIGFib3V0IHRoZSBwZW5kaW5nIHNhZmV0eSBjaGVjay5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbXB1dGVyIHNjcmVlbnNob3QgaW1hZ2UgdXNlZCB3aXRoIHRoZSBjb21wdXRlciB1c2UgdG9vbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNvbXB1dGVyVG9vbENhbGxPdXRwdXRTY3JlZW5zaG90IHtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZS4gRm9yIGEgY29tcHV0ZXIgc2NyZWVuc2hvdCwgdGhpcyBwcm9wZXJ0eSBpcyBhbHdheXMgc2V0XG4gICAqIHRvIGBjb21wdXRlcl9zY3JlZW5zaG90YC5cbiAgICovXG4gIHR5cGU6ICdjb21wdXRlcl9zY3JlZW5zaG90JztcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgYW4gdXBsb2FkZWQgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBzY3JlZW5zaG90LlxuICAgKi9cbiAgZmlsZV9pZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgc2NyZWVuc2hvdCBpbWFnZS5cbiAgICovXG4gIGltYWdlX3VybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNdWx0aS1tb2RhbCBpbnB1dCBhbmQgb3V0cHV0IGNvbnRlbnRzLlxuICovXG5leHBvcnQgdHlwZSBSZXNwb25zZUNvbnRlbnQgPVxuICB8IFJlc3BvbnNlSW5wdXRUZXh0XG4gIHwgUmVzcG9uc2VJbnB1dEltYWdlXG4gIHwgUmVzcG9uc2VJbnB1dEZpbGVcbiAgfCBSZXNwb25zZU91dHB1dFRleHRcbiAgfCBSZXNwb25zZU91dHB1dFJlZnVzYWw7XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIGEgbmV3IGNvbnRlbnQgcGFydCBpcyBhZGRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNvbnRlbnRQYXJ0QWRkZWRFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbnRlbnQgcGFydCB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIGNvbnRlbnRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBvdXRwdXQgaXRlbSB0aGF0IHRoZSBjb250ZW50IHBhcnQgd2FzIGFkZGVkIHRvLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIGNvbnRlbnQgcGFydCB3YXMgYWRkZWQgdG8uXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgcGFydCB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIHBhcnQ6IFJlc3BvbnNlT3V0cHV0VGV4dCB8IFJlc3BvbnNlT3V0cHV0UmVmdXNhbDtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLmNvbnRlbnRfcGFydC5hZGRlZGAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuY29udGVudF9wYXJ0LmFkZGVkJztcbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gYSBjb250ZW50IHBhcnQgaXMgZG9uZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNvbnRlbnRQYXJ0RG9uZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgY29udGVudCBwYXJ0IHRoYXQgaXMgZG9uZS5cbiAgICovXG4gIGNvbnRlbnRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBvdXRwdXQgaXRlbSB0aGF0IHRoZSBjb250ZW50IHBhcnQgd2FzIGFkZGVkIHRvLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIGNvbnRlbnQgcGFydCB3YXMgYWRkZWQgdG8uXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgcGFydCB0aGF0IGlzIGRvbmUuXG4gICAqL1xuICBwYXJ0OiBSZXNwb25zZU91dHB1dFRleHQgfCBSZXNwb25zZU91dHB1dFJlZnVzYWw7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5jb250ZW50X3BhcnQuZG9uZWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuY29udGVudF9wYXJ0LmRvbmUnO1xufVxuXG4vKipcbiAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuIGEgcmVzcG9uc2UgaXMgY3JlYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNyZWF0ZWRFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgdGhhdCB3YXMgY3JlYXRlZC5cbiAgICovXG4gIHJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLmNyZWF0ZWRgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLmNyZWF0ZWQnO1xufVxuXG4vKipcbiAqIEFuIGVycm9yIG9iamVjdCByZXR1cm5lZCB3aGVuIHRoZSBtb2RlbCBmYWlscyB0byBnZW5lcmF0ZSBhIFJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRXJyb3Ige1xuICAvKipcbiAgICogVGhlIGVycm9yIGNvZGUgZm9yIHRoZSByZXNwb25zZS5cbiAgICovXG4gIGNvZGU6XG4gICAgfCAnc2VydmVyX2Vycm9yJ1xuICAgIHwgJ3JhdGVfbGltaXRfZXhjZWVkZWQnXG4gICAgfCAnaW52YWxpZF9wcm9tcHQnXG4gICAgfCAndmVjdG9yX3N0b3JlX3RpbWVvdXQnXG4gICAgfCAnaW52YWxpZF9pbWFnZSdcbiAgICB8ICdpbnZhbGlkX2ltYWdlX2Zvcm1hdCdcbiAgICB8ICdpbnZhbGlkX2Jhc2U2NF9pbWFnZSdcbiAgICB8ICdpbnZhbGlkX2ltYWdlX3VybCdcbiAgICB8ICdpbWFnZV90b29fbGFyZ2UnXG4gICAgfCAnaW1hZ2VfdG9vX3NtYWxsJ1xuICAgIHwgJ2ltYWdlX3BhcnNlX2Vycm9yJ1xuICAgIHwgJ2ltYWdlX2NvbnRlbnRfcG9saWN5X3Zpb2xhdGlvbidcbiAgICB8ICdpbnZhbGlkX2ltYWdlX21vZGUnXG4gICAgfCAnaW1hZ2VfZmlsZV90b29fbGFyZ2UnXG4gICAgfCAndW5zdXBwb3J0ZWRfaW1hZ2VfbWVkaWFfdHlwZSdcbiAgICB8ICdlbXB0eV9pbWFnZV9maWxlJ1xuICAgIHwgJ2ZhaWxlZF90b19kb3dubG9hZF9pbWFnZSdcbiAgICB8ICdpbWFnZV9maWxlX25vdF9mb3VuZCc7XG5cbiAgLyoqXG4gICAqIEEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VFcnJvckV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBlcnJvciBjb2RlLlxuICAgKi9cbiAgY29kZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlcnJvciBwYXJhbWV0ZXIuXG4gICAqL1xuICBwYXJhbTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYGVycm9yYC5cbiAgICovXG4gIHR5cGU6ICdlcnJvcic7XG59XG5cbi8qKlxuICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gYSByZXNwb25zZSBmYWlscy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUZhaWxlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSB0aGF0IGZhaWxlZC5cbiAgICovXG4gIHJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLmZhaWxlZGAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuZmFpbGVkJztcbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gYSBmaWxlIHNlYXJjaCBjYWxsIGlzIGNvbXBsZXRlZCAocmVzdWx0cyBmb3VuZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VGaWxlU2VhcmNoQ2FsbENvbXBsZXRlZEV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgb3V0cHV0IGl0ZW0gdGhhdCB0aGUgZmlsZSBzZWFyY2ggY2FsbCBpcyBpbml0aWF0ZWQuXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gdGhhdCB0aGUgZmlsZSBzZWFyY2ggY2FsbCBpcyBpbml0aWF0ZWQuXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLmZpbGVfc2VhcmNoX2NhbGwuY29tcGxldGVkYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5maWxlX3NlYXJjaF9jYWxsLmNvbXBsZXRlZCc7XG59XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIGEgZmlsZSBzZWFyY2ggY2FsbCBpcyBpbml0aWF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VGaWxlU2VhcmNoQ2FsbEluUHJvZ3Jlc3NFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIGZpbGUgc2VhcmNoIGNhbGwgaXMgaW5pdGlhdGVkLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIGZpbGUgc2VhcmNoIGNhbGwgaXMgaW5pdGlhdGVkLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5maWxlX3NlYXJjaF9jYWxsLmluX3Byb2dyZXNzYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5maWxlX3NlYXJjaF9jYWxsLmluX3Byb2dyZXNzJztcbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gYSBmaWxlIHNlYXJjaCBpcyBjdXJyZW50bHkgc2VhcmNoaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRmlsZVNlYXJjaENhbGxTZWFyY2hpbmdFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIGZpbGUgc2VhcmNoIGNhbGwgaXMgaW5pdGlhdGVkLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIGZpbGUgc2VhcmNoIGNhbGwgaXMgc2VhcmNoaW5nLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5maWxlX3NlYXJjaF9jYWxsLnNlYXJjaGluZ2AuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuZmlsZV9zZWFyY2hfY2FsbC5zZWFyY2hpbmcnO1xufVxuXG4vKipcbiAqIFRoZSByZXN1bHRzIG9mIGEgZmlsZSBzZWFyY2ggdG9vbCBjYWxsLiBTZWUgdGhlXG4gKiBbZmlsZSBzZWFyY2ggZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90b29scy1maWxlLXNlYXJjaClcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRmlsZVNlYXJjaFRvb2xDYWxsIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIGZpbGUgc2VhcmNoIHRvb2wgY2FsbC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBxdWVyaWVzIHVzZWQgdG8gc2VhcmNoIGZvciBmaWxlcy5cbiAgICovXG4gIHF1ZXJpZXM6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGZpbGUgc2VhcmNoIHRvb2wgY2FsbC4gT25lIG9mIGBpbl9wcm9ncmVzc2AsIGBzZWFyY2hpbmdgLFxuICAgKiBgaW5jb21wbGV0ZWAgb3IgYGZhaWxlZGAsXG4gICAqL1xuICBzdGF0dXM6ICdpbl9wcm9ncmVzcycgfCAnc2VhcmNoaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2luY29tcGxldGUnIHwgJ2ZhaWxlZCc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBmaWxlIHNlYXJjaCB0b29sIGNhbGwuIEFsd2F5cyBgZmlsZV9zZWFyY2hfY2FsbGAuXG4gICAqL1xuICB0eXBlOiAnZmlsZV9zZWFyY2hfY2FsbCc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHRzIG9mIHRoZSBmaWxlIHNlYXJjaCB0b29sIGNhbGwuXG4gICAqL1xuICByZXN1bHRzPzogQXJyYXk8UmVzcG9uc2VGaWxlU2VhcmNoVG9vbENhbGwuUmVzdWx0PiB8IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUmVzcG9uc2VGaWxlU2VhcmNoVG9vbENhbGwge1xuICBleHBvcnQgaW50ZXJmYWNlIFJlc3VsdCB7XG4gICAgLyoqXG4gICAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgICAqIGZvciBzdG9yaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBhbmRcbiAgICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW1cbiAgICAgKiBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTJcbiAgICAgKiBjaGFyYWN0ZXJzLCBib29sZWFucywgb3IgbnVtYmVycy5cbiAgICAgKi9cbiAgICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgZmlsZS5cbiAgICAgKi9cbiAgICBmaWxlX2lkPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGZpbGUuXG4gICAgICovXG4gICAgZmlsZW5hbWU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsZXZhbmNlIHNjb3JlIG9mIHRoZSBmaWxlIC0gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuXG4gICAgICovXG4gICAgc2NvcmU/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCB0aGF0IHdhcyByZXRyaWV2ZWQgZnJvbSB0aGUgZmlsZS5cbiAgICAgKi9cbiAgICB0ZXh0Pzogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2RlbCBtdXN0IG91dHB1dC5cbiAqXG4gKiBDb25maWd1cmluZyBgeyBcInR5cGVcIjogXCJqc29uX3NjaGVtYVwiIH1gIGVuYWJsZXMgU3RydWN0dXJlZCBPdXRwdXRzLCB3aGljaFxuICogZW5zdXJlcyB0aGUgbW9kZWwgd2lsbCBtYXRjaCB5b3VyIHN1cHBsaWVkIEpTT04gc2NoZW1hLiBMZWFybiBtb3JlIGluIHRoZVxuICogW1N0cnVjdHVyZWQgT3V0cHV0cyBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3N0cnVjdHVyZWQtb3V0cHV0cykuXG4gKlxuICogVGhlIGRlZmF1bHQgZm9ybWF0IGlzIGB7IFwidHlwZVwiOiBcInRleHRcIiB9YCB3aXRoIG5vIGFkZGl0aW9uYWwgb3B0aW9ucy5cbiAqXG4gKiAqKk5vdCByZWNvbW1lbmRlZCBmb3IgZ3B0LTRvIGFuZCBuZXdlciBtb2RlbHM6KipcbiAqXG4gKiBTZXR0aW5nIHRvIGB7IFwidHlwZVwiOiBcImpzb25fb2JqZWN0XCIgfWAgZW5hYmxlcyB0aGUgb2xkZXIgSlNPTiBtb2RlLCB3aGljaFxuICogZW5zdXJlcyB0aGUgbWVzc2FnZSB0aGUgbW9kZWwgZ2VuZXJhdGVzIGlzIHZhbGlkIEpTT04uIFVzaW5nIGBqc29uX3NjaGVtYWAgaXNcbiAqIHByZWZlcnJlZCBmb3IgbW9kZWxzIHRoYXQgc3VwcG9ydCBpdC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzcG9uc2VGb3JtYXRUZXh0Q29uZmlnID1cbiAgfCBTaGFyZWQuUmVzcG9uc2VGb3JtYXRUZXh0XG4gIHwgUmVzcG9uc2VGb3JtYXRUZXh0SlNPTlNjaGVtYUNvbmZpZ1xuICB8IFNoYXJlZC5SZXNwb25zZUZvcm1hdEpTT05PYmplY3Q7XG5cbi8qKlxuICogSlNPTiBTY2hlbWEgcmVzcG9uc2UgZm9ybWF0LiBVc2VkIHRvIGdlbmVyYXRlIHN0cnVjdHVyZWQgSlNPTiByZXNwb25zZXMuIExlYXJuXG4gKiBtb3JlIGFib3V0XG4gKiBbU3RydWN0dXJlZCBPdXRwdXRzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3RydWN0dXJlZC1vdXRwdXRzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUZvcm1hdFRleHRKU09OU2NoZW1hQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlbWEgZm9yIHRoZSByZXNwb25zZSBmb3JtYXQsIGRlc2NyaWJlZCBhcyBhIEpTT04gU2NoZW1hIG9iamVjdC4gTGVhcm4gaG93XG4gICAqIHRvIGJ1aWxkIEpTT04gc2NoZW1hcyBbaGVyZV0oaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvKS5cbiAgICovXG4gIHNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJlc3BvbnNlIGZvcm1hdCBiZWluZyBkZWZpbmVkLiBBbHdheXMgYGpzb25fc2NoZW1hYC5cbiAgICovXG4gIHR5cGU6ICdqc29uX3NjaGVtYSc7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgcmVzcG9uc2UgZm9ybWF0IGlzIGZvciwgdXNlZCBieSB0aGUgbW9kZWwgdG8gZGV0ZXJtaW5lXG4gICAqIGhvdyB0byByZXNwb25kIGluIHRoZSBmb3JtYXQuXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlc3BvbnNlIGZvcm1hdC4gTXVzdCBiZSBhLXosIEEtWiwgMC05LCBvciBjb250YWluIHVuZGVyc2NvcmVzXG4gICAqIGFuZCBkYXNoZXMsIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA2NC5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIHN0cmljdCBzY2hlbWEgYWRoZXJlbmNlIHdoZW4gZ2VuZXJhdGluZyB0aGUgb3V0cHV0LiBJZiBzZXQgdG9cbiAgICogdHJ1ZSwgdGhlIG1vZGVsIHdpbGwgYWx3YXlzIGZvbGxvdyB0aGUgZXhhY3Qgc2NoZW1hIGRlZmluZWQgaW4gdGhlIGBzY2hlbWFgXG4gICAqIGZpZWxkLiBPbmx5IGEgc3Vic2V0IG9mIEpTT04gU2NoZW1hIGlzIHN1cHBvcnRlZCB3aGVuIGBzdHJpY3RgIGlzIGB0cnVlYC4gVG9cbiAgICogbGVhcm4gbW9yZSwgcmVhZCB0aGVcbiAgICogW1N0cnVjdHVyZWQgT3V0cHV0cyBndWlkZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3N0cnVjdHVyZWQtb3V0cHV0cykuXG4gICAqL1xuICBzdHJpY3Q/OiBib29sZWFuIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gdGhlcmUgaXMgYSBwYXJ0aWFsIGZ1bmN0aW9uLWNhbGwgYXJndW1lbnRzIGRlbHRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRnVuY3Rpb25DYWxsQXJndW1lbnRzRGVsdGFFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24tY2FsbCBhcmd1bWVudHMgZGVsdGEgdGhhdCBpcyBhZGRlZC5cbiAgICovXG4gIGRlbHRhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgb3V0cHV0IGl0ZW0gdGhhdCB0aGUgZnVuY3Rpb24tY2FsbCBhcmd1bWVudHMgZGVsdGEgaXMgYWRkZWQgdG8uXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gdGhhdCB0aGUgZnVuY3Rpb24tY2FsbCBhcmd1bWVudHMgZGVsdGEgaXMgYWRkZWQgdG8uXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRlbHRhYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5mdW5jdGlvbl9jYWxsX2FyZ3VtZW50cy5kZWx0YSc7XG59XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIGZ1bmN0aW9uLWNhbGwgYXJndW1lbnRzIGFyZSBmaW5hbGl6ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VGdW5jdGlvbkNhbGxBcmd1bWVudHNEb25lRXZlbnQge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uLWNhbGwgYXJndW1lbnRzLlxuICAgKi9cbiAgYXJndW1lbnRzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgaXRlbS5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbS5cbiAgICovXG4gIG91dHB1dF9pbmRleDogbnVtYmVyO1xuXG4gIHR5cGU6ICdyZXNwb25zZS5mdW5jdGlvbl9jYWxsX2FyZ3VtZW50cy5kb25lJztcbn1cblxuLyoqXG4gKiBBIHRvb2wgY2FsbCB0byBydW4gYSBmdW5jdGlvbi4gU2VlIHRoZVxuICogW2Z1bmN0aW9uIGNhbGxpbmcgZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9mdW5jdGlvbi1jYWxsaW5nKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VGdW5jdGlvblRvb2xDYWxsIHtcbiAgLyoqXG4gICAqIEEgSlNPTiBzdHJpbmcgb2YgdGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIGFyZ3VtZW50czogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBmdW5jdGlvbiB0b29sIGNhbGwgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbC5cbiAgICovXG4gIGNhbGxfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIHJ1bi5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRvb2wgY2FsbC4gQWx3YXlzIGBmdW5jdGlvbl9jYWxsYC5cbiAgICovXG4gIHR5cGU6ICdmdW5jdGlvbl9jYWxsJztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgZnVuY3Rpb24gdG9vbCBjYWxsLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGl0ZW0uIE9uZSBvZiBgaW5fcHJvZ3Jlc3NgLCBgY29tcGxldGVkYCwgb3IgYGluY29tcGxldGVgLlxuICAgKiBQb3B1bGF0ZWQgd2hlbiBpdGVtcyBhcmUgcmV0dXJuZWQgdmlhIEFQSS5cbiAgICovXG4gIHN0YXR1cz86ICdpbl9wcm9ncmVzcycgfCAnY29tcGxldGVkJyB8ICdpbmNvbXBsZXRlJztcbn1cblxuLyoqXG4gKiBBIHRvb2wgY2FsbCB0byBydW4gYSBmdW5jdGlvbi4gU2VlIHRoZVxuICogW2Z1bmN0aW9uIGNhbGxpbmcgZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9mdW5jdGlvbi1jYWxsaW5nKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VGdW5jdGlvblRvb2xDYWxsSXRlbSBleHRlbmRzIFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbCB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBmdW5jdGlvbiB0b29sIGNhbGwuXG4gICAqL1xuICBpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbE91dHB1dEl0ZW0ge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgZnVuY3Rpb24gY2FsbCB0b29sIG91dHB1dC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhlIGZ1bmN0aW9uIHRvb2wgY2FsbCBnZW5lcmF0ZWQgYnkgdGhlIG1vZGVsLlxuICAgKi9cbiAgY2FsbF9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIEpTT04gc3RyaW5nIG9mIHRoZSBvdXRwdXQgb2YgdGhlIGZ1bmN0aW9uIHRvb2wgY2FsbC5cbiAgICovXG4gIG91dHB1dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gdG9vbCBjYWxsIG91dHB1dC4gQWx3YXlzIGBmdW5jdGlvbl9jYWxsX291dHB1dGAuXG4gICAqL1xuICB0eXBlOiAnZnVuY3Rpb25fY2FsbF9vdXRwdXQnO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBpdGVtLiBPbmUgb2YgYGluX3Byb2dyZXNzYCwgYGNvbXBsZXRlZGAsIG9yIGBpbmNvbXBsZXRlYC5cbiAgICogUG9wdWxhdGVkIHdoZW4gaXRlbXMgYXJlIHJldHVybmVkIHZpYSBBUEkuXG4gICAqL1xuICBzdGF0dXM/OiAnaW5fcHJvZ3Jlc3MnIHwgJ2NvbXBsZXRlZCcgfCAnaW5jb21wbGV0ZSc7XG59XG5cbi8qKlxuICogVGhlIHJlc3VsdHMgb2YgYSB3ZWIgc2VhcmNoIHRvb2wgY2FsbC4gU2VlIHRoZVxuICogW3dlYiBzZWFyY2ggZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90b29scy13ZWItc2VhcmNoKSBmb3JcbiAqIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VGdW5jdGlvbldlYlNlYXJjaCB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSB3ZWIgc2VhcmNoIHRvb2wgY2FsbC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIHdlYiBzZWFyY2ggdG9vbCBjYWxsLlxuICAgKi9cbiAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnIHwgJ3NlYXJjaGluZycgfCAnY29tcGxldGVkJyB8ICdmYWlsZWQnO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgd2ViIHNlYXJjaCB0b29sIGNhbGwuIEFsd2F5cyBgd2ViX3NlYXJjaF9jYWxsYC5cbiAgICovXG4gIHR5cGU6ICd3ZWJfc2VhcmNoX2NhbGwnO1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzcG9uc2UgaXMgaW4gcHJvZ3Jlc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VJblByb2dyZXNzRXZlbnQge1xuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIHRoYXQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAqL1xuICByZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5pbl9wcm9ncmVzc2AuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UuaW5fcHJvZ3Jlc3MnO1xufVxuXG4vKipcbiAqIFNwZWNpZnkgYWRkaXRpb25hbCBvdXRwdXQgZGF0YSB0byBpbmNsdWRlIGluIHRoZSBtb2RlbCByZXNwb25zZS4gQ3VycmVudGx5XG4gKiBzdXBwb3J0ZWQgdmFsdWVzIGFyZTpcbiAqXG4gKiAtIGBmaWxlX3NlYXJjaF9jYWxsLnJlc3VsdHNgOiBJbmNsdWRlIHRoZSBzZWFyY2ggcmVzdWx0cyBvZiB0aGUgZmlsZSBzZWFyY2ggdG9vbFxuICogICBjYWxsLlxuICogLSBgbWVzc2FnZS5pbnB1dF9pbWFnZS5pbWFnZV91cmxgOiBJbmNsdWRlIGltYWdlIHVybHMgZnJvbSB0aGUgaW5wdXQgbWVzc2FnZS5cbiAqIC0gYGNvbXB1dGVyX2NhbGxfb3V0cHV0Lm91dHB1dC5pbWFnZV91cmxgOiBJbmNsdWRlIGltYWdlIHVybHMgZnJvbSB0aGUgY29tcHV0ZXJcbiAqICAgY2FsbCBvdXRwdXQuXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3BvbnNlSW5jbHVkYWJsZSA9XG4gIHwgJ2ZpbGVfc2VhcmNoX2NhbGwucmVzdWx0cydcbiAgfCAnbWVzc2FnZS5pbnB1dF9pbWFnZS5pbWFnZV91cmwnXG4gIHwgJ2NvbXB1dGVyX2NhbGxfb3V0cHV0Lm91dHB1dC5pbWFnZV91cmwnO1xuXG4vKipcbiAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuIGEgcmVzcG9uc2UgZmluaXNoZXMgYXMgaW5jb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUluY29tcGxldGVFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgdGhhdCB3YXMgaW5jb21wbGV0ZS5cbiAgICovXG4gIHJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLmluY29tcGxldGVgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLmluY29tcGxldGUnO1xufVxuXG4vKipcbiAqIEEgbGlzdCBvZiBvbmUgb3IgbWFueSBpbnB1dCBpdGVtcyB0byB0aGUgbW9kZWwsIGNvbnRhaW5pbmcgZGlmZmVyZW50IGNvbnRlbnRcbiAqIHR5cGVzLlxuICovXG5leHBvcnQgdHlwZSBSZXNwb25zZUlucHV0ID0gQXJyYXk8UmVzcG9uc2VJbnB1dEl0ZW0+O1xuXG4vKipcbiAqIEFuIGF1ZGlvIGlucHV0IHRvIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUlucHV0QXVkaW8ge1xuICAvKipcbiAgICogQmFzZTY0LWVuY29kZWQgYXVkaW8gZGF0YS5cbiAgICovXG4gIGRhdGE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCBvZiB0aGUgYXVkaW8gZGF0YS4gQ3VycmVudGx5IHN1cHBvcnRlZCBmb3JtYXRzIGFyZSBgbXAzYCBhbmQgYHdhdmAuXG4gICAqL1xuICBmb3JtYXQ6ICdtcDMnIHwgJ3dhdic7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBpbnB1dCBpdGVtLiBBbHdheXMgYGlucHV0X2F1ZGlvYC5cbiAgICovXG4gIHR5cGU6ICdpbnB1dF9hdWRpbyc7XG59XG5cbi8qKlxuICogQSB0ZXh0IGlucHV0IHRvIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzcG9uc2VJbnB1dENvbnRlbnQgPSBSZXNwb25zZUlucHV0VGV4dCB8IFJlc3BvbnNlSW5wdXRJbWFnZSB8IFJlc3BvbnNlSW5wdXRGaWxlO1xuXG4vKipcbiAqIEEgZmlsZSBpbnB1dCB0byB0aGUgbW9kZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VJbnB1dEZpbGUge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGlucHV0IGl0ZW0uIEFsd2F5cyBgaW5wdXRfZmlsZWAuXG4gICAqL1xuICB0eXBlOiAnaW5wdXRfZmlsZSc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBmaWxlIHRvIGJlIHNlbnQgdG8gdGhlIG1vZGVsLlxuICAgKi9cbiAgZmlsZV9kYXRhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGZpbGUgdG8gYmUgc2VudCB0byB0aGUgbW9kZWwuXG4gICAqL1xuICBmaWxlX2lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBzZW50IHRvIHRoZSBtb2RlbC5cbiAgICovXG4gIGZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGltYWdlIGlucHV0IHRvIHRoZSBtb2RlbC4gTGVhcm4gYWJvdXRcbiAqIFtpbWFnZSBpbnB1dHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy92aXNpb24pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlSW5wdXRJbWFnZSB7XG4gIC8qKlxuICAgKiBUaGUgZGV0YWlsIGxldmVsIG9mIHRoZSBpbWFnZSB0byBiZSBzZW50IHRvIHRoZSBtb2RlbC4gT25lIG9mIGBoaWdoYCwgYGxvd2AsIG9yXG4gICAqIGBhdXRvYC4gRGVmYXVsdHMgdG8gYGF1dG9gLlxuICAgKi9cbiAgZGV0YWlsOiAnaGlnaCcgfCAnbG93JyB8ICdhdXRvJztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGlucHV0IGl0ZW0uIEFsd2F5cyBgaW5wdXRfaW1hZ2VgLlxuICAgKi9cbiAgdHlwZTogJ2lucHV0X2ltYWdlJztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBmaWxlIHRvIGJlIHNlbnQgdG8gdGhlIG1vZGVsLlxuICAgKi9cbiAgZmlsZV9pZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGltYWdlIHRvIGJlIHNlbnQgdG8gdGhlIG1vZGVsLiBBIGZ1bGx5IHF1YWxpZmllZCBVUkwgb3IgYmFzZTY0XG4gICAqIGVuY29kZWQgaW1hZ2UgaW4gYSBkYXRhIFVSTC5cbiAgICovXG4gIGltYWdlX3VybD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogQSBtZXNzYWdlIGlucHV0IHRvIHRoZSBtb2RlbCB3aXRoIGEgcm9sZSBpbmRpY2F0aW5nIGluc3RydWN0aW9uIGZvbGxvd2luZ1xuICogaGllcmFyY2h5LiBJbnN0cnVjdGlvbnMgZ2l2ZW4gd2l0aCB0aGUgYGRldmVsb3BlcmAgb3IgYHN5c3RlbWAgcm9sZSB0YWtlXG4gKiBwcmVjZWRlbmNlIG92ZXIgaW5zdHJ1Y3Rpb25zIGdpdmVuIHdpdGggdGhlIGB1c2VyYCByb2xlLiBNZXNzYWdlcyB3aXRoIHRoZVxuICogYGFzc2lzdGFudGAgcm9sZSBhcmUgcHJlc3VtZWQgdG8gaGF2ZSBiZWVuIGdlbmVyYXRlZCBieSB0aGUgbW9kZWwgaW4gcHJldmlvdXNcbiAqIGludGVyYWN0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzcG9uc2VJbnB1dEl0ZW0gPVxuICB8IEVhc3lJbnB1dE1lc3NhZ2VcbiAgfCBSZXNwb25zZUlucHV0SXRlbS5NZXNzYWdlXG4gIHwgUmVzcG9uc2VPdXRwdXRNZXNzYWdlXG4gIHwgUmVzcG9uc2VGaWxlU2VhcmNoVG9vbENhbGxcbiAgfCBSZXNwb25zZUNvbXB1dGVyVG9vbENhbGxcbiAgfCBSZXNwb25zZUlucHV0SXRlbS5Db21wdXRlckNhbGxPdXRwdXRcbiAgfCBSZXNwb25zZUZ1bmN0aW9uV2ViU2VhcmNoXG4gIHwgUmVzcG9uc2VGdW5jdGlvblRvb2xDYWxsXG4gIHwgUmVzcG9uc2VJbnB1dEl0ZW0uRnVuY3Rpb25DYWxsT3V0cHV0XG4gIHwgUmVzcG9uc2VSZWFzb25pbmdJdGVtXG4gIHwgUmVzcG9uc2VJbnB1dEl0ZW0uSXRlbVJlZmVyZW5jZTtcblxuZXhwb3J0IG5hbWVzcGFjZSBSZXNwb25zZUlucHV0SXRlbSB7XG4gIC8qKlxuICAgKiBBIG1lc3NhZ2UgaW5wdXQgdG8gdGhlIG1vZGVsIHdpdGggYSByb2xlIGluZGljYXRpbmcgaW5zdHJ1Y3Rpb24gZm9sbG93aW5nXG4gICAqIGhpZXJhcmNoeS4gSW5zdHJ1Y3Rpb25zIGdpdmVuIHdpdGggdGhlIGBkZXZlbG9wZXJgIG9yIGBzeXN0ZW1gIHJvbGUgdGFrZVxuICAgKiBwcmVjZWRlbmNlIG92ZXIgaW5zdHJ1Y3Rpb25zIGdpdmVuIHdpdGggdGhlIGB1c2VyYCByb2xlLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIHtcbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygb25lIG9yIG1hbnkgaW5wdXQgaXRlbXMgdG8gdGhlIG1vZGVsLCBjb250YWluaW5nIGRpZmZlcmVudCBjb250ZW50XG4gICAgICogdHlwZXMuXG4gICAgICovXG4gICAgY29udGVudDogUmVzcG9uc2VzQVBJLlJlc3BvbnNlSW5wdXRNZXNzYWdlQ29udGVudExpc3Q7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm9sZSBvZiB0aGUgbWVzc2FnZSBpbnB1dC4gT25lIG9mIGB1c2VyYCwgYHN5c3RlbWAsIG9yIGBkZXZlbG9wZXJgLlxuICAgICAqL1xuICAgIHJvbGU6ICd1c2VyJyB8ICdzeXN0ZW0nIHwgJ2RldmVsb3Blcic7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdHVzIG9mIGl0ZW0uIE9uZSBvZiBgaW5fcHJvZ3Jlc3NgLCBgY29tcGxldGVkYCwgb3IgYGluY29tcGxldGVgLlxuICAgICAqIFBvcHVsYXRlZCB3aGVuIGl0ZW1zIGFyZSByZXR1cm5lZCB2aWEgQVBJLlxuICAgICAqL1xuICAgIHN0YXR1cz86ICdpbl9wcm9ncmVzcycgfCAnY29tcGxldGVkJyB8ICdpbmNvbXBsZXRlJztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIGlucHV0LiBBbHdheXMgc2V0IHRvIGBtZXNzYWdlYC5cbiAgICAgKi9cbiAgICB0eXBlPzogJ21lc3NhZ2UnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvdXRwdXQgb2YgYSBjb21wdXRlciB0b29sIGNhbGwuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIENvbXB1dGVyQ2FsbE91dHB1dCB7XG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSBjb21wdXRlciB0b29sIGNhbGwgdGhhdCBwcm9kdWNlZCB0aGUgb3V0cHV0LlxuICAgICAqL1xuICAgIGNhbGxfaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgY29tcHV0ZXIgc2NyZWVuc2hvdCBpbWFnZSB1c2VkIHdpdGggdGhlIGNvbXB1dGVyIHVzZSB0b29sLlxuICAgICAqL1xuICAgIG91dHB1dDogUmVzcG9uc2VzQVBJLlJlc3BvbnNlQ29tcHV0ZXJUb29sQ2FsbE91dHB1dFNjcmVlbnNob3Q7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgY29tcHV0ZXIgdG9vbCBjYWxsIG91dHB1dC4gQWx3YXlzIGBjb21wdXRlcl9jYWxsX291dHB1dGAuXG4gICAgICovXG4gICAgdHlwZTogJ2NvbXB1dGVyX2NhbGxfb3V0cHV0JztcblxuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgY29tcHV0ZXIgdG9vbCBjYWxsIG91dHB1dC5cbiAgICAgKi9cbiAgICBpZD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYWZldHkgY2hlY2tzIHJlcG9ydGVkIGJ5IHRoZSBBUEkgdGhhdCBoYXZlIGJlZW4gYWNrbm93bGVkZ2VkIGJ5IHRoZVxuICAgICAqIGRldmVsb3Blci5cbiAgICAgKi9cbiAgICBhY2tub3dsZWRnZWRfc2FmZXR5X2NoZWNrcz86IEFycmF5PENvbXB1dGVyQ2FsbE91dHB1dC5BY2tub3dsZWRnZWRTYWZldHlDaGVjaz47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZXNzYWdlIGlucHV0LiBPbmUgb2YgYGluX3Byb2dyZXNzYCwgYGNvbXBsZXRlZGAsIG9yXG4gICAgICogYGluY29tcGxldGVgLiBQb3B1bGF0ZWQgd2hlbiBpbnB1dCBpdGVtcyBhcmUgcmV0dXJuZWQgdmlhIEFQSS5cbiAgICAgKi9cbiAgICBzdGF0dXM/OiAnaW5fcHJvZ3Jlc3MnIHwgJ2NvbXBsZXRlZCcgfCAnaW5jb21wbGV0ZSc7XG4gIH1cblxuICBleHBvcnQgbmFtZXNwYWNlIENvbXB1dGVyQ2FsbE91dHB1dCB7XG4gICAgLyoqXG4gICAgICogQSBwZW5kaW5nIHNhZmV0eSBjaGVjayBmb3IgdGhlIGNvbXB1dGVyIGNhbGwuXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBY2tub3dsZWRnZWRTYWZldHlDaGVjayB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBJRCBvZiB0aGUgcGVuZGluZyBzYWZldHkgY2hlY2suXG4gICAgICAgKi9cbiAgICAgIGlkOiBzdHJpbmc7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHR5cGUgb2YgdGhlIHBlbmRpbmcgc2FmZXR5IGNoZWNrLlxuICAgICAgICovXG4gICAgICBjb2RlOiBzdHJpbmc7XG5cbiAgICAgIC8qKlxuICAgICAgICogRGV0YWlscyBhYm91dCB0aGUgcGVuZGluZyBzYWZldHkgY2hlY2suXG4gICAgICAgKi9cbiAgICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG91dHB1dCBvZiBhIGZ1bmN0aW9uIHRvb2wgY2FsbC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25DYWxsT3V0cHV0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBmdW5jdGlvbiB0b29sIGNhbGwgZ2VuZXJhdGVkIGJ5IHRoZSBtb2RlbC5cbiAgICAgKi9cbiAgICBjYWxsX2lkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIEpTT04gc3RyaW5nIG9mIHRoZSBvdXRwdXQgb2YgdGhlIGZ1bmN0aW9uIHRvb2wgY2FsbC5cbiAgICAgKi9cbiAgICBvdXRwdXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiB0b29sIGNhbGwgb3V0cHV0LiBBbHdheXMgYGZ1bmN0aW9uX2NhbGxfb3V0cHV0YC5cbiAgICAgKi9cbiAgICB0eXBlOiAnZnVuY3Rpb25fY2FsbF9vdXRwdXQnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgZnVuY3Rpb24gdG9vbCBjYWxsIG91dHB1dC4gUG9wdWxhdGVkIHdoZW4gdGhpcyBpdGVtIGlzXG4gICAgICogcmV0dXJuZWQgdmlhIEFQSS5cbiAgICAgKi9cbiAgICBpZD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0dXMgb2YgdGhlIGl0ZW0uIE9uZSBvZiBgaW5fcHJvZ3Jlc3NgLCBgY29tcGxldGVkYCwgb3IgYGluY29tcGxldGVgLlxuICAgICAqIFBvcHVsYXRlZCB3aGVuIGl0ZW1zIGFyZSByZXR1cm5lZCB2aWEgQVBJLlxuICAgICAqL1xuICAgIHN0YXR1cz86ICdpbl9wcm9ncmVzcycgfCAnY29tcGxldGVkJyB8ICdpbmNvbXBsZXRlJztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbnRlcm5hbCBpZGVudGlmaWVyIGZvciBhbiBpdGVtIHRvIHJlZmVyZW5jZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgSXRlbVJlZmVyZW5jZSB7XG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSBpdGVtIHRvIHJlZmVyZW5jZS5cbiAgICAgKi9cbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgaXRlbSB0byByZWZlcmVuY2UuIEFsd2F5cyBgaXRlbV9yZWZlcmVuY2VgLlxuICAgICAqL1xuICAgIHR5cGU6ICdpdGVtX3JlZmVyZW5jZSc7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGxpc3Qgb2Ygb25lIG9yIG1hbnkgaW5wdXQgaXRlbXMgdG8gdGhlIG1vZGVsLCBjb250YWluaW5nIGRpZmZlcmVudCBjb250ZW50XG4gKiB0eXBlcy5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzcG9uc2VJbnB1dE1lc3NhZ2VDb250ZW50TGlzdCA9IEFycmF5PFJlc3BvbnNlSW5wdXRDb250ZW50PjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUlucHV0TWVzc2FnZUl0ZW0ge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgbWVzc2FnZSBpbnB1dC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBvbmUgb3IgbWFueSBpbnB1dCBpdGVtcyB0byB0aGUgbW9kZWwsIGNvbnRhaW5pbmcgZGlmZmVyZW50IGNvbnRlbnRcbiAgICogdHlwZXMuXG4gICAqL1xuICBjb250ZW50OiBSZXNwb25zZUlucHV0TWVzc2FnZUNvbnRlbnRMaXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBvZiB0aGUgbWVzc2FnZSBpbnB1dC4gT25lIG9mIGB1c2VyYCwgYHN5c3RlbWAsIG9yIGBkZXZlbG9wZXJgLlxuICAgKi9cbiAgcm9sZTogJ3VzZXInIHwgJ3N5c3RlbScgfCAnZGV2ZWxvcGVyJztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiBpdGVtLiBPbmUgb2YgYGluX3Byb2dyZXNzYCwgYGNvbXBsZXRlZGAsIG9yIGBpbmNvbXBsZXRlYC5cbiAgICogUG9wdWxhdGVkIHdoZW4gaXRlbXMgYXJlIHJldHVybmVkIHZpYSBBUEkuXG4gICAqL1xuICBzdGF0dXM/OiAnaW5fcHJvZ3Jlc3MnIHwgJ2NvbXBsZXRlZCcgfCAnaW5jb21wbGV0ZSc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIGlucHV0LiBBbHdheXMgc2V0IHRvIGBtZXNzYWdlYC5cbiAgICovXG4gIHR5cGU/OiAnbWVzc2FnZSc7XG59XG5cbi8qKlxuICogQSB0ZXh0IGlucHV0IHRvIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUlucHV0VGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgdGV4dCBpbnB1dCB0byB0aGUgbW9kZWwuXG4gICAqL1xuICB0ZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBpbnB1dCBpdGVtLiBBbHdheXMgYGlucHV0X3RleHRgLlxuICAgKi9cbiAgdHlwZTogJ2lucHV0X3RleHQnO1xufVxuXG4vKipcbiAqIENvbnRlbnQgaXRlbSB1c2VkIHRvIGdlbmVyYXRlIGEgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3BvbnNlSXRlbSA9XG4gIHwgUmVzcG9uc2VJbnB1dE1lc3NhZ2VJdGVtXG4gIHwgUmVzcG9uc2VPdXRwdXRNZXNzYWdlXG4gIHwgUmVzcG9uc2VGaWxlU2VhcmNoVG9vbENhbGxcbiAgfCBSZXNwb25zZUNvbXB1dGVyVG9vbENhbGxcbiAgfCBSZXNwb25zZUNvbXB1dGVyVG9vbENhbGxPdXRwdXRJdGVtXG4gIHwgUmVzcG9uc2VGdW5jdGlvbldlYlNlYXJjaFxuICB8IFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbEl0ZW1cbiAgfCBSZXNwb25zZUZ1bmN0aW9uVG9vbENhbGxPdXRwdXRJdGVtO1xuXG4vKipcbiAqIEFuIGF1ZGlvIG91dHB1dCBmcm9tIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZU91dHB1dEF1ZGlvIHtcbiAgLyoqXG4gICAqIEJhc2U2NC1lbmNvZGVkIGF1ZGlvIGRhdGEgZnJvbSB0aGUgbW9kZWwuXG4gICAqL1xuICBkYXRhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2NyaXB0IG9mIHRoZSBhdWRpbyBkYXRhIGZyb20gdGhlIG1vZGVsLlxuICAgKi9cbiAgdHJhbnNjcmlwdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgb3V0cHV0IGF1ZGlvLiBBbHdheXMgYG91dHB1dF9hdWRpb2AuXG4gICAqL1xuICB0eXBlOiAnb3V0cHV0X2F1ZGlvJztcbn1cblxuLyoqXG4gKiBBbiBvdXRwdXQgbWVzc2FnZSBmcm9tIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzcG9uc2VPdXRwdXRJdGVtID1cbiAgfCBSZXNwb25zZU91dHB1dE1lc3NhZ2VcbiAgfCBSZXNwb25zZUZpbGVTZWFyY2hUb29sQ2FsbFxuICB8IFJlc3BvbnNlRnVuY3Rpb25Ub29sQ2FsbFxuICB8IFJlc3BvbnNlRnVuY3Rpb25XZWJTZWFyY2hcbiAgfCBSZXNwb25zZUNvbXB1dGVyVG9vbENhbGxcbiAgfCBSZXNwb25zZVJlYXNvbmluZ0l0ZW07XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIGEgbmV3IG91dHB1dCBpdGVtIGlzIGFkZGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlT3V0cHV0SXRlbUFkZGVkRXZlbnQge1xuICAvKipcbiAgICogVGhlIG91dHB1dCBpdGVtIHRoYXQgd2FzIGFkZGVkLlxuICAgKi9cbiAgaXRlbTogUmVzcG9uc2VPdXRwdXRJdGVtO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgd2FzIGFkZGVkLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5vdXRwdXRfaXRlbS5hZGRlZGAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2Uub3V0cHV0X2l0ZW0uYWRkZWQnO1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiBhbiBvdXRwdXQgaXRlbSBpcyBtYXJrZWQgZG9uZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZU91dHB1dEl0ZW1Eb25lRXZlbnQge1xuICAvKipcbiAgICogVGhlIG91dHB1dCBpdGVtIHRoYXQgd2FzIG1hcmtlZCBkb25lLlxuICAgKi9cbiAgaXRlbTogUmVzcG9uc2VPdXRwdXRJdGVtO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgd2FzIG1hcmtlZCBkb25lLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lJztcbn1cblxuLyoqXG4gKiBBbiBvdXRwdXQgbWVzc2FnZSBmcm9tIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZU91dHB1dE1lc3NhZ2Uge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgb3V0cHV0IG1lc3NhZ2UuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgb3V0cHV0IG1lc3NhZ2UuXG4gICAqL1xuICBjb250ZW50OiBBcnJheTxSZXNwb25zZU91dHB1dFRleHQgfCBSZXNwb25zZU91dHB1dFJlZnVzYWw+O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBvZiB0aGUgb3V0cHV0IG1lc3NhZ2UuIEFsd2F5cyBgYXNzaXN0YW50YC5cbiAgICovXG4gIHJvbGU6ICdhc3Npc3RhbnQnO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZXNzYWdlIGlucHV0LiBPbmUgb2YgYGluX3Byb2dyZXNzYCwgYGNvbXBsZXRlZGAsIG9yXG4gICAqIGBpbmNvbXBsZXRlYC4gUG9wdWxhdGVkIHdoZW4gaW5wdXQgaXRlbXMgYXJlIHJldHVybmVkIHZpYSBBUEkuXG4gICAqL1xuICBzdGF0dXM6ICdpbl9wcm9ncmVzcycgfCAnY29tcGxldGVkJyB8ICdpbmNvbXBsZXRlJztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIG91dHB1dCBtZXNzYWdlLiBBbHdheXMgYG1lc3NhZ2VgLlxuICAgKi9cbiAgdHlwZTogJ21lc3NhZ2UnO1xufVxuXG4vKipcbiAqIEEgcmVmdXNhbCBmcm9tIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZU91dHB1dFJlZnVzYWwge1xuICAvKipcbiAgICogVGhlIHJlZnVzYWwgZXhwbGFuYXRpb25mcm9tIHRoZSBtb2RlbC5cbiAgICovXG4gIHJlZnVzYWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHJlZnVzYWwuIEFsd2F5cyBgcmVmdXNhbGAuXG4gICAqL1xuICB0eXBlOiAncmVmdXNhbCc7XG59XG5cbi8qKlxuICogQSB0ZXh0IG91dHB1dCBmcm9tIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZU91dHB1dFRleHQge1xuICAvKipcbiAgICogVGhlIGFubm90YXRpb25zIG9mIHRoZSB0ZXh0IG91dHB1dC5cbiAgICovXG4gIGFubm90YXRpb25zOiBBcnJheTxcbiAgICBSZXNwb25zZU91dHB1dFRleHQuRmlsZUNpdGF0aW9uIHwgUmVzcG9uc2VPdXRwdXRUZXh0LlVSTENpdGF0aW9uIHwgUmVzcG9uc2VPdXRwdXRUZXh0LkZpbGVQYXRoXG4gID47XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IG91dHB1dCBmcm9tIHRoZSBtb2RlbC5cbiAgICovXG4gIHRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIG91dHB1dCB0ZXh0LiBBbHdheXMgYG91dHB1dF90ZXh0YC5cbiAgICovXG4gIHR5cGU6ICdvdXRwdXRfdGV4dCc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUmVzcG9uc2VPdXRwdXRUZXh0IHtcbiAgLyoqXG4gICAqIEEgY2l0YXRpb24gdG8gYSBmaWxlLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBGaWxlQ2l0YXRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgZmlsZS5cbiAgICAgKi9cbiAgICBmaWxlX2lkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGZpbGUgaW4gdGhlIGxpc3Qgb2YgZmlsZXMuXG4gICAgICovXG4gICAgaW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBmaWxlIGNpdGF0aW9uLiBBbHdheXMgYGZpbGVfY2l0YXRpb25gLlxuICAgICAqL1xuICAgIHR5cGU6ICdmaWxlX2NpdGF0aW9uJztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNpdGF0aW9uIGZvciBhIHdlYiByZXNvdXJjZSB1c2VkIHRvIGdlbmVyYXRlIGEgbW9kZWwgcmVzcG9uc2UuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFVSTENpdGF0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBVUkwgY2l0YXRpb24gaW4gdGhlIG1lc3NhZ2UuXG4gICAgICovXG4gICAgZW5kX2luZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgVVJMIGNpdGF0aW9uIGluIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIHN0YXJ0X2luZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGl0bGUgb2YgdGhlIHdlYiByZXNvdXJjZS5cbiAgICAgKi9cbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIFVSTCBjaXRhdGlvbi4gQWx3YXlzIGB1cmxfY2l0YXRpb25gLlxuICAgICAqL1xuICAgIHR5cGU6ICd1cmxfY2l0YXRpb24nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFVSTCBvZiB0aGUgd2ViIHJlc291cmNlLlxuICAgICAqL1xuICAgIHVybDogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgcGF0aCB0byBhIGZpbGUuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZpbGVQYXRoIHtcbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIGZpbGUuXG4gICAgICovXG4gICAgZmlsZV9pZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBmaWxlIGluIHRoZSBsaXN0IG9mIGZpbGVzLlxuICAgICAqL1xuICAgIGluZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgZmlsZSBwYXRoLiBBbHdheXMgYGZpbGVfcGF0aGAuXG4gICAgICovXG4gICAgdHlwZTogJ2ZpbGVfcGF0aCc7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjaGFpbiBvZiB0aG91Z2h0IHVzZWQgYnkgYSByZWFzb25pbmcgbW9kZWwgd2hpbGUgZ2VuZXJhdGluZ1xuICogYSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVJlYXNvbmluZ0l0ZW0ge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZWFzb25pbmcgY29udGVudC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlYXNvbmluZyB0ZXh0IGNvbnRlbnRzLlxuICAgKi9cbiAgc3VtbWFyeTogQXJyYXk8UmVzcG9uc2VSZWFzb25pbmdJdGVtLlN1bW1hcnk+O1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LiBBbHdheXMgYHJlYXNvbmluZ2AuXG4gICAqL1xuICB0eXBlOiAncmVhc29uaW5nJztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgaXRlbS4gT25lIG9mIGBpbl9wcm9ncmVzc2AsIGBjb21wbGV0ZWRgLCBvciBgaW5jb21wbGV0ZWAuXG4gICAqIFBvcHVsYXRlZCB3aGVuIGl0ZW1zIGFyZSByZXR1cm5lZCB2aWEgQVBJLlxuICAgKi9cbiAgc3RhdHVzPzogJ2luX3Byb2dyZXNzJyB8ICdjb21wbGV0ZWQnIHwgJ2luY29tcGxldGUnO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFJlc3BvbnNlUmVhc29uaW5nSXRlbSB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgU3VtbWFyeSB7XG4gICAgLyoqXG4gICAgICogQSBzaG9ydCBzdW1tYXJ5IG9mIHRoZSByZWFzb25pbmcgdXNlZCBieSB0aGUgbW9kZWwgd2hlbiBnZW5lcmF0aW5nIHRoZSByZXNwb25zZS5cbiAgICAgKi9cbiAgICB0ZXh0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LiBBbHdheXMgYHN1bW1hcnlfdGV4dGAuXG4gICAgICovXG4gICAgdHlwZTogJ3N1bW1hcnlfdGV4dCc7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gdGhlcmUgaXMgYSBwYXJ0aWFsIHJlZnVzYWwgdGV4dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVJlZnVzYWxEZWx0YUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgY29udGVudCBwYXJ0IHRoYXQgdGhlIHJlZnVzYWwgdGV4dCBpcyBhZGRlZCB0by5cbiAgICovXG4gIGNvbnRlbnRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJlZnVzYWwgdGV4dCB0aGF0IGlzIGFkZGVkLlxuICAgKi9cbiAgZGVsdGE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBvdXRwdXQgaXRlbSB0aGF0IHRoZSByZWZ1c2FsIHRleHQgaXMgYWRkZWQgdG8uXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gdGhhdCB0aGUgcmVmdXNhbCB0ZXh0IGlzIGFkZGVkIHRvLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5yZWZ1c2FsLmRlbHRhYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS5yZWZ1c2FsLmRlbHRhJztcbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gcmVmdXNhbCB0ZXh0IGlzIGZpbmFsaXplZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVJlZnVzYWxEb25lRXZlbnQge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBjb250ZW50IHBhcnQgdGhhdCB0aGUgcmVmdXNhbCB0ZXh0IGlzIGZpbmFsaXplZC5cbiAgICovXG4gIGNvbnRlbnRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBvdXRwdXQgaXRlbSB0aGF0IHRoZSByZWZ1c2FsIHRleHQgaXMgZmluYWxpemVkLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIHJlZnVzYWwgdGV4dCBpcyBmaW5hbGl6ZWQuXG4gICAqL1xuICBvdXRwdXRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJlZnVzYWwgdGV4dCB0aGF0IGlzIGZpbmFsaXplZC5cbiAgICovXG4gIHJlZnVzYWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50LiBBbHdheXMgYHJlc3BvbnNlLnJlZnVzYWwuZG9uZWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2UucmVmdXNhbC5kb25lJztcbn1cblxuLyoqXG4gKiBUaGUgc3RhdHVzIG9mIHRoZSByZXNwb25zZSBnZW5lcmF0aW9uLiBPbmUgb2YgYGNvbXBsZXRlZGAsIGBmYWlsZWRgLFxuICogYGluX3Byb2dyZXNzYCwgb3IgYGluY29tcGxldGVgLlxuICovXG5leHBvcnQgdHlwZSBSZXNwb25zZVN0YXR1cyA9ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAnaW5fcHJvZ3Jlc3MnIHwgJ2luY29tcGxldGUnO1xuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiB0aGVyZSBpcyBhIHBhcnRpYWwgYXVkaW8gcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3BvbnNlU3RyZWFtRXZlbnQgPVxuICB8IFJlc3BvbnNlQXVkaW9EZWx0YUV2ZW50XG4gIHwgUmVzcG9uc2VBdWRpb0RvbmVFdmVudFxuICB8IFJlc3BvbnNlQXVkaW9UcmFuc2NyaXB0RGVsdGFFdmVudFxuICB8IFJlc3BvbnNlQXVkaW9UcmFuc2NyaXB0RG9uZUV2ZW50XG4gIHwgUmVzcG9uc2VDb2RlSW50ZXJwcmV0ZXJDYWxsQ29kZURlbHRhRXZlbnRcbiAgfCBSZXNwb25zZUNvZGVJbnRlcnByZXRlckNhbGxDb2RlRG9uZUV2ZW50XG4gIHwgUmVzcG9uc2VDb2RlSW50ZXJwcmV0ZXJDYWxsQ29tcGxldGVkRXZlbnRcbiAgfCBSZXNwb25zZUNvZGVJbnRlcnByZXRlckNhbGxJblByb2dyZXNzRXZlbnRcbiAgfCBSZXNwb25zZUNvZGVJbnRlcnByZXRlckNhbGxJbnRlcnByZXRpbmdFdmVudFxuICB8IFJlc3BvbnNlQ29tcGxldGVkRXZlbnRcbiAgfCBSZXNwb25zZUNvbnRlbnRQYXJ0QWRkZWRFdmVudFxuICB8IFJlc3BvbnNlQ29udGVudFBhcnREb25lRXZlbnRcbiAgfCBSZXNwb25zZUNyZWF0ZWRFdmVudFxuICB8IFJlc3BvbnNlRXJyb3JFdmVudFxuICB8IFJlc3BvbnNlRmlsZVNlYXJjaENhbGxDb21wbGV0ZWRFdmVudFxuICB8IFJlc3BvbnNlRmlsZVNlYXJjaENhbGxJblByb2dyZXNzRXZlbnRcbiAgfCBSZXNwb25zZUZpbGVTZWFyY2hDYWxsU2VhcmNoaW5nRXZlbnRcbiAgfCBSZXNwb25zZUZ1bmN0aW9uQ2FsbEFyZ3VtZW50c0RlbHRhRXZlbnRcbiAgfCBSZXNwb25zZUZ1bmN0aW9uQ2FsbEFyZ3VtZW50c0RvbmVFdmVudFxuICB8IFJlc3BvbnNlSW5Qcm9ncmVzc0V2ZW50XG4gIHwgUmVzcG9uc2VGYWlsZWRFdmVudFxuICB8IFJlc3BvbnNlSW5jb21wbGV0ZUV2ZW50XG4gIHwgUmVzcG9uc2VPdXRwdXRJdGVtQWRkZWRFdmVudFxuICB8IFJlc3BvbnNlT3V0cHV0SXRlbURvbmVFdmVudFxuICB8IFJlc3BvbnNlUmVmdXNhbERlbHRhRXZlbnRcbiAgfCBSZXNwb25zZVJlZnVzYWxEb25lRXZlbnRcbiAgfCBSZXNwb25zZVRleHRBbm5vdGF0aW9uRGVsdGFFdmVudFxuICB8IFJlc3BvbnNlVGV4dERlbHRhRXZlbnRcbiAgfCBSZXNwb25zZVRleHREb25lRXZlbnRcbiAgfCBSZXNwb25zZVdlYlNlYXJjaENhbGxDb21wbGV0ZWRFdmVudFxuICB8IFJlc3BvbnNlV2ViU2VhcmNoQ2FsbEluUHJvZ3Jlc3NFdmVudFxuICB8IFJlc3BvbnNlV2ViU2VhcmNoQ2FsbFNlYXJjaGluZ0V2ZW50O1xuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiBhIHRleHQgYW5ub3RhdGlvbiBpcyBhZGRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVRleHRBbm5vdGF0aW9uRGVsdGFFdmVudCB7XG4gIC8qKlxuICAgKiBBIGNpdGF0aW9uIHRvIGEgZmlsZS5cbiAgICovXG4gIGFubm90YXRpb246XG4gICAgfCBSZXNwb25zZVRleHRBbm5vdGF0aW9uRGVsdGFFdmVudC5GaWxlQ2l0YXRpb25cbiAgICB8IFJlc3BvbnNlVGV4dEFubm90YXRpb25EZWx0YUV2ZW50LlVSTENpdGF0aW9uXG4gICAgfCBSZXNwb25zZVRleHRBbm5vdGF0aW9uRGVsdGFFdmVudC5GaWxlUGF0aDtcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBhbm5vdGF0aW9uIHRoYXQgd2FzIGFkZGVkLlxuICAgKi9cbiAgYW5ub3RhdGlvbl9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbnRlbnQgcGFydCB0aGF0IHRoZSB0ZXh0IGFubm90YXRpb24gd2FzIGFkZGVkIHRvLlxuICAgKi9cbiAgY29udGVudF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIHRleHQgYW5ub3RhdGlvbiB3YXMgYWRkZWQgdG8uXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gdGhhdCB0aGUgdGV4dCBhbm5vdGF0aW9uIHdhcyBhZGRlZCB0by5cbiAgICovXG4gIG91dHB1dF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuIEFsd2F5cyBgcmVzcG9uc2Uub3V0cHV0X3RleHQuYW5ub3RhdGlvbi5hZGRlZGAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2Uub3V0cHV0X3RleHQuYW5ub3RhdGlvbi5hZGRlZCc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUmVzcG9uc2VUZXh0QW5ub3RhdGlvbkRlbHRhRXZlbnQge1xuICAvKipcbiAgICogQSBjaXRhdGlvbiB0byBhIGZpbGUuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZpbGVDaXRhdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSBmaWxlLlxuICAgICAqL1xuICAgIGZpbGVfaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgZmlsZSBpbiB0aGUgbGlzdCBvZiBmaWxlcy5cbiAgICAgKi9cbiAgICBpbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIGZpbGUgY2l0YXRpb24uIEFsd2F5cyBgZmlsZV9jaXRhdGlvbmAuXG4gICAgICovXG4gICAgdHlwZTogJ2ZpbGVfY2l0YXRpb24nO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY2l0YXRpb24gZm9yIGEgd2ViIHJlc291cmNlIHVzZWQgdG8gZ2VuZXJhdGUgYSBtb2RlbCByZXNwb25zZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgVVJMQ2l0YXRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIFVSTCBjaXRhdGlvbiBpbiB0aGUgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBlbmRfaW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBVUkwgY2l0YXRpb24gaW4gdGhlIG1lc3NhZ2UuXG4gICAgICovXG4gICAgc3RhcnRfaW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgd2ViIHJlc291cmNlLlxuICAgICAqL1xuICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgVVJMIGNpdGF0aW9uLiBBbHdheXMgYHVybF9jaXRhdGlvbmAuXG4gICAgICovXG4gICAgdHlwZTogJ3VybF9jaXRhdGlvbic7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVVJMIG9mIHRoZSB3ZWIgcmVzb3VyY2UuXG4gICAgICovXG4gICAgdXJsOiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogQSBwYXRoIHRvIGEgZmlsZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRmlsZVBhdGgge1xuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgZmlsZS5cbiAgICAgKi9cbiAgICBmaWxlX2lkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGZpbGUgaW4gdGhlIGxpc3Qgb2YgZmlsZXMuXG4gICAgICovXG4gICAgaW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBmaWxlIHBhdGguIEFsd2F5cyBgZmlsZV9wYXRoYC5cbiAgICAgKi9cbiAgICB0eXBlOiAnZmlsZV9wYXRoJztcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSB0ZXh0IHJlc3BvbnNlIGZyb20gdGhlIG1vZGVsLiBDYW4gYmUgcGxhaW4gdGV4dCBvclxuICogc3RydWN0dXJlZCBKU09OIGRhdGEuIExlYXJuIG1vcmU6XG4gKlxuICogLSBbVGV4dCBpbnB1dHMgYW5kIG91dHB1dHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90ZXh0KVxuICogLSBbU3RydWN0dXJlZCBPdXRwdXRzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvc3RydWN0dXJlZC1vdXRwdXRzKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlVGV4dENvbmZpZyB7XG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgc3BlY2lmeWluZyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZGVsIG11c3Qgb3V0cHV0LlxuICAgKlxuICAgKiBDb25maWd1cmluZyBgeyBcInR5cGVcIjogXCJqc29uX3NjaGVtYVwiIH1gIGVuYWJsZXMgU3RydWN0dXJlZCBPdXRwdXRzLCB3aGljaFxuICAgKiBlbnN1cmVzIHRoZSBtb2RlbCB3aWxsIG1hdGNoIHlvdXIgc3VwcGxpZWQgSlNPTiBzY2hlbWEuIExlYXJuIG1vcmUgaW4gdGhlXG4gICAqIFtTdHJ1Y3R1cmVkIE91dHB1dHMgZ3VpZGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zdHJ1Y3R1cmVkLW91dHB1dHMpLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgYHsgXCJ0eXBlXCI6IFwidGV4dFwiIH1gIHdpdGggbm8gYWRkaXRpb25hbCBvcHRpb25zLlxuICAgKlxuICAgKiAqKk5vdCByZWNvbW1lbmRlZCBmb3IgZ3B0LTRvIGFuZCBuZXdlciBtb2RlbHM6KipcbiAgICpcbiAgICogU2V0dGluZyB0byBgeyBcInR5cGVcIjogXCJqc29uX29iamVjdFwiIH1gIGVuYWJsZXMgdGhlIG9sZGVyIEpTT04gbW9kZSwgd2hpY2hcbiAgICogZW5zdXJlcyB0aGUgbWVzc2FnZSB0aGUgbW9kZWwgZ2VuZXJhdGVzIGlzIHZhbGlkIEpTT04uIFVzaW5nIGBqc29uX3NjaGVtYWAgaXNcbiAgICogcHJlZmVycmVkIGZvciBtb2RlbHMgdGhhdCBzdXBwb3J0IGl0LlxuICAgKi9cbiAgZm9ybWF0PzogUmVzcG9uc2VGb3JtYXRUZXh0Q29uZmlnO1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiB0aGVyZSBpcyBhbiBhZGRpdGlvbmFsIHRleHQgZGVsdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VUZXh0RGVsdGFFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbnRlbnQgcGFydCB0aGF0IHRoZSB0ZXh0IGRlbHRhIHdhcyBhZGRlZCB0by5cbiAgICovXG4gIGNvbnRlbnRfaW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRleHQgZGVsdGEgdGhhdCB3YXMgYWRkZWQuXG4gICAqL1xuICBkZWx0YTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIHRleHQgZGVsdGEgd2FzIGFkZGVkIHRvLlxuICAgKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIHRleHQgZGVsdGEgd2FzIGFkZGVkIHRvLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2Uub3V0cHV0X3RleHQuZGVsdGEnO1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiB0ZXh0IGNvbnRlbnQgaXMgZmluYWxpemVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlVGV4dERvbmVFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNvbnRlbnQgcGFydCB0aGF0IHRoZSB0ZXh0IGNvbnRlbnQgaXMgZmluYWxpemVkLlxuICAgKi9cbiAgY29udGVudF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIG91dHB1dCBpdGVtIHRoYXQgdGhlIHRleHQgY29udGVudCBpcyBmaW5hbGl6ZWQuXG4gICAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGl0ZW0gdGhhdCB0aGUgdGV4dCBjb250ZW50IGlzIGZpbmFsaXplZC5cbiAgICovXG4gIG91dHB1dF9pbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBjb250ZW50IHRoYXQgaXMgZmluYWxpemVkLlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgZXZlbnQuIEFsd2F5cyBgcmVzcG9uc2Uub3V0cHV0X3RleHQuZG9uZWAuXG4gICAqL1xuICB0eXBlOiAncmVzcG9uc2Uub3V0cHV0X3RleHQuZG9uZSc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0b2tlbiB1c2FnZSBkZXRhaWxzIGluY2x1ZGluZyBpbnB1dCB0b2tlbnMsIG91dHB1dCB0b2tlbnMsIGFcbiAqIGJyZWFrZG93biBvZiBvdXRwdXQgdG9rZW5zLCBhbmQgdGhlIHRvdGFsIHRva2VucyB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlVXNhZ2Uge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBpbnB1dCB0b2tlbnMuXG4gICAqL1xuICBpbnB1dF90b2tlbnM6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBkZXRhaWxlZCBicmVha2Rvd24gb2YgdGhlIGlucHV0IHRva2Vucy5cbiAgICovXG4gIGlucHV0X3Rva2Vuc19kZXRhaWxzOiBSZXNwb25zZVVzYWdlLklucHV0VG9rZW5zRGV0YWlscztcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBvdXRwdXQgdG9rZW5zLlxuICAgKi9cbiAgb3V0cHV0X3Rva2VuczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGRldGFpbGVkIGJyZWFrZG93biBvZiB0aGUgb3V0cHV0IHRva2Vucy5cbiAgICovXG4gIG91dHB1dF90b2tlbnNfZGV0YWlsczogUmVzcG9uc2VVc2FnZS5PdXRwdXRUb2tlbnNEZXRhaWxzO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHRva2VucyB1c2VkLlxuICAgKi9cbiAgdG90YWxfdG9rZW5zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUmVzcG9uc2VVc2FnZSB7XG4gIC8qKlxuICAgKiBBIGRldGFpbGVkIGJyZWFrZG93biBvZiB0aGUgaW5wdXQgdG9rZW5zLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dFRva2Vuc0RldGFpbHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgdG9rZW5zIHRoYXQgd2VyZSByZXRyaWV2ZWQgZnJvbSB0aGUgY2FjaGUuXG4gICAgICogW01vcmUgb24gcHJvbXB0IGNhY2hpbmddKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9wcm9tcHQtY2FjaGluZykuXG4gICAgICovXG4gICAgY2FjaGVkX3Rva2VuczogbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZGV0YWlsZWQgYnJlYWtkb3duIG9mIHRoZSBvdXRwdXQgdG9rZW5zLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXRUb2tlbnNEZXRhaWxzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHJlYXNvbmluZyB0b2tlbnMuXG4gICAgICovXG4gICAgcmVhc29uaW5nX3Rva2VuczogbnVtYmVyO1xuICB9XG59XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIGEgd2ViIHNlYXJjaCBjYWxsIGlzIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVdlYlNlYXJjaENhbGxDb21wbGV0ZWRFdmVudCB7XG4gIC8qKlxuICAgKiBVbmlxdWUgSUQgZm9yIHRoZSBvdXRwdXQgaXRlbSBhc3NvY2lhdGVkIHdpdGggdGhlIHdlYiBzZWFyY2ggY2FsbC5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbSB0aGF0IHRoZSB3ZWIgc2VhcmNoIGNhbGwgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS53ZWJfc2VhcmNoX2NhbGwuY29tcGxldGVkYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS53ZWJfc2VhcmNoX2NhbGwuY29tcGxldGVkJztcbn1cblxuLyoqXG4gKiBFbWl0dGVkIHdoZW4gYSB3ZWIgc2VhcmNoIGNhbGwgaXMgaW5pdGlhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlV2ViU2VhcmNoQ2FsbEluUHJvZ3Jlc3NFdmVudCB7XG4gIC8qKlxuICAgKiBVbmlxdWUgSUQgZm9yIHRoZSBvdXRwdXQgaXRlbSBhc3NvY2lhdGVkIHdpdGggdGhlIHdlYiBzZWFyY2ggY2FsbC5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbSB0aGF0IHRoZSB3ZWIgc2VhcmNoIGNhbGwgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS53ZWJfc2VhcmNoX2NhbGwuaW5fcHJvZ3Jlc3NgLlxuICAgKi9cbiAgdHlwZTogJ3Jlc3BvbnNlLndlYl9zZWFyY2hfY2FsbC5pbl9wcm9ncmVzcyc7XG59XG5cbi8qKlxuICogRW1pdHRlZCB3aGVuIGEgd2ViIHNlYXJjaCBjYWxsIGlzIGV4ZWN1dGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVdlYlNlYXJjaENhbGxTZWFyY2hpbmdFdmVudCB7XG4gIC8qKlxuICAgKiBVbmlxdWUgSUQgZm9yIHRoZSBvdXRwdXQgaXRlbSBhc3NvY2lhdGVkIHdpdGggdGhlIHdlYiBzZWFyY2ggY2FsbC5cbiAgICovXG4gIGl0ZW1faWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgaXRlbSB0aGF0IHRoZSB3ZWIgc2VhcmNoIGNhbGwgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKi9cbiAgb3V0cHV0X2luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gQWx3YXlzIGByZXNwb25zZS53ZWJfc2VhcmNoX2NhbGwuc2VhcmNoaW5nYC5cbiAgICovXG4gIHR5cGU6ICdyZXNwb25zZS53ZWJfc2VhcmNoX2NhbGwuc2VhcmNoaW5nJztcbn1cblxuLyoqXG4gKiBBIHRvb2wgdGhhdCBzZWFyY2hlcyBmb3IgcmVsZXZhbnQgY29udGVudCBmcm9tIHVwbG9hZGVkIGZpbGVzLiBMZWFybiBtb3JlIGFib3V0XG4gKiB0aGVcbiAqIFtmaWxlIHNlYXJjaCB0b29sXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdG9vbHMtZmlsZS1zZWFyY2gpLlxuICovXG5leHBvcnQgdHlwZSBUb29sID0gRmlsZVNlYXJjaFRvb2wgfCBGdW5jdGlvblRvb2wgfCBDb21wdXRlclRvb2wgfCBXZWJTZWFyY2hUb29sO1xuXG4vKipcbiAqIFVzZSB0aGlzIG9wdGlvbiB0byBmb3JjZSB0aGUgbW9kZWwgdG8gY2FsbCBhIHNwZWNpZmljIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xDaG9pY2VGdW5jdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRm9yIGZ1bmN0aW9uIGNhbGxpbmcsIHRoZSB0eXBlIGlzIGFsd2F5cyBgZnVuY3Rpb25gLlxuICAgKi9cbiAgdHlwZTogJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBDb250cm9scyB3aGljaCAoaWYgYW55KSB0b29sIGlzIGNhbGxlZCBieSB0aGUgbW9kZWwuXG4gKlxuICogYG5vbmVgIG1lYW5zIHRoZSBtb2RlbCB3aWxsIG5vdCBjYWxsIGFueSB0b29sIGFuZCBpbnN0ZWFkIGdlbmVyYXRlcyBhIG1lc3NhZ2UuXG4gKlxuICogYGF1dG9gIG1lYW5zIHRoZSBtb2RlbCBjYW4gcGljayBiZXR3ZWVuIGdlbmVyYXRpbmcgYSBtZXNzYWdlIG9yIGNhbGxpbmcgb25lIG9yXG4gKiBtb3JlIHRvb2xzLlxuICpcbiAqIGByZXF1aXJlZGAgbWVhbnMgdGhlIG1vZGVsIG11c3QgY2FsbCBvbmUgb3IgbW9yZSB0b29scy5cbiAqL1xuZXhwb3J0IHR5cGUgVG9vbENob2ljZU9wdGlvbnMgPSAnbm9uZScgfCAnYXV0bycgfCAncmVxdWlyZWQnO1xuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBtb2RlbCBzaG91bGQgdXNlIGEgYnVpbHQtaW4gdG9vbCB0byBnZW5lcmF0ZSBhIHJlc3BvbnNlLlxuICogW0xlYXJuIG1vcmUgYWJvdXQgYnVpbHQtaW4gdG9vbHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90b29scykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbENob2ljZVR5cGVzIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGhvc3RlZCB0b29sIHRoZSBtb2RlbCBzaG91bGQgdG8gdXNlLiBMZWFybiBtb3JlIGFib3V0XG4gICAqIFtidWlsdC1pbiB0b29sc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3Rvb2xzKS5cbiAgICpcbiAgICogQWxsb3dlZCB2YWx1ZXMgYXJlOlxuICAgKlxuICAgKiAtIGBmaWxlX3NlYXJjaGBcbiAgICogLSBgd2ViX3NlYXJjaF9wcmV2aWV3YFxuICAgKiAtIGBjb21wdXRlcl91c2VfcHJldmlld2BcbiAgICovXG4gIHR5cGU6ICdmaWxlX3NlYXJjaCcgfCAnd2ViX3NlYXJjaF9wcmV2aWV3JyB8ICdjb21wdXRlcl91c2VfcHJldmlldycgfCAnd2ViX3NlYXJjaF9wcmV2aWV3XzIwMjVfMDNfMTEnO1xufVxuXG4vKipcbiAqIFRoaXMgdG9vbCBzZWFyY2hlcyB0aGUgd2ViIGZvciByZWxldmFudCByZXN1bHRzIHRvIHVzZSBpbiBhIHJlc3BvbnNlLiBMZWFybiBtb3JlXG4gKiBhYm91dCB0aGVcbiAqIFt3ZWIgc2VhcmNoIHRvb2xdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90b29scy13ZWItc2VhcmNoKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJTZWFyY2hUb29sIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSB3ZWIgc2VhcmNoIHRvb2wuIE9uZSBvZjpcbiAgICpcbiAgICogLSBgd2ViX3NlYXJjaF9wcmV2aWV3YFxuICAgKiAtIGB3ZWJfc2VhcmNoX3ByZXZpZXdfMjAyNV8wM18xMWBcbiAgICovXG4gIHR5cGU6ICd3ZWJfc2VhcmNoX3ByZXZpZXcnIHwgJ3dlYl9zZWFyY2hfcHJldmlld18yMDI1XzAzXzExJztcblxuICAvKipcbiAgICogSGlnaCBsZXZlbCBndWlkYW5jZSBmb3IgdGhlIGFtb3VudCBvZiBjb250ZXh0IHdpbmRvdyBzcGFjZSB0byB1c2UgZm9yIHRoZVxuICAgKiBzZWFyY2guIE9uZSBvZiBgbG93YCwgYG1lZGl1bWAsIG9yIGBoaWdoYC4gYG1lZGl1bWAgaXMgdGhlIGRlZmF1bHQuXG4gICAqL1xuICBzZWFyY2hfY29udGV4dF9zaXplPzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcblxuICB1c2VyX2xvY2F0aW9uPzogV2ViU2VhcmNoVG9vbC5Vc2VyTG9jYXRpb24gfCBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFdlYlNlYXJjaFRvb2wge1xuICBleHBvcnQgaW50ZXJmYWNlIFVzZXJMb2NhdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgbG9jYXRpb24gYXBwcm94aW1hdGlvbi4gQWx3YXlzIGBhcHByb3hpbWF0ZWAuXG4gICAgICovXG4gICAgdHlwZTogJ2FwcHJveGltYXRlJztcblxuICAgIC8qKlxuICAgICAqIEZyZWUgdGV4dCBpbnB1dCBmb3IgdGhlIGNpdHkgb2YgdGhlIHVzZXIsIGUuZy4gYFNhbiBGcmFuY2lzY29gLlxuICAgICAqL1xuICAgIGNpdHk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHdvLWxldHRlciBbSVNPIGNvdW50cnkgY29kZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzMxNjYtMSkgb2ZcbiAgICAgKiB0aGUgdXNlciwgZS5nLiBgVVNgLlxuICAgICAqL1xuICAgIGNvdW50cnk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBGcmVlIHRleHQgaW5wdXQgZm9yIHRoZSByZWdpb24gb2YgdGhlIHVzZXIsIGUuZy4gYENhbGlmb3JuaWFgLlxuICAgICAqL1xuICAgIHJlZ2lvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBbSUFOQSB0aW1lem9uZV0oaHR0cHM6Ly90aW1lYXBpLmlvL2RvY3VtZW50YXRpb24vaWFuYS10aW1lem9uZXMpIG9mIHRoZVxuICAgICAqIHVzZXIsIGUuZy4gYEFtZXJpY2EvTG9zX0FuZ2VsZXNgLlxuICAgICAqL1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ3JlYXRlUGFyYW1zID0gUmVzcG9uc2VDcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcgfCBSZXNwb25zZUNyZWF0ZVBhcmFtc1N0cmVhbWluZztcblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUNyZWF0ZVBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogVGV4dCwgaW1hZ2UsIG9yIGZpbGUgaW5wdXRzIHRvIHRoZSBtb2RlbCwgdXNlZCB0byBnZW5lcmF0ZSBhIHJlc3BvbnNlLlxuICAgKlxuICAgKiBMZWFybiBtb3JlOlxuICAgKlxuICAgKiAtIFtUZXh0IGlucHV0cyBhbmQgb3V0cHV0c10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3RleHQpXG4gICAqIC0gW0ltYWdlIGlucHV0c10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2ltYWdlcylcbiAgICogLSBbRmlsZSBpbnB1dHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9wZGYtZmlsZXMpXG4gICAqIC0gW0NvbnZlcnNhdGlvbiBzdGF0ZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2NvbnZlcnNhdGlvbi1zdGF0ZSlcbiAgICogLSBbRnVuY3Rpb24gY2FsbGluZ10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2Z1bmN0aW9uLWNhbGxpbmcpXG4gICAqL1xuICBpbnB1dDogc3RyaW5nIHwgUmVzcG9uc2VJbnB1dDtcblxuICAvKipcbiAgICogTW9kZWwgSUQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVzcG9uc2UsIGxpa2UgYGdwdC00b2Agb3IgYG8xYC4gT3BlbkFJIG9mZmVycyBhXG4gICAqIHdpZGUgcmFuZ2Ugb2YgbW9kZWxzIHdpdGggZGlmZmVyZW50IGNhcGFiaWxpdGllcywgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLFxuICAgKiBhbmQgcHJpY2UgcG9pbnRzLiBSZWZlciB0byB0aGVcbiAgICogW21vZGVsIGd1aWRlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9tb2RlbHMpIHRvIGJyb3dzZSBhbmQgY29tcGFyZVxuICAgKiBhdmFpbGFibGUgbW9kZWxzLlxuICAgKi9cbiAgbW9kZWw6IFNoYXJlZC5SZXNwb25zZXNNb2RlbDtcblxuICAvKipcbiAgICogU3BlY2lmeSBhZGRpdGlvbmFsIG91dHB1dCBkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIG1vZGVsIHJlc3BvbnNlLiBDdXJyZW50bHlcbiAgICogc3VwcG9ydGVkIHZhbHVlcyBhcmU6XG4gICAqXG4gICAqIC0gYGZpbGVfc2VhcmNoX2NhbGwucmVzdWx0c2A6IEluY2x1ZGUgdGhlIHNlYXJjaCByZXN1bHRzIG9mIHRoZSBmaWxlIHNlYXJjaCB0b29sXG4gICAqICAgY2FsbC5cbiAgICogLSBgbWVzc2FnZS5pbnB1dF9pbWFnZS5pbWFnZV91cmxgOiBJbmNsdWRlIGltYWdlIHVybHMgZnJvbSB0aGUgaW5wdXQgbWVzc2FnZS5cbiAgICogLSBgY29tcHV0ZXJfY2FsbF9vdXRwdXQub3V0cHV0LmltYWdlX3VybGA6IEluY2x1ZGUgaW1hZ2UgdXJscyBmcm9tIHRoZSBjb21wdXRlclxuICAgKiAgIGNhbGwgb3V0cHV0LlxuICAgKi9cbiAgaW5jbHVkZT86IEFycmF5PFJlc3BvbnNlSW5jbHVkYWJsZT4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgc3lzdGVtIChvciBkZXZlbG9wZXIpIG1lc3NhZ2UgYXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIG1vZGVsJ3NcbiAgICogY29udGV4dC5cbiAgICpcbiAgICogV2hlbiB1c2luZyBhbG9uZyB3aXRoIGBwcmV2aW91c19yZXNwb25zZV9pZGAsIHRoZSBpbnN0cnVjdGlvbnMgZnJvbSBhIHByZXZpb3VzXG4gICAqIHJlc3BvbnNlIHdpbGwgYmUgbm90IGJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCByZXNwb25zZS4gVGhpcyBtYWtlcyBpdCBzaW1wbGVcbiAgICogdG8gc3dhcCBvdXQgc3lzdGVtIChvciBkZXZlbG9wZXIpIG1lc3NhZ2VzIGluIG5ldyByZXNwb25zZXMuXG4gICAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbiB1cHBlciBib3VuZCBmb3IgdGhlIG51bWJlciBvZiB0b2tlbnMgdGhhdCBjYW4gYmUgZ2VuZXJhdGVkIGZvciBhIHJlc3BvbnNlLFxuICAgKiBpbmNsdWRpbmcgdmlzaWJsZSBvdXRwdXQgdG9rZW5zIGFuZFxuICAgKiBbcmVhc29uaW5nIHRva2Vuc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3JlYXNvbmluZykuXG4gICAqL1xuICBtYXhfb3V0cHV0X3Rva2Vucz86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAqXG4gICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBtZXRhZGF0YT86IFNoYXJlZC5NZXRhZGF0YSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgdGhlIG1vZGVsIHRvIHJ1biB0b29sIGNhbGxzIGluIHBhcmFsbGVsLlxuICAgKi9cbiAgcGFyYWxsZWxfdG9vbF9jYWxscz86IGJvb2xlYW4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBwcmV2aW91cyByZXNwb25zZSB0byB0aGUgbW9kZWwuIFVzZSB0aGlzIHRvIGNyZWF0ZVxuICAgKiBtdWx0aS10dXJuIGNvbnZlcnNhdGlvbnMuIExlYXJuIG1vcmUgYWJvdXRcbiAgICogW2NvbnZlcnNhdGlvbiBzdGF0ZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL2NvbnZlcnNhdGlvbi1zdGF0ZSkuXG4gICAqL1xuICBwcmV2aW91c19yZXNwb25zZV9pZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqICoqby1zZXJpZXMgbW9kZWxzIG9ubHkqKlxuICAgKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yXG4gICAqIFtyZWFzb25pbmcgbW9kZWxzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvcmVhc29uaW5nKS5cbiAgICovXG4gIHJlYXNvbmluZz86IFNoYXJlZC5SZWFzb25pbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0b3JlIHRoZSBnZW5lcmF0ZWQgbW9kZWwgcmVzcG9uc2UgZm9yIGxhdGVyIHJldHJpZXZhbCB2aWEgQVBJLlxuICAgKi9cbiAgc3RvcmU/OiBib29sZWFuIHwgbnVsbDtcblxuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBtb2RlbCByZXNwb25zZSBkYXRhIHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGNsaWVudCBhcyBpdCBpc1xuICAgKiBnZW5lcmF0ZWQgdXNpbmdcbiAgICogW3NlcnZlci1zZW50IGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHMjRXZlbnRfc3RyZWFtX2Zvcm1hdCkuXG4gICAqIFNlZSB0aGVcbiAgICogW1N0cmVhbWluZyBzZWN0aW9uIGJlbG93XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3Jlc3BvbnNlcy1zdHJlYW1pbmcpXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgc3RyZWFtPzogYm9vbGVhbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoYXQgc2FtcGxpbmcgdGVtcGVyYXR1cmUgdG8gdXNlLCBiZXR3ZWVuIDAgYW5kIDIuIEhpZ2hlciB2YWx1ZXMgbGlrZSAwLjggd2lsbFxuICAgKiBtYWtlIHRoZSBvdXRwdXQgbW9yZSByYW5kb20sIHdoaWxlIGxvd2VyIHZhbHVlcyBsaWtlIDAuMiB3aWxsIG1ha2UgaXQgbW9yZVxuICAgKiBmb2N1c2VkIGFuZCBkZXRlcm1pbmlzdGljLiBXZSBnZW5lcmFsbHkgcmVjb21tZW5kIGFsdGVyaW5nIHRoaXMgb3IgYHRvcF9wYCBidXRcbiAgICogbm90IGJvdGguXG4gICAqL1xuICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSB0ZXh0IHJlc3BvbnNlIGZyb20gdGhlIG1vZGVsLiBDYW4gYmUgcGxhaW4gdGV4dCBvclxuICAgKiBzdHJ1Y3R1cmVkIEpTT04gZGF0YS4gTGVhcm4gbW9yZTpcbiAgICpcbiAgICogLSBbVGV4dCBpbnB1dHMgYW5kIG91dHB1dHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90ZXh0KVxuICAgKiAtIFtTdHJ1Y3R1cmVkIE91dHB1dHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zdHJ1Y3R1cmVkLW91dHB1dHMpXG4gICAqL1xuICB0ZXh0PzogUmVzcG9uc2VUZXh0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIG1vZGVsIHNob3VsZCBzZWxlY3Qgd2hpY2ggdG9vbCAob3IgdG9vbHMpIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgYVxuICAgKiByZXNwb25zZS4gU2VlIHRoZSBgdG9vbHNgIHBhcmFtZXRlciB0byBzZWUgaG93IHRvIHNwZWNpZnkgd2hpY2ggdG9vbHMgdGhlIG1vZGVsXG4gICAqIGNhbiBjYWxsLlxuICAgKi9cbiAgdG9vbF9jaG9pY2U/OiBUb29sQ2hvaWNlT3B0aW9ucyB8IFRvb2xDaG9pY2VUeXBlcyB8IFRvb2xDaG9pY2VGdW5jdGlvbjtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgdG9vbHMgdGhlIG1vZGVsIG1heSBjYWxsIHdoaWxlIGdlbmVyYXRpbmcgYSByZXNwb25zZS4gWW91IGNhblxuICAgKiBzcGVjaWZ5IHdoaWNoIHRvb2wgdG8gdXNlIGJ5IHNldHRpbmcgdGhlIGB0b29sX2Nob2ljZWAgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBUaGUgdHdvIGNhdGVnb3JpZXMgb2YgdG9vbHMgeW91IGNhbiBwcm92aWRlIHRoZSBtb2RlbCBhcmU6XG4gICAqXG4gICAqIC0gKipCdWlsdC1pbiB0b29scyoqOiBUb29scyB0aGF0IGFyZSBwcm92aWRlZCBieSBPcGVuQUkgdGhhdCBleHRlbmQgdGhlIG1vZGVsJ3NcbiAgICogICBjYXBhYmlsaXRpZXMsIGxpa2VcbiAgICogICBbd2ViIHNlYXJjaF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvZ3VpZGVzL3Rvb2xzLXdlYi1zZWFyY2gpIG9yXG4gICAqICAgW2ZpbGUgc2VhcmNoXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvdG9vbHMtZmlsZS1zZWFyY2gpLlxuICAgKiAgIExlYXJuIG1vcmUgYWJvdXRcbiAgICogICBbYnVpbHQtaW4gdG9vbHNdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy90b29scykuXG4gICAqIC0gKipGdW5jdGlvbiBjYWxscyAoY3VzdG9tIHRvb2xzKSoqOiBGdW5jdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBieSB5b3UsIGVuYWJsaW5nXG4gICAqICAgdGhlIG1vZGVsIHRvIGNhbGwgeW91ciBvd24gY29kZS4gTGVhcm4gbW9yZSBhYm91dFxuICAgKiAgIFtmdW5jdGlvbiBjYWxsaW5nXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9ndWlkZXMvZnVuY3Rpb24tY2FsbGluZykuXG4gICAqL1xuICB0b29scz86IEFycmF5PFRvb2w+O1xuXG4gIC8qKlxuICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBzYW1wbGluZyB3aXRoIHRlbXBlcmF0dXJlLCBjYWxsZWQgbnVjbGV1cyBzYW1wbGluZywgd2hlcmUgdGhlXG4gICAqIG1vZGVsIGNvbnNpZGVycyB0aGUgcmVzdWx0cyBvZiB0aGUgdG9rZW5zIHdpdGggdG9wX3AgcHJvYmFiaWxpdHkgbWFzcy4gU28gMC4xXG4gICAqIG1lYW5zIG9ubHkgdGhlIHRva2VucyBjb21wcmlzaW5nIHRoZSB0b3AgMTAlIHByb2JhYmlsaXR5IG1hc3MgYXJlIGNvbnNpZGVyZWQuXG4gICAqXG4gICAqIFdlIGdlbmVyYWxseSByZWNvbW1lbmQgYWx0ZXJpbmcgdGhpcyBvciBgdGVtcGVyYXR1cmVgIGJ1dCBub3QgYm90aC5cbiAgICovXG4gIHRvcF9wPzogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHRydW5jYXRpb24gc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgbW9kZWwgcmVzcG9uc2UuXG4gICAqXG4gICAqIC0gYGF1dG9gOiBJZiB0aGUgY29udGV4dCBvZiB0aGlzIHJlc3BvbnNlIGFuZCBwcmV2aW91cyBvbmVzIGV4Y2VlZHMgdGhlIG1vZGVsJ3NcbiAgICogICBjb250ZXh0IHdpbmRvdyBzaXplLCB0aGUgbW9kZWwgd2lsbCB0cnVuY2F0ZSB0aGUgcmVzcG9uc2UgdG8gZml0IHRoZSBjb250ZXh0XG4gICAqICAgd2luZG93IGJ5IGRyb3BwaW5nIGlucHV0IGl0ZW1zIGluIHRoZSBtaWRkbGUgb2YgdGhlIGNvbnZlcnNhdGlvbi5cbiAgICogLSBgZGlzYWJsZWRgIChkZWZhdWx0KTogSWYgYSBtb2RlbCByZXNwb25zZSB3aWxsIGV4Y2VlZCB0aGUgY29udGV4dCB3aW5kb3cgc2l6ZVxuICAgKiAgIGZvciBhIG1vZGVsLCB0aGUgcmVxdWVzdCB3aWxsIGZhaWwgd2l0aCBhIDQwMCBlcnJvci5cbiAgICovXG4gIHRydW5jYXRpb24/OiAnYXV0bycgfCAnZGlzYWJsZWQnIHwgbnVsbDtcblxuICAvKipcbiAgICogQSB1bmlxdWUgaWRlbnRpZmllciByZXByZXNlbnRpbmcgeW91ciBlbmQtdXNlciwgd2hpY2ggY2FuIGhlbHAgT3BlbkFJIHRvIG1vbml0b3JcbiAgICogYW5kIGRldGVjdCBhYnVzZS5cbiAgICogW0xlYXJuIG1vcmVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9zYWZldHktYmVzdC1wcmFjdGljZXMjZW5kLXVzZXItaWRzKS5cbiAgICovXG4gIHVzZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUmVzcG9uc2VDcmVhdGVQYXJhbXMge1xuICBleHBvcnQgdHlwZSBSZXNwb25zZUNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyA9IFJlc3BvbnNlc0FQSS5SZXNwb25zZUNyZWF0ZVBhcmFtc05vblN0cmVhbWluZztcbiAgZXhwb3J0IHR5cGUgUmVzcG9uc2VDcmVhdGVQYXJhbXNTdHJlYW1pbmcgPSBSZXNwb25zZXNBUEkuUmVzcG9uc2VDcmVhdGVQYXJhbXNTdHJlYW1pbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VDcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcgZXh0ZW5kcyBSZXNwb25zZUNyZWF0ZVBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBtb2RlbCByZXNwb25zZSBkYXRhIHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGNsaWVudCBhcyBpdCBpc1xuICAgKiBnZW5lcmF0ZWQgdXNpbmdcbiAgICogW3NlcnZlci1zZW50IGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHMjRXZlbnRfc3RyZWFtX2Zvcm1hdCkuXG4gICAqIFNlZSB0aGVcbiAgICogW1N0cmVhbWluZyBzZWN0aW9uIGJlbG93XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3Jlc3BvbnNlcy1zdHJlYW1pbmcpXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgc3RyZWFtPzogZmFsc2UgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlQ3JlYXRlUGFyYW1zU3RyZWFtaW5nIGV4dGVuZHMgUmVzcG9uc2VDcmVhdGVQYXJhbXNCYXNlIHtcbiAgLyoqXG4gICAqIElmIHNldCB0byB0cnVlLCB0aGUgbW9kZWwgcmVzcG9uc2UgZGF0YSB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBjbGllbnQgYXMgaXQgaXNcbiAgICogZ2VuZXJhdGVkIHVzaW5nXG4gICAqIFtzZXJ2ZXItc2VudCBldmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2ZXItc2VudF9ldmVudHMvVXNpbmdfc2VydmVyLXNlbnRfZXZlbnRzI0V2ZW50X3N0cmVhbV9mb3JtYXQpLlxuICAgKiBTZWUgdGhlXG4gICAqIFtTdHJlYW1pbmcgc2VjdGlvbiBiZWxvd10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9yZXNwb25zZXMtc3RyZWFtaW5nKVxuICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHN0cmVhbTogdHJ1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVJldHJpZXZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZmllbGRzIHRvIGluY2x1ZGUgaW4gdGhlIHJlc3BvbnNlLiBTZWUgdGhlIGBpbmNsdWRlYCBwYXJhbWV0ZXIgZm9yXG4gICAqIFJlc3BvbnNlIGNyZWF0aW9uIGFib3ZlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgaW5jbHVkZT86IEFycmF5PFJlc3BvbnNlSW5jbHVkYWJsZT47XG59XG5cblJlc3BvbnNlcy5JbnB1dEl0ZW1zID0gSW5wdXRJdGVtcztcblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIFJlc3BvbnNlcyB7XG4gIGV4cG9ydCB7XG4gICAgSW5wdXRJdGVtcyBhcyBJbnB1dEl0ZW1zLFxuICAgIHR5cGUgUmVzcG9uc2VJdGVtTGlzdCBhcyBSZXNwb25zZUl0ZW1MaXN0LFxuICAgIHR5cGUgSW5wdXRJdGVtTGlzdFBhcmFtcyBhcyBJbnB1dEl0ZW1MaXN0UGFyYW1zLFxuICB9O1xufVxuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2UnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi8uLi9jb3JlJztcblxuZXhwb3J0IGNsYXNzIFBhcnRzIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogQWRkcyBhXG4gICAqIFtQYXJ0XShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3VwbG9hZHMvcGFydC1vYmplY3QpIHRvIGFuXG4gICAqIFtVcGxvYWRdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvdXBsb2Fkcy9vYmplY3QpIG9iamVjdC5cbiAgICogQSBQYXJ0IHJlcHJlc2VudHMgYSBjaHVuayBvZiBieXRlcyBmcm9tIHRoZSBmaWxlIHlvdSBhcmUgdHJ5aW5nIHRvIHVwbG9hZC5cbiAgICpcbiAgICogRWFjaCBQYXJ0IGNhbiBiZSBhdCBtb3N0IDY0IE1CLCBhbmQgeW91IGNhbiBhZGQgUGFydHMgdW50aWwgeW91IGhpdCB0aGUgVXBsb2FkXG4gICAqIG1heGltdW0gb2YgOCBHQi5cbiAgICpcbiAgICogSXQgaXMgcG9zc2libGUgdG8gYWRkIG11bHRpcGxlIFBhcnRzIGluIHBhcmFsbGVsLiBZb3UgY2FuIGRlY2lkZSB0aGUgaW50ZW5kZWRcbiAgICogb3JkZXIgb2YgdGhlIFBhcnRzIHdoZW4geW91XG4gICAqIFtjb21wbGV0ZSB0aGUgVXBsb2FkXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3VwbG9hZHMvY29tcGxldGUpLlxuICAgKi9cbiAgY3JlYXRlKFxuICAgIHVwbG9hZElkOiBzdHJpbmcsXG4gICAgYm9keTogUGFydENyZWF0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFVwbG9hZFBhcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoXG4gICAgICBgL3VwbG9hZHMvJHt1cGxvYWRJZH0vcGFydHNgLFxuICAgICAgQ29yZS5tdWx0aXBhcnRGb3JtUmVxdWVzdE9wdGlvbnMoeyBib2R5LCAuLi5vcHRpb25zIH0pLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgdXBsb2FkIFBhcnQgcmVwcmVzZW50cyBhIGNodW5rIG9mIGJ5dGVzIHdlIGNhbiBhZGQgdG8gYW4gVXBsb2FkIG9iamVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRQYXJ0IHtcbiAgLyoqXG4gICAqIFRoZSB1cGxvYWQgUGFydCB1bmlxdWUgaWRlbnRpZmllciwgd2hpY2ggY2FuIGJlIHJlZmVyZW5jZWQgaW4gQVBJIGVuZHBvaW50cy5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIFBhcnQgd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSwgd2hpY2ggaXMgYWx3YXlzIGB1cGxvYWQucGFydGAuXG4gICAqL1xuICBvYmplY3Q6ICd1cGxvYWQucGFydCc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVXBsb2FkIG9iamVjdCB0aGF0IHRoaXMgUGFydCB3YXMgYWRkZWQgdG8uXG4gICAqL1xuICB1cGxvYWRfaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJ0Q3JlYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjaHVuayBvZiBieXRlcyBmb3IgdGhpcyBQYXJ0LlxuICAgKi9cbiAgZGF0YTogQ29yZS5VcGxvYWRhYmxlO1xufVxuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgUGFydHMge1xuICBleHBvcnQgeyB0eXBlIFVwbG9hZFBhcnQgYXMgVXBsb2FkUGFydCwgdHlwZSBQYXJ0Q3JlYXRlUGFyYW1zIGFzIFBhcnRDcmVhdGVQYXJhbXMgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBGaWxlc0FQSSBmcm9tICcuLi9maWxlcyc7XG5pbXBvcnQgKiBhcyBQYXJ0c0FQSSBmcm9tICcuL3BhcnRzJztcbmltcG9ydCB7IFBhcnRDcmVhdGVQYXJhbXMsIFBhcnRzLCBVcGxvYWRQYXJ0IH0gZnJvbSAnLi9wYXJ0cyc7XG5cbmV4cG9ydCBjbGFzcyBVcGxvYWRzIGV4dGVuZHMgQVBJUmVzb3VyY2Uge1xuICBwYXJ0czogUGFydHNBUEkuUGFydHMgPSBuZXcgUGFydHNBUEkuUGFydHModGhpcy5fY2xpZW50KTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnRlcm1lZGlhdGVcbiAgICogW1VwbG9hZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS91cGxvYWRzL29iamVjdCkgb2JqZWN0XG4gICAqIHRoYXQgeW91IGNhbiBhZGRcbiAgICogW1BhcnRzXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3VwbG9hZHMvcGFydC1vYmplY3QpIHRvLlxuICAgKiBDdXJyZW50bHksIGFuIFVwbG9hZCBjYW4gYWNjZXB0IGF0IG1vc3QgOCBHQiBpbiB0b3RhbCBhbmQgZXhwaXJlcyBhZnRlciBhbiBob3VyXG4gICAqIGFmdGVyIHlvdSBjcmVhdGUgaXQuXG4gICAqXG4gICAqIE9uY2UgeW91IGNvbXBsZXRlIHRoZSBVcGxvYWQsIHdlIHdpbGwgY3JlYXRlIGFcbiAgICogW0ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMvb2JqZWN0KSBvYmplY3QgdGhhdFxuICAgKiBjb250YWlucyBhbGwgdGhlIHBhcnRzIHlvdSB1cGxvYWRlZC4gVGhpcyBGaWxlIGlzIHVzYWJsZSBpbiB0aGUgcmVzdCBvZiBvdXJcbiAgICogcGxhdGZvcm0gYXMgYSByZWd1bGFyIEZpbGUgb2JqZWN0LlxuICAgKlxuICAgKiBGb3IgY2VydGFpbiBgcHVycG9zZWAgdmFsdWVzLCB0aGUgY29ycmVjdCBgbWltZV90eXBlYCBtdXN0IGJlIHNwZWNpZmllZC4gUGxlYXNlXG4gICAqIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgKiBbc3VwcG9ydGVkIE1JTUUgdHlwZXMgZm9yIHlvdXIgdXNlIGNhc2VdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2Fzc2lzdGFudHMvdG9vbHMvZmlsZS1zZWFyY2gjc3VwcG9ydGVkLWZpbGVzKS5cbiAgICpcbiAgICogRm9yIGd1aWRhbmNlIG9uIHRoZSBwcm9wZXIgZmlsZW5hbWUgZXh0ZW5zaW9ucyBmb3IgZWFjaCBwdXJwb3NlLCBwbGVhc2UgZm9sbG93XG4gICAqIHRoZSBkb2N1bWVudGF0aW9uIG9uXG4gICAqIFtjcmVhdGluZyBhIEZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMvY3JlYXRlKS5cbiAgICovXG4gIGNyZWF0ZShib2R5OiBVcGxvYWRDcmVhdGVQYXJhbXMsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPFVwbG9hZD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdCgnL3VwbG9hZHMnLCB7IGJvZHksIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyB0aGUgVXBsb2FkLiBObyBQYXJ0cyBtYXkgYmUgYWRkZWQgYWZ0ZXIgYW4gVXBsb2FkIGlzIGNhbmNlbGxlZC5cbiAgICovXG4gIGNhbmNlbCh1cGxvYWRJZDogc3RyaW5nLCBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyk6IENvcmUuQVBJUHJvbWlzZTxVcGxvYWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoYC91cGxvYWRzLyR7dXBsb2FkSWR9L2NhbmNlbGAsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlcyB0aGVcbiAgICogW1VwbG9hZF0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS91cGxvYWRzL29iamVjdCkuXG4gICAqXG4gICAqIFdpdGhpbiB0aGUgcmV0dXJuZWQgVXBsb2FkIG9iamVjdCwgdGhlcmUgaXMgYSBuZXN0ZWRcbiAgICogW0ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMvb2JqZWN0KSBvYmplY3QgdGhhdFxuICAgKiBpcyByZWFkeSB0byB1c2UgaW4gdGhlIHJlc3Qgb2YgdGhlIHBsYXRmb3JtLlxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgdGhlIG9yZGVyIG9mIHRoZSBQYXJ0cyBieSBwYXNzaW5nIGluIGFuIG9yZGVyZWQgbGlzdCBvZiB0aGUgUGFydFxuICAgKiBJRHMuXG4gICAqXG4gICAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXBsb2FkZWQgdXBvbiBjb21wbGV0aW9uIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBieXRlc1xuICAgKiBpbml0aWFsbHkgc3BlY2lmaWVkIHdoZW4gY3JlYXRpbmcgdGhlIFVwbG9hZCBvYmplY3QuIE5vIFBhcnRzIG1heSBiZSBhZGRlZCBhZnRlclxuICAgKiBhbiBVcGxvYWQgaXMgY29tcGxldGVkLlxuICAgKi9cbiAgY29tcGxldGUoXG4gICAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgICBib2R5OiBVcGxvYWRDb21wbGV0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFVwbG9hZD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdChgL3VwbG9hZHMvJHt1cGxvYWRJZH0vY29tcGxldGVgLCB7IGJvZHksIC4uLm9wdGlvbnMgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgVXBsb2FkIG9iamVjdCBjYW4gYWNjZXB0IGJ5dGUgY2h1bmtzIGluIHRoZSBmb3JtIG9mIFBhcnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZCB7XG4gIC8qKlxuICAgKiBUaGUgVXBsb2FkIHVuaXF1ZSBpZGVudGlmaWVyLCB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBpbiBBUEkgZW5kcG9pbnRzLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGludGVuZGVkIG51bWJlciBvZiBieXRlcyB0byBiZSB1cGxvYWRlZC5cbiAgICovXG4gIGJ5dGVzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIFVwbG9hZCB3YXMgY3JlYXRlZC5cbiAgICovXG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgVXBsb2FkIHdpbGwgZXhwaXJlLlxuICAgKi9cbiAgZXhwaXJlc19hdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSB1cGxvYWRlZC5cbiAgICovXG4gIGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdHlwZSwgd2hpY2ggaXMgYWx3YXlzIFwidXBsb2FkXCIuXG4gICAqL1xuICBvYmplY3Q6ICd1cGxvYWQnO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZW5kZWQgcHVycG9zZSBvZiB0aGUgZmlsZS5cbiAgICogW1BsZWFzZSByZWZlciBoZXJlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzL29iamVjdCNmaWxlcy9vYmplY3QtcHVycG9zZSlcbiAgICogZm9yIGFjY2VwdGFibGUgdmFsdWVzLlxuICAgKi9cbiAgcHVycG9zZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBVcGxvYWQuXG4gICAqL1xuICBzdGF0dXM6ICdwZW5kaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2NhbmNlbGxlZCcgfCAnZXhwaXJlZCc7XG5cbiAgLyoqXG4gICAqIFRoZSBgRmlsZWAgb2JqZWN0IHJlcHJlc2VudHMgYSBkb2N1bWVudCB0aGF0IGhhcyBiZWVuIHVwbG9hZGVkIHRvIE9wZW5BSS5cbiAgICovXG4gIGZpbGU/OiBGaWxlc0FQSS5GaWxlT2JqZWN0IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRDcmVhdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZmlsZSB5b3UgYXJlIHVwbG9hZGluZy5cbiAgICovXG4gIGJ5dGVzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHVwbG9hZC5cbiAgICovXG4gIGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBNSU1FIHR5cGUgb2YgdGhlIGZpbGUuXG4gICAqXG4gICAqIFRoaXMgbXVzdCBmYWxsIHdpdGhpbiB0aGUgc3VwcG9ydGVkIE1JTUUgdHlwZXMgZm9yIHlvdXIgZmlsZSBwdXJwb3NlLiBTZWUgdGhlXG4gICAqIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBhc3Npc3RhbnRzIGFuZCB2aXNpb24uXG4gICAqL1xuICBtaW1lX3R5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGludGVuZGVkIHB1cnBvc2Ugb2YgdGhlIHVwbG9hZGVkIGZpbGUuXG4gICAqXG4gICAqIFNlZSB0aGVcbiAgICogW2RvY3VtZW50YXRpb24gb24gRmlsZSBwdXJwb3Nlc10oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcy9jcmVhdGUjZmlsZXMtY3JlYXRlLXB1cnBvc2UpLlxuICAgKi9cbiAgcHVycG9zZTogRmlsZXNBUEkuRmlsZVB1cnBvc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkQ29tcGxldGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG9yZGVyZWQgbGlzdCBvZiBQYXJ0IElEcy5cbiAgICovXG4gIHBhcnRfaWRzOiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uYWwgbWQ1IGNoZWNrc3VtIGZvciB0aGUgZmlsZSBjb250ZW50cyB0byB2ZXJpZnkgaWYgdGhlIGJ5dGVzIHVwbG9hZGVkXG4gICAqIG1hdGNoZXMgd2hhdCB5b3UgZXhwZWN0LlxuICAgKi9cbiAgbWQ1Pzogc3RyaW5nO1xufVxuXG5VcGxvYWRzLlBhcnRzID0gUGFydHM7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBVcGxvYWRzIHtcbiAgZXhwb3J0IHtcbiAgICB0eXBlIFVwbG9hZCBhcyBVcGxvYWQsXG4gICAgdHlwZSBVcGxvYWRDcmVhdGVQYXJhbXMgYXMgVXBsb2FkQ3JlYXRlUGFyYW1zLFxuICAgIHR5cGUgVXBsb2FkQ29tcGxldGVQYXJhbXMgYXMgVXBsb2FkQ29tcGxldGVQYXJhbXMsXG4gIH07XG5cbiAgZXhwb3J0IHsgUGFydHMgYXMgUGFydHMsIHR5cGUgVXBsb2FkUGFydCBhcyBVcGxvYWRQYXJ0LCB0eXBlIFBhcnRDcmVhdGVQYXJhbXMgYXMgUGFydENyZWF0ZVBhcmFtcyB9O1xufVxuIiwgIi8qKlxuICogTGlrZSBgUHJvbWlzZS5hbGxTZXR0bGVkKClgIGJ1dCB0aHJvd3MgYW4gZXJyb3IgaWYgYW55IHByb21pc2VzIGFyZSByZWplY3RlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFsbFNldHRsZWRXaXRoVGhyb3cgPSBhc3luYyA8Uj4ocHJvbWlzZXM6IFByb21pc2U8Uj5bXSk6IFByb21pc2U8UltdPiA9PiB7XG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuICBjb25zdCByZWplY3RlZCA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpOiByZXN1bHQgaXMgUHJvbWlzZVJlamVjdGVkUmVzdWx0ID0+IHJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpO1xuICBpZiAocmVqZWN0ZWQubGVuZ3RoKSB7XG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVqZWN0ZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVzdWx0LnJlYXNvbik7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3JlamVjdGVkLmxlbmd0aH0gcHJvbWlzZShzKSBmYWlsZWQgLSBzZWUgdGhlIGFib3ZlIGVycm9yc2ApO1xuICB9XG5cbiAgLy8gTm90ZTogVFMgd2FzIGNvbXBsYWluaW5nIGFib3V0IHVzaW5nIGAuZmlsdGVyKCkubWFwKClgIGhlcmUgZm9yIHNvbWUgcmVhc29uXG4gIGNvbnN0IHZhbHVlczogUltdID0gW107XG4gIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59O1xuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgc2xlZXAsIFVwbG9hZGFibGUsIGlzUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCAqIGFzIENvcmUgZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgKiBhcyBWZWN0b3JTdG9yZXNBUEkgZnJvbSAnLi92ZWN0b3Itc3RvcmVzJztcbmltcG9ydCB7IEN1cnNvclBhZ2UsIHR5cGUgQ3Vyc29yUGFnZVBhcmFtcywgUGFnZSB9IGZyb20gJy4uLy4uL3BhZ2luYXRpb24nO1xuXG5leHBvcnQgY2xhc3MgRmlsZXMgZXh0ZW5kcyBBUElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSB2ZWN0b3Igc3RvcmUgZmlsZSBieSBhdHRhY2hpbmcgYVxuICAgKiBbRmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgdG8gYVxuICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KS5cbiAgICovXG4gIGNyZWF0ZShcbiAgICB2ZWN0b3JTdG9yZUlkOiBzdHJpbmcsXG4gICAgYm9keTogRmlsZUNyZWF0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFZlY3RvclN0b3JlRmlsZT4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdChgL3ZlY3Rvcl9zdG9yZXMvJHt2ZWN0b3JTdG9yZUlkfS9maWxlc2AsIHtcbiAgICAgIGJvZHksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSB2ZWN0b3Igc3RvcmUgZmlsZS5cbiAgICovXG4gIHJldHJpZXZlKFxuICAgIHZlY3RvclN0b3JlSWQ6IHN0cmluZyxcbiAgICBmaWxlSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFZlY3RvclN0b3JlRmlsZT4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0KGAvdmVjdG9yX3N0b3Jlcy8ke3ZlY3RvclN0b3JlSWR9L2ZpbGVzLyR7ZmlsZUlkfWAsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhdHRyaWJ1dGVzIG9uIGEgdmVjdG9yIHN0b3JlIGZpbGUuXG4gICAqL1xuICB1cGRhdGUoXG4gICAgdmVjdG9yU3RvcmVJZDogc3RyaW5nLFxuICAgIGZpbGVJZDogc3RyaW5nLFxuICAgIGJvZHk6IEZpbGVVcGRhdGVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxWZWN0b3JTdG9yZUZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LnBvc3QoYC92ZWN0b3Jfc3RvcmVzLyR7dmVjdG9yU3RvcmVJZH0vZmlsZXMvJHtmaWxlSWR9YCwge1xuICAgICAgYm9keSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHZlY3RvciBzdG9yZSBmaWxlcy5cbiAgICovXG4gIGxpc3QoXG4gICAgdmVjdG9yU3RvcmVJZDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogRmlsZUxpc3RQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8VmVjdG9yU3RvcmVGaWxlc1BhZ2UsIFZlY3RvclN0b3JlRmlsZT47XG4gIGxpc3QoXG4gICAgdmVjdG9yU3RvcmVJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPFZlY3RvclN0b3JlRmlsZXNQYWdlLCBWZWN0b3JTdG9yZUZpbGU+O1xuICBsaXN0KFxuICAgIHZlY3RvclN0b3JlSWQ6IHN0cmluZyxcbiAgICBxdWVyeTogRmlsZUxpc3RQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8VmVjdG9yU3RvcmVGaWxlc1BhZ2UsIFZlY3RvclN0b3JlRmlsZT4ge1xuICAgIGlmIChpc1JlcXVlc3RPcHRpb25zKHF1ZXJ5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdCh2ZWN0b3JTdG9yZUlkLCB7fSwgcXVlcnkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldEFQSUxpc3QoYC92ZWN0b3Jfc3RvcmVzLyR7dmVjdG9yU3RvcmVJZH0vZmlsZXNgLCBWZWN0b3JTdG9yZUZpbGVzUGFnZSwge1xuICAgICAgcXVlcnksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSB2ZWN0b3Igc3RvcmUgZmlsZS4gVGhpcyB3aWxsIHJlbW92ZSB0aGUgZmlsZSBmcm9tIHRoZSB2ZWN0b3Igc3RvcmUgYnV0XG4gICAqIHRoZSBmaWxlIGl0c2VsZiB3aWxsIG5vdCBiZSBkZWxldGVkLiBUbyBkZWxldGUgdGhlIGZpbGUsIHVzZSB0aGVcbiAgICogW2RlbGV0ZSBmaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzL2RlbGV0ZSlcbiAgICogZW5kcG9pbnQuXG4gICAqL1xuICBkZWwoXG4gICAgdmVjdG9yU3RvcmVJZDogc3RyaW5nLFxuICAgIGZpbGVJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLkFQSVByb21pc2U8VmVjdG9yU3RvcmVGaWxlRGVsZXRlZD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZGVsZXRlKGAvdmVjdG9yX3N0b3Jlcy8ke3ZlY3RvclN0b3JlSWR9L2ZpbGVzLyR7ZmlsZUlkfWAsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIGZpbGUgdG8gdGhlIGdpdmVuIHZlY3RvciBzdG9yZSBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgcHJvY2Vzc2VkLlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQW5kUG9sbChcbiAgICB2ZWN0b3JTdG9yZUlkOiBzdHJpbmcsXG4gICAgYm9keTogRmlsZUNyZWF0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyAmIHsgcG9sbEludGVydmFsTXM/OiBudW1iZXIgfSxcbiAgKTogUHJvbWlzZTxWZWN0b3JTdG9yZUZpbGU+IHtcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy5jcmVhdGUodmVjdG9yU3RvcmVJZCwgYm9keSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucG9sbCh2ZWN0b3JTdG9yZUlkLCBmaWxlLmlkLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0IGZvciB0aGUgdmVjdG9yIHN0b3JlIGZpbGUgdG8gZmluaXNoIHByb2Nlc3NpbmcuXG4gICAqXG4gICAqIE5vdGU6IHRoaXMgd2lsbCByZXR1cm4gZXZlbiBpZiB0aGUgZmlsZSBmYWlsZWQgdG8gcHJvY2VzcywgeW91IG5lZWQgdG8gY2hlY2tcbiAgICogZmlsZS5sYXN0X2Vycm9yIGFuZCBmaWxlLnN0YXR1cyB0byBoYW5kbGUgdGhlc2UgY2FzZXNcbiAgICovXG4gIGFzeW5jIHBvbGwoXG4gICAgdmVjdG9yU3RvcmVJZDogc3RyaW5nLFxuICAgIGZpbGVJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zICYgeyBwb2xsSW50ZXJ2YWxNcz86IG51bWJlciB9LFxuICApOiBQcm9taXNlPFZlY3RvclN0b3JlRmlsZT4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7IC4uLm9wdGlvbnM/LmhlYWRlcnMsICdYLVN0YWlubGVzcy1Qb2xsLUhlbHBlcic6ICd0cnVlJyB9O1xuICAgIGlmIChvcHRpb25zPy5wb2xsSW50ZXJ2YWxNcykge1xuICAgICAgaGVhZGVyc1snWC1TdGFpbmxlc3MtQ3VzdG9tLVBvbGwtSW50ZXJ2YWwnXSA9IG9wdGlvbnMucG9sbEludGVydmFsTXMudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGZpbGVSZXNwb25zZSA9IGF3YWl0IHRoaXMucmV0cmlldmUodmVjdG9yU3RvcmVJZCwgZmlsZUlkLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KS53aXRoUmVzcG9uc2UoKTtcblxuICAgICAgY29uc3QgZmlsZSA9IGZpbGVSZXNwb25zZS5kYXRhO1xuXG4gICAgICBzd2l0Y2ggKGZpbGUuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgJ2luX3Byb2dyZXNzJzpcbiAgICAgICAgICBsZXQgc2xlZXBJbnRlcnZhbCA9IDUwMDA7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucz8ucG9sbEludGVydmFsTXMpIHtcbiAgICAgICAgICAgIHNsZWVwSW50ZXJ2YWwgPSBvcHRpb25zLnBvbGxJbnRlcnZhbE1zO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJJbnRlcnZhbCA9IGZpbGVSZXNwb25zZS5yZXNwb25zZS5oZWFkZXJzLmdldCgnb3BlbmFpLXBvbGwtYWZ0ZXItbXMnKTtcbiAgICAgICAgICAgIGlmIChoZWFkZXJJbnRlcnZhbCkge1xuICAgICAgICAgICAgICBjb25zdCBoZWFkZXJJbnRlcnZhbE1zID0gcGFyc2VJbnQoaGVhZGVySW50ZXJ2YWwpO1xuICAgICAgICAgICAgICBpZiAoIWlzTmFOKGhlYWRlckludGVydmFsTXMpKSB7XG4gICAgICAgICAgICAgICAgc2xlZXBJbnRlcnZhbCA9IGhlYWRlckludGVydmFsTXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgc2xlZXAoc2xlZXBJbnRlcnZhbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZCBhIGZpbGUgdG8gdGhlIGBmaWxlc2AgQVBJIGFuZCB0aGVuIGF0dGFjaCBpdCB0byB0aGUgZ2l2ZW4gdmVjdG9yIHN0b3JlLlxuICAgKlxuICAgKiBOb3RlIHRoZSBmaWxlIHdpbGwgYmUgYXN5bmNocm9ub3VzbHkgcHJvY2Vzc2VkICh5b3UgY2FuIHVzZSB0aGUgYWx0ZXJuYXRpdmVcbiAgICogcG9sbGluZyBoZWxwZXIgbWV0aG9kIHRvIHdhaXQgZm9yIHByb2Nlc3NpbmcgdG8gY29tcGxldGUpLlxuICAgKi9cbiAgYXN5bmMgdXBsb2FkKFxuICAgIHZlY3RvclN0b3JlSWQ6IHN0cmluZyxcbiAgICBmaWxlOiBVcGxvYWRhYmxlLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPFZlY3RvclN0b3JlRmlsZT4ge1xuICAgIGNvbnN0IGZpbGVJbmZvID0gYXdhaXQgdGhpcy5fY2xpZW50LmZpbGVzLmNyZWF0ZSh7IGZpbGU6IGZpbGUsIHB1cnBvc2U6ICdhc3Npc3RhbnRzJyB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGUodmVjdG9yU3RvcmVJZCwgeyBmaWxlX2lkOiBmaWxlSW5mby5pZCB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBmaWxlIHRvIGEgdmVjdG9yIHN0b3JlIGFuZCBwb2xsIHVudGlsIHByb2Nlc3NpbmcgaXMgY29tcGxldGUuXG4gICAqL1xuICBhc3luYyB1cGxvYWRBbmRQb2xsKFxuICAgIHZlY3RvclN0b3JlSWQ6IHN0cmluZyxcbiAgICBmaWxlOiBVcGxvYWRhYmxlLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zICYgeyBwb2xsSW50ZXJ2YWxNcz86IG51bWJlciB9LFxuICApOiBQcm9taXNlPFZlY3RvclN0b3JlRmlsZT4ge1xuICAgIGNvbnN0IGZpbGVJbmZvID0gYXdhaXQgdGhpcy51cGxvYWQodmVjdG9yU3RvcmVJZCwgZmlsZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucG9sbCh2ZWN0b3JTdG9yZUlkLCBmaWxlSW5mby5pZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHBhcnNlZCBjb250ZW50cyBvZiBhIHZlY3RvciBzdG9yZSBmaWxlLlxuICAgKi9cbiAgY29udGVudChcbiAgICB2ZWN0b3JTdG9yZUlkOiBzdHJpbmcsXG4gICAgZmlsZUlkOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8RmlsZUNvbnRlbnRSZXNwb25zZXNQYWdlLCBGaWxlQ29udGVudFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRBUElMaXN0KFxuICAgICAgYC92ZWN0b3Jfc3RvcmVzLyR7dmVjdG9yU3RvcmVJZH0vZmlsZXMvJHtmaWxlSWR9L2NvbnRlbnRgLFxuICAgICAgRmlsZUNvbnRlbnRSZXNwb25zZXNQYWdlLFxuICAgICAgeyAuLi5vcHRpb25zLCBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9IH0sXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmVjdG9yU3RvcmVGaWxlc1BhZ2UgZXh0ZW5kcyBDdXJzb3JQYWdlPFZlY3RvclN0b3JlRmlsZT4ge31cblxuLyoqXG4gKiBOb3RlOiBubyBwYWdpbmF0aW9uIGFjdHVhbGx5IG9jY3VycyB5ZXQsIHRoaXMgaXMgZm9yIGZvcndhcmRzLWNvbXBhdGliaWxpdHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBGaWxlQ29udGVudFJlc3BvbnNlc1BhZ2UgZXh0ZW5kcyBQYWdlPEZpbGVDb250ZW50UmVzcG9uc2U+IHt9XG5cbi8qKlxuICogQSBsaXN0IG9mIGZpbGVzIGF0dGFjaGVkIHRvIGEgdmVjdG9yIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvclN0b3JlRmlsZSB7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciwgd2hpY2ggY2FuIGJlIHJlZmVyZW5jZWQgaW4gQVBJIGVuZHBvaW50cy5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVbml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykgZm9yIHdoZW4gdGhlIHZlY3RvciBzdG9yZSBmaWxlIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgY3JlYXRlZF9hdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCBlcnJvciBhc3NvY2lhdGVkIHdpdGggdGhpcyB2ZWN0b3Igc3RvcmUgZmlsZS4gV2lsbCBiZSBgbnVsbGAgaWYgdGhlcmVcbiAgICogYXJlIG5vIGVycm9ycy5cbiAgICovXG4gIGxhc3RfZXJyb3I6IFZlY3RvclN0b3JlRmlsZS5MYXN0RXJyb3IgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHR5cGUsIHdoaWNoIGlzIGFsd2F5cyBgdmVjdG9yX3N0b3JlLmZpbGVgLlxuICAgKi9cbiAgb2JqZWN0OiAndmVjdG9yX3N0b3JlLmZpbGUnO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSB2ZWN0b3Igc3RvcmUgZmlsZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBgaW5fcHJvZ3Jlc3NgLFxuICAgKiBgY29tcGxldGVkYCwgYGNhbmNlbGxlZGAsIG9yIGBmYWlsZWRgLiBUaGUgc3RhdHVzIGBjb21wbGV0ZWRgIGluZGljYXRlcyB0aGF0IHRoZVxuICAgKiB2ZWN0b3Igc3RvcmUgZmlsZSBpcyByZWFkeSBmb3IgdXNlLlxuICAgKi9cbiAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnIHwgJ2NvbXBsZXRlZCcgfCAnY2FuY2VsbGVkJyB8ICdmYWlsZWQnO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgdmVjdG9yIHN0b3JlIHVzYWdlIGluIGJ5dGVzLiBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlXG4gICAqIG9yaWdpbmFsIGZpbGUgc2l6ZS5cbiAgICovXG4gIHVzYWdlX2J5dGVzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGVcbiAgICogW3ZlY3RvciBzdG9yZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS92ZWN0b3Itc3RvcmVzL29iamVjdClcbiAgICogdGhhdCB0aGUgW0ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIGlzXG4gICAqIGF0dGFjaGVkIHRvLlxuICAgKi9cbiAgdmVjdG9yX3N0b3JlX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW1cbiAgICogbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyXG4gICAqIGNoYXJhY3RlcnMsIGJvb2xlYW5zLCBvciBudW1iZXJzLlxuICAgKi9cbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHVzZWQgdG8gY2h1bmsgdGhlIGZpbGUuXG4gICAqL1xuICBjaHVua2luZ19zdHJhdGVneT86IFZlY3RvclN0b3Jlc0FQSS5GaWxlQ2h1bmtpbmdTdHJhdGVneTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBWZWN0b3JTdG9yZUZpbGUge1xuICAvKipcbiAgICogVGhlIGxhc3QgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmVjdG9yIHN0b3JlIGZpbGUuIFdpbGwgYmUgYG51bGxgIGlmIHRoZXJlXG4gICAqIGFyZSBubyBlcnJvcnMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIExhc3RFcnJvciB7XG4gICAgLyoqXG4gICAgICogT25lIG9mIGBzZXJ2ZXJfZXJyb3JgIG9yIGByYXRlX2xpbWl0X2V4Y2VlZGVkYC5cbiAgICAgKi9cbiAgICBjb2RlOiAnc2VydmVyX2Vycm9yJyB8ICd1bnN1cHBvcnRlZF9maWxlJyB8ICdpbnZhbGlkX2ZpbGUnO1xuXG4gICAgLyoqXG4gICAgICogQSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IuXG4gICAgICovXG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yU3RvcmVGaWxlRGVsZXRlZCB7XG4gIGlkOiBzdHJpbmc7XG5cbiAgZGVsZXRlZDogYm9vbGVhbjtcblxuICBvYmplY3Q6ICd2ZWN0b3Jfc3RvcmUuZmlsZS5kZWxldGVkJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlQ29udGVudFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGNvbnRlbnRcbiAgICovXG4gIHRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHR5cGUgKGN1cnJlbnRseSBvbmx5IGBcInRleHRcImApXG4gICAqL1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDcmVhdGVQYXJhbXMge1xuICAvKipcbiAgICogQSBbRmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgSUQgdGhhdCB0aGVcbiAgICogdmVjdG9yIHN0b3JlIHNob3VsZCB1c2UuIFVzZWZ1bCBmb3IgdG9vbHMgbGlrZSBgZmlsZV9zZWFyY2hgIHRoYXQgY2FuIGFjY2Vzc1xuICAgKiBmaWxlcy5cbiAgICovXG4gIGZpbGVfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kXG4gICAqIHF1ZXJ5aW5nIGZvciBvYmplY3RzIHZpYSBBUEkgb3IgdGhlIGRhc2hib2FyZC4gS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bVxuICAgKiBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTJcbiAgICogY2hhcmFjdGVycywgYm9vbGVhbnMsIG9yIG51bWJlcnMuXG4gICAqL1xuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgY2h1bmtpbmcgc3RyYXRlZ3kgdXNlZCB0byBjaHVuayB0aGUgZmlsZShzKS4gSWYgbm90IHNldCwgd2lsbCB1c2UgdGhlIGBhdXRvYFxuICAgKiBzdHJhdGVneS4gT25seSBhcHBsaWNhYmxlIGlmIGBmaWxlX2lkc2AgaXMgbm9uLWVtcHR5LlxuICAgKi9cbiAgY2h1bmtpbmdfc3RyYXRlZ3k/OiBWZWN0b3JTdG9yZXNBUEkuRmlsZUNodW5raW5nU3RyYXRlZ3lQYXJhbTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlVXBkYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW1cbiAgICogbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyXG4gICAqIGNoYXJhY3RlcnMsIGJvb2xlYW5zLCBvciBudW1iZXJzLlxuICAgKi9cbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVMaXN0UGFyYW1zIGV4dGVuZHMgQ3Vyc29yUGFnZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGN1cnNvciBmb3IgdXNlIGluIHBhZ2luYXRpb24uIGBiZWZvcmVgIGlzIGFuIG9iamVjdCBJRCB0aGF0IGRlZmluZXMgeW91ciBwbGFjZVxuICAgKiBpbiB0aGUgbGlzdC4gRm9yIGluc3RhbmNlLCBpZiB5b3UgbWFrZSBhIGxpc3QgcmVxdWVzdCBhbmQgcmVjZWl2ZSAxMDAgb2JqZWN0cyxcbiAgICogc3RhcnRpbmcgd2l0aCBvYmpfZm9vLCB5b3VyIHN1YnNlcXVlbnQgY2FsbCBjYW4gaW5jbHVkZSBiZWZvcmU9b2JqX2ZvbyBpbiBvcmRlclxuICAgKiB0byBmZXRjaCB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgbGlzdC5cbiAgICovXG4gIGJlZm9yZT86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGZpbGUgc3RhdHVzLiBPbmUgb2YgYGluX3Byb2dyZXNzYCwgYGNvbXBsZXRlZGAsIGBmYWlsZWRgLCBgY2FuY2VsbGVkYC5cbiAgICovXG4gIGZpbHRlcj86ICdpbl9wcm9ncmVzcycgfCAnY29tcGxldGVkJyB8ICdmYWlsZWQnIHwgJ2NhbmNlbGxlZCc7XG5cbiAgLyoqXG4gICAqIFNvcnQgb3JkZXIgYnkgdGhlIGBjcmVhdGVkX2F0YCB0aW1lc3RhbXAgb2YgdGhlIG9iamVjdHMuIGBhc2NgIGZvciBhc2NlbmRpbmdcbiAgICogb3JkZXIgYW5kIGBkZXNjYCBmb3IgZGVzY2VuZGluZyBvcmRlci5cbiAgICovXG4gIG9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbkZpbGVzLlZlY3RvclN0b3JlRmlsZXNQYWdlID0gVmVjdG9yU3RvcmVGaWxlc1BhZ2U7XG5GaWxlcy5GaWxlQ29udGVudFJlc3BvbnNlc1BhZ2UgPSBGaWxlQ29udGVudFJlc3BvbnNlc1BhZ2U7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBGaWxlcyB7XG4gIGV4cG9ydCB7XG4gICAgdHlwZSBWZWN0b3JTdG9yZUZpbGUgYXMgVmVjdG9yU3RvcmVGaWxlLFxuICAgIHR5cGUgVmVjdG9yU3RvcmVGaWxlRGVsZXRlZCBhcyBWZWN0b3JTdG9yZUZpbGVEZWxldGVkLFxuICAgIHR5cGUgRmlsZUNvbnRlbnRSZXNwb25zZSBhcyBGaWxlQ29udGVudFJlc3BvbnNlLFxuICAgIFZlY3RvclN0b3JlRmlsZXNQYWdlIGFzIFZlY3RvclN0b3JlRmlsZXNQYWdlLFxuICAgIEZpbGVDb250ZW50UmVzcG9uc2VzUGFnZSBhcyBGaWxlQ29udGVudFJlc3BvbnNlc1BhZ2UsXG4gICAgdHlwZSBGaWxlQ3JlYXRlUGFyYW1zIGFzIEZpbGVDcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBGaWxlVXBkYXRlUGFyYW1zIGFzIEZpbGVVcGRhdGVQYXJhbXMsXG4gICAgdHlwZSBGaWxlTGlzdFBhcmFtcyBhcyBGaWxlTGlzdFBhcmFtcyxcbiAgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyBBUElSZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlJztcbmltcG9ydCB7IGlzUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBVcGxvYWRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBhbGxTZXR0bGVkV2l0aFRocm93IH0gZnJvbSAnLi4vLi4vbGliL1V0aWwnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCAqIGFzIEZpbGVzQVBJIGZyb20gJy4vZmlsZXMnO1xuaW1wb3J0IHsgVmVjdG9yU3RvcmVGaWxlc1BhZ2UgfSBmcm9tICcuL2ZpbGVzJztcbmltcG9ydCAqIGFzIFZlY3RvclN0b3Jlc0FQSSBmcm9tICcuL3ZlY3Rvci1zdG9yZXMnO1xuaW1wb3J0IHsgdHlwZSBDdXJzb3JQYWdlUGFyYW1zIH0gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBGaWxlQmF0Y2hlcyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHZlY3RvciBzdG9yZSBmaWxlIGJhdGNoLlxuICAgKi9cbiAgY3JlYXRlKFxuICAgIHZlY3RvclN0b3JlSWQ6IHN0cmluZyxcbiAgICBib2R5OiBGaWxlQmF0Y2hDcmVhdGVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxWZWN0b3JTdG9yZUZpbGVCYXRjaD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdChgL3ZlY3Rvcl9zdG9yZXMvJHt2ZWN0b3JTdG9yZUlkfS9maWxlX2JhdGNoZXNgLCB7XG4gICAgICBib2R5LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgdmVjdG9yIHN0b3JlIGZpbGUgYmF0Y2guXG4gICAqL1xuICByZXRyaWV2ZShcbiAgICB2ZWN0b3JTdG9yZUlkOiBzdHJpbmcsXG4gICAgYmF0Y2hJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLkFQSVByb21pc2U8VmVjdG9yU3RvcmVGaWxlQmF0Y2g+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldChgL3ZlY3Rvcl9zdG9yZXMvJHt2ZWN0b3JTdG9yZUlkfS9maWxlX2JhdGNoZXMvJHtiYXRjaElkfWAsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBhIHZlY3RvciBzdG9yZSBmaWxlIGJhdGNoLiBUaGlzIGF0dGVtcHRzIHRvIGNhbmNlbCB0aGUgcHJvY2Vzc2luZyBvZlxuICAgKiBmaWxlcyBpbiB0aGlzIGJhdGNoIGFzIHNvb24gYXMgcG9zc2libGUuXG4gICAqL1xuICBjYW5jZWwoXG4gICAgdmVjdG9yU3RvcmVJZDogc3RyaW5nLFxuICAgIGJhdGNoSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5BUElQcm9taXNlPFZlY3RvclN0b3JlRmlsZUJhdGNoPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KGAvdmVjdG9yX3N0b3Jlcy8ke3ZlY3RvclN0b3JlSWR9L2ZpbGVfYmF0Y2hlcy8ke2JhdGNoSWR9L2NhbmNlbGAsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHZlY3RvciBzdG9yZSBiYXRjaCBhbmQgcG9sbCB1bnRpbCBhbGwgZmlsZXMgaGF2ZSBiZWVuIHByb2Nlc3NlZC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUFuZFBvbGwoXG4gICAgdmVjdG9yU3RvcmVJZDogc3RyaW5nLFxuICAgIGJvZHk6IEZpbGVCYXRjaENyZWF0ZVBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyAmIHsgcG9sbEludGVydmFsTXM/OiBudW1iZXIgfSxcbiAgKTogUHJvbWlzZTxWZWN0b3JTdG9yZUZpbGVCYXRjaD4ge1xuICAgIGNvbnN0IGJhdGNoID0gYXdhaXQgdGhpcy5jcmVhdGUodmVjdG9yU3RvcmVJZCwgYm9keSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucG9sbCh2ZWN0b3JTdG9yZUlkLCBiYXRjaC5pZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgdmVjdG9yIHN0b3JlIGZpbGVzIGluIGEgYmF0Y2guXG4gICAqL1xuICBsaXN0RmlsZXMoXG4gICAgdmVjdG9yU3RvcmVJZDogc3RyaW5nLFxuICAgIGJhdGNoSWQ6IHN0cmluZyxcbiAgICBxdWVyeT86IEZpbGVCYXRjaExpc3RGaWxlc1BhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxWZWN0b3JTdG9yZUZpbGVzUGFnZSwgRmlsZXNBUEkuVmVjdG9yU3RvcmVGaWxlPjtcbiAgbGlzdEZpbGVzKFxuICAgIHZlY3RvclN0b3JlSWQ6IHN0cmluZyxcbiAgICBiYXRjaElkOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8VmVjdG9yU3RvcmVGaWxlc1BhZ2UsIEZpbGVzQVBJLlZlY3RvclN0b3JlRmlsZT47XG4gIGxpc3RGaWxlcyhcbiAgICB2ZWN0b3JTdG9yZUlkOiBzdHJpbmcsXG4gICAgYmF0Y2hJZDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBGaWxlQmF0Y2hMaXN0RmlsZXNQYXJhbXMgfCBDb3JlLlJlcXVlc3RPcHRpb25zID0ge30sXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8VmVjdG9yU3RvcmVGaWxlc1BhZ2UsIEZpbGVzQVBJLlZlY3RvclN0b3JlRmlsZT4ge1xuICAgIGlmIChpc1JlcXVlc3RPcHRpb25zKHF1ZXJ5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdEZpbGVzKHZlY3RvclN0b3JlSWQsIGJhdGNoSWQsIHt9LCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdChcbiAgICAgIGAvdmVjdG9yX3N0b3Jlcy8ke3ZlY3RvclN0b3JlSWR9L2ZpbGVfYmF0Y2hlcy8ke2JhdGNoSWR9L2ZpbGVzYCxcbiAgICAgIFZlY3RvclN0b3JlRmlsZXNQYWdlLFxuICAgICAgeyBxdWVyeSwgLi4ub3B0aW9ucywgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2FpdCBmb3IgdGhlIGdpdmVuIGZpbGUgYmF0Y2ggdG8gYmUgcHJvY2Vzc2VkLlxuICAgKlxuICAgKiBOb3RlOiB0aGlzIHdpbGwgcmV0dXJuIGV2ZW4gaWYgb25lIG9mIHRoZSBmaWxlcyBmYWlsZWQgdG8gcHJvY2VzcywgeW91IG5lZWQgdG9cbiAgICogY2hlY2sgYmF0Y2guZmlsZV9jb3VudHMuZmFpbGVkX2NvdW50IHRvIGhhbmRsZSB0aGlzIGNhc2UuXG4gICAqL1xuICBhc3luYyBwb2xsKFxuICAgIHZlY3RvclN0b3JlSWQ6IHN0cmluZyxcbiAgICBiYXRjaElkOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMgJiB7IHBvbGxJbnRlcnZhbE1zPzogbnVtYmVyIH0sXG4gICk6IFByb21pc2U8VmVjdG9yU3RvcmVGaWxlQmF0Y2g+IHtcbiAgICBjb25zdCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0geyAuLi5vcHRpb25zPy5oZWFkZXJzLCAnWC1TdGFpbmxlc3MtUG9sbC1IZWxwZXInOiAndHJ1ZScgfTtcbiAgICBpZiAob3B0aW9ucz8ucG9sbEludGVydmFsTXMpIHtcbiAgICAgIGhlYWRlcnNbJ1gtU3RhaW5sZXNzLUN1c3RvbS1Qb2xsLUludGVydmFsJ10gPSBvcHRpb25zLnBvbGxJbnRlcnZhbE1zLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHsgZGF0YTogYmF0Y2gsIHJlc3BvbnNlIH0gPSBhd2FpdCB0aGlzLnJldHJpZXZlKHZlY3RvclN0b3JlSWQsIGJhdGNoSWQsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pLndpdGhSZXNwb25zZSgpO1xuXG4gICAgICBzd2l0Y2ggKGJhdGNoLnN0YXR1cykge1xuICAgICAgICBjYXNlICdpbl9wcm9ncmVzcyc6XG4gICAgICAgICAgbGV0IHNsZWVwSW50ZXJ2YWwgPSA1MDAwO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnM/LnBvbGxJbnRlcnZhbE1zKSB7XG4gICAgICAgICAgICBzbGVlcEludGVydmFsID0gb3B0aW9ucy5wb2xsSW50ZXJ2YWxNcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVySW50ZXJ2YWwgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnb3BlbmFpLXBvbGwtYWZ0ZXItbXMnKTtcbiAgICAgICAgICAgIGlmIChoZWFkZXJJbnRlcnZhbCkge1xuICAgICAgICAgICAgICBjb25zdCBoZWFkZXJJbnRlcnZhbE1zID0gcGFyc2VJbnQoaGVhZGVySW50ZXJ2YWwpO1xuICAgICAgICAgICAgICBpZiAoIWlzTmFOKGhlYWRlckludGVydmFsTXMpKSB7XG4gICAgICAgICAgICAgICAgc2xlZXBJbnRlcnZhbCA9IGhlYWRlckludGVydmFsTXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgc2xlZXAoc2xlZXBJbnRlcnZhbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIGNhc2UgJ2NhbmNlbGxlZCc6XG4gICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgcmV0dXJuIGJhdGNoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIHRoZSBnaXZlbiBmaWxlcyBjb25jdXJyZW50bHkgYW5kIHRoZW4gY3JlYXRlcyBhIHZlY3RvciBzdG9yZSBmaWxlIGJhdGNoLlxuICAgKlxuICAgKiBUaGUgY29uY3VycmVuY3kgbGltaXQgaXMgY29uZmlndXJhYmxlIHVzaW5nIHRoZSBgbWF4Q29uY3VycmVuY3lgIHBhcmFtZXRlci5cbiAgICovXG4gIGFzeW5jIHVwbG9hZEFuZFBvbGwoXG4gICAgdmVjdG9yU3RvcmVJZDogc3RyaW5nLFxuICAgIHsgZmlsZXMsIGZpbGVJZHMgPSBbXSB9OiB7IGZpbGVzOiBVcGxvYWRhYmxlW107IGZpbGVJZHM/OiBzdHJpbmdbXSB9LFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zICYgeyBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjsgbWF4Q29uY3VycmVuY3k/OiBudW1iZXIgfSxcbiAgKTogUHJvbWlzZTxWZWN0b3JTdG9yZUZpbGVCYXRjaD4ge1xuICAgIGlmIChmaWxlcyA9PSBudWxsIHx8IGZpbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBObyBcXGBmaWxlc1xcYCBwcm92aWRlZCB0byBwcm9jZXNzLiBJZiB5b3UndmUgYWxyZWFkeSB1cGxvYWRlZCBmaWxlcyB5b3Ugc2hvdWxkIHVzZSBcXGAuY3JlYXRlQW5kUG9sbCgpXFxgIGluc3RlYWRgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmVkQ29uY3VycmVuY3kgPSBvcHRpb25zPy5tYXhDb25jdXJyZW5jeSA/PyA1O1xuXG4gICAgLy8gV2UgY2FwIHRoZSBudW1iZXIgb2Ygd29ya2VycyBhdCB0aGUgbnVtYmVyIG9mIGZpbGVzIChzbyB3ZSBkb24ndCBzdGFydCBhbnkgdW5uZWNlc3Nhcnkgd29ya2VycylcbiAgICBjb25zdCBjb25jdXJyZW5jeUxpbWl0ID0gTWF0aC5taW4oY29uZmlndXJlZENvbmN1cnJlbmN5LCBmaWxlcy5sZW5ndGgpO1xuXG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5fY2xpZW50O1xuICAgIGNvbnN0IGZpbGVJdGVyYXRvciA9IGZpbGVzLnZhbHVlcygpO1xuICAgIGNvbnN0IGFsbEZpbGVJZHM6IHN0cmluZ1tdID0gWy4uLmZpbGVJZHNdO1xuXG4gICAgLy8gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoaXMgZGVzaWduLiBUaGUgbGlicmFyaWVzIGRvbid0IGFjY29tbW9kYXRlIG91ciBlbnZpcm9ubWVudCBsaW1pdHMuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDA2Mzk0MzIvd2hhdC1pcy10aGUtYmVzdC13YXktdG8tbGltaXQtY29uY3VycmVuY3ktd2hlbi11c2luZy1lczZzLXByb21pc2UtYWxsXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVzKGl0ZXJhdG9yOiBJdGVyYWJsZUl0ZXJhdG9yPFVwbG9hZGFibGU+KSB7XG4gICAgICBmb3IgKGxldCBpdGVtIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgIGNvbnN0IGZpbGVPYmogPSBhd2FpdCBjbGllbnQuZmlsZXMuY3JlYXRlKHsgZmlsZTogaXRlbSwgcHVycG9zZTogJ2Fzc2lzdGFudHMnIH0sIG9wdGlvbnMpO1xuICAgICAgICBhbGxGaWxlSWRzLnB1c2goZmlsZU9iai5pZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgd29ya2VycyB0byBwcm9jZXNzIHJlc3VsdHNcbiAgICBjb25zdCB3b3JrZXJzID0gQXJyYXkoY29uY3VycmVuY3lMaW1pdCkuZmlsbChmaWxlSXRlcmF0b3IpLm1hcChwcm9jZXNzRmlsZXMpO1xuXG4gICAgLy8gV2FpdCBmb3IgYWxsIHByb2Nlc3NpbmcgdG8gY29tcGxldGUuXG4gICAgYXdhaXQgYWxsU2V0dGxlZFdpdGhUaHJvdyh3b3JrZXJzKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUFuZFBvbGwodmVjdG9yU3RvcmVJZCwge1xuICAgICAgZmlsZV9pZHM6IGFsbEZpbGVJZHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGJhdGNoIG9mIGZpbGVzIGF0dGFjaGVkIHRvIGEgdmVjdG9yIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvclN0b3JlRmlsZUJhdGNoIHtcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyLCB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBpbiBBUEkgZW5kcG9pbnRzLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgdmVjdG9yIHN0b3JlIGZpbGVzIGJhdGNoIHdhc1xuICAgKiBjcmVhdGVkLlxuICAgKi9cbiAgY3JlYXRlZF9hdDogbnVtYmVyO1xuXG4gIGZpbGVfY291bnRzOiBWZWN0b3JTdG9yZUZpbGVCYXRjaC5GaWxlQ291bnRzO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHR5cGUsIHdoaWNoIGlzIGFsd2F5cyBgdmVjdG9yX3N0b3JlLmZpbGVfYmF0Y2hgLlxuICAgKi9cbiAgb2JqZWN0OiAndmVjdG9yX3N0b3JlLmZpbGVzX2JhdGNoJztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgdmVjdG9yIHN0b3JlIGZpbGVzIGJhdGNoLCB3aGljaCBjYW4gYmUgZWl0aGVyIGBpbl9wcm9ncmVzc2AsXG4gICAqIGBjb21wbGV0ZWRgLCBgY2FuY2VsbGVkYCBvciBgZmFpbGVkYC5cbiAgICovXG4gIHN0YXR1czogJ2luX3Byb2dyZXNzJyB8ICdjb21wbGV0ZWQnIHwgJ2NhbmNlbGxlZCcgfCAnZmFpbGVkJztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZVxuICAgKiBbdmVjdG9yIHN0b3JlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL3ZlY3Rvci1zdG9yZXMvb2JqZWN0KVxuICAgKiB0aGF0IHRoZSBbRmlsZV0oaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9maWxlcykgaXNcbiAgICogYXR0YWNoZWQgdG8uXG4gICAqL1xuICB2ZWN0b3Jfc3RvcmVfaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBWZWN0b3JTdG9yZUZpbGVCYXRjaCB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgRmlsZUNvdW50cyB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBmaWxlcyB0aGF0IHdoZXJlIGNhbmNlbGxlZC5cbiAgICAgKi9cbiAgICBjYW5jZWxsZWQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxuICAgICAqL1xuICAgIGNvbXBsZXRlZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBmaWxlcyB0aGF0IGhhdmUgZmFpbGVkIHRvIHByb2Nlc3MuXG4gICAgICovXG4gICAgZmFpbGVkOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG4gICAgICovXG4gICAgaW5fcHJvZ3Jlc3M6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgZmlsZXMuXG4gICAgICovXG4gICAgdG90YWw6IG51bWJlcjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVCYXRjaENyZWF0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgW0ZpbGVdKGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2FwaS1yZWZlcmVuY2UvZmlsZXMpIElEcyB0aGF0XG4gICAqIHRoZSB2ZWN0b3Igc3RvcmUgc2hvdWxkIHVzZS4gVXNlZnVsIGZvciB0b29scyBsaWtlIGBmaWxlX3NlYXJjaGAgdGhhdCBjYW4gYWNjZXNzXG4gICAqIGZpbGVzLlxuICAgKi9cbiAgZmlsZV9pZHM6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW1cbiAgICogbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyXG4gICAqIGNoYXJhY3RlcnMsIGJvb2xlYW5zLCBvciBudW1iZXJzLlxuICAgKi9cbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGNodW5raW5nIHN0cmF0ZWd5IHVzZWQgdG8gY2h1bmsgdGhlIGZpbGUocykuIElmIG5vdCBzZXQsIHdpbGwgdXNlIHRoZSBgYXV0b2BcbiAgICogc3RyYXRlZ3kuIE9ubHkgYXBwbGljYWJsZSBpZiBgZmlsZV9pZHNgIGlzIG5vbi1lbXB0eS5cbiAgICovXG4gIGNodW5raW5nX3N0cmF0ZWd5PzogVmVjdG9yU3RvcmVzQVBJLkZpbGVDaHVua2luZ1N0cmF0ZWd5UGFyYW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUJhdGNoTGlzdEZpbGVzUGFyYW1zIGV4dGVuZHMgQ3Vyc29yUGFnZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGN1cnNvciBmb3IgdXNlIGluIHBhZ2luYXRpb24uIGBiZWZvcmVgIGlzIGFuIG9iamVjdCBJRCB0aGF0IGRlZmluZXMgeW91ciBwbGFjZVxuICAgKiBpbiB0aGUgbGlzdC4gRm9yIGluc3RhbmNlLCBpZiB5b3UgbWFrZSBhIGxpc3QgcmVxdWVzdCBhbmQgcmVjZWl2ZSAxMDAgb2JqZWN0cyxcbiAgICogc3RhcnRpbmcgd2l0aCBvYmpfZm9vLCB5b3VyIHN1YnNlcXVlbnQgY2FsbCBjYW4gaW5jbHVkZSBiZWZvcmU9b2JqX2ZvbyBpbiBvcmRlclxuICAgKiB0byBmZXRjaCB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgbGlzdC5cbiAgICovXG4gIGJlZm9yZT86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGZpbGUgc3RhdHVzLiBPbmUgb2YgYGluX3Byb2dyZXNzYCwgYGNvbXBsZXRlZGAsIGBmYWlsZWRgLCBgY2FuY2VsbGVkYC5cbiAgICovXG4gIGZpbHRlcj86ICdpbl9wcm9ncmVzcycgfCAnY29tcGxldGVkJyB8ICdmYWlsZWQnIHwgJ2NhbmNlbGxlZCc7XG5cbiAgLyoqXG4gICAqIFNvcnQgb3JkZXIgYnkgdGhlIGBjcmVhdGVkX2F0YCB0aW1lc3RhbXAgb2YgdGhlIG9iamVjdHMuIGBhc2NgIGZvciBhc2NlbmRpbmdcbiAgICogb3JkZXIgYW5kIGBkZXNjYCBmb3IgZGVzY2VuZGluZyBvcmRlci5cbiAgICovXG4gIG9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBGaWxlQmF0Y2hlcyB7XG4gIGV4cG9ydCB7XG4gICAgdHlwZSBWZWN0b3JTdG9yZUZpbGVCYXRjaCBhcyBWZWN0b3JTdG9yZUZpbGVCYXRjaCxcbiAgICB0eXBlIEZpbGVCYXRjaENyZWF0ZVBhcmFtcyBhcyBGaWxlQmF0Y2hDcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBGaWxlQmF0Y2hMaXN0RmlsZXNQYXJhbXMgYXMgRmlsZUJhdGNoTGlzdEZpbGVzUGFyYW1zLFxuICB9O1xufVxuXG5leHBvcnQgeyBWZWN0b3JTdG9yZUZpbGVzUGFnZSB9O1xuIiwgIi8vIEZpbGUgZ2VuZXJhdGVkIGZyb20gb3VyIE9wZW5BUEkgc3BlYyBieSBTdGFpbmxlc3MuIFNlZSBDT05UUklCVVRJTkcubWQgZm9yIGRldGFpbHMuXG5cbmltcG9ydCB7IEFQSVJlc291cmNlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgaXNSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0ICogYXMgQ29yZSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCAqIGFzIFNoYXJlZCBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0ICogYXMgRmlsZUJhdGNoZXNBUEkgZnJvbSAnLi9maWxlLWJhdGNoZXMnO1xuaW1wb3J0IHtcbiAgRmlsZUJhdGNoQ3JlYXRlUGFyYW1zLFxuICBGaWxlQmF0Y2hMaXN0RmlsZXNQYXJhbXMsXG4gIEZpbGVCYXRjaGVzLFxuICBWZWN0b3JTdG9yZUZpbGVCYXRjaCxcbn0gZnJvbSAnLi9maWxlLWJhdGNoZXMnO1xuaW1wb3J0ICogYXMgRmlsZXNBUEkgZnJvbSAnLi9maWxlcyc7XG5pbXBvcnQge1xuICBGaWxlQ29udGVudFJlc3BvbnNlLFxuICBGaWxlQ29udGVudFJlc3BvbnNlc1BhZ2UsXG4gIEZpbGVDcmVhdGVQYXJhbXMsXG4gIEZpbGVMaXN0UGFyYW1zLFxuICBGaWxlVXBkYXRlUGFyYW1zLFxuICBGaWxlcyxcbiAgVmVjdG9yU3RvcmVGaWxlLFxuICBWZWN0b3JTdG9yZUZpbGVEZWxldGVkLFxuICBWZWN0b3JTdG9yZUZpbGVzUGFnZSxcbn0gZnJvbSAnLi9maWxlcyc7XG5pbXBvcnQgeyBDdXJzb3JQYWdlLCB0eXBlIEN1cnNvclBhZ2VQYXJhbXMsIFBhZ2UgfSBmcm9tICcuLi8uLi9wYWdpbmF0aW9uJztcblxuZXhwb3J0IGNsYXNzIFZlY3RvclN0b3JlcyBleHRlbmRzIEFQSVJlc291cmNlIHtcbiAgZmlsZXM6IEZpbGVzQVBJLkZpbGVzID0gbmV3IEZpbGVzQVBJLkZpbGVzKHRoaXMuX2NsaWVudCk7XG4gIGZpbGVCYXRjaGVzOiBGaWxlQmF0Y2hlc0FQSS5GaWxlQmF0Y2hlcyA9IG5ldyBGaWxlQmF0Y2hlc0FQSS5GaWxlQmF0Y2hlcyh0aGlzLl9jbGllbnQpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB2ZWN0b3Igc3RvcmUuXG4gICAqL1xuICBjcmVhdGUoYm9keTogVmVjdG9yU3RvcmVDcmVhdGVQYXJhbXMsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPFZlY3RvclN0b3JlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5wb3N0KCcvdmVjdG9yX3N0b3JlcycsIHtcbiAgICAgIGJvZHksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSB2ZWN0b3Igc3RvcmUuXG4gICAqL1xuICByZXRyaWV2ZSh2ZWN0b3JTdG9yZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPFZlY3RvclN0b3JlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXQoYC92ZWN0b3Jfc3RvcmVzLyR7dmVjdG9yU3RvcmVJZH1gLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmllcyBhIHZlY3RvciBzdG9yZS5cbiAgICovXG4gIHVwZGF0ZShcbiAgICB2ZWN0b3JTdG9yZUlkOiBzdHJpbmcsXG4gICAgYm9keTogVmVjdG9yU3RvcmVVcGRhdGVQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuQVBJUHJvbWlzZTxWZWN0b3JTdG9yZT4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQucG9zdChgL3ZlY3Rvcl9zdG9yZXMvJHt2ZWN0b3JTdG9yZUlkfWAsIHtcbiAgICAgIGJvZHksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVyczogeyAnT3BlbkFJLUJldGEnOiAnYXNzaXN0YW50cz12MicsIC4uLm9wdGlvbnM/LmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB2ZWN0b3Igc3RvcmVzLlxuICAgKi9cbiAgbGlzdChcbiAgICBxdWVyeT86IFZlY3RvclN0b3JlTGlzdFBhcmFtcyxcbiAgICBvcHRpb25zPzogQ29yZS5SZXF1ZXN0T3B0aW9ucyxcbiAgKTogQ29yZS5QYWdlUHJvbWlzZTxWZWN0b3JTdG9yZXNQYWdlLCBWZWN0b3JTdG9yZT47XG4gIGxpc3Qob3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMpOiBDb3JlLlBhZ2VQcm9taXNlPFZlY3RvclN0b3Jlc1BhZ2UsIFZlY3RvclN0b3JlPjtcbiAgbGlzdChcbiAgICBxdWVyeTogVmVjdG9yU3RvcmVMaXN0UGFyYW1zIHwgQ29yZS5SZXF1ZXN0T3B0aW9ucyA9IHt9LFxuICAgIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zLFxuICApOiBDb3JlLlBhZ2VQcm9taXNlPFZlY3RvclN0b3Jlc1BhZ2UsIFZlY3RvclN0b3JlPiB7XG4gICAgaWYgKGlzUmVxdWVzdE9wdGlvbnMocXVlcnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0KHt9LCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0QVBJTGlzdCgnL3ZlY3Rvcl9zdG9yZXMnLCBWZWN0b3JTdG9yZXNQYWdlLCB7XG4gICAgICBxdWVyeSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7ICdPcGVuQUktQmV0YSc6ICdhc3Npc3RhbnRzPXYyJywgLi4ub3B0aW9ucz8uaGVhZGVycyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIHZlY3RvciBzdG9yZS5cbiAgICovXG4gIGRlbCh2ZWN0b3JTdG9yZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb3JlLlJlcXVlc3RPcHRpb25zKTogQ29yZS5BUElQcm9taXNlPFZlY3RvclN0b3JlRGVsZXRlZD4ge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZGVsZXRlKGAvdmVjdG9yX3N0b3Jlcy8ke3ZlY3RvclN0b3JlSWR9YCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGEgdmVjdG9yIHN0b3JlIGZvciByZWxldmFudCBjaHVua3MgYmFzZWQgb24gYSBxdWVyeSBhbmQgZmlsZSBhdHRyaWJ1dGVzXG4gICAqIGZpbHRlci5cbiAgICovXG4gIHNlYXJjaChcbiAgICB2ZWN0b3JTdG9yZUlkOiBzdHJpbmcsXG4gICAgYm9keTogVmVjdG9yU3RvcmVTZWFyY2hQYXJhbXMsXG4gICAgb3B0aW9ucz86IENvcmUuUmVxdWVzdE9wdGlvbnMsXG4gICk6IENvcmUuUGFnZVByb21pc2U8VmVjdG9yU3RvcmVTZWFyY2hSZXNwb25zZXNQYWdlLCBWZWN0b3JTdG9yZVNlYXJjaFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRBUElMaXN0KGAvdmVjdG9yX3N0b3Jlcy8ke3ZlY3RvclN0b3JlSWR9L3NlYXJjaGAsIFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2VzUGFnZSwge1xuICAgICAgYm9keSxcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHsgJ09wZW5BSS1CZXRhJzogJ2Fzc2lzdGFudHM9djInLCAuLi5vcHRpb25zPy5oZWFkZXJzIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZlY3RvclN0b3Jlc1BhZ2UgZXh0ZW5kcyBDdXJzb3JQYWdlPFZlY3RvclN0b3JlPiB7fVxuXG4vKipcbiAqIE5vdGU6IG5vIHBhZ2luYXRpb24gYWN0dWFsbHkgb2NjdXJzIHlldCwgdGhpcyBpcyBmb3IgZm9yd2FyZHMtY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2VzUGFnZSBleHRlbmRzIFBhZ2U8VmVjdG9yU3RvcmVTZWFyY2hSZXNwb25zZT4ge31cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBzdHJhdGVneS4gVGhpcyBzdHJhdGVneSBjdXJyZW50bHkgdXNlcyBhIGBtYXhfY2h1bmtfc2l6ZV90b2tlbnNgIG9mXG4gKiBgODAwYCBhbmQgYGNodW5rX292ZXJsYXBfdG9rZW5zYCBvZiBgNDAwYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvRmlsZUNodW5raW5nU3RyYXRlZ3lQYXJhbSB7XG4gIC8qKlxuICAgKiBBbHdheXMgYGF1dG9gLlxuICAgKi9cbiAgdHlwZTogJ2F1dG8nO1xufVxuXG4vKipcbiAqIFRoZSBzdHJhdGVneSB1c2VkIHRvIGNodW5rIHRoZSBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBGaWxlQ2h1bmtpbmdTdHJhdGVneSA9IFN0YXRpY0ZpbGVDaHVua2luZ1N0cmF0ZWd5T2JqZWN0IHwgT3RoZXJGaWxlQ2h1bmtpbmdTdHJhdGVneU9iamVjdDtcblxuLyoqXG4gKiBUaGUgY2h1bmtpbmcgc3RyYXRlZ3kgdXNlZCB0byBjaHVuayB0aGUgZmlsZShzKS4gSWYgbm90IHNldCwgd2lsbCB1c2UgdGhlIGBhdXRvYFxuICogc3RyYXRlZ3kuIE9ubHkgYXBwbGljYWJsZSBpZiBgZmlsZV9pZHNgIGlzIG5vbi1lbXB0eS5cbiAqL1xuZXhwb3J0IHR5cGUgRmlsZUNodW5raW5nU3RyYXRlZ3lQYXJhbSA9IEF1dG9GaWxlQ2h1bmtpbmdTdHJhdGVneVBhcmFtIHwgU3RhdGljRmlsZUNodW5raW5nU3RyYXRlZ3lPYmplY3RQYXJhbTtcblxuLyoqXG4gKiBUaGlzIGlzIHJldHVybmVkIHdoZW4gdGhlIGNodW5raW5nIHN0cmF0ZWd5IGlzIHVua25vd24uIFR5cGljYWxseSwgdGhpcyBpc1xuICogYmVjYXVzZSB0aGUgZmlsZSB3YXMgaW5kZXhlZCBiZWZvcmUgdGhlIGBjaHVua2luZ19zdHJhdGVneWAgY29uY2VwdCB3YXNcbiAqIGludHJvZHVjZWQgaW4gdGhlIEFQSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdGhlckZpbGVDaHVua2luZ1N0cmF0ZWd5T2JqZWN0IHtcbiAgLyoqXG4gICAqIEFsd2F5cyBgb3RoZXJgLlxuICAgKi9cbiAgdHlwZTogJ290aGVyJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNGaWxlQ2h1bmtpbmdTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHRva2VucyB0aGF0IG92ZXJsYXAgYmV0d2VlbiBjaHVua3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA0MDBgLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIG92ZXJsYXAgbXVzdCBub3QgZXhjZWVkIGhhbGYgb2YgYG1heF9jaHVua19zaXplX3Rva2Vuc2AuXG4gICAqL1xuICBjaHVua19vdmVybGFwX3Rva2VuczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdG9rZW5zIGluIGVhY2ggY2h1bmsuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA4MDBgLiBUaGVcbiAgICogbWluaW11bSB2YWx1ZSBpcyBgMTAwYCBhbmQgdGhlIG1heGltdW0gdmFsdWUgaXMgYDQwOTZgLlxuICAgKi9cbiAgbWF4X2NodW5rX3NpemVfdG9rZW5zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljRmlsZUNodW5raW5nU3RyYXRlZ3lPYmplY3Qge1xuICBzdGF0aWM6IFN0YXRpY0ZpbGVDaHVua2luZ1N0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBBbHdheXMgYHN0YXRpY2AuXG4gICAqL1xuICB0eXBlOiAnc3RhdGljJztcbn1cblxuLyoqXG4gKiBDdXN0b21pemUgeW91ciBvd24gY2h1bmtpbmcgc3RyYXRlZ3kgYnkgc2V0dGluZyBjaHVuayBzaXplIGFuZCBjaHVuayBvdmVybGFwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0ZpbGVDaHVua2luZ1N0cmF0ZWd5T2JqZWN0UGFyYW0ge1xuICBzdGF0aWM6IFN0YXRpY0ZpbGVDaHVua2luZ1N0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBBbHdheXMgYHN0YXRpY2AuXG4gICAqL1xuICB0eXBlOiAnc3RhdGljJztcbn1cblxuLyoqXG4gKiBBIHZlY3RvciBzdG9yZSBpcyBhIGNvbGxlY3Rpb24gb2YgcHJvY2Vzc2VkIGZpbGVzIGNhbiBiZSB1c2VkIGJ5IHRoZVxuICogYGZpbGVfc2VhcmNoYCB0b29sLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvclN0b3JlIHtcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyLCB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBpbiBBUEkgZW5kcG9pbnRzLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKSBmb3Igd2hlbiB0aGUgdmVjdG9yIHN0b3JlIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgY3JlYXRlZF9hdDogbnVtYmVyO1xuXG4gIGZpbGVfY291bnRzOiBWZWN0b3JTdG9yZS5GaWxlQ291bnRzO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSB2ZWN0b3Igc3RvcmUgd2FzIGxhc3QgYWN0aXZlLlxuICAgKi9cbiAgbGFzdF9hY3RpdmVfYXQ6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuXG4gICAqXG4gICAqIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoXG4gICAqIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyIGNoYXJhY3RlcnMuXG4gICAqL1xuICBtZXRhZGF0YTogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHZlY3RvciBzdG9yZS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0eXBlLCB3aGljaCBpcyBhbHdheXMgYHZlY3Rvcl9zdG9yZWAuXG4gICAqL1xuICBvYmplY3Q6ICd2ZWN0b3Jfc3RvcmUnO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSB2ZWN0b3Igc3RvcmUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYGV4cGlyZWRgLCBgaW5fcHJvZ3Jlc3NgLCBvclxuICAgKiBgY29tcGxldGVkYC4gQSBzdGF0dXMgb2YgYGNvbXBsZXRlZGAgaW5kaWNhdGVzIHRoYXQgdGhlIHZlY3RvciBzdG9yZSBpcyByZWFkeVxuICAgKiBmb3IgdXNlLlxuICAgKi9cbiAgc3RhdHVzOiAnZXhwaXJlZCcgfCAnaW5fcHJvZ3Jlc3MnIHwgJ2NvbXBsZXRlZCc7XG5cbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdXNlZCBieSB0aGUgZmlsZXMgaW4gdGhlIHZlY3RvciBzdG9yZS5cbiAgICovXG4gIHVzYWdlX2J5dGVzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBleHBpcmF0aW9uIHBvbGljeSBmb3IgYSB2ZWN0b3Igc3RvcmUuXG4gICAqL1xuICBleHBpcmVzX2FmdGVyPzogVmVjdG9yU3RvcmUuRXhwaXJlc0FmdGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5peCB0aW1lc3RhbXAgKGluIHNlY29uZHMpIGZvciB3aGVuIHRoZSB2ZWN0b3Igc3RvcmUgd2lsbCBleHBpcmUuXG4gICAqL1xuICBleHBpcmVzX2F0PzogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBWZWN0b3JTdG9yZSB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgRmlsZUNvdW50cyB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBmaWxlcyB0aGF0IHdlcmUgY2FuY2VsbGVkLlxuICAgICAqL1xuICAgIGNhbmNlbGxlZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBmaWxlcyB0aGF0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkLlxuICAgICAqL1xuICAgIGNvbXBsZXRlZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBmaWxlcyB0aGF0IGhhdmUgZmFpbGVkIHRvIHByb2Nlc3MuXG4gICAgICovXG4gICAgZmFpbGVkOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG4gICAgICovXG4gICAgaW5fcHJvZ3Jlc3M6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgZmlsZXMuXG4gICAgICovXG4gICAgdG90YWw6IG51bWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXhwaXJhdGlvbiBwb2xpY3kgZm9yIGEgdmVjdG9yIHN0b3JlLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBFeHBpcmVzQWZ0ZXIge1xuICAgIC8qKlxuICAgICAqIEFuY2hvciB0aW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIGV4cGlyYXRpb24gcG9saWN5IGFwcGxpZXMuIFN1cHBvcnRlZCBhbmNob3JzOlxuICAgICAqIGBsYXN0X2FjdGl2ZV9hdGAuXG4gICAgICovXG4gICAgYW5jaG9yOiAnbGFzdF9hY3RpdmVfYXQnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBkYXlzIGFmdGVyIHRoZSBhbmNob3IgdGltZSB0aGF0IHRoZSB2ZWN0b3Igc3RvcmUgd2lsbCBleHBpcmUuXG4gICAgICovXG4gICAgZGF5czogbnVtYmVyO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yU3RvcmVEZWxldGVkIHtcbiAgaWQ6IHN0cmluZztcblxuICBkZWxldGVkOiBib29sZWFuO1xuXG4gIG9iamVjdDogJ3ZlY3Rvcl9zdG9yZS5kZWxldGVkJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZWN0b3JTdG9yZVNlYXJjaFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFNldCBvZiAxNiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gb2JqZWN0LiBUaGlzIGNhbiBiZSB1c2VmdWxcbiAgICogZm9yIHN0b3JpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGluIGEgc3RydWN0dXJlZCBmb3JtYXQsIGFuZFxuICAgKiBxdWVyeWluZyBmb3Igb2JqZWN0cyB2aWEgQVBJIG9yIHRoZSBkYXNoYm9hcmQuIEtleXMgYXJlIHN0cmluZ3Mgd2l0aCBhIG1heGltdW1cbiAgICogbGVuZ3RoIG9mIDY0IGNoYXJhY3RlcnMuIFZhbHVlcyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNTEyXG4gICAqIGNoYXJhY3RlcnMsIGJvb2xlYW5zLCBvciBudW1iZXJzLlxuICAgKi9cbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDb250ZW50IGNodW5rcyBmcm9tIHRoZSBmaWxlLlxuICAgKi9cbiAgY29udGVudDogQXJyYXk8VmVjdG9yU3RvcmVTZWFyY2hSZXNwb25zZS5Db250ZW50PjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSB2ZWN0b3Igc3RvcmUgZmlsZS5cbiAgICovXG4gIGZpbGVfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHZlY3RvciBzdG9yZSBmaWxlLlxuICAgKi9cbiAgZmlsZW5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpbWlsYXJpdHkgc2NvcmUgZm9yIHRoZSByZXN1bHQuXG4gICAqL1xuICBzY29yZTogbnVtYmVyO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2Uge1xuICBleHBvcnQgaW50ZXJmYWNlIENvbnRlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IGNvbnRlbnQgcmV0dXJuZWQgZnJvbSBzZWFyY2guXG4gICAgICovXG4gICAgdGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgY29udGVudC5cbiAgICAgKi9cbiAgICB0eXBlOiAndGV4dCc7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZWN0b3JTdG9yZUNyZWF0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY2h1bmtpbmcgc3RyYXRlZ3kgdXNlZCB0byBjaHVuayB0aGUgZmlsZShzKS4gSWYgbm90IHNldCwgd2lsbCB1c2UgdGhlIGBhdXRvYFxuICAgKiBzdHJhdGVneS4gT25seSBhcHBsaWNhYmxlIGlmIGBmaWxlX2lkc2AgaXMgbm9uLWVtcHR5LlxuICAgKi9cbiAgY2h1bmtpbmdfc3RyYXRlZ3k/OiBGaWxlQ2h1bmtpbmdTdHJhdGVneVBhcmFtO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhwaXJhdGlvbiBwb2xpY3kgZm9yIGEgdmVjdG9yIHN0b3JlLlxuICAgKi9cbiAgZXhwaXJlc19hZnRlcj86IFZlY3RvclN0b3JlQ3JlYXRlUGFyYW1zLkV4cGlyZXNBZnRlcjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIFtGaWxlXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2ZpbGVzKSBJRHMgdGhhdFxuICAgKiB0aGUgdmVjdG9yIHN0b3JlIHNob3VsZCB1c2UuIFVzZWZ1bCBmb3IgdG9vbHMgbGlrZSBgZmlsZV9zZWFyY2hgIHRoYXQgY2FuIGFjY2Vzc1xuICAgKiBmaWxlcy5cbiAgICovXG4gIGZpbGVfaWRzPzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kXG4gICAqIHF1ZXJ5aW5nIGZvciBvYmplY3RzIHZpYSBBUEkgb3IgdGhlIGRhc2hib2FyZC5cbiAgICpcbiAgICogS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGhcbiAgICogYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTIgY2hhcmFjdGVycy5cbiAgICovXG4gIG1ldGFkYXRhPzogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHZlY3RvciBzdG9yZS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgVmVjdG9yU3RvcmVDcmVhdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGV4cGlyYXRpb24gcG9saWN5IGZvciBhIHZlY3RvciBzdG9yZS5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRXhwaXJlc0FmdGVyIHtcbiAgICAvKipcbiAgICAgKiBBbmNob3IgdGltZXN0YW1wIGFmdGVyIHdoaWNoIHRoZSBleHBpcmF0aW9uIHBvbGljeSBhcHBsaWVzLiBTdXBwb3J0ZWQgYW5jaG9yczpcbiAgICAgKiBgbGFzdF9hY3RpdmVfYXRgLlxuICAgICAqL1xuICAgIGFuY2hvcjogJ2xhc3RfYWN0aXZlX2F0JztcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgZGF5cyBhZnRlciB0aGUgYW5jaG9yIHRpbWUgdGhhdCB0aGUgdmVjdG9yIHN0b3JlIHdpbGwgZXhwaXJlLlxuICAgICAqL1xuICAgIGRheXM6IG51bWJlcjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvclN0b3JlVXBkYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBleHBpcmF0aW9uIHBvbGljeSBmb3IgYSB2ZWN0b3Igc3RvcmUuXG4gICAqL1xuICBleHBpcmVzX2FmdGVyPzogVmVjdG9yU3RvcmVVcGRhdGVQYXJhbXMuRXhwaXJlc0FmdGVyIHwgbnVsbDtcblxuICAvKipcbiAgICogU2V0IG9mIDE2IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhbiBvYmplY3QuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuICAgKiBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgaW4gYSBzdHJ1Y3R1cmVkIGZvcm1hdCwgYW5kXG4gICAqIHF1ZXJ5aW5nIGZvciBvYmplY3RzIHZpYSBBUEkgb3IgdGhlIGRhc2hib2FyZC5cbiAgICpcbiAgICogS2V5cyBhcmUgc3RyaW5ncyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4gVmFsdWVzIGFyZSBzdHJpbmdzIHdpdGhcbiAgICogYSBtYXhpbXVtIGxlbmd0aCBvZiA1MTIgY2hhcmFjdGVycy5cbiAgICovXG4gIG1ldGFkYXRhPzogU2hhcmVkLk1ldGFkYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHZlY3RvciBzdG9yZS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFZlY3RvclN0b3JlVXBkYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBleHBpcmF0aW9uIHBvbGljeSBmb3IgYSB2ZWN0b3Igc3RvcmUuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEV4cGlyZXNBZnRlciB7XG4gICAgLyoqXG4gICAgICogQW5jaG9yIHRpbWVzdGFtcCBhZnRlciB3aGljaCB0aGUgZXhwaXJhdGlvbiBwb2xpY3kgYXBwbGllcy4gU3VwcG9ydGVkIGFuY2hvcnM6XG4gICAgICogYGxhc3RfYWN0aXZlX2F0YC5cbiAgICAgKi9cbiAgICBhbmNob3I6ICdsYXN0X2FjdGl2ZV9hdCc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGRheXMgYWZ0ZXIgdGhlIGFuY2hvciB0aW1lIHRoYXQgdGhlIHZlY3RvciBzdG9yZSB3aWxsIGV4cGlyZS5cbiAgICAgKi9cbiAgICBkYXlzOiBudW1iZXI7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZWN0b3JTdG9yZUxpc3RQYXJhbXMgZXh0ZW5kcyBDdXJzb3JQYWdlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgY3Vyc29yIGZvciB1c2UgaW4gcGFnaW5hdGlvbi4gYGJlZm9yZWAgaXMgYW4gb2JqZWN0IElEIHRoYXQgZGVmaW5lcyB5b3VyIHBsYWNlXG4gICAqIGluIHRoZSBsaXN0LiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBtYWtlIGEgbGlzdCByZXF1ZXN0IGFuZCByZWNlaXZlIDEwMCBvYmplY3RzLFxuICAgKiBzdGFydGluZyB3aXRoIG9ial9mb28sIHlvdXIgc3Vic2VxdWVudCBjYWxsIGNhbiBpbmNsdWRlIGJlZm9yZT1vYmpfZm9vIGluIG9yZGVyXG4gICAqIHRvIGZldGNoIHRoZSBwcmV2aW91cyBwYWdlIG9mIHRoZSBsaXN0LlxuICAgKi9cbiAgYmVmb3JlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTb3J0IG9yZGVyIGJ5IHRoZSBgY3JlYXRlZF9hdGAgdGltZXN0YW1wIG9mIHRoZSBvYmplY3RzLiBgYXNjYCBmb3IgYXNjZW5kaW5nXG4gICAqIG9yZGVyIGFuZCBgZGVzY2AgZm9yIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqL1xuICBvcmRlcj86ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvclN0b3JlU2VhcmNoUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgcXVlcnkgc3RyaW5nIGZvciBhIHNlYXJjaFxuICAgKi9cbiAgcXVlcnk6IHN0cmluZyB8IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgZmlsdGVyIHRvIGFwcGx5IGJhc2VkIG9uIGZpbGUgYXR0cmlidXRlcy5cbiAgICovXG4gIGZpbHRlcnM/OiBTaGFyZWQuQ29tcGFyaXNvbkZpbHRlciB8IFNoYXJlZC5Db21wb3VuZEZpbHRlcjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuLiBUaGlzIG51bWJlciBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCA1MFxuICAgKiBpbmNsdXNpdmUuXG4gICAqL1xuICBtYXhfbnVtX3Jlc3VsdHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJhbmtpbmcgb3B0aW9ucyBmb3Igc2VhcmNoLlxuICAgKi9cbiAgcmFua2luZ19vcHRpb25zPzogVmVjdG9yU3RvcmVTZWFyY2hQYXJhbXMuUmFua2luZ09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV3cml0ZSB0aGUgbmF0dXJhbCBsYW5ndWFnZSBxdWVyeSBmb3IgdmVjdG9yIHNlYXJjaC5cbiAgICovXG4gIHJld3JpdGVfcXVlcnk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFZlY3RvclN0b3JlU2VhcmNoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFJhbmtpbmcgb3B0aW9ucyBmb3Igc2VhcmNoLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBSYW5raW5nT3B0aW9ucyB7XG4gICAgcmFua2VyPzogJ2F1dG8nIHwgJ2RlZmF1bHQtMjAyNC0xMS0xNSc7XG5cbiAgICBzY29yZV90aHJlc2hvbGQ/OiBudW1iZXI7XG4gIH1cbn1cblxuVmVjdG9yU3RvcmVzLlZlY3RvclN0b3Jlc1BhZ2UgPSBWZWN0b3JTdG9yZXNQYWdlO1xuVmVjdG9yU3RvcmVzLlZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2VzUGFnZSA9IFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2VzUGFnZTtcblZlY3RvclN0b3Jlcy5GaWxlcyA9IEZpbGVzO1xuVmVjdG9yU3RvcmVzLlZlY3RvclN0b3JlRmlsZXNQYWdlID0gVmVjdG9yU3RvcmVGaWxlc1BhZ2U7XG5WZWN0b3JTdG9yZXMuRmlsZUNvbnRlbnRSZXNwb25zZXNQYWdlID0gRmlsZUNvbnRlbnRSZXNwb25zZXNQYWdlO1xuVmVjdG9yU3RvcmVzLkZpbGVCYXRjaGVzID0gRmlsZUJhdGNoZXM7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBWZWN0b3JTdG9yZXMge1xuICBleHBvcnQge1xuICAgIHR5cGUgQXV0b0ZpbGVDaHVua2luZ1N0cmF0ZWd5UGFyYW0gYXMgQXV0b0ZpbGVDaHVua2luZ1N0cmF0ZWd5UGFyYW0sXG4gICAgdHlwZSBGaWxlQ2h1bmtpbmdTdHJhdGVneSBhcyBGaWxlQ2h1bmtpbmdTdHJhdGVneSxcbiAgICB0eXBlIEZpbGVDaHVua2luZ1N0cmF0ZWd5UGFyYW0gYXMgRmlsZUNodW5raW5nU3RyYXRlZ3lQYXJhbSxcbiAgICB0eXBlIE90aGVyRmlsZUNodW5raW5nU3RyYXRlZ3lPYmplY3QgYXMgT3RoZXJGaWxlQ2h1bmtpbmdTdHJhdGVneU9iamVjdCxcbiAgICB0eXBlIFN0YXRpY0ZpbGVDaHVua2luZ1N0cmF0ZWd5IGFzIFN0YXRpY0ZpbGVDaHVua2luZ1N0cmF0ZWd5LFxuICAgIHR5cGUgU3RhdGljRmlsZUNodW5raW5nU3RyYXRlZ3lPYmplY3QgYXMgU3RhdGljRmlsZUNodW5raW5nU3RyYXRlZ3lPYmplY3QsXG4gICAgdHlwZSBTdGF0aWNGaWxlQ2h1bmtpbmdTdHJhdGVneU9iamVjdFBhcmFtIGFzIFN0YXRpY0ZpbGVDaHVua2luZ1N0cmF0ZWd5T2JqZWN0UGFyYW0sXG4gICAgdHlwZSBWZWN0b3JTdG9yZSBhcyBWZWN0b3JTdG9yZSxcbiAgICB0eXBlIFZlY3RvclN0b3JlRGVsZXRlZCBhcyBWZWN0b3JTdG9yZURlbGV0ZWQsXG4gICAgdHlwZSBWZWN0b3JTdG9yZVNlYXJjaFJlc3BvbnNlIGFzIFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2UsXG4gICAgVmVjdG9yU3RvcmVzUGFnZSBhcyBWZWN0b3JTdG9yZXNQYWdlLFxuICAgIFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2VzUGFnZSBhcyBWZWN0b3JTdG9yZVNlYXJjaFJlc3BvbnNlc1BhZ2UsXG4gICAgdHlwZSBWZWN0b3JTdG9yZUNyZWF0ZVBhcmFtcyBhcyBWZWN0b3JTdG9yZUNyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIFZlY3RvclN0b3JlVXBkYXRlUGFyYW1zIGFzIFZlY3RvclN0b3JlVXBkYXRlUGFyYW1zLFxuICAgIHR5cGUgVmVjdG9yU3RvcmVMaXN0UGFyYW1zIGFzIFZlY3RvclN0b3JlTGlzdFBhcmFtcyxcbiAgICB0eXBlIFZlY3RvclN0b3JlU2VhcmNoUGFyYW1zIGFzIFZlY3RvclN0b3JlU2VhcmNoUGFyYW1zLFxuICB9O1xuXG4gIGV4cG9ydCB7XG4gICAgRmlsZXMgYXMgRmlsZXMsXG4gICAgdHlwZSBWZWN0b3JTdG9yZUZpbGUgYXMgVmVjdG9yU3RvcmVGaWxlLFxuICAgIHR5cGUgVmVjdG9yU3RvcmVGaWxlRGVsZXRlZCBhcyBWZWN0b3JTdG9yZUZpbGVEZWxldGVkLFxuICAgIHR5cGUgRmlsZUNvbnRlbnRSZXNwb25zZSBhcyBGaWxlQ29udGVudFJlc3BvbnNlLFxuICAgIFZlY3RvclN0b3JlRmlsZXNQYWdlIGFzIFZlY3RvclN0b3JlRmlsZXNQYWdlLFxuICAgIEZpbGVDb250ZW50UmVzcG9uc2VzUGFnZSBhcyBGaWxlQ29udGVudFJlc3BvbnNlc1BhZ2UsXG4gICAgdHlwZSBGaWxlQ3JlYXRlUGFyYW1zIGFzIEZpbGVDcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBGaWxlVXBkYXRlUGFyYW1zIGFzIEZpbGVVcGRhdGVQYXJhbXMsXG4gICAgdHlwZSBGaWxlTGlzdFBhcmFtcyBhcyBGaWxlTGlzdFBhcmFtcyxcbiAgfTtcblxuICBleHBvcnQge1xuICAgIEZpbGVCYXRjaGVzIGFzIEZpbGVCYXRjaGVzLFxuICAgIHR5cGUgVmVjdG9yU3RvcmVGaWxlQmF0Y2ggYXMgVmVjdG9yU3RvcmVGaWxlQmF0Y2gsXG4gICAgdHlwZSBGaWxlQmF0Y2hDcmVhdGVQYXJhbXMgYXMgRmlsZUJhdGNoQ3JlYXRlUGFyYW1zLFxuICAgIHR5cGUgRmlsZUJhdGNoTGlzdEZpbGVzUGFyYW1zIGFzIEZpbGVCYXRjaExpc3RGaWxlc1BhcmFtcyxcbiAgfTtcbn1cbiIsICIvLyBGaWxlIGdlbmVyYXRlZCBmcm9tIG91ciBPcGVuQVBJIHNwZWMgYnkgU3RhaW5sZXNzLiBTZWUgQ09OVFJJQlVUSU5HLm1kIGZvciBkZXRhaWxzLlxuXG5pbXBvcnQgeyB0eXBlIEFnZW50LCB0eXBlIFJlcXVlc3RJbml0IH0gZnJvbSAnLi9fc2hpbXMvaW5kZXgnO1xuaW1wb3J0ICogYXMgcXMgZnJvbSAnLi9pbnRlcm5hbC9xcyc7XG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4vY29yZSc7XG5pbXBvcnQgKiBhcyBFcnJvcnMgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgKiBhcyBQYWdpbmF0aW9uIGZyb20gJy4vcGFnaW5hdGlvbic7XG5pbXBvcnQgeyB0eXBlIEN1cnNvclBhZ2VQYXJhbXMsIEN1cnNvclBhZ2VSZXNwb25zZSwgUGFnZVJlc3BvbnNlIH0gZnJvbSAnLi9wYWdpbmF0aW9uJztcbmltcG9ydCAqIGFzIFVwbG9hZHMgZnJvbSAnLi91cGxvYWRzJztcbmltcG9ydCAqIGFzIEFQSSBmcm9tICcuL3Jlc291cmNlcy9pbmRleCc7XG5pbXBvcnQge1xuICBCYXRjaCxcbiAgQmF0Y2hDcmVhdGVQYXJhbXMsXG4gIEJhdGNoRXJyb3IsXG4gIEJhdGNoTGlzdFBhcmFtcyxcbiAgQmF0Y2hSZXF1ZXN0Q291bnRzLFxuICBCYXRjaGVzLFxuICBCYXRjaGVzUGFnZSxcbn0gZnJvbSAnLi9yZXNvdXJjZXMvYmF0Y2hlcyc7XG5pbXBvcnQge1xuICBDb21wbGV0aW9uLFxuICBDb21wbGV0aW9uQ2hvaWNlLFxuICBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLFxuICBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nLFxuICBDb21wbGV0aW9uVXNhZ2UsXG4gIENvbXBsZXRpb25zLFxufSBmcm9tICcuL3Jlc291cmNlcy9jb21wbGV0aW9ucyc7XG5pbXBvcnQge1xuICBDcmVhdGVFbWJlZGRpbmdSZXNwb25zZSxcbiAgRW1iZWRkaW5nLFxuICBFbWJlZGRpbmdDcmVhdGVQYXJhbXMsXG4gIEVtYmVkZGluZ01vZGVsLFxuICBFbWJlZGRpbmdzLFxufSBmcm9tICcuL3Jlc291cmNlcy9lbWJlZGRpbmdzJztcbmltcG9ydCB7XG4gIEZpbGVDb250ZW50LFxuICBGaWxlQ3JlYXRlUGFyYW1zLFxuICBGaWxlRGVsZXRlZCxcbiAgRmlsZUxpc3RQYXJhbXMsXG4gIEZpbGVPYmplY3QsXG4gIEZpbGVPYmplY3RzUGFnZSxcbiAgRmlsZVB1cnBvc2UsXG4gIEZpbGVzLFxufSBmcm9tICcuL3Jlc291cmNlcy9maWxlcyc7XG5pbXBvcnQge1xuICBJbWFnZSxcbiAgSW1hZ2VDcmVhdGVWYXJpYXRpb25QYXJhbXMsXG4gIEltYWdlRWRpdFBhcmFtcyxcbiAgSW1hZ2VHZW5lcmF0ZVBhcmFtcyxcbiAgSW1hZ2VNb2RlbCxcbiAgSW1hZ2VzLFxuICBJbWFnZXNSZXNwb25zZSxcbn0gZnJvbSAnLi9yZXNvdXJjZXMvaW1hZ2VzJztcbmltcG9ydCB7IE1vZGVsLCBNb2RlbERlbGV0ZWQsIE1vZGVscywgTW9kZWxzUGFnZSB9IGZyb20gJy4vcmVzb3VyY2VzL21vZGVscyc7XG5pbXBvcnQge1xuICBNb2RlcmF0aW9uLFxuICBNb2RlcmF0aW9uQ3JlYXRlUGFyYW1zLFxuICBNb2RlcmF0aW9uQ3JlYXRlUmVzcG9uc2UsXG4gIE1vZGVyYXRpb25JbWFnZVVSTElucHV0LFxuICBNb2RlcmF0aW9uTW9kZWwsXG4gIE1vZGVyYXRpb25NdWx0aU1vZGFsSW5wdXQsXG4gIE1vZGVyYXRpb25UZXh0SW5wdXQsXG4gIE1vZGVyYXRpb25zLFxufSBmcm9tICcuL3Jlc291cmNlcy9tb2RlcmF0aW9ucyc7XG5pbXBvcnQgeyBBdWRpbywgQXVkaW9Nb2RlbCwgQXVkaW9SZXNwb25zZUZvcm1hdCB9IGZyb20gJy4vcmVzb3VyY2VzL2F1ZGlvL2F1ZGlvJztcbmltcG9ydCB7IEJldGEgfSBmcm9tICcuL3Jlc291cmNlcy9iZXRhL2JldGEnO1xuaW1wb3J0IHsgQ2hhdCB9IGZyb20gJy4vcmVzb3VyY2VzL2NoYXQvY2hhdCc7XG5pbXBvcnQgeyBGaW5lVHVuaW5nIH0gZnJvbSAnLi9yZXNvdXJjZXMvZmluZS10dW5pbmcvZmluZS10dW5pbmcnO1xuaW1wb3J0IHsgUmVzcG9uc2VzIH0gZnJvbSAnLi9yZXNvdXJjZXMvcmVzcG9uc2VzL3Jlc3BvbnNlcyc7XG5pbXBvcnQge1xuICBVcGxvYWQsXG4gIFVwbG9hZENvbXBsZXRlUGFyYW1zLFxuICBVcGxvYWRDcmVhdGVQYXJhbXMsXG4gIFVwbG9hZHMgYXMgVXBsb2Fkc0FQSVVwbG9hZHMsXG59IGZyb20gJy4vcmVzb3VyY2VzL3VwbG9hZHMvdXBsb2Fkcyc7XG5pbXBvcnQge1xuICBBdXRvRmlsZUNodW5raW5nU3RyYXRlZ3lQYXJhbSxcbiAgRmlsZUNodW5raW5nU3RyYXRlZ3ksXG4gIEZpbGVDaHVua2luZ1N0cmF0ZWd5UGFyYW0sXG4gIE90aGVyRmlsZUNodW5raW5nU3RyYXRlZ3lPYmplY3QsXG4gIFN0YXRpY0ZpbGVDaHVua2luZ1N0cmF0ZWd5LFxuICBTdGF0aWNGaWxlQ2h1bmtpbmdTdHJhdGVneU9iamVjdCxcbiAgU3RhdGljRmlsZUNodW5raW5nU3RyYXRlZ3lPYmplY3RQYXJhbSxcbiAgVmVjdG9yU3RvcmUsXG4gIFZlY3RvclN0b3JlQ3JlYXRlUGFyYW1zLFxuICBWZWN0b3JTdG9yZURlbGV0ZWQsXG4gIFZlY3RvclN0b3JlTGlzdFBhcmFtcyxcbiAgVmVjdG9yU3RvcmVTZWFyY2hQYXJhbXMsXG4gIFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2UsXG4gIFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2VzUGFnZSxcbiAgVmVjdG9yU3RvcmVVcGRhdGVQYXJhbXMsXG4gIFZlY3RvclN0b3JlcyxcbiAgVmVjdG9yU3RvcmVzUGFnZSxcbn0gZnJvbSAnLi9yZXNvdXJjZXMvdmVjdG9yLXN0b3Jlcy92ZWN0b3Itc3RvcmVzJztcbmltcG9ydCB7XG4gIENoYXRDb21wbGV0aW9uLFxuICBDaGF0Q29tcGxldGlvbkFzc2lzdGFudE1lc3NhZ2VQYXJhbSxcbiAgQ2hhdENvbXBsZXRpb25BdWRpbyxcbiAgQ2hhdENvbXBsZXRpb25BdWRpb1BhcmFtLFxuICBDaGF0Q29tcGxldGlvbkNodW5rLFxuICBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0LFxuICBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW1hZ2UsXG4gIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRJbnB1dEF1ZGlvLFxuICBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0UmVmdXNhbCxcbiAgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydFRleHQsXG4gIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zLFxuICBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtc05vblN0cmVhbWluZyxcbiAgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gIENoYXRDb21wbGV0aW9uRGVsZXRlZCxcbiAgQ2hhdENvbXBsZXRpb25EZXZlbG9wZXJNZXNzYWdlUGFyYW0sXG4gIENoYXRDb21wbGV0aW9uRnVuY3Rpb25DYWxsT3B0aW9uLFxuICBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uTWVzc2FnZVBhcmFtLFxuICBDaGF0Q29tcGxldGlvbkxpc3RQYXJhbXMsXG4gIENoYXRDb21wbGV0aW9uTWVzc2FnZSxcbiAgQ2hhdENvbXBsZXRpb25NZXNzYWdlUGFyYW0sXG4gIENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsLFxuICBDaGF0Q29tcGxldGlvbk1vZGFsaXR5LFxuICBDaGF0Q29tcGxldGlvbk5hbWVkVG9vbENob2ljZSxcbiAgQ2hhdENvbXBsZXRpb25QcmVkaWN0aW9uQ29udGVudCxcbiAgQ2hhdENvbXBsZXRpb25SZWFzb25pbmdFZmZvcnQsXG4gIENoYXRDb21wbGV0aW9uUm9sZSxcbiAgQ2hhdENvbXBsZXRpb25TdG9yZU1lc3NhZ2UsXG4gIENoYXRDb21wbGV0aW9uU3RyZWFtT3B0aW9ucyxcbiAgQ2hhdENvbXBsZXRpb25TeXN0ZW1NZXNzYWdlUGFyYW0sXG4gIENoYXRDb21wbGV0aW9uVG9rZW5Mb2dwcm9iLFxuICBDaGF0Q29tcGxldGlvblRvb2wsXG4gIENoYXRDb21wbGV0aW9uVG9vbENob2ljZU9wdGlvbixcbiAgQ2hhdENvbXBsZXRpb25Ub29sTWVzc2FnZVBhcmFtLFxuICBDaGF0Q29tcGxldGlvblVwZGF0ZVBhcmFtcyxcbiAgQ2hhdENvbXBsZXRpb25Vc2VyTWVzc2FnZVBhcmFtLFxuICBDaGF0Q29tcGxldGlvbnNQYWdlLFxuICBDcmVhdGVDaGF0Q29tcGxldGlvblJlcXVlc3RNZXNzYWdlLFxufSBmcm9tICcuL3Jlc291cmNlcy9jaGF0L2NvbXBsZXRpb25zL2NvbXBsZXRpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIERlZmF1bHRzIHRvIHByb2Nlc3MuZW52WydPUEVOQUlfQVBJX0tFWSddLlxuICAgKi9cbiAgYXBpS2V5Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0cyB0byBwcm9jZXNzLmVudlsnT1BFTkFJX09SR19JRCddLlxuICAgKi9cbiAgb3JnYW5pemF0aW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGVmYXVsdHMgdG8gcHJvY2Vzcy5lbnZbJ09QRU5BSV9QUk9KRUNUX0lEJ10uXG4gICAqL1xuICBwcm9qZWN0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmFzZSBVUkwgZm9yIHRoZSBBUEksIGUuZy4sIFwiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdjIvXCJcbiAgICpcbiAgICogRGVmYXVsdHMgdG8gcHJvY2Vzcy5lbnZbJ09QRU5BSV9CQVNFX1VSTCddLlxuICAgKi9cbiAgYmFzZVVSTD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRoYXQgdGhlIGNsaWVudCBzaG91bGQgd2FpdCBmb3IgYSByZXNwb25zZVxuICAgKiBmcm9tIHRoZSBzZXJ2ZXIgYmVmb3JlIHRpbWluZyBvdXQgYSBzaW5nbGUgcmVxdWVzdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHJlcXVlc3QgdGltZW91dHMgYXJlIHJldHJpZWQgYnkgZGVmYXVsdCwgc28gaW4gYSB3b3JzdC1jYXNlIHNjZW5hcmlvIHlvdSBtYXkgd2FpdFxuICAgKiBtdWNoIGxvbmdlciB0aGFuIHRoaXMgdGltZW91dCBiZWZvcmUgdGhlIHByb21pc2Ugc3VjY2VlZHMgb3IgZmFpbHMuXG4gICAqL1xuICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBbiBIVFRQIGFnZW50IHVzZWQgdG8gbWFuYWdlIEhUVFAoUykgY29ubmVjdGlvbnMuXG4gICAqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgYW4gYWdlbnQgd2lsbCBiZSBjb25zdHJ1Y3RlZCBieSBkZWZhdWx0IGluIHRoZSBOb2RlLmpzIGVudmlyb25tZW50LFxuICAgKiBvdGhlcndpc2Ugbm8gYWdlbnQgaXMgdXNlZC5cbiAgICovXG4gIGh0dHBBZ2VudD86IEFnZW50IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGEgY3VzdG9tIGBmZXRjaGAgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgd2UgdXNlIGBub2RlLWZldGNoYCBvbiBOb2RlLmpzIGFuZCBvdGhlcndpc2UgZXhwZWN0IHRoYXQgYGZldGNoYCBpc1xuICAgKiBkZWZpbmVkIGdsb2JhbGx5LlxuICAgKi9cbiAgZmV0Y2g/OiBDb3JlLkZldGNoIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgY2xpZW50IHdpbGwgcmV0cnkgYSByZXF1ZXN0IGluIGNhc2Ugb2YgYVxuICAgKiB0ZW1wb3JhcnkgZmFpbHVyZSwgbGlrZSBhIG5ldHdvcmsgZXJyb3Igb3IgYSA1WFggZXJyb3IgZnJvbSB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICBtYXhSZXRyaWVzPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGhlYWRlcnMgdG8gaW5jbHVkZSB3aXRoIGV2ZXJ5IHJlcXVlc3QgdG8gdGhlIEFQSS5cbiAgICpcbiAgICogVGhlc2UgY2FuIGJlIHJlbW92ZWQgaW4gaW5kaXZpZHVhbCByZXF1ZXN0cyBieSBleHBsaWNpdGx5IHNldHRpbmcgdGhlXG4gICAqIGhlYWRlciB0byBgdW5kZWZpbmVkYCBvciBgbnVsbGAgaW4gcmVxdWVzdCBvcHRpb25zLlxuICAgKi9cbiAgZGVmYXVsdEhlYWRlcnM/OiBDb3JlLkhlYWRlcnMgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcXVlcnkgcGFyYW1ldGVycyB0byBpbmNsdWRlIHdpdGggZXZlcnkgcmVxdWVzdCB0byB0aGUgQVBJLlxuICAgKlxuICAgKiBUaGVzZSBjYW4gYmUgcmVtb3ZlZCBpbiBpbmRpdmlkdWFsIHJlcXVlc3RzIGJ5IGV4cGxpY2l0bHkgc2V0dGluZyB0aGVcbiAgICogcGFyYW0gdG8gYHVuZGVmaW5lZGAgaW4gcmVxdWVzdCBvcHRpb25zLlxuICAgKi9cbiAgZGVmYXVsdFF1ZXJ5PzogQ29yZS5EZWZhdWx0UXVlcnkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIGNsaWVudC1zaWRlIHVzZSBvZiB0aGlzIGxpYnJhcnkgaXMgbm90IGFsbG93ZWQsIGFzIGl0IHJpc2tzIGV4cG9zaW5nIHlvdXIgc2VjcmV0IEFQSSBjcmVkZW50aWFscyB0byBhdHRhY2tlcnMuXG4gICAqIE9ubHkgc2V0IHRoaXMgb3B0aW9uIHRvIGB0cnVlYCBpZiB5b3UgdW5kZXJzdGFuZCB0aGUgcmlza3MgYW5kIGhhdmUgYXBwcm9wcmlhdGUgbWl0aWdhdGlvbnMgaW4gcGxhY2UuXG4gICAqL1xuICBkYW5nZXJvdXNseUFsbG93QnJvd3Nlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQVBJIENsaWVudCBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUgT3BlbkFJIEFQSS5cbiAqL1xuZXhwb3J0IGNsYXNzIE9wZW5BSSBleHRlbmRzIENvcmUuQVBJQ2xpZW50IHtcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIG9yZ2FuaXphdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcblxuICBwcml2YXRlIF9vcHRpb25zOiBDbGllbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBUEkgQ2xpZW50IGZvciBpbnRlcmZhY2luZyB3aXRoIHRoZSBPcGVuQUkgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW29wdHMuYXBpS2V5PXByb2Nlc3MuZW52WydPUEVOQUlfQVBJX0tFWSddID8/IHVuZGVmaW5lZF1cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0cy5vcmdhbml6YXRpb249cHJvY2Vzcy5lbnZbJ09QRU5BSV9PUkdfSUQnXSA/PyBudWxsXVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRzLnByb2plY3Q9cHJvY2Vzcy5lbnZbJ09QRU5BSV9QUk9KRUNUX0lEJ10gPz8gbnVsbF1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmJhc2VVUkw9cHJvY2Vzcy5lbnZbJ09QRU5BSV9CQVNFX1VSTCddID8/IGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjFdIC0gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmFzZSBVUkwgZm9yIHRoZSBBUEkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy50aW1lb3V0PTEwIG1pbnV0ZXNdIC0gVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlIGNsaWVudCB3aWxsIHdhaXQgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHRpbWluZyBvdXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5odHRwQWdlbnRdIC0gQW4gSFRUUCBhZ2VudCB1c2VkIHRvIG1hbmFnZSBIVFRQKHMpIGNvbm5lY3Rpb25zLlxuICAgKiBAcGFyYW0ge0NvcmUuRmV0Y2h9IFtvcHRzLmZldGNoXSAtIFNwZWNpZnkgYSBjdXN0b20gYGZldGNoYCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1heFJldHJpZXM9Ml0gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhlIGNsaWVudCB3aWxsIHJldHJ5IGEgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtDb3JlLkhlYWRlcnN9IG9wdHMuZGVmYXVsdEhlYWRlcnMgLSBEZWZhdWx0IGhlYWRlcnMgdG8gaW5jbHVkZSB3aXRoIGV2ZXJ5IHJlcXVlc3QgdG8gdGhlIEFQSS5cbiAgICogQHBhcmFtIHtDb3JlLkRlZmF1bHRRdWVyeX0gb3B0cy5kZWZhdWx0UXVlcnkgLSBEZWZhdWx0IHF1ZXJ5IHBhcmFtZXRlcnMgdG8gaW5jbHVkZSB3aXRoIGV2ZXJ5IHJlcXVlc3QgdG8gdGhlIEFQSS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5kYW5nZXJvdXNseUFsbG93QnJvd3Nlcj1mYWxzZV0gLSBCeSBkZWZhdWx0LCBjbGllbnQtc2lkZSB1c2Ugb2YgdGhpcyBsaWJyYXJ5IGlzIG5vdCBhbGxvd2VkLCBhcyBpdCByaXNrcyBleHBvc2luZyB5b3VyIHNlY3JldCBBUEkgY3JlZGVudGlhbHMgdG8gYXR0YWNrZXJzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe1xuICAgIGJhc2VVUkwgPSBDb3JlLnJlYWRFbnYoJ09QRU5BSV9CQVNFX1VSTCcpLFxuICAgIGFwaUtleSA9IENvcmUucmVhZEVudignT1BFTkFJX0FQSV9LRVknKSxcbiAgICBvcmdhbml6YXRpb24gPSBDb3JlLnJlYWRFbnYoJ09QRU5BSV9PUkdfSUQnKSA/PyBudWxsLFxuICAgIHByb2plY3QgPSBDb3JlLnJlYWRFbnYoJ09QRU5BSV9QUk9KRUNUX0lEJykgPz8gbnVsbCxcbiAgICAuLi5vcHRzXG4gIH06IENsaWVudE9wdGlvbnMgPSB7fSkge1xuICAgIGlmIChhcGlLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9ycy5PcGVuQUlFcnJvcihcbiAgICAgICAgXCJUaGUgT1BFTkFJX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbWlzc2luZyBvciBlbXB0eTsgZWl0aGVyIHByb3ZpZGUgaXQsIG9yIGluc3RhbnRpYXRlIHRoZSBPcGVuQUkgY2xpZW50IHdpdGggYW4gYXBpS2V5IG9wdGlvbiwgbGlrZSBuZXcgT3BlbkFJKHsgYXBpS2V5OiAnTXkgQVBJIEtleScgfSkuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnM6IENsaWVudE9wdGlvbnMgPSB7XG4gICAgICBhcGlLZXksXG4gICAgICBvcmdhbml6YXRpb24sXG4gICAgICBwcm9qZWN0LFxuICAgICAgLi4ub3B0cyxcbiAgICAgIGJhc2VVUkw6IGJhc2VVUkwgfHwgYGh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjFgLFxuICAgIH07XG5cbiAgICBpZiAoIW9wdGlvbnMuZGFuZ2Vyb3VzbHlBbGxvd0Jyb3dzZXIgJiYgQ29yZS5pc1J1bm5pbmdJbkJyb3dzZXIoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9ycy5PcGVuQUlFcnJvcihcbiAgICAgICAgXCJJdCBsb29rcyBsaWtlIHlvdSdyZSBydW5uaW5nIGluIGEgYnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxcblxcblRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYXMgaXQgcmlza3MgZXhwb3NpbmcgeW91ciBzZWNyZXQgQVBJIGNyZWRlbnRpYWxzIHRvIGF0dGFja2Vycy5cXG5JZiB5b3UgdW5kZXJzdGFuZCB0aGUgcmlza3MgYW5kIGhhdmUgYXBwcm9wcmlhdGUgbWl0aWdhdGlvbnMgaW4gcGxhY2UsXFxueW91IGNhbiBzZXQgdGhlIGBkYW5nZXJvdXNseUFsbG93QnJvd3NlcmAgb3B0aW9uIHRvIGB0cnVlYCwgZS5nLixcXG5cXG5uZXcgT3BlbkFJKHsgYXBpS2V5LCBkYW5nZXJvdXNseUFsbG93QnJvd3NlcjogdHJ1ZSB9KTtcXG5cXG5odHRwczovL2hlbHAub3BlbmFpLmNvbS9lbi9hcnRpY2xlcy81MTEyNTk1LWJlc3QtcHJhY3RpY2VzLWZvci1hcGkta2V5LXNhZmV0eVxcblwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzdXBlcih7XG4gICAgICBiYXNlVVJMOiBvcHRpb25zLmJhc2VVUkwhLFxuICAgICAgdGltZW91dDogb3B0aW9ucy50aW1lb3V0ID8/IDYwMDAwMCAvKiAxMCBtaW51dGVzICovLFxuICAgICAgaHR0cEFnZW50OiBvcHRpb25zLmh0dHBBZ2VudCxcbiAgICAgIG1heFJldHJpZXM6IG9wdGlvbnMubWF4UmV0cmllcyxcbiAgICAgIGZldGNoOiBvcHRpb25zLmZldGNoLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLm9yZ2FuaXphdGlvbiA9IG9yZ2FuaXphdGlvbjtcbiAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICB9XG5cbiAgY29tcGxldGlvbnM6IEFQSS5Db21wbGV0aW9ucyA9IG5ldyBBUEkuQ29tcGxldGlvbnModGhpcyk7XG4gIGNoYXQ6IEFQSS5DaGF0ID0gbmV3IEFQSS5DaGF0KHRoaXMpO1xuICBlbWJlZGRpbmdzOiBBUEkuRW1iZWRkaW5ncyA9IG5ldyBBUEkuRW1iZWRkaW5ncyh0aGlzKTtcbiAgZmlsZXM6IEFQSS5GaWxlcyA9IG5ldyBBUEkuRmlsZXModGhpcyk7XG4gIGltYWdlczogQVBJLkltYWdlcyA9IG5ldyBBUEkuSW1hZ2VzKHRoaXMpO1xuICBhdWRpbzogQVBJLkF1ZGlvID0gbmV3IEFQSS5BdWRpbyh0aGlzKTtcbiAgbW9kZXJhdGlvbnM6IEFQSS5Nb2RlcmF0aW9ucyA9IG5ldyBBUEkuTW9kZXJhdGlvbnModGhpcyk7XG4gIG1vZGVsczogQVBJLk1vZGVscyA9IG5ldyBBUEkuTW9kZWxzKHRoaXMpO1xuICBmaW5lVHVuaW5nOiBBUEkuRmluZVR1bmluZyA9IG5ldyBBUEkuRmluZVR1bmluZyh0aGlzKTtcbiAgdmVjdG9yU3RvcmVzOiBBUEkuVmVjdG9yU3RvcmVzID0gbmV3IEFQSS5WZWN0b3JTdG9yZXModGhpcyk7XG4gIGJldGE6IEFQSS5CZXRhID0gbmV3IEFQSS5CZXRhKHRoaXMpO1xuICBiYXRjaGVzOiBBUEkuQmF0Y2hlcyA9IG5ldyBBUEkuQmF0Y2hlcyh0aGlzKTtcbiAgdXBsb2FkczogQVBJLlVwbG9hZHMgPSBuZXcgQVBJLlVwbG9hZHModGhpcyk7XG4gIHJlc3BvbnNlczogQVBJLlJlc3BvbnNlcyA9IG5ldyBBUEkuUmVzcG9uc2VzKHRoaXMpO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBkZWZhdWx0UXVlcnkoKTogQ29yZS5EZWZhdWx0UXVlcnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zLmRlZmF1bHRRdWVyeTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBkZWZhdWx0SGVhZGVycyhvcHRzOiBDb3JlLkZpbmFsUmVxdWVzdE9wdGlvbnMpOiBDb3JlLkhlYWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5kZWZhdWx0SGVhZGVycyhvcHRzKSxcbiAgICAgICdPcGVuQUktT3JnYW5pemF0aW9uJzogdGhpcy5vcmdhbml6YXRpb24sXG4gICAgICAnT3BlbkFJLVByb2plY3QnOiB0aGlzLnByb2plY3QsXG4gICAgICAuLi50aGlzLl9vcHRpb25zLmRlZmF1bHRIZWFkZXJzLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXV0aEhlYWRlcnMob3B0czogQ29yZS5GaW5hbFJlcXVlc3RPcHRpb25zKTogQ29yZS5IZWFkZXJzIHtcbiAgICByZXR1cm4geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YCB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0cmluZ2lmeVF1ZXJ5KHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHFzLnN0cmluZ2lmeShxdWVyeSwgeyBhcnJheUZvcm1hdDogJ2JyYWNrZXRzJyB9KTtcbiAgfVxuXG4gIHN0YXRpYyBPcGVuQUkgPSB0aGlzO1xuICBzdGF0aWMgREVGQVVMVF9USU1FT1VUID0gNjAwMDAwOyAvLyAxMCBtaW51dGVzXG5cbiAgc3RhdGljIE9wZW5BSUVycm9yID0gRXJyb3JzLk9wZW5BSUVycm9yO1xuICBzdGF0aWMgQVBJRXJyb3IgPSBFcnJvcnMuQVBJRXJyb3I7XG4gIHN0YXRpYyBBUElDb25uZWN0aW9uRXJyb3IgPSBFcnJvcnMuQVBJQ29ubmVjdGlvbkVycm9yO1xuICBzdGF0aWMgQVBJQ29ubmVjdGlvblRpbWVvdXRFcnJvciA9IEVycm9ycy5BUElDb25uZWN0aW9uVGltZW91dEVycm9yO1xuICBzdGF0aWMgQVBJVXNlckFib3J0RXJyb3IgPSBFcnJvcnMuQVBJVXNlckFib3J0RXJyb3I7XG4gIHN0YXRpYyBOb3RGb3VuZEVycm9yID0gRXJyb3JzLk5vdEZvdW5kRXJyb3I7XG4gIHN0YXRpYyBDb25mbGljdEVycm9yID0gRXJyb3JzLkNvbmZsaWN0RXJyb3I7XG4gIHN0YXRpYyBSYXRlTGltaXRFcnJvciA9IEVycm9ycy5SYXRlTGltaXRFcnJvcjtcbiAgc3RhdGljIEJhZFJlcXVlc3RFcnJvciA9IEVycm9ycy5CYWRSZXF1ZXN0RXJyb3I7XG4gIHN0YXRpYyBBdXRoZW50aWNhdGlvbkVycm9yID0gRXJyb3JzLkF1dGhlbnRpY2F0aW9uRXJyb3I7XG4gIHN0YXRpYyBJbnRlcm5hbFNlcnZlckVycm9yID0gRXJyb3JzLkludGVybmFsU2VydmVyRXJyb3I7XG4gIHN0YXRpYyBQZXJtaXNzaW9uRGVuaWVkRXJyb3IgPSBFcnJvcnMuUGVybWlzc2lvbkRlbmllZEVycm9yO1xuICBzdGF0aWMgVW5wcm9jZXNzYWJsZUVudGl0eUVycm9yID0gRXJyb3JzLlVucHJvY2Vzc2FibGVFbnRpdHlFcnJvcjtcblxuICBzdGF0aWMgdG9GaWxlID0gVXBsb2Fkcy50b0ZpbGU7XG4gIHN0YXRpYyBmaWxlRnJvbVBhdGggPSBVcGxvYWRzLmZpbGVGcm9tUGF0aDtcbn1cblxuT3BlbkFJLkNvbXBsZXRpb25zID0gQ29tcGxldGlvbnM7XG5PcGVuQUkuQ2hhdCA9IENoYXQ7XG5PcGVuQUkuQ2hhdENvbXBsZXRpb25zUGFnZSA9IENoYXRDb21wbGV0aW9uc1BhZ2U7XG5PcGVuQUkuRW1iZWRkaW5ncyA9IEVtYmVkZGluZ3M7XG5PcGVuQUkuRmlsZXMgPSBGaWxlcztcbk9wZW5BSS5GaWxlT2JqZWN0c1BhZ2UgPSBGaWxlT2JqZWN0c1BhZ2U7XG5PcGVuQUkuSW1hZ2VzID0gSW1hZ2VzO1xuT3BlbkFJLkF1ZGlvID0gQXVkaW87XG5PcGVuQUkuTW9kZXJhdGlvbnMgPSBNb2RlcmF0aW9ucztcbk9wZW5BSS5Nb2RlbHMgPSBNb2RlbHM7XG5PcGVuQUkuTW9kZWxzUGFnZSA9IE1vZGVsc1BhZ2U7XG5PcGVuQUkuRmluZVR1bmluZyA9IEZpbmVUdW5pbmc7XG5PcGVuQUkuVmVjdG9yU3RvcmVzID0gVmVjdG9yU3RvcmVzO1xuT3BlbkFJLlZlY3RvclN0b3Jlc1BhZ2UgPSBWZWN0b3JTdG9yZXNQYWdlO1xuT3BlbkFJLlZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2VzUGFnZSA9IFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2VzUGFnZTtcbk9wZW5BSS5CZXRhID0gQmV0YTtcbk9wZW5BSS5CYXRjaGVzID0gQmF0Y2hlcztcbk9wZW5BSS5CYXRjaGVzUGFnZSA9IEJhdGNoZXNQYWdlO1xuT3BlbkFJLlVwbG9hZHMgPSBVcGxvYWRzQVBJVXBsb2Fkcztcbk9wZW5BSS5SZXNwb25zZXMgPSBSZXNwb25zZXM7XG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgT3BlbkFJIHtcbiAgZXhwb3J0IHR5cGUgUmVxdWVzdE9wdGlvbnMgPSBDb3JlLlJlcXVlc3RPcHRpb25zO1xuXG4gIGV4cG9ydCBpbXBvcnQgUGFnZSA9IFBhZ2luYXRpb24uUGFnZTtcbiAgZXhwb3J0IHsgdHlwZSBQYWdlUmVzcG9uc2UgYXMgUGFnZVJlc3BvbnNlIH07XG5cbiAgZXhwb3J0IGltcG9ydCBDdXJzb3JQYWdlID0gUGFnaW5hdGlvbi5DdXJzb3JQYWdlO1xuICBleHBvcnQgeyB0eXBlIEN1cnNvclBhZ2VQYXJhbXMgYXMgQ3Vyc29yUGFnZVBhcmFtcywgdHlwZSBDdXJzb3JQYWdlUmVzcG9uc2UgYXMgQ3Vyc29yUGFnZVJlc3BvbnNlIH07XG5cbiAgZXhwb3J0IHtcbiAgICBDb21wbGV0aW9ucyBhcyBDb21wbGV0aW9ucyxcbiAgICB0eXBlIENvbXBsZXRpb24gYXMgQ29tcGxldGlvbixcbiAgICB0eXBlIENvbXBsZXRpb25DaG9pY2UgYXMgQ29tcGxldGlvbkNob2ljZSxcbiAgICB0eXBlIENvbXBsZXRpb25Vc2FnZSBhcyBDb21wbGV0aW9uVXNhZ2UsXG4gICAgdHlwZSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zIGFzIENvbXBsZXRpb25DcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nIGFzIENvbXBsZXRpb25DcmVhdGVQYXJhbXNOb25TdHJlYW1pbmcsXG4gICAgdHlwZSBDb21wbGV0aW9uQ3JlYXRlUGFyYW1zU3RyZWFtaW5nIGFzIENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gIH07XG5cbiAgZXhwb3J0IHtcbiAgICBDaGF0IGFzIENoYXQsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbiBhcyBDaGF0Q29tcGxldGlvbixcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQXNzaXN0YW50TWVzc2FnZVBhcmFtIGFzIENoYXRDb21wbGV0aW9uQXNzaXN0YW50TWVzc2FnZVBhcmFtLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25BdWRpbyBhcyBDaGF0Q29tcGxldGlvbkF1ZGlvLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25BdWRpb1BhcmFtIGFzIENoYXRDb21wbGV0aW9uQXVkaW9QYXJhbSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ2h1bmsgYXMgQ2hhdENvbXBsZXRpb25DaHVuayxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnQgYXMgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydCxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRJbWFnZSBhcyBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW1hZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW5wdXRBdWRpbyBhcyBDaGF0Q29tcGxldGlvbkNvbnRlbnRQYXJ0SW5wdXRBdWRpbyxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRSZWZ1c2FsIGFzIENoYXRDb21wbGV0aW9uQ29udGVudFBhcnRSZWZ1c2FsLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydFRleHQgYXMgQ2hhdENvbXBsZXRpb25Db250ZW50UGFydFRleHQsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkRlbGV0ZWQgYXMgQ2hhdENvbXBsZXRpb25EZWxldGVkLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25EZXZlbG9wZXJNZXNzYWdlUGFyYW0gYXMgQ2hhdENvbXBsZXRpb25EZXZlbG9wZXJNZXNzYWdlUGFyYW0sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uQ2FsbE9wdGlvbiBhcyBDaGF0Q29tcGxldGlvbkZ1bmN0aW9uQ2FsbE9wdGlvbixcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uRnVuY3Rpb25NZXNzYWdlUGFyYW0gYXMgQ2hhdENvbXBsZXRpb25GdW5jdGlvbk1lc3NhZ2VQYXJhbSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uTWVzc2FnZSBhcyBDaGF0Q29tcGxldGlvbk1lc3NhZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSBhcyBDaGF0Q29tcGxldGlvbk1lc3NhZ2VQYXJhbSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsIGFzIENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Nb2RhbGl0eSBhcyBDaGF0Q29tcGxldGlvbk1vZGFsaXR5LFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25OYW1lZFRvb2xDaG9pY2UgYXMgQ2hhdENvbXBsZXRpb25OYW1lZFRvb2xDaG9pY2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblByZWRpY3Rpb25Db250ZW50IGFzIENoYXRDb21wbGV0aW9uUHJlZGljdGlvbkNvbnRlbnQsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblJvbGUgYXMgQ2hhdENvbXBsZXRpb25Sb2xlLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25TdG9yZU1lc3NhZ2UgYXMgQ2hhdENvbXBsZXRpb25TdG9yZU1lc3NhZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblN0cmVhbU9wdGlvbnMgYXMgQ2hhdENvbXBsZXRpb25TdHJlYW1PcHRpb25zLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25TeXN0ZW1NZXNzYWdlUGFyYW0gYXMgQ2hhdENvbXBsZXRpb25TeXN0ZW1NZXNzYWdlUGFyYW0sXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYiBhcyBDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYixcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uVG9vbCBhcyBDaGF0Q29tcGxldGlvblRvb2wsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblRvb2xDaG9pY2VPcHRpb24gYXMgQ2hhdENvbXBsZXRpb25Ub29sQ2hvaWNlT3B0aW9uLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25Ub29sTWVzc2FnZVBhcmFtIGFzIENoYXRDb21wbGV0aW9uVG9vbE1lc3NhZ2VQYXJhbSxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uVXNlck1lc3NhZ2VQYXJhbSBhcyBDaGF0Q29tcGxldGlvblVzZXJNZXNzYWdlUGFyYW0sXG4gICAgdHlwZSBDcmVhdGVDaGF0Q29tcGxldGlvblJlcXVlc3RNZXNzYWdlIGFzIENyZWF0ZUNoYXRDb21wbGV0aW9uUmVxdWVzdE1lc3NhZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblJlYXNvbmluZ0VmZm9ydCBhcyBDaGF0Q29tcGxldGlvblJlYXNvbmluZ0VmZm9ydCxcbiAgICBDaGF0Q29tcGxldGlvbnNQYWdlIGFzIENoYXRDb21wbGV0aW9uc1BhZ2UsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcyBhcyBDaGF0Q29tcGxldGlvbkNyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nIGFzIENoYXRDb21wbGV0aW9uQ3JlYXRlUGFyYW1zTm9uU3RyZWFtaW5nLFxuICAgIHR5cGUgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcgYXMgQ2hhdENvbXBsZXRpb25DcmVhdGVQYXJhbXNTdHJlYW1pbmcsXG4gICAgdHlwZSBDaGF0Q29tcGxldGlvblVwZGF0ZVBhcmFtcyBhcyBDaGF0Q29tcGxldGlvblVwZGF0ZVBhcmFtcyxcbiAgICB0eXBlIENoYXRDb21wbGV0aW9uTGlzdFBhcmFtcyBhcyBDaGF0Q29tcGxldGlvbkxpc3RQYXJhbXMsXG4gIH07XG5cbiAgZXhwb3J0IHtcbiAgICBFbWJlZGRpbmdzIGFzIEVtYmVkZGluZ3MsXG4gICAgdHlwZSBDcmVhdGVFbWJlZGRpbmdSZXNwb25zZSBhcyBDcmVhdGVFbWJlZGRpbmdSZXNwb25zZSxcbiAgICB0eXBlIEVtYmVkZGluZyBhcyBFbWJlZGRpbmcsXG4gICAgdHlwZSBFbWJlZGRpbmdNb2RlbCBhcyBFbWJlZGRpbmdNb2RlbCxcbiAgICB0eXBlIEVtYmVkZGluZ0NyZWF0ZVBhcmFtcyBhcyBFbWJlZGRpbmdDcmVhdGVQYXJhbXMsXG4gIH07XG5cbiAgZXhwb3J0IHtcbiAgICBGaWxlcyBhcyBGaWxlcyxcbiAgICB0eXBlIEZpbGVDb250ZW50IGFzIEZpbGVDb250ZW50LFxuICAgIHR5cGUgRmlsZURlbGV0ZWQgYXMgRmlsZURlbGV0ZWQsXG4gICAgdHlwZSBGaWxlT2JqZWN0IGFzIEZpbGVPYmplY3QsXG4gICAgdHlwZSBGaWxlUHVycG9zZSBhcyBGaWxlUHVycG9zZSxcbiAgICBGaWxlT2JqZWN0c1BhZ2UgYXMgRmlsZU9iamVjdHNQYWdlLFxuICAgIHR5cGUgRmlsZUNyZWF0ZVBhcmFtcyBhcyBGaWxlQ3JlYXRlUGFyYW1zLFxuICAgIHR5cGUgRmlsZUxpc3RQYXJhbXMgYXMgRmlsZUxpc3RQYXJhbXMsXG4gIH07XG5cbiAgZXhwb3J0IHtcbiAgICBJbWFnZXMgYXMgSW1hZ2VzLFxuICAgIHR5cGUgSW1hZ2UgYXMgSW1hZ2UsXG4gICAgdHlwZSBJbWFnZU1vZGVsIGFzIEltYWdlTW9kZWwsXG4gICAgdHlwZSBJbWFnZXNSZXNwb25zZSBhcyBJbWFnZXNSZXNwb25zZSxcbiAgICB0eXBlIEltYWdlQ3JlYXRlVmFyaWF0aW9uUGFyYW1zIGFzIEltYWdlQ3JlYXRlVmFyaWF0aW9uUGFyYW1zLFxuICAgIHR5cGUgSW1hZ2VFZGl0UGFyYW1zIGFzIEltYWdlRWRpdFBhcmFtcyxcbiAgICB0eXBlIEltYWdlR2VuZXJhdGVQYXJhbXMgYXMgSW1hZ2VHZW5lcmF0ZVBhcmFtcyxcbiAgfTtcblxuICBleHBvcnQgeyBBdWRpbyBhcyBBdWRpbywgdHlwZSBBdWRpb01vZGVsIGFzIEF1ZGlvTW9kZWwsIHR5cGUgQXVkaW9SZXNwb25zZUZvcm1hdCBhcyBBdWRpb1Jlc3BvbnNlRm9ybWF0IH07XG5cbiAgZXhwb3J0IHtcbiAgICBNb2RlcmF0aW9ucyBhcyBNb2RlcmF0aW9ucyxcbiAgICB0eXBlIE1vZGVyYXRpb24gYXMgTW9kZXJhdGlvbixcbiAgICB0eXBlIE1vZGVyYXRpb25JbWFnZVVSTElucHV0IGFzIE1vZGVyYXRpb25JbWFnZVVSTElucHV0LFxuICAgIHR5cGUgTW9kZXJhdGlvbk1vZGVsIGFzIE1vZGVyYXRpb25Nb2RlbCxcbiAgICB0eXBlIE1vZGVyYXRpb25NdWx0aU1vZGFsSW5wdXQgYXMgTW9kZXJhdGlvbk11bHRpTW9kYWxJbnB1dCxcbiAgICB0eXBlIE1vZGVyYXRpb25UZXh0SW5wdXQgYXMgTW9kZXJhdGlvblRleHRJbnB1dCxcbiAgICB0eXBlIE1vZGVyYXRpb25DcmVhdGVSZXNwb25zZSBhcyBNb2RlcmF0aW9uQ3JlYXRlUmVzcG9uc2UsXG4gICAgdHlwZSBNb2RlcmF0aW9uQ3JlYXRlUGFyYW1zIGFzIE1vZGVyYXRpb25DcmVhdGVQYXJhbXMsXG4gIH07XG5cbiAgZXhwb3J0IHtcbiAgICBNb2RlbHMgYXMgTW9kZWxzLFxuICAgIHR5cGUgTW9kZWwgYXMgTW9kZWwsXG4gICAgdHlwZSBNb2RlbERlbGV0ZWQgYXMgTW9kZWxEZWxldGVkLFxuICAgIE1vZGVsc1BhZ2UgYXMgTW9kZWxzUGFnZSxcbiAgfTtcblxuICBleHBvcnQgeyBGaW5lVHVuaW5nIGFzIEZpbmVUdW5pbmcgfTtcblxuICBleHBvcnQge1xuICAgIFZlY3RvclN0b3JlcyBhcyBWZWN0b3JTdG9yZXMsXG4gICAgdHlwZSBBdXRvRmlsZUNodW5raW5nU3RyYXRlZ3lQYXJhbSBhcyBBdXRvRmlsZUNodW5raW5nU3RyYXRlZ3lQYXJhbSxcbiAgICB0eXBlIEZpbGVDaHVua2luZ1N0cmF0ZWd5IGFzIEZpbGVDaHVua2luZ1N0cmF0ZWd5LFxuICAgIHR5cGUgRmlsZUNodW5raW5nU3RyYXRlZ3lQYXJhbSBhcyBGaWxlQ2h1bmtpbmdTdHJhdGVneVBhcmFtLFxuICAgIHR5cGUgT3RoZXJGaWxlQ2h1bmtpbmdTdHJhdGVneU9iamVjdCBhcyBPdGhlckZpbGVDaHVua2luZ1N0cmF0ZWd5T2JqZWN0LFxuICAgIHR5cGUgU3RhdGljRmlsZUNodW5raW5nU3RyYXRlZ3kgYXMgU3RhdGljRmlsZUNodW5raW5nU3RyYXRlZ3ksXG4gICAgdHlwZSBTdGF0aWNGaWxlQ2h1bmtpbmdTdHJhdGVneU9iamVjdCBhcyBTdGF0aWNGaWxlQ2h1bmtpbmdTdHJhdGVneU9iamVjdCxcbiAgICB0eXBlIFN0YXRpY0ZpbGVDaHVua2luZ1N0cmF0ZWd5T2JqZWN0UGFyYW0gYXMgU3RhdGljRmlsZUNodW5raW5nU3RyYXRlZ3lPYmplY3RQYXJhbSxcbiAgICB0eXBlIFZlY3RvclN0b3JlIGFzIFZlY3RvclN0b3JlLFxuICAgIHR5cGUgVmVjdG9yU3RvcmVEZWxldGVkIGFzIFZlY3RvclN0b3JlRGVsZXRlZCxcbiAgICB0eXBlIFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2UgYXMgVmVjdG9yU3RvcmVTZWFyY2hSZXNwb25zZSxcbiAgICBWZWN0b3JTdG9yZXNQYWdlIGFzIFZlY3RvclN0b3Jlc1BhZ2UsXG4gICAgVmVjdG9yU3RvcmVTZWFyY2hSZXNwb25zZXNQYWdlIGFzIFZlY3RvclN0b3JlU2VhcmNoUmVzcG9uc2VzUGFnZSxcbiAgICB0eXBlIFZlY3RvclN0b3JlQ3JlYXRlUGFyYW1zIGFzIFZlY3RvclN0b3JlQ3JlYXRlUGFyYW1zLFxuICAgIHR5cGUgVmVjdG9yU3RvcmVVcGRhdGVQYXJhbXMgYXMgVmVjdG9yU3RvcmVVcGRhdGVQYXJhbXMsXG4gICAgdHlwZSBWZWN0b3JTdG9yZUxpc3RQYXJhbXMgYXMgVmVjdG9yU3RvcmVMaXN0UGFyYW1zLFxuICAgIHR5cGUgVmVjdG9yU3RvcmVTZWFyY2hQYXJhbXMgYXMgVmVjdG9yU3RvcmVTZWFyY2hQYXJhbXMsXG4gIH07XG5cbiAgZXhwb3J0IHsgQmV0YSBhcyBCZXRhIH07XG5cbiAgZXhwb3J0IHtcbiAgICBCYXRjaGVzIGFzIEJhdGNoZXMsXG4gICAgdHlwZSBCYXRjaCBhcyBCYXRjaCxcbiAgICB0eXBlIEJhdGNoRXJyb3IgYXMgQmF0Y2hFcnJvcixcbiAgICB0eXBlIEJhdGNoUmVxdWVzdENvdW50cyBhcyBCYXRjaFJlcXVlc3RDb3VudHMsXG4gICAgQmF0Y2hlc1BhZ2UgYXMgQmF0Y2hlc1BhZ2UsXG4gICAgdHlwZSBCYXRjaENyZWF0ZVBhcmFtcyBhcyBCYXRjaENyZWF0ZVBhcmFtcyxcbiAgICB0eXBlIEJhdGNoTGlzdFBhcmFtcyBhcyBCYXRjaExpc3RQYXJhbXMsXG4gIH07XG5cbiAgZXhwb3J0IHtcbiAgICBVcGxvYWRzQVBJVXBsb2FkcyBhcyBVcGxvYWRzLFxuICAgIHR5cGUgVXBsb2FkIGFzIFVwbG9hZCxcbiAgICB0eXBlIFVwbG9hZENyZWF0ZVBhcmFtcyBhcyBVcGxvYWRDcmVhdGVQYXJhbXMsXG4gICAgdHlwZSBVcGxvYWRDb21wbGV0ZVBhcmFtcyBhcyBVcGxvYWRDb21wbGV0ZVBhcmFtcyxcbiAgfTtcblxuICBleHBvcnQgeyBSZXNwb25zZXMgYXMgUmVzcG9uc2VzIH07XG5cbiAgZXhwb3J0IHR5cGUgQWxsTW9kZWxzID0gQVBJLkFsbE1vZGVscztcbiAgZXhwb3J0IHR5cGUgQ2hhdE1vZGVsID0gQVBJLkNoYXRNb2RlbDtcbiAgZXhwb3J0IHR5cGUgQ29tcGFyaXNvbkZpbHRlciA9IEFQSS5Db21wYXJpc29uRmlsdGVyO1xuICBleHBvcnQgdHlwZSBDb21wb3VuZEZpbHRlciA9IEFQSS5Db21wb3VuZEZpbHRlcjtcbiAgZXhwb3J0IHR5cGUgRXJyb3JPYmplY3QgPSBBUEkuRXJyb3JPYmplY3Q7XG4gIGV4cG9ydCB0eXBlIEZ1bmN0aW9uRGVmaW5pdGlvbiA9IEFQSS5GdW5jdGlvbkRlZmluaXRpb247XG4gIGV4cG9ydCB0eXBlIEZ1bmN0aW9uUGFyYW1ldGVycyA9IEFQSS5GdW5jdGlvblBhcmFtZXRlcnM7XG4gIGV4cG9ydCB0eXBlIE1ldGFkYXRhID0gQVBJLk1ldGFkYXRhO1xuICBleHBvcnQgdHlwZSBSZWFzb25pbmcgPSBBUEkuUmVhc29uaW5nO1xuICBleHBvcnQgdHlwZSBSZWFzb25pbmdFZmZvcnQgPSBBUEkuUmVhc29uaW5nRWZmb3J0O1xuICBleHBvcnQgdHlwZSBSZXNwb25zZUZvcm1hdEpTT05PYmplY3QgPSBBUEkuUmVzcG9uc2VGb3JtYXRKU09OT2JqZWN0O1xuICBleHBvcnQgdHlwZSBSZXNwb25zZUZvcm1hdEpTT05TY2hlbWEgPSBBUEkuUmVzcG9uc2VGb3JtYXRKU09OU2NoZW1hO1xuICBleHBvcnQgdHlwZSBSZXNwb25zZUZvcm1hdFRleHQgPSBBUEkuUmVzcG9uc2VGb3JtYXRUZXh0O1xuICBleHBvcnQgdHlwZSBSZXNwb25zZXNNb2RlbCA9IEFQSS5SZXNwb25zZXNNb2RlbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBenVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBUEkgQ2xpZW50IGZvciBpbnRlcmZhY2luZyB3aXRoIHRoZSBBenVyZSBPcGVuQUkgQVBJLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBenVyZUNsaWVudE9wdGlvbnMgZXh0ZW5kcyBDbGllbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIERlZmF1bHRzIHRvIHByb2Nlc3MuZW52WydPUEVOQUlfQVBJX1ZFUlNJT04nXS5cbiAgICovXG4gIGFwaVZlcnNpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFlvdXIgQXp1cmUgZW5kcG9pbnQsIGluY2x1ZGluZyB0aGUgcmVzb3VyY2UsIGUuZy4gYGh0dHBzOi8vZXhhbXBsZS1yZXNvdXJjZS5henVyZS5vcGVuYWkuY29tL2BcbiAgICovXG4gIGVuZHBvaW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIG1vZGVsIGRlcGxveW1lbnQsIGlmIGdpdmVuLCBzZXRzIHRoZSBiYXNlIGNsaWVudCBVUkwgdG8gaW5jbHVkZSBgL2RlcGxveW1lbnRzL3tkZXBsb3ltZW50fWAuXG4gICAqIE5vdGU6IHRoaXMgbWVhbnMgeW91IHdvbid0IGJlIGFibGUgdG8gdXNlIG5vbi1kZXBsb3ltZW50IGVuZHBvaW50cy4gTm90IHN1cHBvcnRlZCB3aXRoIEFzc2lzdGFudHMgQVBJcy5cbiAgICovXG4gIGRlcGxveW1lbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIERlZmF1bHRzIHRvIHByb2Nlc3MuZW52WydBWlVSRV9PUEVOQUlfQVBJX0tFWSddLlxuICAgKi9cbiAgYXBpS2V5Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBhY2Nlc3MgdG9rZW4gZm9yIE1pY3Jvc29mdCBFbnRyYSAoZm9ybWVybHkga25vd24gYXMgQXp1cmUgQWN0aXZlIERpcmVjdG9yeSksXG4gICAqIHdoaWNoIHdpbGwgYmUgaW52b2tlZCBvbiBldmVyeSByZXF1ZXN0LlxuICAgKi9cbiAgYXp1cmVBRFRva2VuUHJvdmlkZXI/OiAoKCkgPT4gUHJvbWlzZTxzdHJpbmc+KSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEFQSSBDbGllbnQgZm9yIGludGVyZmFjaW5nIHdpdGggdGhlIEF6dXJlIE9wZW5BSSBBUEkuICovXG5leHBvcnQgY2xhc3MgQXp1cmVPcGVuQUkgZXh0ZW5kcyBPcGVuQUkge1xuICBwcml2YXRlIF9henVyZUFEVG9rZW5Qcm92aWRlcjogKCgpID0+IFByb21pc2U8c3RyaW5nPikgfCB1bmRlZmluZWQ7XG4gIGRlcGxveW1lbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGFwaVZlcnNpb246IHN0cmluZyA9ICcnO1xuICAvKipcbiAgICogQVBJIENsaWVudCBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUgQXp1cmUgT3BlbkFJIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IFtvcHRzLmFwaVZlcnNpb249cHJvY2Vzcy5lbnZbJ09QRU5BSV9BUElfVkVSU0lPTiddID8/IHVuZGVmaW5lZF1cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IFtvcHRzLmVuZHBvaW50PXByb2Nlc3MuZW52WydBWlVSRV9PUEVOQUlfRU5EUE9JTlQnXSA/PyB1bmRlZmluZWRdIC0gWW91ciBBenVyZSBlbmRwb2ludCwgaW5jbHVkaW5nIHRoZSByZXNvdXJjZSwgZS5nLiBgaHR0cHM6Ly9leGFtcGxlLXJlc291cmNlLmF6dXJlLm9wZW5haS5jb20vYFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW29wdHMuYXBpS2V5PXByb2Nlc3MuZW52WydBWlVSRV9PUEVOQUlfQVBJX0tFWSddID8/IHVuZGVmaW5lZF1cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IG9wdHMuZGVwbG95bWVudCAtIEEgbW9kZWwgZGVwbG95bWVudCwgaWYgZ2l2ZW4sIHNldHMgdGhlIGJhc2UgY2xpZW50IFVSTCB0byBpbmNsdWRlIGAvZGVwbG95bWVudHMve2RlcGxveW1lbnR9YC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0cy5vcmdhbml6YXRpb249cHJvY2Vzcy5lbnZbJ09QRU5BSV9PUkdfSUQnXSA/PyBudWxsXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuYmFzZVVSTD1wcm9jZXNzLmVudlsnT1BFTkFJX0JBU0VfVVJMJ11dIC0gU2V0cyB0aGUgYmFzZSBVUkwgZm9yIHRoZSBBUEksIGUuZy4gYGh0dHBzOi8vZXhhbXBsZS1yZXNvdXJjZS5henVyZS5vcGVuYWkuY29tL29wZW5haS9gLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMudGltZW91dD0xMCBtaW51dGVzXSAtIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRoZSBjbGllbnQgd2lsbCB3YWl0IGZvciBhIHJlc3BvbnNlIGJlZm9yZSB0aW1pbmcgb3V0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuaHR0cEFnZW50XSAtIEFuIEhUVFAgYWdlbnQgdXNlZCB0byBtYW5hZ2UgSFRUUChzKSBjb25uZWN0aW9ucy5cbiAgICogQHBhcmFtIHtDb3JlLkZldGNofSBbb3B0cy5mZXRjaF0gLSBTcGVjaWZ5IGEgY3VzdG9tIGBmZXRjaGAgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5tYXhSZXRyaWVzPTJdIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoZSBjbGllbnQgd2lsbCByZXRyeSBhIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7Q29yZS5IZWFkZXJzfSBvcHRzLmRlZmF1bHRIZWFkZXJzIC0gRGVmYXVsdCBoZWFkZXJzIHRvIGluY2x1ZGUgd2l0aCBldmVyeSByZXF1ZXN0IHRvIHRoZSBBUEkuXG4gICAqIEBwYXJhbSB7Q29yZS5EZWZhdWx0UXVlcnl9IG9wdHMuZGVmYXVsdFF1ZXJ5IC0gRGVmYXVsdCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUgd2l0aCBldmVyeSByZXF1ZXN0IHRvIHRoZSBBUEkuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZGFuZ2Vyb3VzbHlBbGxvd0Jyb3dzZXI9ZmFsc2VdIC0gQnkgZGVmYXVsdCwgY2xpZW50LXNpZGUgdXNlIG9mIHRoaXMgbGlicmFyeSBpcyBub3QgYWxsb3dlZCwgYXMgaXQgcmlza3MgZXhwb3NpbmcgeW91ciBzZWNyZXQgQVBJIGNyZWRlbnRpYWxzIHRvIGF0dGFja2Vycy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBiYXNlVVJMID0gQ29yZS5yZWFkRW52KCdPUEVOQUlfQkFTRV9VUkwnKSxcbiAgICBhcGlLZXkgPSBDb3JlLnJlYWRFbnYoJ0FaVVJFX09QRU5BSV9BUElfS0VZJyksXG4gICAgYXBpVmVyc2lvbiA9IENvcmUucmVhZEVudignT1BFTkFJX0FQSV9WRVJTSU9OJyksXG4gICAgZW5kcG9pbnQsXG4gICAgZGVwbG95bWVudCxcbiAgICBhenVyZUFEVG9rZW5Qcm92aWRlcixcbiAgICBkYW5nZXJvdXNseUFsbG93QnJvd3NlcixcbiAgICAuLi5vcHRzXG4gIH06IEF6dXJlQ2xpZW50T3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFhcGlWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3JzLk9wZW5BSUVycm9yKFxuICAgICAgICBcIlRoZSBPUEVOQUlfQVBJX1ZFUlNJT04gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbWlzc2luZyBvciBlbXB0eTsgZWl0aGVyIHByb3ZpZGUgaXQsIG9yIGluc3RhbnRpYXRlIHRoZSBBenVyZU9wZW5BSSBjbGllbnQgd2l0aCBhbiBhcGlWZXJzaW9uIG9wdGlvbiwgbGlrZSBuZXcgQXp1cmVPcGVuQUkoeyBhcGlWZXJzaW9uOiAnTXkgQVBJIFZlcnNpb24nIH0pLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGF6dXJlQURUb2tlblByb3ZpZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkYW5nZXJvdXNseUFsbG93QnJvd3NlciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhenVyZUFEVG9rZW5Qcm92aWRlciAmJiAhYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3JzLk9wZW5BSUVycm9yKFxuICAgICAgICAnTWlzc2luZyBjcmVkZW50aWFscy4gUGxlYXNlIHBhc3Mgb25lIG9mIGBhcGlLZXlgIGFuZCBgYXp1cmVBRFRva2VuUHJvdmlkZXJgLCBvciBzZXQgdGhlIGBBWlVSRV9PUEVOQUlfQVBJX0tFWWAgZW52aXJvbm1lbnQgdmFyaWFibGUuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGF6dXJlQURUb2tlblByb3ZpZGVyICYmIGFwaUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9ycy5PcGVuQUlFcnJvcihcbiAgICAgICAgJ1RoZSBgYXBpS2V5YCBhbmQgYGF6dXJlQURUb2tlblByb3ZpZGVyYCBhcmd1bWVudHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZTsgb25seSBvbmUgY2FuIGJlIHBhc3NlZCBhdCBhIHRpbWUuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZGVmaW5lIGEgc2VudGluZWwgdmFsdWUgdG8gYXZvaWQgYW55IHR5cGluZyBpc3N1ZXNcbiAgICBhcGlLZXkgPz89IEFQSV9LRVlfU0VOVElORUw7XG5cbiAgICBvcHRzLmRlZmF1bHRRdWVyeSA9IHsgLi4ub3B0cy5kZWZhdWx0UXVlcnksICdhcGktdmVyc2lvbic6IGFwaVZlcnNpb24gfTtcblxuICAgIGlmICghYmFzZVVSTCkge1xuICAgICAgaWYgKCFlbmRwb2ludCkge1xuICAgICAgICBlbmRwb2ludCA9IHByb2Nlc3MuZW52WydBWlVSRV9PUEVOQUlfRU5EUE9JTlQnXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFlbmRwb2ludCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JzLk9wZW5BSUVycm9yKFxuICAgICAgICAgICdNdXN0IHByb3ZpZGUgb25lIG9mIHRoZSBgYmFzZVVSTGAgb3IgYGVuZHBvaW50YCBhcmd1bWVudHMsIG9yIHRoZSBgQVpVUkVfT1BFTkFJX0VORFBPSU5UYCBlbnZpcm9ubWVudCB2YXJpYWJsZScsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwgPSBgJHtlbmRwb2ludH0vb3BlbmFpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVuZHBvaW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcnMuT3BlbkFJRXJyb3IoJ2Jhc2VVUkwgYW5kIGVuZHBvaW50IGFyZSBtdXR1YWxseSBleGNsdXNpdmUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcih7XG4gICAgICBhcGlLZXksXG4gICAgICBiYXNlVVJMLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIC4uLihkYW5nZXJvdXNseUFsbG93QnJvd3NlciAhPT0gdW5kZWZpbmVkID8geyBkYW5nZXJvdXNseUFsbG93QnJvd3NlciB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fYXp1cmVBRFRva2VuUHJvdmlkZXIgPSBhenVyZUFEVG9rZW5Qcm92aWRlcjtcbiAgICB0aGlzLmFwaVZlcnNpb24gPSBhcGlWZXJzaW9uO1xuICAgIHRoaXMuZGVwbG95bWVudE5hbWUgPSBkZXBsb3ltZW50O1xuICB9XG5cbiAgb3ZlcnJpZGUgYnVpbGRSZXF1ZXN0KFxuICAgIG9wdGlvbnM6IENvcmUuRmluYWxSZXF1ZXN0T3B0aW9uczx1bmtub3duPixcbiAgICBwcm9wczogeyByZXRyeUNvdW50PzogbnVtYmVyIH0gPSB7fSxcbiAgKToge1xuICAgIHJlcTogUmVxdWVzdEluaXQ7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgdGltZW91dDogbnVtYmVyO1xuICB9IHtcbiAgICBpZiAoX2RlcGxveW1lbnRzX2VuZHBvaW50cy5oYXMob3B0aW9ucy5wYXRoKSAmJiBvcHRpb25zLm1ldGhvZCA9PT0gJ3Bvc3QnICYmIG9wdGlvbnMuYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUNvcmUuaXNPYmoob3B0aW9ucy5ib2R5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlcXVlc3QgYm9keSB0byBiZSBhbiBvYmplY3QnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5kZXBsb3ltZW50TmFtZSB8fCBvcHRpb25zLmJvZHlbJ21vZGVsJ10gfHwgb3B0aW9ucy5fX21ldGFkYXRhPy5bJ21vZGVsJ107XG4gICAgICBpZiAobW9kZWwgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5iYXNlVVJMLmluY2x1ZGVzKCcvZGVwbG95bWVudHMnKSkge1xuICAgICAgICBvcHRpb25zLnBhdGggPSBgL2RlcGxveW1lbnRzLyR7bW9kZWx9JHtvcHRpb25zLnBhdGh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmJ1aWxkUmVxdWVzdChvcHRpb25zLCBwcm9wcyk7XG4gIH1cblxuICBhc3luYyBfZ2V0QXp1cmVBRFRva2VuKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9henVyZUFEVG9rZW5Qcm92aWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLl9henVyZUFEVG9rZW5Qcm92aWRlcigpO1xuICAgICAgaWYgKCF0b2tlbiB8fCB0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcnMuT3BlbkFJRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkICdhenVyZUFEVG9rZW5Qcm92aWRlcicgYXJndW1lbnQgdG8gcmV0dXJuIGEgc3RyaW5nIGJ1dCBpdCByZXR1cm5lZCAke3Rva2VufWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXV0aEhlYWRlcnMob3B0czogQ29yZS5GaW5hbFJlcXVlc3RPcHRpb25zKTogQ29yZS5IZWFkZXJzIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcHJlcGFyZU9wdGlvbnMob3B0czogQ29yZS5GaW5hbFJlcXVlc3RPcHRpb25zPHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLyoqXG4gICAgICogVGhlIHVzZXIgc2hvdWxkIHByb3ZpZGUgYSBiZWFyZXIgdG9rZW4gcHJvdmlkZXIgaWYgdGhleSB3YW50XG4gICAgICogdG8gdXNlIEF6dXJlIEFEIGF1dGhlbnRpY2F0aW9uLiBUaGUgdXNlciBzaG91bGRuJ3Qgc2V0IHRoZVxuICAgICAqIEF1dGhvcml6YXRpb24gaGVhZGVyIG1hbnVhbGx5IGJlY2F1c2UgdGhlIGhlYWRlciBpcyBvdmVyd3JpdHRlblxuICAgICAqIHdpdGggdGhlIEF6dXJlIEFEIHRva2VuIGlmIGEgYmVhcmVyIHRva2VuIHByb3ZpZGVyIGlzIHByb3ZpZGVkLlxuICAgICAqL1xuICAgIGlmIChvcHRzLmhlYWRlcnM/LlsnYXBpLWtleSddKSB7XG4gICAgICByZXR1cm4gc3VwZXIucHJlcGFyZU9wdGlvbnMob3B0cyk7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5fZ2V0QXp1cmVBRFRva2VuKCk7XG4gICAgb3B0cy5oZWFkZXJzID8/PSB7fTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIG9wdHMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3Rva2VufWA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFwaUtleSAhPT0gQVBJX0tFWV9TRU5USU5FTCkge1xuICAgICAgb3B0cy5oZWFkZXJzWydhcGkta2V5J10gPSB0aGlzLmFwaUtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9ycy5PcGVuQUlFcnJvcignVW5hYmxlIHRvIGhhbmRsZSBhdXRoJyk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5wcmVwYXJlT3B0aW9ucyhvcHRzKTtcbiAgfVxufVxuXG5jb25zdCBfZGVwbG95bWVudHNfZW5kcG9pbnRzID0gbmV3IFNldChbXG4gICcvY29tcGxldGlvbnMnLFxuICAnL2NoYXQvY29tcGxldGlvbnMnLFxuICAnL2VtYmVkZGluZ3MnLFxuICAnL2F1ZGlvL3RyYW5zY3JpcHRpb25zJyxcbiAgJy9hdWRpby90cmFuc2xhdGlvbnMnLFxuICAnL2F1ZGlvL3NwZWVjaCcsXG4gICcvaW1hZ2VzL2dlbmVyYXRpb25zJyxcbl0pO1xuXG5jb25zdCBBUElfS0VZX1NFTlRJTkVMID0gJzxNaXNzaW5nIEtleT4nO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuZCBBenVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB7IHRvRmlsZSwgZmlsZUZyb21QYXRoIH0gZnJvbSAnLi91cGxvYWRzJztcbmV4cG9ydCB7XG4gIE9wZW5BSUVycm9yLFxuICBBUElFcnJvcixcbiAgQVBJQ29ubmVjdGlvbkVycm9yLFxuICBBUElDb25uZWN0aW9uVGltZW91dEVycm9yLFxuICBBUElVc2VyQWJvcnRFcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbiAgQ29uZmxpY3RFcnJvcixcbiAgUmF0ZUxpbWl0RXJyb3IsXG4gIEJhZFJlcXVlc3RFcnJvcixcbiAgQXV0aGVudGljYXRpb25FcnJvcixcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcixcbiAgUGVybWlzc2lvbkRlbmllZEVycm9yLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5RXJyb3IsXG59IGZyb20gJy4vZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBPcGVuQUk7XG4iLCAiaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgT3BlbkFJU2V0dGluZ3MgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgQ29tcGxldGlvbk9wdGlvbnMgfSBmcm9tIFwic3JjL3NldHRpbmdzL3NldHRpbmdzXCI7XG5pbXBvcnQgT3BlbkFJIGZyb20gXCJvcGVuYWlcIjtcblxuZXhwb3J0IGNsYXNzIE9wZW5BSVByb3ZpZGVyIGltcGxlbWVudHMgUHJvdmlkZXIge1xuICAgIGNsaWVudDogT3BlbkFJO1xuICAgIHNldHRpbmdzOiBPcGVuQUlTZXR0aW5ncztcbiAgICBhYm9ydGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgYWJvcnRjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5nczogT3BlbkFJU2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLmNsaWVudCA9IG5ldyBPcGVuQUkoe1xuICAgICAgICAgICAgYXBpS2V5OiB0aGlzLnNldHRpbmdzLmFwaUtleSxcbiAgICAgICAgICAgIGRhbmdlcm91c2x5QWxsb3dCcm93c2VyOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyAqZ2VuZXJhdGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM6IENvbXBsZXRpb25PcHRpb25zKTogQXN5bmNHZW5lcmF0b3I8c3RyaW5nPiB7XG4gICAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFib3J0Y29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgICAgICBjb25zdCBpbml0aWFsUG9zaXRpb24gPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IHByZXBhcmVQcm9tcHQoZWRpdG9yLCBvcHRpb25zLnVzZXJQcm9tcHQpO1xuXG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IHRoaXMuY2xpZW50LmNoYXQuY29tcGxldGlvbnMuY3JlYXRlKHtcbiAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgICAgICB7IHJvbGU6IFwic3lzdGVtXCIsIGNvbnRlbnQ6IG9wdGlvbnMuc3lzdGVtUHJvbXB0IH0sXG4gICAgICAgICAgICAgICAgeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogcHJvbXB0IH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0ZW1wZXJhdHVyZTogb3B0aW9ucy50ZW1wZXJhdHVyZSxcbiAgICAgICAgICAgIHN0cmVhbTogdHJ1ZSxcbiAgICAgICAgfSwgeyBzaWduYWw6IHRoaXMuYWJvcnRjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBsZXQgY29tcGxldGlvbiA9IFwiXCI7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJzb3JNb3ZlZChlZGl0b3IsIGluaXRpYWxQb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gY2h1bmsuY2hvaWNlc1swXT8uZGVsdGE/LmNvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgICAgIGNvbXBsZXRpb24gKz0gY29udGVudDtcbiAgICAgICAgICAgIHlpZWxkIGNvbXBsZXRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBhYm9ydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmFib3J0Y29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZU1vZGVscygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLm1vZGVscztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVscyA9IGF3YWl0IHRoaXMuY2xpZW50Lm1vZGVscy5saXN0KCk7XG4gICAgICAgIC8vIEZpbHRlciBmb3IgY2hhdCBtb2RlbHMgb25seVxuICAgICAgICBjb25zdCBjaGF0TW9kZWxzID0gbW9kZWxzLmRhdGFcbiAgICAgICAgICAgIC5maWx0ZXIobW9kZWwgPT4gbW9kZWwuaWQuaW5jbHVkZXMoXCJncHRcIikpXG4gICAgICAgICAgICAubWFwKG1vZGVsID0+IG1vZGVsLmlkKTtcblxuICAgICAgICB0aGlzLnNldHRpbmdzLm1vZGVscyA9IGNoYXRNb2RlbHM7XG4gICAgICAgIHJldHVybiBjaGF0TW9kZWxzO1xuICAgIH1cblxuICAgIGFzeW5jIGNvbm5lY3Rpb25UZXN0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQubW9kZWxzLmxpc3QoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHRlc3RpbmcgY29ubmVjdGlvbjpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXJzb3JNb3ZlZChlZGl0b3I6IEVkaXRvciwgaW5pdGlhbFBvc2l0aW9uOiB7IGxpbmU6IG51bWJlciwgY2g6IG51bWJlciB9KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IGVkaXRvci5nZXRDdXJzb3IoKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbi5saW5lICE9PSBpbml0aWFsUG9zaXRpb24ubGluZSB8fCBjdXJyZW50UG9zaXRpb24uY2ggIT09IGluaXRpYWxQb3NpdGlvbi5jaDtcbiAgICB9XG59XG5cbi8vIEltcG9ydCB0aGlzIGF0IHRoZSBlbmQgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBpc3N1ZXNcbmltcG9ydCBwcmVwYXJlUHJvbXB0IGZyb20gXCJzcmMvcHJvbXB0L3Byb21wdFwiOyIsICJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBPcGVuQUlDb21wYXRpYmxlU2V0dGluZ3MgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgQ29tcGxldGlvbk9wdGlvbnMgfSBmcm9tIFwic3JjL3NldHRpbmdzL3NldHRpbmdzXCI7XG5pbXBvcnQgT3BlbkFJIGZyb20gXCJvcGVuYWlcIjtcblxuZXhwb3J0IGNsYXNzIE9wZW5BSUNvbXBhdGlibGVQcm92aWRlciBpbXBsZW1lbnRzIFByb3ZpZGVyIHtcbiAgICBjbGllbnQ6IE9wZW5BSTtcbiAgICBzZXR0aW5nczogT3BlbkFJQ29tcGF0aWJsZVNldHRpbmdzO1xuICAgIGFib3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBhYm9ydGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcblxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBPcGVuQUlDb21wYXRpYmxlU2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLmNsaWVudCA9IG5ldyBPcGVuQUkoe1xuICAgICAgICAgICAgYmFzZVVSTDogdGhpcy5zZXR0aW5ncy5iYXNlVXJsLFxuICAgICAgICAgICAgYXBpS2V5OiB0aGlzLnNldHRpbmdzLmFwaUtleSxcbiAgICAgICAgICAgIGRhbmdlcm91c2x5QWxsb3dCcm93c2VyOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyAqZ2VuZXJhdGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM6IENvbXBsZXRpb25PcHRpb25zKTogQXN5bmNHZW5lcmF0b3I8c3RyaW5nPiB7XG4gICAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFib3J0Y29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgICAgICBjb25zdCBpbml0aWFsUG9zaXRpb24gPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IHByZXBhcmVQcm9tcHQoZWRpdG9yLCBvcHRpb25zLnVzZXJQcm9tcHQpO1xuXG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IHRoaXMuY2xpZW50LmNoYXQuY29tcGxldGlvbnMuY3JlYXRlKHtcbiAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgICAgICB7IHJvbGU6IFwic3lzdGVtXCIsIGNvbnRlbnQ6IG9wdGlvbnMuc3lzdGVtUHJvbXB0IH0sXG4gICAgICAgICAgICAgICAgeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogcHJvbXB0IH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0ZW1wZXJhdHVyZTogb3B0aW9ucy50ZW1wZXJhdHVyZSxcbiAgICAgICAgICAgIHN0cmVhbTogdHJ1ZSxcbiAgICAgICAgfSwgeyBzaWduYWw6IHRoaXMuYWJvcnRjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBsZXQgY29tcGxldGlvbiA9IFwiXCI7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3Vyc29yTW92ZWQoZWRpdG9yLCBpbml0aWFsUG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGNodW5rLmNob2ljZXNbMF0/LmRlbHRhPy5jb250ZW50IHx8IFwiXCI7XG4gICAgICAgICAgICBjb21wbGV0aW9uICs9IGNvbnRlbnQ7XG4gICAgICAgICAgICB5aWVsZCBjb21wbGV0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgYWJvcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hYm9ydGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVNb2RlbHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2xpZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5tb2RlbHM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RlbHMgPSBhd2FpdCB0aGlzLmNsaWVudC5tb2RlbHMubGlzdCgpO1xuICAgICAgICAvLyBGaWx0ZXIgZm9yIGNoYXQgbW9kZWxzIG9ubHlcbiAgICAgICAgY29uc3QgY2hhdE1vZGVscyA9IG1vZGVscy5kYXRhXG4gICAgICAgICAgICAuZmlsdGVyKG1vZGVsID0+IG1vZGVsLmlkLmluY2x1ZGVzKFwiZ3B0XCIpKVxuICAgICAgICAgICAgLm1hcChtb2RlbCA9PiBtb2RlbC5pZCk7XG5cbiAgICAgICAgdGhpcy5zZXR0aW5ncy5tb2RlbHMgPSBjaGF0TW9kZWxzO1xuICAgICAgICByZXR1cm4gY2hhdE1vZGVscztcbiAgICB9XG5cbiAgICBhc3luYyBjb25uZWN0aW9uVGVzdCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm1vZGVscy5saXN0KCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB0ZXN0aW5nIGNvbm5lY3Rpb246XCIsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3Vyc29yTW92ZWQoZWRpdG9yOiBFZGl0b3IsIGluaXRpYWxQb3NpdGlvbjogeyBsaW5lOiBudW1iZXIsIGNoOiBudW1iZXIgfSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG4gICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb24ubGluZSAhPT0gaW5pdGlhbFBvc2l0aW9uLmxpbmUgfHwgY3VycmVudFBvc2l0aW9uLmNoICE9PSBpbml0aWFsUG9zaXRpb24uY2g7XG4gICAgfVxufVxuXG4vLyBJbXBvcnQgdGhpcyBhdCB0aGUgZW5kIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kgaXNzdWVzXG5pbXBvcnQgcHJlcGFyZVByb21wdCBmcm9tIFwic3JjL3Byb21wdC9wcm9tcHRcIjsiLCAiaW1wb3J0IEluc2NyaWJlIGZyb20gXCJzcmMvbWFpblwiO1xuaW1wb3J0IHsgUHJvdmlkZXIsIFByb3ZpZGVyVHlwZSB9IGZyb20gXCJzcmMvcHJvdmlkZXJzXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzcmMvc2V0dGluZ3Mvc2V0dGluZ3NcIjtcbmltcG9ydCB7IE9sbGFtYVByb3ZpZGVyIH0gZnJvbSBcIi4vb2xsYW1hXCI7XG5pbXBvcnQgeyBPcGVuQUlQcm92aWRlciB9IGZyb20gXCIuL29wZW5haVwiO1xuaW1wb3J0IHsgT3BlbkFJQ29tcGF0aWJsZVByb3ZpZGVyIH0gZnJvbSBcIi4vb3BlbmFpLWNvbXBhdFwiO1xuXG5pbnRlcmZhY2UgUHJvdmlkZXJzIHtcbiAgICBbUHJvdmlkZXJUeXBlLk9MTEFNQV06IE9sbGFtYVByb3ZpZGVyLFxuICAgIFtQcm92aWRlclR5cGUuT1BFTkFJXTogT3BlbkFJUHJvdmlkZXIsXG4gICAgW1Byb3ZpZGVyVHlwZS5PUEVOQUlfQ09NUEFUSUJMRV06IE9wZW5BSUNvbXBhdGlibGVQcm92aWRlclxufVxuXG5leHBvcnQgY2xhc3MgUHJvdmlkZXJGYWN0b3J5IHtcbiAgICBwcml2YXRlIHNldHRpbmdzOiBTZXR0aW5ncztcbiAgICBwcml2YXRlIHByb3ZpZGVyczogUHJvdmlkZXJzO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwbHVnaW46IEluc2NyaWJlKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcbiAgICAgICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmJ1aWxkUHJvdmlkZXJzKHRoaXMuc2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHJlYnVpbGRQcm92aWRlcnMoKSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzID0gdGhpcy5idWlsZFByb3ZpZGVycyh0aGlzLnNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBnZXRQcm92aWRlcihwcm92aWRlcjogUHJvdmlkZXJUeXBlKTogUHJvdmlkZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlcnNbcHJvdmlkZXJdO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZU1vZGVscyhwcm92aWRlcjogUHJvdmlkZXJUeXBlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlcnNbcHJvdmlkZXJdLnVwZGF0ZU1vZGVscygpO1xuICAgIH1cblxuICAgIGFzeW5jIGNvbm5lY3Rpb25UZXN0KHByb3ZpZGVyOiBQcm92aWRlclR5cGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzW3Byb3ZpZGVyXS5jb25uZWN0aW9uVGVzdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRQcm92aWRlcnMoc2V0dGluZ3M6IFNldHRpbmdzKTogUHJvdmlkZXJzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtQcm92aWRlclR5cGUuT0xMQU1BXTogbmV3IE9sbGFtYVByb3ZpZGVyKHNldHRpbmdzLnByb3ZpZGVycy5vbGxhbWEpLFxuICAgICAgICAgICAgW1Byb3ZpZGVyVHlwZS5PUEVOQUldOiBuZXcgT3BlbkFJUHJvdmlkZXIoc2V0dGluZ3MucHJvdmlkZXJzLm9wZW5haSksXG4gICAgICAgICAgICBbUHJvdmlkZXJUeXBlLk9QRU5BSV9DT01QQVRJQkxFXTogbmV3IE9wZW5BSUNvbXBhdGlibGVQcm92aWRlcihzZXR0aW5ncy5wcm92aWRlcnMub3BlbmFpX2NvbXBhdGlibGUpLFxuICAgICAgICB9XG4gICAgfVxufSIsICJpbXBvcnQgeyBQcm92aWRlclR5cGUgfSBmcm9tIFwic3JjL3Byb3ZpZGVyc1wiO1xuaW1wb3J0IHsgU3BsaXRTdHJhdGVneSB9IGZyb20gXCJzcmMvZXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBPbGxhbWFTZXR0aW5ncyB9IGZyb20gXCJzcmMvcHJvdmlkZXJzL29sbGFtYVwiO1xuaW1wb3J0IHsgT3BlbkFJU2V0dGluZ3MgfSBmcm9tIFwic3JjL3Byb3ZpZGVycy9vcGVuYWlcIjtcbmltcG9ydCB7IE9wZW5BSUNvbXBhdGlibGVTZXR0aW5ncyB9IGZyb20gXCJzcmMvcHJvdmlkZXJzL29wZW5haS1jb21wYXRcIjtcblxuLy8gQ29tcGxldGlvbiBvcHRpb25zIGZvciBhIHByb2ZpbGVcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxldGlvbk9wdGlvbnMge1xuICAgIG1vZGVsOiBzdHJpbmcsXG4gICAgdXNlclByb21wdDogc3RyaW5nLFxuICAgIHN5c3RlbVByb21wdDogc3RyaW5nLFxuICAgIHRlbXBlcmF0dXJlOiBudW1iZXJcbn1cblxuLy8gUHJvZmlsZSBzZXR0aW5nc1xuZXhwb3J0IGludGVyZmFjZSBQcm9maWxlIHtcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdmlkZXI6IFByb3ZpZGVyVHlwZSxcbiAgICBjb21wbGV0aW9uT3B0aW9uczogQ29tcGxldGlvbk9wdGlvbnMsXG4gICAgZGVsYXlNczogbnVtYmVyLFxuICAgIHNwbGl0U3RyYXRlZ3k6IFNwbGl0U3RyYXRlZ3lcbn1cblxuZXhwb3J0IHR5cGUgUHJvZmlsZUlkID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgUHJvZmlsZXMgPSBSZWNvcmQ8UHJvZmlsZUlkLCBQcm9maWxlPlxuZXhwb3J0IHR5cGUgUGF0aCA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhdGhDb25maWcgPSB7IHByb2ZpbGU6IFByb2ZpbGVJZCwgZW5hYmxlZDogYm9vbGVhbiB9O1xuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5ncyB7XG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgICAvLyBhdmFpbGFibGUgcHJvdmlkZXJzXG4gICAgcHJvdmlkZXJzOiB7XG4gICAgICAgIG9sbGFtYTogT2xsYW1hU2V0dGluZ3MsXG4gICAgICAgIG9wZW5haTogT3BlbkFJU2V0dGluZ3MsXG4gICAgICAgIG9wZW5haV9jb21wYXRpYmxlOiBPcGVuQUlDb21wYXRpYmxlU2V0dGluZ3MsXG4gICAgfSxcbiAgICAvLyBwcm9maWxlc1xuICAgIHByb2ZpbGVzOiBQcm9maWxlcyxcbiAgICAvLyBwYXRoIHRvIHByb2ZpbGUgbWFwcGluZ3NcbiAgICBwYXRoX2NvbmZpZ3M6IFJlY29yZDxQYXRoLCBQYXRoQ29uZmlnPixcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFJPRklMRTogUHJvZmlsZUlkID0gXCJkZWZhdWx0XCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QQVRIID0gXCIvXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogU2V0dGluZ3MgPSB7XG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcHJvdmlkZXJzOiB7XG4gICAgICAgIG9wZW5haToge1xuICAgICAgICAgICAgaW50ZWdyYXRpb246IFByb3ZpZGVyVHlwZS5PUEVOQUksXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gQUlcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlVzZSBPcGVuQUkgQVBJcyB0byBnZW5lcmF0ZSB0ZXh0LlwiLFxuICAgICAgICAgICAgYXBpS2V5OiBcImFwaS1rZXlcIixcbiAgICAgICAgICAgIG1vZGVsOiBcImdwdC00by1taW5pXCIsXG4gICAgICAgICAgICBtb2RlbHM6IFtcImdwdC00b1wiLCBcImdwdC00by1taW5pXCJdLFxuICAgICAgICAgICAgY29uZmlndXJlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIG9sbGFtYToge1xuICAgICAgICAgICAgaW50ZWdyYXRpb246IFByb3ZpZGVyVHlwZS5PTExBTUEsXG4gICAgICAgICAgICBuYW1lOiBcIk9sbGFtYVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVXNlIHlvdXIgb3duIE9sbGFtYSBpbnN0YW5jZSB0byBnZW5lcmF0ZSB0ZXh0LlwiLFxuICAgICAgICAgICAgaG9zdDogXCJodHRwOi8vbG9jYWxob3N0OjExNDM0XCIsXG4gICAgICAgICAgICBtb2RlbHM6IFtcImxsYW1hMy4yOmxhdGVzdFwiLCBcIm1pc3RyYWwtbmVtb1wiXSxcbiAgICAgICAgICAgIGNvbmZpZ3VyZWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBvcGVuYWlfY29tcGF0aWJsZToge1xuICAgICAgICAgICAgaW50ZWdyYXRpb246IFByb3ZpZGVyVHlwZS5PUEVOQUlfQ09NUEFUSUJMRSxcbiAgICAgICAgICAgIG5hbWU6IFwiT3BlbkFJIENvbXBhdGlibGVcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlVzZSBPcGVuQUkgY29tcGF0aWJsZSBBUElzIHRvIGdlbmVyYXRlIGNvbXBsZXRpb25zLlwiLFxuICAgICAgICAgICAgYXBpS2V5OiBcImFwaS1rZXlcIixcbiAgICAgICAgICAgIGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MVwiLFxuICAgICAgICAgICAgbW9kZWw6IFwiZ3B0LTRvLW1pbmlcIixcbiAgICAgICAgICAgIG1vZGVsczogW1wiZ3B0LTRvXCIsIFwiZ3B0LTRvLW1pbmlcIl0sXG4gICAgICAgICAgICBjb25maWd1cmVkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHByb2ZpbGVzOiB7XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGVmYXVsdCBQcm9maWxlXCIsXG4gICAgICAgICAgICBwcm92aWRlcjogUHJvdmlkZXJUeXBlLk9MTEFNQSxcbiAgICAgICAgICAgIGRlbGF5TXM6IDUwMCxcbiAgICAgICAgICAgIHNwbGl0U3RyYXRlZ3k6IFwic2VudGVuY2VcIixcbiAgICAgICAgICAgIGNvbXBsZXRpb25PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgbW9kZWw6IFwiZ2VtbWEzOjEyYlwiLFxuICAgICAgICAgICAgICAgIHVzZXJQcm9tcHQ6ICdJZiB0aGUgbGFzdCBzZW50ZW5jZSBpcyBpbmNvbXBsZXRlLCBvbmx5IGNvbXBsZXRlIHRoZSBzZW50ZW5jZSBhbmQgbm90aGluZyBlbHNlLiBJZiB0aGUgbGFzdCBzZW50ZW5jZSBpcyBjb21wbGV0ZSwgZ2VuZXJhdGUgYSBuZXcgc2VudGVuY2UgdGhhdCBmb2xsb3dzIGxvZ2ljYWxseTpcXG4tLS1cXG57e3ByZV9jdXJzb3J9fScsXG4gICAgICAgICAgICAgICAgc3lzdGVtUHJvbXB0OiBcIllvdSBhcmUgYSB3cml0aW5nIGFzc2lzdGFudCB0aGF0IHByZWRpY3RzIGFuZCBjb21wbGV0ZXMgc2VudGVuY2VzIGluIGEgbmF0dXJhbCwgY29udGV4dC1hd2FyZSBtYW5uZXIuIFlvdXIgZ29hbCBpcyB0byBjb250aW51ZSB0aGUgdXNlclx1MjAxOXMgdGV4dCBzbW9vdGhseSwgbWFpbnRhaW5pbmcgY29oZXJlbmNlLCBmbHVlbmN5LCBhbmQgc3R5bGUuIEFkYXB0IHRvIHRoZSB1c2VyXHUyMDE5cyB3cml0aW5nIHRvbmUsIHdoZXRoZXIgZm9ybWFsLCBpbmZvcm1hbCwgY3JlYXRpdmUsIG9yIHRlY2huaWNhbC4gRW5zdXJlIHRoYXQgY29tcGxldGlvbnMgZmVlbCBpbnR1aXRpdmUsIHVzZWZ1bCwgYW5kIGZyZWUgb2YgdW5uZWNlc3NhcnkgcmVwZXRpdGlvbi4gRG8gbm90IGdlbmVyYXRlIGNvbXBsZXRpb24gdGhhdCBpbmNsdWRlcyB0aGUgcHJvbXB0IGl0c2VsZi5cIixcbiAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZTogMC41LFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcGF0aF9jb25maWdzOiB7XG4gICAgICAgIFwiL1wiOiB7XG4gICAgICAgICAgICBwcm9maWxlOiBERUZBVUxUX1BST0ZJTEUsXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG4vLyBDcmVhdGUgYSBuZXcgcHJvZmlsZSBhbmQgcmV0dXJuIHRoZSBpZFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2ZpbGUoc2V0dGluZ3M6IFNldHRpbmdzKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcm9maWxlcyA9IHNldHRpbmdzLnByb2ZpbGVzO1xuICAgIGNvbnN0IGlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDYpO1xuXG4gICAgLy8gZ2VuZXJhdGUgYSBuZXcgcHJvZmlsZSBuYW1lXG4gICAgbGV0IG5hbWUgPSBcIk5ldyBQcm9maWxlXCI7XG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBwcm9maWxlcyB0byBtYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlXG4gICAgbGV0IGkgPSAxO1xuICAgIE9iamVjdC5lbnRyaWVzKHByb2ZpbGVzKS5mb3JFYWNoKChbLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgTmV3IFByb2ZpbGUgJHtpfWA7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGNvcHkgdGhlIGRlZmF1bHQgcHJvZmlsZVxuICAgIGNvbnN0IGRlZmF1bHRQcm9maWxlID0gcHJvZmlsZXNbREVGQVVMVF9QUk9GSUxFXTtcbiAgICBjb25zdCBwcm9maWxlID0ge1xuICAgICAgICAuLi5kZWZhdWx0UHJvZmlsZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIHRoZSBuZXcgcHJvZmlsZVxuICAgIHByb2ZpbGVzW2lkXSA9IHByb2ZpbGU7XG5cbiAgICByZXR1cm4gaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGF0aENvbmZpZyhzZXR0aW5nczogU2V0dGluZ3MsIHBhdGg6IHN0cmluZyk6IFBhdGhDb25maWcge1xuICAgIHJldHVybiBzZXR0aW5ncy5wYXRoX2NvbmZpZ3NbcGF0aF0gfHwgc2V0dGluZ3MucGF0aF9jb25maWdzW0RFRkFVTFRfUEFUSF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRoQ29uZmlnKHNldHRpbmdzOiBTZXR0aW5ncywgcGF0aDogc3RyaW5nLCBwcm9maWxlOiBQcm9maWxlSWQpOiB2b2lkIHtcbiAgICBwYXRoID0gcGF0aCB8fCBERUZBVUxUX1BBVEg7XG4gICAgc2V0dGluZ3MucGF0aF9jb25maWdzW3BhdGhdID0geyBwcm9maWxlOiBwcm9maWxlLCBlbmFibGVkOiB0cnVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldFNldHRpbmdzKHNldHRpbmdzOiBTZXR0aW5ncyk6IHZvaWQge1xuICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIERFRkFVTFRfU0VUVElOR1MpO1xufSIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcsIEJ1dHRvbkNvbXBvbmVudCwgRXh0cmFCdXR0b25Db21wb25lbnQsIERyb3Bkb3duQ29tcG9uZW50LCBUZXh0Q29tcG9uZW50LCBUb2dnbGVDb21wb25lbnQsIE5vdGljZSB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgVEVNUExBVEVfVkFSSUFCTEVTIH0gZnJvbSBcInNyYy9wcm9tcHQvcHJvbXB0XCI7XG5pbXBvcnQgeyBTcGxpdFN0cmF0ZWd5IH0gZnJvbSBcInNyYy9leHRlbnNpb25cIjtcbmltcG9ydCBJbnNjcmliZSBmcm9tIFwic3JjL21haW5cIjtcbmltcG9ydCB7IFByb3ZpZGVyVHlwZSB9IGZyb20gXCJzcmMvcHJvdmlkZXJzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXRoQ29uZmlnLCBERUZBVUxUX1BBVEgsIERFRkFVTFRfUFJPRklMRSwgUHJvZmlsZSwgcmVzZXRTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBQcm92aWRlclNldHRpbmdzTW9kYWwgfSBmcm9tICcuL3Byb3ZpZGVyJztcbmltcG9ydCB7IGNyZWF0ZVByb2ZpbGUgfSBmcm9tIFwiLlwiO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogTWFpbiBTZXR0aW5ncyBUYWJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zY3JpYmVTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICAgIHByaXZhdGUgZ2VuZXJhbFNlY3Rpb246IEdlbmVyYWxTZWN0aW9uO1xuICAgIHByaXZhdGUgcHJvdmlkZXJzU2VjdGlvbjogUHJvdmlkZXJzU2VjdGlvbjtcbiAgICBwcml2YXRlIHByb2ZpbGVzU2VjdGlvbjogUHJvZmlsZXNTZWN0aW9uO1xuICAgIHByaXZhdGUgcGF0aENvbmZpZ3NTZWN0aW9uOiBQYXRoQ29uZmlnc1NlY3Rpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBsdWdpbjogSW5zY3JpYmUpIHtcbiAgICAgICAgc3VwZXIocGx1Z2luLmFwcCwgcGx1Z2luKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG5cbiAgICAgICAgLy8gR2VuZXJhbCBTZWN0aW9uXG4gICAgICAgIGNvbnN0IGdlbmVyYWxDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmFwcGVuZENoaWxkKGdlbmVyYWxDb250YWluZXIpO1xuICAgICAgICBjb25zdCBwcm92aWRlcnNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmFwcGVuZENoaWxkKHByb3ZpZGVyc0NvbnRhaW5lcik7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5hcHBlbmRDaGlsZChwcm9maWxlc0NvbnRhaW5lcik7XG4gICAgICAgIGNvbnN0IHBhdGhNYXBwaW5nc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQocGF0aE1hcHBpbmdzQ29udGFpbmVyKTtcblxuICAgICAgICB0aGlzLmdlbmVyYWxTZWN0aW9uID0gbmV3IEdlbmVyYWxTZWN0aW9uKGdlbmVyYWxDb250YWluZXIsIHRoaXMucGx1Z2luLCB0aGlzLmRpc3BsYXkuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzU2VjdGlvbiA9IG5ldyBQcm92aWRlcnNTZWN0aW9uKHByb3ZpZGVyc0NvbnRhaW5lciwgdGhpcy5hcHAsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgdGhpcy5wYXRoQ29uZmlnc1NlY3Rpb24gPSBuZXcgUGF0aENvbmZpZ3NTZWN0aW9uKHBhdGhNYXBwaW5nc0NvbnRhaW5lciwgdGhpcy5wbHVnaW4pO1xuICAgICAgICB0aGlzLnByb2ZpbGVzU2VjdGlvbiA9IG5ldyBQcm9maWxlc1NlY3Rpb24ocHJvZmlsZXNDb250YWluZXIsIHRoaXMucGx1Z2luLCB0aGlzLnBhdGhDb25maWdzU2VjdGlvbi5yZW5kZXIuYmluZCh0aGlzLnBhdGhDb25maWdzU2VjdGlvbikpO1xuXG4gICAgICAgIHRoaXMuZ2VuZXJhbFNlY3Rpb24ucmVuZGVyKCk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzU2VjdGlvbi5yZW5kZXIoKTtcbiAgICAgICAgdGhpcy5wcm9maWxlc1NlY3Rpb24ucmVuZGVyKCk7XG4gICAgICAgIHRoaXMucGF0aENvbmZpZ3NTZWN0aW9uLnJlbmRlcigpO1xuICAgIH1cbn1cblxuLy8gR2VuZXJhbCBTZWN0aW9uXG5jbGFzcyBHZW5lcmFsU2VjdGlvbiB7XG4gICAgcHJpdmF0ZSBjb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgcGx1Z2luOiBJbnNjcmliZTtcbiAgICBwcml2YXRlIGRpc3BsYXlGdW5jOiAoKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgcGx1Z2luOiBJbnNjcmliZSwgZGlzcGxheUZ1bmM6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgICAgICB0aGlzLmRpc3BsYXlGdW5jID0gZGlzcGxheUZ1bmM7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVuZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5lbXB0eSgpO1xuICAgICAgICAvLyBFbmFibGVkXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJFbmFibGVkXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIkVuYWJsZSBvciBkaXNhYmxlIGNvbXBsZXRpb25zIGdsb2JhbGx5XCIpXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IHtcbiAgICAgICAgICAgICAgICB0b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZWQpXG4gICAgICAgICAgICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc3RhdHVzQmFySXRlbS5yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZXNldCBTZXR0aW5nc1xuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lcilcbiAgICAgICAgICAgIC5zZXROYW1lKFwiUmVzZXQgU2V0dGluZ3NcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiUmVzZXQgYWxsIHNldHRpbmdzIHRvIGRlZmF1bHRcIilcbiAgICAgICAgICAgIC5hZGRCdXR0b24oKGJ1dHRvbjogQnV0dG9uQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIC5zZXRXYXJuaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJSZXNldFwiKVxuICAgICAgICAgICAgICAgICAgICAuc2V0VG9vbHRpcChcIlJlc2V0IHNldHRpbmdzIHRvIGRlZmF1bHRcIilcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRTZXR0aW5ncyh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUZ1bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnN0YXR1c0Jhckl0ZW0ucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm90aWNlKFwiU2V0dGluZ3MgcmVzZXQgdG8gZGVmYXVsdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBQcm92aWRlcnMgU2VjdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5jbGFzcyBQcm92aWRlcnNTZWN0aW9uIHtcbiAgICBwcml2YXRlIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBwbHVnaW46IEluc2NyaWJlO1xuICAgIHByaXZhdGUgYXBwOiBBcHA7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250YWluZXI6IEhUTUxFbGVtZW50LCBhcHA6IEFwcCwgcGx1Z2luOiBJbnNjcmliZSkge1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIH1cblxuICAgIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuZW1wdHkoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXIuY3JlYXRlRWwoXCJoM1wiLCB7IHRleHQ6IFwiUHJvdmlkZXJzXCIgfSk7XG5cbiAgICAgICAgLy8gT2xsYW1hIFByb3ZpZGVyXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJPbGxhbWFcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiTG9jYWwgQUkgcHJvdmlkZXIgcnVubmluZyBvbiB5b3VyIG1hY2hpbmVcIilcbiAgICAgICAgICAgIC5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uOiBFeHRyYUJ1dHRvbkNvbXBvbmVudCkgPT4gdGhpcy5jcmVhdGVDb25maWd1cmVCdXR0b24oXG4gICAgICAgICAgICAgICAgYnV0dG9uLFxuICAgICAgICAgICAgICAgIFByb3ZpZGVyVHlwZS5PTExBTUEsXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvdmlkZXJzLm9sbGFtYS5jb25maWd1cmVkKSk7XG5cbiAgICAgICAgLy8gT3BlbkFJIFByb3ZpZGVyXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJPcGVuQUlcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiT3BlbkFJIEFQSVwiKVxuICAgICAgICAgICAgLmFkZEV4dHJhQnV0dG9uKChidXR0b246IEV4dHJhQnV0dG9uQ29tcG9uZW50KSA9PiB0aGlzLmNyZWF0ZUNvbmZpZ3VyZUJ1dHRvbihcbiAgICAgICAgICAgICAgICBidXR0b24sXG4gICAgICAgICAgICAgICAgUHJvdmlkZXJUeXBlLk9QRU5BSSxcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm92aWRlcnMub3BlbmFpLmNvbmZpZ3VyZWQpKTtcblxuICAgICAgICAvLyBPcGVuQUkgQ29tcGF0aWJsZSBQcm92aWRlclxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lcilcbiAgICAgICAgICAgIC5zZXROYW1lKFwiT3BlbkFJIENvbXBhdGlibGVcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiT3BlbkFJIGNvbXBhdGlibGUgcHJvdmlkZXJcIilcbiAgICAgICAgICAgIC5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uOiBFeHRyYUJ1dHRvbkNvbXBvbmVudCkgPT4gdGhpcy5jcmVhdGVDb25maWd1cmVCdXR0b24oXG4gICAgICAgICAgICAgICAgYnV0dG9uLFxuICAgICAgICAgICAgICAgIFByb3ZpZGVyVHlwZS5PUEVOQUlfQ09NUEFUSUJMRSxcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm92aWRlcnMub3BlbmFpX2NvbXBhdGlibGUuY29uZmlndXJlZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZmlndXJlQnV0dG9uKGJ1dHRvbjogRXh0cmFCdXR0b25Db21wb25lbnQsIHR5cGU6IFByb3ZpZGVyVHlwZSwgY29uZmlndXJlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBidXR0b24uZXh0cmFTZXR0aW5nc0VsLnNldENzc1Byb3BzKHtcbiAgICAgICAgICAgIGNvbG9yOiBjb25maWd1cmVkID8gXCJ2YXIoLS10ZXh0LXN1Y2Nlc3MpXCIgOiBcInZhcigtLXRleHQtd2FybmluZylcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGJ1dHRvblxuICAgICAgICAgICAgLnNldEljb24oY29uZmlndXJlZCA/IFwiY29nXCIgOiBcImNvZ1wiKVxuICAgICAgICAgICAgLnNldFRvb2x0aXAoY29uZmlndXJlZCA/IFwiUHJvdmlkZXIgY29uZmlndXJlZFwiIDogXCJQcm92aWRlciBub3QgY29uZmlndXJlZFwiKVxuICAgICAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5ldyBQcm92aWRlclNldHRpbmdzTW9kYWwodGhpcy5hcHAsIHRoaXMucGx1Z2luLCB0eXBlKS5vcGVuKClcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFByb2ZpbGVzIFNlY3Rpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuY2xhc3MgUHJvZmlsZXNTZWN0aW9uIHtcbiAgICBwcml2YXRlIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBwbHVnaW46IEluc2NyaWJlO1xuICAgIHByaXZhdGUgb25Qcm9maWxlVXBkYXRlOiAoKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgZGlzcGxheWVkUHJvZmlsZUlkOiBzdHJpbmcgPSBERUZBVUxUX1BST0ZJTEU7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Db250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgcHJvZmlsZUNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250YWluZXI6IEhUTUxFbGVtZW50LCBwbHVnaW46IEluc2NyaWJlLCBvblByb2ZpbGVVcGRhdGU6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgICAgICB0aGlzLm9uUHJvZmlsZVVwZGF0ZSA9IG9uUHJvZmlsZVVwZGF0ZTtcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbnRhaW5lcnMgb25jZVxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRoaXMucHJvZmlsZUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZW0gaW5pdGlhbGx5XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wcm9maWxlQ29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBhc3luYyByZW5kZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIENsZWFyIG1haW4gY29udGFpbmVyIGFuZCByZS1hcHBlbmQgc3ViLWNvbnRhaW5lcnNcbiAgICAgICAgdGhpcy5jb250YWluZXIuZW1wdHkoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXIuY3JlYXRlRWwoXCJoM1wiLCB7IHRleHQ6IFwiUHJvZmlsZXNcIiB9KTtcbiAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25Db250YWluZXIpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5jcmVhdGVFbChcImRpdlwiLCB7IGNsczogXCJzZXR0aW5nLWl0ZW1cIiB9KTtcbiAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wcm9maWxlQ29udGFpbmVyKTtcblxuICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclByb2ZpbGVTZWxlY3Rpb24oKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5ZWRQcm9maWxlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZmlsZXNbdGhpcy5kaXNwbGF5ZWRQcm9maWxlSWRdO1xuICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclByb2ZpbGVTZXR0aW5ncyhkaXNwbGF5ZWRQcm9maWxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlbmRlclByb2ZpbGVTZWxlY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLmVtcHR5KCk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5zZWxlY3Rpb25Db250YWluZXIpXG4gICAgICAgICAgICAuc2V0TmFtZShcIk1hbmFnZSBwcm9maWxlXCIpXG4gICAgICAgICAgICAuc2V0SGVhZGluZygpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIlNlbGVjdCBhIHByb2ZpbGUgdG8gY29uZmlndXJlIGl0cyBzZXR0aW5nc1wiKVxuICAgICAgICAgICAgLmFkZERyb3Bkb3duKChkcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQpID0+IHRoaXMucHJvZmlsZURyb3Bkb3duKGRyb3Bkb3duKSlcbiAgICAgICAgICAgIC5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uOiBFeHRyYUJ1dHRvbkNvbXBvbmVudCkgPT4gdGhpcy5jcmVhdGVOZXdQcm9maWxlQnV0dG9uKGJ1dHRvbikpXG4gICAgICAgICAgICAuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbjogRXh0cmFCdXR0b25Db21wb25lbnQpID0+IHRoaXMuY3JlYXRlRGVsZXRlUHJvZmlsZUJ1dHRvbihidXR0b24pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2ZpbGVEcm9wZG93bihkcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZmlsZXMpLmZvckVhY2goKFtpZCwgcHJvZmlsZV0pID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihpZCwgcHJvZmlsZS5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRyb3Bkb3duXG4gICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5kaXNwbGF5ZWRQcm9maWxlSWQpXG4gICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRQcm9maWxlSWQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclByb2ZpbGVTZXR0aW5ncyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9maWxlc1t2YWx1ZV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVOZXdQcm9maWxlQnV0dG9uKGJ1dHRvbjogRXh0cmFCdXR0b25Db21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgYnV0dG9uXG4gICAgICAgICAgICAuc2V0SWNvbihcInBsdXNcIilcbiAgICAgICAgICAgIC5zZXRUb29sdGlwKFwiQ3JlYXRlIG5ldyBwcm9maWxlXCIpXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRQcm9maWxlSWQgPSBjcmVhdGVQcm9maWxlKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Qcm9maWxlVXBkYXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURlbGV0ZVByb2ZpbGVCdXR0b24oYnV0dG9uOiBFeHRyYUJ1dHRvbkNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0RlZmF1bHQgPSB0aGlzLmRpc3BsYXllZFByb2ZpbGVJZCA9PT0gREVGQVVMVF9QUk9GSUxFO1xuICAgICAgICBidXR0b25cbiAgICAgICAgICAgIC5zZXREaXNhYmxlZChpc0RlZmF1bHQpXG4gICAgICAgICAgICAuc2V0SWNvbihcInRyYXNoXCIpXG4gICAgICAgICAgICAuc2V0VG9vbHRpcChpc0RlZmF1bHQgPyBcIkNhbm5vdCBkZWxldGUgZGVmYXVsdCBwcm9maWxlXCIgOiBcIkRlbGV0ZSBwcm9maWxlXCIpXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2ZpbGVzW3RoaXMuZGlzcGxheWVkUHJvZmlsZUlkXTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXllZFByb2ZpbGVJZCA9IERFRkFVTFRfUFJPRklMRTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Qcm9maWxlVXBkYXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlbmRlclByb2ZpbGVTZXR0aW5ncyhwcm9maWxlOiBQcm9maWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMucHJvZmlsZUNvbnRhaW5lci5lbXB0eSgpO1xuXG4gICAgICAgIC8vIFByb2ZpbGUgTmFtZVxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLnByb2ZpbGVDb250YWluZXIpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlByb2ZpbGUgTmFtZVwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJOYW1lIG9mIHRoZSBwcm9maWxlXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUocHJvZmlsZS5uYW1lKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5uYW1lID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUHJvdmlkZXIgU2VsZWN0aW9uXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMucHJvZmlsZUNvbnRhaW5lcilcbiAgICAgICAgICAgIC5zZXROYW1lKFwiQUkgUHJvdmlkZXJcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiQ2hvb3NlIHlvdXIgcHJlZmVycmVkIEFJIHByb3ZpZGVyXCIpXG4gICAgICAgICAgICAuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PiB7XG4gICAgICAgICAgICAgICAgZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgLmFkZE9wdGlvbihQcm92aWRlclR5cGUuT0xMQU1BLCBcIk9sbGFtYVwiKVxuICAgICAgICAgICAgICAgICAgICAuYWRkT3B0aW9uKFByb3ZpZGVyVHlwZS5PUEVOQUksIFwiT3BlbkFJXCIpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRPcHRpb24oUHJvdmlkZXJUeXBlLk9QRU5BSV9DT01QQVRJQkxFLCBcIk9wZW5BSSBDb21wYXRpYmxlXCIpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9maWxlLnByb3ZpZGVyKVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBQcm92aWRlclR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUucHJvdmlkZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJQcm9maWxlU2V0dGluZ3MocHJvZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTW9kZWwgU2VsZWN0aW9uXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMucHJvZmlsZUNvbnRhaW5lcilcbiAgICAgICAgICAgIC5zZXROYW1lKFwiTW9kZWxcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiU2VsZWN0IHRoZSBtb2RlbCB0byB1c2UgZm9yIGNvbXBsZXRpb25zXCIpXG4gICAgICAgICAgICAuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAuc2V0SWNvbihcInJlZnJlc2gtY2N3XCIpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRUb29sdGlwKFwiVXBkYXRlIG1vZGVsIGxpc3RcIilcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4ucHJvdmlkZXJGYWN0b3J5LnVwZGF0ZU1vZGVscyhwcm9maWxlLnByb3ZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJQcm9maWxlU2V0dGluZ3MocHJvZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTm90aWNlKFwiTW9kZWwgbGlzdCB1cGRhdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkRHJvcGRvd24oYXN5bmMgKGRyb3Bkb3duKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxzID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvdmlkZXJzW3Byb2ZpbGUucHJvdmlkZXJdLm1vZGVscztcbiAgICAgICAgICAgICAgICBkcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAuYWRkT3B0aW9ucyhPYmplY3QuZnJvbUVudHJpZXMobW9kZWxzLm1hcCgobW9kZWwpID0+IFttb2RlbCwgbW9kZWxdKSkpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9maWxlLmNvbXBsZXRpb25PcHRpb25zLm1vZGVsKVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXBsZXRpb25PcHRpb25zLm1vZGVsID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRlbXBlcmF0dXJlIFNldHRpbmdcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5wcm9maWxlQ29udGFpbmVyKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJUZW1wZXJhdHVyZVwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJDb250cm9sIHRoZSByYW5kb21uZXNzIG9mIGNvbXBsZXRpb25zICgwID0gZGV0ZXJtaW5pc3RpYywgMSA9IGNyZWF0aXZlKVwiKVxuICAgICAgICAgICAgLmFkZFNsaWRlcigoc2xpZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc2xpZGVyXG4gICAgICAgICAgICAgICAgICAgIC5zZXRMaW1pdHMoMCwgMSwgMC4xKVxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUocHJvZmlsZS5jb21wbGV0aW9uT3B0aW9ucy50ZW1wZXJhdHVyZSlcbiAgICAgICAgICAgICAgICAgICAgLnNldER5bmFtaWNUb29sdGlwKClcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wbGV0aW9uT3B0aW9ucy50ZW1wZXJhdHVyZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3VnZ2VzdGlvbiBEZWxheVxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLnByb2ZpbGVDb250YWluZXIpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlN1Z2dlc3Rpb24gRGVsYXlcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiRGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSBmZXRjaGluZyBzdWdnZXN0aW9uc1wiKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LmlucHV0RWwuc2V0QXR0cihcInR5cGVcIiwgXCJudW1iZXJcIik7XG4gICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCIxMDAwXCIpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShTdHJpbmcocHJvZmlsZS5kZWxheU1zKSlcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5kZWxheU1zID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3BsaXQgU3RyYXRlZ3lcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5wcm9maWxlQ29udGFpbmVyKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJDb21wbGV0aW9uIFN0cmF0ZWd5XCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIkNob29zZSBob3cgY29tcGxldGlvbnMgc2hvdWxkIGJlIHNwbGl0IGFuZCBhY2NlcHRlZFwiKVxuICAgICAgICAgICAgLmFkZERyb3Bkb3duKChkcm9wZG93bikgPT4ge1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgIC5hZGRPcHRpb24oXCJ3b3JkXCIsIFwiV29yZCBieSBXb3JkXCIpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRPcHRpb24oXCJzZW50ZW5jZVwiLCBcIlNlbnRlbmNlIGJ5IFNlbnRlbmNlXCIpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRPcHRpb24oXCJwYXJhZ3JhcGhcIiwgXCJQYXJhZ3JhcGggYnkgUGFyYWdyYXBoXCIpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRPcHRpb24oXCJmdWxsXCIsIFwiRnVsbCBDb21wbGV0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9maWxlLnNwbGl0U3RyYXRlZ3kpXG4gICAgICAgICAgICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWU6IFNwbGl0U3RyYXRlZ3kpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUuc3BsaXRTdHJhdGVneSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3lzdGVtIFByb21wdFxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLnByb2ZpbGVDb250YWluZXIpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlN5c3RlbSBQcm9tcHRcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiU2V0IHN5c3RlbSBwcm9tcHRcIilcbiAgICAgICAgICAgIC5hZGRUZXh0QXJlYSgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuaW5wdXRFbC5yb3dzID0gNztcbiAgICAgICAgICAgICAgICB0ZXh0LmlucHV0RWwuc2V0Q3NzU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgICByZXNpemU6IFwidmVydGljYWxcIixcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUocHJvZmlsZS5jb21wbGV0aW9uT3B0aW9ucy5zeXN0ZW1Qcm9tcHQpLm9uQ2hhbmdlKFxuICAgICAgICAgICAgICAgICAgICBhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcGxldGlvbk9wdGlvbnMuc3lzdGVtUHJvbXB0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBVc2VyIFByb21wdFxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLnByb2ZpbGVDb250YWluZXIpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlVzZXIgUHJvbXB0XCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIlVzZXIgcHJvbXB0IHRlbXBsYXRlLlwiKVxuICAgICAgICAgICAgLmFkZEV4dHJhQnV0dG9uKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgLnNldEljb24oXCJsaXN0XCIpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRUb29sdGlwKFwiSW5zZXJ0IG11c3RhY2hlIHRlbXBsYXRlIHZhcmlhYmxlc1wiKVxuICAgICAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXBsZXRpb25PcHRpb25zLnVzZXJQcm9tcHQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTVBMQVRFX1ZBUklBQkxFUztcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcGxldGlvbk9wdGlvbnMudXNlclByb21wdCA9IHRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyUHJvZmlsZVNldHRpbmdzKHByb2ZpbGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkVGV4dEFyZWEoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LmlucHV0RWwucm93cyA9IDc7XG4gICAgICAgICAgICAgICAgdGV4dC5pbnB1dEVsLnNldENzc1N0eWxlcyh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgICAgcmVzaXplOiBcInZlcnRpY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHByb2ZpbGUuY29tcGxldGlvbk9wdGlvbnMudXNlclByb21wdCkub25DaGFuZ2UoXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wbGV0aW9uT3B0aW9ucy51c2VyUHJvbXB0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBQYXRoIENvbmZpZ3MgU2VjdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5jbGFzcyBQYXRoQ29uZmlnc1NlY3Rpb24ge1xuICAgIHByaXZhdGUgY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHBsdWdpbjogSW5zY3JpYmU7XG4gICAgcHJpdmF0ZSB0YWJsZUNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250YWluZXI6IEhUTUxFbGVtZW50LCBwbHVnaW46IEluc2NyaWJlKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVuZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5lbXB0eSgpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5jcmVhdGVFbChcImgzXCIsIHsgdGV4dDogXCJQYXRoIGNvbmZpZ3NcIiB9KTtcbiAgICAgICAgdGhpcy5jb250YWluZXIuY3JlYXRlRWwoXCJwXCIsIHtcbiAgICAgICAgICAgIHRleHQ6IFwiWW91IGNhbiBhc3NpZ24gcHJvZmlsZXMgdG8gcGF0aHMuIFBhdGhzIGFyZSBtYXRjaGVkIGJ5IHByZWZpeCwgd2l0aCBsb25nZXIgcGF0aHMgdGFraW5nIHByZWNlZGVuY2UuIEZvciBleGFtcGxlLCAnL0RhaWx5JyB3aWxsIG1hdGNoIGFsbCBmaWxlcyBpbiB0aGUgRGFpbHkgZm9sZGVyLlwiLFxuICAgICAgICAgICAgY2xzOiBcInNldHRpbmctaXRlbVwiXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlQ29udGFpbmVyKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJNYXBwaW5nc1RhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZW5kZXJNYXBwaW5nc1RhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyLmVtcHR5KCk7XG5cbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlQ29udGFpbmVyLmNyZWF0ZUVsKFwidGFibGVcIiwgeyBjbHM6IFwibWFwcGluZy10YWJsZVwiIH0pO1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0YWJsZS5jcmVhdGVFbChcInRyXCIpO1xuICAgICAgICBoZWFkZXIuY3JlYXRlRWwoXCJ0aFwiLCB7IHRleHQ6IFwiUGF0aFwiIH0pO1xuICAgICAgICBoZWFkZXIuY3JlYXRlRWwoXCJ0aFwiLCB7IHRleHQ6IFwiUHJvZmlsZVwiIH0pO1xuICAgICAgICBoZWFkZXIuY3JlYXRlRWwoXCJ0aFwiLCB7IHRleHQ6IFwiXCIgfSk7XG4gICAgICAgIGhlYWRlci5jcmVhdGVFbChcInRoXCIsIHsgdGV4dDogXCJcIiB9KTtcblxuICAgICAgICAvLyBBZGQgTmV3IE1hcHBpbmcgUm93XG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IHRhYmxlLmNyZWF0ZUVsKFwidHJcIiwgeyBjbHM6IFwibmV3LW1hcHBpbmctcm93XCIgfSk7XG4gICAgICAgIGxldCBwYXRoSW5wdXQgPSBcIlwiO1xuICAgICAgICBsZXQgc2VsZWN0ZWRQcm9maWxlID0gREVGQVVMVF9QUk9GSUxFO1xuXG4gICAgICAgIC8vIFBhdGggaW5wdXQgY2VsbFxuICAgICAgICBjb25zdCBwYXRoQ2VsbCA9IG5ld1Jvdy5jcmVhdGVFbChcInRkXCIpO1xuXG4gICAgICAgIG5ldyBUZXh0Q29tcG9uZW50KHBhdGhDZWxsKVxuICAgICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiRW50ZXIgcGF0aCAoZS5nLiwgRGFpbHkvV29yaylcIilcbiAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBwYXRoSW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFByb2ZpbGUgZHJvcGRvd24gY2VsbFxuICAgICAgICBjb25zdCBwcm9maWxlQ2VsbCA9IG5ld1Jvdy5jcmVhdGVFbChcInRkXCIpO1xuICAgICAgICBjb25zdCBwcm9maWxlRHJvcGRvd24gPSBuZXcgRHJvcGRvd25Db21wb25lbnQocHJvZmlsZUNlbGwpXG4gICAgICAgICAgICAuc2V0VmFsdWUoc2VsZWN0ZWRQcm9maWxlKTtcblxuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9maWxlcykuZm9yRWFjaCgoW2lkLCBwcm9maWxlXSkgPT4ge1xuICAgICAgICAgICAgcHJvZmlsZURyb3Bkb3duLmFkZE9wdGlvbihpZCwgcHJvZmlsZS5uYW1lKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvZmlsZURyb3Bkb3duLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgc2VsZWN0ZWRQcm9maWxlID0gdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFkZCBidXR0b24gY2VsbFxuICAgICAgICBuZXdSb3cuY3JlYXRlRWwoXCJ0ZFwiKTtcbiAgICAgICAgY29uc3QgYWN0aW9uQ2VsbCA9IG5ld1Jvdy5jcmVhdGVFbChcInRkXCIpO1xuICAgICAgICBuZXcgRXh0cmFCdXR0b25Db21wb25lbnQoYWN0aW9uQ2VsbClcbiAgICAgICAgICAgIC5zZXRJY29uKFwicGx1c1wiKVxuICAgICAgICAgICAgLnNldFRvb2x0aXAoXCJBZGQgcHJvZmlsZSBtYXBwaW5nXCIpXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXRoSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3IE5vdGljZShcIlBhdGggY2Fubm90IGJlIGVtcHR5XCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3JlYXRlUGF0aENvbmZpZyh0aGlzLnBsdWdpbi5zZXR0aW5ncywgcGF0aElucHV0LCBzZWxlY3RlZFByb2ZpbGUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBFeGlzdGluZyBNYXBwaW5nc1xuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYXRoX2NvbmZpZ3MpLmZvckVhY2goKFtwYXRoLCBtYXBwaW5nXSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGFibGUuY3JlYXRlRWwoXCJ0clwiKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdE1hcHBpbmcgPSBwYXRoID09PSBERUZBVUxUX1BBVEg7XG4gICAgICAgICAgICByb3cuY3JlYXRlRWwoXCJ0ZFwiLCB7IHRleHQ6IGlzRGVmYXVsdE1hcHBpbmcgPyBcIlJvb3RcIiA6IHBhdGggfSk7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBwcm9maWxlIGNlbGwgd2l0aCBkcm9wZG93blxuICAgICAgICAgICAgY29uc3QgcHJvZmlsZUNlbGwgPSByb3cuY3JlYXRlRWwoXCJ0ZFwiKTtcblxuICAgICAgICAgICAgLy8gRm9yIG90aGVyIG1hcHBpbmdzLCBzaG93IGVkaXRhYmxlIGRyb3Bkb3duXG4gICAgICAgICAgICBjb25zdCBwcm9maWxlRHJvcGRvd24gPSBuZXcgRHJvcGRvd25Db21wb25lbnQocHJvZmlsZUNlbGwpXG4gICAgICAgICAgICAgICAgLnNldERpc2FibGVkKGlzRGVmYXVsdE1hcHBpbmcpO1xuXG4gICAgICAgICAgICAvLyBBZGQgcHJvZmlsZSBvcHRpb25zXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9maWxlcykuZm9yRWFjaCgoW2lkLCBwcm9maWxlXSkgPT4ge1xuICAgICAgICAgICAgICAgIHByb2ZpbGVEcm9wZG93bi5hZGRPcHRpb24oaWQsIHByb2ZpbGUubmFtZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJvZmlsZURyb3Bkb3duLnNldFZhbHVlKG1hcHBpbmcucHJvZmlsZSk7XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSBwcm9maWxlIGNoYW5nZVxuICAgICAgICAgICAgcHJvZmlsZURyb3Bkb3duLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNyZWF0ZVBhdGhDb25maWcodGhpcy5wbHVnaW4uc2V0dGluZ3MsIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVDZWxsID0gcm93LmNyZWF0ZUVsKFwidGRcIik7XG4gICAgICAgICAgICBuZXcgRXh0cmFCdXR0b25Db21wb25lbnQoZGVsZXRlQ2VsbClcbiAgICAgICAgICAgICAgICAuc2V0SWNvbihcInRyYXNoXCIpXG4gICAgICAgICAgICAgICAgLnNldERpc2FibGVkKGlzRGVmYXVsdE1hcHBpbmcpXG4gICAgICAgICAgICAgICAgLnNldFRvb2x0aXAoXCJEZWxldGUgbWFwcGluZ1wiKVxuICAgICAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGx1Z2luLnNldHRpbmdzLnBhdGhfY29uZmlnc1twYXRoXTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBlbmFibGVkIGNoZWNrYm94IGNlbGxcbiAgICAgICAgICAgIGNvbnN0IGVuYWJsZWRDZWxsID0gcm93LmNyZWF0ZUVsKFwidGRcIik7XG4gICAgICAgICAgICBuZXcgVG9nZ2xlQ29tcG9uZW50KGVuYWJsZWRDZWxsKVxuICAgICAgICAgICAgICAgIC5zZXRUb29sdGlwKFwiRW5hYmxlL2Rpc2FibGUgbWFwcGluZ1wiKVxuICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShtYXBwaW5nLmVuYWJsZWQpXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYXRoX2NvbmZpZ3NbcGF0aF0uZW5hYmxlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc3RhdHVzQmFySXRlbS5yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEFwcCwgTW9kYWwsIE5vdGljZSwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IFByb3ZpZGVyVHlwZSB9IGZyb20gJ3NyYy9wcm92aWRlcnMnO1xuaW1wb3J0IEluc2NyaWJlIGZyb20gJ3NyYy9tYWluJztcblxuZXhwb3J0IGNsYXNzIFByb3ZpZGVyU2V0dGluZ3NNb2RhbCBleHRlbmRzIE1vZGFsIHtcbiAgICBwbHVnaW46IEluc2NyaWJlO1xuICAgIHByb3ZpZGVyVHlwZTogUHJvdmlkZXJUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogSW5zY3JpYmUsIHByb3ZpZGVyVHlwZTogUHJvdmlkZXJUeXBlKSB7XG4gICAgICAgIHN1cGVyKGFwcCk7XG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgICAgICB0aGlzLnByb3ZpZGVyVHlwZSA9IHByb3ZpZGVyVHlwZTtcbiAgICAgICAgdGhpcy5tb2RhbEVsLmFkZENsYXNzKCdpbnNjcmliZS1wcm92aWRlci1zZXR0aW5ncy1tb2RhbCcpO1xuICAgIH1cblxuICAgIG9uT3BlbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJQcm92aWRlclNldHRpbmdzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVuZGVyUHJvdmlkZXJTZXR0aW5ncygpIHtcbiAgICAgICAgY29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5wcm92aWRlclR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgUHJvdmlkZXJUeXBlLk9MTEFNQTpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlck9sbGFtYVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFByb3ZpZGVyVHlwZS5PUEVOQUk6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJPcGVuQUlTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQcm92aWRlclR5cGUuT1BFTkFJX0NPTVBBVElCTEU6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJPcGVuQUlDb21wYXRpYmxlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29udGVudEVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ1Vua25vd24gcHJvdmlkZXIgdHlwZScgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyByZW5kZXJPbGxhbWFTZXR0aW5ncygpIHtcbiAgICAgICAgY29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuICAgICAgICB0aGlzLnNldFRpdGxlKCdPbGxhbWEgU2V0dGluZ3MnKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50RWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIk9sbGFtYSBIb3N0XCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIlRoZSBob3N0IG9mIHRoZSBPbGxhbWEgQVBJXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb3ZpZGVycy5vbGxhbWEuaG9zdClcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvdmlkZXJzLm9sbGFtYS5ob3N0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlbmRlckNvbm5lY3Rpb25TdGF0dXModGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvdmlkZXJzLm9sbGFtYSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVuZGVyT3BlbkFJU2V0dGluZ3MoKSB7XG4gICAgICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgICAgICBjb250ZW50RWwuZW1wdHkoKTtcbiAgICAgICAgdGhpcy5zZXRUaXRsZSgnT3BlbkFJIFNldHRpbmdzJyk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcoY29udGVudEVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJPcGVuQUkgQVBJIEtleVwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgQVBJIGtleSBmb3IgT3BlbkFJXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb3ZpZGVycy5vcGVuYWkuYXBpS2V5KVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm92aWRlcnMub3BlbmFpLmFwaUtleSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJDb25uZWN0aW9uU3RhdHVzKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb3ZpZGVycy5vcGVuYWkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlbmRlck9wZW5BSUNvbXBhdGlibGVTZXR0aW5ncygpIHtcbiAgICAgICAgY29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuICAgICAgICB0aGlzLnNldFRpdGxlKCdPcGVuQUkgQ29tcGF0aWJsZSBQcm92aWRlciBTZXR0aW5ncycpO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnRFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiQVBJIEtleVwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgQVBJIGtleSBmb3IgT3BlbkFJIENvbXBhdGlibGUgUHJvdmlkZXJcIilcbiAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvdmlkZXJzLm9wZW5haV9jb21wYXRpYmxlLmFwaUtleSlcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvdmlkZXJzLm9wZW5haV9jb21wYXRpYmxlLmFwaUtleSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcoY29udGVudEVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJCYXNlIFVSTFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgYmFzZSBVUkwgZm9yIE9wZW5BSSBDb21wYXRpYmxlIFByb3ZpZGVyXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb3ZpZGVycy5vcGVuYWlfY29tcGF0aWJsZS5iYXNlVXJsKVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm92aWRlcnMub3BlbmFpX2NvbXBhdGlibGUuYmFzZVVybCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJDb25uZWN0aW9uU3RhdHVzKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb3ZpZGVycy5vcGVuYWlfY29tcGF0aWJsZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDb25uZWN0aW9uU3RhdHVzKHByb3ZpZGVyOiB7IGNvbmZpZ3VyZWQ6IGJvb2xlYW4gfSkge1xuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiU3RhdHVzXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhgJHtwcm92aWRlci5jb25maWd1cmVkID8gJ1N1Y2Nlc3NmdWwnIDogJ0ZhaWxlZCd9YClcbiAgICAgICAgICAgIC5hZGRCdXR0b24oYnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoYENvbm5lY3Rpb24gVGVzdGApXG4gICAgICAgICAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXREaXNhYmxlZCh0cnVlKS5zZXRCdXR0b25UZXh0KCdUZXN0aW5nLi4uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5jb25maWd1cmVkID0gYXdhaXQgdGhpcy5wbHVnaW4ucHJvdmlkZXJGYWN0b3J5LmNvbm5lY3Rpb25UZXN0KHRoaXMucHJvdmlkZXJUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5vdGljZShwcm92aWRlci5jb25maWd1cmVkID8gJ0Nvbm5lY3RlZCEnIDogJ0ZhaWxlZCB0byBjb25uZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclByb3ZpZGVyU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICBjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcbiAgICAgICAgY29udGVudEVsLmVtcHR5KCk7XG4gICAgICAgICh0aGlzLnBsdWdpbi5hcHAgYXMgYW55KS5zZXR0aW5nPy5vcGVuVGFiQnlJZCh0aGlzLnBsdWdpbi5tYW5pZmVzdC5pZCk7XG4gICAgfVxufSIsICJpbXBvcnQgeyBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IElubGluZUNvbXBsZXRpb25PcHRpb25zIH0gZnJvbSBcInNyYy9leHRlbnNpb25cIjtcbmltcG9ydCBJbnNjcmliZSBmcm9tIFwic3JjL21haW5cIjtcbmltcG9ydCB7IERFRkFVTFRfUEFUSCwgREVGQVVMVF9QUk9GSUxFLCBmaW5kUGF0aENvbmZpZywgUGF0aENvbmZpZywgUHJvZmlsZSwgU2V0dGluZ3MgfSBmcm9tIFwic3JjL3NldHRpbmdzL3NldHRpbmdzXCI7XG5cbi8vIFByb2ZpbGVTZXJ2aWNlIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciB0cmFja2luZyB0aGUgYWN0aXZlIHByb2ZpbGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgZmlsZSBwYXRoLlxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHBsdWdpbjogSW5zY3JpYmU7XG4gICAgcHJpdmF0ZSBhY3RpdmVQcm9maWxlOiBQcm9maWxlO1xuICAgIHByaXZhdGUgYWN0aXZlUGF0aDogc3RyaW5nO1xuICAgIHByaXZhdGUgYXBwOiBBcHA7XG4gICAgcHJpdmF0ZSBzZXR0aW5nczogU2V0dGluZ3M7XG4gICAgcHJpdmF0ZSBpbmxpbmVTdWdnZXN0aW9uT3B0aW9uczogSW5saW5lQ29tcGxldGlvbk9wdGlvbnMgPSB7IGRlbGF5TXM6IDMwMCwgc3BsaXRTdHJhdGVneTogXCJzZW50ZW5jZVwiIH07XG4gICAgcHJpdmF0ZSBwcm9maWxlQ2hhbmdlQ2FsbGJhY2tzOiAoKHByb2ZpbGU6IFByb2ZpbGUpID0+IHZvaWQpW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHBsdWdpbjogSW5zY3JpYmUpIHtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgICAgIHRoaXMuYXBwID0gdGhpcy5wbHVnaW4uYXBwO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5wbHVnaW4uc2V0dGluZ3M7XG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuZ2V0QWN0aXZlRmlsZVBhdGgoKSk7XG5cbiAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uKCdmaWxlLW9wZW4nLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShmaWxlLnBhdGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVQcm9maWxlKCk6IFByb2ZpbGUge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVQcm9maWxlO1xuICAgIH1cblxuICAgIGdldEFjdGl2ZVBhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlUGF0aDtcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVQYXRoQ29uZmlnKCk6IFBhdGhDb25maWcge1xuICAgICAgICByZXR1cm4gZmluZFBhdGhDb25maWcodGhpcy5zZXR0aW5ncywgdGhpcy5hY3RpdmVQYXRoKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25zKCk6IElubGluZUNvbXBsZXRpb25PcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlbGF5TXM6IHRoaXMuYWN0aXZlUHJvZmlsZS5kZWxheU1zLFxuICAgICAgICAgICAgc3BsaXRTdHJhdGVneTogdGhpcy5hY3RpdmVQcm9maWxlLnNwbGl0U3RyYXRlZ3lcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvblByb2ZpbGVDaGFuZ2UoY2FsbGJhY2s6IChwcm9maWxlOiBQcm9maWxlKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMucHJvZmlsZUNoYW5nZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZShmaWxlUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIFt0aGlzLmFjdGl2ZVBhdGgsIHRoaXMuYWN0aXZlUHJvZmlsZV0gPSB0aGlzLnJlc29sdmVQcm9maWxlRnJvbVBhdGgoZmlsZVBhdGgpO1xuICAgICAgICB0aGlzLnByb2ZpbGVDaGFuZ2VDYWxsYmFja3MuZm9yRWFjaChjYiA9PiBjYih0aGlzLmFjdGl2ZVByb2ZpbGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjdGl2ZUZpbGVQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUVkaXRvciA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVFZGl0b3I7XG4gICAgICAgIGlmICghYWN0aXZlRWRpdG9yKSByZXR1cm4gXCJcIjtcbiAgICAgICAgaWYgKCFhY3RpdmVFZGl0b3IuZmlsZSkgcmV0dXJuIFwiXCI7XG4gICAgICAgIHJldHVybiBhY3RpdmVFZGl0b3IuZmlsZS5wYXRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZVByb2ZpbGVGcm9tUGF0aChmaWxlUGF0aDogc3RyaW5nKTogW3N0cmluZywgUHJvZmlsZV0ge1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MucGF0aF9jb25maWdzIHx8IE9iamVjdC5rZXlzKHRoaXMuc2V0dGluZ3MucGF0aF9jb25maWdzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbREVGQVVMVF9QQVRILCB0aGlzLnNldHRpbmdzLnByb2ZpbGVzW0RFRkFVTFRfUFJPRklMRV1dO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBmaWxlUGF0aC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyk7XG4gICAgICAgIGxldCBsb25nZXN0TWF0Y2ggPSAnJztcbiAgICAgICAgbGV0IG1hdGNoZWRQcm9maWxlID0gREVGQVVMVF9QUk9GSUxFO1xuICAgICAgICBsZXQgcGF0aE1hcHBpbmcgPSAnLyc7XG5cbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5zZXR0aW5ncy5wYXRoX2NvbmZpZ3MpLmZvckVhY2goKFtwYXRoLCBtYXBwaW5nXSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZE1hcHBpbmdQYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyk7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChub3JtYWxpemVkTWFwcGluZ1BhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRNYXBwaW5nUGF0aC5sZW5ndGggPiBsb25nZXN0TWF0Y2gubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvbmdlc3RNYXRjaCA9IG5vcm1hbGl6ZWRNYXBwaW5nUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFByb2ZpbGUgPSBtYXBwaW5nLnByb2ZpbGU7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhNYXBwaW5nID0gcGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBbcGF0aE1hcHBpbmcsIHRoaXMuc2V0dGluZ3MucHJvZmlsZXNbbWF0Y2hlZFByb2ZpbGVdXTtcbiAgICB9XG5cbiAgICBvbnVubG9hZCgpIHtcbiAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9mZignZmlsZS1vcGVuJywgdGhpcy51cGRhdGUpO1xuICAgIH1cbn0iLCAiaW1wb3J0IHsgQXBwLCBFZGl0b3IgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IFByb2ZpbGVTZXJ2aWNlIH0gZnJvbSBcInNyYy9wcm9maWxlL3NlcnZpY2VcIjtcbmltcG9ydCB7IFByb3ZpZGVyRmFjdG9yeSB9IGZyb20gXCJzcmMvcHJvdmlkZXJzL2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1Z2dlc3Rpb24gfSBmcm9tIFwic3JjL2V4dGVuc2lvblwiO1xuaW1wb3J0IHsgQ29tcGxldGlvbk9wdGlvbnMsIFNldHRpbmdzIH0gZnJvbSBcInNyYy9zZXR0aW5ncy9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwic3JjL3Byb3ZpZGVycy9wcm92aWRlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21wbGV0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSBhcHA6IEFwcDtcbiAgICBwcml2YXRlIHNldHRpbmdzOiBTZXR0aW5ncztcbiAgICBwcml2YXRlIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZTtcbiAgICBwcml2YXRlIHByb3ZpZGVyRmFjdG9yeTogUHJvdmlkZXJGYWN0b3J5O1xuICAgIHByaXZhdGUgY29tcGxldGlvblN0YXR1c0xpc3RlbmVyczogKChpc0dlbmVyYXRpbmc6IGJvb2xlYW4pID0+IHZvaWQpW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBhcHA6IEFwcCxcbiAgICAgICAgc2V0dGluZ3M6IFNldHRpbmdzLFxuICAgICAgICBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgICAgIHByb3ZpZGVyRmFjdG9yeTogUHJvdmlkZXJGYWN0b3J5LFxuICAgICkge1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLnByb2ZpbGVTZXJ2aWNlID0gcHJvZmlsZVNlcnZpY2U7XG4gICAgICAgIHRoaXMucHJvdmlkZXJGYWN0b3J5ID0gcHJvdmlkZXJGYWN0b3J5O1xuICAgIH1cblxuICAgIGFzeW5jICpmZXRjaENvbXBsZXRpb24oKTogQXN5bmNHZW5lcmF0b3I8U3VnZ2VzdGlvbj4ge1xuICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbkVuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBhY3RpdmVFZGl0b3IgPSB0aGlzLmFwcC53b3Jrc3BhY2UuYWN0aXZlRWRpdG9yO1xuICAgICAgICBpZiAoIWFjdGl2ZUVkaXRvcikgcmV0dXJuO1xuICAgICAgICBpZiAoIWFjdGl2ZUVkaXRvci5lZGl0b3IpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwcm9maWxlID0gdGhpcy5wcm9maWxlU2VydmljZS5nZXRBY3RpdmVQcm9maWxlKCk7XG5cbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnByb3ZpZGVyRmFjdG9yeS5nZXRQcm92aWRlcihwcm9maWxlLnByb3ZpZGVyKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHByb2ZpbGUuY29tcGxldGlvbk9wdGlvbnM7XG5cbiAgICAgICAgeWllbGQqIHRoaXMuY29tcGxldGUoYWN0aXZlRWRpdG9yLmVkaXRvciwgcHJvdmlkZXIsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIG9uQ29tcGxldGlvblN0YXR1c0NoYW5nZShsaXN0ZW5lcjogKGlzR2VuZXJhdGluZzogYm9vbGVhbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmNvbXBsZXRpb25TdGF0dXNMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgY29tcGxldGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmVuYWJsZWQgJiYgdGhpcy5wcm9maWxlU2VydmljZS5nZXRBY3RpdmVQYXRoQ29uZmlnKCkuZW5hYmxlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUNvbXBsZXRpb25TdGF0dXMoaXNHZW5lcmF0aW5nOiBib29sZWFuKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5jb21wbGV0aW9uU3RhdHVzTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcihpc0dlbmVyYXRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyAqY29tcGxldGUoZWRpdG9yOiBFZGl0b3IsIHByb3ZpZGVyOiBQcm92aWRlciwgb3B0aW9uczogQ29tcGxldGlvbk9wdGlvbnMpOiBBc3luY0dlbmVyYXRvcjxTdWdnZXN0aW9uPiB7XG4gICAgICAgIGF3YWl0IHByb3ZpZGVyLmFib3J0KCk7XG5cbiAgICAgICAgY29uc3QgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvcigpO1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZSA9IGVkaXRvci5nZXRMaW5lKGN1cnNvci5saW5lKTtcblxuICAgICAgICBpZiAoIWN1cnJlbnRMaW5lLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGxhc3RDaGFyID0gY3VycmVudExpbmVbY3Vyc29yLmNoIC0gMV07XG4gICAgICAgIGlmIChsYXN0Q2hhciAhPT0gXCIgXCIpIHJldHVybjtcblxuICAgICAgICB0aGlzLm5vdGlmeUNvbXBsZXRpb25TdGF0dXModHJ1ZSk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgdGV4dCBvZiBwcm92aWRlci5nZW5lcmF0ZShlZGl0b3IsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB5aWVsZCB7IHRleHQgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmeUNvbXBsZXRpb25TdGF0dXMoZmFsc2UpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBNZW51LCBzZXRJY29uLCBzZXRUb29sdGlwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IEluc2NyaWJlIGZyb20gJy4uL21haW4nO1xuaW1wb3J0IHsgUHJvZmlsZVNlcnZpY2UgfSBmcm9tICdzcmMvcHJvZmlsZS9zZXJ2aWNlJztcbmltcG9ydCBDb21wbGV0aW9uU2VydmljZSBmcm9tICdzcmMvY29tcGxldGlvbnMvc2VydmljZSc7XG5pbXBvcnQgeyBmaW5kUGF0aENvbmZpZyB9IGZyb20gJ3NyYy9zZXR0aW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXR1c0Jhckl0ZW0ge1xuICAgIHByaXZhdGUgcGx1Z2luOiBJbnNjcmliZTtcbiAgICBwcml2YXRlIHN0YXR1c0Jhckl0ZW06IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlO1xuICAgIHByaXZhdGUgY29tcGxldGlvblNlcnZpY2U6IENvbXBsZXRpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgaXNHZW5lcmF0aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihwbHVnaW46IEluc2NyaWJlLCBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsIGNvbXBsZXRpb25TZXJ2aWNlOiBDb21wbGV0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5wcm9maWxlU2VydmljZSA9IHByb2ZpbGVTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNvbXBsZXRpb25TZXJ2aWNlID0gY29tcGxldGlvblNlcnZpY2U7XG5cbiAgICAgICAgdGhpcy5wcm9maWxlU2VydmljZS5vblByb2ZpbGVDaGFuZ2UodGhpcy5oYW5kbGVQcm9maWxlQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmNvbXBsZXRpb25TZXJ2aWNlLm9uQ29tcGxldGlvblN0YXR1c0NoYW5nZSh0aGlzLmhhbmRsZUNvbXBsZXRpb25TdGF0dXNDaGFuZ2UuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGhpcy5zdGF0dXNCYXJJdGVtID0gdGhpcy5jcmVhdGVTdGF0dXNCYXJJdGVtKCk7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0dlbmVyYXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQmFySXRlbS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICBzZXRUb29sdGlwKHRoaXMuc3RhdHVzQmFySXRlbSwgJ0luc2NyaWJpbmcuLi4nLCB7IHBsYWNlbWVudDogJ3RvcCcgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0Jhckl0ZW0ucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29tcGxldGlvblNlcnZpY2UuY29tcGxldGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQmFySXRlbS5yZW1vdmVDbGFzcygnY29tcGxldGlvbi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSh0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldEFjdGl2ZVByb2ZpbGUoKS5uYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNCYXJJdGVtLmFkZENsYXNzKCdjb21wbGV0aW9uLWRpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgc2V0VG9vbHRpcCh0aGlzLnN0YXR1c0Jhckl0ZW0sIGBDb21wbGV0aW9uIGRpc2FibGVkYCwgeyBwbGFjZW1lbnQ6ICd0b3AnIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdGF0dXNCYXJJdGVtKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucGx1Z2luLmFkZFN0YXR1c0Jhckl0ZW0oKTtcbiAgICAgICAgc2V0SWNvbihpdGVtLCAnZmVhdGhlcicpO1xuICAgICAgICBpdGVtLmFkZENsYXNzZXMoWydzdGF0dXMtYmFyLWl0ZW0taWNvbicsIGBtb2QtY2xpY2thYmxlYF0pO1xuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kaXNwbGF5Q29udGV4dE1lbnUuYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzcGxheUNvbnRleHRNZW51KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lbnUgPSBuZXcgTWVudSgpO1xuICAgICAgICBjb25zdCBnbG9iYWxDb21wbGV0aW9uRW5hYmxlZCA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZWQ7XG4gICAgICAgIGNvbnN0IHBhdGhDb21wbGV0aW9uRW5hYmxlZCA9IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0QWN0aXZlUGF0aENvbmZpZygpLmVuYWJsZWQ7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldEFjdGl2ZVBhdGgoKTtcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0QWN0aXZlUHJvZmlsZSgpO1xuXG4gICAgICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShgUHJvZmlsZTogJHtwcm9maWxlLm5hbWV9YCkuc2V0SXNMYWJlbCh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShgJHtwYXRoQ29tcGxldGlvbkVuYWJsZWQgPyAnRGlzYWJsZScgOiAnRW5hYmxlJ30gdGhpcyBwYXRoOiB7JHtwYXRofV19YClcbiAgICAgICAgICAgICAgICAuc2V0Q2hlY2tlZChwYXRoQ29tcGxldGlvbkVuYWJsZWQpXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoQ29uZmlnID0gZmluZFBhdGhDb25maWcodGhpcy5wbHVnaW4uc2V0dGluZ3MsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBwYXRoQ29uZmlnLmVuYWJsZWQgPSAhcGF0aENvbXBsZXRpb25FbmFibGVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShgJHtnbG9iYWxDb21wbGV0aW9uRW5hYmxlZCA/ICdEaXNhYmxlJyA6ICdFbmFibGUnfSBnbG9iYWxseWApXG4gICAgICAgICAgICAgICAgLnNldENoZWNrZWQoZ2xvYmFsQ29tcGxldGlvbkVuYWJsZWQpXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVkID0gIWdsb2JhbENvbXBsZXRpb25FbmFibGVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1lbnUuYWRkU2VwYXJhdG9yKCk7XG4gICAgICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShcIk9wZW4gc2V0dGluZ3NcIilcbiAgICAgICAgICAgICAgICAub25DbGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSAodGhpcy5wbHVnaW4uYXBwIGFzIGFueSkuc2V0dGluZztcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5vcGVuKCk7XG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmcub3BlblRhYkJ5SWQodGhpcy5wbHVnaW4ubWFuaWZlc3QuaWQpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lbnUuc2hvd0F0TW91c2VFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDb21wbGV0aW9uU3RhdHVzQ2hhbmdlKGlzR2VuZXJhdGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzR2VuZXJhdGluZyA9IGlzR2VuZXJhdGluZztcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVByb2ZpbGVDaGFuZ2UocHJvZmlsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcm9maWxlKHByb2ZpbGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBzZXRUb29sdGlwKHRoaXMuc3RhdHVzQmFySXRlbSwgYFByb2ZpbGU6ICR7cHJvZmlsZX1gLCB7IHBsYWNlbWVudDogJ3RvcCcgfSk7XG4gICAgfVxufSAiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSx5REFBQUEsU0FBQTtBQUFBLEtBQUMsU0FBVUMsU0FBUSxTQUFTO0FBQzFCLGFBQU8sWUFBWSxZQUFZLE9BQU9ELFlBQVcsY0FBYyxRQUFRLE9BQU8sSUFDOUUsT0FBTyxXQUFXLGNBQWMsT0FBTyxNQUFNLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxJQUN2RSxRQUFTQyxRQUFPLGNBQWMsQ0FBQyxDQUFFO0FBQUEsSUFDcEMsR0FBRSxTQUFPLFNBQVVDLFVBQVM7QUFBRTtBQUc1QixVQUFJQyxLQUNELE9BQU8sZUFBZSxlQUFlLGNBQ3JDLE9BQU8sU0FBUyxlQUFlO0FBQUEsTUFFL0IsT0FBTyxXQUFXLGVBQWUsVUFDbEMsQ0FBQztBQUVILFVBQUksVUFBVTtBQUFBLFFBQ1osY0FBYyxxQkFBcUJBO0FBQUEsUUFDbkMsVUFBVSxZQUFZQSxNQUFLLGNBQWM7QUFBQSxRQUN6QyxNQUNFLGdCQUFnQkEsTUFDaEIsVUFBVUEsTUFDVCxXQUFXO0FBQ1YsY0FBSTtBQUNGLGdCQUFJLEtBQUs7QUFDVCxtQkFBTztBQUFBLFVBQ1QsU0FBU0MsSUFBUDtBQUNBLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFFBQ0YsRUFBRztBQUFBLFFBQ0wsVUFBVSxjQUFjRDtBQUFBLFFBQ3hCLGFBQWEsaUJBQWlCQTtBQUFBLE1BQ2hDO0FBRUEsZUFBUyxXQUFXLEtBQUs7QUFDdkIsZUFBTyxPQUFPLFNBQVMsVUFBVSxjQUFjLEdBQUc7QUFBQSxNQUNwRDtBQUVBLFVBQUksUUFBUSxhQUFhO0FBQ3ZCLFlBQUksY0FBYztBQUFBLFVBQ2hCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBRUEsWUFBSSxvQkFDRixZQUFZLFVBQ1osU0FBUyxLQUFLO0FBQ1osaUJBQU8sT0FBTyxZQUFZLFFBQVEsT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUFHLENBQUMsSUFBSTtBQUFBLFFBQzNFO0FBQUEsTUFDSjtBQUVBLGVBQVMsY0FBYyxNQUFNO0FBQzNCLFlBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsaUJBQU8sT0FBTyxJQUFJO0FBQUEsUUFDcEI7QUFDQSxZQUFJLDZCQUE2QixLQUFLLElBQUksS0FBSyxTQUFTLElBQUk7QUFDMUQsZ0JBQU0sSUFBSSxVQUFVLDhDQUE4QyxPQUFPLEdBQUc7QUFBQSxRQUM5RTtBQUNBLGVBQU8sS0FBSyxZQUFZO0FBQUEsTUFDMUI7QUFFQSxlQUFTRSxnQkFBZSxPQUFPO0FBQzdCLFlBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0Isa0JBQVEsT0FBTyxLQUFLO0FBQUEsUUFDdEI7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUdBLGVBQVMsWUFBWSxPQUFPO0FBQzFCLFlBQUksV0FBVztBQUFBLFVBQ2IsTUFBTSxXQUFXO0FBQ2YsZ0JBQUksUUFBUSxNQUFNLE1BQU07QUFDeEIsbUJBQU8sRUFBQyxNQUFNLFVBQVUsUUFBVyxNQUFZO0FBQUEsVUFDakQ7QUFBQSxRQUNGO0FBRUEsWUFBSSxRQUFRLFVBQVU7QUFDcEIsbUJBQVMsT0FBTyxRQUFRLElBQUksV0FBVztBQUNyQyxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTQyxTQUFRLFNBQVM7QUFDeEIsYUFBSyxNQUFNLENBQUM7QUFFWixZQUFJLG1CQUFtQkEsVUFBUztBQUM5QixrQkFBUSxRQUFRLFNBQVMsT0FBTyxNQUFNO0FBQ3BDLGlCQUFLLE9BQU8sTUFBTSxLQUFLO0FBQUEsVUFDekIsR0FBRyxJQUFJO0FBQUEsUUFDVCxXQUFXLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDakMsa0JBQVEsUUFBUSxTQUFTLFFBQVE7QUFDL0IsZ0JBQUksT0FBTyxVQUFVLEdBQUc7QUFDdEIsb0JBQU0sSUFBSSxVQUFVLHdFQUF3RSxPQUFPLE1BQU07QUFBQSxZQUMzRztBQUNBLGlCQUFLLE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFBQSxVQUNsQyxHQUFHLElBQUk7QUFBQSxRQUNULFdBQVcsU0FBUztBQUNsQixpQkFBTyxvQkFBb0IsT0FBTyxFQUFFLFFBQVEsU0FBUyxNQUFNO0FBQ3pELGlCQUFLLE9BQU8sTUFBTSxRQUFRLElBQUksQ0FBQztBQUFBLFVBQ2pDLEdBQUcsSUFBSTtBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBRUEsTUFBQUEsU0FBUSxVQUFVLFNBQVMsU0FBUyxNQUFNLE9BQU87QUFDL0MsZUFBTyxjQUFjLElBQUk7QUFDekIsZ0JBQVFELGdCQUFlLEtBQUs7QUFDNUIsWUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJO0FBQzVCLGFBQUssSUFBSSxJQUFJLElBQUksV0FBVyxXQUFXLE9BQU8sUUFBUTtBQUFBLE1BQ3hEO0FBRUEsTUFBQUMsU0FBUSxVQUFVLFFBQVEsSUFBSSxTQUFTLE1BQU07QUFDM0MsZUFBTyxLQUFLLElBQUksY0FBYyxJQUFJLENBQUM7QUFBQSxNQUNyQztBQUVBLE1BQUFBLFNBQVEsVUFBVSxNQUFNLFNBQVMsTUFBTTtBQUNyQyxlQUFPLGNBQWMsSUFBSTtBQUN6QixlQUFPLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSTtBQUFBLE1BQzNDO0FBRUEsTUFBQUEsU0FBUSxVQUFVLE1BQU0sU0FBUyxNQUFNO0FBQ3JDLGVBQU8sS0FBSyxJQUFJLGVBQWUsY0FBYyxJQUFJLENBQUM7QUFBQSxNQUNwRDtBQUVBLE1BQUFBLFNBQVEsVUFBVSxNQUFNLFNBQVMsTUFBTSxPQUFPO0FBQzVDLGFBQUssSUFBSSxjQUFjLElBQUksQ0FBQyxJQUFJRCxnQkFBZSxLQUFLO0FBQUEsTUFDdEQ7QUFFQSxNQUFBQyxTQUFRLFVBQVUsVUFBVSxTQUFTLFVBQVUsU0FBUztBQUN0RCxpQkFBUyxRQUFRLEtBQUssS0FBSztBQUN6QixjQUFJLEtBQUssSUFBSSxlQUFlLElBQUksR0FBRztBQUNqQyxxQkFBUyxLQUFLLFNBQVMsS0FBSyxJQUFJLElBQUksR0FBRyxNQUFNLElBQUk7QUFBQSxVQUNuRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsTUFBQUEsU0FBUSxVQUFVLE9BQU8sV0FBVztBQUNsQyxZQUFJLFFBQVEsQ0FBQztBQUNiLGFBQUssUUFBUSxTQUFTLE9BQU8sTUFBTTtBQUNqQyxnQkFBTSxLQUFLLElBQUk7QUFBQSxRQUNqQixDQUFDO0FBQ0QsZUFBTyxZQUFZLEtBQUs7QUFBQSxNQUMxQjtBQUVBLE1BQUFBLFNBQVEsVUFBVSxTQUFTLFdBQVc7QUFDcEMsWUFBSSxRQUFRLENBQUM7QUFDYixhQUFLLFFBQVEsU0FBUyxPQUFPO0FBQzNCLGdCQUFNLEtBQUssS0FBSztBQUFBLFFBQ2xCLENBQUM7QUFDRCxlQUFPLFlBQVksS0FBSztBQUFBLE1BQzFCO0FBRUEsTUFBQUEsU0FBUSxVQUFVLFVBQVUsV0FBVztBQUNyQyxZQUFJLFFBQVEsQ0FBQztBQUNiLGFBQUssUUFBUSxTQUFTLE9BQU8sTUFBTTtBQUNqQyxnQkFBTSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7QUFBQSxRQUMxQixDQUFDO0FBQ0QsZUFBTyxZQUFZLEtBQUs7QUFBQSxNQUMxQjtBQUVBLFVBQUksUUFBUSxVQUFVO0FBQ3BCLFFBQUFBLFNBQVEsVUFBVSxPQUFPLFFBQVEsSUFBSUEsU0FBUSxVQUFVO0FBQUEsTUFDekQ7QUFFQSxlQUFTLFNBQVMsTUFBTTtBQUN0QixZQUFJLEtBQUs7QUFBUztBQUNsQixZQUFJLEtBQUssVUFBVTtBQUNqQixpQkFBTyxRQUFRLE9BQU8sSUFBSSxVQUFVLGNBQWMsQ0FBQztBQUFBLFFBQ3JEO0FBQ0EsYUFBSyxXQUFXO0FBQUEsTUFDbEI7QUFFQSxlQUFTLGdCQUFnQixRQUFRO0FBQy9CLGVBQU8sSUFBSSxRQUFRLFNBQVNDLFVBQVMsUUFBUTtBQUMzQyxpQkFBTyxTQUFTLFdBQVc7QUFDekIsWUFBQUEsU0FBUSxPQUFPLE1BQU07QUFBQSxVQUN2QjtBQUNBLGlCQUFPLFVBQVUsV0FBVztBQUMxQixtQkFBTyxPQUFPLEtBQUs7QUFBQSxVQUNyQjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFFQSxlQUFTLHNCQUFzQixNQUFNO0FBQ25DLFlBQUksU0FBUyxJQUFJLFdBQVc7QUFDNUIsWUFBSSxVQUFVLGdCQUFnQixNQUFNO0FBQ3BDLGVBQU8sa0JBQWtCLElBQUk7QUFDN0IsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLGVBQWUsTUFBTTtBQUM1QixZQUFJLFNBQVMsSUFBSSxXQUFXO0FBQzVCLFlBQUksVUFBVSxnQkFBZ0IsTUFBTTtBQUNwQyxZQUFJQyxTQUFRLDJCQUEyQixLQUFLLEtBQUssSUFBSTtBQUNyRCxZQUFJLFdBQVdBLFNBQVFBLE9BQU0sQ0FBQyxJQUFJO0FBQ2xDLGVBQU8sV0FBVyxNQUFNLFFBQVE7QUFDaEMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLHNCQUFzQixLQUFLO0FBQ2xDLFlBQUksT0FBTyxJQUFJLFdBQVcsR0FBRztBQUM3QixZQUFJLFFBQVEsSUFBSSxNQUFNLEtBQUssTUFBTTtBQUVqQyxpQkFBU0MsS0FBSSxHQUFHQSxLQUFJLEtBQUssUUFBUUEsTUFBSztBQUNwQyxnQkFBTUEsRUFBQyxJQUFJLE9BQU8sYUFBYSxLQUFLQSxFQUFDLENBQUM7QUFBQSxRQUN4QztBQUNBLGVBQU8sTUFBTSxLQUFLLEVBQUU7QUFBQSxNQUN0QjtBQUVBLGVBQVMsWUFBWSxLQUFLO0FBQ3hCLFlBQUksSUFBSSxPQUFPO0FBQ2IsaUJBQU8sSUFBSSxNQUFNLENBQUM7QUFBQSxRQUNwQixPQUFPO0FBQ0wsY0FBSSxPQUFPLElBQUksV0FBVyxJQUFJLFVBQVU7QUFDeEMsZUFBSyxJQUFJLElBQUksV0FBVyxHQUFHLENBQUM7QUFDNUIsaUJBQU8sS0FBSztBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBRUEsZUFBUyxPQUFPO0FBQ2QsYUFBSyxXQUFXO0FBRWhCLGFBQUssWUFBWSxTQUFTLE1BQU07QUFZOUIsZUFBSyxXQUFXLEtBQUs7QUFDckIsZUFBSyxZQUFZO0FBQ2pCLGNBQUksQ0FBQyxNQUFNO0FBQ1QsaUJBQUssVUFBVTtBQUNmLGlCQUFLLFlBQVk7QUFBQSxVQUNuQixXQUFXLE9BQU8sU0FBUyxVQUFVO0FBQ25DLGlCQUFLLFlBQVk7QUFBQSxVQUNuQixXQUFXLFFBQVEsUUFBUSxLQUFLLFVBQVUsY0FBYyxJQUFJLEdBQUc7QUFDN0QsaUJBQUssWUFBWTtBQUFBLFVBQ25CLFdBQVcsUUFBUSxZQUFZLFNBQVMsVUFBVSxjQUFjLElBQUksR0FBRztBQUNyRSxpQkFBSyxnQkFBZ0I7QUFBQSxVQUN2QixXQUFXLFFBQVEsZ0JBQWdCLGdCQUFnQixVQUFVLGNBQWMsSUFBSSxHQUFHO0FBQ2hGLGlCQUFLLFlBQVksS0FBSyxTQUFTO0FBQUEsVUFDakMsV0FBVyxRQUFRLGVBQWUsUUFBUSxRQUFRLFdBQVcsSUFBSSxHQUFHO0FBQ2xFLGlCQUFLLG1CQUFtQixZQUFZLEtBQUssTUFBTTtBQUUvQyxpQkFBSyxZQUFZLElBQUksS0FBSyxDQUFDLEtBQUssZ0JBQWdCLENBQUM7QUFBQSxVQUNuRCxXQUFXLFFBQVEsZ0JBQWdCLFlBQVksVUFBVSxjQUFjLElBQUksS0FBSyxrQkFBa0IsSUFBSSxJQUFJO0FBQ3hHLGlCQUFLLG1CQUFtQixZQUFZLElBQUk7QUFBQSxVQUMxQyxPQUFPO0FBQ0wsaUJBQUssWUFBWSxPQUFPLE9BQU8sVUFBVSxTQUFTLEtBQUssSUFBSTtBQUFBLFVBQzdEO0FBRUEsY0FBSSxDQUFDLEtBQUssUUFBUSxJQUFJLGNBQWMsR0FBRztBQUNyQyxnQkFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixtQkFBSyxRQUFRLElBQUksZ0JBQWdCLDBCQUEwQjtBQUFBLFlBQzdELFdBQVcsS0FBSyxhQUFhLEtBQUssVUFBVSxNQUFNO0FBQ2hELG1CQUFLLFFBQVEsSUFBSSxnQkFBZ0IsS0FBSyxVQUFVLElBQUk7QUFBQSxZQUN0RCxXQUFXLFFBQVEsZ0JBQWdCLGdCQUFnQixVQUFVLGNBQWMsSUFBSSxHQUFHO0FBQ2hGLG1CQUFLLFFBQVEsSUFBSSxnQkFBZ0IsaURBQWlEO0FBQUEsWUFDcEY7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLFlBQUksUUFBUSxNQUFNO0FBQ2hCLGVBQUssT0FBTyxXQUFXO0FBQ3JCLGdCQUFJLFdBQVcsU0FBUyxJQUFJO0FBQzVCLGdCQUFJLFVBQVU7QUFDWixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxLQUFLLFdBQVc7QUFDbEIscUJBQU8sUUFBUSxRQUFRLEtBQUssU0FBUztBQUFBLFlBQ3ZDLFdBQVcsS0FBSyxrQkFBa0I7QUFDaEMscUJBQU8sUUFBUSxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztBQUFBLFlBQzFELFdBQVcsS0FBSyxlQUFlO0FBQzdCLG9CQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxZQUN4RCxPQUFPO0FBQ0wscUJBQU8sUUFBUSxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7QUFBQSxZQUNuRDtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsYUFBSyxjQUFjLFdBQVc7QUFDNUIsY0FBSSxLQUFLLGtCQUFrQjtBQUN6QixnQkFBSSxhQUFhLFNBQVMsSUFBSTtBQUM5QixnQkFBSSxZQUFZO0FBQ2QscUJBQU87QUFBQSxZQUNULFdBQVcsWUFBWSxPQUFPLEtBQUssZ0JBQWdCLEdBQUc7QUFDcEQscUJBQU8sUUFBUTtBQUFBLGdCQUNiLEtBQUssaUJBQWlCLE9BQU87QUFBQSxrQkFDM0IsS0FBSyxpQkFBaUI7QUFBQSxrQkFDdEIsS0FBSyxpQkFBaUIsYUFBYSxLQUFLLGlCQUFpQjtBQUFBLGdCQUMzRDtBQUFBLGNBQ0Y7QUFBQSxZQUNGLE9BQU87QUFDTCxxQkFBTyxRQUFRLFFBQVEsS0FBSyxnQkFBZ0I7QUFBQSxZQUM5QztBQUFBLFVBQ0YsV0FBVyxRQUFRLE1BQU07QUFDdkIsbUJBQU8sS0FBSyxLQUFLLEVBQUUsS0FBSyxxQkFBcUI7QUFBQSxVQUMvQyxPQUFPO0FBQ0wsa0JBQU0sSUFBSSxNQUFNLCtCQUErQjtBQUFBLFVBQ2pEO0FBQUEsUUFDRjtBQUVBLGFBQUssT0FBTyxXQUFXO0FBQ3JCLGNBQUksV0FBVyxTQUFTLElBQUk7QUFDNUIsY0FBSSxVQUFVO0FBQ1osbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxLQUFLLFdBQVc7QUFDbEIsbUJBQU8sZUFBZSxLQUFLLFNBQVM7QUFBQSxVQUN0QyxXQUFXLEtBQUssa0JBQWtCO0FBQ2hDLG1CQUFPLFFBQVEsUUFBUSxzQkFBc0IsS0FBSyxnQkFBZ0IsQ0FBQztBQUFBLFVBQ3JFLFdBQVcsS0FBSyxlQUFlO0FBQzdCLGtCQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxVQUN4RCxPQUFPO0FBQ0wsbUJBQU8sUUFBUSxRQUFRLEtBQUssU0FBUztBQUFBLFVBQ3ZDO0FBQUEsUUFDRjtBQUVBLFlBQUksUUFBUSxVQUFVO0FBQ3BCLGVBQUssV0FBVyxXQUFXO0FBQ3pCLG1CQUFPLEtBQUssS0FBSyxFQUFFLEtBQUssTUFBTTtBQUFBLFVBQ2hDO0FBQUEsUUFDRjtBQUVBLGFBQUssT0FBTyxXQUFXO0FBQ3JCLGlCQUFPLEtBQUssS0FBSyxFQUFFLEtBQUssS0FBSyxLQUFLO0FBQUEsUUFDcEM7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUdBLFVBQUlDLFlBQVUsQ0FBQyxXQUFXLFVBQVUsT0FBTyxRQUFRLFdBQVcsU0FBUyxRQUFRLE9BQU8sT0FBTztBQUU3RixlQUFTLGdCQUFnQixRQUFRO0FBQy9CLFlBQUksVUFBVSxPQUFPLFlBQVk7QUFDakMsZUFBT0EsVUFBUSxRQUFRLE9BQU8sSUFBSSxLQUFLLFVBQVU7QUFBQSxNQUNuRDtBQUVBLGVBQVNDLFNBQVEsT0FBTyxTQUFTO0FBQy9CLFlBQUksRUFBRSxnQkFBZ0JBLFdBQVU7QUFDOUIsZ0JBQU0sSUFBSSxVQUFVLDRGQUE0RjtBQUFBLFFBQ2xIO0FBRUEsa0JBQVUsV0FBVyxDQUFDO0FBQ3RCLFlBQUksT0FBTyxRQUFRO0FBRW5CLFlBQUksaUJBQWlCQSxVQUFTO0FBQzVCLGNBQUksTUFBTSxVQUFVO0FBQ2xCLGtCQUFNLElBQUksVUFBVSxjQUFjO0FBQUEsVUFDcEM7QUFDQSxlQUFLLE1BQU0sTUFBTTtBQUNqQixlQUFLLGNBQWMsTUFBTTtBQUN6QixjQUFJLENBQUMsUUFBUSxTQUFTO0FBQ3BCLGlCQUFLLFVBQVUsSUFBSUwsU0FBUSxNQUFNLE9BQU87QUFBQSxVQUMxQztBQUNBLGVBQUssU0FBUyxNQUFNO0FBQ3BCLGVBQUssT0FBTyxNQUFNO0FBQ2xCLGVBQUssU0FBUyxNQUFNO0FBQ3BCLGNBQUksQ0FBQyxRQUFRLE1BQU0sYUFBYSxNQUFNO0FBQ3BDLG1CQUFPLE1BQU07QUFDYixrQkFBTSxXQUFXO0FBQUEsVUFDbkI7QUFBQSxRQUNGLE9BQU87QUFDTCxlQUFLLE1BQU0sT0FBTyxLQUFLO0FBQUEsUUFDekI7QUFFQSxhQUFLLGNBQWMsUUFBUSxlQUFlLEtBQUssZUFBZTtBQUM5RCxZQUFJLFFBQVEsV0FBVyxDQUFDLEtBQUssU0FBUztBQUNwQyxlQUFLLFVBQVUsSUFBSUEsU0FBUSxRQUFRLE9BQU87QUFBQSxRQUM1QztBQUNBLGFBQUssU0FBUyxnQkFBZ0IsUUFBUSxVQUFVLEtBQUssVUFBVSxLQUFLO0FBQ3BFLGFBQUssT0FBTyxRQUFRLFFBQVEsS0FBSyxRQUFRO0FBQ3pDLGFBQUssU0FBUyxRQUFRLFVBQVUsS0FBSyxVQUFXLFdBQVk7QUFDMUQsY0FBSSxxQkFBcUJILElBQUc7QUFDMUIsZ0JBQUksT0FBTyxJQUFJLGdCQUFnQjtBQUMvQixtQkFBTyxLQUFLO0FBQUEsVUFDZDtBQUFBLFFBQ0YsRUFBRTtBQUNGLGFBQUssV0FBVztBQUVoQixhQUFLLEtBQUssV0FBVyxTQUFTLEtBQUssV0FBVyxXQUFXLE1BQU07QUFDN0QsZ0JBQU0sSUFBSSxVQUFVLDJDQUEyQztBQUFBLFFBQ2pFO0FBQ0EsYUFBSyxVQUFVLElBQUk7QUFFbkIsWUFBSSxLQUFLLFdBQVcsU0FBUyxLQUFLLFdBQVcsUUFBUTtBQUNuRCxjQUFJLFFBQVEsVUFBVSxjQUFjLFFBQVEsVUFBVSxZQUFZO0FBRWhFLGdCQUFJLGdCQUFnQjtBQUNwQixnQkFBSSxjQUFjLEtBQUssS0FBSyxHQUFHLEdBQUc7QUFFaEMsbUJBQUssTUFBTSxLQUFLLElBQUksUUFBUSxlQUFlLFNBQVMsSUFBSSxLQUFLLEVBQUUsUUFBUSxDQUFDO0FBQUEsWUFDMUUsT0FBTztBQUVMLGtCQUFJLGdCQUFnQjtBQUNwQixtQkFBSyxRQUFRLGNBQWMsS0FBSyxLQUFLLEdBQUcsSUFBSSxNQUFNLE9BQU8sT0FBTyxJQUFJLEtBQUssRUFBRSxRQUFRO0FBQUEsWUFDckY7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxNQUFBUSxTQUFRLFVBQVUsUUFBUSxXQUFXO0FBQ25DLGVBQU8sSUFBSUEsU0FBUSxNQUFNLEVBQUMsTUFBTSxLQUFLLFVBQVMsQ0FBQztBQUFBLE1BQ2pEO0FBRUEsZUFBUyxPQUFPLE1BQU07QUFDcEIsWUFBSSxPQUFPLElBQUksU0FBUztBQUN4QixhQUNHLEtBQUssRUFDTCxNQUFNLEdBQUcsRUFDVCxRQUFRLFNBQVMsT0FBTztBQUN2QixjQUFJLE9BQU87QUFDVCxnQkFBSUMsU0FBUSxNQUFNLE1BQU0sR0FBRztBQUMzQixnQkFBSSxPQUFPQSxPQUFNLE1BQU0sRUFBRSxRQUFRLE9BQU8sR0FBRztBQUMzQyxnQkFBSSxRQUFRQSxPQUFNLEtBQUssR0FBRyxFQUFFLFFBQVEsT0FBTyxHQUFHO0FBQzlDLGlCQUFLLE9BQU8sbUJBQW1CLElBQUksR0FBRyxtQkFBbUIsS0FBSyxDQUFDO0FBQUEsVUFDakU7QUFBQSxRQUNGLENBQUM7QUFDSCxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsYUFBYSxZQUFZO0FBQ2hDLFlBQUksVUFBVSxJQUFJTixTQUFRO0FBRzFCLFlBQUksc0JBQXNCLFdBQVcsUUFBUSxnQkFBZ0IsR0FBRztBQUloRSw0QkFDRyxNQUFNLElBQUksRUFDVixJQUFJLFNBQVMsUUFBUTtBQUNwQixpQkFBTyxPQUFPLFFBQVEsSUFBSSxNQUFNLElBQUksT0FBTyxPQUFPLEdBQUcsT0FBTyxNQUFNLElBQUk7QUFBQSxRQUN4RSxDQUFDLEVBQ0EsUUFBUSxTQUFTLE1BQU07QUFDdEIsY0FBSSxRQUFRLEtBQUssTUFBTSxHQUFHO0FBQzFCLGNBQUksTUFBTSxNQUFNLE1BQU0sRUFBRSxLQUFLO0FBQzdCLGNBQUksS0FBSztBQUNQLGdCQUFJLFFBQVEsTUFBTSxLQUFLLEdBQUcsRUFBRSxLQUFLO0FBQ2pDLGdCQUFJO0FBQ0Ysc0JBQVEsT0FBTyxLQUFLLEtBQUs7QUFBQSxZQUMzQixTQUFTLE9BQVA7QUFDQSxzQkFBUSxLQUFLLGNBQWMsTUFBTSxPQUFPO0FBQUEsWUFDMUM7QUFBQSxVQUNGO0FBQUEsUUFDRixDQUFDO0FBQ0gsZUFBTztBQUFBLE1BQ1Q7QUFFQSxXQUFLLEtBQUtLLFNBQVEsU0FBUztBQUUzQixlQUFTRSxVQUFTLFVBQVUsU0FBUztBQUNuQyxZQUFJLEVBQUUsZ0JBQWdCQSxZQUFXO0FBQy9CLGdCQUFNLElBQUksVUFBVSw0RkFBNEY7QUFBQSxRQUNsSDtBQUNBLFlBQUksQ0FBQyxTQUFTO0FBQ1osb0JBQVUsQ0FBQztBQUFBLFFBQ2I7QUFFQSxhQUFLLE9BQU87QUFDWixhQUFLLFNBQVMsUUFBUSxXQUFXLFNBQVksTUFBTSxRQUFRO0FBQzNELFlBQUksS0FBSyxTQUFTLE9BQU8sS0FBSyxTQUFTLEtBQUs7QUFDMUMsZ0JBQU0sSUFBSSxXQUFXLDBGQUEwRjtBQUFBLFFBQ2pIO0FBQ0EsYUFBSyxLQUFLLEtBQUssVUFBVSxPQUFPLEtBQUssU0FBUztBQUM5QyxhQUFLLGFBQWEsUUFBUSxlQUFlLFNBQVksS0FBSyxLQUFLLFFBQVE7QUFDdkUsYUFBSyxVQUFVLElBQUlQLFNBQVEsUUFBUSxPQUFPO0FBQzFDLGFBQUssTUFBTSxRQUFRLE9BQU87QUFDMUIsYUFBSyxVQUFVLFFBQVE7QUFBQSxNQUN6QjtBQUVBLFdBQUssS0FBS08sVUFBUyxTQUFTO0FBRTVCLE1BQUFBLFVBQVMsVUFBVSxRQUFRLFdBQVc7QUFDcEMsZUFBTyxJQUFJQSxVQUFTLEtBQUssV0FBVztBQUFBLFVBQ2xDLFFBQVEsS0FBSztBQUFBLFVBQ2IsWUFBWSxLQUFLO0FBQUEsVUFDakIsU0FBUyxJQUFJUCxTQUFRLEtBQUssT0FBTztBQUFBLFVBQ2pDLEtBQUssS0FBSztBQUFBLFFBQ1osQ0FBQztBQUFBLE1BQ0g7QUFFQSxNQUFBTyxVQUFTLFFBQVEsV0FBVztBQUMxQixZQUFJLFdBQVcsSUFBSUEsVUFBUyxNQUFNLEVBQUMsUUFBUSxLQUFLLFlBQVksR0FBRSxDQUFDO0FBQy9ELGlCQUFTLEtBQUs7QUFDZCxpQkFBUyxTQUFTO0FBQ2xCLGlCQUFTLE9BQU87QUFDaEIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJLG1CQUFtQixDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRztBQUUvQyxNQUFBQSxVQUFTLFdBQVcsU0FBUyxLQUFLLFFBQVE7QUFDeEMsWUFBSSxpQkFBaUIsUUFBUSxNQUFNLE1BQU0sSUFBSTtBQUMzQyxnQkFBTSxJQUFJLFdBQVcscUJBQXFCO0FBQUEsUUFDNUM7QUFFQSxlQUFPLElBQUlBLFVBQVMsTUFBTSxFQUFDLFFBQWdCLFNBQVMsRUFBQyxVQUFVLElBQUcsRUFBQyxDQUFDO0FBQUEsTUFDdEU7QUFFQSxNQUFBWCxTQUFRLGVBQWVDLEdBQUU7QUFDekIsVUFBSTtBQUNGLFlBQUlELFNBQVEsYUFBYTtBQUFBLE1BQzNCLFNBQVMsS0FBUDtBQUNBLFFBQUFBLFNBQVEsZUFBZSxTQUFTLFNBQVMsTUFBTTtBQUM3QyxlQUFLLFVBQVU7QUFDZixlQUFLLE9BQU87QUFDWixjQUFJLFFBQVEsTUFBTSxPQUFPO0FBQ3pCLGVBQUssUUFBUSxNQUFNO0FBQUEsUUFDckI7QUFDQSxRQUFBQSxTQUFRLGFBQWEsWUFBWSxPQUFPLE9BQU8sTUFBTSxTQUFTO0FBQzlELFFBQUFBLFNBQVEsYUFBYSxVQUFVLGNBQWNBLFNBQVE7QUFBQSxNQUN2RDtBQUVBLGVBQVNZLE9BQU0sT0FBTyxNQUFNO0FBQzFCLGVBQU8sSUFBSSxRQUFRLFNBQVNQLFVBQVMsUUFBUTtBQUMzQyxjQUFJLFVBQVUsSUFBSUksU0FBUSxPQUFPLElBQUk7QUFFckMsY0FBSSxRQUFRLFVBQVUsUUFBUSxPQUFPLFNBQVM7QUFDNUMsbUJBQU8sT0FBTyxJQUFJVCxTQUFRLGFBQWEsV0FBVyxZQUFZLENBQUM7QUFBQSxVQUNqRTtBQUVBLGNBQUksTUFBTSxJQUFJLGVBQWU7QUFFN0IsbUJBQVMsV0FBVztBQUNsQixnQkFBSSxNQUFNO0FBQUEsVUFDWjtBQUVBLGNBQUksU0FBUyxXQUFXO0FBQ3RCLGdCQUFJLFVBQVU7QUFBQSxjQUNaLFlBQVksSUFBSTtBQUFBLGNBQ2hCLFNBQVMsYUFBYSxJQUFJLHNCQUFzQixLQUFLLEVBQUU7QUFBQSxZQUN6RDtBQUdBLGdCQUFJLFFBQVEsSUFBSSxRQUFRLFNBQVMsTUFBTSxNQUFNLElBQUksU0FBUyxPQUFPLElBQUksU0FBUyxNQUFNO0FBQ2xGLHNCQUFRLFNBQVM7QUFBQSxZQUNuQixPQUFPO0FBQ0wsc0JBQVEsU0FBUyxJQUFJO0FBQUEsWUFDdkI7QUFDQSxvQkFBUSxNQUFNLGlCQUFpQixNQUFNLElBQUksY0FBYyxRQUFRLFFBQVEsSUFBSSxlQUFlO0FBQzFGLGdCQUFJLE9BQU8sY0FBYyxNQUFNLElBQUksV0FBVyxJQUFJO0FBQ2xELHVCQUFXLFdBQVc7QUFDcEIsY0FBQUssU0FBUSxJQUFJTSxVQUFTLE1BQU0sT0FBTyxDQUFDO0FBQUEsWUFDckMsR0FBRyxDQUFDO0FBQUEsVUFDTjtBQUVBLGNBQUksVUFBVSxXQUFXO0FBQ3ZCLHVCQUFXLFdBQVc7QUFDcEIscUJBQU8sSUFBSSxVQUFVLHdCQUF3QixDQUFDO0FBQUEsWUFDaEQsR0FBRyxDQUFDO0FBQUEsVUFDTjtBQUVBLGNBQUksWUFBWSxXQUFXO0FBQ3pCLHVCQUFXLFdBQVc7QUFDcEIscUJBQU8sSUFBSSxVQUFVLDJCQUEyQixDQUFDO0FBQUEsWUFDbkQsR0FBRyxDQUFDO0FBQUEsVUFDTjtBQUVBLGNBQUksVUFBVSxXQUFXO0FBQ3ZCLHVCQUFXLFdBQVc7QUFDcEIscUJBQU8sSUFBSVgsU0FBUSxhQUFhLFdBQVcsWUFBWSxDQUFDO0FBQUEsWUFDMUQsR0FBRyxDQUFDO0FBQUEsVUFDTjtBQUVBLG1CQUFTLE9BQU8sS0FBSztBQUNuQixnQkFBSTtBQUNGLHFCQUFPLFFBQVEsTUFBTUMsR0FBRSxTQUFTLE9BQU9BLEdBQUUsU0FBUyxPQUFPO0FBQUEsWUFDM0QsU0FBU0MsSUFBUDtBQUNBLHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFFQSxjQUFJLEtBQUssUUFBUSxRQUFRLE9BQU8sUUFBUSxHQUFHLEdBQUcsSUFBSTtBQUVsRCxjQUFJLFFBQVEsZ0JBQWdCLFdBQVc7QUFDckMsZ0JBQUksa0JBQWtCO0FBQUEsVUFDeEIsV0FBVyxRQUFRLGdCQUFnQixRQUFRO0FBQ3pDLGdCQUFJLGtCQUFrQjtBQUFBLFVBQ3hCO0FBRUEsY0FBSSxrQkFBa0IsS0FBSztBQUN6QixnQkFBSSxRQUFRLE1BQU07QUFDaEIsa0JBQUksZUFBZTtBQUFBLFlBQ3JCLFdBQ0UsUUFBUSxhQUNSO0FBQ0Esa0JBQUksZUFBZTtBQUFBLFlBQ3JCO0FBQUEsVUFDRjtBQUVBLGNBQUksUUFBUSxPQUFPLEtBQUssWUFBWSxZQUFZLEVBQUUsS0FBSyxtQkFBbUJFLFlBQVlILEdBQUUsV0FBVyxLQUFLLG1CQUFtQkEsR0FBRSxVQUFXO0FBQ3RJLGdCQUFJLFFBQVEsQ0FBQztBQUNiLG1CQUFPLG9CQUFvQixLQUFLLE9BQU8sRUFBRSxRQUFRLFNBQVMsTUFBTTtBQUM5RCxvQkFBTSxLQUFLLGNBQWMsSUFBSSxDQUFDO0FBQzlCLGtCQUFJLGlCQUFpQixNQUFNRSxnQkFBZSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFBQSxZQUMvRCxDQUFDO0FBQ0Qsb0JBQVEsUUFBUSxRQUFRLFNBQVMsT0FBTyxNQUFNO0FBQzVDLGtCQUFJLE1BQU0sUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM5QixvQkFBSSxpQkFBaUIsTUFBTSxLQUFLO0FBQUEsY0FDbEM7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNILE9BQU87QUFDTCxvQkFBUSxRQUFRLFFBQVEsU0FBUyxPQUFPLE1BQU07QUFDNUMsa0JBQUksaUJBQWlCLE1BQU0sS0FBSztBQUFBLFlBQ2xDLENBQUM7QUFBQSxVQUNIO0FBRUEsY0FBSSxRQUFRLFFBQVE7QUFDbEIsb0JBQVEsT0FBTyxpQkFBaUIsU0FBUyxRQUFRO0FBRWpELGdCQUFJLHFCQUFxQixXQUFXO0FBRWxDLGtCQUFJLElBQUksZUFBZSxHQUFHO0FBQ3hCLHdCQUFRLE9BQU8sb0JBQW9CLFNBQVMsUUFBUTtBQUFBLGNBQ3REO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLEtBQUssT0FBTyxRQUFRLGNBQWMsY0FBYyxPQUFPLFFBQVEsU0FBUztBQUFBLFFBQzlFLENBQUM7QUFBQSxNQUNIO0FBRUEsTUFBQVMsT0FBTSxXQUFXO0FBRWpCLFVBQUksQ0FBQ1gsR0FBRSxPQUFPO0FBQ1osUUFBQUEsR0FBRSxRQUFRVztBQUNWLFFBQUFYLEdBQUUsVUFBVUc7QUFDWixRQUFBSCxHQUFFLFVBQVVRO0FBQ1osUUFBQVIsR0FBRSxXQUFXVTtBQUFBLE1BQ2Y7QUFFQSxNQUFBWCxTQUFRLFVBQVVJO0FBQ2xCLE1BQUFKLFNBQVEsVUFBVVM7QUFDbEIsTUFBQVQsU0FBUSxXQUFXVztBQUNuQixNQUFBWCxTQUFRLFFBQVFZO0FBRWhCLGFBQU8sZUFBZVosVUFBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxJQUU5RCxDQUFFO0FBQUE7QUFBQTs7O0FDaHBCRjtBQUFBLDBEQUFBYSxTQUFBO0FBQUE7QUFFQSxRQUFJLGNBQWMsQ0FBQztBQUNuQixJQUFBQSxRQUFPLFVBQVU7QUFFakIsYUFBUyxLQUFLQyxJQUFHO0FBQ2IsYUFBT0EsS0FBSSxJQUFJLEtBQUs7QUFBQSxJQUN4QjtBQUVBLGFBQVMsVUFBVUEsSUFBRztBQUVsQixVQUFLQSxLQUFJLE1BQU8sUUFBUUEsS0FBSSxPQUFPLEdBQUc7QUFDbEMsZUFBTyxLQUFLLE1BQU1BLEVBQUM7QUFBQSxNQUN2QixPQUFPO0FBQ0gsZUFBTyxLQUFLLE1BQU1BLEVBQUM7QUFBQSxNQUN2QjtBQUFBLElBQ0o7QUFFQSxhQUFTLHVCQUF1QixXQUFXLFVBQVU7QUFDakQsVUFBSSxDQUFDLFNBQVMsVUFBVTtBQUNwQixVQUFFO0FBQUEsTUFDTjtBQUNBLFlBQU0sYUFBYSxTQUFTLFdBQVcsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLFNBQVM7QUFDakUsWUFBTSxhQUFhLEtBQUssSUFBSSxHQUFHLFNBQVMsSUFBSTtBQUU1QyxZQUFNLFlBQVksU0FBUyxrQkFBa0IsS0FBSyxJQUFJLEdBQUcsU0FBUyxlQUFlLElBQUksS0FBSyxJQUFJLEdBQUcsU0FBUztBQUMxRyxZQUFNLGNBQWMsU0FBUyxrQkFBa0IsS0FBSyxJQUFJLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLFlBQVksQ0FBQztBQUVwSCxhQUFPLFNBQVNDLElBQUdDLE9BQU07QUFDckIsWUFBSSxDQUFDQTtBQUFNLFVBQUFBLFFBQU8sQ0FBQztBQUVuQixZQUFJRixLQUFJLENBQUNDO0FBRVQsWUFBSUMsTUFBSyxjQUFjO0FBQ25CLGNBQUksQ0FBQyxPQUFPLFNBQVNGLEVBQUMsR0FBRztBQUNyQixrQkFBTSxJQUFJLFVBQVUsaUNBQWlDO0FBQUEsVUFDekQ7QUFFQSxVQUFBQSxLQUFJLEtBQUtBLEVBQUMsSUFBSSxLQUFLLE1BQU0sS0FBSyxJQUFJQSxFQUFDLENBQUM7QUFDcEMsY0FBSUEsS0FBSSxjQUFjQSxLQUFJLFlBQVk7QUFDbEMsa0JBQU0sSUFBSSxVQUFVLCtCQUErQjtBQUFBLFVBQ3ZEO0FBRUEsaUJBQU9BO0FBQUEsUUFDWDtBQUVBLFlBQUksQ0FBQyxNQUFNQSxFQUFDLEtBQUtFLE1BQUssT0FBTztBQUN6QixVQUFBRixLQUFJLFVBQVVBLEVBQUM7QUFFZixjQUFJQSxLQUFJO0FBQVksWUFBQUEsS0FBSTtBQUN4QixjQUFJQSxLQUFJO0FBQVksWUFBQUEsS0FBSTtBQUN4QixpQkFBT0E7QUFBQSxRQUNYO0FBRUEsWUFBSSxDQUFDLE9BQU8sU0FBU0EsRUFBQyxLQUFLQSxPQUFNLEdBQUc7QUFDaEMsaUJBQU87QUFBQSxRQUNYO0FBRUEsUUFBQUEsS0FBSSxLQUFLQSxFQUFDLElBQUksS0FBSyxNQUFNLEtBQUssSUFBSUEsRUFBQyxDQUFDO0FBQ3BDLFFBQUFBLEtBQUlBLEtBQUk7QUFFUixZQUFJLENBQUMsU0FBUyxZQUFZQSxNQUFLLGFBQWE7QUFDeEMsaUJBQU9BLEtBQUk7QUFBQSxRQUNmLFdBQVcsU0FBUyxVQUFVO0FBQzFCLGNBQUlBLEtBQUksR0FBRztBQUNULFlBQUFBLE1BQUs7QUFBQSxVQUNQLFdBQVdBLE9BQU0sSUFBSTtBQUNuQixtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNKO0FBRUEsZUFBT0E7QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUVBLGdCQUFZLE1BQU0sSUFBSSxXQUFZO0FBQzlCLGFBQU87QUFBQSxJQUNYO0FBRUEsZ0JBQVksU0FBUyxJQUFJLFNBQVUsS0FBSztBQUNwQyxhQUFPLENBQUMsQ0FBQztBQUFBLElBQ2I7QUFFQSxnQkFBWSxNQUFNLElBQUksdUJBQXVCLEdBQUcsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUNuRSxnQkFBWSxPQUFPLElBQUksdUJBQXVCLEdBQUcsRUFBRSxVQUFVLEtBQUssQ0FBQztBQUVuRSxnQkFBWSxPQUFPLElBQUksdUJBQXVCLElBQUksRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUNyRSxnQkFBWSxnQkFBZ0IsSUFBSSx1QkFBdUIsSUFBSSxFQUFFLFVBQVUsS0FBSyxDQUFDO0FBRTdFLGdCQUFZLE1BQU0sSUFBSSx1QkFBdUIsSUFBSSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQ3BFLGdCQUFZLGVBQWUsSUFBSSx1QkFBdUIsSUFBSSxFQUFFLFVBQVUsS0FBSyxDQUFDO0FBRTVFLGdCQUFZLFdBQVcsSUFBSSx1QkFBdUIsSUFBSSxFQUFFLFVBQVUsT0FBTyxpQkFBaUIsR0FBRyxDQUFDO0FBQzlGLGdCQUFZLG9CQUFvQixJQUFJLHVCQUF1QixJQUFJLEVBQUUsVUFBVSxNQUFNLGlCQUFpQixHQUFHLENBQUM7QUFFdEcsZ0JBQVksUUFBUSxJQUFJLFNBQVVDLElBQUc7QUFDakMsWUFBTUQsS0FBSSxDQUFDQztBQUVYLFVBQUksQ0FBQyxPQUFPLFNBQVNELEVBQUMsR0FBRztBQUNyQixjQUFNLElBQUksVUFBVSwrQ0FBK0M7QUFBQSxNQUN2RTtBQUVBLGFBQU9BO0FBQUEsSUFDWDtBQUVBLGdCQUFZLHFCQUFxQixJQUFJLFNBQVVDLElBQUc7QUFDOUMsWUFBTUQsS0FBSSxDQUFDQztBQUVYLFVBQUksTUFBTUQsRUFBQyxHQUFHO0FBQ1YsY0FBTSxJQUFJLFVBQVUsaUJBQWlCO0FBQUEsTUFDekM7QUFFQSxhQUFPQTtBQUFBLElBQ1g7QUFHQSxnQkFBWSxPQUFPLElBQUksWUFBWSxRQUFRO0FBQzNDLGdCQUFZLG9CQUFvQixJQUFJLFlBQVkscUJBQXFCO0FBRXJFLGdCQUFZLFdBQVcsSUFBSSxTQUFVQyxJQUFHQyxPQUFNO0FBQzFDLFVBQUksQ0FBQ0E7QUFBTSxRQUFBQSxRQUFPLENBQUM7QUFFbkIsVUFBSUEsTUFBSywwQkFBMEJELE9BQU0sTUFBTTtBQUMzQyxlQUFPO0FBQUEsTUFDWDtBQUVBLGFBQU8sT0FBT0EsRUFBQztBQUFBLElBQ25CO0FBRUEsZ0JBQVksWUFBWSxJQUFJLFNBQVVBLElBQUdDLE9BQU07QUFDM0MsWUFBTUYsS0FBSSxPQUFPQyxFQUFDO0FBQ2xCLFVBQUlFLEtBQUk7QUFDUixlQUFTQyxLQUFJLElBQUlELEtBQUlILEdBQUUsWUFBWUksRUFBQyxPQUFPLFFBQVcsRUFBRUEsSUFBRztBQUN2RCxZQUFJRCxLQUFJLEtBQUs7QUFDVCxnQkFBTSxJQUFJLFVBQVUsb0NBQW9DO0FBQUEsUUFDNUQ7QUFBQSxNQUNKO0FBRUEsYUFBT0g7QUFBQSxJQUNYO0FBRUEsZ0JBQVksV0FBVyxJQUFJLFNBQVVDLElBQUc7QUFDcEMsWUFBTUksS0FBSSxPQUFPSixFQUFDO0FBQ2xCLFlBQU1LLEtBQUlELEdBQUU7QUFDWixZQUFNRSxLQUFJLENBQUM7QUFDWCxlQUFTSCxLQUFJLEdBQUdBLEtBQUlFLElBQUcsRUFBRUYsSUFBRztBQUN4QixjQUFNRCxLQUFJRSxHQUFFLFdBQVdELEVBQUM7QUFDeEIsWUFBSUQsS0FBSSxTQUFVQSxLQUFJLE9BQVE7QUFDMUIsVUFBQUksR0FBRSxLQUFLLE9BQU8sY0FBY0osRUFBQyxDQUFDO0FBQUEsUUFDbEMsV0FBVyxTQUFVQSxNQUFLQSxNQUFLLE9BQVE7QUFDbkMsVUFBQUksR0FBRSxLQUFLLE9BQU8sY0FBYyxLQUFNLENBQUM7QUFBQSxRQUN2QyxPQUFPO0FBQ0gsY0FBSUgsT0FBTUUsS0FBSSxHQUFHO0FBQ2IsWUFBQUMsR0FBRSxLQUFLLE9BQU8sY0FBYyxLQUFNLENBQUM7QUFBQSxVQUN2QyxPQUFPO0FBQ0gsa0JBQU1DLEtBQUlILEdBQUUsV0FBV0QsS0FBSSxDQUFDO0FBQzVCLGdCQUFJLFNBQVVJLE1BQUtBLE1BQUssT0FBUTtBQUM1QixvQkFBTUMsS0FBSU4sS0FBSTtBQUNkLG9CQUFNTyxLQUFJRixLQUFJO0FBQ2QsY0FBQUQsR0FBRSxLQUFLLE9BQU8sZUFBZSxLQUFLLE9BQU8sS0FBSyxLQUFLRSxLQUFJQyxFQUFDLENBQUM7QUFDekQsZ0JBQUVOO0FBQUEsWUFDTixPQUFPO0FBQ0gsY0FBQUcsR0FBRSxLQUFLLE9BQU8sY0FBYyxLQUFNLENBQUM7QUFBQSxZQUN2QztBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLGFBQU9BLEdBQUUsS0FBSyxFQUFFO0FBQUEsSUFDcEI7QUFFQSxnQkFBWSxNQUFNLElBQUksU0FBVU4sSUFBR0MsT0FBTTtBQUNyQyxVQUFJLEVBQUVELGNBQWEsT0FBTztBQUN0QixjQUFNLElBQUksVUFBVSwrQkFBK0I7QUFBQSxNQUN2RDtBQUNBLFVBQUksTUFBTUEsRUFBQyxHQUFHO0FBQ1YsZUFBTztBQUFBLE1BQ1g7QUFFQSxhQUFPQTtBQUFBLElBQ1g7QUFFQSxnQkFBWSxRQUFRLElBQUksU0FBVUEsSUFBR0MsT0FBTTtBQUN2QyxVQUFJLEVBQUVELGNBQWEsU0FBUztBQUN4QixRQUFBQSxLQUFJLElBQUksT0FBT0EsRUFBQztBQUFBLE1BQ3BCO0FBRUEsYUFBT0E7QUFBQSxJQUNYO0FBQUE7QUFBQTs7O0FDNUxBO0FBQUEsa0RBQUFVLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sUUFBUSxRQUFRLFNBQVMsTUFBTSxRQUFRLFFBQVE7QUFDcEQsWUFBTSxPQUFPLE9BQU8sb0JBQW9CLE1BQU07QUFDOUMsZUFBU0MsS0FBSSxHQUFHQSxLQUFJLEtBQUssUUFBUSxFQUFFQSxJQUFHO0FBQ3BDLGVBQU8sZUFBZSxRQUFRLEtBQUtBLEVBQUMsR0FBRyxPQUFPLHlCQUF5QixRQUFRLEtBQUtBLEVBQUMsQ0FBQyxDQUFDO0FBQUEsTUFDekY7QUFBQSxJQUNGO0FBRUEsSUFBQUQsUUFBTyxRQUFRLGdCQUFnQixPQUFPLFNBQVM7QUFDL0MsSUFBQUEsUUFBTyxRQUFRLGFBQWEsT0FBTyxNQUFNO0FBRXpDLElBQUFBLFFBQU8sUUFBUSxpQkFBaUIsU0FBVSxNQUFNO0FBQzlDLGFBQU8sS0FBS0EsUUFBTyxRQUFRLGFBQWE7QUFBQSxJQUMxQztBQUVBLElBQUFBLFFBQU8sUUFBUSxpQkFBaUIsU0FBVSxTQUFTO0FBQ2pELGFBQU8sUUFBUUEsUUFBTyxRQUFRLFVBQVU7QUFBQSxJQUMxQztBQUFBO0FBQUE7OztBQ2xCQTtBQUFBLHFEQUFBRSxTQUFBO0FBQUEsSUFBQUEsUUFBQSxXQUFDLENBQUMsQ0FBQyxHQUFFLEVBQUUsR0FBRSx1QkFBdUIsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSx1QkFBdUIsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSx1QkFBdUIsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUcsRUFBRSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUcsRUFBRSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUcsRUFBRSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUcsRUFBRSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUcsRUFBRSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUcsRUFBRSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUcsRUFBRSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUcsRUFBRSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxJQUFHLEVBQUUsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLElBQUcsRUFBRSxHQUFFLHVCQUF1QixHQUFFLENBQUMsQ0FBQyxJQUFHLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLHVCQUF1QixHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFNBQVMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsYUFBWSxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsU0FBUyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxhQUFZLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLEdBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsYUFBWSxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxLQUFJLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBRyxNQUFLLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLHVCQUF1QixHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLHVCQUF1QixHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssR0FBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssSUFBSSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxNQUFLLElBQUksR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE1BQUssS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsTUFBSyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsTUFBSyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsTUFBSyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsTUFBSyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxNQUFLLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE1BQUssRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE9BQU0sRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsT0FBTSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxPQUFNLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBTSxJQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE9BQU0sT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLElBQUcsSUFBRyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLE1BQUssR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLE1BQUssS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLElBQUcsS0FBSSxNQUFLLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxJQUFHLEtBQUksTUFBSyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLE1BQUssS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsTUFBSyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFHLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUcsSUFBRyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksSUFBRyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxNQUFNLElBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsTUFBTSxJQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxNQUFLLE1BQUssTUFBSyxJQUFHLE1BQUssTUFBSyxNQUFLLE1BQUssSUFBRyxNQUFLLE1BQUssTUFBSyxNQUFLLElBQUcsTUFBSyxNQUFLLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLE1BQUssTUFBSyxJQUFHLE1BQUssTUFBSyxNQUFLLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLE1BQUssTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLE1BQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxNQUFLLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsTUFBSyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFTLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSwwQkFBeUIsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLDBCQUF5QixDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsTUFBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxPQUFNLEtBQUssR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLE9BQU0sS0FBSyxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsT0FBTSxLQUFLLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxPQUFNLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxRQUFPLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsUUFBTyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLFFBQU8sUUFBTyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLFFBQU8sUUFBTyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLFFBQU8sUUFBTyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLFFBQU8sUUFBTyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLFFBQU8sUUFBTyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLFFBQU8sTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxRQUFPLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsUUFBTyxRQUFPLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsUUFBTyxRQUFPLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsUUFBTyxRQUFPLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsUUFBTyxRQUFPLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxNQUFPLElBQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUksQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsSUFBSSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLDBCQUF5QixDQUFDLElBQUcsSUFBRyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLElBQUcsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSwwQkFBeUIsQ0FBQyxJQUFHLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLDBCQUF5QixDQUFDLElBQUcsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsMEJBQXlCLENBQUMsSUFBRyxLQUFJLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFJLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLElBQUcsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFJLEdBQUcsQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUksS0FBSSxHQUFHLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUksRUFBRSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSSxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsT0FBTSxPQUFNLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsT0FBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsU0FBUSxDQUFDLEdBQUUsS0FBSyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFNBQVEsQ0FBQyxHQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxTQUFRLENBQUMsR0FBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsT0FBTyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLE9BQU8sR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxPQUFPLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxJQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEdBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsTUFBTSxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLEtBQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxVQUFTLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFVBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsVUFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZQUFZLEdBQUUsQ0FBQyxDQUFDLFFBQU8sTUFBTSxHQUFFLFlBQVksR0FBRSxDQUFDLENBQUMsUUFBTyxNQUFNLEdBQUUsWUFBWSxHQUFFLENBQUMsQ0FBQyxRQUFPLE1BQU0sR0FBRSxZ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TSxTQUFTLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRTtBQUFBLEVBQ3RDLEVBQUUsTUFBTSxTQUFTLEtBQUssQ0FBQyxRQUFRLE9BQU8sSUFBSSxFQUFFO0FBQUE7QUFBQSxFQUM1QyxFQUFFLE1BQU0sU0FBUyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUU7QUFBQSxFQUNyQyxFQUFFLE1BQU0sU0FBUyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUU7QUFBQSxFQUNwQyxFQUFFLE1BQU0sU0FBUyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUU7QUFBQSxFQUN2QyxFQUFFLE1BQU0sT0FBTyxLQUFLLENBQUMsT0FBTyxNQUFNLElBQUksRUFBRTtBQUFBLEVBQ3hDLEVBQUUsTUFBTSxNQUFNLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRTtBQUFBLEVBQy9CLEVBQUUsTUFBTSxRQUFRLEtBQUssQ0FBQyxLQUFLLE1BQU0sRUFBRTtBQUFBLEVBQ25DLEVBQUUsTUFBTSxPQUFPLEtBQUssQ0FBQyxNQUFNLE1BQU0sU0FBUyxFQUFFO0FBQUEsRUFDNUMsRUFBRSxNQUFNLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxNQUFNLEVBQUU7QUFBQSxFQUMzQyxFQUFFLE1BQU0sT0FBTyxLQUFLLENBQUMsS0FBSyxNQUFNLEVBQUU7QUFBQSxFQUNsQyxFQUFFLE1BQU0sTUFBTSxLQUFLLENBQUMsU0FBUyxLQUFLLEVBQUU7QUFBQSxFQUNwQyxFQUFFLE1BQU0sT0FBTyxLQUFLLENBQUMsTUFBTSxNQUFNLFFBQVEsRUFBRTtBQUFBLEVBQzNDLEVBQUUsTUFBTSxTQUFTLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRTtBQUFBLEVBQ3JDLEVBQUUsTUFBTSxVQUFVLEtBQUssQ0FBQyxRQUFRLE1BQU0sRUFBRTtBQUFBLEVBQ3hDLEVBQUUsTUFBTSxTQUFTLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRTtBQUFBO0FBQUEsRUFFckMsRUFBRSxNQUFNLFdBQVcsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQUEsRUFDM0MsRUFBRSxNQUFNLFVBQVUsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQUEsRUFDMUMsRUFBRSxNQUFNLFVBQVUsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQUEsRUFDMUMsRUFBRSxNQUFNLFNBQVMsS0FBSyxDQUFDLFFBQVEsTUFBTSxFQUFFO0FBQUEsRUFFdkMsRUFBRSxNQUFNLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO0FBQUEsRUFDakMsRUFBRSxNQUFNLFFBQVEsS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFO0FBQUEsRUFDbkMsRUFBRSxNQUFNLFVBQVUsS0FBSyxDQUFDLE9BQU8sTUFBTSxFQUFFO0FBQUEsRUFDdkMsRUFBRSxNQUFNLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUFBLEVBQ2hDLEVBQUUsTUFBTSxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFBQTtBQUFBLEVBRTlCLEVBQUUsT0FBTyxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFBQSxFQUM3QixFQUFFLE9BQU8sTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQUEsRUFDN0IsRUFBRSxPQUFPLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRTtBQUFBLEVBQzVCLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFBQTtBQUFBLEVBRTFCLEVBQUUsUUFBUSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFBQSxFQUMzQixFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQUEsRUFDM0IsRUFBRSxRQUFRLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRTtBQUFBLEVBQzNCLEVBQUUsUUFBUSxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFBQSxFQUM3QixFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQUEsRUFDM0IsRUFBRSxRQUFRLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRTtBQUFBO0FBQUE7QUFBQSxFQUczQixFQUFFLE1BQU0sWUFBWSxLQUFLLENBQUMsVUFBVSxLQUFLLEVBQUU7QUFBQSxFQUMzQyxFQUFFLE1BQU0sV0FBVyxLQUFLLENBQUMsU0FBUyxLQUFLLEVBQUU7QUFBQSxFQUN6QyxFQUFFLE1BQU0sV0FBVyxLQUFLLENBQUMsU0FBUyxLQUFLLEVBQUU7QUFBQSxFQUN6QyxFQUFFLE1BQU0sU0FBUyxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUU7QUFBQSxFQUNyQyxFQUFFLE1BQU0sU0FBUyxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUU7QUFBQSxFQUNyQyxFQUFFLE1BQU0sUUFBUSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUU7QUFBQSxFQUNuQyxFQUFFLE1BQU0sUUFBUSxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUU7QUFBQSxFQUNwQyxFQUFFLE1BQU0sUUFBUSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUU7QUFBQSxFQUNuQyxFQUFFLE1BQU0sUUFBUSxLQUFLLENBQUMsUUFBUSxLQUFLLEVBQUU7QUFBQTtBQUFBLEVBRXJDLEVBQUUsTUFBTSxRQUFRLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRTtBQUFBLEVBQ3BDLEVBQUUsTUFBTSxTQUFTLEtBQUssQ0FBQyxRQUFRLEtBQUssRUFBRTtBQUFBLEVBQ3RDLEVBQUUsTUFBTSxTQUFTLEtBQUssQ0FBQyxRQUFRLEtBQUssRUFBRTtBQUFBLEVBQ3RDLEVBQUUsTUFBTSxVQUFVLEtBQUssQ0FBQyxTQUFTLEtBQUssRUFBRTtBQUMxQzs7O0FDdEVBLElBQU0sSUFBSTtBQUNWLElBQU8sd0JBQVE7QUFBQSxFQUNiLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE9BQU87QUFBQSxFQUNQLFFBQUs7QUFBQSxFQUNMLEtBQUs7QUFBQTtBQUFBLEVBQ0wsS0FBSztBQUFBO0FBQUEsRUFDTCxNQUFNO0FBQUE7QUFBQSxFQUNOLFVBQU87QUFBQTtBQUFBLEVBQ1AsVUFBTztBQUFBO0FBQ1Q7OztBQ2JB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UUFBTztBQUFDLFdBQU8sS0FBSyxLQUFLLE1BQUksS0FBSyxLQUFLLFNBQVMsU0FBTztBQUFBLEVBQUM7QUFBQSxFQUFDLE1BQU1BLEtBQUUsQ0FBQyxHQUFFO0FBQUMsUUFBSUMsS0FBRSxLQUFLLEtBQUssU0FBTyxDQUFDO0FBQUUsV0FBTSxZQUFVLE9BQU9ELE9BQUlDLEdBQUVELEVBQUMsSUFBRSxPQUFJLEtBQUssS0FBSyxRQUFNLE9BQU8sT0FBT0MsSUFBRUQsRUFBQyxHQUFFO0FBQUEsRUFBSTtBQUFBLEVBQUMsSUFBSUMsSUFBRTtBQUFDLFFBQUdBLEtBQUUsRUFBRUEsRUFBQyxHQUFFLENBQUMsRUFBRSxLQUFLQSxFQUFDLEdBQUU7QUFBQyxVQUFJRCxLQUFFLEtBQUssS0FBSyxTQUFTLEtBQU0sQ0FBQUEsT0FBR0EsR0FBRSxPQUFLQyxFQUFFO0FBQUUsYUFBTyxJQUFJLEVBQUVELEVBQUM7QUFBQSxJQUFDO0FBQUMsUUFBSUUsTUFBRyxDQUFDRixJQUFFQyxPQUFJO0FBQUMsVUFBSUMsTUFBRyxDQUFBRixPQUFHLFlBQVUsT0FBT0EsS0FBRUEsTUFBR0EsS0FBRUEsR0FBRSxRQUFRLE9BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxHQUFHQyxLQUFFQSxNQUFHLEVBQUU7QUFBRSxlQUFRQSxLQUFFLEdBQUVBLEtBQUVDLEdBQUUsUUFBT0QsTUFBRyxHQUFFO0FBQUMsWUFBSUUsS0FBRUgsR0FBRSxTQUFTLEtBQU0sQ0FBQUEsT0FBR0EsR0FBRSxPQUFLRSxHQUFFRCxFQUFDLENBQUU7QUFBRSxZQUFHLENBQUNFO0FBQUUsaUJBQU87QUFBSyxRQUFBSCxLQUFFRztBQUFBLE1BQUM7QUFBQyxhQUFPSDtBQUFBLElBQUMsR0FBRyxLQUFLLE1BQUtDLEVBQUMsS0FBRyxFQUFFLENBQUMsQ0FBQztBQUFFLFdBQU8sSUFBSSxFQUFFQyxFQUFDO0FBQUEsRUFBQztBQUFBLEVBQUMsSUFBSUQsSUFBRUMsS0FBRSxDQUFDLEdBQUU7QUFBQyxRQUFHRSxHQUFFSCxFQUFDO0FBQUUsYUFBT0EsR0FBRSxRQUFTLENBQUFELE9BQUcsS0FBSyxJQUFJLEVBQUVBLEVBQUMsR0FBRUUsRUFBQyxDQUFFLEdBQUU7QUFBSyxJQUFBRCxLQUFFLEVBQUVBLEVBQUM7QUFBRSxRQUFJRSxLQUFFLEVBQUUsRUFBQyxJQUFHRixJQUFFLE9BQU1DLEdBQUMsQ0FBQztBQUFFLFdBQU8sS0FBSyxLQUFLLFNBQVMsS0FBS0MsRUFBQyxHQUFFLElBQUksRUFBRUEsRUFBQztBQUFBLEVBQUM7QUFBQSxFQUFDLE9BQU9ILElBQUU7QUFBQyxXQUFPQSxLQUFFLEVBQUVBLEVBQUMsR0FBRSxLQUFLLEtBQUssV0FBUyxLQUFLLEtBQUssU0FBUyxPQUFRLENBQUFDLE9BQUdBLEdBQUUsT0FBS0QsRUFBRSxHQUFFO0FBQUEsRUFBSTtBQUFBLEVBQUMsUUFBTztBQUFDLFdBQU8sRUFBRSxLQUFLLElBQUksRUFBRSxJQUFLLENBQUFBLFFBQUksUUFBT0EsS0FBRSxPQUFPLE9BQU8sQ0FBQyxHQUFFQSxFQUFDLEdBQUcsVUFBU0EsR0FBRztBQUFBLEVBQUM7QUFBQSxFQUFDLFFBQU87QUFBQyxZQUFPLENBQUFBLE9BQUc7QUFBQyxVQUFJQyxLQUFFLEVBQUVELElBQUcsQ0FBQ0EsSUFBRUMsT0FBSTtBQUFDLFFBQUFELEdBQUUsT0FBS0EsR0FBRSxPQUFPLFVBQVFBLEdBQUUsT0FBTyxXQUFTLENBQUMsR0FBRUEsR0FBRSxPQUFPLFdBQVNBLEdBQUUsT0FBTyxZQUFVLENBQUMsR0FBRUMsR0FBRSxPQUFPLFVBQVFELEdBQUUsT0FBTyxRQUFRLE9BQU8sQ0FBQ0EsR0FBRSxFQUFFLENBQUM7QUFBQSxNQUFFLENBQUUsR0FBRUUsS0FBRSxDQUFDO0FBQUUsTUFBQUQsR0FBRSxRQUFTLENBQUFELE9BQUc7QUFBQyxRQUFBQSxHQUFFLE9BQUtFLEdBQUVGLEdBQUUsRUFBRSxJQUFFQTtBQUFBLE1BQUUsQ0FBRSxHQUFFQyxHQUFFLFFBQVMsQ0FBQUQsT0FBRztBQUFDLFFBQUFBLEdBQUUsT0FBTyxRQUFRLFFBQVMsQ0FBQUMsT0FBRztBQUFDLFVBQUFDLEdBQUUsZUFBZUQsRUFBQyxLQUFHQyxHQUFFRCxFQUFDLEVBQUUsT0FBTyxTQUFTLEtBQUtELEdBQUUsRUFBRTtBQUFBLFFBQUMsQ0FBRTtBQUFBLE1BQUMsQ0FBRSxHQUFFQSxHQUFFLE9BQU8sV0FBUyxPQUFPLEtBQUtFLEVBQUM7QUFBQSxJQUFDLEdBQUcsS0FBSyxJQUFJLEdBQUU7QUFBQSxFQUFJO0FBQUEsRUFBQyxPQUFNO0FBQUMsV0FBTyxFQUFFLEtBQUssSUFBSTtBQUFBLEVBQUM7QUFBQSxFQUFDLFdBQVU7QUFBQyxRQUFJRjtBQUFFLFdBQU9BLEtBQUUsS0FBSyxNQUFLLEVBQUVBLElBQUcsQ0FBQ0EsSUFBRUMsT0FBSTtBQUFDLE1BQUFBLEdBQUUsUUFBTSxFQUFFQSxHQUFFLE9BQU1ELEdBQUUsS0FBSztBQUFBLElBQUMsQ0FBRSxHQUFFO0FBQUEsRUFBSTtBQUFBLEVBQUMsUUFBTztBQUFDLE1BQUUsS0FBSyxJQUFJO0FBQUUsUUFBSUEsS0FBRSxFQUFFLEtBQUssSUFBSSxHQUFFQyxLQUFFRCxHQUFFLFNBQU8sSUFBRSxJQUFFO0FBQUUsV0FBT0EsR0FBRSxRQUFTLENBQUFBLE9BQUc7QUFBQyxVQUFHLE1BQUlBLEdBQUUsT0FBTyxRQUFRO0FBQU87QUFBTyxVQUFJRSxLQUFFRixHQUFFLE9BQU8sUUFBUSxTQUFPO0FBQUUsTUFBQUUsS0FBRUQsT0FBSUEsS0FBRUM7QUFBQSxJQUFFLENBQUUsR0FBRUQ7QUFBQSxFQUFDO0FBQUEsRUFBQyxJQUFJRCxJQUFFO0FBQUMsV0FBTyxFQUFFLEtBQUssSUFBSSxHQUFFLEVBQUUsS0FBSyxNQUFLQSxFQUFDO0FBQUEsRUFBQztBQUFBLEVBQUMsUUFBTztBQUFDLFdBQU8sRUFBRSxLQUFLLElBQUksR0FBRSxFQUFFLEtBQUssTUFBSyxPQUFPLEdBQUU7QUFBQSxFQUFJO0FBQUM7QUFBQyxJQUFNLElBQUUsU0FBU0EsSUFBRTtBQUFDLE1BQUlDLEtBQUUsRUFBRUQsRUFBQztBQUFFLFNBQU8sSUFBSSxFQUFFQyxFQUFDO0FBQUM7QUFB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QUFBQSxFQUNQLFFBQVE7QUFDVjtBQUNBLElBQU8sa0JBQVE7OztBQ1BmLElBQU8sZUFBUTtBQUFBLEVBQ2I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFDRjs7O0FDcERBLElBQU8scUJBQVE7QUFBQSxFQUNiO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUdGOzs7QUM5Q0EsSUFBTyxpQkFBUSxDQUFDLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxRQUFRLE9BQU8sT0FBTyxLQUFLOzs7QUNBbkcsSUFBTyxnQkFBUTtBQUFBLEVBQ2I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7OztBQ2xCQSxJQUFPLHdCQUFRLENBQUMsUUFBUSxRQUFRLFFBQVEsUUFBUSxPQUFPLE9BQU8sSUFBSTs7O0FDQWxFLElBQU8saUJBQVE7QUFBQSxFQUNiO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUVBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGOzs7QUM5Q0EsSUFBTyxnQkFBUTtBQUFBLEVBQ2I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBLEVBQ0E7QUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBLEVBQ0E7QUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBLEVBRUE7QUFBQTtBQUFBLEVBQ0E7QUFBQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUEsRUFFQTtBQUFBO0FBQUEsRUFDQTtBQUNGOzs7QUNoQ0EsSUFBSSxPQUFPO0FBQUEsRUFDVCxDQUFDLFlBQUk7QUFBQSxFQUNMLENBQUMsZUFBTyxNQUFNO0FBQUEsRUFDZCxDQUFDLGVBQU8sTUFBTTtBQUFBLEVBQ2QsQ0FBQyxvQkFBWSxXQUFXO0FBQUEsRUFDeEIsQ0FBQyxnQkFBUSxPQUFPO0FBQUEsRUFDaEIsQ0FBQyx1QkFBZSxjQUFjO0FBQUEsRUFDOUIsQ0FBQyxnQkFBUSxPQUFPO0FBQ2xCO0FBRUEsSUFBSSxnQkFBZ0IsQ0FBQztBQUVyQixJQUFJQyxXQUFVLENBQUM7QUFFZixLQUFLLFFBQVEsQ0FBQUMsT0FBSztBQUNoQixFQUFBQSxHQUFFLENBQUMsRUFBRSxRQUFRLENBQUFDLE9BQUs7QUFFaEIsa0JBQWNBLEVBQUMsSUFBSTtBQUVuQixJQUFBRixTQUFRRSxFQUFDLElBQUk7QUFDYixRQUFJRCxHQUFFLENBQUMsTUFBTSxRQUFXO0FBQ3RCLE1BQUFELFNBQVFFLEVBQUMsSUFBSSxDQUFDRixTQUFRRSxFQUFDLEdBQUdELEdBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDaEM7QUFBQSxFQUNGLENBQUM7QUFDSCxDQUFDOzs7QUMvQkQsSUFBTyxtQkFBUTtBQUFBLEVBQ2I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUYsRUFBRSxPQUFPLENBQUNFLElBQUdDLFNBQVE7QUFDbkIsRUFBQUQsR0FBRUMsSUFBRyxJQUFJO0FBQ1QsU0FBT0Q7QUFDVCxHQUFHLENBQUMsQ0FBQzs7O0FDM0NMLElBQU8sbUJBQVE7QUFBQSxFQUNiLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLFNBQVM7QUFBQSxFQUNULFFBQVE7QUFBQSxFQUNSLGFBQWE7QUFBQTtBQUVmOzs7QUNQQSxJQUFJLFVBQVU7QUFBQSxFQUNaLEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFBQSxFQUNMLEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFDTDtBQUVBLElBQUksVUFBVSxDQUFDO0FBQ2YsT0FBTyxLQUFLLE9BQU8sRUFBRSxRQUFRLFNBQVVFLElBQUc7QUFDeEMsVUFBUUEsRUFBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsU0FBVUMsSUFBRztBQUN4QyxZQUFRQSxFQUFDLElBQUlEO0FBQUEsRUFDZixDQUFDO0FBQ0gsQ0FBQztBQUNELElBQU9FLG1CQUFROzs7QUMxQ2YsSUFBTSxpQkFBaUI7QUFBQSxFQUNyQixLQUFLO0FBQUE7QUFBQSxFQUNMLEtBQUs7QUFBQTtBQUFBLEVBQ0wsS0FBSztBQUFBO0FBQUEsRUFDTCxRQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtMLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFDWjtBQUdBLElBQU0sa0JBQWtCO0FBQUEsRUFDdEIsS0FBSztBQUFBO0FBQUEsRUFDTCxLQUFLO0FBQUE7QUFBQSxFQUNMLFFBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUdMLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFDWjtBQUVBLElBQU0sWUFBWTtBQUFBLEVBQ2hCLE1BQU07QUFBQSxFQUNOLE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLE9BQU87QUFBQSxFQUNQLE9BQU87QUFBQSxFQUNQLE9BQU87QUFDVDs7O0FDaENBLElBQU9DLGlCQUFRO0FBQUEsRUFDYixLQUFLO0FBQUEsSUFDSDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxTQUFBQztBQUFBO0FBQUEsSUFDQSxTQUFBQztBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7OztBQ25CQSxJQUFNLFdBQVc7QUFDakIsSUFBTSxZQUFZO0FBQ2xCLElBQU0sU0FBUztBQUlmLElBQU0sYUFBYSxTQUFVLE1BQU1DLFFBQU87QUFDeEMsTUFBSUMsT0FBTSxLQUFLLFVBQVUsS0FBSyxRQUFRLEtBQUs7QUFDM0MsUUFBTUMsV0FBVUYsT0FBTSxNQUFNLElBQUk7QUFFaEMsTUFBSUUsU0FBUSxlQUFlRCxJQUFHLEdBQUc7QUFDL0IsU0FBSyxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQzVCLFNBQUssTUFBTSxLQUFLQyxTQUFRRCxJQUFHLENBQUM7QUFBQSxFQUM5QjtBQUVBLE1BQUksU0FBUyxLQUFLQSxJQUFHLEtBQUssQ0FBQyxVQUFVLEtBQUtBLElBQUcsS0FBSyxDQUFDLE9BQU8sS0FBS0EsSUFBRyxHQUFHO0FBQ25FLFFBQUksTUFBTUEsS0FBSSxNQUFNLFFBQVE7QUFFNUIsUUFBSSxJQUFJLFVBQVUsR0FBRztBQUNuQixVQUFJLFFBQVEsVUFBUTtBQUNsQixlQUFPLEtBQUssS0FBSztBQUNqQixZQUFJLFNBQVMsSUFBSTtBQUNmLGVBQUssUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUM1QixlQUFLLE1BQU0sS0FBSyxJQUFJO0FBQUEsUUFDdEI7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQU9BLFNBQU87QUFDVDtBQUNBLElBQU8sZ0JBQVE7OztBQ3BDZixJQUFNRSxXQUFVO0FBRWhCLElBQU0sWUFBWSxTQUFVLE1BQU07QUFDaEMsTUFBSUMsT0FBTSxLQUFLLFlBQVksS0FBSyxVQUFVLEtBQUs7QUFFL0MsRUFBQUEsT0FBTUEsS0FBSSxRQUFRLFVBQVUsRUFBRTtBQUM5QixFQUFBQSxPQUFNQSxLQUFJLFFBQVEsVUFBVSxHQUFHO0FBRS9CLEVBQUFBLE9BQU1BLEtBQUksUUFBUSx1QkFBdUIsT0FBTztBQUVoRCxNQUFJRCxTQUFRLEtBQUtDLElBQUcsR0FBRztBQUNyQixJQUFBQSxPQUFNQSxLQUFJLFFBQVEsTUFBTSxFQUFFO0FBQUEsRUFDNUI7QUFFQSxFQUFBQSxPQUFNQSxLQUFJLFFBQVEsU0FBUyxFQUFFO0FBQzdCLE1BQUlBLFNBQVEsS0FBSyxRQUFRO0FBQ3ZCLFNBQUssVUFBVUE7QUFBQSxFQUNqQjtBQUNGO0FBQ0EsSUFBTyxrQkFBUTs7O0FDbEJmLElBQU0sT0FBTyxTQUFVLE1BQU07QUFDM0IsTUFBSSxPQUFPLEtBQUs7QUFDaEIsTUFBSSxTQUFTLENBQUM7QUFDZCxXQUFTQyxLQUFJLEdBQUdBLEtBQUksS0FBSyxRQUFRQSxNQUFLLEdBQUc7QUFDdkMsYUFBU0MsS0FBSSxHQUFHQSxLQUFJLEtBQUtELEVBQUMsRUFBRSxRQUFRQyxNQUFLLEdBQUc7QUFDMUMsVUFBSSxPQUFPLEtBQUtELEVBQUMsRUFBRUMsRUFBQztBQUNwQixVQUFJLE9BQU8sS0FBSyxXQUFXLEtBQUs7QUFDaEMsYUFBTyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUs7QUFDL0IsYUFBTyxJQUFJLEtBQUs7QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTRCxLQUFJLEdBQUdBLEtBQUksS0FBSyxRQUFRQSxNQUFLLEdBQUc7QUFDdkMsYUFBU0MsS0FBSSxHQUFHQSxLQUFJLEtBQUtELEVBQUMsRUFBRSxRQUFRQyxNQUFLLEdBQUc7QUFDMUMsVUFBSSxPQUFPLEtBQUtELEVBQUMsRUFBRUMsRUFBQztBQUNwQixVQUFJLE9BQU8sS0FBSyxXQUFXLEtBQUs7QUFDaEMsV0FBSyxPQUFPLE9BQU8sSUFBSTtBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUNGO0FBQ0EsSUFBTyxlQUFROzs7QUNwQmYsSUFBTSxTQUFTLFNBQVUsTUFBTTtBQUM3QixNQUFJLFVBQVU7QUFDZCxNQUFJQyxTQUFRO0FBQ1osTUFBSSxPQUFPLEtBQUs7QUFDaEIsV0FBU0MsS0FBSSxHQUFHQSxLQUFJLEtBQUssUUFBUUEsTUFBSyxHQUFHO0FBQ3ZDLGFBQVNDLEtBQUksR0FBR0EsS0FBSSxLQUFLRCxFQUFDLEVBQUUsUUFBUUMsTUFBSyxHQUFHO0FBQzFDLFVBQUksT0FBTyxLQUFLRCxFQUFDLEVBQUVDLEVBQUM7QUFDcEIsV0FBSyxTQUFTO0FBQUEsUUFDWixPQUFPRjtBQUFBLFFBQ1AsT0FBTyxVQUFVLEtBQUssSUFBSTtBQUFBLFFBQzFCLFFBQVEsS0FBSyxLQUFLO0FBQUEsTUFDcEI7QUFDQSxpQkFBVyxLQUFLLElBQUksU0FBUyxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUs7QUFDMUQsTUFBQUEsVUFBUztBQUFBLElBQ1g7QUFBQSxFQUNGO0FBQ0Y7QUFHQSxJQUFPLGlCQUFROzs7QUNuQmYsSUFBTUcsU0FBUSxTQUFVLE1BQU07QUFFNUIsTUFBSUMsWUFBVyxLQUFLO0FBQ3BCLFdBQVNDLEtBQUksR0FBR0EsS0FBSUQsVUFBUyxRQUFRQyxNQUFLLEdBQUc7QUFDM0MsYUFBU0MsS0FBSSxHQUFHQSxLQUFJRixVQUFTQyxFQUFDLEVBQUUsUUFBUUMsTUFBSyxHQUFHO0FBQzlDLE1BQUFGLFVBQVNDLEVBQUMsRUFBRUMsRUFBQyxFQUFFLFFBQVEsQ0FBQ0QsSUFBR0MsRUFBQztBQUFBLElBQzlCO0FBQUEsRUFDRjtBQVVGO0FBRUEsSUFBTyxrQkFBUUg7OztBQ3BCZixJQUFNSSxhQUFZLFNBQVUsTUFBTTtBQUNoQyxNQUFJQyxLQUFJO0FBQ1IsTUFBSSxPQUFPLEtBQUs7QUFDaEIsV0FBU0MsS0FBSSxHQUFHQSxLQUFJLEtBQUssUUFBUUEsTUFBSyxHQUFHO0FBQ3ZDLGFBQVNDLEtBQUksR0FBR0EsS0FBSSxLQUFLRCxFQUFDLEVBQUUsUUFBUUMsTUFBSyxHQUFHO0FBQzFDLFVBQUksS0FBS0QsRUFBQyxFQUFFQyxFQUFDLEVBQUUsV0FBVyxJQUFJO0FBQzVCO0FBQUEsTUFDRjtBQUNBLE1BQUFGLE1BQUs7QUFDTCxXQUFLQyxFQUFDLEVBQUVDLEVBQUMsRUFBRSxZQUFZRjtBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBTyxvQkFBUUQ7OztBQ0xmLElBQU0sV0FBVyxTQUFVLE1BQU0sSUFBSTtBQUNuQyxNQUFJLE9BQU8sS0FBSztBQUNoQixXQUFTSSxLQUFJLEdBQUdBLEtBQUksS0FBSyxRQUFRQSxNQUFLLEdBQUc7QUFDdkMsYUFBU0MsS0FBSSxHQUFHQSxLQUFJLEtBQUtELEVBQUMsRUFBRSxRQUFRQyxNQUFLLEdBQUc7QUFDMUMsU0FBRyxLQUFLRCxFQUFDLEVBQUVDLEVBQUMsR0FBRyxLQUFLLEtBQUs7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLElBQU1DLFlBQVU7QUFBQSxFQUNkLE9BQU8sQ0FBQyxTQUFTLFNBQVMsTUFBTSxhQUFLO0FBQUEsRUFDckMsU0FBUyxDQUFDLFNBQVMsU0FBUyxNQUFNLGVBQU87QUFBQSxFQUN6QyxRQUFRLENBQUMsU0FBUyxTQUFTLE1BQU0sY0FBTTtBQUFBLEVBQ3ZDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFDQSxJQUFPQyxtQkFBUUQ7OztBQ3ZCZixJQUFPRSxtQkFBUTtBQUFBLEVBQ2IsU0FBQUM7QUFBQSxFQUNBLFNBQUFDO0FBQUEsRUFDQSxPQUFBQztBQUFBLEVBQ0EsT0FBTyxDQUFDLFNBQVMsV0FBVyxTQUFTLElBQUk7QUFDM0M7OztBQ1JBLElBQU0sWUFBWSxTQUFVLE1BQU07QUFDaEMsUUFBTSxXQUFXLEtBQUssTUFBTSxJQUFJO0FBQ2hDLFFBQU0sT0FBTyxLQUFLO0FBQ2xCLE1BQUksS0FBSyxXQUFXLEtBQUssT0FBTyxLQUFLLFFBQVEsRUFBRSxXQUFXLEdBQUc7QUFDM0Q7QUFBQSxFQUNGO0FBQ0EsTUFBSSxhQUFhLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQzNDLE1BQUksV0FBVyxXQUFXLFdBQVcsU0FBUyxDQUFDO0FBRS9DLE1BQUksU0FBUyxNQUFNO0FBQ2pCO0FBQUEsRUFDRjtBQUVBLE1BQUksU0FBUyxlQUFlLFNBQVMsTUFBTSxHQUFHO0FBQzVDLFFBQUksUUFBUSxTQUFTLFNBQVMsTUFBTTtBQUVwQyxhQUFTLFdBQVc7QUFDcEIsYUFBUyxVQUFVO0FBQ25CLGFBQVMsWUFBWTtBQUVyQixRQUFJLEtBQUssUUFBUSxXQUFXO0FBQzFCLFdBQUssS0FBSyxFQUFFLE1BQU0sR0FBRyxFQUFFLFFBQVEsQ0FBQyxXQUFXLFdBQVcsQ0FBQztBQUFBLElBQ3pEO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBT0MsbUJBQVEsRUFBRSxVQUFVOzs7QUMxQjNCLElBQU0sV0FBVyxXQUFZO0FBQzNCLFFBQU0sT0FBTyxLQUFLO0FBQ2xCLE1BQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLGFBQWEsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDM0MsTUFBSSxPQUFPLFdBQVcsV0FBVyxTQUFTLENBQUM7QUFDM0MsTUFBSSxLQUFLLGNBQWMsUUFBUSxLQUFLLFNBQVM7QUFDM0MsU0FBSyxPQUFPLEtBQUs7QUFDakIsU0FBSyxTQUFTLEtBQUs7QUFBQSxFQUNyQjtBQUNBLFNBQU87QUFDVDtBQUVBLElBQU1DLE9BQU0sU0FBVUMsT0FBTTtBQUMxQixFQUFBQSxNQUFLLFVBQVUsV0FBVztBQUM1QjtBQUNBLElBQU9DLGVBQVFGOzs7QUNqQmYsSUFBTSxjQUFjLFNBQVUsS0FBS0csT0FBTUMsUUFBTztBQUM5QyxNQUFJQyxTQUFRLENBQUM7QUFDYixNQUFJLGFBQWEsQ0FBQztBQUNsQixNQUFJLFdBQVdELE9BQU0sWUFBWSxDQUFDO0FBQ2xDLE1BQUksUUFBUSxDQUFDRSxTQUFRO0FBQ25CLElBQUFBLE9BQU1BLEtBQUksWUFBWSxFQUFFLEtBQUs7QUFDN0IsUUFBSUMsT0FBTUQsS0FBSTtBQUNkLFFBQUlILE1BQUssT0FBT0ksT0FBTUosTUFBSyxLQUFLO0FBQzlCLE1BQUFJLE9BQU1KLE1BQUs7QUFBQSxJQUNiO0FBQ0EsYUFBUyxPQUFPQSxNQUFLLEtBQUssT0FBT0ksTUFBSyxRQUFRLEdBQUc7QUFDL0MsVUFBSUMsVUFBU0YsS0FBSSxVQUFVLEdBQUcsSUFBSTtBQUVsQyxVQUFJSCxNQUFLLFFBQVFDLE9BQU0sTUFBTSxJQUFJLFFBQVEsZUFBZUksT0FBTSxHQUFHO0FBQy9EO0FBQUEsTUFDRjtBQUVBLFVBQUksU0FBUyxlQUFlQSxPQUFNLE1BQU0sTUFBTTtBQUM1QyxtQkFBVyxLQUFLQSxPQUFNO0FBQ3RCO0FBQUEsTUFDRjtBQUNBLFVBQUlILE9BQU0sZUFBZUcsT0FBTSxNQUFNLE1BQU07QUFDekMsbUJBQVcsS0FBS0EsT0FBTTtBQUN0QjtBQUFBLE1BQ0Y7QUFDQSxNQUFBSCxPQUFNRyxPQUFNLElBQUlGO0FBQUEsSUFDbEI7QUFBQSxFQUNGLENBQUM7QUFFRCxFQUFBRCxTQUFRLE9BQU8sT0FBTyxDQUFDLEdBQUcsVUFBVUEsTUFBSztBQUV6QyxhQUFXLFFBQVEsQ0FBQ0MsU0FBUTtBQUMxQixXQUFPRCxPQUFNQyxJQUFHO0FBQUEsRUFDbEIsQ0FBQztBQUNELFNBQU9EO0FBQ1Q7QUFFQSxJQUFPLHNCQUFROzs7QUNwQ2YsSUFBTUksWUFBVyxTQUFPO0FBQ3RCLFNBQU8sT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUFHLE1BQU07QUFDakQ7QUFFQSxJQUFNQyxZQUFXO0FBQUEsRUFDZixNQUFNO0FBQUEsRUFDTixLQUFLO0FBQ1A7QUFFQSxJQUFNLFVBQVUsU0FBVSxRQUFRLENBQUMsR0FBR0MsUUFBTyxDQUFDLEdBQUc7QUFDL0MsTUFBSUMsU0FBUSxLQUFLLE1BQU07QUFDdkIsRUFBQUQsUUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHRCxXQUFVQyxLQUFJO0FBQ3ZDLE1BQUlGLFVBQVMsS0FBSyxHQUFHO0FBQ25CLFdBQU8sT0FBT0csT0FBTSxJQUFJLFNBQVMsS0FBSztBQUN0QyxZQUFRLE9BQU8sS0FBSyxLQUFLO0FBQUEsRUFDM0I7QUFDQSxNQUFJLFdBQVcsb0JBQVksT0FBT0QsT0FBTSxLQUFLLE1BQU0sQ0FBQztBQUVwRCxTQUFPLEtBQUssUUFBUSxFQUFFLFFBQVEsQ0FBQUUsU0FBTztBQUVuQyxRQUFJRCxPQUFNLElBQUksVUFBVSxlQUFlQyxJQUFHLEdBQUc7QUFDM0MsYUFBT0QsT0FBTSxJQUFJLFVBQVVDLElBQUc7QUFDOUI7QUFBQSxJQUNGO0FBQ0EsSUFBQUQsT0FBTSxJQUFJLFVBQVVDLElBQUcsSUFBSSxTQUFTQSxJQUFHO0FBQUEsRUFDekMsQ0FBQztBQUNELFNBQU87QUFDVDtBQUVBLElBQU9DLGVBQVE7QUFBQSxFQUNiLFdBQVc7QUFDYjs7O0FDN0JBLElBQU1DLFNBQVE7QUFBQSxFQUNaLEtBQUs7QUFBQSxJQUNILFdBQVcsQ0FBQztBQUFBO0FBQUEsRUFDZDtBQUNGO0FBQ0EsSUFBT0MsbUJBQVE7QUFBQSxFQUNiLE9BQUFEO0FBQUEsRUFDQSxLQUFBRTtBQUFBLEVBQ0EsS0FBQUM7QUFBQSxFQUNBLFNBQUFDO0FBQUEsRUFDQSxPQUFPLENBQUMsV0FBVztBQUNyQjs7O0FDQ0EsWUFBSSxPQUFPQyxlQUFNO0FBQ2pCLFlBQUksT0FBT0EsZUFBTTtBQUNqQixZQUFJLE9BQU9BLGVBQUs7QUFDaEIsWUFBSSxPQUFPQSxlQUFRO0FBQ25CLFlBQUksT0FBT0EsZ0JBQUc7QUFDZCxZQUFJLE9BQU9BLGVBQVk7QUFDdkIsWUFBSSxPQUFPQSxnQkFBUTtBQUNuQixZQUFJLE9BQU9BLGVBQU07QUFDakIsWUFBSSxPQUFPLGNBQUs7QUFDaEIsWUFBSSxPQUFPQSxlQUFNO0FBQ2pCLFlBQUksT0FBT0EsZ0JBQVM7QUFDcEIsWUFBSSxPQUFPQSxlQUFPO0FBQ2xCLFlBQUksT0FBT0EsZ0JBQUs7QUFFaEIsSUFBTyxjQUFROzs7QUMxQlIsSUFBTSxxQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFTbkIsU0FBUixjQUErQixRQUFnQixXQUFtQixvQkFBNEI7QUFDakcsUUFBTSxTQUFTLE9BQU8sVUFBVTtBQUNoQyxRQUFNLFlBQVksT0FBTyxTQUFTLEVBQUUsTUFBTSxHQUFHLElBQUksRUFBRSxHQUFHLE1BQU07QUFDNUQsUUFBTSxhQUFhLE9BQU8sU0FBUyxRQUFRLEVBQUUsTUFBTSxPQUFPLFNBQVMsR0FBRyxJQUFJLE9BQU8sUUFBUSxPQUFPLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztBQUNwSCxRQUFNLGlCQUFpQixZQUFJLFNBQVMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksTUFBTTtBQUN2RSxRQUFNLFdBQVcsT0FBTyxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBRWpELFNBQU8sZUFBZSxVQUFVO0FBQUEsSUFDNUIsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsaUJBQWlCO0FBQUEsSUFDakIsV0FBVztBQUFBLEVBQ2YsQ0FBQztBQUNMO0FBRUEsU0FBUyxlQUFlLFVBQWtCLE1BQTRCO0FBQ2xFLFNBQU8saUJBQVMsT0FBTyxVQUFVLElBQUk7QUFDekM7OztBQ3ZCTyxJQUFNLGlCQUFOLE1BQXlDO0FBQUEsRUFLNUMsWUFBWSxTQUF5QjtBQUZyQyxtQkFBbUI7QUFHZixTQUFLLFdBQVc7QUFDaEIsU0FBSyxTQUFTLElBQUlDLFFBQU8sRUFBRSxNQUFNLEtBQUssU0FBUyxLQUFLLENBQUM7QUFBQSxFQUN6RDtBQUFBLEVBRUEsT0FBTyxTQUFTLFFBQWdCLFNBQW9EO0FBQ2hGLFNBQUssVUFBVTtBQUNmLFVBQU0sU0FBUyxjQUFjLFFBQVEsUUFBUSxVQUFVO0FBRXZELFVBQU0scUJBQXFCLE1BQU0sS0FBSyxPQUFPLFNBQVM7QUFBQSxNQUNsRCxPQUFPLFFBQVE7QUFBQSxNQUNmO0FBQUEsTUFDQSxRQUFRLFFBQVE7QUFBQSxNQUNoQixRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsUUFDTCxhQUFhLFFBQVE7QUFBQSxNQUN6QjtBQUFBLElBQ0osQ0FBQztBQUVELFVBQU0sa0JBQWtCLE9BQU8sVUFBVTtBQUN6QyxRQUFJLGFBQWE7QUFDakIsbUJBQWUsWUFBWSxvQkFBb0I7QUFDM0MsVUFBSSxLQUFLLFNBQVM7QUFDZDtBQUFBLE1BQ0o7QUFDQSxVQUFJLEtBQUssWUFBWSxRQUFRLGVBQWUsR0FBRztBQUMzQyxhQUFLLE1BQU07QUFDWDtBQUFBLE1BQ0o7QUFDQSxvQkFBYyxTQUFTO0FBQ3ZCLFlBQU07QUFBQSxJQUNWO0FBQUEsRUFDSjtBQUFBLEVBRVEsWUFBWSxRQUFnQixpQkFBd0Q7QUFDeEYsVUFBTSxrQkFBa0IsT0FBTyxVQUFVO0FBQ3pDLFdBQU8sZ0JBQWdCLFNBQVMsZ0JBQWdCLFFBQVEsZ0JBQWdCLE9BQU8sZ0JBQWdCO0FBQUEsRUFDbkc7QUFBQSxFQUVBLE1BQU0sUUFBUTtBQUNWLFFBQUksS0FBSztBQUFTO0FBQ2xCLFNBQUssT0FBTyxNQUFNO0FBQ2xCLFNBQUssVUFBVTtBQUFBLEVBQ25CO0FBQUEsRUFFQSxNQUFNLGVBQWtDO0FBQ3BDLFVBQU0sV0FBVyxNQUFNLEtBQUssT0FBTyxLQUFLO0FBQ3hDLFNBQUssU0FBUyxTQUFTLFNBQVMsT0FBTyxJQUFJLENBQUNDLFdBQXlCQSxPQUFNLElBQUk7QUFFL0UsV0FBTyxLQUFLLFNBQVM7QUFBQSxFQUN6QjtBQUFBLEVBRUEsTUFBTSxpQkFBbUM7QUFDckMsUUFBSTtBQUNBLFlBQU0sS0FBSyxPQUFPLEtBQUs7QUFDdkIsYUFBTztBQUFBLElBQ1gsU0FBUyxPQUFQO0FBQ0UsY0FBUSxNQUFNLDZCQUE2QixLQUFLO0FBQ2hELGFBQU87QUFBQSxJQUNYO0FBQUEsRUFDSjtBQUNKOzs7QUN2RU8sSUFBTSxpQkFBeUI7QUFDL0IsSUFBTSxhQUEyRDtFQUN0RSxTQUFTLENBQUNDLE9BQW1CLE9BQU9BLEVBQUMsRUFBRSxRQUFRLFFBQVEsR0FBRztFQUMxRCxTQUFTLENBQUNBLE9BQW1CLE9BQU9BLEVBQUM7O0FBRWhDLElBQU0sVUFBVTs7O0FDSHZCLElBQU0sV0FBVyxNQUFNO0FBRXZCLElBQU0sYUFBYSxNQUFLO0FBQ3RCLFFBQU0sUUFBUSxDQUFBO0FBQ2QsV0FBU0MsS0FBSSxHQUFHQSxLQUFJLEtBQUssRUFBRUEsSUFBRztBQUM1QixVQUFNLEtBQUssUUFBUUEsS0FBSSxLQUFLLE1BQU0sTUFBTUEsR0FBRSxTQUFTLEVBQUUsR0FBRyxZQUFXLENBQUU7O0FBR3ZFLFNBQU87QUFDVCxHQUFFO0FBd0hGLElBQU0sUUFBUTtBQUVQLElBQU0sU0FNQyxDQUFDQyxNQUFLLGlCQUFpQixTQUFTLE9BQU8sV0FBa0I7QUFHckUsTUFBSUEsS0FBSSxXQUFXLEdBQUc7QUFDcEIsV0FBT0E7O0FBR1QsTUFBSSxTQUFTQTtBQUNiLE1BQUksT0FBT0EsU0FBUSxVQUFVO0FBQzNCLGFBQVMsT0FBTyxVQUFVLFNBQVMsS0FBS0EsSUFBRzthQUNsQyxPQUFPQSxTQUFRLFVBQVU7QUFDbEMsYUFBUyxPQUFPQSxJQUFHOztBQUdyQixNQUFJLFlBQVksY0FBYztBQUM1QixXQUFPLE9BQU8sTUFBTSxFQUFFLFFBQVEsbUJBQW1CLFNBQVUsSUFBRTtBQUMzRCxhQUFPLFdBQVcsU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSTtJQUNoRCxDQUFDOztBQUdILE1BQUlDLE9BQU07QUFDVixXQUFTQyxLQUFJLEdBQUdBLEtBQUksT0FBTyxRQUFRQSxNQUFLLE9BQU87QUFDN0MsVUFBTSxVQUFVLE9BQU8sVUFBVSxRQUFRLE9BQU8sTUFBTUEsSUFBR0EsS0FBSSxLQUFLLElBQUk7QUFDdEUsVUFBTSxNQUFNLENBQUE7QUFFWixhQUFTQyxLQUFJLEdBQUdBLEtBQUksUUFBUSxRQUFRLEVBQUVBLElBQUc7QUFDdkMsVUFBSUMsS0FBSSxRQUFRLFdBQVdELEVBQUM7QUFDNUIsVUFDRUMsT0FBTTtNQUNOQSxPQUFNO01BQ05BLE9BQU07TUFDTkEsT0FBTTtNQUNMQSxNQUFLLE1BQVFBLE1BQUs7TUFDbEJBLE1BQUssTUFBUUEsTUFBSztNQUNsQkEsTUFBSyxNQUFRQSxNQUFLO01BQ2xCLFdBQVcsWUFBWUEsT0FBTSxNQUFRQSxPQUFNLEtBQzVDO0FBQ0EsWUFBSSxJQUFJLE1BQU0sSUFBSSxRQUFRLE9BQU9ELEVBQUM7QUFDbEM7O0FBR0YsVUFBSUMsS0FBSSxLQUFNO0FBQ1osWUFBSSxJQUFJLE1BQU0sSUFBSSxVQUFVQSxFQUFDO0FBQzdCOztBQUdGLFVBQUlBLEtBQUksTUFBTztBQUNiLFlBQUksSUFBSSxNQUFNLElBQUksVUFBVSxNQUFRQSxNQUFLLENBQUUsSUFBSyxVQUFVLE1BQVFBLEtBQUksRUFBSztBQUMzRTs7QUFHRixVQUFJQSxLQUFJLFNBQVVBLE1BQUssT0FBUTtBQUM3QixZQUFJLElBQUksTUFBTSxJQUNaLFVBQVUsTUFBUUEsTUFBSyxFQUFHLElBQUssVUFBVSxNQUFTQSxNQUFLLElBQUssRUFBSyxJQUFJLFVBQVUsTUFBUUEsS0FBSSxFQUFLO0FBQ2xHOztBQUdGLE1BQUFELE1BQUs7QUFDTCxNQUFBQyxLQUFJLFVBQWFBLEtBQUksU0FBVSxLQUFPLFFBQVEsV0FBV0QsRUFBQyxJQUFJO0FBRTlELFVBQUksSUFBSSxNQUFNLElBQ1osVUFBVSxNQUFRQyxNQUFLLEVBQUcsSUFDMUIsVUFBVSxNQUFTQSxNQUFLLEtBQU0sRUFBSyxJQUNuQyxVQUFVLE1BQVNBLE1BQUssSUFBSyxFQUFLLElBQ2xDLFVBQVUsTUFBUUEsS0FBSSxFQUFLOztBQUcvQixJQUFBSCxRQUFPLElBQUksS0FBSyxFQUFFOztBQUdwQixTQUFPQTtBQUNUO0FBK0JNLFNBQVUsVUFBVSxLQUFRO0FBQ2hDLE1BQUksQ0FBQyxPQUFPLE9BQU8sUUFBUSxVQUFVO0FBQ25DLFdBQU87O0FBR1QsU0FBTyxDQUFDLEVBQUUsSUFBSSxlQUFlLElBQUksWUFBWSxZQUFZLElBQUksWUFBWSxTQUFTLEdBQUc7QUFDdkY7QUFNTSxTQUFVLFVBQWEsS0FBVSxJQUFlO0FBQ3BELE1BQUksU0FBUyxHQUFHLEdBQUc7QUFDakIsVUFBTSxTQUFTLENBQUE7QUFDZixhQUFTSSxLQUFJLEdBQUdBLEtBQUksSUFBSSxRQUFRQSxNQUFLLEdBQUc7QUFDdEMsYUFBTyxLQUFLLEdBQUcsSUFBSUEsRUFBQyxDQUFFLENBQUM7O0FBRXpCLFdBQU87O0FBRVQsU0FBTyxHQUFHLEdBQUc7QUFDZjs7O0FDcFFBLElBQU1DLE9BQU0sT0FBTyxVQUFVO0FBRTdCLElBQU0sMEJBQTBCO0VBQzlCLFNBQVNDLFNBQW1CO0FBQzFCLFdBQU8sT0FBT0EsT0FBTSxJQUFJO0VBQzFCO0VBQ0EsT0FBTztFQUNQLFFBQVFBLFNBQXFCLEtBQVc7QUFDdEMsV0FBTyxPQUFPQSxPQUFNLElBQUksTUFBTSxNQUFNO0VBQ3RDO0VBQ0EsT0FBT0EsU0FBbUI7QUFDeEIsV0FBTyxPQUFPQSxPQUFNO0VBQ3RCOztBQUdGLElBQU1DLFlBQVcsTUFBTTtBQUN2QixJQUFNQyxRQUFPLE1BQU0sVUFBVTtBQUM3QixJQUFNLGdCQUFnQixTQUFVLEtBQVksZ0JBQW1CO0FBQzdELEVBQUFBLE1BQUssTUFBTSxLQUFLRCxVQUFTLGNBQWMsSUFBSSxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7QUFDOUU7QUFFQSxJQUFNLFNBQVMsS0FBSyxVQUFVO0FBRTlCLElBQU1FLFlBQVc7RUFDZixnQkFBZ0I7RUFDaEIsV0FBVztFQUNYLGtCQUFrQjtFQUNsQixhQUFhO0VBQ2IsU0FBUztFQUNULGlCQUFpQjtFQUNqQixXQUFXO0VBQ1gsUUFBUTtFQUNSLGlCQUFpQjtFQUNqQixTQUFTO0VBQ1Qsa0JBQWtCO0VBQ2xCLFFBQVE7RUFDUixXQUFXLFdBQVcsY0FBYzs7RUFFcEMsU0FBUztFQUNULGNBQWMsTUFBSTtBQUNoQixXQUFPLE9BQU8sS0FBSyxJQUFJO0VBQ3pCO0VBQ0EsV0FBVztFQUNYLG9CQUFvQjs7QUFHdEIsU0FBUyx5QkFBeUJDLElBQVU7QUFDMUMsU0FDRSxPQUFPQSxPQUFNLFlBQ2IsT0FBT0EsT0FBTSxZQUNiLE9BQU9BLE9BQU0sYUFDYixPQUFPQSxPQUFNLFlBQ2IsT0FBT0EsT0FBTTtBQUVqQjtBQUVBLElBQU0sV0FBVyxDQUFBO0FBRWpCLFNBQVMsZ0JBQ1AsUUFDQUosU0FDQSxxQkFDQSxnQkFDQSxrQkFDQSxvQkFDQSxXQUNBLGlCQUNBLFNBQ0FLLFNBQ0FDLE9BQ0EsV0FDQSxlQUNBLFFBQ0EsV0FDQSxrQkFDQSxTQUNBLGFBQThCO0FBRTlCLE1BQUksTUFBTTtBQUVWLE1BQUksU0FBUztBQUNiLE1BQUksT0FBTztBQUNYLE1BQUksWUFBWTtBQUNoQixVQUFRLFNBQVMsT0FBTyxJQUFJLFFBQVEsT0FBTyxVQUFrQixDQUFDLFdBQVc7QUFFdkUsVUFBTSxNQUFNLE9BQU8sSUFBSSxNQUFNO0FBQzdCLFlBQVE7QUFDUixRQUFJLE9BQU8sUUFBUSxhQUFhO0FBQzlCLFVBQUksUUFBUSxNQUFNO0FBQ2hCLGNBQU0sSUFBSSxXQUFXLHFCQUFxQjthQUNyQztBQUNMLG9CQUFZOzs7QUFHaEIsUUFBSSxPQUFPLE9BQU8sSUFBSSxRQUFRLE1BQU0sYUFBYTtBQUMvQyxhQUFPOzs7QUFJWCxNQUFJLE9BQU9ELFlBQVcsWUFBWTtBQUNoQyxVQUFNQSxRQUFPTCxTQUFRLEdBQUc7YUFDZixlQUFlLE1BQU07QUFDOUIsVUFBTSwrQ0FBZ0I7YUFDYix3QkFBd0IsV0FBV0MsVUFBUyxHQUFHLEdBQUc7QUFDM0QsVUFBTSxVQUFVLEtBQUssU0FBVSxPQUFLO0FBQ2xDLFVBQUksaUJBQWlCLE1BQU07QUFDekIsZUFBTywrQ0FBZ0I7O0FBRXpCLGFBQU87SUFDVCxDQUFDOztBQUdILE1BQUksUUFBUSxNQUFNO0FBQ2hCLFFBQUksb0JBQW9CO0FBQ3RCLGFBQU8sV0FBVyxDQUFDOztRQUVmLFFBQVFELFNBQVFHLFVBQVMsU0FBUyxTQUFTLE9BQU8sTUFBTTtVQUN4REg7O0FBR04sVUFBTTs7QUFHUixNQUFJLHlCQUF5QixHQUFHLEtBQUssVUFBVSxHQUFHLEdBQUc7QUFDbkQsUUFBSSxTQUFTO0FBQ1gsWUFBTSxZQUNKLG1CQUFtQkEsVUFFakIsUUFBUUEsU0FBUUcsVUFBUyxTQUFTLFNBQVMsT0FBTyxNQUFNO0FBQzVELGFBQU87U0FDTCx1Q0FBWSxjQUNWO1NBRUEsdUNBQVksUUFBUSxLQUFLQSxVQUFTLFNBQVMsU0FBUyxTQUFTLE1BQU07OztBQUd6RSxXQUFPLEVBQUMsdUNBQVlILFlBQVUsT0FBTSx1Q0FBWSxPQUFPLEdBQUcsR0FBRTs7QUFHOUQsUUFBTSxTQUFtQixDQUFBO0FBRXpCLE1BQUksT0FBTyxRQUFRLGFBQWE7QUFDOUIsV0FBTzs7QUFHVCxNQUFJO0FBQ0osTUFBSSx3QkFBd0IsV0FBV0MsVUFBUyxHQUFHLEdBQUc7QUFFcEQsUUFBSSxvQkFBb0IsU0FBUztBQUUvQixZQUFNLFVBQVUsS0FBSyxPQUFPOztBQUU5QixlQUFXLENBQUMsRUFBRSxPQUFPLElBQUksU0FBUyxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssT0FBTyxPQUFjLENBQUU7YUFDckVBLFVBQVNJLE9BQU0sR0FBRztBQUMzQixlQUFXQTtTQUNOO0FBQ0wsVUFBTSxPQUFPLE9BQU8sS0FBSyxHQUFHO0FBQzVCLGVBQVdDLFFBQU8sS0FBSyxLQUFLQSxLQUFJLElBQUk7O0FBR3RDLFFBQU0saUJBQWlCLGtCQUFrQixPQUFPTixPQUFNLEVBQUUsUUFBUSxPQUFPLEtBQUssSUFBSSxPQUFPQSxPQUFNO0FBRTdGLFFBQU0sa0JBQ0osa0JBQWtCQyxVQUFTLEdBQUcsS0FBSyxJQUFJLFdBQVcsSUFBSSxpQkFBaUIsT0FBTztBQUVoRixNQUFJLG9CQUFvQkEsVUFBUyxHQUFHLEtBQUssSUFBSSxXQUFXLEdBQUc7QUFDekQsV0FBTyxrQkFBa0I7O0FBRzNCLFdBQVNNLEtBQUksR0FBR0EsS0FBSSxTQUFTLFFBQVEsRUFBRUEsSUFBRztBQUN4QyxVQUFNLE1BQU0sU0FBU0EsRUFBQztBQUN0QixVQUFNOztNQUVKLE9BQU8sUUFBUSxZQUFZLE9BQU8sSUFBSSxVQUFVLGNBQWMsSUFBSSxRQUFRLElBQUksR0FBVTs7QUFFMUYsUUFBSSxhQUFhLFVBQVUsTUFBTTtBQUMvQjs7QUFJRixVQUFNLGNBQWMsYUFBYSxrQkFBbUIsSUFBWSxRQUFRLE9BQU8sS0FBSyxJQUFJO0FBQ3hGLFVBQU0sYUFDSk4sVUFBUyxHQUFHLElBQ1YsT0FBTyx3QkFBd0IsYUFDN0Isb0JBQW9CLGlCQUFpQixXQUFXLElBQ2hELGtCQUNGLG1CQUFtQixZQUFZLE1BQU0sY0FBYyxNQUFNLGNBQWM7QUFFM0UsZ0JBQVksSUFBSSxRQUFRLElBQUk7QUFDNUIsVUFBTSxtQkFBbUIsb0JBQUksUUFBTztBQUNwQyxxQkFBaUIsSUFBSSxVQUFVLFdBQVc7QUFDMUMsa0JBQ0UsUUFDQTtNQUNFO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7O01BRUEsd0JBQXdCLFdBQVcsb0JBQW9CQSxVQUFTLEdBQUcsSUFBSSxPQUFPO01BQzlFSTtNQUNBQztNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO0lBQWdCLENBQ2pCOztBQUlMLFNBQU87QUFDVDtBQUVBLFNBQVMsNEJBQ1BFLFFBQXlCTCxXQUFRO0FBRWpDLE1BQUksT0FBT0ssTUFBSyxxQkFBcUIsZUFBZSxPQUFPQSxNQUFLLHFCQUFxQixXQUFXO0FBQzlGLFVBQU0sSUFBSSxVQUFVLHdFQUF3RTs7QUFHOUYsTUFBSSxPQUFPQSxNQUFLLG9CQUFvQixlQUFlLE9BQU9BLE1BQUssb0JBQW9CLFdBQVc7QUFDNUYsVUFBTSxJQUFJLFVBQVUsdUVBQXVFOztBQUc3RixNQUFJQSxNQUFLLFlBQVksUUFBUSxPQUFPQSxNQUFLLFlBQVksZUFBZSxPQUFPQSxNQUFLLFlBQVksWUFBWTtBQUN0RyxVQUFNLElBQUksVUFBVSwrQkFBK0I7O0FBR3JELFFBQU0sVUFBVUEsTUFBSyxXQUFXTCxVQUFTO0FBQ3pDLE1BQUksT0FBT0ssTUFBSyxZQUFZLGVBQWVBLE1BQUssWUFBWSxXQUFXQSxNQUFLLFlBQVksY0FBYztBQUNwRyxVQUFNLElBQUksVUFBVSxtRUFBbUU7O0FBR3pGLE1BQUksU0FBUztBQUNiLE1BQUksT0FBT0EsTUFBSyxXQUFXLGFBQWE7QUFDdEMsUUFBSSxDQUFDVCxLQUFJLEtBQUssWUFBWVMsTUFBSyxNQUFNLEdBQUc7QUFDdEMsWUFBTSxJQUFJLFVBQVUsaUNBQWlDOztBQUV2RCxhQUFTQSxNQUFLOztBQUVoQixRQUFNLFlBQVksV0FBVyxNQUFNO0FBRW5DLE1BQUlILFVBQVNGLFVBQVM7QUFDdEIsTUFBSSxPQUFPSyxNQUFLLFdBQVcsY0FBY1AsVUFBU08sTUFBSyxNQUFNLEdBQUc7QUFDOUQsSUFBQUgsVUFBU0csTUFBSzs7QUFHaEIsTUFBSTtBQUNKLE1BQUlBLE1BQUssZUFBZUEsTUFBSyxlQUFlLHlCQUF5QjtBQUNuRSxrQkFBY0EsTUFBSzthQUNWLGFBQWFBLE9BQU07QUFDNUIsa0JBQWNBLE1BQUssVUFBVSxZQUFZO1NBQ3BDO0FBQ0wsa0JBQWNMLFVBQVM7O0FBR3pCLE1BQUksb0JBQW9CSyxTQUFRLE9BQU9BLE1BQUssbUJBQW1CLFdBQVc7QUFDeEUsVUFBTSxJQUFJLFVBQVUsK0NBQStDOztBQUdyRSxRQUFNLFlBQ0osT0FBT0EsTUFBSyxjQUFjLGNBQ3hCLENBQUMsQ0FBQ0EsTUFBSyxvQkFBb0IsT0FDekIsT0FDQUwsVUFBUyxZQUNYLENBQUMsQ0FBQ0ssTUFBSztBQUVYLFNBQU87SUFDTCxnQkFBZ0IsT0FBT0EsTUFBSyxtQkFBbUIsWUFBWUEsTUFBSyxpQkFBaUJMLFVBQVM7O0lBRTFGO0lBQ0Esa0JBQ0UsT0FBT0ssTUFBSyxxQkFBcUIsWUFBWSxDQUFDLENBQUNBLE1BQUssbUJBQW1CTCxVQUFTO0lBQ2xGO0lBQ0E7SUFDQSxpQkFDRSxPQUFPSyxNQUFLLG9CQUFvQixZQUFZQSxNQUFLLGtCQUFrQkwsVUFBUztJQUM5RSxnQkFBZ0IsQ0FBQyxDQUFDSyxNQUFLO0lBQ3ZCLFdBQVcsT0FBT0EsTUFBSyxjQUFjLGNBQWNMLFVBQVMsWUFBWUssTUFBSztJQUM3RSxRQUFRLE9BQU9BLE1BQUssV0FBVyxZQUFZQSxNQUFLLFNBQVNMLFVBQVM7SUFDbEUsaUJBQ0UsT0FBT0ssTUFBSyxvQkFBb0IsWUFBWUEsTUFBSyxrQkFBa0JMLFVBQVM7SUFDOUUsU0FBUyxPQUFPSyxNQUFLLFlBQVksYUFBYUEsTUFBSyxVQUFVTCxVQUFTO0lBQ3RFLGtCQUNFLE9BQU9LLE1BQUsscUJBQXFCLFlBQVlBLE1BQUssbUJBQW1CTCxVQUFTO0lBQ2hGLFFBQVFFO0lBQ1I7SUFDQTtJQUNBLGVBQWUsT0FBT0csTUFBSyxrQkFBa0IsYUFBYUEsTUFBSyxnQkFBZ0JMLFVBQVM7SUFDeEYsV0FBVyxPQUFPSyxNQUFLLGNBQWMsWUFBWUEsTUFBSyxZQUFZTCxVQUFTOztJQUUzRSxNQUFNLE9BQU9LLE1BQUssU0FBUyxhQUFhQSxNQUFLLE9BQU87SUFDcEQsb0JBQ0UsT0FBT0EsTUFBSyx1QkFBdUIsWUFBWUEsTUFBSyxxQkFBcUJMLFVBQVM7O0FBRXhGO0FBRU0sU0FBVSxVQUFVLFFBQWFLLFFBQXlCLENBQUEsR0FBRTtBQUNoRSxNQUFJLE1BQU07QUFDVixRQUFNLFVBQVUsNEJBQTRCQSxLQUFJO0FBRWhELE1BQUk7QUFDSixNQUFJSDtBQUVKLE1BQUksT0FBTyxRQUFRLFdBQVcsWUFBWTtBQUN4QyxJQUFBQSxVQUFTLFFBQVE7QUFDakIsVUFBTUEsUUFBTyxJQUFJLEdBQUc7YUFDWEosVUFBUyxRQUFRLE1BQU0sR0FBRztBQUNuQyxJQUFBSSxVQUFTLFFBQVE7QUFDakIsZUFBV0E7O0FBR2IsUUFBTSxPQUFpQixDQUFBO0FBRXZCLE1BQUksT0FBTyxRQUFRLFlBQVksUUFBUSxNQUFNO0FBQzNDLFdBQU87O0FBR1QsUUFBTSxzQkFBc0Isd0JBQXdCLFFBQVEsV0FBVztBQUN2RSxRQUFNLGlCQUFpQix3QkFBd0IsV0FBVyxRQUFRO0FBRWxFLE1BQUksQ0FBQyxVQUFVO0FBQ2IsZUFBVyxPQUFPLEtBQUssR0FBRzs7QUFHNUIsTUFBSSxRQUFRLE1BQU07QUFDaEIsYUFBUyxLQUFLLFFBQVEsSUFBSTs7QUFHNUIsUUFBTSxjQUFjLG9CQUFJLFFBQU87QUFDL0IsV0FBU0ksS0FBSSxHQUFHQSxLQUFJLFNBQVMsUUFBUSxFQUFFQSxJQUFHO0FBQ3hDLFVBQU0sTUFBTSxTQUFTQSxFQUFDO0FBRXRCLFFBQUksUUFBUSxhQUFhLElBQUksR0FBRyxNQUFNLE1BQU07QUFDMUM7O0FBRUYsa0JBQ0UsTUFDQTtNQUNFLElBQUksR0FBRztNQUNQOztNQUVBO01BQ0E7TUFDQSxRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUSxTQUFTLFFBQVEsVUFBVTtNQUNuQyxRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSO0lBQVcsQ0FDWjs7QUFJTCxRQUFNLFNBQVMsS0FBSyxLQUFLLFFBQVEsU0FBUztBQUMxQyxNQUFJVCxVQUFTLFFBQVEsbUJBQW1CLE9BQU8sTUFBTTtBQUVyRCxNQUFJLFFBQVEsaUJBQWlCO0FBQzNCLFFBQUksUUFBUSxZQUFZLGNBQWM7QUFFcEMsTUFBQUEsV0FBVTtXQUNMO0FBRUwsTUFBQUEsV0FBVTs7O0FBSWQsU0FBTyxPQUFPLFNBQVMsSUFBSUEsVUFBUyxTQUFTO0FBQy9DOzs7QUNuWU8sSUFBTSxVQUFVOzs7QUMwQmhCLElBQUksT0FBTztBQUNYLElBQUksT0FBa0M7QUFDdEMsSUFBSVUsU0FBb0M7QUFDeEMsSUFBSSxVQUF3QztBQUM1QyxJQUFJLFdBQTBDO0FBQzlDLElBQUlDLFdBQXdDO0FBQzVDLElBQUlDLFlBQTBDO0FBQzlDLElBQUlDLFFBQWtDO0FBQ3RDLElBQUksT0FBa0M7QUFDdEMsSUFBSSxpQkFBc0Q7QUFDMUQsSUFBSSw2QkFBOEU7QUFDbEYsSUFBSSxrQkFBd0Q7QUFDNUQsSUFBSSxlQUFrRDtBQUN0RCxJQUFJLGlCQUFzRDtBQUUzRCxTQUFVLFNBQVMsT0FBYyxVQUE2QixFQUFFLE1BQU0sTUFBSyxHQUFFO0FBQ2pGLE1BQUksTUFBTTtBQUNSLFVBQU0sSUFBSSxNQUNSLG1DQUFtQyxNQUFNLG9EQUFvRDs7QUFHakcsTUFBSSxNQUFNO0FBQ1IsVUFBTSxJQUFJLE1BQU0sZ0NBQWdDLE1BQU0sd0NBQXdDLFNBQVM7O0FBRXpHLFNBQU8sUUFBUTtBQUNmLFNBQU8sTUFBTTtBQUNiLEVBQUFILFNBQVEsTUFBTTtBQUNkLFlBQVUsTUFBTTtBQUNoQixhQUFXLE1BQU07QUFDakIsRUFBQUMsV0FBVSxNQUFNO0FBQ2hCLEVBQUFDLFlBQVcsTUFBTTtBQUNqQixFQUFBQyxRQUFPLE1BQU07QUFDYixTQUFPLE1BQU07QUFDYixtQkFBaUIsTUFBTTtBQUN2QiwrQkFBNkIsTUFBTTtBQUNuQyxvQkFBa0IsTUFBTTtBQUN4QixpQkFBZSxNQUFNO0FBQ3JCLG1CQUFpQixNQUFNO0FBQ3pCOzs7U0M3RG9COzs7QUNHcEIsSUFBQUMsZUFBd0I7QUFDeEI7QUFDQTs7O0FDUkE7QUFDTyxJQUFNLFNBQVMsQ0FBQyxVQUFVLGlCQUFpQkM7OztBRFNsRDs7O0FFVkEsa0JBQTBCO0FBQ25CLElBQU0sa0NBQThCLHVCQUFVLE1BQU07QUFBRSxHQUFHLGlHQUNkOzs7QUZGbEQsSUFBSUMsMEJBQWtFLFNBQVUsVUFBVSxPQUFPQyxPQUFNQyxJQUFHO0FBQ3RHLE1BQUlELFVBQVMsT0FBTyxDQUFDQztBQUFHLFVBQU0sSUFBSSxVQUFVLCtDQUErQztBQUMzRixNQUFJLE9BQU8sVUFBVSxhQUFhLGFBQWEsU0FBUyxDQUFDQSxLQUFJLENBQUMsTUFBTSxJQUFJLFFBQVE7QUFBRyxVQUFNLElBQUksVUFBVSwwRUFBMEU7QUFDakwsU0FBT0QsVUFBUyxNQUFNQyxLQUFJRCxVQUFTLE1BQU1DLEdBQUUsS0FBSyxRQUFRLElBQUlBLEtBQUlBLEdBQUUsUUFBUSxNQUFNLElBQUksUUFBUTtBQUNoRztBQUNBLElBQUk7QUFBSixJQUF5QjtBQUF6QixJQUE0QztBQU9yQyxJQUFNQyxZQUFOLE1BQWU7QUFBQSxFQUNsQixZQUFZLFNBQVM7QUFDakIsd0JBQW9CLElBQUksSUFBSTtBQUM1QixzQkFBa0IsSUFBSSxNQUFNLG9CQUFJLElBQUksQ0FBQztBQUNyQyxRQUFJLFNBQVM7QUFDVCxrQ0FBNEI7QUFDNUIsY0FBUSxRQUFRLENBQUMsRUFBRSxNQUFNLE9BQU8sU0FBUyxNQUFNLEtBQUssT0FBTyxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQUEsSUFDckY7QUFBQSxFQUNKO0FBQUEsRUFDQSxTQUFTLG9CQUFvQixvQkFBSSxRQUFRLEdBQUcsc0JBQXNCLG9CQUFJLFFBQVEsR0FBRyxPQUFPLFlBQVksRUFBRSxPQUFPO0FBQ3pHLFdBQU8sUUFBUSxTQUNSQyxZQUFXLE1BQU0sV0FBVyxLQUM1QixNQUFNLE9BQU8sV0FBVyxNQUFNLGNBQzlCQSxZQUFXLE1BQU0sTUFBTSxLQUN2QkEsWUFBVyxNQUFNLEdBQUcsS0FDcEJBLFlBQVcsTUFBTSxHQUFHLEtBQ3BCQSxZQUFXLE1BQU0sTUFBTSxLQUN2QkEsWUFBVyxNQUFNLEdBQUcsS0FDcEJBLFlBQVcsTUFBTSxNQUFNLEtBQ3ZCQSxZQUFXLE1BQU0sT0FBTyxLQUN4QkEsWUFBVyxNQUFNLE1BQU0sS0FDdkJBLFlBQVcsTUFBTSxJQUFJLEtBQ3JCQSxZQUFXLE1BQU0sT0FBTyxRQUFRLENBQUMsS0FDakNBLFlBQVcsTUFBTSxPQUFPLENBQUM7QUFBQSxFQUNwQztBQUFBLEVBQ0EsT0FBTyxNQUFNLE9BQU8sVUFBVTtBQUMxQixJQUFBSix3QkFBdUIsTUFBTSxxQkFBcUIsS0FBSyxrQkFBa0IsRUFBRSxLQUFLLE1BQU07QUFBQSxNQUNsRjtBQUFBLE1BQ0E7QUFBQSxNQUNBLFFBQVE7QUFBQSxNQUNSLFVBQVU7QUFBQSxNQUNWLFlBQVksVUFBVTtBQUFBLElBQzFCLENBQUM7QUFBQSxFQUNMO0FBQUEsRUFDQSxJQUFJLE1BQU0sT0FBTyxVQUFVO0FBQ3ZCLElBQUFBLHdCQUF1QixNQUFNLHFCQUFxQixLQUFLLGtCQUFrQixFQUFFLEtBQUssTUFBTTtBQUFBLE1BQ2xGO0FBQUEsTUFDQTtBQUFBLE1BQ0EsUUFBUTtBQUFBLE1BQ1IsVUFBVTtBQUFBLE1BQ1YsWUFBWSxVQUFVO0FBQUEsSUFDMUIsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUNBLElBQUksTUFBTTtBQUNOLFVBQU0sUUFBUUEsd0JBQXVCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ25GLFFBQUksQ0FBQyxPQUFPO0FBQ1IsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPLE1BQU0sQ0FBQztBQUFBLEVBQ2xCO0FBQUEsRUFDQSxPQUFPLE1BQU07QUFDVCxVQUFNLFFBQVFBLHdCQUF1QixNQUFNLG1CQUFtQixHQUFHLEVBQUUsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNuRixRQUFJLENBQUMsT0FBTztBQUNSLGFBQU8sQ0FBQztBQUFBLElBQ1o7QUFDQSxXQUFPLE1BQU0sTUFBTTtBQUFBLEVBQ3ZCO0FBQUEsRUFDQSxJQUFJLE1BQU07QUFDTixXQUFPQSx3QkFBdUIsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLElBQUksT0FBTyxJQUFJLENBQUM7QUFBQSxFQUNoRjtBQUFBLEVBQ0EsT0FBTyxNQUFNO0FBQ1QsSUFBQUEsd0JBQXVCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxPQUFPLE9BQU8sSUFBSSxDQUFDO0FBQUEsRUFDNUU7QUFBQSxFQUNBLENBQUMsT0FBTztBQUNKLGVBQVcsT0FBT0Esd0JBQXVCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxLQUFLLEdBQUc7QUFDM0UsWUFBTTtBQUFBLElBQ1Y7QUFBQSxFQUNKO0FBQUEsRUFDQSxDQUFDLFVBQVU7QUFDUCxlQUFXLFFBQVEsS0FBSyxLQUFLLEdBQUc7QUFDNUIsWUFBTSxTQUFTLEtBQUssT0FBTyxJQUFJO0FBQy9CLGlCQUFXLFNBQVMsUUFBUTtBQUN4QixjQUFNLENBQUMsTUFBTSxLQUFLO0FBQUEsTUFDdEI7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUFBLEVBQ0EsQ0FBQyxTQUFTO0FBQ04sZUFBVyxDQUFDLEVBQUUsS0FBSyxLQUFLLE1BQU07QUFDMUIsWUFBTTtBQUFBLElBQ1Y7QUFBQSxFQUNKO0FBQUEsRUFDQSxFQUFFLHFCQUFxQixTQUFTSyxvQkFBbUIsRUFBRSxNQUFNLFVBQUFDLFdBQVUsUUFBUSxVQUFVLFdBQVcsR0FBRztBQUNqRyxVQUFNLGFBQWEsU0FBUyxXQUFXO0FBQ3ZDLFFBQUksYUFBYSxHQUFHO0FBQ2hCLFlBQU0sSUFBSSxVQUFVLHNCQUFzQiw2REFDRixxQkFBcUI7QUFBQSxJQUNqRTtBQUNBLFdBQU8sT0FBTyxJQUFJO0FBQ2xCLFFBQUk7QUFDSixRQUFJLE9BQU9BLFNBQVEsR0FBRztBQUNsQixjQUFRLGFBQWEsU0FDZkEsWUFDQSxJQUFJQyxNQUFLLENBQUNELFNBQVEsR0FBRyxVQUFVO0FBQUEsUUFDN0IsTUFBTUEsVUFBUztBQUFBLFFBQ2YsY0FBY0EsVUFBUztBQUFBLE1BQzNCLENBQUM7QUFBQSxJQUNULFdBQ1MsT0FBT0EsU0FBUSxHQUFHO0FBQ3ZCLGNBQVEsSUFBSUMsTUFBSyxDQUFDRCxTQUFRLEdBQUcsYUFBYSxTQUFZLFNBQVMsVUFBVTtBQUFBLFFBQ3JFLE1BQU1BLFVBQVM7QUFBQSxNQUNuQixDQUFDO0FBQUEsSUFDTCxXQUNTLFVBQVU7QUFDZixZQUFNLElBQUksVUFBVSxzQkFBc0IsK0RBQ0E7QUFBQSxJQUM5QyxPQUNLO0FBQ0QsY0FBUSxPQUFPQSxTQUFRO0FBQUEsSUFDM0I7QUFDQSxVQUFNLFNBQVNOLHdCQUF1QixNQUFNLG1CQUFtQixHQUFHLEVBQUUsSUFBSSxJQUFJO0FBQzVFLFFBQUksQ0FBQyxRQUFRO0FBQ1QsYUFBTyxLQUFLQSx3QkFBdUIsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztBQUFBLElBQ3RGO0FBQ0EsUUFBSSxDQUFDLFFBQVE7QUFDVCxhQUFPLEtBQUtBLHdCQUF1QixNQUFNLG1CQUFtQixHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQUEsSUFDdEY7QUFDQSxXQUFPLEtBQUssS0FBSztBQUFBLEVBQ3JCLEdBQUcsT0FBTyxTQUFTLElBQUk7QUFDbkIsV0FBTyxLQUFLLFFBQVE7QUFBQSxFQUN4QjtBQUFBLEVBQ0EsUUFBUSxVQUFVLFNBQVM7QUFDdkIsZUFBVyxDQUFDLE1BQU0sS0FBSyxLQUFLLE1BQU07QUFDOUIsZUFBUyxLQUFLLFNBQVMsT0FBTyxNQUFNLElBQUk7QUFBQSxJQUM1QztBQUFBLEVBQ0o7QUFBQSxFQUNBLEtBQUssT0FBTyxXQUFXLElBQUk7QUFDdkIsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUNBLENBQUMscUJBQVEsTUFBTSxJQUFJO0FBQ2YsV0FBTyxLQUFLLE9BQU8sV0FBVztBQUFBLEVBQ2xDO0FBQ0o7OztBRzlJQTtBQUNBOzs7NEJKSTJCOzhCQUNnQztzQkFDaEI7OztBS1IzQyxJQUFNLFdBQVc7QUFDakIsU0FBUyxpQkFBaUI7QUFDdEIsTUFBSSxPQUFPO0FBQ1gsTUFBSSxNQUFNO0FBQ1YsU0FBTyxRQUFRO0FBQ1gsV0FBTyxTQUFVLEtBQUssT0FBTyxJQUFJLFNBQVMsVUFBVyxDQUFDO0FBQUEsRUFDMUQ7QUFDQSxTQUFPO0FBQ1g7QUFDQSxJQUFPLHlCQUFROzs7QUNUZixJQUFNLFVBQVUsQ0FBQyxVQUFXLE9BQU8sVUFBVSxTQUFTLEtBQUssS0FBSyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsWUFBWTtBQUMzRixTQUFTLGNBQWMsT0FBTztBQUMxQixNQUFJLFFBQVEsS0FBSyxNQUFNLFVBQVU7QUFDN0IsV0FBTztBQUFBLEVBQ1g7QUFDQSxRQUFNLEtBQUssT0FBTyxlQUFlLEtBQUs7QUFDdEMsTUFBSSxPQUFPLFFBQVEsT0FBTyxRQUFXO0FBQ2pDLFdBQU87QUFBQSxFQUNYO0FBQ0EsUUFBTSxPQUFPLEdBQUcsZUFBZSxHQUFHLFlBQVksU0FBUztBQUN2RCxTQUFPLFNBQVMsT0FBTyxTQUFTO0FBQ3BDO0FBQ0EsSUFBTyx3QkFBUTs7O0FDWmYsSUFBTSxpQkFBaUIsQ0FBQyxVQUFVLE9BQU8sS0FBSyxFQUN6QyxRQUFRLFVBQVUsQ0FBQ1EsUUFBT0MsSUFBR0MsU0FBUTtBQUN0QyxNQUFLRixXQUFVLFFBQVFFLEtBQUlELEtBQUksQ0FBQyxNQUFNLFFBQzlCRCxXQUFVLFFBQVFFLEtBQUlELEtBQUksQ0FBQyxNQUFNLE1BQU87QUFDNUMsV0FBTztBQUFBLEVBQ1g7QUFDQSxTQUFPRDtBQUNYLENBQUM7QUFDRCxJQUFPLHlCQUFROzs7QUNSZixJQUFNLGFBQWEsQ0FBQyxTQUFTLE9BQU8sSUFBSSxFQUNuQyxRQUFRLE9BQU8sS0FBSyxFQUNwQixRQUFRLE9BQU8sS0FBSyxFQUNwQixRQUFRLE1BQU0sS0FBSztBQUN4QixJQUFPLHFCQUFROzs7QUNKZixJQUFNRyxjQUFhLENBQUMsVUFBVyxPQUFPLFVBQVU7QUFDaEQsSUFBTyxxQkFBUUE7OztBQ0FSLElBQU0sYUFBYSxDQUFDLFVBQVUsUUFBUSxTQUN0QyxPQUFPLFVBQVUsWUFDakIsbUJBQVcsTUFBTSxXQUFXLEtBQzVCLE1BQU0sT0FBTyxXQUFXLE1BQU0sVUFDOUIsbUJBQVcsTUFBTSxNQUFNLEtBQ3ZCLE1BQU0sUUFBUSxRQUNkLE1BQU0sUUFBUSxRQUNkLE1BQU0sZ0JBQWdCLElBQUk7OztBQ1AxQixJQUFNLGFBQWEsQ0FBQyxVQUFVLFFBQVEsU0FDdEMsbUJBQVcsTUFBTSxXQUFXLEtBQzVCLE1BQU0sT0FBTyxXQUFXLE1BQU0sY0FDOUIsbUJBQVcsTUFBTSxNQUFNLEtBQ3ZCLG1CQUFXLE1BQU0sTUFBTSxLQUN2QixtQkFBVyxNQUFNLE9BQU8sS0FDeEIsbUJBQVcsTUFBTSxPQUFPLFFBQVEsQ0FBQyxDQUFDOzs7QUNQekMsSUFBSUMsMEJBQWtFLFNBQVUsVUFBVSxPQUFPLE9BQU9DLE9BQU1DLElBQUc7QUFDN0csTUFBSUQsVUFBUztBQUFLLFVBQU0sSUFBSSxVQUFVLGdDQUFnQztBQUN0RSxNQUFJQSxVQUFTLE9BQU8sQ0FBQ0M7QUFBRyxVQUFNLElBQUksVUFBVSwrQ0FBK0M7QUFDM0YsTUFBSSxPQUFPLFVBQVUsYUFBYSxhQUFhLFNBQVMsQ0FBQ0EsS0FBSSxDQUFDLE1BQU0sSUFBSSxRQUFRO0FBQUcsVUFBTSxJQUFJLFVBQVUseUVBQXlFO0FBQ2hMLFNBQVFELFVBQVMsTUFBTUMsR0FBRSxLQUFLLFVBQVUsS0FBSyxJQUFJQSxLQUFJQSxHQUFFLFFBQVEsUUFBUSxNQUFNLElBQUksVUFBVSxLQUFLLEdBQUk7QUFDeEc7QUFDQSxJQUFJQywwQkFBa0UsU0FBVSxVQUFVLE9BQU9GLE9BQU1DLElBQUc7QUFDdEcsTUFBSUQsVUFBUyxPQUFPLENBQUNDO0FBQUcsVUFBTSxJQUFJLFVBQVUsK0NBQStDO0FBQzNGLE1BQUksT0FBTyxVQUFVLGFBQWEsYUFBYSxTQUFTLENBQUNBLEtBQUksQ0FBQyxNQUFNLElBQUksUUFBUTtBQUFHLFVBQU0sSUFBSSxVQUFVLDBFQUEwRTtBQUNqTCxTQUFPRCxVQUFTLE1BQU1DLEtBQUlELFVBQVMsTUFBTUMsR0FBRSxLQUFLLFFBQVEsSUFBSUEsS0FBSUEsR0FBRSxRQUFRLE1BQU0sSUFBSSxRQUFRO0FBQ2hHO0FBQ0EsSUFBSTtBQUFKLElBQWdDO0FBQWhDLElBQXVEO0FBQXZELElBQW9GO0FBQXBGLElBQXdIO0FBQXhILElBQWlKO0FBQWpKLElBQTJLO0FBQTNLLElBQW9NO0FBQXBNLElBQTJOO0FBQTNOLElBQXFQO0FBT3JQLElBQU0saUJBQWlCO0FBQUEsRUFDbkIseUJBQXlCO0FBQzdCO0FBQ08sSUFBTSxrQkFBTixNQUFzQjtBQUFBLEVBQ3pCLFlBQVksTUFBTSxtQkFBbUIsU0FBUztBQUMxQywrQkFBMkIsSUFBSSxJQUFJO0FBQ25DLDBCQUFzQixJQUFJLE1BQU0sTUFBTTtBQUN0QyxnQ0FBNEIsSUFBSSxNQUFNLE1BQU07QUFDNUMsdUNBQW1DLElBQUksTUFBTSxNQUFNO0FBQ25ELDRCQUF3QixJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQztBQUMvQyw2QkFBeUIsSUFBSSxNQUFNLElBQUksWUFBWSxDQUFDO0FBQ3BELDRCQUF3QixJQUFJLE1BQU0sTUFBTTtBQUN4QywwQkFBc0IsSUFBSSxNQUFNLE1BQU07QUFDdEMsNkJBQXlCLElBQUksTUFBTSxNQUFNO0FBQ3pDLFFBQUksQ0FBQyxXQUFXLElBQUksR0FBRztBQUNuQixZQUFNLElBQUksVUFBVSxvREFBb0Q7QUFBQSxJQUM1RTtBQUNBLFFBQUk7QUFDSixRQUFJLHNCQUFjLGlCQUFpQixHQUFHO0FBQ2xDLGdCQUFVO0FBQUEsSUFDZCxPQUNLO0FBQ0QsaUJBQVc7QUFBQSxJQUNmO0FBQ0EsUUFBSSxDQUFDLFVBQVU7QUFDWCxpQkFBVyx1QkFBZTtBQUFBLElBQzlCO0FBQ0EsUUFBSSxPQUFPLGFBQWEsVUFBVTtBQUM5QixZQUFNLElBQUksVUFBVSw0Q0FBNEM7QUFBQSxJQUNwRTtBQUNBLFFBQUksV0FBVyxDQUFDLHNCQUFjLE9BQU8sR0FBRztBQUNwQyxZQUFNLElBQUksVUFBVSw0Q0FBNEM7QUFBQSxJQUNwRTtBQUNBLElBQUFGLHdCQUF1QixNQUFNLHVCQUF1QixNQUFNLEdBQUc7QUFDN0QsSUFBQUEsd0JBQXVCLE1BQU0sMEJBQTBCLEVBQUUsR0FBRyxnQkFBZ0IsR0FBRyxRQUFRLEdBQUcsR0FBRztBQUM3RixJQUFBQSx3QkFBdUIsTUFBTSw2QkFBNkJHLHdCQUF1QixNQUFNLDBCQUEwQixHQUFHLEVBQUUsT0FBT0Esd0JBQXVCLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLEdBQUc7QUFDM0wsSUFBQUgsd0JBQXVCLE1BQU0sb0NBQW9DRyx3QkFBdUIsTUFBTSw2QkFBNkIsR0FBRyxFQUFFLFlBQVksR0FBRztBQUMvSSxTQUFLLFdBQVcsc0JBQXNCO0FBQ3RDLFNBQUssY0FBYyxpQ0FBaUMsS0FBSztBQUN6RCxJQUFBSCx3QkFBdUIsTUFBTSx5QkFBeUJHLHdCQUF1QixNQUFNLDBCQUEwQixHQUFHLEVBQUUsT0FBTyxHQUFHQSx3QkFBdUIsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLEtBQUssV0FBV0Esd0JBQXVCLE1BQU0seUJBQXlCLEdBQUcsSUFBSUEsd0JBQXVCLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUc7QUFDaFYsU0FBSyxnQkFBZ0IsT0FBTyxLQUFLLGlCQUFpQixDQUFDO0FBQ25ELFNBQUssVUFBVSxPQUFPLE9BQU87QUFBQSxNQUN6QixnQkFBZ0IsS0FBSztBQUFBLE1BQ3JCLGtCQUFrQixLQUFLO0FBQUEsSUFDM0IsQ0FBQztBQUNELFdBQU8saUJBQWlCLE1BQU07QUFBQSxNQUMxQixVQUFVLEVBQUUsVUFBVSxPQUFPLGNBQWMsTUFBTTtBQUFBLE1BQ2pELGFBQWEsRUFBRSxVQUFVLE9BQU8sY0FBYyxNQUFNO0FBQUEsTUFDcEQsZUFBZSxFQUFFLFVBQVUsT0FBTyxjQUFjLE1BQU07QUFBQSxNQUN0RCxTQUFTLEVBQUUsVUFBVSxPQUFPLGNBQWMsTUFBTTtBQUFBLElBQ3BELENBQUM7QUFBQSxFQUNMO0FBQUEsRUFDQSxtQkFBbUI7QUFDZixRQUFJQyxVQUFTO0FBQ2IsZUFBVyxDQUFDLE1BQU0sR0FBRyxLQUFLRCx3QkFBdUIsTUFBTSx1QkFBdUIsR0FBRyxHQUFHO0FBQ2hGLFlBQU0sUUFBUSxXQUFXLEdBQUcsSUFBSSxNQUFNQSx3QkFBdUIsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLE9BQU8sdUJBQVUsR0FBRyxDQUFDO0FBQ3ZILE1BQUFDLFdBQVVELHdCQUF1QixNQUFNLDRCQUE0QixLQUFLLCtCQUErQixFQUFFLEtBQUssTUFBTSxNQUFNLEtBQUssRUFBRTtBQUNqSSxNQUFBQyxXQUFVLFdBQVcsS0FBSyxJQUFJLE1BQU0sT0FBTyxNQUFNO0FBQ2pELE1BQUFBLFdBQVVELHdCQUF1QixNQUFNLG9DQUFvQyxHQUFHO0FBQUEsSUFDbEY7QUFDQSxXQUFPQyxVQUFTRCx3QkFBdUIsTUFBTSx5QkFBeUIsR0FBRyxFQUFFO0FBQUEsRUFDL0U7QUFBQSxFQUNBLENBQUMsU0FBUztBQUNOLGVBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBS0Esd0JBQXVCLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxRQUFRLEdBQUc7QUFDMUYsWUFBTSxRQUFRLFdBQVcsR0FBRyxJQUFJLE1BQU1BLHdCQUF1QixNQUFNLDBCQUEwQixHQUFHLEVBQUUsT0FBTyx1QkFBVSxHQUFHLENBQUM7QUFDdkgsWUFBTUEsd0JBQXVCLE1BQU0sNEJBQTRCLEtBQUssK0JBQStCLEVBQUUsS0FBSyxNQUFNLE1BQU0sS0FBSztBQUMzSCxZQUFNO0FBQ04sWUFBTUEsd0JBQXVCLE1BQU0sNkJBQTZCLEdBQUc7QUFBQSxJQUN2RTtBQUNBLFVBQU1BLHdCQUF1QixNQUFNLHlCQUF5QixHQUFHO0FBQUEsRUFDbkU7QUFBQSxFQUNBLE9BQU8sU0FBUztBQUNaLGVBQVcsUUFBUSxLQUFLLE9BQU8sR0FBRztBQUM5QixVQUFJLFdBQVcsSUFBSSxHQUFHO0FBQ2xCLGVBQU8sS0FBSyxPQUFPO0FBQUEsTUFDdkIsT0FDSztBQUNELGNBQU07QUFBQSxNQUNWO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQSxFQUNBLEVBQUUsd0JBQXdCLG9CQUFJLFFBQVEsR0FBRyw4QkFBOEIsb0JBQUksUUFBUSxHQUFHLHFDQUFxQyxvQkFBSSxRQUFRLEdBQUcsMEJBQTBCLG9CQUFJLFFBQVEsR0FBRywyQkFBMkIsb0JBQUksUUFBUSxHQUFHLDBCQUEwQixvQkFBSSxRQUFRLEdBQUcsd0JBQXdCLG9CQUFJLFFBQVEsR0FBRywyQkFBMkIsb0JBQUksUUFBUSxHQUFHLDZCQUE2QixvQkFBSSxRQUFRLEdBQUcsa0NBQWtDLFNBQVNFLGlDQUFnQyxNQUFNLE9BQU87QUFDdmQsUUFBSSxTQUFTO0FBQ2IsY0FBVSxHQUFHRix3QkFBdUIsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLEtBQUssV0FBV0Esd0JBQXVCLE1BQU0sdUJBQXVCLEdBQUc7QUFDakosY0FBVSx5Q0FBeUMsbUJBQU8sSUFBSTtBQUM5RCxRQUFJLFdBQVcsS0FBSyxHQUFHO0FBQ25CLGdCQUFVLGVBQWUsbUJBQU8sTUFBTSxJQUFJLEtBQUtBLHdCQUF1QixNQUFNLHVCQUF1QixHQUFHO0FBQ3RHLGdCQUFVLGlCQUFpQixNQUFNLFFBQVE7QUFBQSxJQUM3QztBQUNBLFFBQUlBLHdCQUF1QixNQUFNLDBCQUEwQixHQUFHLEVBQUUsNEJBQTRCLE1BQU07QUFDOUYsZ0JBQVUsR0FBR0Esd0JBQXVCLE1BQU0sdUJBQXVCLEdBQUcsb0JBQW9CLFdBQVcsS0FBSyxJQUFJLE1BQU0sT0FBTyxNQUFNO0FBQUEsSUFDbkk7QUFDQSxXQUFPQSx3QkFBdUIsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLE9BQU8sR0FBRyxTQUFTQSx3QkFBdUIsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQUEsRUFDOUosR0FBRyxPQUFPLFNBQVMsSUFBSTtBQUNuQixXQUFPLEtBQUssT0FBTztBQUFBLEVBQ3ZCO0FBQUEsRUFDQSxDQUFDLE9BQU8sYUFBYSxJQUFJO0FBQ3JCLFdBQU8sS0FBSyxPQUFPO0FBQUEsRUFDdkI7QUFDSjs7O3lCWjFHeUI7OztBYVJuQixJQUFPLGdCQUFQLE1BQW9CO0VBQ3hCLFlBQW1CLE1BQVM7QUFBVCxTQUFBLE9BQUE7RUFBWTtFQUMvQixLQUFLLE9BQU8sV0FBVyxJQUFDO0FBQ3RCLFdBQU87RUFDVDs7OztpQmJRNkI7QUFJL0IsSUFBSSxxQkFBcUI7QUFTekIsZUFBZUcsY0FBYSxTQUFpQixNQUFXO0FBRXRELFFBQU0sRUFBRSxjQUFjLGNBQWEsSUFBSyxNQUFNO0FBRTlDLE1BQUksQ0FBQyxvQkFBb0I7QUFDdkIsWUFBUSxLQUFLLHVEQUF1RCxLQUFLLFVBQVUsSUFBSSxZQUFZO0FBQ25HLHlCQUFxQjs7QUFHdkIsU0FBTyxNQUFNLGNBQWMsTUFBTSxHQUFHLElBQUk7QUFDMUM7QUFFQSxJQUFNLG1CQUEwQixJQUFJLHNCQUFBQyxRQUFlLEVBQUUsV0FBVyxNQUFNLFNBQVMsSUFBSSxLQUFLLElBQUksQ0FBRTtBQUM5RixJQUFNLG9CQUEyQixJQUFJLHNCQUFBQSxRQUFlLFdBQVcsRUFBRSxXQUFXLE1BQU0sU0FBUyxJQUFJLEtBQUssSUFBSSxDQUFFO0FBRTFHLGVBQWVDLDRCQUNiLE1BQ0FDLE9BQXVCO0FBRXZCLFFBQU0sVUFBVSxJQUFJLGdCQUFnQixJQUFJO0FBQ3hDLFFBQU0sV0FBVyw0QkFBUyxLQUFLLE9BQU87QUFDdEMsUUFBTSxPQUFPLElBQUksY0FBYyxRQUFRO0FBQ3ZDLFFBQU0sVUFBVTtJQUNkLEdBQUdBLE1BQUs7SUFDUixHQUFHLFFBQVE7SUFDWCxrQkFBa0IsUUFBUTs7QUFHNUIsU0FBTyxFQUFFLEdBQUdBLE9BQU0sTUFBbUIsUUFBTztBQUM5QztBQUVNLFNBQVUsYUFBVTtBQUV4QixNQUFJLE9BQU8sb0JBQW9CLGFBQWE7QUFFMUMsZUFBVyxrQkFBa0Isd0JBQUFDOztBQUUvQixTQUFPO0lBQ0wsTUFBTTtJQUNOLE9BQVU7SUFDVixTQUFZO0lBQ1osVUFBYTtJQUNiLFNBQVk7SUFDWixVQUFhQztJQUNiLE1BQVNDO0lBQ1QsTUFBU0M7SUFDVDtJQUNBLDRCQUFBTDtJQUNBLGlCQUFpQixDQUFDLFFBQXdCLElBQUksV0FBVyxPQUFPLElBQUksb0JBQW9CO0lBQ3hGLGNBQUFGO0lBQ0EsZ0JBQWdCLENBQUMsVUFBc0MsaUJBQWlCLGdCQUFBUTs7QUFFNUU7OztBYzNFQSxJQUFJLENBQU87QUFBTSxFQUFNLFNBQWMsV0FBVyxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUM7OztBQ0QzRCxJQUFPLGNBQVAsY0FBMkIsTUFBSzs7QUFFaEMsSUFBTyxXQUFQLGNBSUksWUFBVztFQWNuQixZQUFZLFFBQWlCLE9BQWUsU0FBNkIsU0FBaUI7QUFDeEYsVUFBTSxHQUFHLFNBQVMsWUFBWSxRQUFRLE9BQU8sT0FBTyxHQUFHO0FBQ3ZELFNBQUssU0FBUztBQUNkLFNBQUssVUFBVTtBQUNmLFNBQUssYUFBYSxtQ0FBVTtBQUM1QixTQUFLLFFBQVE7QUFFYixVQUFNLE9BQU87QUFDYixTQUFLLE9BQU8sNkJBQU87QUFDbkIsU0FBSyxRQUFRLDZCQUFPO0FBQ3BCLFNBQUssT0FBTyw2QkFBTztFQUNyQjtFQUVRLE9BQU8sWUFBWSxRQUE0QixPQUFZLFNBQTJCO0FBQzVGLFVBQU0sT0FDSiwrQkFBTyxXQUNMLE9BQU8sTUFBTSxZQUFZLFdBQ3ZCLE1BQU0sVUFDTixLQUFLLFVBQVUsTUFBTSxPQUFPLElBQzlCLFFBQVEsS0FBSyxVQUFVLEtBQUssSUFDNUI7QUFFSixRQUFJLFVBQVUsS0FBSztBQUNqQixhQUFPLEdBQUcsVUFBVTs7QUFFdEIsUUFBSSxRQUFRO0FBQ1YsYUFBTyxHQUFHOztBQUVaLFFBQUksS0FBSztBQUNQLGFBQU87O0FBRVQsV0FBTztFQUNUO0VBRUEsT0FBTyxTQUNMLFFBQ0EsZUFDQSxTQUNBLFNBQTRCO0FBRTVCLFFBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztBQUN2QixhQUFPLElBQUksbUJBQW1CLEVBQUUsU0FBUyxPQUFPLFlBQVksYUFBYSxFQUFDLENBQUU7O0FBRzlFLFVBQU0sUUFBUywrQ0FBd0M7QUFFdkQsUUFBSSxXQUFXLEtBQUs7QUFDbEIsYUFBTyxJQUFJLGdCQUFnQixRQUFRLE9BQU8sU0FBUyxPQUFPOztBQUc1RCxRQUFJLFdBQVcsS0FBSztBQUNsQixhQUFPLElBQUksb0JBQW9CLFFBQVEsT0FBTyxTQUFTLE9BQU87O0FBR2hFLFFBQUksV0FBVyxLQUFLO0FBQ2xCLGFBQU8sSUFBSSxzQkFBc0IsUUFBUSxPQUFPLFNBQVMsT0FBTzs7QUFHbEUsUUFBSSxXQUFXLEtBQUs7QUFDbEIsYUFBTyxJQUFJLGNBQWMsUUFBUSxPQUFPLFNBQVMsT0FBTzs7QUFHMUQsUUFBSSxXQUFXLEtBQUs7QUFDbEIsYUFBTyxJQUFJLGNBQWMsUUFBUSxPQUFPLFNBQVMsT0FBTzs7QUFHMUQsUUFBSSxXQUFXLEtBQUs7QUFDbEIsYUFBTyxJQUFJLHlCQUF5QixRQUFRLE9BQU8sU0FBUyxPQUFPOztBQUdyRSxRQUFJLFdBQVcsS0FBSztBQUNsQixhQUFPLElBQUksZUFBZSxRQUFRLE9BQU8sU0FBUyxPQUFPOztBQUczRCxRQUFJLFVBQVUsS0FBSztBQUNqQixhQUFPLElBQUksb0JBQW9CLFFBQVEsT0FBTyxTQUFTLE9BQU87O0FBR2hFLFdBQU8sSUFBSSxTQUFTLFFBQVEsT0FBTyxTQUFTLE9BQU87RUFDckQ7O0FBR0ksSUFBTyxvQkFBUCxjQUFpQyxTQUF5QztFQUM5RSxZQUFZLEVBQUUsUUFBTyxJQUEyQixDQUFBLEdBQUU7QUFDaEQsVUFBTSxRQUFXLFFBQVcsV0FBVyx3QkFBd0IsTUFBUztFQUMxRTs7QUFHSSxJQUFPLHFCQUFQLGNBQWtDLFNBQXlDO0VBQy9FLFlBQVksRUFBRSxTQUFTLE1BQUssR0FBK0Q7QUFDekYsVUFBTSxRQUFXLFFBQVcsV0FBVyxxQkFBcUIsTUFBUztBQUdyRSxRQUFJO0FBQU8sV0FBSyxRQUFRO0VBQzFCOztBQUdJLElBQU8sNEJBQVAsY0FBeUMsbUJBQWtCO0VBQy9ELFlBQVksRUFBRSxRQUFPLElBQTJCLENBQUEsR0FBRTtBQUNoRCxVQUFNLEVBQUUsU0FBUyw0QkFBVyxxQkFBb0IsQ0FBRTtFQUNwRDs7QUFHSSxJQUFPLGtCQUFQLGNBQStCLFNBQXNCOztBQUVyRCxJQUFPLHNCQUFQLGNBQW1DLFNBQXNCOztBQUV6RCxJQUFPLHdCQUFQLGNBQXFDLFNBQXNCOztBQUUzRCxJQUFPLGdCQUFQLGNBQTZCLFNBQXNCOztBQUVuRCxJQUFPLGdCQUFQLGNBQTZCLFNBQXNCOztBQUVuRCxJQUFPLDJCQUFQLGNBQXdDLFNBQXNCOztBQUU5RCxJQUFPLGlCQUFQLGNBQThCLFNBQXNCOztBQUVwRCxJQUFPLHNCQUFQLGNBQW1DLFNBQXlCOztBQUU1RCxJQUFPLDBCQUFQLGNBQXVDLFlBQVc7RUFDdEQsY0FBQTtBQUNFLFVBQU0sa0VBQWtFO0VBQzFFOztBQUdJLElBQU8saUNBQVAsY0FBOEMsWUFBVztFQUM3RCxjQUFBO0FBQ0UsVUFBTSxvRkFBb0Y7RUFDNUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlJSSxJQUFPLGNBQVAsTUFBa0I7RUFTdEIsY0FBQTtBQUhBLHFDQUFBLElBQUEsTUFBQSxNQUFBO0FBSUUsU0FBSyxTQUFTLElBQUksV0FBVTtBQUM1QixJQUFBQyx3QkFBQSxNQUFJLGtDQUF3QixNQUFJLEdBQUE7RUFDbEM7RUFFQSxPQUFPLE9BQVk7QUFDakIsUUFBSSxTQUFTLE1BQU07QUFDakIsYUFBTyxDQUFBOztBQUdULFVBQU0sY0FDSixpQkFBaUIsY0FBYyxJQUFJLFdBQVcsS0FBSyxJQUNqRCxPQUFPLFVBQVUsV0FBVyxJQUFJLFlBQVcsRUFBRyxPQUFPLEtBQUssSUFDMUQ7QUFFSixRQUFJLFVBQVUsSUFBSSxXQUFXLEtBQUssT0FBTyxTQUFTLFlBQVksTUFBTTtBQUNwRSxZQUFRLElBQUksS0FBSyxNQUFNO0FBQ3ZCLFlBQVEsSUFBSSxhQUFhLEtBQUssT0FBTyxNQUFNO0FBQzNDLFNBQUssU0FBUztBQUVkLFVBQU0sUUFBa0IsQ0FBQTtBQUN4QixRQUFJO0FBQ0osWUFBUSxlQUFlLGlCQUFpQixLQUFLLFFBQVFDLHdCQUFBLE1BQUksa0NBQUEsR0FBQSxDQUFxQixNQUFNLE1BQU07QUFDeEYsVUFBSSxhQUFhLFlBQVlBLHdCQUFBLE1BQUksa0NBQUEsR0FBQSxLQUF5QixNQUFNO0FBRTlELFFBQUFELHdCQUFBLE1BQUksa0NBQXdCLGFBQWEsT0FBSyxHQUFBO0FBQzlDOztBQUlGLFVBQ0VDLHdCQUFBLE1BQUksa0NBQUEsR0FBQSxLQUF5QixTQUM1QixhQUFhLFVBQVVBLHdCQUFBLE1BQUksa0NBQUEsR0FBQSxJQUF3QixLQUFLLGFBQWEsV0FDdEU7QUFDQSxjQUFNLEtBQUssS0FBSyxXQUFXLEtBQUssT0FBTyxNQUFNLEdBQUdBLHdCQUFBLE1BQUksa0NBQUEsR0FBQSxJQUF3QixDQUFDLENBQUMsQ0FBQztBQUMvRSxhQUFLLFNBQVMsS0FBSyxPQUFPLE1BQU1BLHdCQUFBLE1BQUksa0NBQUEsR0FBQSxDQUFxQjtBQUN6RCxRQUFBRCx3QkFBQSxNQUFJLGtDQUF3QixNQUFJLEdBQUE7QUFDaEM7O0FBR0YsWUFBTSxXQUNKQyx3QkFBQSxNQUFJLGtDQUFBLEdBQUEsTUFBMEIsT0FBTyxhQUFhLFlBQVksSUFBSSxhQUFhO0FBRWpGLFlBQU0sT0FBTyxLQUFLLFdBQVcsS0FBSyxPQUFPLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDM0QsWUFBTSxLQUFLLElBQUk7QUFFZixXQUFLLFNBQVMsS0FBSyxPQUFPLE1BQU0sYUFBYSxLQUFLO0FBQ2xELE1BQUFELHdCQUFBLE1BQUksa0NBQXdCLE1BQUksR0FBQTs7QUFHbEMsV0FBTztFQUNUO0VBRUEsV0FBVyxPQUFZOztBQUNyQixRQUFJLFNBQVM7QUFBTSxhQUFPO0FBQzFCLFFBQUksT0FBTyxVQUFVO0FBQVUsYUFBTztBQUd0QyxRQUFJLE9BQU8sV0FBVyxhQUFhO0FBQ2pDLFVBQUksaUJBQWlCLFFBQVE7QUFDM0IsZUFBTyxNQUFNLFNBQVE7O0FBRXZCLFVBQUksaUJBQWlCLFlBQVk7QUFDL0IsZUFBTyxPQUFPLEtBQUssS0FBSyxFQUFFLFNBQVE7O0FBR3BDLFlBQU0sSUFBSSxZQUNSLHdDQUF3QyxNQUFNLFlBQVksdUlBQXVJOztBQUtyTSxRQUFJLE9BQU8sZ0JBQWdCLGFBQWE7QUFDdEMsVUFBSSxpQkFBaUIsY0FBYyxpQkFBaUIsYUFBYTtBQUMvRCxTQUFBRSxNQUFBLEtBQUssZ0JBQUwsT0FBQUEsTUFBQSxLQUFLLGNBQWdCLElBQUksWUFBWSxNQUFNO0FBQzNDLGVBQU8sS0FBSyxZQUFZLE9BQU8sS0FBSzs7QUFHdEMsWUFBTSxJQUFJLFlBQ1Isb0RBQ0csTUFBYyxZQUFZLG9EQUNtQjs7QUFJcEQsVUFBTSxJQUFJLFlBQ1IsZ0dBQWdHO0VBRXBHO0VBRUEsUUFBSztBQUNILFFBQUksQ0FBQyxLQUFLLE9BQU8sUUFBUTtBQUN2QixhQUFPLENBQUE7O0FBRVQsV0FBTyxLQUFLLE9BQU8sSUFBSTtFQUN6Qjs7O0FBdEdPLFlBQUEsZ0JBQWdCLG9CQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztBQUNwQyxZQUFBLGlCQUFpQjtBQWlIMUIsU0FBUyxpQkFDUCxRQUNBLFlBQXlCO0FBRXpCLFFBQU0sVUFBVTtBQUNoQixRQUFNLFdBQVc7QUFFakIsV0FBU0MsS0FBSSxrQ0FBYyxHQUFHQSxLQUFJLE9BQU8sUUFBUUEsTUFBSztBQUNwRCxRQUFJLE9BQU9BLEVBQUMsTUFBTSxTQUFTO0FBQ3pCLGFBQU8sRUFBRSxXQUFXQSxJQUFHLE9BQU9BLEtBQUksR0FBRyxVQUFVLE1BQUs7O0FBR3RELFFBQUksT0FBT0EsRUFBQyxNQUFNLFVBQVU7QUFDMUIsYUFBTyxFQUFFLFdBQVdBLElBQUcsT0FBT0EsS0FBSSxHQUFHLFVBQVUsS0FBSTs7O0FBSXZELFNBQU87QUFDVDtBQUVNLFNBQVUsdUJBQXVCLFFBQWtCO0FBSXZELFFBQU0sVUFBVTtBQUNoQixRQUFNLFdBQVc7QUFFakIsV0FBU0EsS0FBSSxHQUFHQSxLQUFJLE9BQU8sU0FBUyxHQUFHQSxNQUFLO0FBQzFDLFFBQUksT0FBT0EsRUFBQyxNQUFNLFdBQVcsT0FBT0EsS0FBSSxDQUFDLE1BQU0sU0FBUztBQUV0RCxhQUFPQSxLQUFJOztBQUViLFFBQUksT0FBT0EsRUFBQyxNQUFNLFlBQVksT0FBT0EsS0FBSSxDQUFDLE1BQU0sVUFBVTtBQUV4RCxhQUFPQSxLQUFJOztBQUViLFFBQ0UsT0FBT0EsRUFBQyxNQUFNLFlBQ2QsT0FBT0EsS0FBSSxDQUFDLE1BQU0sV0FDbEJBLEtBQUksSUFBSSxPQUFPLFVBQ2YsT0FBT0EsS0FBSSxDQUFDLE1BQU0sWUFDbEIsT0FBT0EsS0FBSSxDQUFDLE1BQU0sU0FDbEI7QUFFQSxhQUFPQSxLQUFJOzs7QUFJZixTQUFPO0FBQ1Q7OztBQ3pLTSxTQUFVLDhCQUFpQyxRQUFXO0FBQzFELE1BQUksT0FBTyxPQUFPLGFBQWE7QUFBRyxXQUFPO0FBRXpDLFFBQU0sU0FBUyxPQUFPLFVBQVM7QUFDL0IsU0FBTztJQUNMLE1BQU0sT0FBSTtBQUNSLFVBQUk7QUFDRixjQUFNLFNBQVMsTUFBTSxPQUFPLEtBQUk7QUFDaEMsWUFBSSxpQ0FBUTtBQUFNLGlCQUFPLFlBQVc7QUFDcEMsZUFBTztlQUNBQyxJQUFQO0FBQ0EsZUFBTyxZQUFXO0FBQ2xCLGNBQU1BOztJQUVWO0lBQ0EsTUFBTSxTQUFNO0FBQ1YsWUFBTSxnQkFBZ0IsT0FBTyxPQUFNO0FBQ25DLGFBQU8sWUFBVztBQUNsQixZQUFNO0FBQ04sYUFBTyxFQUFFLE1BQU0sTUFBTSxPQUFPLE9BQVM7SUFDdkM7SUFDQSxDQUFDLE9BQU8sYUFBYSxJQUFDO0FBQ3BCLGFBQU87SUFDVDs7QUFFSjs7O0FDaEJNLElBQU8sU0FBUCxNQUFhO0VBR2pCLFlBQ1UsVUFDUixZQUEyQjtBQURuQixTQUFBLFdBQUE7QUFHUixTQUFLLGFBQWE7RUFDcEI7RUFFQSxPQUFPLGdCQUFzQixVQUFvQixZQUEyQjtBQUMxRSxRQUFJLFdBQVc7QUFFZixvQkFBZ0IsV0FBUTtBQUN0QixVQUFJLFVBQVU7QUFDWixjQUFNLElBQUksTUFBTSwwRUFBMEU7O0FBRTVGLGlCQUFXO0FBQ1gsVUFBSSxPQUFPO0FBQ1gsVUFBSTtBQUNGLHlCQUFpQixPQUFPLGlCQUFpQixVQUFVLFVBQVUsR0FBRztBQUM5RCxjQUFJO0FBQU07QUFFVixjQUFJLElBQUksS0FBSyxXQUFXLFFBQVEsR0FBRztBQUNqQyxtQkFBTztBQUNQOztBQUdGLGNBQUksSUFBSSxVQUFVLFFBQVEsSUFBSSxNQUFNLFdBQVcsV0FBVyxHQUFHO0FBQzNELGdCQUFJO0FBRUosZ0JBQUk7QUFDRixxQkFBTyxLQUFLLE1BQU0sSUFBSSxJQUFJO3FCQUNuQkMsSUFBUDtBQUNBLHNCQUFRLE1BQU0sc0NBQXNDLElBQUksSUFBSTtBQUM1RCxzQkFBUSxNQUFNLGVBQWUsSUFBSSxHQUFHO0FBQ3BDLG9CQUFNQTs7QUFHUixnQkFBSSxRQUFRLEtBQUssT0FBTztBQUN0QixvQkFBTSxJQUFJLFNBQVMsUUFBVyxLQUFLLE9BQU8sUUFBVyxNQUFTOztBQUdoRSxrQkFBTTtpQkFDRDtBQUNMLGdCQUFJO0FBQ0osZ0JBQUk7QUFDRixxQkFBTyxLQUFLLE1BQU0sSUFBSSxJQUFJO3FCQUNuQkEsSUFBUDtBQUNBLHNCQUFRLE1BQU0sc0NBQXNDLElBQUksSUFBSTtBQUM1RCxzQkFBUSxNQUFNLGVBQWUsSUFBSSxHQUFHO0FBQ3BDLG9CQUFNQTs7QUFHUixnQkFBSSxJQUFJLFNBQVMsU0FBUztBQUN4QixvQkFBTSxJQUFJLFNBQVMsUUFBVyxLQUFLLE9BQU8sS0FBSyxTQUFTLE1BQVM7O0FBRW5FLGtCQUFNLEVBQUUsT0FBTyxJQUFJLE9BQU8sS0FBVTs7O0FBR3hDLGVBQU87ZUFDQUEsSUFBUDtBQUVBLFlBQUlBLGNBQWEsU0FBU0EsR0FBRSxTQUFTO0FBQWM7QUFDbkQsY0FBTUE7O0FBR04sWUFBSSxDQUFDO0FBQU0scUJBQVcsTUFBSzs7SUFFL0I7QUFFQSxXQUFPLElBQUksT0FBTyxVQUFVLFVBQVU7RUFDeEM7Ozs7O0VBTUEsT0FBTyxtQkFBeUIsZ0JBQWdDLFlBQTJCO0FBQ3pGLFFBQUksV0FBVztBQUVmLG9CQUFnQixZQUFTO0FBQ3ZCLFlBQU0sY0FBYyxJQUFJLFlBQVc7QUFFbkMsWUFBTSxPQUFPLDhCQUFxQyxjQUFjO0FBQ2hFLHVCQUFpQixTQUFTLE1BQU07QUFDOUIsbUJBQVcsUUFBUSxZQUFZLE9BQU8sS0FBSyxHQUFHO0FBQzVDLGdCQUFNOzs7QUFJVixpQkFBVyxRQUFRLFlBQVksTUFBSyxHQUFJO0FBQ3RDLGNBQU07O0lBRVY7QUFFQSxvQkFBZ0IsV0FBUTtBQUN0QixVQUFJLFVBQVU7QUFDWixjQUFNLElBQUksTUFBTSwwRUFBMEU7O0FBRTVGLGlCQUFXO0FBQ1gsVUFBSSxPQUFPO0FBQ1gsVUFBSTtBQUNGLHlCQUFpQixRQUFRLFVBQVMsR0FBSTtBQUNwQyxjQUFJO0FBQU07QUFDVixjQUFJO0FBQU0sa0JBQU0sS0FBSyxNQUFNLElBQUk7O0FBRWpDLGVBQU87ZUFDQUEsSUFBUDtBQUVBLFlBQUlBLGNBQWEsU0FBU0EsR0FBRSxTQUFTO0FBQWM7QUFDbkQsY0FBTUE7O0FBR04sWUFBSSxDQUFDO0FBQU0scUJBQVcsTUFBSzs7SUFFL0I7QUFFQSxXQUFPLElBQUksT0FBTyxVQUFVLFVBQVU7RUFDeEM7RUFFQSxDQUFDLE9BQU8sYUFBYSxJQUFDO0FBQ3BCLFdBQU8sS0FBSyxTQUFRO0VBQ3RCOzs7OztFQU1BLE1BQUc7QUFDRCxVQUFNLE9BQTZDLENBQUE7QUFDbkQsVUFBTSxRQUE4QyxDQUFBO0FBQ3BELFVBQU0sV0FBVyxLQUFLLFNBQVE7QUFFOUIsVUFBTSxjQUFjLENBQUMsVUFBb0U7QUFDdkYsYUFBTztRQUNMLE1BQU0sTUFBSztBQUNULGNBQUksTUFBTSxXQUFXLEdBQUc7QUFDdEIsa0JBQU0sU0FBUyxTQUFTLEtBQUk7QUFDNUIsaUJBQUssS0FBSyxNQUFNO0FBQ2hCLGtCQUFNLEtBQUssTUFBTTs7QUFFbkIsaUJBQU8sTUFBTSxNQUFLO1FBQ3BCOztJQUVKO0FBRUEsV0FBTztNQUNMLElBQUksT0FBTyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssVUFBVTtNQUNuRCxJQUFJLE9BQU8sTUFBTSxZQUFZLEtBQUssR0FBRyxLQUFLLFVBQVU7O0VBRXhEOzs7Ozs7RUFPQSxtQkFBZ0I7QUFDZCxVQUFNQyxRQUFPO0FBQ2IsUUFBSTtBQUNKLFVBQU0sVUFBVSxJQUFJLFlBQVc7QUFFL0IsV0FBTyxJQUFJLGVBQWU7TUFDeEIsTUFBTSxRQUFLO0FBQ1QsZUFBT0EsTUFBSyxPQUFPLGFBQWEsRUFBQztNQUNuQztNQUNBLE1BQU0sS0FBSyxNQUFTO0FBQ2xCLFlBQUk7QUFDRixnQkFBTSxFQUFFLE9BQU8sS0FBSSxJQUFLLE1BQU0sS0FBSyxLQUFJO0FBQ3ZDLGNBQUk7QUFBTSxtQkFBTyxLQUFLLE1BQUs7QUFFM0IsZ0JBQU0sUUFBUSxRQUFRLE9BQU8sS0FBSyxVQUFVLEtBQUssSUFBSSxJQUFJO0FBRXpELGVBQUssUUFBUSxLQUFLO2lCQUNYLEtBQVA7QUFDQSxlQUFLLE1BQU0sR0FBRzs7TUFFbEI7TUFDQSxNQUFNLFNBQU07O0FBQ1YsZ0JBQU1DLE1BQUEsS0FBSyxXQUFMLGdCQUFBQSxJQUFBO01BQ1I7S0FDRDtFQUNIOztBQUdGLGdCQUF1QixpQkFDckIsVUFDQSxZQUEyQjtBQUUzQixNQUFJLENBQUMsU0FBUyxNQUFNO0FBQ2xCLGVBQVcsTUFBSztBQUNoQixVQUFNLElBQUksWUFBWSxtREFBbUQ7O0FBRzNFLFFBQU0sYUFBYSxJQUFJLFdBQVU7QUFDakMsUUFBTSxjQUFjLElBQUksWUFBVztBQUVuQyxRQUFNLE9BQU8sOEJBQXFDLFNBQVMsSUFBSTtBQUMvRCxtQkFBaUIsWUFBWSxjQUFjLElBQUksR0FBRztBQUNoRCxlQUFXLFFBQVEsWUFBWSxPQUFPLFFBQVEsR0FBRztBQUMvQyxZQUFNLE1BQU0sV0FBVyxPQUFPLElBQUk7QUFDbEMsVUFBSTtBQUFLLGNBQU07OztBQUluQixhQUFXLFFBQVEsWUFBWSxNQUFLLEdBQUk7QUFDdEMsVUFBTSxNQUFNLFdBQVcsT0FBTyxJQUFJO0FBQ2xDLFFBQUk7QUFBSyxZQUFNOztBQUVuQjtBQU1BLGdCQUFnQixjQUFjLFVBQXNDO0FBQ2xFLE1BQUksT0FBTyxJQUFJLFdBQVU7QUFFekIsbUJBQWlCLFNBQVMsVUFBVTtBQUNsQyxRQUFJLFNBQVMsTUFBTTtBQUNqQjs7QUFHRixVQUFNLGNBQ0osaUJBQWlCLGNBQWMsSUFBSSxXQUFXLEtBQUssSUFDakQsT0FBTyxVQUFVLFdBQVcsSUFBSSxZQUFXLEVBQUcsT0FBTyxLQUFLLElBQzFEO0FBRUosUUFBSSxVQUFVLElBQUksV0FBVyxLQUFLLFNBQVMsWUFBWSxNQUFNO0FBQzdELFlBQVEsSUFBSSxJQUFJO0FBQ2hCLFlBQVEsSUFBSSxhQUFhLEtBQUssTUFBTTtBQUNwQyxXQUFPO0FBRVAsUUFBSTtBQUNKLFlBQVEsZUFBZSx1QkFBdUIsSUFBSSxPQUFPLElBQUk7QUFDM0QsWUFBTSxLQUFLLE1BQU0sR0FBRyxZQUFZO0FBQ2hDLGFBQU8sS0FBSyxNQUFNLFlBQVk7OztBQUlsQyxNQUFJLEtBQUssU0FBUyxHQUFHO0FBQ25CLFVBQU07O0FBRVY7QUFFQSxJQUFNLGFBQU4sTUFBZ0I7RUFLZCxjQUFBO0FBQ0UsU0FBSyxRQUFRO0FBQ2IsU0FBSyxPQUFPLENBQUE7QUFDWixTQUFLLFNBQVMsQ0FBQTtFQUNoQjtFQUVBLE9BQU8sTUFBWTtBQUNqQixRQUFJLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFDdkIsYUFBTyxLQUFLLFVBQVUsR0FBRyxLQUFLLFNBQVMsQ0FBQzs7QUFHMUMsUUFBSSxDQUFDLE1BQU07QUFFVCxVQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsS0FBSyxLQUFLO0FBQVEsZUFBTztBQUU3QyxZQUFNLE1BQXVCO1FBQzNCLE9BQU8sS0FBSztRQUNaLE1BQU0sS0FBSyxLQUFLLEtBQUssSUFBSTtRQUN6QixLQUFLLEtBQUs7O0FBR1osV0FBSyxRQUFRO0FBQ2IsV0FBSyxPQUFPLENBQUE7QUFDWixXQUFLLFNBQVMsQ0FBQTtBQUVkLGFBQU87O0FBR1QsU0FBSyxPQUFPLEtBQUssSUFBSTtBQUVyQixRQUFJLEtBQUssV0FBVyxHQUFHLEdBQUc7QUFDeEIsYUFBTzs7QUFHVCxRQUFJLENBQUMsV0FBV0MsSUFBRyxLQUFLLElBQUksVUFBVSxNQUFNLEdBQUc7QUFFL0MsUUFBSSxNQUFNLFdBQVcsR0FBRyxHQUFHO0FBQ3pCLGNBQVEsTUFBTSxVQUFVLENBQUM7O0FBRzNCLFFBQUksY0FBYyxTQUFTO0FBQ3pCLFdBQUssUUFBUTtlQUNKLGNBQWMsUUFBUTtBQUMvQixXQUFLLEtBQUssS0FBSyxLQUFLOztBQUd0QixXQUFPO0VBQ1Q7O0FBR0YsU0FBUyxVQUFVQyxNQUFhLFdBQWlCO0FBQy9DLFFBQU1DLFNBQVFELEtBQUksUUFBUSxTQUFTO0FBQ25DLE1BQUlDLFdBQVUsSUFBSTtBQUNoQixXQUFPLENBQUNELEtBQUksVUFBVSxHQUFHQyxNQUFLLEdBQUcsV0FBV0QsS0FBSSxVQUFVQyxTQUFRLFVBQVUsTUFBTSxDQUFDOztBQUdyRixTQUFPLENBQUNELE1BQUssSUFBSSxFQUFFO0FBQ3JCOzs7QUN2UU8sSUFBTSxpQkFBaUIsQ0FBQyxVQUM3QixTQUFTLFFBQ1QsT0FBTyxVQUFVLFlBQ2pCLE9BQU8sTUFBTSxRQUFRLFlBQ3JCLE9BQU8sTUFBTSxTQUFTO0FBRWpCLElBQU1FLGNBQWEsQ0FBQyxVQUN6QixTQUFTLFFBQ1QsT0FBTyxVQUFVLFlBQ2pCLE9BQU8sTUFBTSxTQUFTLFlBQ3RCLE9BQU8sTUFBTSxpQkFBaUIsWUFDOUIsV0FBVyxLQUFLO0FBTVgsSUFBTSxhQUFhLENBQUMsVUFDekIsU0FBUyxRQUNULE9BQU8sVUFBVSxZQUNqQixPQUFPLE1BQU0sU0FBUyxZQUN0QixPQUFPLE1BQU0sU0FBUyxZQUN0QixPQUFPLE1BQU0sU0FBUyxjQUN0QixPQUFPLE1BQU0sVUFBVSxjQUN2QixPQUFPLE1BQU0sZ0JBQWdCO0FBRXhCLElBQU0sZUFBZSxDQUFDLFVBQW1DO0FBQzlELFNBQU9BLFlBQVcsS0FBSyxLQUFLLGVBQWUsS0FBSyxLQUFLLGVBQWUsS0FBSztBQUMzRTtBQWFBLGVBQXNCLE9BQ3BCLE9BQ0EsTUFDQSxTQUFxQzs7QUFHckMsVUFBUSxNQUFNO0FBR2QsTUFBSUEsWUFBVyxLQUFLLEdBQUc7QUFDckIsV0FBTzs7QUFHVCxNQUFJLGVBQWUsS0FBSyxHQUFHO0FBQ3pCLFVBQU0sT0FBTyxNQUFNLE1BQU0sS0FBSTtBQUM3QixhQUFBLFFBQVNDLE1BQUEsSUFBSSxJQUFJLE1BQU0sR0FBRyxFQUFFLFNBQVMsTUFBTSxPQUFPLEVBQUUsSUFBRyxNQUE5QyxPQUFBQSxNQUFvRDtBQUs3RCxVQUFNLE9BQU8sV0FBVyxJQUFJLElBQUksQ0FBRSxNQUFNLEtBQUssWUFBVyxDQUFVLElBQUksQ0FBQyxJQUFJO0FBRTNFLFdBQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxPQUFPOztBQUdyQyxRQUFNLE9BQU8sTUFBTSxTQUFTLEtBQUs7QUFFakMsV0FBQSxRQUFTLGFBQVEsS0FBSyxNQUFiLFlBQWtCO0FBRTNCLE1BQUksRUFBQyxtQ0FBUyxPQUFNO0FBQ2xCLFVBQU0sUUFBUSxVQUFLLENBQUMsTUFBTixtQkFBaUI7QUFDL0IsUUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixnQkFBVSxFQUFFLEdBQUcsU0FBUyxLQUFJOzs7QUFJaEMsU0FBTyxJQUFJLEtBQUssTUFBTSxNQUFNLE9BQU87QUFDckM7QUFFQSxlQUFlLFNBQVMsT0FBa0I7O0FBQ3hDLE1BQUksUUFBeUIsQ0FBQTtBQUM3QixNQUNFLE9BQU8sVUFBVSxZQUNqQixZQUFZLE9BQU8sS0FBSztFQUN4QixpQkFBaUIsYUFDakI7QUFDQSxVQUFNLEtBQUssS0FBSzthQUNQLFdBQVcsS0FBSyxHQUFHO0FBQzVCLFVBQU0sS0FBSyxNQUFNLE1BQU0sWUFBVyxDQUFFO2FBRXBDLHdCQUF3QixLQUFLLEdBQzdCO0FBQ0EscUJBQWlCLFNBQVMsT0FBTztBQUMvQixZQUFNLEtBQUssS0FBaUI7O1NBRXpCO0FBQ0wsVUFBTSxJQUFJLE1BQ1IseUJBQXlCLE9BQU8sd0JBQXVCQSxNQUFBLCtCQUFPLGdCQUFQLGdCQUFBQSxJQUNuRCxnQkFBZ0IsY0FBYyxLQUFLLEdBQUc7O0FBSTlDLFNBQU87QUFDVDtBQUVBLFNBQVMsY0FBYyxPQUFVO0FBQy9CLFFBQU0sUUFBUSxPQUFPLG9CQUFvQixLQUFLO0FBQzlDLFNBQU8sSUFBSSxNQUFNLElBQUksQ0FBQ0MsT0FBTSxJQUFJQSxLQUFJLEVBQUUsS0FBSyxJQUFJO0FBQ2pEO0FBRUEsU0FBUyxRQUFRLE9BQVU7O0FBQ3pCLFNBQ0UseUJBQXlCLE1BQU0sSUFBSSxLQUNuQyx5QkFBeUIsTUFBTSxRQUFRO0lBRXZDRCxNQUFBLHlCQUF5QixNQUFNLElBQUksTUFBbkMsZ0JBQUFBLElBQXNDLE1BQU0sU0FBUztBQUV6RDtBQUVBLElBQU0sMkJBQTJCLENBQUNFLE9BQW9EO0FBQ3BGLE1BQUksT0FBT0EsT0FBTTtBQUFVLFdBQU9BO0FBQ2xDLE1BQUksT0FBTyxXQUFXLGVBQWVBLGNBQWE7QUFBUSxXQUFPLE9BQU9BLEVBQUM7QUFDekUsU0FBTztBQUNUO0FBRUEsSUFBTSwwQkFBMEIsQ0FBQyxVQUMvQixTQUFTLFFBQVEsT0FBTyxVQUFVLFlBQVksT0FBTyxNQUFNLE9BQU8sYUFBYSxNQUFNO0FBRWhGLElBQU0sa0JBQWtCLENBQUMsU0FDOUIsUUFBUSxPQUFPLFNBQVMsWUFBWSxLQUFLLFFBQVEsS0FBSyxPQUFPLFdBQVcsTUFBTTtBQWV6RSxJQUFNLDhCQUE4QixPQUN6Q0MsVUFDOEM7QUFDOUMsUUFBTSxPQUFPLE1BQU0sV0FBV0EsTUFBSyxJQUFJO0FBQ3ZDLFNBQU8sMkJBQTJCLE1BQU1BLEtBQUk7QUFDOUM7QUFFTyxJQUFNLGFBQWEsT0FBb0MsU0FBMEM7QUFDdEcsUUFBTSxPQUFPLElBQUlDLFVBQVE7QUFDekIsUUFBTSxRQUFRLElBQUksT0FBTyxRQUFRLFFBQVEsQ0FBQSxDQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sYUFBYSxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDbEcsU0FBTztBQUNUO0FBYUEsSUFBTSxlQUFlLE9BQU8sTUFBZ0IsS0FBYSxVQUFpQztBQUN4RixNQUFJLFVBQVU7QUFBVztBQUN6QixNQUFJLFNBQVMsTUFBTTtBQUNqQixVQUFNLElBQUksVUFDUixzQkFBc0IsZ0VBQWdFOztBQUsxRixNQUFJLE9BQU8sVUFBVSxZQUFZLE9BQU8sVUFBVSxZQUFZLE9BQU8sVUFBVSxXQUFXO0FBQ3hGLFNBQUssT0FBTyxLQUFLLE9BQU8sS0FBSyxDQUFDO2FBQ3JCLGFBQWEsS0FBSyxHQUFHO0FBQzlCLFVBQU0sT0FBTyxNQUFNLE9BQU8sS0FBSztBQUMvQixTQUFLLE9BQU8sS0FBSyxJQUFZO2FBQ3BCLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDL0IsVUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLENBQUMsVUFBVSxhQUFhLE1BQU0sTUFBTSxNQUFNLEtBQUssQ0FBQyxDQUFDO2FBQ3BFLE9BQU8sVUFBVSxVQUFVO0FBQ3BDLFVBQU0sUUFBUSxJQUNaLE9BQU8sUUFBUSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sYUFBYSxNQUFNLEdBQUcsT0FBTyxTQUFTLElBQUksQ0FBQyxDQUFDO1NBRXJGO0FBQ0wsVUFBTSxJQUFJLFVBQ1Isd0dBQXdHLGVBQWU7O0FBRzdIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZOQSxlQUFlLHFCQUF3QixPQUF1Qjs7QUFDNUQsUUFBTSxFQUFFLFNBQVEsSUFBSztBQUNyQixNQUFJLE1BQU0sUUFBUSxRQUFRO0FBQ3hCLElBQUFDLE9BQU0sWUFBWSxTQUFTLFFBQVEsU0FBUyxLQUFLLFNBQVMsU0FBUyxTQUFTLElBQUk7QUFLaEYsUUFBSSxNQUFNLFFBQVEsZUFBZTtBQUMvQixhQUFPLE1BQU0sUUFBUSxjQUFjLGdCQUFnQixVQUFVLE1BQU0sVUFBVTs7QUFHL0UsV0FBTyxPQUFPLGdCQUFnQixVQUFVLE1BQU0sVUFBVTs7QUFJMUQsTUFBSSxTQUFTLFdBQVcsS0FBSztBQUMzQixXQUFPOztBQUdULE1BQUksTUFBTSxRQUFRLGtCQUFrQjtBQUNsQyxXQUFPOztBQUdULFFBQU0sY0FBYyxTQUFTLFFBQVEsSUFBSSxjQUFjO0FBQ3ZELFFBQU0sYUFBWUMsTUFBQSwyQ0FBYSxNQUFNLEtBQUssT0FBeEIsZ0JBQUFBLElBQTRCO0FBQzlDLFFBQU0sVUFBUyx1Q0FBVyxTQUFTLHlCQUF1Qix1Q0FBVyxTQUFTO0FBQzlFLE1BQUksUUFBUTtBQUNWLFVBQU0sT0FBTyxNQUFNLFNBQVMsS0FBSTtBQUVoQyxJQUFBRCxPQUFNLFlBQVksU0FBUyxRQUFRLFNBQVMsS0FBSyxTQUFTLFNBQVMsSUFBSTtBQUV2RSxXQUFPLGNBQWMsTUFBTSxRQUFROztBQUdyQyxRQUFNLE9BQU8sTUFBTSxTQUFTLEtBQUk7QUFDaEMsRUFBQUEsT0FBTSxZQUFZLFNBQVMsUUFBUSxTQUFTLEtBQUssU0FBUyxTQUFTLElBQUk7QUFHdkUsU0FBTztBQUNUO0FBT0EsU0FBUyxjQUFpQixPQUFVLFVBQWtCO0FBQ3BELE1BQUksQ0FBQyxTQUFTLE9BQU8sVUFBVSxZQUFZLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDL0QsV0FBTzs7QUFHVCxTQUFPLE9BQU8sZUFBZSxPQUFPLGVBQWU7SUFDakQsT0FBTyxTQUFTLFFBQVEsSUFBSSxjQUFjO0lBQzFDLFlBQVk7R0FDYjtBQUNIO0FBTU0sSUFBTyxhQUFQLGNBQTZCLFFBQXlCO0VBRzFELFlBQ1UsaUJBQ0FFLGlCQUVnQyxzQkFBb0I7QUFFNUQsVUFBTSxDQUFDQyxhQUFXO0FBSWhCLE1BQUFBLFNBQVEsSUFBVztJQUNyQixDQUFDO0FBVk8sU0FBQSxrQkFBQTtBQUNBLFNBQUEsZ0JBQUFEO0VBVVY7RUFFQSxZQUFlLFdBQWtEO0FBQy9ELFdBQU8sSUFBSSxXQUFXLEtBQUssaUJBQWlCLE9BQU8sVUFDakQsY0FBYyxVQUFVLE1BQU0sS0FBSyxjQUFjLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxRQUFRLENBQUM7RUFFcEY7Ozs7Ozs7Ozs7Ozs7O0VBZUEsYUFBVTtBQUNSLFdBQU8sS0FBSyxnQkFBZ0IsS0FBSyxDQUFDRSxPQUFNQSxHQUFFLFFBQVE7RUFDcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkEsTUFBTSxlQUFZO0FBQ2hCLFVBQU0sQ0FBQyxNQUFNLFFBQVEsSUFBSSxNQUFNLFFBQVEsSUFBSSxDQUFDLEtBQUssTUFBSyxHQUFJLEtBQUssV0FBVSxDQUFFLENBQUM7QUFDNUUsV0FBTyxFQUFFLE1BQU0sVUFBVSxZQUFZLFNBQVMsUUFBUSxJQUFJLGNBQWMsRUFBQztFQUMzRTtFQUVRLFFBQUs7QUFDWCxRQUFJLENBQUMsS0FBSyxlQUFlO0FBQ3ZCLFdBQUssZ0JBQWdCLEtBQUssZ0JBQWdCLEtBQUssS0FBSyxhQUFhOztBQUVuRSxXQUFPLEtBQUs7RUFDZDtFQUVTLEtBQ1AsYUFDQSxZQUFtRjtBQUVuRixXQUFPLEtBQUssTUFBSyxFQUFHLEtBQUssYUFBYSxVQUFVO0VBQ2xEO0VBRVMsTUFDUCxZQUFpRjtBQUVqRixXQUFPLEtBQUssTUFBSyxFQUFHLE1BQU0sVUFBVTtFQUN0QztFQUVTLFFBQVEsV0FBMkM7QUFDMUQsV0FBTyxLQUFLLE1BQUssRUFBRyxRQUFRLFNBQVM7RUFDdkM7O0FBR0ksSUFBZ0IsWUFBaEIsTUFBeUI7RUFTN0IsWUFBWTtJQUNWO0lBQ0EsYUFBYTtJQUNiLFVBQVU7O0lBQ1Y7SUFDQSxPQUFPO0VBQWUsR0FPdkI7QUFDQyxTQUFLLFVBQVU7QUFDZixTQUFLLGFBQWEsd0JBQXdCLGNBQWMsVUFBVTtBQUNsRSxTQUFLLFVBQVUsd0JBQXdCLFdBQVcsT0FBTztBQUN6RCxTQUFLLFlBQVk7QUFFakIsU0FBSyxRQUFRLDRDQUFtQkM7RUFDbEM7RUFFVSxZQUFZQyxPQUF5QjtBQUM3QyxXQUFPLENBQUE7RUFDVDs7Ozs7Ozs7O0VBVVUsZUFBZUEsT0FBeUI7QUFDaEQsV0FBTztNQUNMLFFBQVE7TUFDUixnQkFBZ0I7TUFDaEIsY0FBYyxLQUFLLGFBQVk7TUFDL0IsR0FBRyxtQkFBa0I7TUFDckIsR0FBRyxLQUFLLFlBQVlBLEtBQUk7O0VBRTVCOzs7O0VBT1UsZ0JBQWdCLFNBQWtCLGVBQXNCO0VBQUc7RUFFM0Qsd0JBQXFCO0FBQzdCLFdBQU8sd0JBQXdCLE1BQUs7RUFDdEM7RUFFQSxJQUFjLE1BQWNBLE9BQTBDO0FBQ3BFLFdBQU8sS0FBSyxjQUFjLE9BQU8sTUFBTUEsS0FBSTtFQUM3QztFQUVBLEtBQWUsTUFBY0EsT0FBMEM7QUFDckUsV0FBTyxLQUFLLGNBQWMsUUFBUSxNQUFNQSxLQUFJO0VBQzlDO0VBRUEsTUFBZ0IsTUFBY0EsT0FBMEM7QUFDdEUsV0FBTyxLQUFLLGNBQWMsU0FBUyxNQUFNQSxLQUFJO0VBQy9DO0VBRUEsSUFBYyxNQUFjQSxPQUEwQztBQUNwRSxXQUFPLEtBQUssY0FBYyxPQUFPLE1BQU1BLEtBQUk7RUFDN0M7RUFFQSxPQUFpQixNQUFjQSxPQUEwQztBQUN2RSxXQUFPLEtBQUssY0FBYyxVQUFVLE1BQU1BLEtBQUk7RUFDaEQ7RUFFUSxjQUNOLFFBQ0EsTUFDQUEsT0FBMEM7QUFFMUMsV0FBTyxLQUFLLFFBQ1YsUUFBUSxRQUFRQSxLQUFJLEVBQUUsS0FBSyxPQUFPQSxVQUFRO0FBQ3hDLFlBQU0sT0FDSkEsU0FBUSxXQUFXQSxTQUFBLGdCQUFBQSxNQUFNLElBQUksSUFBSSxJQUFJLFNBQVMsTUFBTUEsTUFBSyxLQUFLLFlBQVcsQ0FBRSxLQUN6RUEsU0FBQSxnQkFBQUEsTUFBTSxpQkFBZ0IsV0FBV0EsTUFBSyxRQUN0Q0EsU0FBQSxnQkFBQUEsTUFBTSxpQkFBZ0IsY0FBYyxJQUFJLFNBQVNBLE1BQUssSUFBSSxJQUMxREEsU0FBUSxZQUFZLE9BQU9BLFNBQUEsZ0JBQUFBLE1BQU0sSUFBSSxJQUFJLElBQUksU0FBU0EsTUFBSyxLQUFLLE1BQU0sSUFDdEVBLFNBQUEsZ0JBQUFBLE1BQU07QUFDVixhQUFPLEVBQUUsUUFBUSxNQUFNLEdBQUdBLE9BQU0sS0FBSTtJQUN0QyxDQUFDLENBQUM7RUFFTjtFQUVBLFdBQ0UsTUFDQUMsT0FDQUQsT0FBMEI7QUFFMUIsV0FBTyxLQUFLLGVBQWVDLE9BQU0sRUFBRSxRQUFRLE9BQU8sTUFBTSxHQUFHRCxNQUFJLENBQUU7RUFDbkU7RUFFUSx1QkFBdUIsTUFBYTtBQUMxQyxRQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLFVBQUksT0FBTyxXQUFXLGFBQWE7QUFDakMsZUFBTyxPQUFPLFdBQVcsTUFBTSxNQUFNLEVBQUUsU0FBUTs7QUFHakQsVUFBSSxPQUFPLGdCQUFnQixhQUFhO0FBQ3RDLGNBQU0sVUFBVSxJQUFJLFlBQVc7QUFDL0IsY0FBTSxVQUFVLFFBQVEsT0FBTyxJQUFJO0FBQ25DLGVBQU8sUUFBUSxPQUFPLFNBQVE7O2VBRXZCLFlBQVksT0FBTyxJQUFJLEdBQUc7QUFDbkMsYUFBTyxLQUFLLFdBQVcsU0FBUTs7QUFHakMsV0FBTztFQUNUO0VBRUEsYUFDRSxTQUNBLEVBQUUsYUFBYSxFQUFDLElBQThCLENBQUEsR0FBRTs7QUFFaEQsY0FBVSxFQUFFLEdBQUcsUUFBTztBQUN0QixVQUFNLEVBQUUsUUFBUSxNQUFNLE9BQU8sVUFBbUIsQ0FBQSxFQUFFLElBQUs7QUFFdkQsVUFBTSxPQUNKLFlBQVksT0FBTyxRQUFRLElBQUksS0FBTSxRQUFRLG1CQUFtQixPQUFPLFFBQVEsU0FBUyxXQUN0RixRQUFRLE9BQ1IsZ0JBQWdCLFFBQVEsSUFBSSxJQUFJLFFBQVEsS0FBSyxPQUM3QyxRQUFRLE9BQU8sS0FBSyxVQUFVLFFBQVEsTUFBTSxNQUFNLENBQUMsSUFDbkQ7QUFDSixVQUFNLGdCQUFnQixLQUFLLHVCQUF1QixJQUFJO0FBRXRELFVBQU0sTUFBTSxLQUFLLFNBQVMsTUFBTyxLQUFLO0FBQ3RDLFFBQUksYUFBYTtBQUFTLDhCQUF3QixXQUFXLFFBQVEsT0FBTztBQUM1RSxZQUFRLFdBQVVMLE1BQUEsUUFBUSxZQUFSLE9BQUFBLE1BQW1CLEtBQUs7QUFDMUMsVUFBTSxhQUFZLG1CQUFRLGNBQVIsWUFBcUIsS0FBSyxjQUExQixZQUF1QyxnQkFBZ0IsR0FBRztBQUM1RSxVQUFNLGtCQUFrQixRQUFRLFVBQVU7QUFDMUMsUUFDRSxTQUFRLDRDQUFtQixZQUFuQixtQkFBNEIsYUFBWSxZQUNoRCxvQkFBb0JPLE1BQUEsVUFBa0IsUUFBUSxZQUExQixPQUFBQSxNQUFxQyxJQUN6RDtBQUtDLGdCQUFrQixRQUFRLFVBQVU7O0FBR3ZDLFFBQUksS0FBSyxxQkFBcUIsV0FBVyxPQUFPO0FBQzlDLFVBQUksQ0FBQyxRQUFRO0FBQWdCLGdCQUFRLGlCQUFpQixLQUFLLHNCQUFxQjtBQUNoRixjQUFRLEtBQUssaUJBQWlCLElBQUksUUFBUTs7QUFHNUMsVUFBTSxhQUFhLEtBQUssYUFBYSxFQUFFLFNBQVMsU0FBUyxlQUFlLFdBQVUsQ0FBRTtBQUVwRixVQUFNLE1BQW1CO01BQ3ZCO01BQ0EsR0FBSSxRQUFRLEVBQUUsS0FBaUI7TUFDL0IsU0FBUztNQUNULEdBQUksYUFBYSxFQUFFLE9BQU8sVUFBUzs7O01BR25DLFNBQVEsYUFBUSxXQUFSLFlBQWtCOztBQUc1QixXQUFPLEVBQUUsS0FBSyxLQUFLLFNBQVMsUUFBUSxRQUFPO0VBQzdDO0VBRVEsYUFBYSxFQUNuQixTQUNBLFNBQ0EsZUFDQSxXQUFVLEdBTVg7QUFDQyxVQUFNLGFBQXFDLENBQUE7QUFDM0MsUUFBSSxlQUFlO0FBQ2pCLGlCQUFXLGdCQUFnQixJQUFJOztBQUdqQyxVQUFNLGlCQUFpQixLQUFLLGVBQWUsT0FBTztBQUNsRCxvQkFBZ0IsWUFBWSxjQUFjO0FBQzFDLG9CQUFnQixZQUFZLE9BQU87QUFHbkMsUUFBSSxnQkFBZ0IsUUFBUSxJQUFJLEtBQUssU0FBYyxRQUFRO0FBQ3pELGFBQU8sV0FBVyxjQUFjOztBQU1sQyxRQUNFLFVBQVUsZ0JBQWdCLHlCQUF5QixNQUFNLFVBQ3pELFVBQVUsU0FBUyx5QkFBeUIsTUFBTSxRQUNsRDtBQUNBLGlCQUFXLHlCQUF5QixJQUFJLE9BQU8sVUFBVTs7QUFFM0QsUUFDRSxVQUFVLGdCQUFnQixxQkFBcUIsTUFBTSxVQUNyRCxVQUFVLFNBQVMscUJBQXFCLE1BQU0sVUFDOUMsUUFBUSxTQUNSO0FBQ0EsaUJBQVcscUJBQXFCLElBQUksT0FBTyxRQUFRLE9BQU87O0FBRzVELFNBQUssZ0JBQWdCLFlBQVksT0FBTztBQUV4QyxXQUFPO0VBQ1Q7Ozs7RUFLVSxNQUFNLGVBQWUsU0FBNEI7RUFBa0I7Ozs7Ozs7RUFRbkUsTUFBTSxlQUNkLFNBQ0EsRUFBRSxLQUFLLFFBQU8sR0FBaUQ7RUFDL0M7RUFFUixhQUFhLFNBQXVDO0FBQzVELFdBQ0UsQ0FBQyxVQUFVLENBQUEsSUFDVCxPQUFPLFlBQVksVUFDbkIsT0FBTyxZQUFZLE1BQU0sS0FBSyxPQUE2QixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUN6RixFQUFFLEdBQUcsUUFBTztFQUVsQjtFQUVVLGdCQUNSLFFBQ0EsT0FDQSxTQUNBLFNBQTRCO0FBRTVCLFdBQU8sU0FBUyxTQUFTLFFBQVEsT0FBTyxTQUFTLE9BQU87RUFDMUQ7RUFFQSxRQUNFLFNBQ0EsbUJBQWtDLE1BQUk7QUFFdEMsV0FBTyxJQUFJLFdBQVcsS0FBSyxZQUFZLFNBQVMsZ0JBQWdCLENBQUM7RUFDbkU7RUFFUSxNQUFNLFlBQ1osY0FDQSxrQkFBK0I7O0FBRS9CLFVBQU0sVUFBVSxNQUFNO0FBQ3RCLFVBQU0sY0FBYVAsTUFBQSxRQUFRLGVBQVIsT0FBQUEsTUFBc0IsS0FBSztBQUM5QyxRQUFJLG9CQUFvQixNQUFNO0FBQzVCLHlCQUFtQjs7QUFHckIsVUFBTSxLQUFLLGVBQWUsT0FBTztBQUVqQyxVQUFNLEVBQUUsS0FBSyxLQUFLLFFBQU8sSUFBSyxLQUFLLGFBQWEsU0FBUyxFQUFFLFlBQVksYUFBYSxpQkFBZ0IsQ0FBRTtBQUV0RyxVQUFNLEtBQUssZUFBZSxLQUFLLEVBQUUsS0FBSyxRQUFPLENBQUU7QUFFL0MsSUFBQUQsT0FBTSxXQUFXLEtBQUssU0FBUyxJQUFJLE9BQU87QUFFMUMsU0FBSSxhQUFRLFdBQVIsbUJBQWdCLFNBQVM7QUFDM0IsWUFBTSxJQUFJLGtCQUFpQjs7QUFHN0IsVUFBTSxhQUFhLElBQUksZ0JBQWU7QUFDdEMsVUFBTSxXQUFXLE1BQU0sS0FBSyxpQkFBaUIsS0FBSyxLQUFLLFNBQVMsVUFBVSxFQUFFLE1BQU0sV0FBVztBQUU3RixRQUFJLG9CQUFvQixPQUFPO0FBQzdCLFdBQUksYUFBUSxXQUFSLG1CQUFnQixTQUFTO0FBQzNCLGNBQU0sSUFBSSxrQkFBaUI7O0FBRTdCLFVBQUksa0JBQWtCO0FBQ3BCLGVBQU8sS0FBSyxhQUFhLFNBQVMsZ0JBQWdCOztBQUVwRCxVQUFJLFNBQVMsU0FBUyxjQUFjO0FBQ2xDLGNBQU0sSUFBSSwwQkFBeUI7O0FBRXJDLFlBQU0sSUFBSSxtQkFBbUIsRUFBRSxPQUFPLFNBQVEsQ0FBRTs7QUFHbEQsVUFBTSxrQkFBa0Isc0JBQXNCLFNBQVMsT0FBTztBQUU5RCxRQUFJLENBQUMsU0FBUyxJQUFJO0FBQ2hCLFVBQUksb0JBQW9CLEtBQUssWUFBWSxRQUFRLEdBQUc7QUFDbEQsY0FBTVMsZ0JBQWUsYUFBYTtBQUNsQyxRQUFBVCxPQUFNLG9CQUFvQlMsa0JBQWlCLFNBQVMsUUFBUSxLQUFLLGVBQWU7QUFDaEYsZUFBTyxLQUFLLGFBQWEsU0FBUyxrQkFBa0IsZUFBZTs7QUFHckUsWUFBTSxVQUFVLE1BQU0sU0FBUyxLQUFJLEVBQUcsTUFBTSxDQUFDQyxPQUFNLFlBQVlBLEVBQUMsRUFBRSxPQUFPO0FBQ3pFLFlBQU0sVUFBVSxTQUFTLE9BQU87QUFDaEMsWUFBTSxhQUFhLFVBQVUsU0FBWTtBQUN6QyxZQUFNLGVBQWUsbUJBQW1CLGtDQUFrQztBQUUxRSxNQUFBVixPQUFNLG9CQUFvQixpQkFBaUIsU0FBUyxRQUFRLEtBQUssaUJBQWlCLFVBQVU7QUFFNUYsWUFBTSxNQUFNLEtBQUssZ0JBQWdCLFNBQVMsUUFBUSxTQUFTLFlBQVksZUFBZTtBQUN0RixZQUFNOztBQUdSLFdBQU8sRUFBRSxVQUFVLFNBQVMsV0FBVTtFQUN4QztFQUVBLGVBQ0VPLE9BQ0EsU0FBNEI7QUFFNUIsVUFBTSxVQUFVLEtBQUssWUFBWSxTQUFTLElBQUk7QUFDOUMsV0FBTyxJQUFJLFlBQTZCLE1BQU0sU0FBU0EsS0FBSTtFQUM3RDtFQUVBLFNBQWMsTUFBYyxPQUE2QjtBQUN2RCxVQUFNLE1BQ0osY0FBYyxJQUFJLElBQ2hCLElBQUksSUFBSSxJQUFJLElBQ1osSUFBSSxJQUFJLEtBQUssV0FBVyxLQUFLLFFBQVEsU0FBUyxHQUFHLEtBQUssS0FBSyxXQUFXLEdBQUcsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUs7QUFFdEcsVUFBTSxlQUFlLEtBQUssYUFBWTtBQUN0QyxRQUFJLENBQUMsV0FBVyxZQUFZLEdBQUc7QUFDN0IsY0FBUSxFQUFFLEdBQUcsY0FBYyxHQUFHLE1BQUs7O0FBR3JDLFFBQUksT0FBTyxVQUFVLFlBQVksU0FBUyxDQUFDLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDL0QsVUFBSSxTQUFTLEtBQUssZUFBZSxLQUFnQzs7QUFHbkUsV0FBTyxJQUFJLFNBQVE7RUFDckI7RUFFVSxlQUFlLE9BQThCO0FBQ3JELFdBQU8sT0FBTyxRQUFRLEtBQUssRUFDeEIsT0FBTyxDQUFDLENBQUNJLElBQUcsS0FBSyxNQUFNLE9BQU8sVUFBVSxXQUFXLEVBQ25ELElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFLO0FBQ3BCLFVBQUksT0FBTyxVQUFVLFlBQVksT0FBTyxVQUFVLFlBQVksT0FBTyxVQUFVLFdBQVc7QUFDeEYsZUFBTyxHQUFHLG1CQUFtQixHQUFHLEtBQUssbUJBQW1CLEtBQUs7O0FBRS9ELFVBQUksVUFBVSxNQUFNO0FBQ2xCLGVBQU8sR0FBRyxtQkFBbUIsR0FBRzs7QUFFbEMsWUFBTSxJQUFJLFlBQ1IseUJBQXlCLE9BQU8sd1FBQXdRO0lBRTVTLENBQUMsRUFDQSxLQUFLLEdBQUc7RUFDYjtFQUVBLE1BQU0saUJBQ0osS0FDQSxNQUNBLElBQ0EsWUFBMkI7QUFFM0IsVUFBTSxFQUFFLFFBQVEsR0FBRyxRQUFPLElBQUssUUFBUSxDQUFBO0FBQ3ZDLFFBQUk7QUFBUSxhQUFPLGlCQUFpQixTQUFTLE1BQU0sV0FBVyxNQUFLLENBQUU7QUFFckUsVUFBTSxVQUFVLFdBQVcsTUFBTSxXQUFXLE1BQUssR0FBSSxFQUFFO0FBRXZELFVBQU0sZUFBZTtNQUNuQixRQUFRLFdBQVc7TUFDbkIsR0FBRzs7QUFFTCxRQUFJLGFBQWEsUUFBUTtBQUd2QixtQkFBYSxTQUFTLGFBQWEsT0FBTyxZQUFXOztBQUd2RDs7TUFFRSxLQUFLLE1BQU0sS0FBSyxRQUFXLEtBQUssWUFBWSxFQUFFLFFBQVEsTUFBSztBQUN6RCxxQkFBYSxPQUFPO01BQ3RCLENBQUM7O0VBRUw7RUFFUSxZQUFZLFVBQWtCO0FBRXBDLFVBQU0sb0JBQW9CLFNBQVMsUUFBUSxJQUFJLGdCQUFnQjtBQUcvRCxRQUFJLHNCQUFzQjtBQUFRLGFBQU87QUFDekMsUUFBSSxzQkFBc0I7QUFBUyxhQUFPO0FBRzFDLFFBQUksU0FBUyxXQUFXO0FBQUssYUFBTztBQUdwQyxRQUFJLFNBQVMsV0FBVztBQUFLLGFBQU87QUFHcEMsUUFBSSxTQUFTLFdBQVc7QUFBSyxhQUFPO0FBR3BDLFFBQUksU0FBUyxVQUFVO0FBQUssYUFBTztBQUVuQyxXQUFPO0VBQ1Q7RUFFUSxNQUFNLGFBQ1osU0FDQSxrQkFDQSxpQkFBcUM7O0FBRXJDLFFBQUk7QUFHSixVQUFNLHlCQUF5QixtREFBa0I7QUFDakQsUUFBSSx3QkFBd0I7QUFDMUIsWUFBTSxZQUFZLFdBQVcsc0JBQXNCO0FBQ25ELFVBQUksQ0FBQyxPQUFPLE1BQU0sU0FBUyxHQUFHO0FBQzVCLHdCQUFnQjs7O0FBS3BCLFVBQU0sbUJBQW1CLG1EQUFrQjtBQUMzQyxRQUFJLG9CQUFvQixDQUFDLGVBQWU7QUFDdEMsWUFBTSxpQkFBaUIsV0FBVyxnQkFBZ0I7QUFDbEQsVUFBSSxDQUFDLE9BQU8sTUFBTSxjQUFjLEdBQUc7QUFDakMsd0JBQWdCLGlCQUFpQjthQUM1QjtBQUNMLHdCQUFnQixLQUFLLE1BQU0sZ0JBQWdCLElBQUksS0FBSyxJQUFHOzs7QUFNM0QsUUFBSSxFQUFFLGlCQUFpQixLQUFLLGlCQUFpQixnQkFBZ0IsS0FBSyxNQUFPO0FBQ3ZFLFlBQU0sY0FBYVYsTUFBQSxRQUFRLGVBQVIsT0FBQUEsTUFBc0IsS0FBSztBQUM5QyxzQkFBZ0IsS0FBSyxtQ0FBbUMsa0JBQWtCLFVBQVU7O0FBRXRGLFVBQU0sTUFBTSxhQUFhO0FBRXpCLFdBQU8sS0FBSyxZQUFZLFNBQVMsbUJBQW1CLENBQUM7RUFDdkQ7RUFFUSxtQ0FBbUMsa0JBQTBCLFlBQWtCO0FBQ3JGLFVBQU0sb0JBQW9CO0FBQzFCLFVBQU0sZ0JBQWdCO0FBRXRCLFVBQU0sYUFBYSxhQUFhO0FBR2hDLFVBQU0sZUFBZSxLQUFLLElBQUksb0JBQW9CLEtBQUssSUFBSSxHQUFHLFVBQVUsR0FBRyxhQUFhO0FBR3hGLFVBQU0sU0FBUyxJQUFJLEtBQUssT0FBTSxJQUFLO0FBRW5DLFdBQU8sZUFBZSxTQUFTO0VBQ2pDO0VBRVEsZUFBWTtBQUNsQixXQUFPLEdBQUcsS0FBSyxZQUFZLFdBQVc7RUFDeEM7O0FBS0ksSUFBZ0IsZUFBaEIsTUFBNEI7RUFPaEMsWUFBWSxRQUFtQixVQUFvQixNQUFlLFNBQTRCO0FBTjlGLHlCQUFBLElBQUEsTUFBQSxNQUFBO0FBT0UsSUFBQVcsd0JBQUEsTUFBSSxzQkFBVyxRQUFNLEdBQUE7QUFDckIsU0FBSyxVQUFVO0FBQ2YsU0FBSyxXQUFXO0FBQ2hCLFNBQUssT0FBTztFQUNkO0VBVUEsY0FBVztBQUNULFVBQU0sUUFBUSxLQUFLLGtCQUFpQjtBQUNwQyxRQUFJLENBQUMsTUFBTTtBQUFRLGFBQU87QUFDMUIsV0FBTyxLQUFLLGFBQVksS0FBTTtFQUNoQztFQUVBLE1BQU0sY0FBVztBQUNmLFVBQU0sV0FBVyxLQUFLLGFBQVk7QUFDbEMsUUFBSSxDQUFDLFVBQVU7QUFDYixZQUFNLElBQUksWUFDUix1RkFBdUY7O0FBRzNGLFVBQU0sY0FBYyxFQUFFLEdBQUcsS0FBSyxRQUFPO0FBQ3JDLFFBQUksWUFBWSxZQUFZLE9BQU8sWUFBWSxVQUFVLFVBQVU7QUFDakUsa0JBQVksUUFBUSxFQUFFLEdBQUcsWUFBWSxPQUFPLEdBQUcsU0FBUyxPQUFNO2VBQ3JELFNBQVMsVUFBVTtBQUM1QixZQUFNLFNBQVMsQ0FBQyxHQUFHLE9BQU8sUUFBUSxZQUFZLFNBQVMsQ0FBQSxDQUFFLEdBQUcsR0FBRyxTQUFTLElBQUksYUFBYSxRQUFPLENBQUU7QUFDbEcsaUJBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxRQUFRO0FBQ2pDLGlCQUFTLElBQUksYUFBYSxJQUFJLEtBQUssS0FBWTs7QUFFakQsa0JBQVksUUFBUTtBQUNwQixrQkFBWSxPQUFPLFNBQVMsSUFBSSxTQUFROztBQUUxQyxXQUFPLE1BQU1DLHdCQUFBLE1BQUksc0JBQUEsR0FBQSxFQUFTLGVBQWUsS0FBSyxhQUFvQixXQUFXO0VBQy9FO0VBRUEsT0FBTyxZQUFTO0FBRWQsUUFBSSxPQUFhO0FBQ2pCLFVBQU07QUFDTixXQUFPLEtBQUssWUFBVyxHQUFJO0FBQ3pCLGFBQU8sTUFBTSxLQUFLLFlBQVc7QUFDN0IsWUFBTTs7RUFFVjtFQUVBLFNBQU8sdUJBQUEsb0JBQUEsUUFBQSxHQUFDLE9BQU8sY0FBYSxJQUFDO0FBQzNCLHFCQUFpQixRQUFRLEtBQUssVUFBUyxHQUFJO0FBQ3pDLGlCQUFXLFFBQVEsS0FBSyxrQkFBaUIsR0FBSTtBQUMzQyxjQUFNOzs7RUFHWjs7QUFZSSxJQUFPLGNBQVAsY0FJSSxXQUFxQjtFQUc3QixZQUNFLFFBQ0EsU0FDQU4sT0FBNEU7QUFFNUUsVUFDRSxTQUNBLE9BQU8sVUFDTCxJQUFJQSxNQUNGLFFBQ0EsTUFBTSxVQUNOLE1BQU0scUJBQXFCLEtBQUssR0FDaEMsTUFBTSxPQUFPLENBQ2M7RUFFbkM7Ozs7Ozs7O0VBU0EsUUFBUSxPQUFPLGFBQWEsSUFBQztBQUMzQixVQUFNLE9BQU8sTUFBTTtBQUNuQixxQkFBaUIsUUFBUSxNQUFNO0FBQzdCLFlBQU07O0VBRVY7O0FBR0ssSUFBTSx3QkFBd0IsQ0FDbkMsWUFDMEI7QUFDMUIsU0FBTyxJQUFJLE1BQ1QsT0FBTzs7SUFFTCxRQUFRLFFBQU87RUFBRSxHQUVuQjtJQUNFLElBQUksUUFBUSxNQUFJO0FBQ2QsWUFBTSxNQUFNLEtBQUssU0FBUTtBQUN6QixhQUFPLE9BQU8sSUFBSSxZQUFXLENBQUUsS0FBSyxPQUFPLEdBQUc7SUFDaEQ7R0FDRDtBQUVMO0FBa0NBLElBQU0scUJBQStDO0VBQ25ELFFBQVE7RUFDUixNQUFNO0VBQ04sT0FBTztFQUNQLE1BQU07RUFDTixTQUFTO0VBRVQsWUFBWTtFQUNaLFFBQVE7RUFDUixTQUFTO0VBQ1QsV0FBVztFQUNYLFFBQVE7RUFDUixnQkFBZ0I7RUFFaEIsWUFBWTtFQUNaLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsZUFBZTs7QUFHVixJQUFNLG1CQUFtQixDQUFDLFFBQXVDO0FBQ3RFLFNBQ0UsT0FBTyxRQUFRLFlBQ2YsUUFBUSxRQUNSLENBQUMsV0FBVyxHQUFHLEtBQ2YsT0FBTyxLQUFLLEdBQUcsRUFBRSxNQUFNLENBQUNPLE9BQU0sT0FBTyxvQkFBb0JBLEVBQUMsQ0FBQztBQUUvRDtBQThCQSxJQUFNLHdCQUF3QixNQUF5Qjs7QUFDckQsTUFBSSxPQUFPLFNBQVMsZUFBZSxLQUFLLFNBQVMsTUFBTTtBQUNyRCxXQUFPO01BQ0wsb0JBQW9CO01BQ3BCLCtCQUErQjtNQUMvQixrQkFBa0Isa0JBQWtCLEtBQUssTUFBTSxFQUFFO01BQ2pELG9CQUFvQixjQUFjLEtBQUssTUFBTSxJQUFJO01BQ2pELHVCQUF1QjtNQUN2QiwrQkFDRSxPQUFPLEtBQUssWUFBWSxXQUFXLEtBQUssV0FBVSxNQUFBYixNQUFBLEtBQUssWUFBTCxnQkFBQUEsSUFBYyxTQUFkLFlBQXNCOzs7QUFHOUUsTUFBSSxPQUFPLGdCQUFnQixhQUFhO0FBQ3RDLFdBQU87TUFDTCxvQkFBb0I7TUFDcEIsK0JBQStCO01BQy9CLGtCQUFrQjtNQUNsQixvQkFBb0IsU0FBUztNQUM3Qix1QkFBdUI7TUFDdkIsK0JBQStCLFFBQVE7OztBQUkzQyxNQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssT0FBTyxZQUFZLGNBQWMsVUFBVSxDQUFDLE1BQU0sb0JBQW9CO0FBQ3ZHLFdBQU87TUFDTCxvQkFBb0I7TUFDcEIsK0JBQStCO01BQy9CLGtCQUFrQixrQkFBa0IsUUFBUSxRQUFRO01BQ3BELG9CQUFvQixjQUFjLFFBQVEsSUFBSTtNQUM5Qyx1QkFBdUI7TUFDdkIsK0JBQStCLFFBQVE7OztBQUkzQyxRQUFNLGNBQWMsZUFBYztBQUNsQyxNQUFJLGFBQWE7QUFDZixXQUFPO01BQ0wsb0JBQW9CO01BQ3BCLCtCQUErQjtNQUMvQixrQkFBa0I7TUFDbEIsb0JBQW9CO01BQ3BCLHVCQUF1QixXQUFXLFlBQVk7TUFDOUMsK0JBQStCLFlBQVk7OztBQUsvQyxTQUFPO0lBQ0wsb0JBQW9CO0lBQ3BCLCtCQUErQjtJQUMvQixrQkFBa0I7SUFDbEIsb0JBQW9CO0lBQ3BCLHVCQUF1QjtJQUN2QiwrQkFBK0I7O0FBRW5DO0FBVUEsU0FBUyxpQkFBYztBQUNyQixNQUFJLE9BQU8sY0FBYyxlQUFlLENBQUMsV0FBVztBQUNsRCxXQUFPOztBQUlULFFBQU0sa0JBQWtCO0lBQ3RCLEVBQUUsS0FBSyxRQUFpQixTQUFTLHVDQUFzQztJQUN2RSxFQUFFLEtBQUssTUFBZSxTQUFTLHVDQUFzQztJQUNyRSxFQUFFLEtBQUssTUFBZSxTQUFTLDZDQUE0QztJQUMzRSxFQUFFLEtBQUssVUFBbUIsU0FBUyx5Q0FBd0M7SUFDM0UsRUFBRSxLQUFLLFdBQW9CLFNBQVMsMENBQXlDO0lBQzdFLEVBQUUsS0FBSyxVQUFtQixTQUFTLG9FQUFtRTs7QUFJeEcsYUFBVyxFQUFFLEtBQUssUUFBTyxLQUFNLGlCQUFpQjtBQUM5QyxVQUFNYyxTQUFRLFFBQVEsS0FBSyxVQUFVLFNBQVM7QUFDOUMsUUFBSUEsUUFBTztBQUNULFlBQU0sUUFBUUEsT0FBTSxDQUFDLEtBQUs7QUFDMUIsWUFBTSxRQUFRQSxPQUFNLENBQUMsS0FBSztBQUMxQixZQUFNLFFBQVFBLE9BQU0sQ0FBQyxLQUFLO0FBRTFCLGFBQU8sRUFBRSxTQUFTLEtBQUssU0FBUyxHQUFHLFNBQVMsU0FBUyxRQUFPOzs7QUFJaEUsU0FBTztBQUNUO0FBRUEsSUFBTSxnQkFBZ0IsQ0FBQyxTQUFzQjtBQUszQyxNQUFJLFNBQVM7QUFBTyxXQUFPO0FBQzNCLE1BQUksU0FBUyxZQUFZLFNBQVM7QUFBTyxXQUFPO0FBQ2hELE1BQUksU0FBUztBQUFPLFdBQU87QUFDM0IsTUFBSSxTQUFTLGFBQWEsU0FBUztBQUFTLFdBQU87QUFDbkQsTUFBSTtBQUFNLFdBQU8sU0FBUztBQUMxQixTQUFPO0FBQ1Q7QUFFQSxJQUFNLG9CQUFvQixDQUFDLGFBQWtDO0FBTzNELGFBQVcsU0FBUyxZQUFXO0FBTS9CLE1BQUksU0FBUyxTQUFTLEtBQUs7QUFBRyxXQUFPO0FBQ3JDLE1BQUksYUFBYTtBQUFXLFdBQU87QUFDbkMsTUFBSSxhQUFhO0FBQVUsV0FBTztBQUNsQyxNQUFJLGFBQWE7QUFBUyxXQUFPO0FBQ2pDLE1BQUksYUFBYTtBQUFXLFdBQU87QUFDbkMsTUFBSSxhQUFhO0FBQVcsV0FBTztBQUNuQyxNQUFJLGFBQWE7QUFBUyxXQUFPO0FBQ2pDLE1BQUk7QUFBVSxXQUFPLFNBQVM7QUFDOUIsU0FBTztBQUNUO0FBRUEsSUFBSTtBQUNKLElBQU0scUJBQXFCLE1BQUs7QUFDOUIsU0FBUSw4Q0FBQSxtQkFBcUIsc0JBQXFCO0FBQ3BEO0FBRU8sSUFBTSxXQUFXLENBQUMsU0FBZ0I7QUFDdkMsTUFBSTtBQUNGLFdBQU8sS0FBSyxNQUFNLElBQUk7V0FDZixLQUFQO0FBQ0EsV0FBTzs7QUFFWDtBQUdBLElBQU0seUJBQXlCO0FBQy9CLElBQU0sZ0JBQWdCLENBQUMsUUFBd0I7QUFDN0MsU0FBTyx1QkFBdUIsS0FBSyxHQUFHO0FBQ3hDO0FBRU8sSUFBTSxRQUFRLENBQUMsT0FBZSxJQUFJLFFBQVEsQ0FBQ1osYUFBWSxXQUFXQSxVQUFTLEVBQUUsQ0FBQztBQUVyRixJQUFNLDBCQUEwQixDQUFDLE1BQWNhLE9BQXNCO0FBQ25FLE1BQUksT0FBT0EsT0FBTSxZQUFZLENBQUMsT0FBTyxVQUFVQSxFQUFDLEdBQUc7QUFDakQsVUFBTSxJQUFJLFlBQVksR0FBRyx5QkFBeUI7O0FBRXBELE1BQUlBLEtBQUksR0FBRztBQUNULFVBQU0sSUFBSSxZQUFZLEdBQUcsaUNBQWlDOztBQUU1RCxTQUFPQTtBQUNUO0FBRU8sSUFBTSxjQUFjLENBQUMsUUFBbUI7QUFDN0MsTUFBSSxlQUFlO0FBQU8sV0FBTztBQUNqQyxNQUFJLE9BQU8sUUFBUSxZQUFZLFFBQVEsTUFBTTtBQUMzQyxRQUFJO0FBQ0YsYUFBTyxJQUFJLE1BQU0sS0FBSyxVQUFVLEdBQUcsQ0FBQzthQUM5Qk4sSUFBTjtJQUFNOztBQUVWLFNBQU8sSUFBSSxNQUFNLEdBQUc7QUFDdEI7QUFjTyxJQUFNLFVBQVUsQ0FBQyxRQUFtQzs7QUFDekQsTUFBSSxPQUFPLFlBQVksYUFBYTtBQUNsQyxZQUFPLFlBQUFPLE1BQUEsUUFBUSxRQUFSLGdCQUFBQSxJQUFjLFNBQWQsbUJBQW9CLFdBQXBCLFlBQThCOztBQUV2QyxNQUFJLE9BQU8sU0FBUyxhQUFhO0FBQy9CLFlBQU8sTUFBQUMsT0FBQSxVQUFLLFFBQUwsbUJBQVUsUUFBVixnQkFBQUEsSUFBQSxTQUFnQixTQUFoQixtQkFBc0I7O0FBRS9CLFNBQU87QUFDVDtBQTRDTSxTQUFVLFdBQVcsS0FBOEI7QUFDdkQsTUFBSSxDQUFDO0FBQUssV0FBTztBQUNqQixhQUFXLE1BQU07QUFBSyxXQUFPO0FBQzdCLFNBQU87QUFDVDtBQUdNLFNBQVUsT0FBTyxLQUFhLEtBQVc7QUFDN0MsU0FBTyxPQUFPLFVBQVUsZUFBZSxLQUFLLEtBQUssR0FBRztBQUN0RDtBQVFBLFNBQVMsZ0JBQWdCLGVBQXdCLFlBQW1CO0FBQ2xFLGFBQVdDLE1BQUssWUFBWTtBQUMxQixRQUFJLENBQUMsT0FBTyxZQUFZQSxFQUFDO0FBQUc7QUFDNUIsVUFBTSxXQUFXQSxHQUFFLFlBQVc7QUFDOUIsUUFBSSxDQUFDO0FBQVU7QUFFZixVQUFNLE1BQU0sV0FBV0EsRUFBQztBQUV4QixRQUFJLFFBQVEsTUFBTTtBQUNoQixhQUFPLGNBQWMsUUFBUTtlQUNwQixRQUFRLFFBQVc7QUFDNUIsb0JBQWMsUUFBUSxJQUFJOzs7QUFHaEM7QUFFQSxJQUFNLG9CQUFvQixvQkFBSSxJQUFJLENBQUMsaUJBQWlCLFNBQVMsQ0FBQztBQUV4RCxTQUFVQyxPQUFNLFdBQW1CLE1BQVc7O0FBQ2xELE1BQUksT0FBTyxZQUFZLGlCQUFlQyxNQUFBLG1DQUFTLFFBQVQsZ0JBQUFBLElBQWUsY0FBYSxRQUFRO0FBQ3hFLFVBQU0sZUFBZSxLQUFLLElBQUksQ0FBQyxRQUFPO0FBQ3BDLFVBQUksQ0FBQyxLQUFLO0FBQ1IsZUFBTzs7QUFJVCxVQUFJLElBQUksU0FBUyxHQUFHO0FBRWxCLGNBQU1DLGVBQWMsRUFBRSxHQUFHLEtBQUssU0FBUyxFQUFFLEdBQUcsSUFBSSxTQUFTLEVBQUMsRUFBRTtBQUU1RCxtQkFBVyxVQUFVLElBQUksU0FBUyxHQUFHO0FBQ25DLGNBQUksa0JBQWtCLElBQUksT0FBTyxZQUFXLENBQUUsR0FBRztBQUMvQyxZQUFBQSxhQUFZLFNBQVMsRUFBRSxNQUFNLElBQUk7OztBQUlyQyxlQUFPQTs7QUFHVCxVQUFJLGNBQWM7QUFHbEIsaUJBQVcsVUFBVSxLQUFLO0FBQ3hCLFlBQUksa0JBQWtCLElBQUksT0FBTyxZQUFXLENBQUUsR0FBRztBQUUvQyw4Q0FBQSxjQUFnQixFQUFFLEdBQUcsSUFBRztBQUN4QixzQkFBWSxNQUFNLElBQUk7OztBQUkxQixhQUFPLG9DQUFlO0lBQ3hCLENBQUM7QUFDRCxZQUFRLElBQUksZ0JBQWdCLFVBQVUsR0FBRyxZQUFZOztBQUV6RDtBQUtBLElBQU0sUUFBUSxNQUFLO0FBQ2pCLFNBQU8sdUNBQXVDLFFBQVEsU0FBUyxDQUFDQyxPQUFLO0FBQ25FLFVBQU1DLEtBQUssS0FBSyxPQUFNLElBQUssS0FBTTtBQUNqQyxVQUFNQyxLQUFJRixPQUFNLE1BQU1DLEtBQUtBLEtBQUksSUFBTztBQUN0QyxXQUFPQyxHQUFFLFNBQVMsRUFBRTtFQUN0QixDQUFDO0FBQ0g7QUFFTyxJQUFNLHFCQUFxQixNQUFLO0FBQ3JDOztJQUVFLE9BQU8sV0FBVztJQUVsQixPQUFPLE9BQU8sYUFBYTtJQUUzQixPQUFPLGNBQWM7O0FBRXpCO0FBT08sSUFBTSxvQkFBb0IsQ0FBQyxZQUE0QztBQUM1RSxTQUFPLFFBQU8sbUNBQVMsU0FBUTtBQUNqQztBQVVPLElBQU0sWUFBWSxDQUFDLFNBQWdDLFdBQXNDOztBQUM5RixRQUFNLG1CQUFtQixPQUFPLFlBQVc7QUFDM0MsTUFBSSxrQkFBa0IsT0FBTyxHQUFHO0FBRTlCLFVBQU0sb0JBQ0pDLE1BQUEsT0FBTyxDQUFDLE1BQVIsZ0JBQUFBLElBQVcsaUJBQ1gsT0FBTyxVQUFVLENBQUMsRUFBRSxRQUFRLGdCQUFnQixDQUFDLElBQUksSUFBSUMsUUFBTyxLQUFLQSxJQUFHLFlBQVcsQ0FBRTtBQUNuRixlQUFXLE9BQU8sQ0FBQyxRQUFRLGtCQUFrQixPQUFPLFlBQVcsR0FBSSxlQUFlLEdBQUc7QUFDbkYsWUFBTSxRQUFRLFFBQVEsSUFBSSxHQUFHO0FBQzdCLFVBQUksT0FBTztBQUNULGVBQU87Ozs7QUFLYixhQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLE9BQU8sR0FBRztBQUNsRCxRQUFJLElBQUksWUFBVyxNQUFPLGtCQUFrQjtBQUMxQyxVQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDeEIsWUFBSSxNQUFNLFVBQVU7QUFBRyxpQkFBTyxNQUFNLENBQUM7QUFDckMsZ0JBQVEsS0FBSyxZQUFZLE1BQU0sMEJBQTBCLHVDQUF1QztBQUNoRyxlQUFPLE1BQU0sQ0FBQzs7QUFFaEIsYUFBTzs7O0FBSVgsU0FBTztBQUNUO0FBa0JNLFNBQVUsTUFBTSxLQUFZO0FBQ2hDLFNBQU8sT0FBTyxRQUFRLE9BQU8sUUFBUSxZQUFZLENBQUMsTUFBTSxRQUFRLEdBQUc7QUFDckU7OztBQ3p2Q00sSUFBTyxPQUFQLGNBQTBCLGFBQWtCO0VBS2hELFlBQVksUUFBbUIsVUFBb0IsTUFBMEIsU0FBNEI7QUFDdkcsVUFBTSxRQUFRLFVBQVUsTUFBTSxPQUFPO0FBRXJDLFNBQUssT0FBTyxLQUFLLFFBQVEsQ0FBQTtBQUN6QixTQUFLLFNBQVMsS0FBSztFQUNyQjtFQUVBLG9CQUFpQjtBQXpCbkIsUUFBQUM7QUEwQkksWUFBT0EsTUFBQSxLQUFLLFNBQUwsT0FBQUEsTUFBYSxDQUFBO0VBQ3RCOzs7Ozs7RUFPQSxpQkFBYztBQUNaLFdBQU87RUFDVDtFQUVBLGVBQVk7QUFDVixXQUFPO0VBQ1Q7O0FBZUksSUFBTyxhQUFQLGNBQ0ksYUFBa0I7RUFPMUIsWUFDRSxRQUNBLFVBQ0EsTUFDQSxTQUE0QjtBQUU1QixVQUFNLFFBQVEsVUFBVSxNQUFNLE9BQU87QUFFckMsU0FBSyxPQUFPLEtBQUssUUFBUSxDQUFBO0FBQ3pCLFNBQUssV0FBVyxLQUFLLFlBQVk7RUFDbkM7RUFFQSxvQkFBaUI7QUEzRW5CLFFBQUFBO0FBNEVJLFlBQU9BLE1BQUEsS0FBSyxTQUFMLE9BQUFBLE1BQWEsQ0FBQTtFQUN0QjtFQUVTLGNBQVc7QUFDbEIsUUFBSSxLQUFLLGFBQWEsT0FBTztBQUMzQixhQUFPOztBQUdULFdBQU8sTUFBTSxZQUFXO0VBQzFCOztFQUdBLGlCQUFjO0FBQ1osVUFBTSxPQUFPLEtBQUssYUFBWTtBQUM5QixRQUFJLENBQUM7QUFBTSxhQUFPO0FBQ2xCLFFBQUksWUFBWTtBQUFNLGFBQU8sS0FBSztBQUNsQyxVQUFNLFNBQVMsT0FBTyxZQUFZLEtBQUssSUFBSSxZQUFZO0FBQ3ZELFFBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQVEsYUFBTztBQUN4QyxXQUFPO0VBQ1Q7RUFFQSxlQUFZO0FBakdkLFFBQUFBO0FBa0dJLFVBQU0sT0FBTyxLQUFLLGtCQUFpQjtBQUNuQyxRQUFJLENBQUMsS0FBSyxRQUFRO0FBQ2hCLGFBQU87O0FBR1QsVUFBTSxNQUFLQSxNQUFBLEtBQUssS0FBSyxTQUFTLENBQUMsTUFBcEIsZ0JBQUFBLElBQXVCO0FBQ2xDLFFBQUksQ0FBQyxJQUFJO0FBQ1AsYUFBTzs7QUFHVCxXQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sR0FBRSxFQUFFO0VBQ2hDOzs7O0FDekdJLElBQU8sY0FBUCxNQUFrQjtFQUd0QixZQUFZLFFBQWM7QUFDeEIsU0FBSyxVQUFVO0VBQ2pCOzs7O0FDQUksSUFBTyxXQUFQLGNBQXdCLFlBQVc7RUFjdkMsS0FDRSxjQUNBLFFBQWlELENBQUEsR0FDakQsU0FBNkI7QUFFN0IsUUFBSSxpQkFBaUIsS0FBSyxHQUFHO0FBQzNCLGFBQU8sS0FBSyxLQUFLLGNBQWMsQ0FBQSxHQUFJLEtBQUs7O0FBRTFDLFdBQU8sS0FBSyxRQUFRLFdBQ2xCLHFCQUFxQix5QkFDckIsaUNBQ0EsRUFBRSxPQUFPLEdBQUcsUUFBTyxDQUFFO0VBRXpCOzs7O0FDdEJJLElBQU8sY0FBUCxjQUEyQixZQUFXO0VBQTVDLGNBQUE7O0FBQ0UsU0FBQSxXQUFpQyxJQUFnQixTQUFTLEtBQUssT0FBTztFQXlGeEU7RUF4REUsT0FDRSxNQUNBLFNBQTZCO0FBbERqQyxRQUFBQztBQW9ESSxXQUFPLEtBQUssUUFBUSxLQUFLLHFCQUFxQixFQUFFLE1BQU0sR0FBRyxTQUFTLFNBQVFBLE1BQUEsS0FBSyxXQUFMLE9BQUFBLE1BQWUsTUFBSyxDQUFFO0VBR2xHOzs7OztFQU1BLFNBQVMsY0FBc0IsU0FBNkI7QUFDMUQsV0FBTyxLQUFLLFFBQVEsSUFBSSxxQkFBcUIsZ0JBQWdCLE9BQU87RUFDdEU7Ozs7OztFQU9BLE9BQ0UsY0FDQSxNQUNBLFNBQTZCO0FBRTdCLFdBQU8sS0FBSyxRQUFRLEtBQUsscUJBQXFCLGdCQUFnQixFQUFFLE1BQU0sR0FBRyxRQUFPLENBQUU7RUFDcEY7RUFXQSxLQUNFLFFBQXdELENBQUEsR0FDeEQsU0FBNkI7QUFFN0IsUUFBSSxpQkFBaUIsS0FBSyxHQUFHO0FBQzNCLGFBQU8sS0FBSyxLQUFLLENBQUEsR0FBSSxLQUFLOztBQUU1QixXQUFPLEtBQUssUUFBUSxXQUFXLHFCQUFxQixxQkFBcUIsRUFBRSxPQUFPLEdBQUcsUUFBTyxDQUFFO0VBQ2hHOzs7OztFQU1BLElBQUksY0FBc0IsU0FBNkI7QUFDckQsV0FBTyxLQUFLLFFBQVEsT0FBTyxxQkFBcUIsZ0JBQWdCLE9BQU87RUFDekU7O0FBR0ksSUFBTyxzQkFBUCxjQUFtQyxXQUEwQjs7QUFFN0QsSUFBTyxrQ0FBUCxjQUErQyxXQUFzQzs7QUFrN0MzRixZQUFZLHNCQUFzQjtBQUNsQyxZQUFZLFdBQVc7OztBQzUrQ2pCLElBQU8sT0FBUCxjQUFvQixZQUFXO0VBQXJDLGNBQUE7O0FBQ0UsU0FBQSxjQUEwQyxJQUFtQixZQUFZLEtBQUssT0FBTztFQUN2Rjs7QUFJQSxLQUFLLGNBQWM7QUFDbkIsS0FBSyxzQkFBc0I7OztBQ3BEckIsSUFBTyxTQUFQLGNBQXNCLFlBQVc7Ozs7RUFJckMsT0FBTyxNQUEwQixTQUE2QjtBQUM1RCxXQUFPLEtBQUssUUFBUSxLQUFLLGlCQUFpQjtNQUN4QztNQUNBLEdBQUc7TUFDSCxTQUFTLEVBQUUsUUFBUSw0QkFBNEIsR0FBRyxtQ0FBUyxRQUFPO01BQ2xFLGtCQUFrQjtLQUNuQjtFQUNIOzs7O0FDVEksSUFBTyxpQkFBUCxjQUE4QixZQUFXO0VBNEI3QyxPQUNFLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsS0FDbEIseUJBQ0ssNEJBQTRCLEVBQUUsTUFBTSxHQUFHLFNBQVMsWUFBWSxFQUFFLE9BQU8sS0FBSyxNQUFLLEVBQUUsQ0FBRSxDQUFDO0VBRTdGOzs7O0FDckNJLElBQU8sZUFBUCxjQUE0QixZQUFXO0VBaUIzQyxPQUNFLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsS0FDbEIsdUJBQ0ssNEJBQTRCLEVBQUUsTUFBTSxHQUFHLFNBQVMsWUFBWSxFQUFFLE9BQU8sS0FBSyxNQUFLLEVBQUUsQ0FBRSxDQUFDO0VBRTdGOzs7O0FDRkksSUFBTyxRQUFQLGNBQXFCLFlBQVc7RUFBdEMsY0FBQTs7QUFDRSxTQUFBLGlCQUFtRCxJQUFzQixlQUFlLEtBQUssT0FBTztBQUNwRyxTQUFBLGVBQTZDLElBQW9CLGFBQWEsS0FBSyxPQUFPO0FBQzFGLFNBQUEsU0FBMkIsSUFBYyxPQUFPLEtBQUssT0FBTztFQUM5RDs7QUFXQSxNQUFNLGlCQUFpQjtBQUN2QixNQUFNLGVBQWU7QUFDckIsTUFBTSxTQUFTOzs7QUN0Q1QsSUFBTyxVQUFQLGNBQXVCLFlBQVc7Ozs7RUFJdEMsT0FBTyxNQUF5QixTQUE2QjtBQUMzRCxXQUFPLEtBQUssUUFBUSxLQUFLLFlBQVksRUFBRSxNQUFNLEdBQUcsUUFBTyxDQUFFO0VBQzNEOzs7O0VBS0EsU0FBUyxTQUFpQixTQUE2QjtBQUNyRCxXQUFPLEtBQUssUUFBUSxJQUFJLFlBQVksV0FBVyxPQUFPO0VBQ3hEO0VBT0EsS0FDRSxRQUErQyxDQUFBLEdBQy9DLFNBQTZCO0FBRTdCLFFBQUksaUJBQWlCLEtBQUssR0FBRztBQUMzQixhQUFPLEtBQUssS0FBSyxDQUFBLEdBQUksS0FBSzs7QUFFNUIsV0FBTyxLQUFLLFFBQVEsV0FBVyxZQUFZLGFBQWEsRUFBRSxPQUFPLEdBQUcsUUFBTyxDQUFFO0VBQy9FOzs7Ozs7RUFPQSxPQUFPLFNBQWlCLFNBQTZCO0FBQ25ELFdBQU8sS0FBSyxRQUFRLEtBQUssWUFBWSxrQkFBa0IsT0FBTztFQUNoRTs7QUFHSSxJQUFPLGNBQVAsY0FBMkIsV0FBaUI7O0FBNk1sRCxRQUFRLGNBQWM7OztBQ2xQaEIsSUFBTyxhQUFQLGNBQTBCLFlBQVc7Ozs7RUFJekMsT0FBTyxNQUE2QixTQUE2QjtBQUMvRCxXQUFPLEtBQUssUUFBUSxLQUFLLGVBQWU7TUFDdEM7TUFDQSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7O0VBS0EsU0FBUyxhQUFxQixTQUE2QjtBQUN6RCxXQUFPLEtBQUssUUFBUSxJQUFJLGVBQWUsZUFBZTtNQUNwRCxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7O0VBS0EsT0FDRSxhQUNBLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsS0FBSyxlQUFlLGVBQWU7TUFDckQ7TUFDQSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIO0VBVUEsS0FDRSxRQUFtRCxDQUFBLEdBQ25ELFNBQTZCO0FBRTdCLFFBQUksaUJBQWlCLEtBQUssR0FBRztBQUMzQixhQUFPLEtBQUssS0FBSyxDQUFBLEdBQUksS0FBSzs7QUFFNUIsV0FBTyxLQUFLLFFBQVEsV0FBVyxlQUFlLGdCQUFnQjtNQUM1RDtNQUNBLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7Ozs7RUFLQSxJQUFJLGFBQXFCLFNBQTZCO0FBQ3BELFdBQU8sS0FBSyxRQUFRLE9BQU8sZUFBZSxlQUFlO01BQ3ZELEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7O0FBR0ksSUFBTyxpQkFBUCxjQUE4QixXQUFxQjs7QUFtNEN6RCxXQUFXLGlCQUFpQjs7O0FDdDRDdEIsU0FBVSw0QkFDZCxJQUFPO0FBRVAsU0FBTyxPQUFRLEdBQVcsVUFBVTtBQUN0Qzs7O0FDNUVPLElBQU0scUJBQXFCLENBQ2hDLFlBQ2tEO0FBQ2xELFVBQU8sbUNBQVMsVUFBUztBQUMzQjtBQUVPLElBQU0sb0JBQW9CLENBQy9CLFlBQ2lEO0FBQ2pELFVBQU8sbUNBQVMsVUFBUztBQUMzQjtBQUVPLElBQU0sZ0JBQWdCLENBQzNCLFlBQzZDO0FBQzdDLFVBQU8sbUNBQVMsVUFBUztBQUMzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyQk0sSUFBTyxjQUFQLE1BQWtCO0VBb0J0QixjQUFBOztBQW5CQSxTQUFBLGFBQThCLElBQUksZ0JBQWU7QUFFakQsa0NBQUEsSUFBQSxNQUFBLE1BQUE7QUFDQSx5Q0FBQSxJQUFBLE1BQXVDLE1BQUs7SUFBRSxDQUFDO0FBQy9DLHdDQUFBLElBQUEsTUFBd0QsTUFBSztJQUFFLENBQUM7QUFFaEUsNEJBQUEsSUFBQSxNQUFBLE1BQUE7QUFDQSxtQ0FBQSxJQUFBLE1BQWlDLE1BQUs7SUFBRSxDQUFDO0FBQ3pDLGtDQUFBLElBQUEsTUFBa0QsTUFBSztJQUFFLENBQUM7QUFFMUQsMkJBQUEsSUFBQSxNQUVJLENBQUEsQ0FBRTtBQUVOLHVCQUFBLElBQUEsTUFBUyxLQUFLO0FBQ2QseUJBQUEsSUFBQSxNQUFXLEtBQUs7QUFDaEIseUJBQUEsSUFBQSxNQUFXLEtBQUs7QUFDaEIsd0NBQUEsSUFBQSxNQUEwQixLQUFLO0FBRzdCLElBQUFDLHdCQUFBLE1BQUksK0JBQXFCLElBQUksUUFBYyxDQUFDQyxVQUFTLFdBQVU7QUFDN0QsTUFBQUQsd0JBQUEsTUFBSSxzQ0FBNEJDLFVBQU8sR0FBQTtBQUN2QyxNQUFBRCx3QkFBQSxNQUFJLHFDQUEyQixRQUFNLEdBQUE7SUFDdkMsQ0FBQyxHQUFDLEdBQUE7QUFFRixJQUFBQSx3QkFBQSxNQUFJLHlCQUFlLElBQUksUUFBYyxDQUFDQyxVQUFTLFdBQVU7QUFDdkQsTUFBQUQsd0JBQUEsTUFBSSxnQ0FBc0JDLFVBQU8sR0FBQTtBQUNqQyxNQUFBRCx3QkFBQSxNQUFJLCtCQUFxQixRQUFNLEdBQUE7SUFDakMsQ0FBQyxHQUFDLEdBQUE7QUFNRixJQUFBRSx3QkFBQSxNQUFJLCtCQUFBLEdBQUEsRUFBbUIsTUFBTSxNQUFLO0lBQUUsQ0FBQztBQUNyQyxJQUFBQSx3QkFBQSxNQUFJLHlCQUFBLEdBQUEsRUFBYSxNQUFNLE1BQUs7SUFBRSxDQUFDO0VBQ2pDO0VBRVUsS0FBb0MsVUFBNEI7QUFHeEUsZUFBVyxNQUFLO0FBQ2QsZUFBUSxFQUFHLEtBQUssTUFBSztBQUNuQixhQUFLLFdBQVU7QUFDZixhQUFLLE1BQU0sS0FBSztNQUNsQixHQUFHQSx3QkFBQSxNQUFJLHdCQUFBLEtBQUEsd0JBQUEsRUFBYyxLQUFLLElBQUksQ0FBQztJQUNqQyxHQUFHLENBQUM7RUFDTjtFQUVVLGFBQVU7QUFDbEIsUUFBSSxLQUFLO0FBQU87QUFDaEIsSUFBQUEsd0JBQUEsTUFBSSxzQ0FBQSxHQUFBLEVBQXlCLEtBQTdCLElBQUk7QUFDSixTQUFLLE1BQU0sU0FBUztFQUN0QjtFQUVBLElBQUksUUFBSztBQUNQLFdBQU9BLHdCQUFBLE1BQUksb0JBQUEsR0FBQTtFQUNiO0VBRUEsSUFBSSxVQUFPO0FBQ1QsV0FBT0Esd0JBQUEsTUFBSSxzQkFBQSxHQUFBO0VBQ2I7RUFFQSxJQUFJLFVBQU87QUFDVCxXQUFPQSx3QkFBQSxNQUFJLHNCQUFBLEdBQUE7RUFDYjtFQUVBLFFBQUs7QUFDSCxTQUFLLFdBQVcsTUFBSztFQUN2Qjs7Ozs7Ozs7RUFTQSxHQUFtQyxPQUFjLFVBQTBDO0FBQ3pGLFVBQU0sWUFDSkEsd0JBQUEsTUFBSSx3QkFBQSxHQUFBLEVBQVksS0FBSyxNQUFNQSx3QkFBQSxNQUFJLHdCQUFBLEdBQUEsRUFBWSxLQUFLLElBQUksQ0FBQTtBQUN0RCxjQUFVLEtBQUssRUFBRSxTQUFRLENBQUU7QUFDM0IsV0FBTztFQUNUOzs7Ozs7OztFQVNBLElBQW9DLE9BQWMsVUFBMEM7QUFDMUYsVUFBTSxZQUFZQSx3QkFBQSxNQUFJLHdCQUFBLEdBQUEsRUFBWSxLQUFLO0FBQ3ZDLFFBQUksQ0FBQztBQUFXLGFBQU87QUFDdkIsVUFBTUMsU0FBUSxVQUFVLFVBQVUsQ0FBQ0MsT0FBTUEsR0FBRSxhQUFhLFFBQVE7QUFDaEUsUUFBSUQsVUFBUztBQUFHLGdCQUFVLE9BQU9BLFFBQU8sQ0FBQztBQUN6QyxXQUFPO0VBQ1Q7Ozs7OztFQU9BLEtBQXFDLE9BQWMsVUFBMEM7QUFDM0YsVUFBTSxZQUNKRCx3QkFBQSxNQUFJLHdCQUFBLEdBQUEsRUFBWSxLQUFLLE1BQU1BLHdCQUFBLE1BQUksd0JBQUEsR0FBQSxFQUFZLEtBQUssSUFBSSxDQUFBO0FBQ3RELGNBQVUsS0FBSyxFQUFFLFVBQVUsTUFBTSxLQUFJLENBQUU7QUFDdkMsV0FBTztFQUNUOzs7Ozs7Ozs7Ozs7RUFhQSxRQUNFLE9BQVk7QUFNWixXQUFPLElBQUksUUFBUSxDQUFDRCxVQUFTLFdBQVU7QUFDckMsTUFBQUQsd0JBQUEsTUFBSSxxQ0FBMkIsTUFBSSxHQUFBO0FBQ25DLFVBQUksVUFBVTtBQUFTLGFBQUssS0FBSyxTQUFTLE1BQU07QUFDaEQsV0FBSyxLQUFLLE9BQU9DLFFBQWM7SUFDakMsQ0FBQztFQUNIO0VBRUEsTUFBTSxPQUFJO0FBQ1IsSUFBQUQsd0JBQUEsTUFBSSxxQ0FBMkIsTUFBSSxHQUFBO0FBQ25DLFVBQU1FLHdCQUFBLE1BQUkseUJBQUEsR0FBQTtFQUNaO0VBeUJBLE1BRUUsVUFDRyxNQUF3QztBQUczQyxRQUFJQSx3QkFBQSxNQUFJLG9CQUFBLEdBQUEsR0FBUztBQUNmOztBQUdGLFFBQUksVUFBVSxPQUFPO0FBQ25CLE1BQUFGLHdCQUFBLE1BQUksb0JBQVUsTUFBSSxHQUFBO0FBQ2xCLE1BQUFFLHdCQUFBLE1BQUksZ0NBQUEsR0FBQSxFQUFtQixLQUF2QixJQUFJOztBQUdOLFVBQU0sWUFBMkRBLHdCQUFBLE1BQUksd0JBQUEsR0FBQSxFQUFZLEtBQUs7QUFDdEYsUUFBSSxXQUFXO0FBQ2IsTUFBQUEsd0JBQUEsTUFBSSx3QkFBQSxHQUFBLEVBQVksS0FBSyxJQUFJLFVBQVUsT0FBTyxDQUFDRSxPQUFNLENBQUNBLEdBQUUsSUFBSTtBQUN4RCxnQkFBVSxRQUFRLENBQUMsRUFBRSxTQUFRLE1BQVksU0FBUyxHQUFJLElBQVksQ0FBQzs7QUFHckUsUUFBSSxVQUFVLFNBQVM7QUFDckIsWUFBTSxRQUFRLEtBQUssQ0FBQztBQUNwQixVQUFJLENBQUNGLHdCQUFBLE1BQUkscUNBQUEsR0FBQSxLQUE0QixFQUFDLHVDQUFXLFNBQVE7QUFDdkQsZ0JBQVEsT0FBTyxLQUFLOztBQUV0QixNQUFBQSx3QkFBQSxNQUFJLHFDQUFBLEdBQUEsRUFBd0IsS0FBNUIsTUFBNkIsS0FBSztBQUNsQyxNQUFBQSx3QkFBQSxNQUFJLCtCQUFBLEdBQUEsRUFBa0IsS0FBdEIsTUFBdUIsS0FBSztBQUM1QixXQUFLLE1BQU0sS0FBSztBQUNoQjs7QUFHRixRQUFJLFVBQVUsU0FBUztBQUdyQixZQUFNLFFBQVEsS0FBSyxDQUFDO0FBQ3BCLFVBQUksQ0FBQ0Esd0JBQUEsTUFBSSxxQ0FBQSxHQUFBLEtBQTRCLEVBQUMsdUNBQVcsU0FBUTtBQU92RCxnQkFBUSxPQUFPLEtBQUs7O0FBRXRCLE1BQUFBLHdCQUFBLE1BQUkscUNBQUEsR0FBQSxFQUF3QixLQUE1QixNQUE2QixLQUFLO0FBQ2xDLE1BQUFBLHdCQUFBLE1BQUksK0JBQUEsR0FBQSxFQUFrQixLQUF0QixNQUF1QixLQUFLO0FBQzVCLFdBQUssTUFBTSxLQUFLOztFQUVwQjtFQUVVLGFBQVU7RUFBVTs7cXhCQTFFYyxPQUFjO0FBQ3hELEVBQUFGLHdCQUFBLE1BQUksc0JBQVksTUFBSSxHQUFBO0FBQ3BCLE1BQUksaUJBQWlCLFNBQVMsTUFBTSxTQUFTLGNBQWM7QUFDekQsWUFBUSxJQUFJLGtCQUFpQjs7QUFFL0IsTUFBSSxpQkFBaUIsbUJBQW1CO0FBQ3RDLElBQUFBLHdCQUFBLE1BQUksc0JBQVksTUFBSSxHQUFBO0FBQ3BCLFdBQU8sS0FBSyxNQUFNLFNBQVMsS0FBSzs7QUFFbEMsTUFBSSxpQkFBaUIsYUFBYTtBQUNoQyxXQUFPLEtBQUssTUFBTSxTQUFTLEtBQUs7O0FBRWxDLE1BQUksaUJBQWlCLE9BQU87QUFDMUIsVUFBTSxjQUEyQixJQUFJLFlBQVksTUFBTSxPQUFPO0FBRTlELGdCQUFZLFFBQVE7QUFDcEIsV0FBTyxLQUFLLE1BQU0sU0FBUyxXQUFXOztBQUV4QyxTQUFPLEtBQUssTUFBTSxTQUFTLElBQUksWUFBWSxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQzNEOzs7QUNuRkksU0FBVSw2QkFDZCxpQkFBb0I7QUFFcEIsVUFBTyxtREFBa0IsZUFBYztBQUN6QztBQW1ETSxTQUFVLG1CQUFtQixNQUFTO0FBQzFDLFVBQU8sNkJBQU8sZUFBYztBQUM5QjtBQUVNLFNBQVUseUJBR2QsWUFBNEIsUUFBYztBQUMxQyxNQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixNQUFNLEdBQUc7QUFDN0MsV0FBTztNQUNMLEdBQUc7TUFDSCxTQUFTLFdBQVcsUUFBUSxJQUFJLENBQUMsWUFBWTtRQUMzQyxHQUFHO1FBQ0gsU0FBUztVQUNQLEdBQUcsT0FBTztVQUNWLFFBQVE7VUFDUixHQUFJLE9BQU8sUUFBUSxhQUNqQjtZQUNFLFlBQVksT0FBTyxRQUFRO2NBRTdCOztRQUVKOzs7QUFJTixTQUFPLG9CQUFvQixZQUFZLE1BQU07QUFDL0M7QUFFTSxTQUFVLG9CQUdkLFlBQTRCLFFBQWM7QUFDMUMsUUFBTSxVQUF3QyxXQUFXLFFBQVEsSUFBSSxDQUFDLFdBQWlDOztBQUNyRyxRQUFJLE9BQU8sa0JBQWtCLFVBQVU7QUFDckMsWUFBTSxJQUFJLHdCQUF1Qjs7QUFHbkMsUUFBSSxPQUFPLGtCQUFrQixrQkFBa0I7QUFDN0MsWUFBTSxJQUFJLCtCQUE4Qjs7QUFHMUMsV0FBTztNQUNMLEdBQUc7TUFDSCxTQUFTO1FBQ1AsR0FBRyxPQUFPO1FBQ1YsR0FBSSxPQUFPLFFBQVEsYUFDakI7VUFDRSxhQUNFLE1BQUFLLE1BQUEsT0FBTyxRQUFRLGVBQWYsZ0JBQUFBLElBQTJCLElBQUksQ0FBQyxhQUFhLGNBQWMsUUFBUSxRQUFRLE9BQTNFLFlBQWlGO1lBRXJGO1FBQ0YsUUFDRSxPQUFPLFFBQVEsV0FBVyxDQUFDLE9BQU8sUUFBUSxVQUN4QyxvQkFBb0IsUUFBUSxPQUFPLFFBQVEsT0FBTyxJQUNsRDs7O0VBR1YsQ0FBQztBQUVELFNBQU8sRUFBRSxHQUFHLFlBQVksUUFBTztBQUNqQztBQUVBLFNBQVMsb0JBR1AsUUFBZ0IsU0FBZTs7QUFDL0IsUUFBSUEsTUFBQSxPQUFPLG9CQUFQLGdCQUFBQSxJQUF3QixVQUFTLGVBQWU7QUFDbEQsV0FBTzs7QUFHVCxRQUFJLFlBQU8sb0JBQVAsbUJBQXdCLFVBQVMsZUFBZTtBQUNsRCxRQUFJLGVBQWUsT0FBTyxpQkFBaUI7QUFDekMsWUFBTSxrQkFBa0IsT0FBTztBQUUvQixhQUFPLGdCQUFnQixVQUFVLE9BQU87O0FBRzFDLFdBQU8sS0FBSyxNQUFNLE9BQU87O0FBRzNCLFNBQU87QUFDVDtBQUVBLFNBQVMsY0FDUCxRQUNBLFVBQXVDOztBQUV2QyxRQUFNLGFBQVlBLE1BQUEsT0FBTyxVQUFQLGdCQUFBQSxJQUFjLEtBQUssQ0FBQ0MsZUFBVzs7QUFBRyxhQUFBRCxNQUFBQyxXQUFVLGFBQVYsZ0JBQUFELElBQW9CLFVBQVMsU0FBUyxTQUFTOztBQUNuRyxTQUFPO0lBQ0wsR0FBRztJQUNILFVBQVU7TUFDUixHQUFHLFNBQVM7TUFDWixrQkFDRSxtQkFBbUIsU0FBUyxJQUFJLFVBQVUsVUFBVSxTQUFTLFNBQVMsU0FBUyxLQUM3RSx1Q0FBVyxTQUFTLFVBQVMsS0FBSyxNQUFNLFNBQVMsU0FBUyxTQUFTLElBQ25FOzs7QUFHVjtBQUVNLFNBQVUsb0JBQ2QsUUFDQSxVQUF1Qzs7QUFFdkMsTUFBSSxDQUFDLFFBQVE7QUFDWCxXQUFPOztBQUdULFFBQU0sYUFBWUEsTUFBQSxPQUFPLFVBQVAsZ0JBQUFBLElBQWMsS0FBSyxDQUFDQyxlQUFXOztBQUFHLGFBQUFELE1BQUFDLFdBQVUsYUFBVixnQkFBQUQsSUFBb0IsVUFBUyxTQUFTLFNBQVM7O0FBQ25HLFNBQU8sbUJBQW1CLFNBQVMsTUFBSyx1Q0FBVyxTQUFTLFdBQVU7QUFDeEU7QUFFTSxTQUFVLHNCQUFzQixRQUFxQzs7QUFDekUsTUFBSSw2QkFBNkIsT0FBTyxlQUFlLEdBQUc7QUFDeEQsV0FBTzs7QUFHVCxVQUNFLE1BQUFBLE1BQUEsT0FBTyxVQUFQLGdCQUFBQSxJQUFjLEtBQ1osQ0FBQ0UsT0FBTSxtQkFBbUJBLEVBQUMsS0FBTUEsR0FBRSxTQUFTLGNBQWNBLEdBQUUsU0FBUyxXQUFXLFVBRGxGLFlBRUs7QUFFVDtBQUVNLFNBQVUsbUJBQW1CLE9BQXVDO0FBQ3hFLGFBQVcsUUFBUSx3QkFBUyxDQUFBLEdBQUk7QUFDOUIsUUFBSSxLQUFLLFNBQVMsWUFBWTtBQUM1QixZQUFNLElBQUksWUFDUiwyRUFBMkUsS0FBSyxRQUFROztBQUk1RixRQUFJLEtBQUssU0FBUyxXQUFXLE1BQU07QUFDakMsWUFBTSxJQUFJLFlBQ1IsU0FBUyxLQUFLLFNBQVMsZ0dBQWdHOzs7QUFJL0g7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hQQSxJQUFNLCtCQUErQjtBQU0vQixJQUFPLCtCQUFQLGNBR0ksWUFBdUI7RUFIakMsY0FBQTs7O0FBSVksU0FBQSxtQkFBb0QsQ0FBQTtBQUM5RCxTQUFBLFdBQXlDLENBQUE7RUFtYzNDO0VBamNZLG1CQUVSLGdCQUE2Qzs7QUFFN0MsU0FBSyxpQkFBaUIsS0FBSyxjQUFjO0FBQ3pDLFNBQUssTUFBTSxrQkFBa0IsY0FBYztBQUMzQyxVQUFNLFdBQVVDLE1BQUEsZUFBZSxRQUFRLENBQUMsTUFBeEIsZ0JBQUFBLElBQTJCO0FBQzNDLFFBQUk7QUFBUyxXQUFLLFlBQVksT0FBcUM7QUFDbkUsV0FBTztFQUNUO0VBRVUsWUFFUixTQUNBLE9BQU8sTUFBSTtBQUVYLFFBQUksRUFBRSxhQUFhO0FBQVUsY0FBUSxVQUFVO0FBRS9DLFNBQUssU0FBUyxLQUFLLE9BQU87QUFFMUIsUUFBSSxNQUFNO0FBQ1IsV0FBSyxNQUFNLFdBQVcsT0FBTztBQUM3QixXQUFLLGtCQUFrQixPQUFPLEtBQUssY0FBYyxPQUFPLE1BQU0sUUFBUSxTQUFTO0FBRTdFLGFBQUssTUFBTSxzQkFBc0IsUUFBUSxPQUFpQjtpQkFDakQsbUJBQW1CLE9BQU8sS0FBSyxRQUFRLGVBQWU7QUFDL0QsYUFBSyxNQUFNLGdCQUFnQixRQUFRLGFBQWE7aUJBQ3ZDLG1CQUFtQixPQUFPLEtBQUssUUFBUSxZQUFZO0FBQzVELG1CQUFXLGFBQWEsUUFBUSxZQUFZO0FBQzFDLGNBQUksVUFBVSxTQUFTLFlBQVk7QUFDakMsaUJBQUssTUFBTSxnQkFBZ0IsVUFBVSxRQUFROzs7OztFQUt2RDs7Ozs7RUFNQSxNQUFNLHNCQUFtQjtBQUN2QixVQUFNLEtBQUssS0FBSTtBQUNmLFVBQU0sYUFBYSxLQUFLLGlCQUFpQixLQUFLLGlCQUFpQixTQUFTLENBQUM7QUFDekUsUUFBSSxDQUFDO0FBQVksWUFBTSxJQUFJLFlBQVksaURBQWlEO0FBQ3hGLFdBQU87RUFDVDs7Ozs7RUFVQSxNQUFNLGVBQVk7QUFDaEIsVUFBTSxLQUFLLEtBQUk7QUFDZixXQUFPQyx3QkFBQSxNQUFJLHlDQUFBLEtBQUEsNkNBQUEsRUFBaUIsS0FBckIsSUFBSTtFQUNiOzs7OztFQTRCQSxNQUFNLGVBQVk7QUFDaEIsVUFBTSxLQUFLLEtBQUk7QUFDZixXQUFPQSx3QkFBQSxNQUFJLHlDQUFBLEtBQUEsNkNBQUEsRUFBaUIsS0FBckIsSUFBSTtFQUNiOzs7OztFQW9CQSxNQUFNLG9CQUFpQjtBQUNyQixVQUFNLEtBQUssS0FBSTtBQUNmLFdBQU9BLHdCQUFBLE1BQUkseUNBQUEsS0FBQSxrREFBQSxFQUFzQixLQUExQixJQUFJO0VBQ2I7RUF5QkEsTUFBTSwwQkFBdUI7QUFDM0IsVUFBTSxLQUFLLEtBQUk7QUFDZixXQUFPQSx3QkFBQSxNQUFJLHlDQUFBLEtBQUEsd0RBQUEsRUFBNEIsS0FBaEMsSUFBSTtFQUNiO0VBa0JBLE1BQU0sYUFBVTtBQUNkLFVBQU0sS0FBSyxLQUFJO0FBQ2YsV0FBT0Esd0JBQUEsTUFBSSx5Q0FBQSxLQUFBLGlEQUFBLEVBQXFCLEtBQXpCLElBQUk7RUFDYjtFQUVBLHFCQUFrQjtBQUNoQixXQUFPLENBQUMsR0FBRyxLQUFLLGdCQUFnQjtFQUNsQztFQUVtQixhQUFVO0FBRzNCLFVBQU0sYUFBYSxLQUFLLGlCQUFpQixLQUFLLGlCQUFpQixTQUFTLENBQUM7QUFDekUsUUFBSTtBQUFZLFdBQUssTUFBTSx1QkFBdUIsVUFBVTtBQUM1RCxVQUFNLGVBQWVBLHdCQUFBLE1BQUkseUNBQUEsS0FBQSw2Q0FBQSxFQUFpQixLQUFyQixJQUFJO0FBQ3pCLFFBQUk7QUFBYyxXQUFLLE1BQU0sZ0JBQWdCLFlBQVk7QUFDekQsVUFBTSxlQUFlQSx3QkFBQSxNQUFJLHlDQUFBLEtBQUEsNkNBQUEsRUFBaUIsS0FBckIsSUFBSTtBQUN6QixRQUFJO0FBQWMsV0FBSyxNQUFNLGdCQUFnQixZQUFZO0FBRXpELFVBQU0sb0JBQW9CQSx3QkFBQSxNQUFJLHlDQUFBLEtBQUEsa0RBQUEsRUFBc0IsS0FBMUIsSUFBSTtBQUM5QixRQUFJO0FBQW1CLFdBQUssTUFBTSxxQkFBcUIsaUJBQWlCO0FBRXhFLFVBQU0sMEJBQTBCQSx3QkFBQSxNQUFJLHlDQUFBLEtBQUEsd0RBQUEsRUFBNEIsS0FBaEMsSUFBSTtBQUNwQyxRQUFJLDJCQUEyQjtBQUFNLFdBQUssTUFBTSwyQkFBMkIsdUJBQXVCO0FBRWxHLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxDQUFDQyxPQUFNQSxHQUFFLEtBQUssR0FBRztBQUM5QyxXQUFLLE1BQU0sY0FBY0Qsd0JBQUEsTUFBSSx5Q0FBQSxLQUFBLGlEQUFBLEVBQXFCLEtBQXpCLElBQUksQ0FBdUI7O0VBRXhEO0VBVVUsTUFBTSxzQkFDZCxRQUNBLFFBQ0EsU0FBNkI7QUFFN0IsVUFBTSxTQUFTLG1DQUFTO0FBQ3hCLFFBQUksUUFBUTtBQUNWLFVBQUksT0FBTztBQUFTLGFBQUssV0FBVyxNQUFLO0FBQ3pDLGFBQU8saUJBQWlCLFNBQVMsTUFBTSxLQUFLLFdBQVcsTUFBSyxDQUFFOztBQUVoRSxJQUFBQSx3QkFBQSxNQUFJLHlDQUFBLEtBQUEsNENBQUEsRUFBZ0IsS0FBcEIsTUFBcUIsTUFBTTtBQUUzQixVQUFNLGlCQUFpQixNQUFNLE9BQU8sS0FBSyxZQUFZLE9BQ25ELEVBQUUsR0FBRyxRQUFRLFFBQVEsTUFBSyxHQUMxQixFQUFFLEdBQUcsU0FBUyxRQUFRLEtBQUssV0FBVyxPQUFNLENBQUU7QUFFaEQsU0FBSyxXQUFVO0FBQ2YsV0FBTyxLQUFLLG1CQUFtQixvQkFBb0IsZ0JBQWdCLE1BQU0sQ0FBQztFQUM1RTtFQUVVLE1BQU0sbUJBQ2QsUUFDQSxRQUNBLFNBQTZCO0FBRTdCLGVBQVcsV0FBVyxPQUFPLFVBQVU7QUFDckMsV0FBSyxZQUFZLFNBQVMsS0FBSzs7QUFFakMsV0FBTyxNQUFNLEtBQUssc0JBQXNCLFFBQVEsUUFBUSxPQUFPO0VBQ2pFO0VBRVUsTUFBTSxjQUNkLFFBQ0EsUUFHQSxTQUF1Qjs7QUFFdkIsVUFBTSxPQUFPO0FBQ2IsVUFBTSxFQUFFLGdCQUFnQixRQUFRLFFBQVEsR0FBRyxXQUFVLElBQUs7QUFDMUQsVUFBTSx1QkFBdUIsT0FBTyxrQkFBa0IsYUFBWSwrQ0FBZTtBQUNqRixVQUFNLEVBQUUscUJBQXFCLDZCQUE0QixJQUFLLFdBQVcsQ0FBQTtBQUV6RSxVQUFNLGtCQUF5RCxDQUFBO0FBQy9ELGVBQVdFLE1BQUssT0FBTyxXQUFXO0FBQ2hDLHNCQUFnQkEsR0FBRSxRQUFRQSxHQUFFLFNBQVMsSUFBSSxJQUFJQTs7QUFHL0MsVUFBTSxZQUFtRCxPQUFPLFVBQVUsSUFDeEUsQ0FBQ0EsUUFBNEM7TUFDM0MsTUFBTUEsR0FBRSxRQUFRQSxHQUFFLFNBQVM7TUFDM0IsWUFBWUEsR0FBRTtNQUNkLGFBQWFBLEdBQUU7TUFDZjtBQUdKLGVBQVcsV0FBVyxPQUFPLFVBQVU7QUFDckMsV0FBSyxZQUFZLFNBQVMsS0FBSzs7QUFHakMsYUFBU0MsS0FBSSxHQUFHQSxLQUFJLG9CQUFvQixFQUFFQSxJQUFHO0FBQzNDLFlBQU0saUJBQWlDLE1BQU0sS0FBSyxzQkFDaEQsUUFDQTtRQUNFLEdBQUc7UUFDSDtRQUNBO1FBQ0EsVUFBVSxDQUFDLEdBQUcsS0FBSyxRQUFRO1NBRTdCLE9BQU87QUFFVCxZQUFNLFdBQVVKLE1BQUEsZUFBZSxRQUFRLENBQUMsTUFBeEIsZ0JBQUFBLElBQTJCO0FBQzNDLFVBQUksQ0FBQyxTQUFTO0FBQ1osY0FBTSxJQUFJLFlBQVksNENBQTRDOztBQUVwRSxVQUFJLENBQUMsUUFBUTtBQUFlO0FBQzVCLFlBQU0sRUFBRSxNQUFNLFdBQVcsS0FBSSxJQUFLLFFBQVE7QUFDMUMsWUFBTSxLQUFLLGdCQUFnQixJQUFJO0FBQy9CLFVBQUksQ0FBQyxJQUFJO0FBQ1AsY0FBTUssV0FBVSwwQkFBMEIsS0FBSyxVQUFVLElBQUksNkJBQTZCLFVBQ3ZGLElBQUksQ0FBQ0YsT0FBTSxLQUFLLFVBQVVBLEdBQUUsSUFBSSxDQUFDLEVBQ2pDLEtBQUssSUFBSTtBQUVaLGFBQUssWUFBWSxFQUFFLE1BQU0sTUFBTSxTQUFBRSxTQUFPLENBQUU7QUFDeEM7aUJBQ1Msd0JBQXdCLHlCQUF5QixNQUFNO0FBQ2hFLGNBQU1BLFdBQVUsMEJBQTBCLEtBQUssVUFBVSxJQUFJLE1BQU0sS0FBSyxVQUN0RSxvQkFBb0I7QUFHdEIsYUFBSyxZQUFZLEVBQUUsTUFBTSxNQUFNLFNBQUFBLFNBQU8sQ0FBRTtBQUN4Qzs7QUFHRixVQUFJO0FBQ0osVUFBSTtBQUNGLGlCQUFTLDRCQUE0QixFQUFFLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxJQUFJO2VBQzNELE9BQVA7QUFDQSxhQUFLLFlBQVk7VUFDZjtVQUNBO1VBQ0EsU0FBUyxpQkFBaUIsUUFBUSxNQUFNLFVBQVUsT0FBTyxLQUFLO1NBQy9EO0FBQ0Q7O0FBSUYsWUFBTSxhQUFhLE1BQU0sR0FBRyxTQUFTLFFBQVEsSUFBSTtBQUNqRCxZQUFNLFVBQVVKLHdCQUFBLE1BQUkseUNBQUEsS0FBQSx5REFBQSxFQUE2QixLQUFqQyxNQUFrQyxVQUFVO0FBRTVELFdBQUssWUFBWSxFQUFFLE1BQU0sTUFBTSxRQUFPLENBQUU7QUFFeEMsVUFBSTtBQUFzQjs7RUFFOUI7RUFFVSxNQUFNLFVBQ2QsUUFDQSxRQUdBLFNBQXVCOztBQUV2QixVQUFNLE9BQU87QUFDYixVQUFNLEVBQUUsY0FBYyxRQUFRLFFBQVEsR0FBRyxXQUFVLElBQUs7QUFDeEQsVUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0IsY0FBWUQsTUFBQSwyQ0FBYSxhQUFiLGdCQUFBQSxJQUF1QjtBQUN2RixVQUFNLEVBQUUscUJBQXFCLDZCQUE0QixJQUFLLFdBQVcsQ0FBQTtBQUd6RSxVQUFNLGFBQWEsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFtQztBQUN0RSxVQUFJLG1CQUFtQixJQUFJLEdBQUc7QUFDNUIsWUFBSSxDQUFDLEtBQUssV0FBVztBQUNuQixnQkFBTSxJQUFJLFlBQVksdUVBQXVFOztBQUcvRixlQUFPO1VBQ0wsTUFBTTtVQUNOLFVBQVU7WUFDUixVQUFVLEtBQUs7WUFDZixNQUFNLEtBQUssU0FBUztZQUNwQixhQUFhLEtBQUssU0FBUyxlQUFlO1lBQzFDLFlBQVksS0FBSyxTQUFTO1lBQzFCLE9BQU8sS0FBSztZQUNaLFFBQVE7Ozs7QUFLZCxhQUFPO0lBQ1QsQ0FBQztBQUVELFVBQU0sa0JBQXlELENBQUE7QUFDL0QsZUFBV0csTUFBSyxZQUFZO0FBQzFCLFVBQUlBLEdBQUUsU0FBUyxZQUFZO0FBQ3pCLHdCQUFnQkEsR0FBRSxTQUFTLFFBQVFBLEdBQUUsU0FBUyxTQUFTLElBQUksSUFBSUEsR0FBRTs7O0FBSXJFLFVBQU0sUUFDSixXQUFXLFNBQ1QsV0FBVyxJQUFJLENBQUNHLE9BQ2RBLEdBQUUsU0FBUyxhQUNUO01BQ0UsTUFBTTtNQUNOLFVBQVU7UUFDUixNQUFNQSxHQUFFLFNBQVMsUUFBUUEsR0FBRSxTQUFTLFNBQVM7UUFDN0MsWUFBWUEsR0FBRSxTQUFTO1FBQ3ZCLGFBQWFBLEdBQUUsU0FBUztRQUN4QixRQUFRQSxHQUFFLFNBQVM7O1FBR3RCQSxFQUFtQyxJQUV2QztBQUVMLGVBQVcsV0FBVyxPQUFPLFVBQVU7QUFDckMsV0FBSyxZQUFZLFNBQVMsS0FBSzs7QUFHakMsYUFBU0YsS0FBSSxHQUFHQSxLQUFJLG9CQUFvQixFQUFFQSxJQUFHO0FBQzNDLFlBQU0saUJBQWlDLE1BQU0sS0FBSyxzQkFDaEQsUUFDQTtRQUNFLEdBQUc7UUFDSDtRQUNBO1FBQ0EsVUFBVSxDQUFDLEdBQUcsS0FBSyxRQUFRO1NBRTdCLE9BQU87QUFFVCxZQUFNLFdBQVUsb0JBQWUsUUFBUSxDQUFDLE1BQXhCLG1CQUEyQjtBQUMzQyxVQUFJLENBQUMsU0FBUztBQUNaLGNBQU0sSUFBSSxZQUFZLDRDQUE0Qzs7QUFFcEUsVUFBSSxHQUFDLGFBQVEsZUFBUixtQkFBb0IsU0FBUTtBQUMvQjs7QUFHRixpQkFBVyxhQUFhLFFBQVEsWUFBWTtBQUMxQyxZQUFJLFVBQVUsU0FBUztBQUFZO0FBQ25DLGNBQU0sZUFBZSxVQUFVO0FBQy9CLGNBQU0sRUFBRSxNQUFNLFdBQVcsS0FBSSxJQUFLLFVBQVU7QUFDNUMsY0FBTSxLQUFLLGdCQUFnQixJQUFJO0FBRS9CLFlBQUksQ0FBQyxJQUFJO0FBQ1AsZ0JBQU1DLFdBQVUsc0JBQXNCLEtBQUssVUFBVSxJQUFJLDZCQUE2QixPQUFPLEtBQzNGLGVBQWUsRUFFZCxJQUFJLENBQUNFLFVBQVMsS0FBSyxVQUFVQSxLQUFJLENBQUMsRUFDbEMsS0FBSyxJQUFJO0FBRVosZUFBSyxZQUFZLEVBQUUsTUFBTSxjQUFjLFNBQUFGLFNBQU8sQ0FBRTtBQUNoRDttQkFDUyx3QkFBd0IseUJBQXlCLE1BQU07QUFDaEUsZ0JBQU1BLFdBQVUsc0JBQXNCLEtBQUssVUFBVSxJQUFJLE1BQU0sS0FBSyxVQUNsRSxvQkFBb0I7QUFHdEIsZUFBSyxZQUFZLEVBQUUsTUFBTSxjQUFjLFNBQUFBLFNBQU8sQ0FBRTtBQUNoRDs7QUFHRixZQUFJO0FBQ0osWUFBSTtBQUNGLG1CQUFTLDRCQUE0QixFQUFFLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxJQUFJO2lCQUMzRCxPQUFQO0FBQ0EsZ0JBQU1BLFdBQVUsaUJBQWlCLFFBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSztBQUNyRSxlQUFLLFlBQVksRUFBRSxNQUFNLGNBQWMsU0FBQUEsU0FBTyxDQUFFO0FBQ2hEOztBQUlGLGNBQU0sYUFBYSxNQUFNLEdBQUcsU0FBUyxRQUFRLElBQUk7QUFDakQsY0FBTSxVQUFVSix3QkFBQSxNQUFJLHlDQUFBLEtBQUEseURBQUEsRUFBNkIsS0FBakMsTUFBa0MsVUFBVTtBQUM1RCxhQUFLLFlBQVksRUFBRSxNQUFNLGNBQWMsUUFBTyxDQUFFO0FBRWhELFlBQUksc0JBQXNCO0FBQ3hCOzs7O0FBS047RUFDRjs7OztBQXZZRSxVQUFPRCxNQUFBQyx3QkFBQSxNQUFJLHlDQUFBLEtBQUEsNkNBQUEsRUFBaUIsS0FBckIsSUFBSSxFQUFvQixZQUF4QixPQUFBRCxNQUFtQztBQUM1QyxHQUFDLGdEQUFBLFNBQUFRLGlEQUFBOztBQVlDLE1BQUlKLEtBQUksS0FBSyxTQUFTO0FBQ3RCLFNBQU9BLE9BQU0sR0FBRztBQUNkLFVBQU0sVUFBVSxLQUFLLFNBQVNBLEVBQUM7QUFDL0IsUUFBSSxtQkFBbUIsT0FBTyxHQUFHO0FBQy9CLFlBQU0sRUFBRSxlQUFlLEdBQUcsS0FBSSxJQUFLO0FBR25DLFlBQU0sTUFBNEM7UUFDaEQsR0FBRztRQUNILFVBQVVKLE1BQUEsUUFBa0MsWUFBbEMsT0FBQUEsTUFBNkM7UUFDdkQsVUFBVSxhQUFrQyxZQUFsQyxZQUE2Qzs7QUFFekQsVUFBSSxlQUFlO0FBQ2pCLFlBQUksZ0JBQWdCOztBQUV0QixhQUFPOzs7QUFHWCxRQUFNLElBQUksWUFBWSw0RUFBNEU7QUFDcEcsR0FBQyxxREFBQSxTQUFBUyxzREFBQTs7QUFZQyxXQUFTTCxLQUFJLEtBQUssU0FBUyxTQUFTLEdBQUdBLE1BQUssR0FBR0EsTUFBSztBQUNsRCxVQUFNLFVBQVUsS0FBSyxTQUFTQSxFQUFDO0FBQy9CLFFBQUksbUJBQW1CLE9BQU8sTUFBSyxtQ0FBUyxnQkFBZTtBQUN6RCxhQUFPLFFBQVE7O0FBRWpCLFFBQUksbUJBQW1CLE9BQU8sT0FBS0osTUFBQSxtQ0FBUyxlQUFULGdCQUFBQSxJQUFxQixTQUFRO0FBQzlELGNBQU8sYUFBUSxXQUFXLEdBQUcsRUFBRSxNQUF4QixtQkFBMkI7OztBQUl0QztBQUNGLEdBQUMsMkRBQUEsU0FBQVUsNERBQUE7QUFZQyxXQUFTTixLQUFJLEtBQUssU0FBUyxTQUFTLEdBQUdBLE1BQUssR0FBR0EsTUFBSztBQUNsRCxVQUFNLFVBQVUsS0FBSyxTQUFTQSxFQUFDO0FBQy9CLFFBQUksa0JBQWtCLE9BQU8sS0FBSyxRQUFRLFdBQVcsTUFBTTtBQUN6RCxhQUFPLFFBQVE7O0FBRWpCLFFBQ0UsY0FBYyxPQUFPLEtBQ3JCLFFBQVEsV0FBVyxRQUNuQixPQUFPLFFBQVEsWUFBWSxZQUMzQixLQUFLLFNBQVMsS0FDWixDQUFDTyxPQUFHOztBQUNGLGFBQUFBLEdBQUUsU0FBUyxpQkFDWFgsTUFBQVcsR0FBRSxlQUFGLGdCQUFBWCxJQUFjLEtBQUssQ0FBQ1ksT0FBTUEsR0FBRSxTQUFTLGNBQWNBLEdBQUUsT0FBTyxRQUFRO0tBQWEsR0FFckY7QUFDQSxhQUFPLFFBQVE7OztBQUluQjtBQUNGLEdBQUMsb0RBQUEsU0FBQUMscURBQUE7QUFRQyxRQUFNLFFBQXlCO0lBQzdCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsY0FBYzs7QUFFaEIsYUFBVyxFQUFFLE1BQUssS0FBTSxLQUFLLGtCQUFrQjtBQUM3QyxRQUFJLE9BQU87QUFDVCxZQUFNLHFCQUFxQixNQUFNO0FBQ2pDLFlBQU0saUJBQWlCLE1BQU07QUFDN0IsWUFBTSxnQkFBZ0IsTUFBTTs7O0FBR2hDLFNBQU87QUFDVCxHQUFDLCtDQUFBLFNBQUFDLDhDQWdDZSxRQUFrQztBQUNoRCxNQUFJLE9BQU8sS0FBSyxRQUFRLE9BQU8sSUFBSSxHQUFHO0FBQ3BDLFVBQU0sSUFBSSxZQUNSLDhIQUE4SDs7QUFHcEksR0FBQyw0REFBQSxTQUFBQywyREF1UDRCLFlBQW1CO0FBQzlDLFNBQ0UsT0FBTyxlQUFlLFdBQVcsYUFDL0IsZUFBZSxTQUFZLGNBQzNCLEtBQUssVUFBVSxVQUFVO0FBRS9COzs7QUN4Y0ksSUFBTyx1QkFBUCxjQUFvRCw2QkFHekQ7O0VBRUMsT0FBTyxhQUNMLFFBQ0EsUUFDQSxTQUF1QjtBQUV2QixVQUFNLFNBQVMsSUFBSSxxQkFBb0I7QUFDdkMsVUFBTUMsUUFBTztNQUNYLEdBQUc7TUFDSCxTQUFTLEVBQUUsR0FBRyxtQ0FBUyxTQUFTLDZCQUE2QixlQUFjOztBQUU3RSxXQUFPLEtBQUssTUFBTSxPQUFPLGNBQWMsUUFBUSxRQUFRQSxLQUFJLENBQUM7QUFDNUQsV0FBTztFQUNUO0VBRUEsT0FBTyxTQUNMLFFBQ0EsUUFDQSxTQUF1QjtBQUV2QixVQUFNLFNBQVMsSUFBSSxxQkFBb0I7QUFDdkMsVUFBTUEsUUFBTztNQUNYLEdBQUc7TUFDSCxTQUFTLEVBQUUsR0FBRyxtQ0FBUyxTQUFTLDZCQUE2QixXQUFVOztBQUV6RSxXQUFPLEtBQUssTUFBTSxPQUFPLFVBQVUsUUFBUSxRQUFRQSxLQUFJLENBQUM7QUFDeEQsV0FBTztFQUNUO0VBRVMsWUFFUCxTQUNBLE9BQWdCLE1BQUk7QUFFcEIsVUFBTSxZQUFZLFNBQVMsSUFBSTtBQUMvQixRQUFJLG1CQUFtQixPQUFPLEtBQUssUUFBUSxTQUFTO0FBQ2xELFdBQUssTUFBTSxXQUFXLFFBQVEsT0FBaUI7O0VBRW5EOzs7O0FDMUVGLElBQU0sTUFBTTtBQUNaLElBQU0sTUFBTTtBQUNaLElBQU0sTUFBTTtBQUNaLElBQU0sTUFBTTtBQUNaLElBQU0sT0FBTztBQUNiLElBQU0sT0FBTztBQUNiLElBQU0sTUFBTTtBQUNaLElBQU0sV0FBVztBQUNqQixJQUFNLGlCQUFpQjtBQUV2QixJQUFNLE1BQU0sV0FBVztBQUN2QixJQUFNLFVBQVUsT0FBTyxPQUFPLE1BQU07QUFDcEMsSUFBTSxPQUFPLE1BQU0sTUFBTTtBQUN6QixJQUFNLGFBQWEsTUFBTTtBQUN6QixJQUFNLE1BQU0sT0FBTztBQUVuQixJQUFNLFFBQVE7RUFDWjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUlGLElBQU0sY0FBTixjQUEwQixNQUFLOztBQUUvQixJQUFNLGdCQUFOLGNBQTRCLE1BQUs7O0FBVWpDLFNBQVNDLFdBQVUsWUFBb0IsZUFBdUIsTUFBTSxLQUFHO0FBQ3JFLE1BQUksT0FBTyxlQUFlLFVBQVU7QUFDbEMsVUFBTSxJQUFJLFVBQVUsc0JBQXNCLE9BQU8sWUFBWTs7QUFFL0QsTUFBSSxDQUFDLFdBQVcsS0FBSSxHQUFJO0FBQ3RCLFVBQU0sSUFBSSxNQUFNLEdBQUcscUJBQXFCOztBQUUxQyxTQUFPLFdBQVcsV0FBVyxLQUFJLEdBQUksWUFBWTtBQUNuRDtBQUVBLElBQU0sYUFBYSxDQUFDLFlBQW9CLFVBQWlCO0FBQ3ZELFFBQU1DLFVBQVMsV0FBVztBQUMxQixNQUFJQyxTQUFRO0FBRVosUUFBTSxrQkFBa0IsQ0FBQyxRQUFlO0FBQ3RDLFVBQU0sSUFBSSxZQUFZLEdBQUcsbUJBQW1CQSxRQUFPO0VBQ3JEO0FBRUEsUUFBTSxzQkFBc0IsQ0FBQyxRQUFlO0FBQzFDLFVBQU0sSUFBSSxjQUFjLEdBQUcsbUJBQW1CQSxRQUFPO0VBQ3ZEO0FBRUEsUUFBTSxXQUFzQixNQUFLO0FBQy9CLGNBQVM7QUFDVCxRQUFJQSxVQUFTRDtBQUFRLHNCQUFnQix5QkFBeUI7QUFDOUQsUUFBSSxXQUFXQyxNQUFLLE1BQU07QUFBSyxhQUFPLFNBQVE7QUFDOUMsUUFBSSxXQUFXQSxNQUFLLE1BQU07QUFBSyxhQUFPLFNBQVE7QUFDOUMsUUFBSSxXQUFXQSxNQUFLLE1BQU07QUFBSyxhQUFPLFNBQVE7QUFDOUMsUUFDRSxXQUFXLFVBQVVBLFFBQU9BLFNBQVEsQ0FBQyxNQUFNLFVBQzFDLE1BQU0sT0FBTyxTQUFTRCxVQUFTQyxTQUFRLEtBQUssT0FBTyxXQUFXLFdBQVcsVUFBVUEsTUFBSyxDQUFDLEdBQzFGO0FBQ0EsTUFBQUEsVUFBUztBQUNULGFBQU87O0FBRVQsUUFDRSxXQUFXLFVBQVVBLFFBQU9BLFNBQVEsQ0FBQyxNQUFNLFVBQzFDLE1BQU0sT0FBTyxTQUFTRCxVQUFTQyxTQUFRLEtBQUssT0FBTyxXQUFXLFdBQVcsVUFBVUEsTUFBSyxDQUFDLEdBQzFGO0FBQ0EsTUFBQUEsVUFBUztBQUNULGFBQU87O0FBRVQsUUFDRSxXQUFXLFVBQVVBLFFBQU9BLFNBQVEsQ0FBQyxNQUFNLFdBQzFDLE1BQU0sT0FBTyxTQUFTRCxVQUFTQyxTQUFRLEtBQUssUUFBUSxXQUFXLFdBQVcsVUFBVUEsTUFBSyxDQUFDLEdBQzNGO0FBQ0EsTUFBQUEsVUFBUztBQUNULGFBQU87O0FBRVQsUUFDRSxXQUFXLFVBQVVBLFFBQU9BLFNBQVEsQ0FBQyxNQUFNLGNBQzFDLE1BQU0sV0FBVyxTQUFTRCxVQUFTQyxTQUFRLEtBQUssV0FBVyxXQUFXLFdBQVcsVUFBVUEsTUFBSyxDQUFDLEdBQ2xHO0FBQ0EsTUFBQUEsVUFBUztBQUNULGFBQU87O0FBRVQsUUFDRSxXQUFXLFVBQVVBLFFBQU9BLFNBQVEsQ0FBQyxNQUFNLGVBQzFDLE1BQU0saUJBQWlCLFNBQ3RCLElBQUlELFVBQVNDLFVBQ2JELFVBQVNDLFNBQVEsS0FDakIsWUFBWSxXQUFXLFdBQVcsVUFBVUEsTUFBSyxDQUFDLEdBQ3BEO0FBQ0EsTUFBQUEsVUFBUztBQUNULGFBQU87O0FBRVQsUUFDRSxXQUFXLFVBQVVBLFFBQU9BLFNBQVEsQ0FBQyxNQUFNLFNBQzFDLE1BQU0sTUFBTSxTQUFTRCxVQUFTQyxTQUFRLEtBQUssTUFBTSxXQUFXLFdBQVcsVUFBVUEsTUFBSyxDQUFDLEdBQ3hGO0FBQ0EsTUFBQUEsVUFBUztBQUNULGFBQU87O0FBRVQsV0FBTyxTQUFRO0VBQ2pCO0FBRUEsUUFBTSxXQUF5QixNQUFLO0FBQ2xDLFVBQU1DLFNBQVFEO0FBQ2QsUUFBSUUsVUFBUztBQUNiLElBQUFGO0FBQ0EsV0FBT0EsU0FBUUQsWUFBVyxXQUFXQyxNQUFLLE1BQU0sT0FBUUUsV0FBVSxXQUFXRixTQUFRLENBQUMsTUFBTSxPQUFRO0FBQ2xHLE1BQUFFLFVBQVMsV0FBV0YsTUFBSyxNQUFNLE9BQU8sQ0FBQ0UsVUFBUztBQUNoRCxNQUFBRjs7QUFFRixRQUFJLFdBQVcsT0FBT0EsTUFBSyxLQUFLLEtBQUs7QUFDbkMsVUFBSTtBQUNGLGVBQU8sS0FBSyxNQUFNLFdBQVcsVUFBVUMsUUFBTyxFQUFFRCxTQUFRLE9BQU9FLE9BQU0sQ0FBQyxDQUFDO2VBQ2hFQyxJQUFQO0FBQ0EsNEJBQW9CLE9BQU9BLEVBQUMsQ0FBQzs7ZUFFdEIsTUFBTSxNQUFNLE9BQU87QUFDNUIsVUFBSTtBQUNGLGVBQU8sS0FBSyxNQUFNLFdBQVcsVUFBVUYsUUFBT0QsU0FBUSxPQUFPRSxPQUFNLENBQUMsSUFBSSxHQUFHO2VBQ3BFQyxJQUFQO0FBRUEsZUFBTyxLQUFLLE1BQU0sV0FBVyxVQUFVRixRQUFPLFdBQVcsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHOzs7QUFHckYsb0JBQWdCLDZCQUE2QjtFQUMvQztBQUVBLFFBQU0sV0FBVyxNQUFLO0FBQ3BCLElBQUFEO0FBQ0EsY0FBUztBQUNULFVBQU0sTUFBMkIsQ0FBQTtBQUNqQyxRQUFJO0FBQ0YsYUFBTyxXQUFXQSxNQUFLLE1BQU0sS0FBSztBQUNoQyxrQkFBUztBQUNULFlBQUlBLFVBQVNELFdBQVUsTUFBTSxNQUFNO0FBQU8saUJBQU87QUFDakQsY0FBTSxNQUFNLFNBQVE7QUFDcEIsa0JBQVM7QUFDVCxRQUFBQztBQUNBLFlBQUk7QUFDRixnQkFBTSxRQUFRLFNBQVE7QUFDdEIsaUJBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFPLFVBQVUsTUFBTSxZQUFZLE1BQU0sY0FBYyxLQUFJLENBQUU7aUJBQ3hGRyxJQUFQO0FBQ0EsY0FBSSxNQUFNLE1BQU07QUFBTyxtQkFBTzs7QUFDekIsa0JBQU1BOztBQUViLGtCQUFTO0FBQ1QsWUFBSSxXQUFXSCxNQUFLLE1BQU07QUFBSyxVQUFBQTs7YUFFMUJHLElBQVA7QUFDQSxVQUFJLE1BQU0sTUFBTTtBQUFPLGVBQU87O0FBQ3pCLHdCQUFnQiwrQkFBK0I7O0FBRXRELElBQUFIO0FBQ0EsV0FBTztFQUNUO0FBRUEsUUFBTSxXQUFXLE1BQUs7QUFDcEIsSUFBQUE7QUFDQSxVQUFNLE1BQU0sQ0FBQTtBQUNaLFFBQUk7QUFDRixhQUFPLFdBQVdBLE1BQUssTUFBTSxLQUFLO0FBQ2hDLFlBQUksS0FBSyxTQUFRLENBQUU7QUFDbkIsa0JBQVM7QUFDVCxZQUFJLFdBQVdBLE1BQUssTUFBTSxLQUFLO0FBQzdCLFVBQUFBOzs7YUFHR0csSUFBUDtBQUNBLFVBQUksTUFBTSxNQUFNLE9BQU87QUFDckIsZUFBTzs7QUFFVCxzQkFBZ0IsOEJBQThCOztBQUVoRCxJQUFBSDtBQUNBLFdBQU87RUFDVDtBQUVBLFFBQU0sV0FBVyxNQUFLO0FBQ3BCLFFBQUlBLFdBQVUsR0FBRztBQUNmLFVBQUksZUFBZSxPQUFPLE1BQU0sTUFBTTtBQUFPLHdCQUFnQixzQkFBc0I7QUFDbkYsVUFBSTtBQUNGLGVBQU8sS0FBSyxNQUFNLFVBQVU7ZUFDckJHLElBQVA7QUFDQSxZQUFJLE1BQU0sTUFBTSxPQUFPO0FBQ3JCLGNBQUk7QUFDRixnQkFBSSxRQUFRLFdBQVcsV0FBVyxTQUFTLENBQUM7QUFDMUMscUJBQU8sS0FBSyxNQUFNLFdBQVcsVUFBVSxHQUFHLFdBQVcsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN4RSxtQkFBTyxLQUFLLE1BQU0sV0FBVyxVQUFVLEdBQUcsV0FBVyxZQUFZLEdBQUcsQ0FBQyxDQUFDO21CQUMvREEsSUFBUDtVQUFVOztBQUVkLDRCQUFvQixPQUFPQSxFQUFDLENBQUM7OztBQUlqQyxVQUFNRixTQUFRRDtBQUVkLFFBQUksV0FBV0EsTUFBSyxNQUFNO0FBQUssTUFBQUE7QUFDL0IsV0FBTyxXQUFXQSxNQUFLLEtBQUssQ0FBQyxNQUFNLFNBQVMsV0FBV0EsTUFBSyxDQUFFO0FBQUcsTUFBQUE7QUFFakUsUUFBSUEsVUFBU0QsV0FBVSxFQUFFLE1BQU0sTUFBTTtBQUFRLHNCQUFnQiw2QkFBNkI7QUFFMUYsUUFBSTtBQUNGLGFBQU8sS0FBSyxNQUFNLFdBQVcsVUFBVUUsUUFBT0QsTUFBSyxDQUFDO2FBQzdDRyxJQUFQO0FBQ0EsVUFBSSxXQUFXLFVBQVVGLFFBQU9ELE1BQUssTUFBTSxPQUFPLE1BQU0sTUFBTTtBQUM1RCx3QkFBZ0Isc0JBQXNCO0FBQ3hDLFVBQUk7QUFDRixlQUFPLEtBQUssTUFBTSxXQUFXLFVBQVVDLFFBQU8sV0FBVyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2VBQ25FRSxJQUFQO0FBQ0EsNEJBQW9CLE9BQU9BLEVBQUMsQ0FBQzs7O0VBR25DO0FBRUEsUUFBTSxZQUFZLE1BQUs7QUFDckIsV0FBT0gsU0FBUUQsV0FBVSxTQUFVLFNBQVMsV0FBV0MsTUFBSyxDQUFFLEdBQUc7QUFDL0QsTUFBQUE7O0VBRUo7QUFFQSxTQUFPLFNBQVE7QUFDakI7QUFHQSxJQUFNLGVBQWUsQ0FBQyxVQUFrQkYsV0FBVSxPQUFPLE1BQU0sTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNySHhFLElBQU8sdUJBQVAsY0FDSSw2QkFBMEU7RUFPbEYsWUFBWSxRQUF5QztBQUNuRCxVQUFLOztBQUxQLGlDQUFBLElBQUEsTUFBQSxNQUFBO0FBQ0EsNENBQUEsSUFBQSxNQUFBLE1BQUE7QUFDQSx3REFBQSxJQUFBLE1BQUEsTUFBQTtBQUlFLElBQUFNLHdCQUFBLE1BQUksOEJBQVcsUUFBTSxHQUFBO0FBQ3JCLElBQUFBLHdCQUFBLE1BQUkseUNBQXNCLENBQUEsR0FBRSxHQUFBO0VBQzlCO0VBRUEsSUFBSSxnQ0FBNkI7QUFDL0IsV0FBT0MseUJBQUEsTUFBSSxxREFBQSxHQUFBO0VBQ2I7Ozs7Ozs7O0VBU0EsT0FBTyxtQkFBbUIsUUFBc0I7QUFDOUMsVUFBTSxTQUFTLElBQUkscUJBQXFCLElBQUk7QUFDNUMsV0FBTyxLQUFLLE1BQU0sT0FBTyxvQkFBb0IsTUFBTSxDQUFDO0FBQ3BELFdBQU87RUFDVDtFQUVBLE9BQU8scUJBQ0wsUUFDQSxRQUNBLFNBQTZCO0FBRTdCLFVBQU0sU0FBUyxJQUFJLHFCQUE4QixNQUE2QztBQUM5RixXQUFPLEtBQUssTUFDVixPQUFPLG1CQUNMLFFBQ0EsRUFBRSxHQUFHLFFBQVEsUUFBUSxLQUFJLEdBQ3pCLEVBQUUsR0FBRyxTQUFTLFNBQVMsRUFBRSxHQUFHLG1DQUFTLFNBQVMsNkJBQTZCLFNBQVEsRUFBRSxDQUFFLENBQ3hGO0FBRUgsV0FBTztFQUNUO0VBb01tQixNQUFNLHNCQUN2QixRQUNBLFFBQ0EsU0FBNkI7O0FBRTdCLFVBQU07QUFDTixVQUFNLFNBQVMsbUNBQVM7QUFDeEIsUUFBSSxRQUFRO0FBQ1YsVUFBSSxPQUFPO0FBQVMsYUFBSyxXQUFXLE1BQUs7QUFDekMsYUFBTyxpQkFBaUIsU0FBUyxNQUFNLEtBQUssV0FBVyxNQUFLLENBQUU7O0FBRWhFLElBQUFBLHlCQUFBLE1BQUksaUNBQUEsS0FBQSxrQ0FBQSxFQUFjLEtBQWxCLElBQUk7QUFFSixVQUFNLFNBQVMsTUFBTSxPQUFPLEtBQUssWUFBWSxPQUMzQyxFQUFFLEdBQUcsUUFBUSxRQUFRLEtBQUksR0FDekIsRUFBRSxHQUFHLFNBQVMsUUFBUSxLQUFLLFdBQVcsT0FBTSxDQUFFO0FBRWhELFNBQUssV0FBVTtBQUNmLHFCQUFpQixTQUFTLFFBQVE7QUFDaEMsTUFBQUEseUJBQUEsTUFBSSxpQ0FBQSxLQUFBLDhCQUFBLEVBQVUsS0FBZCxNQUFlLEtBQUs7O0FBRXRCLFNBQUlDLE1BQUEsT0FBTyxXQUFXLFdBQWxCLGdCQUFBQSxJQUEwQixTQUFTO0FBQ3JDLFlBQU0sSUFBSSxrQkFBaUI7O0FBRTdCLFdBQU8sS0FBSyxtQkFBbUJELHlCQUFBLE1BQUksaUNBQUEsS0FBQSxnQ0FBQSxFQUFZLEtBQWhCLElBQUksQ0FBYztFQUNuRDtFQUVVLE1BQU0sb0JBQ2QsZ0JBQ0EsU0FBNkI7O0FBRTdCLFVBQU0sU0FBUyxtQ0FBUztBQUN4QixRQUFJLFFBQVE7QUFDVixVQUFJLE9BQU87QUFBUyxhQUFLLFdBQVcsTUFBSztBQUN6QyxhQUFPLGlCQUFpQixTQUFTLE1BQU0sS0FBSyxXQUFXLE1BQUssQ0FBRTs7QUFFaEUsSUFBQUEseUJBQUEsTUFBSSxpQ0FBQSxLQUFBLGtDQUFBLEVBQWMsS0FBbEIsSUFBSTtBQUNKLFNBQUssV0FBVTtBQUNmLFVBQU0sU0FBUyxPQUFPLG1CQUF3QyxnQkFBZ0IsS0FBSyxVQUFVO0FBQzdGLFFBQUk7QUFDSixxQkFBaUIsU0FBUyxRQUFRO0FBQ2hDLFVBQUksVUFBVSxXQUFXLE1BQU0sSUFBSTtBQUVqQyxhQUFLLG1CQUFtQkEseUJBQUEsTUFBSSxpQ0FBQSxLQUFBLGdDQUFBLEVBQVksS0FBaEIsSUFBSSxDQUFjOztBQUc1QyxNQUFBQSx5QkFBQSxNQUFJLGlDQUFBLEtBQUEsOEJBQUEsRUFBVSxLQUFkLE1BQWUsS0FBSztBQUNwQixlQUFTLE1BQU07O0FBRWpCLFNBQUlDLE1BQUEsT0FBTyxXQUFXLFdBQWxCLGdCQUFBQSxJQUEwQixTQUFTO0FBQ3JDLFlBQU0sSUFBSSxrQkFBaUI7O0FBRTdCLFdBQU8sS0FBSyxtQkFBbUJELHlCQUFBLE1BQUksaUNBQUEsS0FBQSxnQ0FBQSxFQUFZLEtBQWhCLElBQUksQ0FBYztFQUNuRDtFQXVIQSxFQUFBLCtCQUFBLG9CQUFBLFFBQUEsR0FBQSwwQ0FBQSxvQkFBQSxRQUFBLEdBQUEsc0RBQUEsb0JBQUEsUUFBQSxHQUFBLGtDQUFBLG9CQUFBLFFBQUEsR0FBQSxxQ0FBQSxTQUFBRSxzQ0FBQTtBQTdXRSxRQUFJLEtBQUs7QUFBTztBQUNoQixJQUFBSCx3QkFBQSxNQUFJLHFEQUFrQyxRQUFTLEdBQUE7RUFDakQsR0FBQyw0Q0FBQSxTQUFBSSwyQ0FFb0IsUUFBcUM7QUFDeEQsUUFBSSxRQUFRSCx5QkFBQSxNQUFJLHlDQUFBLEdBQUEsRUFBb0IsT0FBTyxLQUFLO0FBQ2hELFFBQUksT0FBTztBQUNULGFBQU87O0FBR1QsWUFBUTtNQUNOLGNBQWM7TUFDZCxjQUFjO01BQ2QsdUJBQXVCO01BQ3ZCLHVCQUF1QjtNQUN2QixpQkFBaUIsb0JBQUksSUFBRztNQUN4Qix5QkFBeUI7O0FBRTNCLElBQUFBLHlCQUFBLE1BQUkseUNBQUEsR0FBQSxFQUFvQixPQUFPLEtBQUssSUFBSTtBQUN4QyxXQUFPO0VBQ1QsR0FBQyxpQ0FBQSxTQUFBSSxnQ0FFOEMsT0FBMEI7O0FBQ3ZFLFFBQUksS0FBSztBQUFPO0FBRWhCLFVBQU0sYUFBYUoseUJBQUEsTUFBSSxpQ0FBQSxLQUFBLDhDQUFBLEVBQTBCLEtBQTlCLE1BQStCLEtBQUs7QUFDdkQsU0FBSyxNQUFNLFNBQVMsT0FBTyxVQUFVO0FBRXJDLGVBQVcsVUFBVSxNQUFNLFNBQVM7QUFDbEMsWUFBTSxpQkFBaUIsV0FBVyxRQUFRLE9BQU8sS0FBSztBQUV0RCxVQUNFLE9BQU8sTUFBTSxXQUFXLFVBQ3hCQyxNQUFBLGVBQWUsWUFBZixnQkFBQUEsSUFBd0IsVUFBUyxpQkFDakMsb0JBQWUsWUFBZixtQkFBd0IsVUFDeEI7QUFDQSxhQUFLLE1BQU0sV0FBVyxPQUFPLE1BQU0sU0FBUyxlQUFlLFFBQVEsT0FBTztBQUMxRSxhQUFLLE1BQU0saUJBQWlCO1VBQzFCLE9BQU8sT0FBTyxNQUFNO1VBQ3BCLFVBQVUsZUFBZSxRQUFRO1VBQ2pDLFFBQVEsZUFBZSxRQUFRO1NBQ2hDOztBQUdILFVBQ0UsT0FBTyxNQUFNLFdBQVcsVUFDeEIsb0JBQWUsWUFBZixtQkFBd0IsVUFBUyxpQkFDakMsb0JBQWUsWUFBZixtQkFBd0IsVUFDeEI7QUFDQSxhQUFLLE1BQU0saUJBQWlCO1VBQzFCLE9BQU8sT0FBTyxNQUFNO1VBQ3BCLFVBQVUsZUFBZSxRQUFRO1NBQ2xDOztBQUdILFlBQUlJLE1BQUEsT0FBTyxhQUFQLGdCQUFBQSxJQUFpQixZQUFXLFVBQVEsb0JBQWUsWUFBZixtQkFBd0IsVUFBUyxhQUFhO0FBQ3BGLGFBQUssTUFBTSwwQkFBMEI7VUFDbkMsVUFBUyxZQUFPLGFBQVAsbUJBQWlCO1VBQzFCLFdBQVUsMEJBQWUsYUFBZixtQkFBeUIsWUFBekIsWUFBb0MsQ0FBQTtTQUMvQzs7QUFHSCxZQUFJLFlBQU8sYUFBUCxtQkFBaUIsWUFBVyxVQUFRLG9CQUFlLFlBQWYsbUJBQXdCLFVBQVMsYUFBYTtBQUNwRixhQUFLLE1BQU0sMEJBQTBCO1VBQ25DLFVBQVMsWUFBTyxhQUFQLG1CQUFpQjtVQUMxQixXQUFVLDBCQUFlLGFBQWYsbUJBQXlCLFlBQXpCLFlBQW9DLENBQUE7U0FDL0M7O0FBR0gsWUFBTSxRQUFRTCx5QkFBQSxNQUFJLGlDQUFBLEtBQUEseUNBQUEsRUFBcUIsS0FBekIsTUFBMEIsY0FBYztBQUV0RCxVQUFJLGVBQWUsZUFBZTtBQUNoQyxRQUFBQSx5QkFBQSxNQUFJLGlDQUFBLEtBQUEsMkNBQUEsRUFBdUIsS0FBM0IsTUFBNEIsY0FBYztBQUUxQyxZQUFJLE1BQU0sMkJBQTJCLE1BQU07QUFDekMsVUFBQUEseUJBQUEsTUFBSSxpQ0FBQSxLQUFBLDJDQUFBLEVBQXVCLEtBQTNCLE1BQTRCLGdCQUFnQixNQUFNLHVCQUF1Qjs7O0FBSTdFLGlCQUFXLGFBQVksWUFBTyxNQUFNLGVBQWIsWUFBMkIsQ0FBQSxHQUFJO0FBQ3BELFlBQUksTUFBTSw0QkFBNEIsU0FBUyxPQUFPO0FBQ3BELFVBQUFBLHlCQUFBLE1BQUksaUNBQUEsS0FBQSwyQ0FBQSxFQUF1QixLQUEzQixNQUE0QixjQUFjO0FBRzFDLGNBQUksTUFBTSwyQkFBMkIsTUFBTTtBQUN6QyxZQUFBQSx5QkFBQSxNQUFJLGlDQUFBLEtBQUEsMkNBQUEsRUFBdUIsS0FBM0IsTUFBNEIsZ0JBQWdCLE1BQU0sdUJBQXVCOzs7QUFJN0UsY0FBTSwwQkFBMEIsU0FBUzs7QUFHM0MsaUJBQVcsa0JBQWlCLFlBQU8sTUFBTSxlQUFiLFlBQTJCLENBQUEsR0FBSTtBQUN6RCxjQUFNLG9CQUFtQixvQkFBZSxRQUFRLGVBQXZCLG1CQUFvQyxjQUFjO0FBQzNFLFlBQUksRUFBQyxxREFBa0IsT0FBTTtBQUMzQjs7QUFHRixhQUFJLHFEQUFrQixVQUFTLFlBQVk7QUFDekMsZUFBSyxNQUFNLHVDQUF1QztZQUNoRCxPQUFNTSxNQUFBLGlCQUFpQixhQUFqQixnQkFBQUEsSUFBMkI7WUFDakMsT0FBTyxjQUFjO1lBQ3JCLFdBQVcsaUJBQWlCLFNBQVM7WUFDckMsa0JBQWtCLGlCQUFpQixTQUFTO1lBQzVDLGtCQUFpQkMsT0FBQSxtQkFBYyxhQUFkLG1CQUF3QixjQUF4QixPQUFBQSxNQUFxQztXQUN2RDtlQUNJO0FBQ0wsc0JBQVkscURBQWtCLElBQUk7Ozs7RUFJMUMsR0FBQyw4Q0FBQSxTQUFBQyw2Q0FFc0IsZ0JBQStDLGVBQXFCOztBQUN6RixVQUFNLFFBQVFSLHlCQUFBLE1BQUksaUNBQUEsS0FBQSx5Q0FBQSxFQUFxQixLQUF6QixNQUEwQixjQUFjO0FBQ3RELFFBQUksTUFBTSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUc7QUFFNUM7O0FBR0YsVUFBTSxvQkFBbUJDLE1BQUEsZUFBZSxRQUFRLGVBQXZCLGdCQUFBQSxJQUFvQztBQUM3RCxRQUFJLENBQUMsa0JBQWtCO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLHVCQUF1Qjs7QUFFekMsUUFBSSxDQUFDLGlCQUFpQixNQUFNO0FBQzFCLFlBQU0sSUFBSSxNQUFNLG1DQUFtQzs7QUFHckQsUUFBSSxpQkFBaUIsU0FBUyxZQUFZO0FBQ3hDLFlBQU0sYUFBWSxXQUFBRCx5QkFBQSxNQUFJLDhCQUFBLEdBQUEsTUFBSixtQkFBYyxVQUFkLG1CQUFxQixLQUNyQyxDQUFDLFNBQVMsS0FBSyxTQUFTLGNBQWMsS0FBSyxTQUFTLFNBQVMsaUJBQWlCLFNBQVM7QUFHekYsV0FBSyxNQUFNLHNDQUFzQztRQUMvQyxNQUFNLGlCQUFpQixTQUFTO1FBQ2hDLE9BQU87UUFDUCxXQUFXLGlCQUFpQixTQUFTO1FBQ3JDLGtCQUNFLG1CQUFtQixTQUFTLElBQUksVUFBVSxVQUFVLGlCQUFpQixTQUFTLFNBQVMsS0FDckYsdUNBQVcsU0FBUyxVQUFTLEtBQUssTUFBTSxpQkFBaUIsU0FBUyxTQUFTLElBQzNFO09BQ0w7V0FDSTtBQUNMLGtCQUFZLGlCQUFpQixJQUFJOztFQUVyQyxHQUFDLDhDQUFBLFNBQUFTLDZDQUVzQixnQkFBNkM7O0FBQ2xFLFVBQU0sUUFBUVQseUJBQUEsTUFBSSxpQ0FBQSxLQUFBLHlDQUFBLEVBQXFCLEtBQXpCLE1BQTBCLGNBQWM7QUFFdEQsUUFBSSxlQUFlLFFBQVEsV0FBVyxDQUFDLE1BQU0sY0FBYztBQUN6RCxZQUFNLGVBQWU7QUFFckIsWUFBTSxpQkFBaUJBLHlCQUFBLE1BQUksaUNBQUEsS0FBQSxvREFBQSxFQUFnQyxLQUFwQyxJQUFJO0FBRTNCLFdBQUssTUFBTSxnQkFBZ0I7UUFDekIsU0FBUyxlQUFlLFFBQVE7UUFDaEMsUUFBUSxpQkFBaUIsZUFBZSxVQUFVLGVBQWUsUUFBUSxPQUFPLElBQUs7T0FDdEY7O0FBR0gsUUFBSSxlQUFlLFFBQVEsV0FBVyxDQUFDLE1BQU0sY0FBYztBQUN6RCxZQUFNLGVBQWU7QUFFckIsV0FBSyxNQUFNLGdCQUFnQixFQUFFLFNBQVMsZUFBZSxRQUFRLFFBQU8sQ0FBRTs7QUFHeEUsVUFBSUMsTUFBQSxlQUFlLGFBQWYsZ0JBQUFBLElBQXlCLFlBQVcsQ0FBQyxNQUFNLHVCQUF1QjtBQUNwRSxZQUFNLHdCQUF3QjtBQUU5QixXQUFLLE1BQU0seUJBQXlCLEVBQUUsU0FBUyxlQUFlLFNBQVMsUUFBTyxDQUFFOztBQUdsRixVQUFJLG9CQUFlLGFBQWYsbUJBQXlCLFlBQVcsQ0FBQyxNQUFNLHVCQUF1QjtBQUNwRSxZQUFNLHdCQUF3QjtBQUU5QixXQUFLLE1BQU0seUJBQXlCLEVBQUUsU0FBUyxlQUFlLFNBQVMsUUFBTyxDQUFFOztFQUVwRixHQUFDLG1DQUFBLFNBQUFTLG9DQUFBO0FBR0MsUUFBSSxLQUFLLE9BQU87QUFDZCxZQUFNLElBQUksWUFBWSx5Q0FBeUM7O0FBRWpFLFVBQU0sV0FBV1YseUJBQUEsTUFBSSxxREFBQSxHQUFBO0FBQ3JCLFFBQUksQ0FBQyxVQUFVO0FBQ2IsWUFBTSxJQUFJLFlBQVksMENBQTBDOztBQUVsRSxJQUFBRCx3QkFBQSxNQUFJLHFEQUFrQyxRQUFTLEdBQUE7QUFDL0MsSUFBQUEsd0JBQUEsTUFBSSx5Q0FBc0IsQ0FBQSxHQUFFLEdBQUE7QUFDNUIsV0FBTyx1QkFBdUIsVUFBVUMseUJBQUEsTUFBSSw4QkFBQSxHQUFBLENBQVE7RUFDdEQsR0FBQyx1REFBQSxTQUFBVyx3REFBQTs7QUEwREMsVUFBTSxrQkFBaUJWLE1BQUFELHlCQUFBLE1BQUksOEJBQUEsR0FBQSxNQUFKLGdCQUFBQyxJQUFjO0FBQ3JDLFFBQUksNkJBQXNDLGNBQWMsR0FBRztBQUN6RCxhQUFPOztBQUdULFdBQU87RUFDVCxHQUFDLGlEQUFBLFNBQUFXLGdEQUV5QixPQUEwQjs7O0FBQ2xELFFBQUksV0FBV1oseUJBQUEsTUFBSSxxREFBQSxHQUFBO0FBQ25CLFVBQU0sRUFBRSxTQUFTLEdBQUcsS0FBSSxJQUFLO0FBQzdCLFFBQUksQ0FBQyxVQUFVO0FBQ2IsaUJBQVdELHdCQUFBLE1BQUkscURBQWtDO1FBQy9DLEdBQUc7UUFDSCxTQUFTLENBQUE7U0FDVixHQUFBO1dBQ0k7QUFDTCxhQUFPLE9BQU8sVUFBVSxJQUFJOztBQUc5QixlQUFXLEVBQUUsT0FBTyxlQUFlLE9BQUFjLFFBQU8sV0FBVyxNQUFNLEdBQUcsTUFBSyxLQUFNLE1BQU0sU0FBUztBQUN0RixVQUFJLFNBQVMsU0FBUyxRQUFRQSxNQUFLO0FBQ25DLFVBQUksQ0FBQyxRQUFRO0FBQ1gsaUJBQVMsU0FBUyxRQUFRQSxNQUFLLElBQUksRUFBRSxlQUFlLE9BQUFBLFFBQU8sU0FBUyxDQUFBLEdBQUksVUFBVSxHQUFHLE1BQUs7O0FBRzVGLFVBQUksVUFBVTtBQUNaLFlBQUksQ0FBQyxPQUFPLFVBQVU7QUFDcEIsaUJBQU8sV0FBVyxPQUFPLE9BQU8sQ0FBQSxHQUFJLFFBQVE7ZUFDdkM7QUFDTCxnQkFBTSxFQUFFLFNBQUFDLFVBQVMsU0FBQUMsVUFBUyxHQUFHQyxNQUFJLElBQUs7QUFDdEMsd0JBQWNBLEtBQUk7QUFDbEIsaUJBQU8sT0FBTyxPQUFPLFVBQVVBLEtBQUk7QUFFbkMsY0FBSUYsVUFBUztBQUNYLGFBQUFiLGFBQUEsT0FBTyxVQUFTLFlBQWhCLE9BQUFBLE1BQXVCQSxJQUFQLFVBQVksQ0FBQTtBQUM1QixtQkFBTyxTQUFTLFFBQVEsS0FBSyxHQUFHYSxRQUFPOztBQUd6QyxjQUFJQyxVQUFTO0FBQ1gsYUFBQUUsT0FBQSxLQUFBLE9BQU8sVUFBUyxZQUFoQixPQUFBQSxNQUF1QixHQUFQLFVBQVksQ0FBQTtBQUM1QixtQkFBTyxTQUFTLFFBQVEsS0FBSyxHQUFHRixRQUFPOzs7O0FBSzdDLFVBQUksZUFBZTtBQUNqQixlQUFPLGdCQUFnQjtBQUV2QixZQUFJZix5QkFBQSxNQUFJLDhCQUFBLEdBQUEsS0FBWSxzQkFBc0JBLHlCQUFBLE1BQUksOEJBQUEsR0FBQSxDQUFRLEdBQUc7QUFDdkQsY0FBSSxrQkFBa0IsVUFBVTtBQUM5QixrQkFBTSxJQUFJLHdCQUF1Qjs7QUFHbkMsY0FBSSxrQkFBa0Isa0JBQWtCO0FBQ3RDLGtCQUFNLElBQUksK0JBQThCOzs7O0FBSzlDLGFBQU8sT0FBTyxRQUFRLEtBQUs7QUFFM0IsVUFBSSxDQUFDO0FBQU87QUFFWixZQUFNLEVBQUUsU0FBUyxTQUFTLGVBQWUsTUFBTSxZQUFZLEdBQUdnQixNQUFJLElBQUs7QUFDdkUsb0JBQWNBLEtBQUk7QUFDbEIsYUFBTyxPQUFPLE9BQU8sU0FBU0EsS0FBSTtBQUVsQyxVQUFJLFNBQVM7QUFDWCxlQUFPLFFBQVEsV0FBVyxPQUFPLFFBQVEsV0FBVyxNQUFNOztBQUc1RCxVQUFJO0FBQU0sZUFBTyxRQUFRLE9BQU87QUFDaEMsVUFBSSxlQUFlO0FBQ2pCLFlBQUksQ0FBQyxPQUFPLFFBQVEsZUFBZTtBQUNqQyxpQkFBTyxRQUFRLGdCQUFnQjtlQUMxQjtBQUNMLGNBQUksY0FBYztBQUFNLG1CQUFPLFFBQVEsY0FBYyxPQUFPLGNBQWM7QUFDMUUsY0FBSSxjQUFjLFdBQVc7QUFDM0IsYUFBQUUsT0FBQSxLQUFBLE9BQU8sUUFBUSxlQUFjLGNBQTdCLE9BQUFBLE1BQXNDLEdBQVQsWUFBYztBQUMzQyxtQkFBTyxRQUFRLGNBQWMsYUFBYSxjQUFjOzs7O0FBSTlELFVBQUksU0FBUztBQUNYLGVBQU8sUUFBUSxXQUFXLE9BQU8sUUFBUSxXQUFXLE1BQU07QUFFMUQsWUFBSSxDQUFDLE9BQU8sUUFBUSxXQUFXbEIseUJBQUEsTUFBSSxpQ0FBQSxLQUFBLG9EQUFBLEVBQWdDLEtBQXBDLElBQUksR0FBb0M7QUFDckUsaUJBQU8sUUFBUSxTQUFTLGFBQWEsT0FBTyxRQUFRLE9BQU87OztBQUkvRCxVQUFJLFlBQVk7QUFDZCxZQUFJLENBQUMsT0FBTyxRQUFRO0FBQVksaUJBQU8sUUFBUSxhQUFhLENBQUE7QUFFNUQsbUJBQVcsRUFBRSxPQUFBYSxRQUFPLElBQUksTUFBTSxVQUFVLElBQUksR0FBR0csTUFBSSxLQUFNLFlBQVk7QUFDbkUsZ0JBQU0sYUFBWUcsT0FBQSxLQUFDLE9BQU8sUUFBUSxZQUFXTixNQUFLLE1BQWhDLE9BQUFNLE1BQWdDLEdBQUxOLE1BQUssSUFDaEQsQ0FBQTtBQUNGLGlCQUFPLE9BQU8sV0FBV0csS0FBSTtBQUM3QixjQUFJO0FBQUksc0JBQVUsS0FBSztBQUN2QixjQUFJO0FBQU0sc0JBQVUsT0FBTztBQUMzQixjQUFJO0FBQUksNEJBQVUsYUFBVixZQUFBLFVBQVUsV0FBYSxFQUFFLE9BQU1YLE1BQUEsR0FBRyxTQUFILE9BQUFBLE1BQVcsSUFBSSxXQUFXLEdBQUU7QUFDbkUsY0FBSSx5QkFBSTtBQUFNLHNCQUFVLFNBQVUsT0FBTyxHQUFHO0FBQzVDLGNBQUkseUJBQUksV0FBVztBQUNqQixzQkFBVSxTQUFVLGFBQWEsR0FBRztBQUVwQyxnQkFBSSxvQkFBb0JMLHlCQUFBLE1BQUksOEJBQUEsR0FBQSxHQUFVLFNBQVMsR0FBRztBQUNoRCx3QkFBVSxTQUFVLG1CQUFtQixhQUFhLFVBQVUsU0FBVSxTQUFTOzs7Ozs7QUFNM0YsV0FBTztFQUNULEdBRUMsT0FBTyxjQUFhLElBQUM7QUFDcEIsVUFBTSxZQUFtQyxDQUFBO0FBQ3pDLFVBQU0sWUFHQSxDQUFBO0FBQ04sUUFBSSxPQUFPO0FBRVgsU0FBSyxHQUFHLFNBQVMsQ0FBQyxVQUFTO0FBQ3pCLFlBQU0sU0FBUyxVQUFVLE1BQUs7QUFDOUIsVUFBSSxRQUFRO0FBQ1YsZUFBTyxRQUFRLEtBQUs7YUFDZjtBQUNMLGtCQUFVLEtBQUssS0FBSzs7SUFFeEIsQ0FBQztBQUVELFNBQUssR0FBRyxPQUFPLE1BQUs7QUFDbEIsYUFBTztBQUNQLGlCQUFXLFVBQVUsV0FBVztBQUM5QixlQUFPLFFBQVEsTUFBUzs7QUFFMUIsZ0JBQVUsU0FBUztJQUNyQixDQUFDO0FBRUQsU0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFPO0FBQ3ZCLGFBQU87QUFDUCxpQkFBVyxVQUFVLFdBQVc7QUFDOUIsZUFBTyxPQUFPLEdBQUc7O0FBRW5CLGdCQUFVLFNBQVM7SUFDckIsQ0FBQztBQUVELFNBQUssR0FBRyxTQUFTLENBQUMsUUFBTztBQUN2QixhQUFPO0FBQ1AsaUJBQVcsVUFBVSxXQUFXO0FBQzlCLGVBQU8sT0FBTyxHQUFHOztBQUVuQixnQkFBVSxTQUFTO0lBQ3JCLENBQUM7QUFFRCxXQUFPO01BQ0wsTUFBTSxZQUF5RDtBQUM3RCxZQUFJLENBQUMsVUFBVSxRQUFRO0FBQ3JCLGNBQUksTUFBTTtBQUNSLG1CQUFPLEVBQUUsT0FBTyxRQUFXLE1BQU0sS0FBSTs7QUFFdkMsaUJBQU8sSUFBSSxRQUF5QyxDQUFDb0IsVUFBUyxXQUM1RCxVQUFVLEtBQUssRUFBRSxTQUFBQSxVQUFTLE9BQU0sQ0FBRSxDQUFDLEVBQ25DLEtBQUssQ0FBQ0MsV0FBV0EsU0FBUSxFQUFFLE9BQU9BLFFBQU8sTUFBTSxNQUFLLElBQUssRUFBRSxPQUFPLFFBQVcsTUFBTSxLQUFJLENBQUc7O0FBRTlGLGNBQU0sUUFBUSxVQUFVLE1BQUs7QUFDN0IsZUFBTyxFQUFFLE9BQU8sT0FBTyxNQUFNLE1BQUs7TUFDcEM7TUFDQSxRQUFRLFlBQVc7QUFDakIsYUFBSyxNQUFLO0FBQ1YsZUFBTyxFQUFFLE9BQU8sUUFBVyxNQUFNLEtBQUk7TUFDdkM7O0VBRUo7RUFFQSxtQkFBZ0I7QUFDZCxVQUFNLFNBQVMsSUFBSSxPQUFPLEtBQUssT0FBTyxhQUFhLEVBQUUsS0FBSyxJQUFJLEdBQUcsS0FBSyxVQUFVO0FBQ2hGLFdBQU8sT0FBTyxpQkFBZ0I7RUFDaEM7O0FBR0YsU0FBUyx1QkFDUCxVQUNBLFFBQXlDO0FBRXpDLFFBQU0sRUFBRSxJQUFJLFNBQVMsU0FBUyxPQUFBQyxRQUFPLG9CQUFvQixHQUFHLEtBQUksSUFBSztBQUNyRSxRQUFNLGFBQTZCO0lBQ2pDLEdBQUc7SUFDSDtJQUNBLFNBQVMsUUFBUSxJQUNmLENBQUMsRUFBRSxTQUFTLGVBQWUsT0FBQVQsUUFBTyxVQUFVLEdBQUcsV0FBVSxNQUE2Qjs7QUFDcEYsVUFBSSxDQUFDLGVBQWU7QUFDbEIsY0FBTSxJQUFJLFlBQVksb0NBQW9DQSxRQUFPOztBQUduRSxZQUFNLEVBQUUsVUFBVSxNQUFNLGVBQWUsWUFBWSxHQUFHLFlBQVcsSUFBSztBQUN0RSxZQUFNLE9BQU8sUUFBUTtBQUNyQixVQUFJLENBQUMsTUFBTTtBQUNULGNBQU0sSUFBSSxZQUFZLDJCQUEyQkEsUUFBTzs7QUFHMUQsVUFBSSxlQUFlO0FBQ2pCLGNBQU0sRUFBRSxXQUFXLE1BQU0sS0FBSSxJQUFLO0FBQ2xDLFlBQUksUUFBUSxNQUFNO0FBQ2hCLGdCQUFNLElBQUksWUFBWSw4Q0FBOENBLFFBQU87O0FBRzdFLFlBQUksQ0FBQyxNQUFNO0FBQ1QsZ0JBQU0sSUFBSSxZQUFZLHlDQUF5Q0EsUUFBTzs7QUFHeEUsZUFBTztVQUNMLEdBQUc7VUFDSCxTQUFTO1lBQ1A7WUFDQSxlQUFlLEVBQUUsV0FBVyxNQUFNLEtBQUk7WUFDdEM7WUFDQSxVQUFTWixNQUFBLFFBQVEsWUFBUixPQUFBQSxNQUFtQjs7VUFFOUI7VUFDQSxPQUFBWTtVQUNBOzs7QUFJSixVQUFJLFlBQVk7QUFDZCxlQUFPO1VBQ0wsR0FBRztVQUNILE9BQUFBO1VBQ0E7VUFDQTtVQUNBLFNBQVM7WUFDUCxHQUFHO1lBQ0g7WUFDQTtZQUNBLFVBQVMsYUFBUSxZQUFSLFlBQW1CO1lBQzVCLFlBQVksV0FBVyxJQUFJLENBQUMsV0FBV1UsT0FBSztBQUMxQyxvQkFBTSxFQUFFLFVBQVUsSUFBSSxNQUFNLElBQUFDLEtBQUksR0FBRyxTQUFRLElBQUs7QUFDaEQsb0JBQU0sRUFBRSxXQUFXLE1BQU0sTUFBTSxHQUFHLE9BQU0sSUFBSyxNQUFNLENBQUE7QUFDbkQsa0JBQUlBLE9BQU0sTUFBTTtBQUNkLHNCQUFNLElBQUksWUFBWSxtQkFBbUJYLHNCQUFxQlU7RUFBVSxJQUFJLFFBQVEsR0FBRzs7QUFFekYsa0JBQUksUUFBUSxNQUFNO0FBQ2hCLHNCQUFNLElBQUksWUFBWSxtQkFBbUJWLHNCQUFxQlU7RUFBWSxJQUFJLFFBQVEsR0FBRzs7QUFFM0Ysa0JBQUksUUFBUSxNQUFNO0FBQ2hCLHNCQUFNLElBQUksWUFDUixtQkFBbUJWLHNCQUFxQlU7RUFBcUIsSUFBSSxRQUFRLEdBQUc7O0FBR2hGLGtCQUFJLFFBQVEsTUFBTTtBQUNoQixzQkFBTSxJQUFJLFlBQ1IsbUJBQW1CVixzQkFBcUJVO0VBQTBCLElBQUksUUFBUSxHQUFHOztBQUlyRixxQkFBTyxFQUFFLEdBQUcsVUFBVSxJQUFBQyxLQUFJLE1BQU0sVUFBVSxFQUFFLEdBQUcsUUFBUSxNQUFNLFdBQVcsS0FBSSxFQUFFO1lBQ2hGLENBQUM7Ozs7QUFJUCxhQUFPO1FBQ0wsR0FBRztRQUNILFNBQVMsRUFBRSxHQUFHLGFBQWEsU0FBUyxNQUFNLFVBQVMsYUFBUSxZQUFSLFlBQW1CLEtBQUk7UUFDMUU7UUFDQSxPQUFBWDtRQUNBOztJQUVKLENBQUM7SUFFSDtJQUNBLE9BQUFTO0lBQ0EsUUFBUTtJQUNSLEdBQUkscUJBQXFCLEVBQUUsbUJBQWtCLElBQUssQ0FBQTs7QUFHcEQsU0FBTyx5QkFBeUIsWUFBWSxNQUFNO0FBQ3BEO0FBRUEsU0FBUyxJQUFJRyxJQUFVO0FBQ3JCLFNBQU8sS0FBSyxVQUFVQSxFQUFDO0FBQ3pCO0FBK0pBLFNBQVMsY0FBNEIsS0FBcUI7QUFDeEQ7QUFDRjtBQUVBLFNBQVMsWUFBWSxJQUFTO0FBQUc7OztBQ3gwQjNCLElBQU8sZ0NBQVAsY0FDSSxxQkFBNkI7RUFHckMsT0FBZ0IsbUJBQW1CLFFBQXNCO0FBQ3ZELFVBQU0sU0FBUyxJQUFJLDhCQUE4QixJQUFJO0FBQ3JELFdBQU8sS0FBSyxNQUFNLE9BQU8sb0JBQW9CLE1BQU0sQ0FBQztBQUNwRCxXQUFPO0VBQ1Q7O0VBR0EsT0FBTyxhQUNMLFFBQ0EsUUFDQSxTQUF1QjtBQUV2QixVQUFNLFNBQVMsSUFBSSw4QkFBOEIsSUFBSTtBQUNyRCxVQUFNQyxRQUFPO01BQ1gsR0FBRztNQUNILFNBQVMsRUFBRSxHQUFHLG1DQUFTLFNBQVMsNkJBQTZCLGVBQWM7O0FBRTdFLFdBQU8sS0FBSyxNQUFNLE9BQU8sY0FBYyxRQUFRLFFBQVFBLEtBQUksQ0FBQztBQUM1RCxXQUFPO0VBQ1Q7RUFFQSxPQUFPLFNBQ0wsUUFDQSxRQUNBLFNBQXVCO0FBRXZCLFVBQU0sU0FBUyxJQUFJOztNQUVqQjtJQUFNO0FBRVIsVUFBTUEsUUFBTztNQUNYLEdBQUc7TUFDSCxTQUFTLEVBQUUsR0FBRyxtQ0FBUyxTQUFTLDZCQUE2QixXQUFVOztBQUV6RSxXQUFPLEtBQUssTUFBTSxPQUFPLFVBQVUsUUFBUSxRQUFRQSxLQUFJLENBQUM7QUFDeEQsV0FBTztFQUNUOzs7O0FDTEksSUFBT0MsZUFBUCxjQUEyQixZQUFXO0VBQzFDLE1BQ0UsTUFDQSxTQUE2QjtBQUU3Qix1QkFBbUIsS0FBSyxLQUFLO0FBRTdCLFdBQU8sS0FBSyxRQUFRLEtBQUssWUFDdEIsT0FBTyxNQUFNO01BQ1osR0FBRztNQUNILFNBQVM7UUFDUCxHQUFHLG1DQUFTO1FBQ1osNkJBQTZCOztLQUVoQyxFQUNBLFlBQVksQ0FBQyxlQUFlLG9CQUFvQixZQUFZLElBQUksQ0FBQztFQUN0RTtFQWFBLGFBQ0UsTUFHQSxTQUE2QjtBQUU3QixRQUFJLEtBQUssUUFBUTtBQUNmLGFBQU8sOEJBQThCLGFBQ25DLEtBQUssU0FDTCxNQUNBLE9BQU87O0FBR1gsV0FBTyxxQkFBcUIsYUFDMUIsS0FBSyxTQUNMLE1BQ0EsT0FBTztFQUVYO0VBcUJBLFNBSUUsTUFDQSxTQUF1QjtBQUV2QixRQUFJLEtBQUssUUFBUTtBQUNmLGFBQU8sOEJBQThCLFNBQ25DLEtBQUssU0FDTCxNQUNBLE9BQU87O0FBSVgsV0FBTyxxQkFBcUIsU0FBUyxLQUFLLFNBQVMsTUFBNkMsT0FBTztFQUN6Rzs7OztFQUtBLE9BQ0UsTUFDQSxTQUE2QjtBQUU3QixXQUFPLHFCQUFxQixxQkFBcUIsS0FBSyxTQUFTLE1BQU0sT0FBTztFQUM5RTs7OztBQzFKSSxJQUFPQyxRQUFQLGNBQW9CLFlBQVc7RUFBckMsY0FBQTs7QUFDRSxTQUFBLGNBQTBDLElBQW1CQyxhQUFZLEtBQUssT0FBTztFQUN2Rjs7Q0FFQSxTQUFpQkQsT0FBSTtBQUNMLEVBQUFBLE1BQUEsY0FBNkJDO0FBQzdDLEdBRmlCRCxVQUFBQSxRQUFJLENBQUEsRUFBQTs7O0FDSmYsSUFBTyxXQUFQLGNBQXdCLFlBQVc7Ozs7Ozs7Ozs7RUFVdkMsT0FBTyxNQUEyQixTQUE2QjtBQUM3RCxXQUFPLEtBQUssUUFBUSxLQUFLLHNCQUFzQjtNQUM3QztNQUNBLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7Ozs7QUNoQkksSUFBTyx3QkFBUCxjQUFxQyxZQUFXOzs7Ozs7Ozs7O0VBVXBELE9BQ0UsTUFDQSxTQUE2QjtBQUU3QixXQUFPLEtBQUssUUFBUSxLQUFLLG9DQUFvQztNQUMzRDtNQUNBLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7Ozs7QUNMSSxJQUFPLFdBQVAsY0FBd0IsWUFBVztFQUF6QyxjQUFBOztBQUNFLFNBQUEsV0FBaUMsSUFBZ0IsU0FBUyxLQUFLLE9BQU87QUFDdEUsU0FBQSx3QkFDRSxJQUE2QixzQkFBc0IsS0FBSyxPQUFPO0VBQ25FOztBQTAzRUEsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsd0JBQXdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzEwRTNCLElBQU8sa0JBQVAsY0FDSSxZQUFrQztFQUQ1QyxjQUFBOzs7QUFLRSw0QkFBQSxJQUFBLE1BQWtDLENBQUEsQ0FBRTtBQUlwQyxzQ0FBQSxJQUFBLE1BQW9ELENBQUEsQ0FBRTtBQUN0RCxzQ0FBQSxJQUFBLE1BQStDLENBQUEsQ0FBRTtBQUNqRCxxQ0FBQSxJQUFBLE1BQUEsTUFBQTtBQUNBLDhCQUFBLElBQUEsTUFBQSxNQUFBO0FBQ0EseUNBQUEsSUFBQSxNQUFBLE1BQUE7QUFDQSxvQ0FBQSxJQUFBLE1BQUEsTUFBQTtBQUNBLDBDQUFBLElBQUEsTUFBQSxNQUFBO0FBQ0EscUNBQUEsSUFBQSxNQUFBLE1BQUE7QUFHQSxrQ0FBQSxJQUFBLE1BQUEsTUFBQTtBQUNBLHdDQUFBLElBQUEsTUFBQSxNQUFBO0FBQ0EsNENBQUEsSUFBQSxNQUFBLE1BQUE7RUEycUJGO0VBenFCRSxFQUFBLDBCQUFBLG9CQUFBLFFBQUEsR0FBQSxvQ0FBQSxvQkFBQSxRQUFBLEdBQUEsb0NBQUEsb0JBQUEsUUFBQSxHQUFBLG1DQUFBLG9CQUFBLFFBQUEsR0FBQSw0QkFBQSxvQkFBQSxRQUFBLEdBQUEsdUNBQUEsb0JBQUEsUUFBQSxHQUFBLGtDQUFBLG9CQUFBLFFBQUEsR0FBQSx3Q0FBQSxvQkFBQSxRQUFBLEdBQUEsbUNBQUEsb0JBQUEsUUFBQSxHQUFBLGdDQUFBLG9CQUFBLFFBQUEsR0FBQSxzQ0FBQSxvQkFBQSxRQUFBLEdBQUEsMENBQUEsb0JBQUEsUUFBQSxHQUFBLDZCQUFBLG9CQUFBLFFBQUEsR0FBQyxPQUFPLGNBQWEsSUFBQztBQUNwQixVQUFNLFlBQW9DLENBQUE7QUFDMUMsVUFBTSxZQUdBLENBQUE7QUFDTixRQUFJLE9BQU87QUFHWCxTQUFLLEdBQUcsU0FBUyxDQUFDLFVBQVM7QUFDekIsWUFBTSxTQUFTLFVBQVUsTUFBSztBQUM5QixVQUFJLFFBQVE7QUFDVixlQUFPLFFBQVEsS0FBSzthQUNmO0FBQ0wsa0JBQVUsS0FBSyxLQUFLOztJQUV4QixDQUFDO0FBRUQsU0FBSyxHQUFHLE9BQU8sTUFBSztBQUNsQixhQUFPO0FBQ1AsaUJBQVcsVUFBVSxXQUFXO0FBQzlCLGVBQU8sUUFBUSxNQUFTOztBQUUxQixnQkFBVSxTQUFTO0lBQ3JCLENBQUM7QUFFRCxTQUFLLEdBQUcsU0FBUyxDQUFDLFFBQU87QUFDdkIsYUFBTztBQUNQLGlCQUFXLFVBQVUsV0FBVztBQUM5QixlQUFPLE9BQU8sR0FBRzs7QUFFbkIsZ0JBQVUsU0FBUztJQUNyQixDQUFDO0FBRUQsU0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFPO0FBQ3ZCLGFBQU87QUFDUCxpQkFBVyxVQUFVLFdBQVc7QUFDOUIsZUFBTyxPQUFPLEdBQUc7O0FBRW5CLGdCQUFVLFNBQVM7SUFDckIsQ0FBQztBQUVELFdBQU87TUFDTCxNQUFNLFlBQTBEO0FBQzlELFlBQUksQ0FBQyxVQUFVLFFBQVE7QUFDckIsY0FBSSxNQUFNO0FBQ1IsbUJBQU8sRUFBRSxPQUFPLFFBQVcsTUFBTSxLQUFJOztBQUV2QyxpQkFBTyxJQUFJLFFBQTBDLENBQUNFLFVBQVMsV0FDN0QsVUFBVSxLQUFLLEVBQUUsU0FBQUEsVUFBUyxPQUFNLENBQUUsQ0FBQyxFQUNuQyxLQUFLLENBQUNDLFdBQVdBLFNBQVEsRUFBRSxPQUFPQSxRQUFPLE1BQU0sTUFBSyxJQUFLLEVBQUUsT0FBTyxRQUFXLE1BQU0sS0FBSSxDQUFHOztBQUU5RixjQUFNLFFBQVEsVUFBVSxNQUFLO0FBQzdCLGVBQU8sRUFBRSxPQUFPLE9BQU8sTUFBTSxNQUFLO01BQ3BDO01BQ0EsUUFBUSxZQUFXO0FBQ2pCLGFBQUssTUFBSztBQUNWLGVBQU8sRUFBRSxPQUFPLFFBQVcsTUFBTSxLQUFJO01BQ3ZDOztFQUVKO0VBRUEsT0FBTyxtQkFBbUIsUUFBc0I7QUFDOUMsVUFBTSxTQUFTLElBQUksZ0JBQWU7QUFDbEMsV0FBTyxLQUFLLE1BQU0sT0FBTyxvQkFBb0IsTUFBTSxDQUFDO0FBQ3BELFdBQU87RUFDVDtFQUVVLE1BQU0sb0JBQ2QsZ0JBQ0EsU0FBNkI7O0FBRTdCLFVBQU0sU0FBUyxtQ0FBUztBQUN4QixRQUFJLFFBQVE7QUFDVixVQUFJLE9BQU87QUFBUyxhQUFLLFdBQVcsTUFBSztBQUN6QyxhQUFPLGlCQUFpQixTQUFTLE1BQU0sS0FBSyxXQUFXLE1BQUssQ0FBRTs7QUFFaEUsU0FBSyxXQUFVO0FBQ2YsVUFBTSxTQUFTLE9BQU8sbUJBQXlDLGdCQUFnQixLQUFLLFVBQVU7QUFDOUYscUJBQWlCLFNBQVMsUUFBUTtBQUNoQyxNQUFBQyx5QkFBQSxNQUFJLDRCQUFBLEtBQUEseUJBQUEsRUFBVSxLQUFkLE1BQWUsS0FBSzs7QUFFdEIsU0FBSUMsTUFBQSxPQUFPLFdBQVcsV0FBbEIsZ0JBQUFBLElBQTBCLFNBQVM7QUFDckMsWUFBTSxJQUFJLGtCQUFpQjs7QUFFN0IsV0FBTyxLQUFLLFFBQVFELHlCQUFBLE1BQUksNEJBQUEsS0FBQSwyQkFBQSxFQUFZLEtBQWhCLElBQUksQ0FBYztFQUN4QztFQUVBLG1CQUFnQjtBQUNkLFVBQU0sU0FBUyxJQUFJLE9BQU8sS0FBSyxPQUFPLGFBQWEsRUFBRSxLQUFLLElBQUksR0FBRyxLQUFLLFVBQVU7QUFDaEYsV0FBTyxPQUFPLGlCQUFnQjtFQUNoQztFQUVBLE9BQU8sMEJBQ0wsVUFDQSxPQUNBLE1BQ0EsUUFDQSxTQUFtQztBQUVuQyxVQUFNLFNBQVMsSUFBSSxnQkFBZTtBQUNsQyxXQUFPLEtBQUssTUFDVixPQUFPLHdCQUF3QixVQUFVLE9BQU8sTUFBTSxRQUFRO01BQzVELEdBQUc7TUFDSCxTQUFTLEVBQUUsR0FBRyxtQ0FBUyxTQUFTLDZCQUE2QixTQUFRO0tBQ3RFLENBQUM7QUFFSixXQUFPO0VBQ1Q7RUFFVSxNQUFNLDJCQUNkLEtBQ0EsVUFDQSxPQUNBLFFBQ0EsU0FBNkI7O0FBRTdCLFVBQU0sU0FBUyxtQ0FBUztBQUN4QixRQUFJLFFBQVE7QUFDVixVQUFJLE9BQU87QUFBUyxhQUFLLFdBQVcsTUFBSztBQUN6QyxhQUFPLGlCQUFpQixTQUFTLE1BQU0sS0FBSyxXQUFXLE1BQUssQ0FBRTs7QUFHaEUsVUFBTSxPQUE0QyxFQUFFLEdBQUcsUUFBUSxRQUFRLEtBQUk7QUFDM0UsVUFBTSxTQUFTLE1BQU0sSUFBSSxrQkFBa0IsVUFBVSxPQUFPLE1BQU07TUFDaEUsR0FBRztNQUNILFFBQVEsS0FBSyxXQUFXO0tBQ3pCO0FBRUQsU0FBSyxXQUFVO0FBRWYscUJBQWlCLFNBQVMsUUFBUTtBQUNoQyxNQUFBQSx5QkFBQSxNQUFJLDRCQUFBLEtBQUEseUJBQUEsRUFBVSxLQUFkLE1BQWUsS0FBSzs7QUFFdEIsU0FBSUMsTUFBQSxPQUFPLFdBQVcsV0FBbEIsZ0JBQUFBLElBQTBCLFNBQVM7QUFDckMsWUFBTSxJQUFJLGtCQUFpQjs7QUFHN0IsV0FBTyxLQUFLLFFBQVFELHlCQUFBLE1BQUksNEJBQUEsS0FBQSwyQkFBQSxFQUFZLEtBQWhCLElBQUksQ0FBYztFQUN4QztFQUVBLE9BQU8sNEJBQ0wsUUFDQSxRQUNBLFNBQXdCO0FBRXhCLFVBQU0sU0FBUyxJQUFJLGdCQUFlO0FBQ2xDLFdBQU8sS0FBSyxNQUNWLE9BQU8sdUJBQXVCLFFBQVEsUUFBUTtNQUM1QyxHQUFHO01BQ0gsU0FBUyxFQUFFLEdBQUcsbUNBQVMsU0FBUyw2QkFBNkIsU0FBUTtLQUN0RSxDQUFDO0FBRUosV0FBTztFQUNUO0VBRUEsT0FBTyxzQkFDTCxVQUNBLE1BQ0EsUUFDQSxTQUF3QjtBQUV4QixVQUFNLFNBQVMsSUFBSSxnQkFBZTtBQUNsQyxXQUFPLEtBQUssTUFDVixPQUFPLG9CQUFvQixVQUFVLE1BQU0sUUFBUTtNQUNqRCxHQUFHO01BQ0gsU0FBUyxFQUFFLEdBQUcsbUNBQVMsU0FBUyw2QkFBNkIsU0FBUTtLQUN0RSxDQUFDO0FBRUosV0FBTztFQUNUO0VBRUEsZUFBWTtBQUNWLFdBQU9BLHlCQUFBLE1BQUksK0JBQUEsR0FBQTtFQUNiO0VBRUEsYUFBVTtBQUNSLFdBQU9BLHlCQUFBLE1BQUkscUNBQUEsR0FBQTtFQUNiO0VBRUEseUJBQXNCO0FBQ3BCLFdBQU9BLHlCQUFBLE1BQUksa0NBQUEsR0FBQTtFQUNiO0VBRUEseUJBQXNCO0FBQ3BCLFdBQU9BLHlCQUFBLE1BQUkseUNBQUEsR0FBQTtFQUNiO0VBRUEsTUFBTSxnQkFBYTtBQUNqQixVQUFNLEtBQUssS0FBSTtBQUVmLFdBQU8sT0FBTyxPQUFPQSx5QkFBQSxNQUFJLG1DQUFBLEdBQUEsQ0FBa0I7RUFDN0M7RUFFQSxNQUFNLGdCQUFhO0FBQ2pCLFVBQU0sS0FBSyxLQUFJO0FBRWYsV0FBTyxPQUFPLE9BQU9BLHlCQUFBLE1BQUksbUNBQUEsR0FBQSxDQUFrQjtFQUM3QztFQUVBLE1BQU0sV0FBUTtBQUNaLFVBQU0sS0FBSyxLQUFJO0FBQ2YsUUFBSSxDQUFDQSx5QkFBQSxNQUFJLDJCQUFBLEdBQUE7QUFBWSxZQUFNLE1BQU0sNkJBQTZCO0FBRTlELFdBQU9BLHlCQUFBLE1BQUksMkJBQUEsR0FBQTtFQUNiO0VBRVUsTUFBTSw2QkFDZCxRQUNBLFFBQ0EsU0FBNkI7O0FBRTdCLFVBQU0sU0FBUyxtQ0FBUztBQUN4QixRQUFJLFFBQVE7QUFDVixVQUFJLE9BQU87QUFBUyxhQUFLLFdBQVcsTUFBSztBQUN6QyxhQUFPLGlCQUFpQixTQUFTLE1BQU0sS0FBSyxXQUFXLE1BQUssQ0FBRTs7QUFHaEUsVUFBTSxPQUFpQyxFQUFFLEdBQUcsUUFBUSxRQUFRLEtBQUk7QUFDaEUsVUFBTSxTQUFTLE1BQU0sT0FBTyxhQUFhLE1BQU0sRUFBRSxHQUFHLFNBQVMsUUFBUSxLQUFLLFdBQVcsT0FBTSxDQUFFO0FBRTdGLFNBQUssV0FBVTtBQUVmLHFCQUFpQixTQUFTLFFBQVE7QUFDaEMsTUFBQUEseUJBQUEsTUFBSSw0QkFBQSxLQUFBLHlCQUFBLEVBQVUsS0FBZCxNQUFlLEtBQUs7O0FBRXRCLFNBQUlDLE1BQUEsT0FBTyxXQUFXLFdBQWxCLGdCQUFBQSxJQUEwQixTQUFTO0FBQ3JDLFlBQU0sSUFBSSxrQkFBaUI7O0FBRzdCLFdBQU8sS0FBSyxRQUFRRCx5QkFBQSxNQUFJLDRCQUFBLEtBQUEsMkJBQUEsRUFBWSxLQUFoQixJQUFJLENBQWM7RUFDeEM7RUFFVSxNQUFNLHVCQUNkLEtBQ0EsVUFDQSxRQUNBLFNBQTZCOztBQUU3QixVQUFNLFNBQVMsbUNBQVM7QUFDeEIsUUFBSSxRQUFRO0FBQ1YsVUFBSSxPQUFPO0FBQVMsYUFBSyxXQUFXLE1BQUs7QUFDekMsYUFBTyxpQkFBaUIsU0FBUyxNQUFNLEtBQUssV0FBVyxNQUFLLENBQUU7O0FBR2hFLFVBQU0sT0FBaUMsRUFBRSxHQUFHLFFBQVEsUUFBUSxLQUFJO0FBQ2hFLFVBQU0sU0FBUyxNQUFNLElBQUksT0FBTyxVQUFVLE1BQU0sRUFBRSxHQUFHLFNBQVMsUUFBUSxLQUFLLFdBQVcsT0FBTSxDQUFFO0FBRTlGLFNBQUssV0FBVTtBQUVmLHFCQUFpQixTQUFTLFFBQVE7QUFDaEMsTUFBQUEseUJBQUEsTUFBSSw0QkFBQSxLQUFBLHlCQUFBLEVBQVUsS0FBZCxNQUFlLEtBQUs7O0FBRXRCLFNBQUlDLE1BQUEsT0FBTyxXQUFXLFdBQWxCLGdCQUFBQSxJQUEwQixTQUFTO0FBQ3JDLFlBQU0sSUFBSSxrQkFBaUI7O0FBRzdCLFdBQU8sS0FBSyxRQUFRRCx5QkFBQSxNQUFJLDRCQUFBLEtBQUEsMkJBQUEsRUFBWSxLQUFoQixJQUFJLENBQWM7RUFDeEM7RUFnVEEsT0FBTyxnQkFBZ0IsS0FBMEIsT0FBMEI7QUFDekUsZUFBVyxDQUFDLEtBQUssVUFBVSxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDckQsVUFBSSxDQUFDLElBQUksZUFBZSxHQUFHLEdBQUc7QUFDNUIsWUFBSSxHQUFHLElBQUk7QUFDWDs7QUFHRixVQUFJLFdBQVcsSUFBSSxHQUFHO0FBQ3RCLFVBQUksYUFBYSxRQUFRLGFBQWEsUUFBVztBQUMvQyxZQUFJLEdBQUcsSUFBSTtBQUNYOztBQUlGLFVBQUksUUFBUSxXQUFXLFFBQVEsUUFBUTtBQUNyQyxZQUFJLEdBQUcsSUFBSTtBQUNYOztBQUlGLFVBQUksT0FBTyxhQUFhLFlBQVksT0FBTyxlQUFlLFVBQVU7QUFDbEUsb0JBQVk7aUJBQ0gsT0FBTyxhQUFhLFlBQVksT0FBTyxlQUFlLFVBQVU7QUFDekUsb0JBQVk7aUJBQ0UsTUFBTSxRQUFRLEtBQVUsTUFBTSxVQUFVLEdBQUc7QUFDekQsbUJBQVcsS0FBSyxnQkFBZ0IsVUFBaUMsVUFBaUM7aUJBQ3pGLE1BQU0sUUFBUSxRQUFRLEtBQUssTUFBTSxRQUFRLFVBQVUsR0FBRztBQUMvRCxZQUFJLFNBQVMsTUFBTSxDQUFDRSxPQUFNLE9BQU9BLE9BQU0sWUFBWSxPQUFPQSxPQUFNLFFBQVEsR0FBRztBQUN6RSxtQkFBUyxLQUFLLEdBQUcsVUFBVTtBQUMzQjs7QUFHRixtQkFBVyxjQUFjLFlBQVk7QUFDbkMsY0FBSSxDQUFNLE1BQU0sVUFBVSxHQUFHO0FBQzNCLGtCQUFNLElBQUksTUFBTSx1REFBdUQsWUFBWTs7QUFHckYsZ0JBQU1DLFNBQVEsV0FBVyxPQUFPO0FBQ2hDLGNBQUlBLFVBQVMsTUFBTTtBQUNqQixvQkFBUSxNQUFNLFVBQVU7QUFDeEIsa0JBQU0sSUFBSSxNQUFNLHdEQUF3RDs7QUFHMUUsY0FBSSxPQUFPQSxXQUFVLFVBQVU7QUFDN0Isa0JBQU0sSUFBSSxNQUFNLHdFQUF3RUEsUUFBTzs7QUFHakcsZ0JBQU0sV0FBVyxTQUFTQSxNQUFLO0FBQy9CLGNBQUksWUFBWSxNQUFNO0FBQ3BCLHFCQUFTLEtBQUssVUFBVTtpQkFDbkI7QUFDTCxxQkFBU0EsTUFBSyxJQUFJLEtBQUssZ0JBQWdCLFVBQVUsVUFBVTs7O0FBRy9EO2FBQ0s7QUFDTCxjQUFNLE1BQU0sMEJBQTBCLG9CQUFvQix5QkFBeUIsVUFBVTs7QUFFL0YsVUFBSSxHQUFHLElBQUk7O0FBR2IsV0FBTztFQUNUO0VBMkJVLFFBQVEsS0FBUTtBQUN4QixXQUFPO0VBQ1Q7RUFFVSxNQUFNLHVCQUNkLFFBQ0EsUUFDQSxTQUE2QjtBQUU3QixXQUFPLE1BQU0sS0FBSyw2QkFBNkIsUUFBUSxRQUFRLE9BQU87RUFDeEU7RUFFVSxNQUFNLG9CQUNkLFVBQ0EsTUFDQSxRQUNBLFNBQTZCO0FBRTdCLFdBQU8sTUFBTSxLQUFLLHVCQUF1QixNQUFNLFVBQVUsUUFBUSxPQUFPO0VBQzFFO0VBRVUsTUFBTSx3QkFDZCxVQUNBLE9BQ0EsTUFDQSxRQUNBLFNBQTZCO0FBRTdCLFdBQU8sTUFBTSxLQUFLLDJCQUEyQixNQUFNLFVBQVUsT0FBTyxRQUFRLE9BQU87RUFDckY7O2dFQXBhVSxPQUEyQjtBQUNuQyxNQUFJLEtBQUs7QUFBTztBQUVoQixFQUFBQyx3QkFBQSxNQUFJLCtCQUFpQixPQUFLLEdBQUE7QUFFMUIsRUFBQUoseUJBQUEsTUFBSSw0QkFBQSxLQUFBLDRCQUFBLEVBQWEsS0FBakIsTUFBa0IsS0FBSztBQUV2QixVQUFRLE1BQU0sT0FBTztJQUNuQixLQUFLO0FBRUg7SUFFRixLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0FBQ0gsTUFBQUEseUJBQUEsTUFBSSw0QkFBQSxLQUFBLDBCQUFBLEVBQVcsS0FBZixNQUFnQixLQUFLO0FBQ3JCO0lBRUYsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztBQUNILE1BQUFBLHlCQUFBLE1BQUksNEJBQUEsS0FBQSw4QkFBQSxFQUFlLEtBQW5CLE1BQW9CLEtBQUs7QUFDekI7SUFFRixLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztBQUNILE1BQUFBLHlCQUFBLE1BQUksNEJBQUEsS0FBQSw4QkFBQSxFQUFlLEtBQW5CLE1BQW9CLEtBQUs7QUFDekI7SUFFRixLQUFLO0FBRUgsWUFBTSxJQUFJLE1BQ1IscUZBQXFGO0lBRXpGO0FBQ0UsTUFBQUssYUFBWSxLQUFLOztBQUV2QixHQUFDLDhCQUFBLFNBQUFDLCtCQUFBO0FBR0MsTUFBSSxLQUFLLE9BQU87QUFDZCxVQUFNLElBQUksWUFBWSx5Q0FBeUM7O0FBR2pFLE1BQUksQ0FBQ04seUJBQUEsTUFBSSwyQkFBQSxHQUFBO0FBQVksVUFBTSxNQUFNLGlDQUFpQztBQUVsRSxTQUFPQSx5QkFBQSxNQUFJLDJCQUFBLEdBQUE7QUFDYixHQUFDLGlDQUFBLFNBQUFPLGdDQUVxQyxPQUF5QjtBQUM3RCxRQUFNLENBQUMsb0JBQW9CLFVBQVUsSUFBSVAseUJBQUEsTUFBSSw0QkFBQSxLQUFBLGtDQUFBLEVBQW1CLEtBQXZCLE1BQXdCLE9BQU9BLHlCQUFBLE1BQUksa0NBQUEsR0FBQSxDQUFpQjtBQUM3RixFQUFBSSx3QkFBQSxNQUFJLGtDQUFvQixvQkFBa0IsR0FBQTtBQUMxQyxFQUFBSix5QkFBQSxNQUFJLG1DQUFBLEdBQUEsRUFBbUIsbUJBQW1CLEVBQUUsSUFBSTtBQUVoRCxhQUFXLFdBQVcsWUFBWTtBQUNoQyxVQUFNLGtCQUFrQixtQkFBbUIsUUFBUSxRQUFRLEtBQUs7QUFDaEUsU0FBSSxtREFBaUIsU0FBUSxRQUFRO0FBQ25DLFdBQUssTUFBTSxlQUFlLGdCQUFnQixJQUFJOzs7QUFJbEQsVUFBUSxNQUFNLE9BQU87SUFDbkIsS0FBSztBQUNILFdBQUssTUFBTSxrQkFBa0IsTUFBTSxJQUFJO0FBQ3ZDO0lBRUYsS0FBSztBQUNIO0lBRUYsS0FBSztBQUNILFdBQUssTUFBTSxnQkFBZ0IsTUFBTSxLQUFLLE9BQU8sa0JBQWtCO0FBRS9ELFVBQUksTUFBTSxLQUFLLE1BQU0sU0FBUztBQUM1QixtQkFBVyxXQUFXLE1BQU0sS0FBSyxNQUFNLFNBQVM7QUFFOUMsY0FBSSxRQUFRLFFBQVEsVUFBVSxRQUFRLE1BQU07QUFDMUMsZ0JBQUksWUFBWSxRQUFRO0FBQ3hCLGdCQUFJLFdBQVcsbUJBQW1CLFFBQVEsUUFBUSxLQUFLO0FBQ3ZELGdCQUFJLFlBQVksU0FBUyxRQUFRLFFBQVE7QUFDdkMsbUJBQUssTUFBTSxhQUFhLFdBQVcsU0FBUyxJQUFJO21CQUMzQztBQUNMLG9CQUFNLE1BQU0scUVBQXFFOzs7QUFJckYsY0FBSSxRQUFRLFNBQVNBLHlCQUFBLE1BQUksc0NBQUEsR0FBQSxHQUF1QjtBQUU5QyxnQkFBSUEseUJBQUEsTUFBSSxpQ0FBQSxHQUFBLEdBQWtCO0FBQ3hCLHNCQUFRQSx5QkFBQSxNQUFJLGlDQUFBLEdBQUEsRUFBaUIsTUFBTTtnQkFDakMsS0FBSztBQUNILHVCQUFLLE1BQU0sWUFBWUEseUJBQUEsTUFBSSxpQ0FBQSxHQUFBLEVBQWlCLE1BQU1BLHlCQUFBLE1BQUksa0NBQUEsR0FBQSxDQUFpQjtBQUN2RTtnQkFDRixLQUFLO0FBQ0gsdUJBQUssTUFBTSxpQkFBaUJBLHlCQUFBLE1BQUksaUNBQUEsR0FBQSxFQUFpQixZQUFZQSx5QkFBQSxNQUFJLGtDQUFBLEdBQUEsQ0FBaUI7QUFDbEY7OztBQUlOLFlBQUFJLHdCQUFBLE1BQUksc0NBQXdCLFFBQVEsT0FBSyxHQUFBOztBQUczQyxVQUFBQSx3QkFBQSxNQUFJLGlDQUFtQixtQkFBbUIsUUFBUSxRQUFRLEtBQUssR0FBQyxHQUFBOzs7QUFJcEU7SUFFRixLQUFLO0lBQ0wsS0FBSztBQUVILFVBQUlKLHlCQUFBLE1BQUksc0NBQUEsR0FBQSxNQUEwQixRQUFXO0FBQzNDLGNBQU0saUJBQWlCLE1BQU0sS0FBSyxRQUFRQSx5QkFBQSxNQUFJLHNDQUFBLEdBQUEsQ0FBcUI7QUFDbkUsWUFBSSxnQkFBZ0I7QUFDbEIsa0JBQVEsZUFBZSxNQUFNO1lBQzNCLEtBQUs7QUFDSCxtQkFBSyxNQUFNLGlCQUFpQixlQUFlLFlBQVlBLHlCQUFBLE1BQUksa0NBQUEsR0FBQSxDQUFpQjtBQUM1RTtZQUNGLEtBQUs7QUFDSCxtQkFBSyxNQUFNLFlBQVksZUFBZSxNQUFNQSx5QkFBQSxNQUFJLGtDQUFBLEdBQUEsQ0FBaUI7QUFDakU7Ozs7QUFLUixVQUFJQSx5QkFBQSxNQUFJLGtDQUFBLEdBQUEsR0FBbUI7QUFDekIsYUFBSyxNQUFNLGVBQWUsTUFBTSxJQUFJOztBQUd0QyxNQUFBSSx3QkFBQSxNQUFJLGtDQUFvQixRQUFTLEdBQUE7O0FBRXZDLEdBQUMsaUNBQUEsU0FBQUksZ0NBRXFDLE9BQXlCO0FBQzdELFFBQU0scUJBQXFCUix5QkFBQSxNQUFJLDRCQUFBLEtBQUEsa0NBQUEsRUFBbUIsS0FBdkIsTUFBd0IsS0FBSztBQUN4RCxFQUFBSSx3QkFBQSxNQUFJLHlDQUEyQixvQkFBa0IsR0FBQTtBQUVqRCxVQUFRLE1BQU0sT0FBTztJQUNuQixLQUFLO0FBQ0gsV0FBSyxNQUFNLGtCQUFrQixNQUFNLElBQUk7QUFDdkM7SUFDRixLQUFLO0FBQ0gsWUFBTSxRQUFRLE1BQU0sS0FBSztBQUN6QixVQUNFLE1BQU0sZ0JBQ04sTUFBTSxhQUFhLFFBQVEsZ0JBQzNCLE1BQU0sYUFBYSxjQUNuQixtQkFBbUIsYUFBYSxRQUFRLGNBQ3hDO0FBQ0EsbUJBQVcsWUFBWSxNQUFNLGFBQWEsWUFBWTtBQUNwRCxjQUFJLFNBQVMsU0FBU0oseUJBQUEsTUFBSSx1Q0FBQSxHQUFBLEdBQXdCO0FBQ2hELGlCQUFLLE1BQ0gsaUJBQ0EsVUFDQSxtQkFBbUIsYUFBYSxXQUFXLFNBQVMsS0FBSyxDQUFhO2lCQUVuRTtBQUNMLGdCQUFJQSx5QkFBQSxNQUFJLGtDQUFBLEdBQUEsR0FBbUI7QUFDekIsbUJBQUssTUFBTSxnQkFBZ0JBLHlCQUFBLE1BQUksa0NBQUEsR0FBQSxDQUFpQjs7QUFHbEQsWUFBQUksd0JBQUEsTUFBSSx1Q0FBeUIsU0FBUyxPQUFLLEdBQUE7QUFDM0MsWUFBQUEsd0JBQUEsTUFBSSxrQ0FBb0IsbUJBQW1CLGFBQWEsV0FBVyxTQUFTLEtBQUssR0FBQyxHQUFBO0FBQ2xGLGdCQUFJSix5QkFBQSxNQUFJLGtDQUFBLEdBQUE7QUFBbUIsbUJBQUssTUFBTSxtQkFBbUJBLHlCQUFBLE1BQUksa0NBQUEsR0FBQSxDQUFpQjs7OztBQUtwRixXQUFLLE1BQU0sZ0JBQWdCLE1BQU0sS0FBSyxPQUFPLGtCQUFrQjtBQUMvRDtJQUNGLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7QUFDSCxNQUFBSSx3QkFBQSxNQUFJLHlDQUEyQixRQUFTLEdBQUE7QUFDeEMsWUFBTSxVQUFVLE1BQU0sS0FBSztBQUMzQixVQUFJLFFBQVEsUUFBUSxjQUFjO0FBQ2hDLFlBQUlKLHlCQUFBLE1BQUksa0NBQUEsR0FBQSxHQUFtQjtBQUN6QixlQUFLLE1BQU0sZ0JBQWdCQSx5QkFBQSxNQUFJLGtDQUFBLEdBQUEsQ0FBNkI7QUFDNUQsVUFBQUksd0JBQUEsTUFBSSxrQ0FBb0IsUUFBUyxHQUFBOzs7QUFHckMsV0FBSyxNQUFNLGVBQWUsTUFBTSxNQUFNLGtCQUFrQjtBQUN4RDtJQUNGLEtBQUs7QUFDSDs7QUFFTixHQUFDLCtCQUFBLFNBQUFLLDhCQUVtQyxPQUEyQjtBQUM3RCxFQUFBVCx5QkFBQSxNQUFJLHlCQUFBLEdBQUEsRUFBUyxLQUFLLEtBQUs7QUFDdkIsT0FBSyxNQUFNLFNBQVMsS0FBSztBQUMzQixHQUFDLHFDQUFBLFNBQUFVLG9DQUVrQixPQUF5QjtBQUMxQyxVQUFRLE1BQU0sT0FBTztJQUNuQixLQUFLO0FBQ0gsTUFBQVYseUJBQUEsTUFBSSxtQ0FBQSxHQUFBLEVBQW1CLE1BQU0sS0FBSyxFQUFFLElBQUksTUFBTTtBQUM5QyxhQUFPLE1BQU07SUFFZixLQUFLO0FBQ0gsVUFBSSxXQUFXQSx5QkFBQSxNQUFJLG1DQUFBLEdBQUEsRUFBbUIsTUFBTSxLQUFLLEVBQUU7QUFDbkQsVUFBSSxDQUFDLFVBQVU7QUFDYixjQUFNLE1BQU0sdURBQXVEOztBQUdyRSxVQUFJLE9BQU8sTUFBTTtBQUVqQixVQUFJLEtBQUssT0FBTztBQUNkLGNBQU0sY0FBYyxnQkFBZ0IsZ0JBQWdCLFVBQVUsS0FBSyxLQUFLO0FBQ3hFLFFBQUFBLHlCQUFBLE1BQUksbUNBQUEsR0FBQSxFQUFtQixNQUFNLEtBQUssRUFBRSxJQUFJOztBQUcxQyxhQUFPQSx5QkFBQSxNQUFJLG1DQUFBLEdBQUEsRUFBbUIsTUFBTSxLQUFLLEVBQUU7SUFFN0MsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7QUFDSCxNQUFBQSx5QkFBQSxNQUFJLG1DQUFBLEdBQUEsRUFBbUIsTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNO0FBQzlDOztBQUdKLE1BQUlBLHlCQUFBLE1BQUksbUNBQUEsR0FBQSxFQUFtQixNQUFNLEtBQUssRUFBRTtBQUFHLFdBQU9BLHlCQUFBLE1BQUksbUNBQUEsR0FBQSxFQUFtQixNQUFNLEtBQUssRUFBRTtBQUN0RixRQUFNLElBQUksTUFBTSx1QkFBdUI7QUFDekMsR0FBQyxxQ0FBQSxTQUFBVyxvQ0FHQyxPQUNBLFVBQTZCO0FBRTdCLE1BQUksYUFBb0MsQ0FBQTtBQUV4QyxVQUFRLE1BQU0sT0FBTztJQUNuQixLQUFLO0FBRUgsYUFBTyxDQUFDLE1BQU0sTUFBTSxVQUFVO0lBRWhDLEtBQUs7QUFDSCxVQUFJLENBQUMsVUFBVTtBQUNiLGNBQU0sTUFDSix3RkFBd0Y7O0FBSTVGLFVBQUksT0FBTyxNQUFNO0FBR2pCLFVBQUksS0FBSyxNQUFNLFNBQVM7QUFDdEIsbUJBQVcsa0JBQWtCLEtBQUssTUFBTSxTQUFTO0FBQy9DLGNBQUksZUFBZSxTQUFTLFNBQVMsU0FBUztBQUM1QyxnQkFBSSxpQkFBaUIsU0FBUyxRQUFRLGVBQWUsS0FBSztBQUMxRCxxQkFBUyxRQUFRLGVBQWUsS0FBSyxJQUFJWCx5QkFBQSxNQUFJLDRCQUFBLEtBQUEsa0NBQUEsRUFBbUIsS0FBdkIsTUFDdkMsZ0JBQ0EsY0FBYztpQkFFWDtBQUNMLHFCQUFTLFFBQVEsZUFBZSxLQUFLLElBQUk7QUFFekMsdUJBQVcsS0FBSyxjQUFjOzs7O0FBS3BDLGFBQU8sQ0FBQyxVQUFVLFVBQVU7SUFFOUIsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0FBRUgsVUFBSSxVQUFVO0FBQ1osZUFBTyxDQUFDLFVBQVUsVUFBVTthQUN2QjtBQUNMLGNBQU0sTUFBTSx5REFBeUQ7OztBQUczRSxRQUFNLE1BQU0seUNBQXlDO0FBQ3ZELEdBQUMscUNBQUEsU0FBQVksb0NBR0MsZ0JBQ0EsZ0JBQTBDO0FBRTFDLFNBQU8sZ0JBQWdCLGdCQUFnQixnQkFBK0MsY0FBYztBQUd0RyxHQUFDLDZCQUFBLFNBQUFDLDRCQWtFaUMsT0FBcUI7QUFDckQsRUFBQVQsd0JBQUEsTUFBSSxxQ0FBdUIsTUFBTSxNQUFJLEdBQUE7QUFDckMsVUFBUSxNQUFNLE9BQU87SUFDbkIsS0FBSztBQUNIO0lBQ0YsS0FBSztBQUNIO0lBQ0YsS0FBSztBQUNIO0lBQ0YsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7QUFDSCxNQUFBQSx3QkFBQSxNQUFJLDJCQUFhLE1BQU0sTUFBSSxHQUFBO0FBQzNCLFVBQUlKLHlCQUFBLE1BQUksa0NBQUEsR0FBQSxHQUFtQjtBQUN6QixhQUFLLE1BQU0sZ0JBQWdCQSx5QkFBQSxNQUFJLGtDQUFBLEdBQUEsQ0FBaUI7QUFDaEQsUUFBQUksd0JBQUEsTUFBSSxrQ0FBb0IsUUFBUyxHQUFBOztBQUVuQztJQUNGLEtBQUs7QUFDSDs7QUFFTjtBQWtDRixTQUFTQyxhQUFZLElBQVM7QUFBRzs7O0FDandCM0IsSUFBT1MsWUFBUCxjQUF3QixZQUFXOzs7O0VBSXZDLE9BQ0UsVUFDQSxNQUNBLFNBQTZCO0FBRTdCLFdBQU8sS0FBSyxRQUFRLEtBQUssWUFBWSxxQkFBcUI7TUFDeEQ7TUFDQSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7O0VBS0EsU0FBUyxVQUFrQixXQUFtQixTQUE2QjtBQUN6RSxXQUFPLEtBQUssUUFBUSxJQUFJLFlBQVkscUJBQXFCLGFBQWE7TUFDcEUsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7OztFQUtBLE9BQ0UsVUFDQSxXQUNBLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsS0FBSyxZQUFZLHFCQUFxQixhQUFhO01BQ3JFO01BQ0EsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDtFQVdBLEtBQ0UsVUFDQSxRQUFpRCxDQUFBLEdBQ2pELFNBQTZCO0FBRTdCLFFBQUksaUJBQWlCLEtBQUssR0FBRztBQUMzQixhQUFPLEtBQUssS0FBSyxVQUFVLENBQUEsR0FBSSxLQUFLOztBQUV0QyxXQUFPLEtBQUssUUFBUSxXQUFXLFlBQVkscUJBQXFCLGNBQWM7TUFDNUU7TUFDQSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7O0VBS0EsSUFBSSxVQUFrQixXQUFtQixTQUE2QjtBQUNwRSxXQUFPLEtBQUssUUFBUSxPQUFPLFlBQVkscUJBQXFCLGFBQWE7TUFDdkUsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7QUFHSSxJQUFPLGVBQVAsY0FBNEIsV0FBbUI7O0FBb29CckRBLFVBQVMsZUFBZTs7O0FDanRCbEIsSUFBTyxRQUFQLGNBQXFCLFlBQVc7RUFpQnBDLFNBQ0UsVUFDQSxPQUNBLFFBQ0EsUUFBa0QsQ0FBQSxHQUNsRCxTQUE2QjtBQUU3QixRQUFJLGlCQUFpQixLQUFLLEdBQUc7QUFDM0IsYUFBTyxLQUFLLFNBQVMsVUFBVSxPQUFPLFFBQVEsQ0FBQSxHQUFJLEtBQUs7O0FBRXpELFdBQU8sS0FBSyxRQUFRLElBQUksWUFBWSxpQkFBaUIsZUFBZSxVQUFVO01BQzVFO01BQ0EsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDtFQWdCQSxLQUNFLFVBQ0EsT0FDQSxRQUE4QyxDQUFBLEdBQzlDLFNBQTZCO0FBRTdCLFFBQUksaUJBQWlCLEtBQUssR0FBRztBQUMzQixhQUFPLEtBQUssS0FBSyxVQUFVLE9BQU8sQ0FBQSxHQUFJLEtBQUs7O0FBRTdDLFdBQU8sS0FBSyxRQUFRLFdBQVcsWUFBWSxpQkFBaUIsZUFBZSxjQUFjO01BQ3ZGO01BQ0EsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7QUFHSSxJQUFPLGVBQVAsY0FBNEIsV0FBbUI7O0FBNnBCckQsTUFBTSxlQUFlOzs7QUM3ckJmLElBQU8sT0FBUCxjQUFvQixZQUFXO0VBQXJDLGNBQUE7O0FBQ0UsU0FBQSxRQUF3QixJQUFhLE1BQU0sS0FBSyxPQUFPO0VBK1B6RDtFQTNPRSxPQUNFLFVBQ0EsUUFDQSxTQUE2QjtBQWxFakMsUUFBQUM7QUFvRUksVUFBTSxFQUFFLFNBQVMsR0FBRyxLQUFJLElBQUs7QUFDN0IsV0FBTyxLQUFLLFFBQVEsS0FBSyxZQUFZLGlCQUFpQjtNQUNwRCxPQUFPLEVBQUUsUUFBTztNQUNoQjtNQUNBLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO01BQzlELFNBQVFBLE1BQUEsT0FBTyxXQUFQLE9BQUFBLE1BQWlCO0tBQzFCO0VBQ0g7Ozs7RUFLQSxTQUFTLFVBQWtCLE9BQWUsU0FBNkI7QUFDckUsV0FBTyxLQUFLLFFBQVEsSUFBSSxZQUFZLGlCQUFpQixTQUFTO01BQzVELEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7Ozs7RUFLQSxPQUNFLFVBQ0EsT0FDQSxNQUNBLFNBQTZCO0FBRTdCLFdBQU8sS0FBSyxRQUFRLEtBQUssWUFBWSxpQkFBaUIsU0FBUztNQUM3RDtNQUNBLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7RUFXQSxLQUNFLFVBQ0EsUUFBNkMsQ0FBQSxHQUM3QyxTQUE2QjtBQUU3QixRQUFJLGlCQUFpQixLQUFLLEdBQUc7QUFDM0IsYUFBTyxLQUFLLEtBQUssVUFBVSxDQUFBLEdBQUksS0FBSzs7QUFFdEMsV0FBTyxLQUFLLFFBQVEsV0FBVyxZQUFZLGlCQUFpQixVQUFVO01BQ3BFO01BQ0EsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7OztFQUtBLE9BQU8sVUFBa0IsT0FBZSxTQUE2QjtBQUNuRSxXQUFPLEtBQUssUUFBUSxLQUFLLFlBQVksaUJBQWlCLGdCQUFnQjtNQUNwRSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7Ozs7RUFPQSxNQUFNLGNBQ0osVUFDQSxNQUNBLFNBQTJEO0FBRTNELFVBQU0sTUFBTSxNQUFNLEtBQUssT0FBTyxVQUFVLE1BQU0sT0FBTztBQUNyRCxXQUFPLE1BQU0sS0FBSyxLQUFLLFVBQVUsSUFBSSxJQUFJLE9BQU87RUFDbEQ7Ozs7OztFQU9BLGdCQUNFLFVBQ0EsTUFDQSxTQUE2QjtBQUU3QixXQUFPLGdCQUFnQixzQkFBc0IsVUFBVSxLQUFLLFFBQVEsS0FBSyxRQUFRLE1BQU0sTUFBTSxPQUFPO0VBQ3RHOzs7Ozs7RUFPQSxNQUFNLEtBQ0osVUFDQSxPQUNBLFNBQTJEO0FBRTNELFVBQU0sVUFBcUMsRUFBRSxHQUFHLG1DQUFTLFNBQVMsMkJBQTJCLE9BQU07QUFFbkcsUUFBSSxtQ0FBUyxnQkFBZ0I7QUFDM0IsY0FBUSxrQ0FBa0MsSUFBSSxRQUFRLGVBQWUsU0FBUTs7QUFHL0UsV0FBTyxNQUFNO0FBQ1gsWUFBTSxFQUFFLE1BQU0sS0FBSyxTQUFRLElBQUssTUFBTSxLQUFLLFNBQVMsVUFBVSxPQUFPO1FBQ25FLEdBQUc7UUFDSCxTQUFTLEVBQUUsR0FBRyxtQ0FBUyxTQUFTLEdBQUcsUUFBTztPQUMzQyxFQUFFLGFBQVk7QUFFZixjQUFRLElBQUksUUFBUTtRQUVsQixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7QUFDSCxjQUFJLGdCQUFnQjtBQUVwQixjQUFJLG1DQUFTLGdCQUFnQjtBQUMzQiw0QkFBZ0IsUUFBUTtpQkFDbkI7QUFDTCxrQkFBTSxpQkFBaUIsU0FBUyxRQUFRLElBQUksc0JBQXNCO0FBQ2xFLGdCQUFJLGdCQUFnQjtBQUNsQixvQkFBTSxtQkFBbUIsU0FBUyxjQUFjO0FBQ2hELGtCQUFJLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztBQUM1QixnQ0FBZ0I7Ozs7QUFJdEIsZ0JBQU0sTUFBTSxhQUFhO0FBQ3pCO1FBRUYsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO0FBQ0gsaUJBQU87OztFQUdmOzs7O0VBS0EsT0FBTyxVQUFrQixNQUFpQyxTQUE2QjtBQUNyRixXQUFPLGdCQUFnQixzQkFBc0IsVUFBVSxLQUFLLFFBQVEsS0FBSyxRQUFRLE1BQU0sTUFBTSxPQUFPO0VBQ3RHO0VBMEJBLGtCQUNFLFVBQ0EsT0FDQSxNQUNBLFNBQTZCO0FBOVBqQyxRQUFBQTtBQWdRSSxXQUFPLEtBQUssUUFBUSxLQUFLLFlBQVksaUJBQWlCLDZCQUE2QjtNQUNqRjtNQUNBLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO01BQzlELFNBQVFBLE1BQUEsS0FBSyxXQUFMLE9BQUFBLE1BQWU7S0FDeEI7RUFDSDs7Ozs7O0VBT0EsTUFBTSx5QkFDSixVQUNBLE9BQ0EsTUFDQSxTQUEyRDtBQUUzRCxVQUFNLE1BQU0sTUFBTSxLQUFLLGtCQUFrQixVQUFVLE9BQU8sTUFBTSxPQUFPO0FBQ3ZFLFdBQU8sTUFBTSxLQUFLLEtBQUssVUFBVSxJQUFJLElBQUksT0FBTztFQUNsRDs7Ozs7O0VBT0Esd0JBQ0UsVUFDQSxPQUNBLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxnQkFBZ0IsMEJBQ3JCLFVBQ0EsT0FDQSxLQUFLLFFBQVEsS0FBSyxRQUFRLE1BQzFCLE1BQ0EsT0FBTztFQUVYOztBQUdJLElBQU8sV0FBUCxjQUF3QixXQUFlOztBQW0xQzdDLEtBQUssV0FBVztBQUNoQixLQUFLLFFBQVE7QUFDYixLQUFLLGVBQWU7OztBQzVqRGQsSUFBTyxVQUFQLGNBQXVCLFlBQVc7RUFBeEMsY0FBQTs7QUFDRSxTQUFBLE9BQXFCLElBQVksS0FBSyxLQUFLLE9BQU87QUFDbEQsU0FBQSxXQUFpQyxJQUFnQkMsVUFBUyxLQUFLLE9BQU87RUFxR3hFO0VBOUZFLE9BQ0UsT0FBaUQsQ0FBQSxHQUNqRCxTQUE2QjtBQUU3QixRQUFJLGlCQUFpQixJQUFJLEdBQUc7QUFDMUIsYUFBTyxLQUFLLE9BQU8sQ0FBQSxHQUFJLElBQUk7O0FBRTdCLFdBQU8sS0FBSyxRQUFRLEtBQUssWUFBWTtNQUNuQztNQUNBLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7Ozs7RUFLQSxTQUFTLFVBQWtCLFNBQTZCO0FBQ3RELFdBQU8sS0FBSyxRQUFRLElBQUksWUFBWSxZQUFZO01BQzlDLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7Ozs7RUFLQSxPQUFPLFVBQWtCLE1BQTBCLFNBQTZCO0FBQzlFLFdBQU8sS0FBSyxRQUFRLEtBQUssWUFBWSxZQUFZO01BQy9DO01BQ0EsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7OztFQUtBLElBQUksVUFBa0IsU0FBNkI7QUFDakQsV0FBTyxLQUFLLFFBQVEsT0FBTyxZQUFZLFlBQVk7TUFDakQsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDtFQWlCQSxhQUNFLE1BQ0EsU0FBNkI7QUE1SWpDLFFBQUFDO0FBOElJLFdBQU8sS0FBSyxRQUFRLEtBQUssaUJBQWlCO01BQ3hDO01BQ0EsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87TUFDOUQsU0FBUUEsTUFBQSxLQUFLLFdBQUwsT0FBQUEsTUFBZTtLQUN4QjtFQUNIOzs7Ozs7RUFPQSxNQUFNLGlCQUNKLE1BQ0EsU0FBMkQ7QUFFM0QsVUFBTSxNQUFNLE1BQU0sS0FBSyxhQUFhLE1BQU0sT0FBTztBQUNqRCxXQUFPLE1BQU0sS0FBSyxLQUFLLEtBQUssSUFBSSxXQUFXLElBQUksSUFBSSxPQUFPO0VBQzVEOzs7O0VBS0EsbUJBQ0UsTUFDQSxTQUE2QjtBQUU3QixXQUFPLGdCQUFnQiw0QkFBNEIsTUFBTSxLQUFLLFFBQVEsS0FBSyxTQUFTLE9BQU87RUFDN0Y7O0FBKzdDRixRQUFRLE9BQU87QUFDZixRQUFRLFdBQVc7QUFDbkIsUUFBUSxXQUFXRDtBQUNuQixRQUFRLGVBQWU7OztBQ2prRGpCLElBQU8sT0FBUCxjQUFvQixZQUFXO0VBQXJDLGNBQUE7O0FBQ0UsU0FBQSxXQUFpQyxJQUFnQixTQUFTLEtBQUssT0FBTztBQUN0RSxTQUFBLE9BQXFCLElBQVlFLE1BQUssS0FBSyxPQUFPO0FBQ2xELFNBQUEsYUFBdUMsSUFBa0IsV0FBVyxLQUFLLE9BQU87QUFDaEYsU0FBQSxVQUE4QixJQUFlLFFBQVEsS0FBSyxPQUFPO0VBQ25FOztBQUVBLEtBQUssV0FBVztBQUNoQixLQUFLLGFBQWE7QUFDbEIsS0FBSyxpQkFBaUI7QUFDdEIsS0FBSyxVQUFVOzs7QUM3Q1QsSUFBT0MsZUFBUCxjQUEyQixZQUFXO0VBYTFDLE9BQ0UsTUFDQSxTQUE2QjtBQXhCakMsUUFBQUM7QUEwQkksV0FBTyxLQUFLLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRSxNQUFNLEdBQUcsU0FBUyxTQUFRQSxNQUFBLEtBQUssV0FBTCxPQUFBQSxNQUFlLE1BQUssQ0FBRTtFQUc3Rjs7OztBQ3hCSSxJQUFPLGFBQVAsY0FBMEIsWUFBVzs7OztFQUl6QyxPQUNFLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsS0FBSyxlQUFlLEVBQUUsTUFBTSxHQUFHLFFBQU8sQ0FBRTtFQUM5RDs7OztBQ0pJLElBQU8sUUFBUCxjQUFxQixZQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3QnBDLE9BQU8sTUFBd0IsU0FBNkI7QUFDMUQsV0FBTyxLQUFLLFFBQVEsS0FBSyxVQUFlLDRCQUE0QixFQUFFLE1BQU0sR0FBRyxRQUFPLENBQUUsQ0FBQztFQUMzRjs7OztFQUtBLFNBQVMsUUFBZ0IsU0FBNkI7QUFDcEQsV0FBTyxLQUFLLFFBQVEsSUFBSSxVQUFVLFVBQVUsT0FBTztFQUNyRDtFQU9BLEtBQ0UsUUFBOEMsQ0FBQSxHQUM5QyxTQUE2QjtBQUU3QixRQUFJLGlCQUFpQixLQUFLLEdBQUc7QUFDM0IsYUFBTyxLQUFLLEtBQUssQ0FBQSxHQUFJLEtBQUs7O0FBRTVCLFdBQU8sS0FBSyxRQUFRLFdBQVcsVUFBVSxpQkFBaUIsRUFBRSxPQUFPLEdBQUcsUUFBTyxDQUFFO0VBQ2pGOzs7O0VBS0EsSUFBSSxRQUFnQixTQUE2QjtBQUMvQyxXQUFPLEtBQUssUUFBUSxPQUFPLFVBQVUsVUFBVSxPQUFPO0VBQ3hEOzs7O0VBS0EsUUFBUSxRQUFnQixTQUE2QjtBQUNuRCxXQUFPLEtBQUssUUFBUSxJQUFJLFVBQVUsa0JBQWtCO01BQ2xELEdBQUc7TUFDSCxTQUFTLEVBQUUsUUFBUSxzQkFBc0IsR0FBRyxtQ0FBUyxRQUFPO01BQzVELGtCQUFrQjtLQUNuQjtFQUNIOzs7Ozs7RUFPQSxnQkFBZ0IsUUFBZ0IsU0FBNkI7QUFDM0QsV0FBTyxLQUFLLFFBQVEsSUFBSSxVQUFVLGtCQUFrQixPQUFPO0VBQzdEOzs7O0VBS0EsTUFBTSxrQkFDSixJQUNBLEVBQUUsZUFBZSxLQUFNLFVBQVUsS0FBSyxLQUFLLElBQUksSUFBa0QsQ0FBQSxHQUFFO0FBRW5HLFVBQU0sa0JBQWtCLG9CQUFJLElBQUksQ0FBQyxhQUFhLFNBQVMsU0FBUyxDQUFDO0FBRWpFLFVBQU1DLFNBQVEsS0FBSyxJQUFHO0FBQ3RCLFFBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxFQUFFO0FBRWpDLFdBQU8sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLE1BQU0sR0FBRztBQUN4RCxZQUFNLE1BQU0sWUFBWTtBQUV4QixhQUFPLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFDN0IsVUFBSSxLQUFLLElBQUcsSUFBS0EsU0FBUSxTQUFTO0FBQ2hDLGNBQU0sSUFBSSwwQkFBMEI7VUFDbEMsU0FBUyxpQ0FBaUMsaUNBQWlDO1NBQzVFOzs7QUFJTCxXQUFPO0VBQ1Q7O0FBR0ksSUFBTyxrQkFBUCxjQUErQixXQUFzQjs7QUE2RzNELE1BQU0sa0JBQWtCOzs7QUN4TmxCLElBQU8sY0FBUCxjQUEyQixZQUFXO0VBYTFDLEtBQ0UsaUJBQ0EsUUFBb0QsQ0FBQSxHQUNwRCxTQUE2QjtBQUU3QixRQUFJLGlCQUFpQixLQUFLLEdBQUc7QUFDM0IsYUFBTyxLQUFLLEtBQUssaUJBQWlCLENBQUEsR0FBSSxLQUFLOztBQUU3QyxXQUFPLEtBQUssUUFBUSxXQUNsQixxQkFBcUIsK0JBQ3JCLDhCQUNBLEVBQUUsT0FBTyxHQUFHLFFBQU8sQ0FBRTtFQUV6Qjs7QUFHSSxJQUFPLCtCQUFQLGNBQTRDLFdBQW1DOztBQWtFckYsWUFBWSwrQkFBK0I7OztBQ3hGckMsSUFBTyxPQUFQLGNBQW9CLFlBQVc7RUFBckMsY0FBQTs7QUFDRSxTQUFBLGNBQTBDLElBQW1CLFlBQVksS0FBSyxPQUFPO0VBMEV2Rjs7Ozs7Ozs7OztFQS9ERSxPQUFPLE1BQXVCLFNBQTZCO0FBQ3pELFdBQU8sS0FBSyxRQUFRLEtBQUsscUJBQXFCLEVBQUUsTUFBTSxHQUFHLFFBQU8sQ0FBRTtFQUNwRTs7Ozs7O0VBT0EsU0FBUyxpQkFBeUIsU0FBNkI7QUFDN0QsV0FBTyxLQUFLLFFBQVEsSUFBSSxxQkFBcUIsbUJBQW1CLE9BQU87RUFDekU7RUFVQSxLQUNFLFFBQTZDLENBQUEsR0FDN0MsU0FBNkI7QUFFN0IsUUFBSSxpQkFBaUIsS0FBSyxHQUFHO0FBQzNCLGFBQU8sS0FBSyxLQUFLLENBQUEsR0FBSSxLQUFLOztBQUU1QixXQUFPLEtBQUssUUFBUSxXQUFXLHFCQUFxQixvQkFBb0IsRUFBRSxPQUFPLEdBQUcsUUFBTyxDQUFFO0VBQy9GOzs7O0VBS0EsT0FBTyxpQkFBeUIsU0FBNkI7QUFDM0QsV0FBTyxLQUFLLFFBQVEsS0FBSyxxQkFBcUIsMEJBQTBCLE9BQU87RUFDakY7RUFjQSxXQUNFLGlCQUNBLFFBQW1ELENBQUEsR0FDbkQsU0FBNkI7QUFFN0IsUUFBSSxpQkFBaUIsS0FBSyxHQUFHO0FBQzNCLGFBQU8sS0FBSyxXQUFXLGlCQUFpQixDQUFBLEdBQUksS0FBSzs7QUFFbkQsV0FBTyxLQUFLLFFBQVEsV0FBVyxxQkFBcUIsMEJBQTBCLHlCQUF5QjtNQUNyRztNQUNBLEdBQUc7S0FDSjtFQUNIOztBQUdJLElBQU8scUJBQVAsY0FBa0MsV0FBeUI7O0FBRTNELElBQU8sMEJBQVAsY0FBdUMsV0FBOEI7O0FBMmxCM0UsS0FBSyxxQkFBcUI7QUFDMUIsS0FBSywwQkFBMEI7QUFDL0IsS0FBSyxjQUFjO0FBQ25CLEtBQUssK0JBQStCOzs7QUN6cUI5QixJQUFPLGFBQVAsY0FBMEIsWUFBVztFQUEzQyxjQUFBOztBQUNFLFNBQUEsT0FBcUIsSUFBWSxLQUFLLEtBQUssT0FBTztFQUNwRDs7QUFFQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVywwQkFBMEI7OztBQ25CL0IsSUFBTyxTQUFQLGNBQXNCLFlBQVc7Ozs7RUFJckMsZ0JBQ0UsTUFDQSxTQUE2QjtBQUU3QixXQUFPLEtBQUssUUFBUSxLQUFLLHNCQUEyQiw0QkFBNEIsRUFBRSxNQUFNLEdBQUcsUUFBTyxDQUFFLENBQUM7RUFDdkc7Ozs7RUFLQSxLQUFLLE1BQXVCLFNBQTZCO0FBQ3ZELFdBQU8sS0FBSyxRQUFRLEtBQUssaUJBQXNCLDRCQUE0QixFQUFFLE1BQU0sR0FBRyxRQUFPLENBQUUsQ0FBQztFQUNsRzs7OztFQUtBLFNBQVMsTUFBMkIsU0FBNkI7QUFDL0QsV0FBTyxLQUFLLFFBQVEsS0FBSyx1QkFBdUIsRUFBRSxNQUFNLEdBQUcsUUFBTyxDQUFFO0VBQ3RFOzs7O0FDdEJJLElBQU8sU0FBUCxjQUFzQixZQUFXOzs7OztFQUtyQyxTQUFTQyxRQUFlLFNBQTZCO0FBQ25ELFdBQU8sS0FBSyxRQUFRLElBQUksV0FBV0EsVUFBUyxPQUFPO0VBQ3JEOzs7OztFQU1BLEtBQUssU0FBNkI7QUFDaEMsV0FBTyxLQUFLLFFBQVEsV0FBVyxXQUFXLFlBQVksT0FBTztFQUMvRDs7Ozs7RUFNQSxJQUFJQSxRQUFlLFNBQTZCO0FBQzlDLFdBQU8sS0FBSyxRQUFRLE9BQU8sV0FBV0EsVUFBUyxPQUFPO0VBQ3hEOztBQU1JLElBQU8sYUFBUCxjQUEwQixLQUFXOztBQW1DM0MsT0FBTyxhQUFhOzs7QUNqRWQsSUFBTyxjQUFQLGNBQTJCLFlBQVc7Ozs7O0VBSzFDLE9BQ0UsTUFDQSxTQUE2QjtBQUU3QixXQUFPLEtBQUssUUFBUSxLQUFLLGdCQUFnQixFQUFFLE1BQU0sR0FBRyxRQUFPLENBQUU7RUFDL0Q7Ozs7QUNVSSxTQUFVLG1CQUdkLFVBQW9CLFFBQWM7QUFDbEMsTUFBSSxDQUFDLFVBQVUsQ0FBQ0MsdUJBQXNCLE1BQU0sR0FBRztBQUM3QyxXQUFPO01BQ0wsR0FBRztNQUNILGVBQWU7TUFDZixRQUFRLFNBQVMsT0FBTyxJQUFJLENBQUMsU0FBUTtBQUNuQyxZQUFJLEtBQUssU0FBUyxpQkFBaUI7QUFDakMsaUJBQU87WUFDTCxHQUFHO1lBQ0gsa0JBQWtCOzs7QUFJdEIsWUFBSSxLQUFLLFNBQVMsV0FBVztBQUMzQixpQkFBTztZQUNMLEdBQUc7WUFDSCxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUMsYUFBYTtjQUN0QyxHQUFHO2NBQ0gsUUFBUTtjQUNSOztlQUVDO0FBQ0wsaUJBQU87O01BRVgsQ0FBQzs7O0FBSUwsU0FBTyxjQUFjLFVBQVUsTUFBTTtBQUN2QztBQUVNLFNBQVUsY0FHZCxVQUFvQixRQUFjO0FBQ2xDLFFBQU0sU0FBbUQsU0FBUyxPQUFPLElBQ3ZFLENBQUMsU0FBMkM7QUFDMUMsUUFBSSxLQUFLLFNBQVMsaUJBQWlCO0FBQ2pDLGFBQU87UUFDTCxHQUFHO1FBQ0gsa0JBQWtCQyxlQUFjLFFBQVEsSUFBSTs7O0FBR2hELFFBQUksS0FBSyxTQUFTLFdBQVc7QUFDM0IsWUFBTSxVQUF5QyxLQUFLLFFBQVEsSUFBSSxDQUFDQyxhQUFXO0FBQzFFLFlBQUlBLFNBQVEsU0FBUyxlQUFlO0FBQ2xDLGlCQUFPO1lBQ0wsR0FBR0E7WUFDSCxRQUFRLGdCQUFnQixRQUFRQSxTQUFRLElBQUk7OztBQUloRCxlQUFPQTtNQUNULENBQUM7QUFFRCxhQUFPO1FBQ0wsR0FBRztRQUNIOzs7QUFJSixXQUFPO0VBQ1QsQ0FBQztBQUdILFFBQU0sU0FBeUQsT0FBTyxPQUFPLENBQUEsR0FBSSxVQUFVLEVBQUUsT0FBTSxDQUFFO0FBQ3JHLE1BQUksQ0FBQyxPQUFPLHlCQUF5QixVQUFVLGFBQWEsR0FBRztBQUM3RCxrQkFBYyxNQUFNOztBQUd0QixTQUFPLGVBQWUsUUFBUSxpQkFBaUI7SUFDN0MsWUFBWTtJQUNaLE1BQUc7QUFDRCxpQkFBV0MsV0FBVSxPQUFPLFFBQVE7QUFDbEMsWUFBSUEsUUFBTyxTQUFTLFdBQVc7QUFDN0I7O0FBR0YsbUJBQVcsV0FBV0EsUUFBTyxTQUFTO0FBQ3BDLGNBQUksUUFBUSxTQUFTLGlCQUFpQixRQUFRLFdBQVcsTUFBTTtBQUM3RCxtQkFBTyxRQUFROzs7O0FBS3JCLGFBQU87SUFDVDtHQUNEO0FBRUQsU0FBTztBQUNUO0FBRUEsU0FBUyxnQkFHUCxRQUFnQixTQUFlOztBQUMvQixRQUFJLE1BQUFDLE1BQUEsT0FBTyxTQUFQLGdCQUFBQSxJQUFhLFdBQWIsbUJBQXFCLFVBQVMsZUFBZTtBQUMvQyxXQUFPOztBQUdULE1BQUksaUJBQWUsWUFBTyxTQUFQLG1CQUFhLFNBQVE7QUFDdEMsVUFBTSxlQUFjLFlBQU8sU0FBUCxtQkFBYTtBQUNqQyxXQUFPLFlBQVksVUFBVSxPQUFPOztBQUd0QyxTQUFPLEtBQUssTUFBTSxPQUFPO0FBQzNCO0FBRU0sU0FBVUosdUJBQXNCLFFBQXFDOztBQUN6RSxNQUFJLDhCQUE2QkksTUFBQSxPQUFPLFNBQVAsZ0JBQUFBLElBQWEsTUFBTSxHQUFHO0FBQ3JELFdBQU87O0FBR1QsU0FBTztBQUNUO0FBa0RNLFNBQVVDLG9CQUFtQixNQUFTO0FBQzFDLFVBQU8sNkJBQU8sZUFBYztBQUM5QjtBQUVBLFNBQVMsbUJBQW1CLGFBQTBCLE1BQVk7QUFDaEUsU0FBTyxZQUFZLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxjQUFjLEtBQUssU0FBUyxJQUFJO0FBR2xGO0FBRUEsU0FBU0MsZUFDUCxRQUNBLFVBQWtDOztBQUVsQyxRQUFNLFlBQVksb0JBQW1CQyxNQUFBLE9BQU8sVUFBUCxPQUFBQSxNQUFnQixDQUFBLEdBQUksU0FBUyxJQUFJO0FBRXRFLFNBQU87SUFDTCxHQUFHO0lBQ0gsR0FBRztJQUNILGtCQUNFRixvQkFBbUIsU0FBUyxJQUFJLFVBQVUsVUFBVSxTQUFTLFNBQVMsS0FDcEUsdUNBQVcsVUFBUyxLQUFLLE1BQU0sU0FBUyxTQUFTLElBQ2pEOztBQUVSO0FBOEJNLFNBQVUsY0FBYyxLQUFhO0FBQ3pDLFFBQU0sUUFBa0IsQ0FBQTtBQUN4QixhQUFXLFVBQVUsSUFBSSxRQUFRO0FBQy9CLFFBQUksT0FBTyxTQUFTLFdBQVc7QUFDN0I7O0FBR0YsZUFBVyxXQUFXLE9BQU8sU0FBUztBQUNwQyxVQUFJLFFBQVEsU0FBUyxlQUFlO0FBQ2xDLGNBQU0sS0FBSyxRQUFRLElBQUk7Ozs7QUFLN0IsTUFBSSxjQUFjLE1BQU0sS0FBSyxFQUFFO0FBQ2pDOzs7QUM1UE0sSUFBTyxhQUFQLGNBQTBCLFlBQVc7RUFhekMsS0FDRSxZQUNBLFFBQW1ELENBQUEsR0FDbkQsU0FBNkI7QUFFN0IsUUFBSSxpQkFBaUIsS0FBSyxHQUFHO0FBQzNCLGFBQU8sS0FBSyxLQUFLLFlBQVksQ0FBQSxHQUFJLEtBQUs7O0FBRXhDLFdBQU8sS0FBSyxRQUFRLFdBQVcsY0FBYywwQkFBMEIsbUJBQW1CO01BQ3hGO01BQ0EsR0FBRztLQUNKO0VBQ0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSSxJQUFPLGlCQUFQLGNBQ0ksWUFBMkI7RUFPbkMsWUFBWSxRQUFzQztBQUNoRCxVQUFLOztBQUxQLDJCQUFBLElBQUEsTUFBQSxNQUFBO0FBQ0EsNENBQUEsSUFBQSxNQUFBLE1BQUE7QUFDQSxrQ0FBQSxJQUFBLE1BQUEsTUFBQTtBQUlFLElBQUFHLHlCQUFBLE1BQUksd0JBQVcsUUFBTSxHQUFBO0VBQ3ZCO0VBRUEsT0FBTyxlQUNMLFFBQ0EsUUFDQSxTQUE2QjtBQUU3QixVQUFNLFNBQVMsSUFBSSxlQUF3QixNQUF1QztBQUNsRixXQUFPLEtBQUssTUFDVixPQUFPLGdCQUFnQixRQUFRLFFBQVE7TUFDckMsR0FBRztNQUNILFNBQVMsRUFBRSxHQUFHLG1DQUFTLFNBQVMsNkJBQTZCLFNBQVE7S0FDdEUsQ0FBQztBQUVKLFdBQU87RUFDVDtFQXNFVSxNQUFNLGdCQUNkLFFBQ0EsUUFDQSxTQUE2Qjs7QUFFN0IsVUFBTSxTQUFTLG1DQUFTO0FBQ3hCLFFBQUksUUFBUTtBQUNWLFVBQUksT0FBTztBQUFTLGFBQUssV0FBVyxNQUFLO0FBQ3pDLGFBQU8saUJBQWlCLFNBQVMsTUFBTSxLQUFLLFdBQVcsTUFBSyxDQUFFOztBQUVoRSxJQUFBQyx5QkFBQSxNQUFJLDJCQUFBLEtBQUEsNEJBQUEsRUFBYyxLQUFsQixJQUFJO0FBRUosVUFBTSxTQUFTLE1BQU0sT0FBTyxVQUFVLE9BQ3BDLEVBQUUsR0FBRyxRQUFRLFFBQVEsS0FBSSxHQUN6QixFQUFFLEdBQUcsU0FBUyxRQUFRLEtBQUssV0FBVyxPQUFNLENBQUU7QUFFaEQsU0FBSyxXQUFVO0FBQ2YscUJBQWlCLFNBQVMsUUFBUTtBQUNoQyxNQUFBQSx5QkFBQSxNQUFJLDJCQUFBLEtBQUEsd0JBQUEsRUFBVSxLQUFkLE1BQWUsS0FBSzs7QUFFdEIsU0FBSUMsTUFBQSxPQUFPLFdBQVcsV0FBbEIsZ0JBQUFBLElBQTBCLFNBQVM7QUFDckMsWUFBTSxJQUFJLGtCQUFpQjs7QUFFN0IsV0FBT0QseUJBQUEsTUFBSSwyQkFBQSxLQUFBLDBCQUFBLEVBQVksS0FBaEIsSUFBSTtFQUNiO0VBaUVBLEVBQUEseUJBQUEsb0JBQUEsUUFBQSxHQUFBLDBDQUFBLG9CQUFBLFFBQUEsR0FBQSxnQ0FBQSxvQkFBQSxRQUFBLEdBQUEsNEJBQUEsb0JBQUEsUUFBQSxHQUFBLCtCQUFBLFNBQUFFLGdDQUFBO0FBNUpFLFFBQUksS0FBSztBQUFPO0FBQ2hCLElBQUFILHlCQUFBLE1BQUkseUNBQTRCLFFBQVMsR0FBQTtFQUMzQyxHQUFDLDJCQUFBLFNBQUFJLDBCQUV3QyxPQUEwQjtBQUNqRSxRQUFJLEtBQUs7QUFBTztBQUVoQixVQUFNLFdBQVdILHlCQUFBLE1BQUksMkJBQUEsS0FBQSxrQ0FBQSxFQUFvQixLQUF4QixNQUF5QixLQUFLO0FBQy9DLFNBQUssTUFBTSxTQUFTLEtBQUs7QUFFekIsWUFBUSxNQUFNLE1BQU07TUFDbEIsS0FBSyw4QkFBOEI7QUFDakMsY0FBTSxTQUFTLFNBQVMsT0FBTyxNQUFNLFlBQVk7QUFDakQsWUFBSSxDQUFDLFFBQVE7QUFDWCxnQkFBTSxJQUFJLFlBQVksMkJBQTJCLE1BQU0sY0FBYzs7QUFFdkUsWUFBSSxPQUFPLFNBQVMsV0FBVztBQUM3QixnQkFBTSxVQUFVLE9BQU8sUUFBUSxNQUFNLGFBQWE7QUFDbEQsY0FBSSxDQUFDLFNBQVM7QUFDWixrQkFBTSxJQUFJLFlBQVksNEJBQTRCLE1BQU0sZUFBZTs7QUFFekUsY0FBSSxRQUFRLFNBQVMsZUFBZTtBQUNsQyxrQkFBTSxJQUFJLFlBQVksNkNBQTZDLFFBQVEsTUFBTTs7QUFHbkYsZUFBSyxNQUFNLDhCQUE4QjtZQUN2QyxHQUFHO1lBQ0gsVUFBVSxRQUFRO1dBQ25COztBQUVIOztNQUVGLEtBQUssMENBQTBDO0FBQzdDLGNBQU0sU0FBUyxTQUFTLE9BQU8sTUFBTSxZQUFZO0FBQ2pELFlBQUksQ0FBQyxRQUFRO0FBQ1gsZ0JBQU0sSUFBSSxZQUFZLDJCQUEyQixNQUFNLGNBQWM7O0FBRXZFLFlBQUksT0FBTyxTQUFTLGlCQUFpQjtBQUNuQyxlQUFLLE1BQU0sMENBQTBDO1lBQ25ELEdBQUc7WUFDSCxVQUFVLE9BQU87V0FDbEI7O0FBRUg7O01BRUY7QUFFRSxhQUFLLE1BQU0sTUFBTSxNQUFNLEtBQUs7QUFDNUI7O0VBRU4sR0FBQyw2QkFBQSxTQUFBSSw4QkFBQTtBQUdDLFFBQUksS0FBSyxPQUFPO0FBQ2QsWUFBTSxJQUFJLFlBQVkseUNBQXlDOztBQUVqRSxVQUFNLFdBQVdKLHlCQUFBLE1BQUkseUNBQUEsR0FBQTtBQUNyQixRQUFJLENBQUMsVUFBVTtBQUNiLFlBQU0sSUFBSSxZQUFZLDBDQUEwQzs7QUFFbEUsSUFBQUQseUJBQUEsTUFBSSx5Q0FBNEIsUUFBUyxHQUFBO0FBQ3pDLFVBQU0saUJBQWlCLGlCQUEwQixVQUFVQyx5QkFBQSxNQUFJLHdCQUFBLEdBQUEsQ0FBUTtBQUN2RSxJQUFBRCx5QkFBQSxNQUFJLCtCQUFrQixnQkFBYyxHQUFBO0FBRXBDLFdBQU87RUFDVCxHQUFDLHFDQUFBLFNBQUFNLG9DQTRCbUIsT0FBMEI7QUFDNUMsUUFBSSxXQUFXTCx5QkFBQSxNQUFJLHlDQUFBLEdBQUE7QUFDbkIsUUFBSSxDQUFDLFVBQVU7QUFDYixVQUFJLE1BQU0sU0FBUyxvQkFBb0I7QUFDckMsY0FBTSxJQUFJLFlBQ1IsNkVBQTZFLE1BQU0sTUFBTTs7QUFHN0YsaUJBQVdELHlCQUFBLE1BQUkseUNBQTRCLE1BQU0sVUFBUSxHQUFBO0FBQ3pELGFBQU87O0FBR1QsWUFBUSxNQUFNLE1BQU07TUFDbEIsS0FBSyw4QkFBOEI7QUFDakMsaUJBQVMsT0FBTyxLQUFLLE1BQU0sSUFBSTtBQUMvQjs7TUFFRixLQUFLLCtCQUErQjtBQUNsQyxjQUFNLFNBQVMsU0FBUyxPQUFPLE1BQU0sWUFBWTtBQUNqRCxZQUFJLENBQUMsUUFBUTtBQUNYLGdCQUFNLElBQUksWUFBWSwyQkFBMkIsTUFBTSxjQUFjOztBQUV2RSxZQUFJLE9BQU8sU0FBUyxXQUFXO0FBQzdCLGlCQUFPLFFBQVEsS0FBSyxNQUFNLElBQUk7O0FBRWhDOztNQUVGLEtBQUssOEJBQThCO0FBQ2pDLGNBQU0sU0FBUyxTQUFTLE9BQU8sTUFBTSxZQUFZO0FBQ2pELFlBQUksQ0FBQyxRQUFRO0FBQ1gsZ0JBQU0sSUFBSSxZQUFZLDJCQUEyQixNQUFNLGNBQWM7O0FBRXZFLFlBQUksT0FBTyxTQUFTLFdBQVc7QUFDN0IsZ0JBQU0sVUFBVSxPQUFPLFFBQVEsTUFBTSxhQUFhO0FBQ2xELGNBQUksQ0FBQyxTQUFTO0FBQ1osa0JBQU0sSUFBSSxZQUFZLDRCQUE0QixNQUFNLGVBQWU7O0FBRXpFLGNBQUksUUFBUSxTQUFTLGVBQWU7QUFDbEMsa0JBQU0sSUFBSSxZQUFZLDZDQUE2QyxRQUFRLE1BQU07O0FBRW5GLGtCQUFRLFFBQVEsTUFBTTs7QUFFeEI7O01BRUYsS0FBSywwQ0FBMEM7QUFDN0MsY0FBTSxTQUFTLFNBQVMsT0FBTyxNQUFNLFlBQVk7QUFDakQsWUFBSSxDQUFDLFFBQVE7QUFDWCxnQkFBTSxJQUFJLFlBQVksMkJBQTJCLE1BQU0sY0FBYzs7QUFFdkUsWUFBSSxPQUFPLFNBQVMsaUJBQWlCO0FBQ25DLGlCQUFPLGFBQWEsTUFBTTs7QUFFNUI7O01BRUYsS0FBSyxzQkFBc0I7QUFDekIsUUFBQUEseUJBQUEsTUFBSSx5Q0FBNEIsTUFBTSxVQUFRLEdBQUE7QUFDOUM7OztBQUlKLFdBQU87RUFDVCxHQUVDLE9BQU8sY0FBYSxJQUFDO0FBQ3BCLFVBQU0sWUFBbUMsQ0FBQTtBQUN6QyxVQUFNLFlBR0EsQ0FBQTtBQUNOLFFBQUksT0FBTztBQUVYLFNBQUssR0FBRyxTQUFTLENBQUMsVUFBUztBQUN6QixZQUFNLFNBQVMsVUFBVSxNQUFLO0FBQzlCLFVBQUksUUFBUTtBQUNWLGVBQU8sUUFBUSxLQUFLO2FBQ2Y7QUFDTCxrQkFBVSxLQUFLLEtBQUs7O0lBRXhCLENBQUM7QUFFRCxTQUFLLEdBQUcsT0FBTyxNQUFLO0FBQ2xCLGFBQU87QUFDUCxpQkFBVyxVQUFVLFdBQVc7QUFDOUIsZUFBTyxRQUFRLE1BQVM7O0FBRTFCLGdCQUFVLFNBQVM7SUFDckIsQ0FBQztBQUVELFNBQUssR0FBRyxTQUFTLENBQUMsUUFBTztBQUN2QixhQUFPO0FBQ1AsaUJBQVcsVUFBVSxXQUFXO0FBQzlCLGVBQU8sT0FBTyxHQUFHOztBQUVuQixnQkFBVSxTQUFTO0lBQ3JCLENBQUM7QUFFRCxTQUFLLEdBQUcsU0FBUyxDQUFDLFFBQU87QUFDdkIsYUFBTztBQUNQLGlCQUFXLFVBQVUsV0FBVztBQUM5QixlQUFPLE9BQU8sR0FBRzs7QUFFbkIsZ0JBQVUsU0FBUztJQUNyQixDQUFDO0FBRUQsV0FBTztNQUNMLE1BQU0sWUFBeUQ7QUFDN0QsWUFBSSxDQUFDLFVBQVUsUUFBUTtBQUNyQixjQUFJLE1BQU07QUFDUixtQkFBTyxFQUFFLE9BQU8sUUFBVyxNQUFNLEtBQUk7O0FBRXZDLGlCQUFPLElBQUksUUFBeUMsQ0FBQ08sVUFBUyxXQUM1RCxVQUFVLEtBQUssRUFBRSxTQUFBQSxVQUFTLE9BQU0sQ0FBRSxDQUFDLEVBQ25DLEtBQUssQ0FBQ0MsV0FBV0EsU0FBUSxFQUFFLE9BQU9BLFFBQU8sTUFBTSxNQUFLLElBQUssRUFBRSxPQUFPLFFBQVcsTUFBTSxLQUFJLENBQUc7O0FBRTlGLGNBQU0sUUFBUSxVQUFVLE1BQUs7QUFDN0IsZUFBTyxFQUFFLE9BQU8sT0FBTyxNQUFNLE1BQUs7TUFDcEM7TUFDQSxRQUFRLFlBQVc7QUFDakIsYUFBSyxNQUFLO0FBQ1YsZUFBTyxFQUFFLE9BQU8sUUFBVyxNQUFNLEtBQUk7TUFDdkM7O0VBRUo7Ozs7O0VBTUEsTUFBTSxnQkFBYTtBQUNqQixVQUFNLEtBQUssS0FBSTtBQUNmLFVBQU0sV0FBV1AseUJBQUEsTUFBSSwrQkFBQSxHQUFBO0FBQ3JCLFFBQUksQ0FBQztBQUFVLFlBQU0sSUFBSSxZQUFZLGlEQUFpRDtBQUN0RixXQUFPO0VBQ1Q7O0FBR0YsU0FBUyxpQkFDUCxVQUNBLFFBQXNDO0FBRXRDLFNBQU8sbUJBQW1CLFVBQVUsTUFBTTtBQUM1Qzs7O0FDelBNLElBQU8sWUFBUCxjQUF5QixZQUFXO0VBQTFDLGNBQUE7O0FBQ0UsU0FBQSxhQUF1QyxJQUFrQixXQUFXLEtBQUssT0FBTztFQXlGbEY7RUFqRUUsT0FDRSxNQUNBLFNBQTZCO0FBM0VqQyxRQUFBUTtBQTZFSSxXQUNFLEtBQUssUUFBUSxLQUFLLGNBQWMsRUFBRSxNQUFNLEdBQUcsU0FBUyxTQUFRQSxNQUFBLEtBQUssV0FBTCxPQUFBQSxNQUFlLE1BQUssQ0FBRSxFQUdsRixZQUFZLENBQUMsUUFBTztBQUNwQixVQUFJLFlBQVksT0FBTyxJQUFJLFdBQVcsWUFBWTtBQUNoRCxzQkFBYyxHQUFlOztBQUcvQixhQUFPO0lBQ1QsQ0FBQztFQUNIO0VBV0EsU0FDRSxZQUNBLFFBQXNELENBQUEsR0FDdEQsU0FBNkI7QUFFN0IsUUFBSSxpQkFBaUIsS0FBSyxHQUFHO0FBQzNCLGFBQU8sS0FBSyxTQUFTLFlBQVksQ0FBQSxHQUFJLEtBQUs7O0FBRTVDLFdBQU8sS0FBSyxRQUFRLElBQUksY0FBYyxjQUFjLEVBQUUsT0FBTyxHQUFHLFFBQU8sQ0FBRTtFQUMzRTs7OztFQUtBLElBQUksWUFBb0IsU0FBNkI7QUFDbkQsV0FBTyxLQUFLLFFBQVEsT0FBTyxjQUFjLGNBQWM7TUFDckQsR0FBRztNQUNILFNBQVMsRUFBRSxRQUFRLE9BQU8sR0FBRyxtQ0FBUyxRQUFPO0tBQzlDO0VBQ0g7RUFFQSxNQUNFLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsVUFDakIsT0FBTyxNQUFNLE9BQU8sRUFDcEIsWUFBWSxDQUFDLGFBQWEsY0FBYyxVQUFzQixJQUFJLENBQUM7RUFDeEU7Ozs7RUFLQSxPQUNFLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxlQUFlLGVBQXdCLEtBQUssU0FBUyxNQUFNLE9BQU87RUFDM0U7O0FBR0ksSUFBTyxvQkFBUCxjQUFpQyxXQUF3Qjs7QUFvcUYvRCxVQUFVLGFBQWE7OztBQzN5RmpCLElBQU8sUUFBUCxjQUFxQixZQUFXOzs7Ozs7Ozs7Ozs7OztFQWNwQyxPQUNFLFVBQ0EsTUFDQSxTQUE2QjtBQUU3QixXQUFPLEtBQUssUUFBUSxLQUNsQixZQUFZLGtCQUNQLDRCQUE0QixFQUFFLE1BQU0sR0FBRyxRQUFPLENBQUUsQ0FBQztFQUUxRDs7OztBQ3BCSSxJQUFPLFVBQVAsY0FBdUIsWUFBVztFQUF4QyxjQUFBOztBQUNFLFNBQUEsUUFBd0IsSUFBYSxNQUFNLEtBQUssT0FBTztFQXdEekQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFqQ0UsT0FBTyxNQUEwQixTQUE2QjtBQUM1RCxXQUFPLEtBQUssUUFBUSxLQUFLLFlBQVksRUFBRSxNQUFNLEdBQUcsUUFBTyxDQUFFO0VBQzNEOzs7O0VBS0EsT0FBTyxVQUFrQixTQUE2QjtBQUNwRCxXQUFPLEtBQUssUUFBUSxLQUFLLFlBQVksbUJBQW1CLE9BQU87RUFDakU7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkEsU0FDRSxVQUNBLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsS0FBSyxZQUFZLHFCQUFxQixFQUFFLE1BQU0sR0FBRyxRQUFPLENBQUU7RUFDaEY7O0FBZ0dGLFFBQVEsUUFBUTs7O0FDN0pULElBQU0sc0JBQXNCLE9BQVVDLGNBQXdDO0FBQ25GLFFBQU0sVUFBVSxNQUFNLFFBQVEsV0FBV0EsU0FBUTtBQUNqRCxRQUFNLFdBQVcsUUFBUSxPQUFPLENBQUMsV0FBNEMsT0FBTyxXQUFXLFVBQVU7QUFDekcsTUFBSSxTQUFTLFFBQVE7QUFDbkIsZUFBVyxVQUFVLFVBQVU7QUFDN0IsY0FBUSxNQUFNLE9BQU8sTUFBTTs7QUFHN0IsVUFBTSxJQUFJLE1BQU0sR0FBRyxTQUFTLGlEQUFpRDs7QUFJL0UsUUFBTSxTQUFjLENBQUE7QUFDcEIsYUFBVyxVQUFVLFNBQVM7QUFDNUIsUUFBSSxPQUFPLFdBQVcsYUFBYTtBQUNqQyxhQUFPLEtBQUssT0FBTyxLQUFLOzs7QUFHNUIsU0FBTztBQUNUOzs7QUNkTSxJQUFPQyxTQUFQLGNBQXFCLFlBQVc7Ozs7OztFQU1wQyxPQUNFLGVBQ0EsTUFDQSxTQUE2QjtBQUU3QixXQUFPLEtBQUssUUFBUSxLQUFLLGtCQUFrQix1QkFBdUI7TUFDaEU7TUFDQSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7O0VBS0EsU0FDRSxlQUNBLFFBQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsSUFBSSxrQkFBa0IsdUJBQXVCLFVBQVU7TUFDekUsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7OztFQUtBLE9BQ0UsZUFDQSxRQUNBLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsS0FBSyxrQkFBa0IsdUJBQXVCLFVBQVU7TUFDMUU7TUFDQSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIO0VBY0EsS0FDRSxlQUNBLFFBQThDLENBQUEsR0FDOUMsU0FBNkI7QUFFN0IsUUFBSSxpQkFBaUIsS0FBSyxHQUFHO0FBQzNCLGFBQU8sS0FBSyxLQUFLLGVBQWUsQ0FBQSxHQUFJLEtBQUs7O0FBRTNDLFdBQU8sS0FBSyxRQUFRLFdBQVcsa0JBQWtCLHVCQUF1QixzQkFBc0I7TUFDNUY7TUFDQSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7Ozs7O0VBUUEsSUFDRSxlQUNBLFFBQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsT0FBTyxrQkFBa0IsdUJBQXVCLFVBQVU7TUFDNUUsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7OztFQUtBLE1BQU0sY0FDSixlQUNBLE1BQ0EsU0FBMkQ7QUFFM0QsVUFBTSxPQUFPLE1BQU0sS0FBSyxPQUFPLGVBQWUsTUFBTSxPQUFPO0FBQzNELFdBQU8sTUFBTSxLQUFLLEtBQUssZUFBZSxLQUFLLElBQUksT0FBTztFQUN4RDs7Ozs7OztFQVFBLE1BQU0sS0FDSixlQUNBLFFBQ0EsU0FBMkQ7QUFFM0QsVUFBTSxVQUFxQyxFQUFFLEdBQUcsbUNBQVMsU0FBUywyQkFBMkIsT0FBTTtBQUNuRyxRQUFJLG1DQUFTLGdCQUFnQjtBQUMzQixjQUFRLGtDQUFrQyxJQUFJLFFBQVEsZUFBZSxTQUFROztBQUUvRSxXQUFPLE1BQU07QUFDWCxZQUFNLGVBQWUsTUFBTSxLQUFLLFNBQVMsZUFBZSxRQUFRO1FBQzlELEdBQUc7UUFDSDtPQUNELEVBQUUsYUFBWTtBQUVmLFlBQU0sT0FBTyxhQUFhO0FBRTFCLGNBQVEsS0FBSyxRQUFRO1FBQ25CLEtBQUs7QUFDSCxjQUFJLGdCQUFnQjtBQUVwQixjQUFJLG1DQUFTLGdCQUFnQjtBQUMzQiw0QkFBZ0IsUUFBUTtpQkFDbkI7QUFDTCxrQkFBTSxpQkFBaUIsYUFBYSxTQUFTLFFBQVEsSUFBSSxzQkFBc0I7QUFDL0UsZ0JBQUksZ0JBQWdCO0FBQ2xCLG9CQUFNLG1CQUFtQixTQUFTLGNBQWM7QUFDaEQsa0JBQUksQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0FBQzVCLGdDQUFnQjs7OztBQUl0QixnQkFBTSxNQUFNLGFBQWE7QUFDekI7UUFDRixLQUFLO1FBQ0wsS0FBSztBQUNILGlCQUFPOzs7RUFHZjs7Ozs7OztFQVFBLE1BQU0sT0FDSixlQUNBLE1BQ0EsU0FBNkI7QUFFN0IsVUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRLE1BQU0sT0FBTyxFQUFFLE1BQVksU0FBUyxhQUFZLEdBQUksT0FBTztBQUMvRixXQUFPLEtBQUssT0FBTyxlQUFlLEVBQUUsU0FBUyxTQUFTLEdBQUUsR0FBSSxPQUFPO0VBQ3JFOzs7O0VBS0EsTUFBTSxjQUNKLGVBQ0EsTUFDQSxTQUEyRDtBQUUzRCxVQUFNLFdBQVcsTUFBTSxLQUFLLE9BQU8sZUFBZSxNQUFNLE9BQU87QUFDL0QsV0FBTyxNQUFNLEtBQUssS0FBSyxlQUFlLFNBQVMsSUFBSSxPQUFPO0VBQzVEOzs7O0VBS0EsUUFDRSxlQUNBLFFBQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsV0FDbEIsa0JBQWtCLHVCQUF1QixrQkFDekMsMEJBQ0EsRUFBRSxHQUFHLFNBQVMsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTyxFQUFFLENBQUU7RUFFcEY7O0FBR0ksSUFBTyx1QkFBUCxjQUFvQyxXQUEyQjs7QUFLL0QsSUFBTywyQkFBUCxjQUF3QyxLQUF5Qjs7QUE2SnZFQSxPQUFNLHVCQUF1QjtBQUM3QkEsT0FBTSwyQkFBMkI7OztBQ2hXM0IsSUFBTyxjQUFQLGNBQTJCLFlBQVc7Ozs7RUFJMUMsT0FDRSxlQUNBLE1BQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsS0FBSyxrQkFBa0IsOEJBQThCO01BQ3ZFO01BQ0EsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7OztFQUtBLFNBQ0UsZUFDQSxTQUNBLFNBQTZCO0FBRTdCLFdBQU8sS0FBSyxRQUFRLElBQUksa0JBQWtCLDhCQUE4QixXQUFXO01BQ2pGLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7Ozs7O0VBTUEsT0FDRSxlQUNBLFNBQ0EsU0FBNkI7QUFFN0IsV0FBTyxLQUFLLFFBQVEsS0FBSyxrQkFBa0IsOEJBQThCLGtCQUFrQjtNQUN6RixHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7O0VBS0EsTUFBTSxjQUNKLGVBQ0EsTUFDQSxTQUEyRDtBQUUzRCxVQUFNLFFBQVEsTUFBTSxLQUFLLE9BQU8sZUFBZSxJQUFJO0FBQ25ELFdBQU8sTUFBTSxLQUFLLEtBQUssZUFBZSxNQUFNLElBQUksT0FBTztFQUN6RDtFQWdCQSxVQUNFLGVBQ0EsU0FDQSxRQUF3RCxDQUFBLEdBQ3hELFNBQTZCO0FBRTdCLFFBQUksaUJBQWlCLEtBQUssR0FBRztBQUMzQixhQUFPLEtBQUssVUFBVSxlQUFlLFNBQVMsQ0FBQSxHQUFJLEtBQUs7O0FBRXpELFdBQU8sS0FBSyxRQUFRLFdBQ2xCLGtCQUFrQiw4QkFBOEIsaUJBQ2hELHNCQUNBLEVBQUUsT0FBTyxHQUFHLFNBQVMsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTyxFQUFFLENBQUU7RUFFM0Y7Ozs7Ozs7RUFRQSxNQUFNLEtBQ0osZUFDQSxTQUNBLFNBQTJEO0FBRTNELFVBQU0sVUFBcUMsRUFBRSxHQUFHLG1DQUFTLFNBQVMsMkJBQTJCLE9BQU07QUFDbkcsUUFBSSxtQ0FBUyxnQkFBZ0I7QUFDM0IsY0FBUSxrQ0FBa0MsSUFBSSxRQUFRLGVBQWUsU0FBUTs7QUFHL0UsV0FBTyxNQUFNO0FBQ1gsWUFBTSxFQUFFLE1BQU0sT0FBTyxTQUFRLElBQUssTUFBTSxLQUFLLFNBQVMsZUFBZSxTQUFTO1FBQzVFLEdBQUc7UUFDSDtPQUNELEVBQUUsYUFBWTtBQUVmLGNBQVEsTUFBTSxRQUFRO1FBQ3BCLEtBQUs7QUFDSCxjQUFJLGdCQUFnQjtBQUVwQixjQUFJLG1DQUFTLGdCQUFnQjtBQUMzQiw0QkFBZ0IsUUFBUTtpQkFDbkI7QUFDTCxrQkFBTSxpQkFBaUIsU0FBUyxRQUFRLElBQUksc0JBQXNCO0FBQ2xFLGdCQUFJLGdCQUFnQjtBQUNsQixvQkFBTSxtQkFBbUIsU0FBUyxjQUFjO0FBQ2hELGtCQUFJLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztBQUM1QixnQ0FBZ0I7Ozs7QUFJdEIsZ0JBQU0sTUFBTSxhQUFhO0FBQ3pCO1FBQ0YsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO0FBQ0gsaUJBQU87OztFQUdmOzs7Ozs7RUFPQSxNQUFNLGNBQ0osZUFDQSxFQUFFLE9BQU8sVUFBVSxDQUFBLEVBQUUsR0FDckIsU0FBb0Y7QUEzSnhGLFFBQUFDO0FBNkpJLFFBQUksU0FBUyxRQUFRLE1BQU0sVUFBVSxHQUFHO0FBQ3RDLFlBQU0sSUFBSSxNQUNSLGdIQUFnSDs7QUFJcEgsVUFBTSx5QkFBd0JBLE1BQUEsbUNBQVMsbUJBQVQsT0FBQUEsTUFBMkI7QUFHekQsVUFBTSxtQkFBbUIsS0FBSyxJQUFJLHVCQUF1QixNQUFNLE1BQU07QUFFckUsVUFBTSxTQUFTLEtBQUs7QUFDcEIsVUFBTSxlQUFlLE1BQU0sT0FBTTtBQUNqQyxVQUFNLGFBQXVCLENBQUMsR0FBRyxPQUFPO0FBSXhDLG1CQUFlLGFBQWEsVUFBc0M7QUFDaEUsZUFBUyxRQUFRLFVBQVU7QUFDekIsY0FBTSxVQUFVLE1BQU0sT0FBTyxNQUFNLE9BQU8sRUFBRSxNQUFNLE1BQU0sU0FBUyxhQUFZLEdBQUksT0FBTztBQUN4RixtQkFBVyxLQUFLLFFBQVEsRUFBRTs7SUFFOUI7QUFHQSxVQUFNLFVBQVUsTUFBTSxnQkFBZ0IsRUFBRSxLQUFLLFlBQVksRUFBRSxJQUFJLFlBQVk7QUFHM0UsVUFBTSxvQkFBb0IsT0FBTztBQUVqQyxXQUFPLE1BQU0sS0FBSyxjQUFjLGVBQWU7TUFDN0MsVUFBVTtLQUNYO0VBQ0g7Ozs7QUNuS0ksSUFBTyxlQUFQLGNBQTRCLFlBQVc7RUFBN0MsY0FBQTs7QUFDRSxTQUFBLFFBQXdCLElBQWFDLE9BQU0sS0FBSyxPQUFPO0FBQ3ZELFNBQUEsY0FBMEMsSUFBbUIsWUFBWSxLQUFLLE9BQU87RUFzRnZGOzs7O0VBakZFLE9BQU8sTUFBK0IsU0FBNkI7QUFDakUsV0FBTyxLQUFLLFFBQVEsS0FBSyxrQkFBa0I7TUFDekM7TUFDQSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7O0VBS0EsU0FBUyxlQUF1QixTQUE2QjtBQUMzRCxXQUFPLEtBQUssUUFBUSxJQUFJLGtCQUFrQixpQkFBaUI7TUFDekQsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7OztFQUtBLE9BQ0UsZUFDQSxNQUNBLFNBQTZCO0FBRTdCLFdBQU8sS0FBSyxRQUFRLEtBQUssa0JBQWtCLGlCQUFpQjtNQUMxRDtNQUNBLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7RUFVQSxLQUNFLFFBQXFELENBQUEsR0FDckQsU0FBNkI7QUFFN0IsUUFBSSxpQkFBaUIsS0FBSyxHQUFHO0FBQzNCLGFBQU8sS0FBSyxLQUFLLENBQUEsR0FBSSxLQUFLOztBQUU1QixXQUFPLEtBQUssUUFBUSxXQUFXLGtCQUFrQixrQkFBa0I7TUFDakU7TUFDQSxHQUFHO01BQ0gsU0FBUyxFQUFFLGVBQWUsaUJBQWlCLEdBQUcsbUNBQVMsUUFBTztLQUMvRDtFQUNIOzs7O0VBS0EsSUFBSSxlQUF1QixTQUE2QjtBQUN0RCxXQUFPLEtBQUssUUFBUSxPQUFPLGtCQUFrQixpQkFBaUI7TUFDNUQsR0FBRztNQUNILFNBQVMsRUFBRSxlQUFlLGlCQUFpQixHQUFHLG1DQUFTLFFBQU87S0FDL0Q7RUFDSDs7Ozs7RUFNQSxPQUNFLGVBQ0EsTUFDQSxTQUE2QjtBQUU3QixXQUFPLEtBQUssUUFBUSxXQUFXLGtCQUFrQix3QkFBd0IsZ0NBQWdDO01BQ3ZHO01BQ0EsUUFBUTtNQUNSLEdBQUc7TUFDSCxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsR0FBRyxtQ0FBUyxRQUFPO0tBQy9EO0VBQ0g7O0FBR0ksSUFBTyxtQkFBUCxjQUFnQyxXQUF1Qjs7QUFLdkQsSUFBTyxpQ0FBUCxjQUE4QyxLQUErQjs7QUErWG5GLGFBQWEsbUJBQW1CO0FBQ2hDLGFBQWEsaUNBQWlDO0FBQzlDLGFBQWEsUUFBUUE7QUFDckIsYUFBYSx1QkFBdUI7QUFDcEMsYUFBYSwyQkFBMkI7QUFDeEMsYUFBYSxjQUFjOzs7O0FDclNyQixJQUFPLFNBQVAsY0FBMkIsVUFBUzs7Ozs7Ozs7Ozs7Ozs7OztFQXNCeEMsWUFBWSxFQUNWLFVBQWUsUUFBUSxpQkFBaUIsR0FDeEMsU0FBYyxRQUFRLGdCQUFnQixHQUN0QyxnQkFBZSxDQUFBQyxlQUFLLFFBQVEsZUFBZSxNQUE1QixPQUFBQSxNQUFpQyxTQUNoRCxXQUFVLGNBQUssUUFBUSxtQkFBbUIsTUFBaEMsWUFBcUMsU0FDL0MsR0FBR0MsTUFBSSxJQUNVLENBQUEsR0FBRTtBQXJQdkIsUUFBQUQ7QUFzUEksUUFBSSxXQUFXLFFBQVc7QUFDeEIsWUFBTSxJQUFXLFlBQ2Ysb0xBQW9MOztBQUl4TCxVQUFNLFVBQXlCO01BQzdCO01BQ0E7TUFDQTtNQUNBLEdBQUdDO01BQ0gsU0FBUyxXQUFXOztBQUd0QixRQUFJLENBQUMsUUFBUSwyQkFBZ0MsbUJBQWtCLEdBQUk7QUFDakUsWUFBTSxJQUFXLFlBQ2Ysb2JBQW9iOztBQUl4YixVQUFNO01BQ0osU0FBUyxRQUFRO01BQ2pCLFVBQVNELE1BQUEsUUFBUSxZQUFSLE9BQUFBLE1BQW1CO01BQzVCLFdBQVcsUUFBUTtNQUNuQixZQUFZLFFBQVE7TUFDcEIsT0FBTyxRQUFRO0tBQ2hCO0FBU0gsU0FBQSxjQUErQixJQUFRRSxhQUFZLElBQUk7QUFDdkQsU0FBQSxPQUFpQixJQUFRLEtBQUssSUFBSTtBQUNsQyxTQUFBLGFBQTZCLElBQVEsV0FBVyxJQUFJO0FBQ3BELFNBQUEsUUFBbUIsSUFBUSxNQUFNLElBQUk7QUFDckMsU0FBQSxTQUFxQixJQUFRLE9BQU8sSUFBSTtBQUN4QyxTQUFBLFFBQW1CLElBQVEsTUFBTSxJQUFJO0FBQ3JDLFNBQUEsY0FBK0IsSUFBUSxZQUFZLElBQUk7QUFDdkQsU0FBQSxTQUFxQixJQUFRLE9BQU8sSUFBSTtBQUN4QyxTQUFBLGFBQTZCLElBQVEsV0FBVyxJQUFJO0FBQ3BELFNBQUEsZUFBaUMsSUFBUSxhQUFhLElBQUk7QUFDMUQsU0FBQSxPQUFpQixJQUFRLEtBQUssSUFBSTtBQUNsQyxTQUFBLFVBQXVCLElBQVEsUUFBUSxJQUFJO0FBQzNDLFNBQUEsVUFBdUIsSUFBUSxRQUFRLElBQUk7QUFDM0MsU0FBQSxZQUEyQixJQUFRLFVBQVUsSUFBSTtBQXBCL0MsU0FBSyxXQUFXO0FBRWhCLFNBQUssU0FBUztBQUNkLFNBQUssZUFBZTtBQUNwQixTQUFLLFVBQVU7RUFDakI7RUFpQm1CLGVBQVk7QUFDN0IsV0FBTyxLQUFLLFNBQVM7RUFDdkI7RUFFbUIsZUFBZUQsT0FBOEI7QUFDOUQsV0FBTztNQUNMLEdBQUcsTUFBTSxlQUFlQSxLQUFJO01BQzVCLHVCQUF1QixLQUFLO01BQzVCLGtCQUFrQixLQUFLO01BQ3ZCLEdBQUcsS0FBSyxTQUFTOztFQUVyQjtFQUVtQixZQUFZQSxPQUE4QjtBQUMzRCxXQUFPLEVBQUUsZUFBZSxVQUFVLEtBQUssU0FBUTtFQUNqRDtFQUVtQixlQUFlLE9BQThCO0FBQzlELFdBQVUsVUFBVSxPQUFPLEVBQUUsYUFBYSxXQUFVLENBQUU7RUFDeEQ7OztBQUVPLE9BQUEsU0FBUztBQUNULE9BQUEsa0JBQWtCO0FBRWxCLE9BQUEsY0FBcUI7QUFDckIsT0FBQSxXQUFrQjtBQUNsQixPQUFBLHFCQUE0QjtBQUM1QixPQUFBLDRCQUFtQztBQUNuQyxPQUFBLG9CQUEyQjtBQUMzQixPQUFBLGdCQUF1QjtBQUN2QixPQUFBLGdCQUF1QjtBQUN2QixPQUFBLGlCQUF3QjtBQUN4QixPQUFBLGtCQUF5QjtBQUN6QixPQUFBLHNCQUE2QjtBQUM3QixPQUFBLHNCQUE2QjtBQUM3QixPQUFBLHdCQUErQjtBQUMvQixPQUFBLDJCQUFrQztBQUVsQyxPQUFBLFNBQWlCO0FBQ2pCLE9BQUEsZUFBdUI7QUFHaEMsT0FBTyxjQUFjQztBQUNyQixPQUFPLE9BQU87QUFDZCxPQUFPLHNCQUFzQjtBQUM3QixPQUFPLGFBQWE7QUFDcEIsT0FBTyxRQUFRO0FBQ2YsT0FBTyxrQkFBa0I7QUFDekIsT0FBTyxTQUFTO0FBQ2hCLE9BQU8sUUFBUTtBQUNmLE9BQU8sY0FBYztBQUNyQixPQUFPLFNBQVM7QUFDaEIsT0FBTyxhQUFhO0FBQ3BCLE9BQU8sYUFBYTtBQUNwQixPQUFPLGVBQWU7QUFDdEIsT0FBTyxtQkFBbUI7QUFDMUIsT0FBTyxpQ0FBaUM7QUFDeEMsT0FBTyxPQUFPO0FBQ2QsT0FBTyxVQUFVO0FBQ2pCLE9BQU8sY0FBYztBQUNyQixPQUFPLFVBQVU7QUFDakIsT0FBTyxZQUFZO0FBNlhuQixJQUFBLGlCQUFlOzs7QUM1dEJSLElBQU0saUJBQU4sTUFBeUM7QUFBQSxFQU01QyxZQUFZLFVBQTBCO0FBSHRDLG1CQUFtQjtBQUlmLFNBQUssV0FBVztBQUNoQixTQUFLLFNBQVMsSUFBSSxlQUFPO0FBQUEsTUFDckIsUUFBUSxLQUFLLFNBQVM7QUFBQSxNQUN0Qix5QkFBeUI7QUFBQSxJQUM3QixDQUFDO0FBQUEsRUFDTDtBQUFBLEVBRUEsT0FBTyxTQUFTLFFBQWdCLFNBQW9EO0FBcEJ4RixRQUFBQyxLQUFBO0FBcUJRLFNBQUssVUFBVTtBQUNmLFNBQUssa0JBQWtCLElBQUksZ0JBQWdCO0FBRTNDLFVBQU0sa0JBQWtCLE9BQU8sVUFBVTtBQUN6QyxVQUFNLFNBQVMsY0FBYyxRQUFRLFFBQVEsVUFBVTtBQUV2RCxVQUFNLFNBQVMsTUFBTSxLQUFLLE9BQU8sS0FBSyxZQUFZLE9BQU87QUFBQSxNQUNyRCxPQUFPLFFBQVE7QUFBQSxNQUNmLFVBQVU7QUFBQSxRQUNOLEVBQUUsTUFBTSxVQUFVLFNBQVMsUUFBUSxhQUFhO0FBQUEsUUFDaEQsRUFBRSxNQUFNLFFBQVEsU0FBUyxPQUFPO0FBQUEsTUFDcEM7QUFBQSxNQUNBLGFBQWEsUUFBUTtBQUFBLE1BQ3JCLFFBQVE7QUFBQSxJQUNaLEdBQUcsRUFBRSxRQUFRLEtBQUssZ0JBQWdCLE9BQU8sQ0FBQztBQUUxQyxRQUFJLGFBQWE7QUFDakIscUJBQWlCLFNBQVMsUUFBUTtBQUM5QixVQUFJLEtBQUssU0FBUztBQUNkO0FBQUEsTUFDSjtBQUVBLFVBQUksS0FBSyxZQUFZLFFBQVEsZUFBZSxHQUFHO0FBQzNDLGFBQUssTUFBTTtBQUNYO0FBQUEsTUFDSjtBQUVBLFlBQU0sWUFBVSxNQUFBQSxNQUFBLE1BQU0sUUFBUSxDQUFDLE1BQWYsZ0JBQUFBLElBQWtCLFVBQWxCLG1CQUF5QixZQUFXO0FBQ3BELG9CQUFjO0FBQ2QsWUFBTTtBQUFBLElBQ1Y7QUFBQSxFQUNKO0FBQUEsRUFFQSxNQUFNLFFBQVE7QUFDVixRQUFJLEtBQUs7QUFBUztBQUNsQixTQUFLLFVBQVU7QUFDZixTQUFLLGdCQUFnQixNQUFNO0FBQUEsRUFDL0I7QUFBQSxFQUVBLE1BQU0sZUFBa0M7QUFDcEMsUUFBSSxDQUFDLEtBQUssUUFBUTtBQUNkLGFBQU8sS0FBSyxTQUFTO0FBQUEsSUFDekI7QUFFQSxVQUFNLFNBQVMsTUFBTSxLQUFLLE9BQU8sT0FBTyxLQUFLO0FBRTdDLFVBQU0sYUFBYSxPQUFPLEtBQ3JCLE9BQU8sQ0FBQUMsV0FBU0EsT0FBTSxHQUFHLFNBQVMsS0FBSyxDQUFDLEVBQ3hDLElBQUksQ0FBQUEsV0FBU0EsT0FBTSxFQUFFO0FBRTFCLFNBQUssU0FBUyxTQUFTO0FBQ3ZCLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxNQUFNLGlCQUFtQztBQUNyQyxRQUFJO0FBQ0EsWUFBTSxLQUFLLE9BQU8sT0FBTyxLQUFLO0FBQzlCLGFBQU87QUFBQSxJQUNYLFNBQVMsT0FBUDtBQUNFLGNBQVEsTUFBTSw2QkFBNkIsS0FBSztBQUNoRCxhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0o7QUFBQSxFQUVRLFlBQVksUUFBZ0IsaUJBQXdEO0FBQ3hGLFVBQU0sa0JBQWtCLE9BQU8sVUFBVTtBQUN6QyxXQUFPLGdCQUFnQixTQUFTLGdCQUFnQixRQUFRLGdCQUFnQixPQUFPLGdCQUFnQjtBQUFBLEVBQ25HO0FBQ0o7OztBQ25GTyxJQUFNLDJCQUFOLE1BQW1EO0FBQUEsRUFNdEQsWUFBWSxVQUFvQztBQUhoRCxtQkFBbUI7QUFJZixTQUFLLFdBQVc7QUFDaEIsU0FBSyxTQUFTLElBQUksZUFBTztBQUFBLE1BQ3JCLFNBQVMsS0FBSyxTQUFTO0FBQUEsTUFDdkIsUUFBUSxLQUFLLFNBQVM7QUFBQSxNQUN0Qix5QkFBeUI7QUFBQSxJQUM3QixDQUFDO0FBQUEsRUFDTDtBQUFBLEVBRUEsT0FBTyxTQUFTLFFBQWdCLFNBQW9EO0FBckJ4RixRQUFBQyxLQUFBO0FBc0JRLFNBQUssVUFBVTtBQUNmLFNBQUssa0JBQWtCLElBQUksZ0JBQWdCO0FBRTNDLFVBQU0sa0JBQWtCLE9BQU8sVUFBVTtBQUN6QyxVQUFNLFNBQVMsY0FBYyxRQUFRLFFBQVEsVUFBVTtBQUV2RCxVQUFNLFNBQVMsTUFBTSxLQUFLLE9BQU8sS0FBSyxZQUFZLE9BQU87QUFBQSxNQUNyRCxPQUFPLFFBQVE7QUFBQSxNQUNmLFVBQVU7QUFBQSxRQUNOLEVBQUUsTUFBTSxVQUFVLFNBQVMsUUFBUSxhQUFhO0FBQUEsUUFDaEQsRUFBRSxNQUFNLFFBQVEsU0FBUyxPQUFPO0FBQUEsTUFDcEM7QUFBQSxNQUNBLGFBQWEsUUFBUTtBQUFBLE1BQ3JCLFFBQVE7QUFBQSxJQUNaLEdBQUcsRUFBRSxRQUFRLEtBQUssZ0JBQWdCLE9BQU8sQ0FBQztBQUUxQyxRQUFJLGFBQWE7QUFDakIscUJBQWlCLFNBQVMsUUFBUTtBQUM5QixVQUFJLEtBQUssU0FBUztBQUNkO0FBQUEsTUFDSjtBQUNBLFVBQUksS0FBSyxZQUFZLFFBQVEsZUFBZSxHQUFHO0FBQzNDLGFBQUssTUFBTTtBQUNYO0FBQUEsTUFDSjtBQUVBLFlBQU0sWUFBVSxNQUFBQSxNQUFBLE1BQU0sUUFBUSxDQUFDLE1BQWYsZ0JBQUFBLElBQWtCLFVBQWxCLG1CQUF5QixZQUFXO0FBQ3BELG9CQUFjO0FBQ2QsWUFBTTtBQUFBLElBQ1Y7QUFBQSxFQUNKO0FBQUEsRUFFQSxNQUFNLFFBQVE7QUFDVixRQUFJLEtBQUs7QUFBUztBQUNsQixTQUFLLFVBQVU7QUFDZixTQUFLLGdCQUFnQixNQUFNO0FBQUEsRUFDL0I7QUFBQSxFQUVBLE1BQU0sZUFBa0M7QUFDcEMsUUFBSSxDQUFDLEtBQUssUUFBUTtBQUNkLGFBQU8sS0FBSyxTQUFTO0FBQUEsSUFDekI7QUFFQSxVQUFNLFNBQVMsTUFBTSxLQUFLLE9BQU8sT0FBTyxLQUFLO0FBRTdDLFVBQU0sYUFBYSxPQUFPLEtBQ3JCLE9BQU8sQ0FBQUMsV0FBU0EsT0FBTSxHQUFHLFNBQVMsS0FBSyxDQUFDLEVBQ3hDLElBQUksQ0FBQUEsV0FBU0EsT0FBTSxFQUFFO0FBRTFCLFNBQUssU0FBUyxTQUFTO0FBQ3ZCLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxNQUFNLGlCQUFtQztBQUNyQyxRQUFJO0FBQ0EsWUFBTSxLQUFLLE9BQU8sT0FBTyxLQUFLO0FBQzlCLGFBQU87QUFBQSxJQUNYLFNBQVMsT0FBUDtBQUNFLGNBQVEsTUFBTSw2QkFBNkIsS0FBSztBQUNoRCxhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0o7QUFBQSxFQUVRLFlBQVksUUFBZ0IsaUJBQXdEO0FBQ3hGLFVBQU0sa0JBQWtCLE9BQU8sVUFBVTtBQUN6QyxXQUFPLGdCQUFnQixTQUFTLGdCQUFnQixRQUFRLGdCQUFnQixPQUFPLGdCQUFnQjtBQUFBLEVBQ25HO0FBQ0o7OztBQzVFTyxJQUFNLGtCQUFOLE1BQXNCO0FBQUEsRUFJekIsWUFBb0JDLFNBQWtCO0FBQWxCLGtCQUFBQTtBQUNoQixTQUFLLFdBQVcsS0FBSyxPQUFPO0FBQzVCLFNBQUssWUFBWSxLQUFLLGVBQWUsS0FBSyxRQUFRO0FBQUEsRUFDdEQ7QUFBQSxFQUVBLG1CQUFtQjtBQUNmLFNBQUssWUFBWSxLQUFLLGVBQWUsS0FBSyxRQUFRO0FBQUEsRUFDdEQ7QUFBQSxFQUVBLFlBQVksVUFBa0M7QUFDMUMsV0FBTyxLQUFLLFVBQVUsUUFBUTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxNQUFNLGFBQWEsVUFBMkM7QUFDMUQsV0FBTyxLQUFLLFVBQVUsUUFBUSxFQUFFLGFBQWE7QUFBQSxFQUNqRDtBQUFBLEVBRUEsTUFBTSxlQUFlLFVBQTBDO0FBQzNELFdBQU8sS0FBSyxVQUFVLFFBQVEsRUFBRSxlQUFlO0FBQUEsRUFDbkQ7QUFBQSxFQUVRLGVBQWUsVUFBK0I7QUFDbEQsV0FBTztBQUFBLE1BQ0gsc0JBQW9CLEdBQUcsSUFBSSxlQUFlLFNBQVMsVUFBVSxNQUFNO0FBQUEsTUFDbkUsc0JBQW9CLEdBQUcsSUFBSSxlQUFlLFNBQVMsVUFBVSxNQUFNO0FBQUEsTUFDbkUsNENBQStCLEdBQUcsSUFBSSx5QkFBeUIsU0FBUyxVQUFVLGlCQUFpQjtBQUFBLElBQ3ZHO0FBQUEsRUFDSjtBQUNKOzs7QUNKTyxJQUFNLGtCQUE2QjtBQUNuQyxJQUFNLGVBQWU7QUFDckIsSUFBTSxtQkFBNkI7QUFBQSxFQUN0QyxTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsSUFDUCxRQUFRO0FBQUEsTUFDSjtBQUFBLE1BQ0EsTUFBTTtBQUFBLE1BQ04sYUFBYTtBQUFBLE1BQ2IsUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLE1BQ1AsUUFBUSxDQUFDLFVBQVUsYUFBYTtBQUFBLE1BQ2hDLFlBQVk7QUFBQSxJQUNoQjtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ0o7QUFBQSxNQUNBLE1BQU07QUFBQSxNQUNOLGFBQWE7QUFBQSxNQUNiLE1BQU07QUFBQSxNQUNOLFFBQVEsQ0FBQyxtQkFBbUIsY0FBYztBQUFBLE1BQzFDLFlBQVk7QUFBQSxJQUNoQjtBQUFBLElBQ0EsbUJBQW1CO0FBQUEsTUFDZjtBQUFBLE1BQ0EsTUFBTTtBQUFBLE1BQ04sYUFBYTtBQUFBLE1BQ2IsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsUUFBUSxDQUFDLFVBQVUsYUFBYTtBQUFBLE1BQ2hDLFlBQVk7QUFBQSxJQUNoQjtBQUFBLEVBQ0o7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNOLFNBQVM7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxlQUFlO0FBQUEsTUFDZixtQkFBbUI7QUFBQSxRQUNmLE9BQU87QUFBQSxRQUNQLFlBQVk7QUFBQSxRQUNaLGNBQWM7QUFBQSxRQUNkLGFBQWE7QUFBQSxNQUNqQjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDVixLQUFLO0FBQUEsTUFDRCxTQUFTO0FBQUEsTUFDVCxTQUFTO0FBQUEsSUFDYjtBQUFBLEVBQ0o7QUFDSjtBQUdPLFNBQVMsY0FBYyxVQUE0QjtBQUN0RCxRQUFNLFdBQVcsU0FBUztBQUMxQixRQUFNLEtBQUssS0FBSyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxHQUFHLENBQUM7QUFHcEQsTUFBSSxPQUFPO0FBRVgsTUFBSUMsS0FBSTtBQUNSLFNBQU8sUUFBUSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU07QUFDNUMsUUFBSSxNQUFNLFNBQVMsTUFBTTtBQUNyQixhQUFPLGVBQWVBO0FBQ3RCLE1BQUFBO0FBQUEsSUFDSjtBQUFBLEVBQ0osQ0FBQztBQUdELFFBQU0saUJBQWlCLFNBQVMsZUFBZTtBQUMvQyxRQUFNLFVBQVU7QUFBQSxJQUNaLEdBQUc7QUFBQSxJQUNIO0FBQUEsRUFDSjtBQUdBLFdBQVMsRUFBRSxJQUFJO0FBRWYsU0FBTztBQUNYO0FBRU8sU0FBUyxlQUFlLFVBQW9CLE1BQTBCO0FBQ3pFLFNBQU8sU0FBUyxhQUFhLElBQUksS0FBSyxTQUFTLGFBQWEsWUFBWTtBQUM1RTtBQUVPLFNBQVMsaUJBQWlCLFVBQW9CLE1BQWMsU0FBMEI7QUFDekYsU0FBTyxRQUFRO0FBQ2YsV0FBUyxhQUFhLElBQUksSUFBSSxFQUFFLFNBQWtCLFNBQVMsS0FBSztBQUNwRTtBQUVPLFNBQVMsY0FBYyxVQUEwQjtBQUNwRCxTQUFPLE9BQU8sVUFBVSxnQkFBZ0I7QUFDNUM7OztBQ3hJQSxJQUFBQyxtQkFBaUo7OztBQ0FqSixzQkFBNEM7QUFJckMsSUFBTSx3QkFBTixjQUFvQyxzQkFBTTtBQUFBLEVBSTdDLFlBQVksS0FBVUMsU0FBa0IsY0FBNEI7QUFDaEUsVUFBTSxHQUFHO0FBQ1QsU0FBSyxTQUFTQTtBQUNkLFNBQUssZUFBZTtBQUNwQixTQUFLLFFBQVEsU0FBUyxrQ0FBa0M7QUFBQSxFQUM1RDtBQUFBLEVBRUEsU0FBUztBQUNMLFNBQUssdUJBQXVCO0FBQUEsRUFDaEM7QUFBQSxFQUVBLE1BQU0seUJBQXlCO0FBQzNCLFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBRWhCLFlBQVEsS0FBSyxjQUFjO0FBQUEsTUFDdkI7QUFDSSxhQUFLLHFCQUFxQjtBQUMxQjtBQUFBLE1BQ0o7QUFDSSxhQUFLLHFCQUFxQjtBQUMxQjtBQUFBLE1BQ0o7QUFDSSxhQUFLLCtCQUErQjtBQUNwQztBQUFBLE1BQ0o7QUFDSSxrQkFBVSxTQUFTLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFEO0FBQUEsSUFDUjtBQUFBLEVBQ0o7QUFBQSxFQUVBLE1BQU0sdUJBQXVCO0FBQ3pCLFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQ2hCLFNBQUssU0FBUyxpQkFBaUI7QUFFL0IsUUFBSSx3QkFBUSxTQUFTLEVBQ2hCLFFBQVEsYUFBYSxFQUNyQixRQUFRLDRCQUE0QixFQUNwQyxRQUFRLENBQUMsU0FBUztBQUNmLFdBQ0ssU0FBUyxLQUFLLE9BQU8sU0FBUyxVQUFVLE9BQU8sSUFBSSxFQUNuRCxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sU0FBUyxVQUFVLE9BQU8sT0FBTztBQUM3QyxjQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsTUFDbkMsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUVMLFNBQUssdUJBQXVCLEtBQUssT0FBTyxTQUFTLFVBQVUsTUFBTTtBQUFBLEVBQ3JFO0FBQUEsRUFFQSxNQUFNLHVCQUF1QjtBQUN6QixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsTUFBTTtBQUNoQixTQUFLLFNBQVMsaUJBQWlCO0FBRS9CLFFBQUksd0JBQVEsU0FBUyxFQUNoQixRQUFRLGdCQUFnQixFQUN4QixRQUFRLHdCQUF3QixFQUNoQyxRQUFRLENBQUMsU0FBUztBQUNmLFdBQ0ssU0FBUyxLQUFLLE9BQU8sU0FBUyxVQUFVLE9BQU8sTUFBTSxFQUNyRCxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sU0FBUyxVQUFVLE9BQU8sU0FBUztBQUMvQyxjQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsTUFDbkMsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUVMLFNBQUssdUJBQXVCLEtBQUssT0FBTyxTQUFTLFVBQVUsTUFBTTtBQUFBLEVBQ3JFO0FBQUEsRUFFQSxNQUFNLGlDQUFpQztBQUNuQyxVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsTUFBTTtBQUNoQixTQUFLLFNBQVMscUNBQXFDO0FBRW5ELFFBQUksd0JBQVEsU0FBUyxFQUNoQixRQUFRLFNBQVMsRUFDakIsUUFBUSw0Q0FBNEMsRUFDcEQsUUFBUSxDQUFDLFNBQVM7QUFDZixXQUNLLFNBQVMsS0FBSyxPQUFPLFNBQVMsVUFBVSxrQkFBa0IsTUFBTSxFQUNoRSxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sU0FBUyxVQUFVLGtCQUFrQixTQUFTO0FBQzFELGNBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxNQUNuQyxDQUFDO0FBQUEsSUFDVCxDQUFDO0FBRUwsUUFBSSx3QkFBUSxTQUFTLEVBQ2hCLFFBQVEsVUFBVSxFQUNsQixRQUFRLDZDQUE2QyxFQUNyRCxRQUFRLENBQUMsU0FBUztBQUNmLFdBQ0ssU0FBUyxLQUFLLE9BQU8sU0FBUyxVQUFVLGtCQUFrQixPQUFPLEVBQ2pFLFNBQVMsT0FBTyxVQUFVO0FBQ3ZCLGFBQUssT0FBTyxTQUFTLFVBQVUsa0JBQWtCLFVBQVU7QUFDM0QsY0FBTSxLQUFLLE9BQU8sYUFBYTtBQUFBLE1BQ25DLENBQUM7QUFBQSxJQUNULENBQUM7QUFFTCxTQUFLLHVCQUF1QixLQUFLLE9BQU8sU0FBUyxVQUFVLGlCQUFpQjtBQUFBLEVBQ2hGO0FBQUEsRUFFUSx1QkFBdUIsVUFBbUM7QUFDOUQsUUFBSSx3QkFBUSxLQUFLLFNBQVMsRUFDckIsUUFBUSxRQUFRLEVBQ2hCLFFBQVEsR0FBRyxTQUFTLGFBQWEsZUFBZSxVQUFVLEVBQzFELFVBQVUsWUFBVTtBQUNqQixhQUNLLGNBQWMsaUJBQWlCLEVBQy9CLFFBQVEsWUFBWTtBQUNqQixlQUFPLFlBQVksSUFBSSxFQUFFLGNBQWMsWUFBWTtBQUNuRCxpQkFBUyxhQUFhLE1BQU0sS0FBSyxPQUFPLGdCQUFnQixlQUFlLEtBQUssWUFBWTtBQUN4RixjQUFNLEtBQUssT0FBTyxhQUFhO0FBQy9CLFlBQUksdUJBQU8sU0FBUyxhQUFhLGVBQWUsbUJBQW1CO0FBQ25FLGFBQUssdUJBQXVCO0FBQUEsTUFDaEMsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUFBLEVBQ1Q7QUFBQSxFQUVBLFVBQVU7QUFoSWQsUUFBQUM7QUFpSVEsVUFBTSxFQUFFLFVBQVUsSUFBSTtBQUN0QixjQUFVLE1BQU07QUFDaEIsS0FBQ0EsTUFBQSxLQUFLLE9BQU8sSUFBWSxZQUF4QixnQkFBQUEsSUFBaUMsWUFBWSxLQUFLLE9BQU8sU0FBUztBQUFBLEVBQ3ZFO0FBQ0o7OztBRHpIQSxJQUFxQixzQkFBckIsY0FBaUQsa0NBQWlCO0FBQUEsRUFNOUQsWUFBb0JDLFNBQWtCO0FBQ2xDLFVBQU1BLFFBQU8sS0FBS0EsT0FBTTtBQURSLGtCQUFBQTtBQUFBLEVBRXBCO0FBQUEsRUFFQSxVQUFnQjtBQUNaLFNBQUssWUFBWSxNQUFNO0FBR3ZCLFVBQU0sbUJBQW1CLFNBQVMsY0FBYyxLQUFLO0FBQ3JELFNBQUssWUFBWSxZQUFZLGdCQUFnQjtBQUM3QyxVQUFNLHFCQUFxQixTQUFTLGNBQWMsS0FBSztBQUN2RCxTQUFLLFlBQVksWUFBWSxrQkFBa0I7QUFDL0MsVUFBTSxvQkFBb0IsU0FBUyxjQUFjLEtBQUs7QUFDdEQsU0FBSyxZQUFZLFlBQVksaUJBQWlCO0FBQzlDLFVBQU0sd0JBQXdCLFNBQVMsY0FBYyxLQUFLO0FBQzFELFNBQUssWUFBWSxZQUFZLHFCQUFxQjtBQUVsRCxTQUFLLGlCQUFpQixJQUFJLGVBQWUsa0JBQWtCLEtBQUssUUFBUSxLQUFLLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDL0YsU0FBSyxtQkFBbUIsSUFBSSxpQkFBaUIsb0JBQW9CLEtBQUssS0FBSyxLQUFLLE1BQU07QUFDdEYsU0FBSyxxQkFBcUIsSUFBSSxtQkFBbUIsdUJBQXVCLEtBQUssTUFBTTtBQUNuRixTQUFLLGtCQUFrQixJQUFJLGdCQUFnQixtQkFBbUIsS0FBSyxRQUFRLEtBQUssbUJBQW1CLE9BQU8sS0FBSyxLQUFLLGtCQUFrQixDQUFDO0FBRXZJLFNBQUssZUFBZSxPQUFPO0FBQzNCLFNBQUssaUJBQWlCLE9BQU87QUFDN0IsU0FBSyxnQkFBZ0IsT0FBTztBQUM1QixTQUFLLG1CQUFtQixPQUFPO0FBQUEsRUFDbkM7QUFDSjtBQUdBLElBQU0saUJBQU4sTUFBcUI7QUFBQSxFQUtqQixZQUFZLFdBQXdCQSxTQUFrQixhQUF5QjtBQUMzRSxTQUFLLFlBQVk7QUFDakIsU0FBSyxTQUFTQTtBQUNkLFNBQUssY0FBYztBQUFBLEVBQ3ZCO0FBQUEsRUFFQSxNQUFNLFNBQXdCO0FBQzFCLFNBQUssVUFBVSxNQUFNO0FBRXJCLFFBQUkseUJBQVEsS0FBSyxTQUFTLEVBQ3JCLFFBQVEsU0FBUyxFQUNqQixRQUFRLHdDQUF3QyxFQUNoRCxVQUFVLENBQUMsV0FBVztBQUNuQixhQUNLLFNBQVMsS0FBSyxPQUFPLFNBQVMsT0FBTyxFQUNyQyxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sU0FBUyxVQUFVO0FBQy9CLGNBQU0sS0FBSyxPQUFPLGFBQWE7QUFDL0IsYUFBSyxPQUFPLGNBQWMsT0FBTztBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNULENBQUM7QUFHTCxRQUFJLHlCQUFRLEtBQUssU0FBUyxFQUNyQixRQUFRLGdCQUFnQixFQUN4QixRQUFRLCtCQUErQixFQUN2QyxVQUFVLENBQUMsV0FBNEI7QUFDcEMsYUFDSyxXQUFXLEVBQ1gsY0FBYyxPQUFPLEVBQ3JCLFdBQVcsMkJBQTJCLEVBQ3RDLFFBQVEsWUFBWTtBQUNqQixzQkFBYyxLQUFLLE9BQU8sUUFBUTtBQUNsQyxjQUFNLEtBQUssT0FBTyxhQUFhO0FBQy9CLGFBQUssWUFBWTtBQUNqQixhQUFLLE9BQU8sY0FBYyxPQUFPO0FBQ2pDLFlBQUksd0JBQU8sMkJBQTJCO0FBQUEsTUFDMUMsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUFBLEVBQ1Q7QUFDSjtBQUtBLElBQU0sbUJBQU4sTUFBdUI7QUFBQSxFQUtuQixZQUFZLFdBQXdCLEtBQVVBLFNBQWtCO0FBQzVELFNBQUssTUFBTTtBQUNYLFNBQUssWUFBWTtBQUNqQixTQUFLLFNBQVNBO0FBQUEsRUFDbEI7QUFBQSxFQUVBLE1BQU0sU0FBd0I7QUFDMUIsU0FBSyxVQUFVLE1BQU07QUFDckIsU0FBSyxVQUFVLFNBQVMsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR25ELFFBQUkseUJBQVEsS0FBSyxTQUFTLEVBQ3JCLFFBQVEsUUFBUSxFQUNoQixRQUFRLDJDQUEyQyxFQUNuRCxlQUFlLENBQUMsV0FBaUMsS0FBSztBQUFBLE1BQ25EO0FBQUE7QUFBQSxNQUVBLEtBQUssT0FBTyxTQUFTLFVBQVUsT0FBTztBQUFBLElBQVUsQ0FBQztBQUd6RCxRQUFJLHlCQUFRLEtBQUssU0FBUyxFQUNyQixRQUFRLFFBQVEsRUFDaEIsUUFBUSxZQUFZLEVBQ3BCLGVBQWUsQ0FBQyxXQUFpQyxLQUFLO0FBQUEsTUFDbkQ7QUFBQTtBQUFBLE1BRUEsS0FBSyxPQUFPLFNBQVMsVUFBVSxPQUFPO0FBQUEsSUFBVSxDQUFDO0FBR3pELFFBQUkseUJBQVEsS0FBSyxTQUFTLEVBQ3JCLFFBQVEsbUJBQW1CLEVBQzNCLFFBQVEsNEJBQTRCLEVBQ3BDLGVBQWUsQ0FBQyxXQUFpQyxLQUFLO0FBQUEsTUFDbkQ7QUFBQTtBQUFBLE1BRUEsS0FBSyxPQUFPLFNBQVMsVUFBVSxrQkFBa0I7QUFBQSxJQUFVLENBQUM7QUFBQSxFQUN4RTtBQUFBLEVBRVEsc0JBQXNCLFFBQThCLE1BQW9CLFlBQTJCO0FBQ3ZHLFdBQU8sZ0JBQWdCLFlBQVk7QUFBQSxNQUMvQixPQUFPLGFBQWEsd0JBQXdCO0FBQUEsSUFDaEQsQ0FBQztBQUNELFdBQ0ssUUFBUSxhQUFhLFFBQVEsS0FBSyxFQUNsQyxXQUFXLGFBQWEsd0JBQXdCLHlCQUF5QixFQUN6RSxRQUFRLE1BQU07QUFDWCxVQUFJLHNCQUFzQixLQUFLLEtBQUssS0FBSyxRQUFRLElBQUksRUFBRSxLQUFLO0FBQUEsSUFDaEUsQ0FBQztBQUFBLEVBQ1Q7QUFDSjtBQUtBLElBQU0sa0JBQU4sTUFBc0I7QUFBQSxFQVFsQixZQUFZLFdBQXdCQSxTQUFrQixpQkFBNkI7QUFKbkYsU0FBUSxxQkFBNkI7QUFLakMsU0FBSyxZQUFZO0FBQ2pCLFNBQUssU0FBU0E7QUFDZCxTQUFLLGtCQUFrQjtBQUd2QixTQUFLLHFCQUFxQixTQUFTLGNBQWMsS0FBSztBQUN0RCxTQUFLLG1CQUFtQixTQUFTLGNBQWMsS0FBSztBQUdwRCxTQUFLLFVBQVUsWUFBWSxLQUFLLGtCQUFrQjtBQUNsRCxTQUFLLFVBQVUsWUFBWSxLQUFLLGdCQUFnQjtBQUFBLEVBQ3BEO0FBQUEsRUFFQSxNQUFNLFNBQXdCO0FBRTFCLFNBQUssVUFBVSxNQUFNO0FBQ3JCLFNBQUssVUFBVSxTQUFTLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsRCxTQUFLLFVBQVUsWUFBWSxLQUFLLGtCQUFrQjtBQUNsRCxTQUFLLFVBQVUsU0FBUyxPQUFPLEVBQUUsS0FBSyxlQUFlLENBQUM7QUFDdEQsU0FBSyxVQUFVLFlBQVksS0FBSyxnQkFBZ0I7QUFFaEQsVUFBTSxLQUFLLHVCQUF1QjtBQUVsQyxVQUFNLG1CQUFtQixLQUFLLE9BQU8sU0FBUyxTQUFTLEtBQUssa0JBQWtCO0FBQzlFLFVBQU0sS0FBSyxzQkFBc0IsZ0JBQWdCO0FBQUEsRUFDckQ7QUFBQSxFQUVBLE1BQWMseUJBQXdDO0FBQ2xELFNBQUssbUJBQW1CLE1BQU07QUFFOUIsUUFBSSx5QkFBUSxLQUFLLGtCQUFrQixFQUM5QixRQUFRLGdCQUFnQixFQUN4QixXQUFXLEVBQ1gsUUFBUSw0Q0FBNEMsRUFDcEQsWUFBWSxDQUFDLGFBQWdDLEtBQUssZ0JBQWdCLFFBQVEsQ0FBQyxFQUMzRSxlQUFlLENBQUMsV0FBaUMsS0FBSyx1QkFBdUIsTUFBTSxDQUFDLEVBQ3BGLGVBQWUsQ0FBQyxXQUFpQyxLQUFLLDBCQUEwQixNQUFNLENBQUM7QUFBQSxFQUNoRztBQUFBLEVBRVEsZ0JBQWdCLFVBQW1DO0FBQ3ZELFdBQU8sUUFBUSxLQUFLLE9BQU8sU0FBUyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxPQUFPLE1BQU07QUFDckUsZUFBUyxVQUFVLElBQUksUUFBUSxJQUFJO0FBQUEsSUFDdkMsQ0FBQztBQUNELGFBQ0ssU0FBUyxLQUFLLGtCQUFrQixFQUNoQyxTQUFTLE9BQU8sVUFBVTtBQUN2QixXQUFLLHFCQUFxQjtBQUMxQixZQUFNLEtBQUssc0JBQXNCLEtBQUssT0FBTyxTQUFTLFNBQVMsS0FBSyxDQUFDO0FBQUEsSUFDekUsQ0FBQztBQUFBLEVBQ1Q7QUFBQSxFQUVRLHVCQUF1QixRQUFvQztBQUMvRCxXQUNLLFFBQVEsTUFBTSxFQUNkLFdBQVcsb0JBQW9CLEVBQy9CLFFBQVEsWUFBWTtBQUNqQixXQUFLLHFCQUFxQixjQUFjLEtBQUssT0FBTyxRQUFRO0FBQzVELFlBQU0sS0FBSyxPQUFPLGFBQWE7QUFDL0IsWUFBTSxLQUFLLE9BQU87QUFDbEIsV0FBSyxnQkFBZ0I7QUFBQSxJQUN6QixDQUFDO0FBQUEsRUFDVDtBQUFBLEVBRVEsMEJBQTBCLFFBQW9DO0FBQ2xFLFVBQU0sWUFBWSxLQUFLLHVCQUF1QjtBQUM5QyxXQUNLLFlBQVksU0FBUyxFQUNyQixRQUFRLE9BQU8sRUFDZixXQUFXLFlBQVksa0NBQWtDLGdCQUFnQixFQUN6RSxRQUFRLFlBQVk7QUFDakIsYUFBTyxLQUFLLE9BQU8sU0FBUyxTQUFTLEtBQUssa0JBQWtCO0FBQzVELFdBQUsscUJBQXFCO0FBQzFCLFlBQU0sS0FBSyxPQUFPLGFBQWE7QUFDL0IsWUFBTSxLQUFLLE9BQU87QUFDbEIsV0FBSyxnQkFBZ0I7QUFBQSxJQUN6QixDQUFDO0FBQUEsRUFDVDtBQUFBLEVBRUEsTUFBYyxzQkFBc0IsU0FBaUM7QUFDakUsU0FBSyxpQkFBaUIsTUFBTTtBQUc1QixRQUFJLHlCQUFRLEtBQUssZ0JBQWdCLEVBQzVCLFFBQVEsY0FBYyxFQUN0QixRQUFRLHFCQUFxQixFQUM3QixRQUFRLENBQUMsU0FBUztBQUNmLFdBQUssU0FBUyxRQUFRLElBQUksRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUNsRCxnQkFBUSxPQUFPO0FBQ2YsY0FBTSxLQUFLLE9BQU8sYUFBYTtBQUFBLE1BQ25DLENBQUM7QUFBQSxJQUNMLENBQUM7QUFHTCxRQUFJLHlCQUFRLEtBQUssZ0JBQWdCLEVBQzVCLFFBQVEsYUFBYSxFQUNyQixRQUFRLG1DQUFtQyxFQUMzQyxZQUFZLENBQUMsYUFBYTtBQUN2QixlQUNLLGlDQUErQixRQUFRLEVBQ3ZDLGlDQUErQixRQUFRLEVBQ3ZDLHVEQUEwQyxtQkFBbUIsRUFDN0QsU0FBUyxRQUFRLFFBQVEsRUFDekIsU0FBUyxPQUFPLFVBQXdCO0FBQ3JDLGdCQUFRLFdBQVc7QUFDbkIsY0FBTSxLQUFLLE9BQU8sYUFBYTtBQUMvQixjQUFNLEtBQUssc0JBQXNCLE9BQU87QUFBQSxNQUM1QyxDQUFDO0FBQUEsSUFDVCxDQUFDO0FBR0wsUUFBSSx5QkFBUSxLQUFLLGdCQUFnQixFQUM1QixRQUFRLE9BQU8sRUFDZixRQUFRLHlDQUF5QyxFQUNqRCxlQUFlLENBQUMsV0FBVztBQUN4QixhQUNLLFFBQVEsYUFBYSxFQUNyQixXQUFXLG1CQUFtQixFQUM5QixRQUFRLFlBQVk7QUFDakIsY0FBTSxLQUFLLE9BQU8sZ0JBQWdCLGFBQWEsUUFBUSxRQUFRO0FBQy9ELGNBQU0sS0FBSyxPQUFPLGFBQWE7QUFDL0IsY0FBTSxLQUFLLHNCQUFzQixPQUFPO0FBQ3hDLFlBQUksd0JBQU8sb0JBQW9CO0FBQUEsTUFDbkMsQ0FBQztBQUFBLElBQ1QsQ0FBQyxFQUNBLFlBQVksT0FBTyxhQUFhO0FBQzdCLFlBQU0sU0FBUyxLQUFLLE9BQU8sU0FBUyxVQUFVLFFBQVEsUUFBUSxFQUFFO0FBQ2hFLGVBQ0ssV0FBVyxPQUFPLFlBQVksT0FBTyxJQUFJLENBQUNDLFdBQVUsQ0FBQ0EsUUFBT0EsTUFBSyxDQUFDLENBQUMsQ0FBQyxFQUNwRSxTQUFTLFFBQVEsa0JBQWtCLEtBQUssRUFDeEMsU0FBUyxPQUFPLFVBQVU7QUFDdkIsZ0JBQVEsa0JBQWtCLFFBQVE7QUFDbEMsY0FBTSxLQUFLLE9BQU8sYUFBYTtBQUFBLE1BQ25DLENBQUM7QUFBQSxJQUVULENBQUM7QUFHTCxRQUFJLHlCQUFRLEtBQUssZ0JBQWdCLEVBQzVCLFFBQVEsYUFBYSxFQUNyQixRQUFRLHlFQUF5RSxFQUNqRixVQUFVLENBQUMsV0FBVztBQUNuQixhQUNLLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFDbkIsU0FBUyxRQUFRLGtCQUFrQixXQUFXLEVBQzlDLGtCQUFrQixFQUNsQixTQUFTLE9BQU8sVUFBVTtBQUN2QixnQkFBUSxrQkFBa0IsY0FBYztBQUN4QyxjQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsTUFDbkMsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUdMLFFBQUkseUJBQVEsS0FBSyxnQkFBZ0IsRUFDNUIsUUFBUSxrQkFBa0IsRUFDMUIsUUFBUSxtREFBbUQsRUFDM0QsUUFBUSxDQUFDLFNBQVM7QUFDZixXQUFLLFFBQVEsUUFBUSxRQUFRLFFBQVE7QUFDckMsV0FDSyxlQUFlLE1BQU0sRUFDckIsU0FBUyxPQUFPLFFBQVEsT0FBTyxDQUFDLEVBQ2hDLFNBQVMsT0FBTyxVQUFVO0FBQ3ZCLGdCQUFRLFVBQVUsU0FBUyxLQUFLO0FBQ2hDLGNBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxNQUNuQyxDQUFDO0FBQUEsSUFDVCxDQUFDO0FBR0wsUUFBSSx5QkFBUSxLQUFLLGdCQUFnQixFQUM1QixRQUFRLHFCQUFxQixFQUM3QixRQUFRLHFEQUFxRCxFQUM3RCxZQUFZLENBQUMsYUFBYTtBQUN2QixlQUNLLFVBQVUsUUFBUSxjQUFjLEVBQ2hDLFVBQVUsWUFBWSxzQkFBc0IsRUFDNUMsVUFBVSxhQUFhLHdCQUF3QixFQUMvQyxVQUFVLFFBQVEsaUJBQWlCLEVBQ25DLFNBQVMsUUFBUSxhQUFhLEVBQzlCLFNBQVMsT0FBTyxVQUF5QjtBQUN0QyxnQkFBUSxnQkFBZ0I7QUFDeEIsY0FBTSxLQUFLLE9BQU8sYUFBYTtBQUFBLE1BQ25DLENBQUM7QUFBQSxJQUNULENBQUM7QUFHTCxRQUFJLHlCQUFRLEtBQUssZ0JBQWdCLEVBQzVCLFFBQVEsZUFBZSxFQUN2QixRQUFRLG1CQUFtQixFQUMzQixZQUFZLENBQUMsU0FBUztBQUNuQixXQUFLLFFBQVEsT0FBTztBQUNwQixXQUFLLFFBQVEsYUFBYTtBQUFBLFFBQ3RCLE9BQU87QUFBQSxRQUNQLFFBQVE7QUFBQSxRQUNSLFVBQVU7QUFBQSxNQUNkLENBQUM7QUFDRCxXQUFLLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxFQUFFO0FBQUEsUUFDbEQsT0FBTyxVQUFVO0FBQ2Isa0JBQVEsa0JBQWtCLGVBQWU7QUFDekMsZ0JBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxRQUNuQztBQUFBLE1BQ0o7QUFBQSxJQUNKLENBQUM7QUFHTCxRQUFJLHlCQUFRLEtBQUssZ0JBQWdCLEVBQzVCLFFBQVEsYUFBYSxFQUNyQixRQUFRLHVCQUF1QixFQUMvQixlQUFlLENBQUMsV0FBVztBQUN4QixhQUNLLFFBQVEsTUFBTSxFQUNkLFdBQVcsb0NBQW9DLEVBQy9DLFFBQVEsWUFBWTtBQUNqQixjQUFNLE9BQ0YsUUFBUSxrQkFBa0IsYUFDMUIsT0FDQTtBQUNKLGdCQUFRLGtCQUFrQixhQUFhO0FBQ3ZDLGNBQU0sS0FBSyxPQUFPLGFBQWE7QUFDL0IsY0FBTSxLQUFLLHNCQUFzQixPQUFPO0FBQUEsTUFDNUMsQ0FBQztBQUFBLElBQ1QsQ0FBQyxFQUNBLFlBQVksQ0FBQyxTQUFTO0FBQ25CLFdBQUssUUFBUSxPQUFPO0FBQ3BCLFdBQUssUUFBUSxhQUFhO0FBQUEsUUFDdEIsT0FBTztBQUFBLFFBQ1AsUUFBUTtBQUFBLFFBQ1IsVUFBVTtBQUFBLE1BQ2QsQ0FBQztBQUNELFdBQUssU0FBUyxRQUFRLGtCQUFrQixVQUFVLEVBQUU7QUFBQSxRQUNoRCxPQUFPLFVBQVU7QUFDYixrQkFBUSxrQkFBa0IsYUFBYTtBQUN2QyxnQkFBTSxLQUFLLE9BQU8sYUFBYTtBQUFBLFFBQ25DO0FBQUEsTUFDSjtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ1Q7QUFDSjtBQUtBLElBQU0scUJBQU4sTUFBeUI7QUFBQSxFQUtyQixZQUFZLFdBQXdCRCxTQUFrQjtBQUNsRCxTQUFLLFlBQVk7QUFDakIsU0FBSyxTQUFTQTtBQUNkLFNBQUssaUJBQWlCLFNBQVMsY0FBYyxLQUFLO0FBQUEsRUFDdEQ7QUFBQSxFQUVBLE1BQU0sU0FBd0I7QUFDMUIsU0FBSyxVQUFVLE1BQU07QUFDckIsU0FBSyxVQUFVLFNBQVMsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELFNBQUssVUFBVSxTQUFTLEtBQUs7QUFBQSxNQUN6QixNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsSUFDVCxDQUFDO0FBQ0QsU0FBSyxVQUFVLFlBQVksS0FBSyxjQUFjO0FBQzlDLFVBQU0sS0FBSyxvQkFBb0I7QUFBQSxFQUNuQztBQUFBLEVBRUEsTUFBYyxzQkFBcUM7QUFDL0MsU0FBSyxlQUFlLE1BQU07QUFFMUIsVUFBTSxRQUFRLEtBQUssZUFBZSxTQUFTLFNBQVMsRUFBRSxLQUFLLGdCQUFnQixDQUFDO0FBQzVFLFVBQU0sU0FBUyxNQUFNLFNBQVMsSUFBSTtBQUNsQyxXQUFPLFNBQVMsTUFBTSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLFdBQU8sU0FBUyxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsV0FBTyxTQUFTLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUNsQyxXQUFPLFNBQVMsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBR2xDLFVBQU0sU0FBUyxNQUFNLFNBQVMsTUFBTSxFQUFFLEtBQUssa0JBQWtCLENBQUM7QUFDOUQsUUFBSSxZQUFZO0FBQ2hCLFFBQUksa0JBQWtCO0FBR3RCLFVBQU0sV0FBVyxPQUFPLFNBQVMsSUFBSTtBQUVyQyxRQUFJLCtCQUFjLFFBQVEsRUFDckIsZUFBZSwrQkFBK0IsRUFDOUMsU0FBUyxDQUFDLFVBQVU7QUFDakIsa0JBQVk7QUFBQSxJQUNoQixDQUFDO0FBR0wsVUFBTSxjQUFjLE9BQU8sU0FBUyxJQUFJO0FBQ3hDLFVBQU0sa0JBQWtCLElBQUksbUNBQWtCLFdBQVcsRUFDcEQsU0FBUyxlQUFlO0FBRTdCLFdBQU8sUUFBUSxLQUFLLE9BQU8sU0FBUyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxPQUFPLE1BQU07QUFDckUsc0JBQWdCLFVBQVUsSUFBSSxRQUFRLElBQUk7QUFBQSxJQUM5QyxDQUFDO0FBRUQsb0JBQWdCLFNBQVMsQ0FBQyxVQUFVO0FBQ2hDLHdCQUFrQjtBQUFBLElBQ3RCLENBQUM7QUFHRCxXQUFPLFNBQVMsSUFBSTtBQUNwQixVQUFNLGFBQWEsT0FBTyxTQUFTLElBQUk7QUFDdkMsUUFBSSxzQ0FBcUIsVUFBVSxFQUM5QixRQUFRLE1BQU0sRUFDZCxXQUFXLHFCQUFxQixFQUNoQyxRQUFRLFlBQVk7QUFDakIsVUFBSSxDQUFDLFdBQVc7QUFDWixZQUFJLHdCQUFPLHNCQUFzQjtBQUNqQztBQUFBLE1BQ0o7QUFFQSx1QkFBaUIsS0FBSyxPQUFPLFVBQVUsV0FBVyxlQUFlO0FBQ2pFLFlBQU0sS0FBSyxPQUFPLGFBQWE7QUFDL0IsWUFBTSxLQUFLLE9BQU87QUFBQSxJQUN0QixDQUFDO0FBR0wsV0FBTyxRQUFRLEtBQUssT0FBTyxTQUFTLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLE9BQU8sTUFBTTtBQUMzRSxZQUFNLE1BQU0sTUFBTSxTQUFTLElBQUk7QUFDL0IsWUFBTSxtQkFBbUIsU0FBUztBQUNsQyxVQUFJLFNBQVMsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLFNBQVMsS0FBSyxDQUFDO0FBRzdELFlBQU1FLGVBQWMsSUFBSSxTQUFTLElBQUk7QUFHckMsWUFBTUMsbUJBQWtCLElBQUksbUNBQWtCRCxZQUFXLEVBQ3BELFlBQVksZ0JBQWdCO0FBR2pDLGFBQU8sUUFBUSxLQUFLLE9BQU8sU0FBUyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxPQUFPLE1BQU07QUFDckUsUUFBQUMsaUJBQWdCLFVBQVUsSUFBSSxRQUFRLElBQUk7QUFBQSxNQUM5QyxDQUFDO0FBRUQsTUFBQUEsaUJBQWdCLFNBQVMsUUFBUSxPQUFPO0FBR3hDLE1BQUFBLGlCQUFnQixTQUFTLE9BQU8sVUFBVTtBQUN0Qyx5QkFBaUIsS0FBSyxPQUFPLFVBQVUsTUFBTSxLQUFLO0FBQ2xELGNBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxNQUNuQyxDQUFDO0FBRUQsWUFBTSxhQUFhLElBQUksU0FBUyxJQUFJO0FBQ3BDLFVBQUksc0NBQXFCLFVBQVUsRUFDOUIsUUFBUSxPQUFPLEVBQ2YsWUFBWSxnQkFBZ0IsRUFDNUIsV0FBVyxnQkFBZ0IsRUFDM0IsUUFBUSxZQUFZO0FBQ2pCLGVBQU8sS0FBSyxPQUFPLFNBQVMsYUFBYSxJQUFJO0FBQzdDLGNBQU0sS0FBSyxPQUFPLGFBQWE7QUFDL0IsY0FBTSxLQUFLLE9BQU87QUFBQSxNQUN0QixDQUFDO0FBR0wsWUFBTSxjQUFjLElBQUksU0FBUyxJQUFJO0FBQ3JDLFVBQUksaUNBQWdCLFdBQVcsRUFDMUIsV0FBVyx3QkFBd0IsRUFDbkMsU0FBUyxRQUFRLE9BQU8sRUFDeEIsU0FBUyxPQUFPLFVBQW1CO0FBQ2hDLGFBQUssT0FBTyxTQUFTLGFBQWEsSUFBSSxFQUFFLFVBQVU7QUFDbEQsY0FBTSxLQUFLLE9BQU8sYUFBYTtBQUMvQixhQUFLLE9BQU8sY0FBYyxPQUFPO0FBQUEsTUFDckMsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUFBLEVBQ0w7QUFDSjs7O0FFN2dCTyxJQUFNLGlCQUFOLE1BQXFCO0FBQUEsRUFTeEIsWUFBWUMsU0FBa0I7QUFIOUIsU0FBUSwwQkFBbUQsRUFBRSxTQUFTLEtBQUssZUFBZSxXQUFXO0FBQ3JHLFNBQVEseUJBQXlELENBQUM7QUFHOUQsU0FBSyxTQUFTQTtBQUNkLFNBQUssTUFBTSxLQUFLLE9BQU87QUFDdkIsU0FBSyxXQUFXLEtBQUssT0FBTztBQUM1QixTQUFLLE9BQU8sS0FBSyxrQkFBa0IsQ0FBQztBQUVwQyxTQUFLLElBQUksVUFBVSxHQUFHLGFBQWEsQ0FBQyxTQUFTO0FBQ3pDLFVBQUksQ0FBQztBQUFNO0FBQ1gsV0FBSyxPQUFPLEtBQUssSUFBSTtBQUFBLElBQ3pCLENBQUM7QUFBQSxFQUNMO0FBQUEsRUFFQSxtQkFBNEI7QUFDeEIsV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQSxFQUVBLGdCQUF3QjtBQUNwQixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBLEVBRUEsc0JBQWtDO0FBQzlCLFdBQU8sZUFBZSxLQUFLLFVBQVUsS0FBSyxVQUFVO0FBQUEsRUFDeEQ7QUFBQSxFQUVBLGFBQXNDO0FBQ2xDLFdBQU87QUFBQSxNQUNILFNBQVMsS0FBSyxjQUFjO0FBQUEsTUFDNUIsZUFBZSxLQUFLLGNBQWM7QUFBQSxJQUN0QztBQUFBLEVBQ0o7QUFBQSxFQUVBLGdCQUFnQixVQUFzQztBQUNsRCxTQUFLLHVCQUF1QixLQUFLLFFBQVE7QUFBQSxFQUM3QztBQUFBLEVBRVEsT0FBTyxVQUFrQjtBQUM3QixLQUFDLEtBQUssWUFBWSxLQUFLLGFBQWEsSUFBSSxLQUFLLHVCQUF1QixRQUFRO0FBQzVFLFNBQUssdUJBQXVCLFFBQVEsUUFBTSxHQUFHLEtBQUssYUFBYSxDQUFDO0FBQUEsRUFDcEU7QUFBQSxFQUVRLG9CQUE0QjtBQUNoQyxVQUFNLGVBQWUsS0FBSyxJQUFJLFVBQVU7QUFDeEMsUUFBSSxDQUFDO0FBQWMsYUFBTztBQUMxQixRQUFJLENBQUMsYUFBYTtBQUFNLGFBQU87QUFDL0IsV0FBTyxhQUFhLEtBQUs7QUFBQSxFQUM3QjtBQUFBLEVBRVEsdUJBQXVCLFVBQXFDO0FBQ2hFLFFBQUksQ0FBQyxLQUFLLFNBQVMsZ0JBQWdCLE9BQU8sS0FBSyxLQUFLLFNBQVMsWUFBWSxFQUFFLFdBQVcsR0FBRztBQUNyRixhQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsU0FBUyxlQUFlLENBQUM7QUFBQSxJQUNqRTtBQUVBLFVBQU0saUJBQWlCLFNBQVMsUUFBUSxjQUFjLEVBQUU7QUFDeEQsUUFBSSxlQUFlO0FBQ25CLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksY0FBYztBQUVsQixXQUFPLFFBQVEsS0FBSyxTQUFTLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLE9BQU8sTUFBTTtBQUNwRSxZQUFNLHdCQUF3QixLQUFLLFFBQVEsY0FBYyxFQUFFO0FBQzNELFVBQUksZUFBZSxXQUFXLHFCQUFxQixHQUFHO0FBQ2xELFlBQUksc0JBQXNCLFNBQVMsYUFBYSxRQUFRO0FBQ3BELHlCQUFlO0FBQ2YsMkJBQWlCLFFBQVE7QUFDekIsd0JBQWM7QUFBQSxRQUNsQjtBQUFBLE1BQ0o7QUFBQSxJQUNKLENBQUM7QUFFRCxXQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsU0FBUyxjQUFjLENBQUM7QUFBQSxFQUMvRDtBQUFBLEVBRUEsV0FBVztBQUNQLFNBQUssSUFBSSxVQUFVLElBQUksYUFBYSxLQUFLLE1BQU07QUFBQSxFQUNuRDtBQUNKOzs7QUNsRkEsSUFBcUIsb0JBQXJCLE1BQXVDO0FBQUEsRUFPbkMsWUFDSSxLQUNBLFVBQ0EsZ0JBQ0EsaUJBQ0Y7QUFQRixTQUFRLDRCQUFpRSxDQUFDO0FBUXRFLFNBQUssTUFBTTtBQUNYLFNBQUssV0FBVztBQUNoQixTQUFLLGlCQUFpQjtBQUN0QixTQUFLLGtCQUFrQjtBQUFBLEVBQzNCO0FBQUEsRUFFQSxPQUFPLGtCQUE4QztBQUNqRCxRQUFJLENBQUMsS0FBSyxrQkFBa0I7QUFBRztBQUMvQixVQUFNLGVBQWUsS0FBSyxJQUFJLFVBQVU7QUFDeEMsUUFBSSxDQUFDO0FBQWM7QUFDbkIsUUFBSSxDQUFDLGFBQWE7QUFBUTtBQUUxQixVQUFNLFVBQVUsS0FBSyxlQUFlLGlCQUFpQjtBQUVyRCxVQUFNLFdBQVcsS0FBSyxnQkFBZ0IsWUFBWSxRQUFRLFFBQVE7QUFDbEUsVUFBTSxVQUFVLFFBQVE7QUFFeEIsV0FBTyxLQUFLLFNBQVMsYUFBYSxRQUFRLFVBQVUsT0FBTztBQUFBLEVBQy9EO0FBQUEsRUFFQSx5QkFBeUIsVUFBMkM7QUFDaEUsU0FBSywwQkFBMEIsS0FBSyxRQUFRO0FBQUEsRUFDaEQ7QUFBQSxFQUVBLG9CQUE2QjtBQUN6QixXQUFPLEtBQUssU0FBUyxXQUFXLEtBQUssZUFBZSxvQkFBb0IsRUFBRTtBQUFBLEVBQzlFO0FBQUEsRUFFUSx1QkFBdUIsY0FBdUI7QUFDbEQsZUFBVyxZQUFZLEtBQUssMkJBQTJCO0FBQ25ELGVBQVMsWUFBWTtBQUFBLElBQ3pCO0FBQUEsRUFDSjtBQUFBLEVBRUEsT0FBZSxTQUFTLFFBQWdCLFVBQW9CLFNBQXdEO0FBQ2hILFVBQU0sU0FBUyxNQUFNO0FBRXJCLFVBQU0sU0FBUyxPQUFPLFVBQVU7QUFDaEMsVUFBTSxjQUFjLE9BQU8sUUFBUSxPQUFPLElBQUk7QUFFOUMsUUFBSSxDQUFDLFlBQVk7QUFBUTtBQUV6QixVQUFNLFdBQVcsWUFBWSxPQUFPLEtBQUssQ0FBQztBQUMxQyxRQUFJLGFBQWE7QUFBSztBQUV0QixTQUFLLHVCQUF1QixJQUFJO0FBQ2hDLHFCQUFpQixRQUFRLFNBQVMsU0FBUyxRQUFRLE9BQU8sR0FBRztBQUN6RCxZQUFNLEVBQUUsS0FBSztBQUFBLElBQ2pCO0FBQ0EsU0FBSyx1QkFBdUIsS0FBSztBQUFBLEVBQ3JDO0FBQ0o7OztBQ3ZFQSxJQUFBQyxtQkFBMEM7QUFNMUMsSUFBcUIsZ0JBQXJCLE1BQW1DO0FBQUEsRUFPL0IsWUFBWUMsU0FBa0IsZ0JBQWdDLG1CQUFzQztBQUZwRyxTQUFRLGVBQXdCO0FBRzVCLFNBQUssU0FBU0E7QUFDZCxTQUFLLGlCQUFpQjtBQUN0QixTQUFLLG9CQUFvQjtBQUV6QixTQUFLLGVBQWUsZ0JBQWdCLEtBQUssb0JBQW9CLEtBQUssSUFBSSxDQUFDO0FBQ3ZFLFNBQUssa0JBQWtCLHlCQUF5QixLQUFLLDZCQUE2QixLQUFLLElBQUksQ0FBQztBQUU1RixTQUFLLGdCQUFnQixLQUFLLG9CQUFvQjtBQUM5QyxTQUFLLE9BQU87QUFBQSxFQUNoQjtBQUFBLEVBRUEsU0FBZTtBQUNYLFFBQUksS0FBSyxjQUFjO0FBQ25CLFdBQUssY0FBYyxTQUFTLFFBQVE7QUFDcEMsdUNBQVcsS0FBSyxlQUFlLGlCQUFpQixFQUFFLFdBQVcsTUFBTSxDQUFDO0FBQUEsSUFDeEUsT0FBTztBQUNILFdBQUssY0FBYyxZQUFZLFFBQVE7QUFDdkMsVUFBSSxLQUFLLGtCQUFrQixrQkFBa0IsR0FBRztBQUM1QyxhQUFLLGNBQWMsWUFBWSxxQkFBcUI7QUFDcEQsYUFBSyxjQUFjLEtBQUssZUFBZSxpQkFBaUIsRUFBRSxJQUFJO0FBQUEsTUFDbEUsT0FBTztBQUNILGFBQUssY0FBYyxTQUFTLHFCQUFxQjtBQUNqRCx5Q0FBVyxLQUFLLGVBQWUsdUJBQXVCLEVBQUUsV0FBVyxNQUFNLENBQUM7QUFBQSxNQUM5RTtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUEsRUFFUSxzQkFBbUM7QUFDdkMsVUFBTSxPQUFPLEtBQUssT0FBTyxpQkFBaUI7QUFDMUMsa0NBQVEsTUFBTSxTQUFTO0FBQ3ZCLFNBQUssV0FBVyxDQUFDLHdCQUF3QixlQUFlLENBQUM7QUFDekQsU0FBSyxpQkFBaUIsU0FBUyxLQUFLLG1CQUFtQixLQUFLLElBQUksQ0FBQztBQUNqRSxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRVEsbUJBQW1CLE9BQXlCO0FBQ2hELFVBQU0sT0FBTyxJQUFJLHNCQUFLO0FBQ3RCLFVBQU0sMEJBQTBCLEtBQUssT0FBTyxTQUFTO0FBQ3JELFVBQU0sd0JBQXdCLEtBQUssZUFBZSxvQkFBb0IsRUFBRTtBQUN4RSxVQUFNLE9BQU8sS0FBSyxlQUFlLGNBQWM7QUFDL0MsVUFBTSxVQUFVLEtBQUssZUFBZSxpQkFBaUI7QUFFckQsU0FBSyxRQUFRLENBQUMsU0FBUztBQUNuQixXQUFLLFNBQVMsWUFBWSxRQUFRLE1BQU0sRUFBRSxXQUFXLElBQUk7QUFBQSxJQUM3RCxDQUFDO0FBQ0QsU0FBSyxRQUFRLENBQUMsU0FBUztBQUNuQixXQUFLLFNBQVMsR0FBRyx3QkFBd0IsWUFBWSx3QkFBd0IsUUFBUSxFQUNoRixXQUFXLHFCQUFxQixFQUNoQyxRQUFRLE1BQU07QUFDWCxjQUFNLGFBQWEsZUFBZSxLQUFLLE9BQU8sVUFBVSxJQUFJO0FBQzVELG1CQUFXLFVBQVUsQ0FBQztBQUN0QixhQUFLLE9BQU8sYUFBYTtBQUN6QixhQUFLLE9BQU87QUFBQSxNQUNoQixDQUFDO0FBQUEsSUFDVCxDQUFDO0FBQ0QsU0FBSyxRQUFRLENBQUMsU0FBUztBQUNuQixXQUFLLFNBQVMsR0FBRywwQkFBMEIsWUFBWSxtQkFBbUIsRUFDckUsV0FBVyx1QkFBdUIsRUFDbEMsUUFBUSxNQUFNO0FBQ1gsYUFBSyxPQUFPLFNBQVMsVUFBVSxDQUFDO0FBQ2hDLGFBQUssT0FBTyxhQUFhO0FBQ3pCLGFBQUssT0FBTztBQUFBLE1BQ2hCLENBQUM7QUFBQSxJQUNULENBQUM7QUFDRCxTQUFLLGFBQWE7QUFDbEIsU0FBSyxRQUFRLENBQUMsU0FBUztBQUNuQixXQUFLLFNBQVMsZUFBZSxFQUN4QixRQUFRLE1BQU07QUFDWCxjQUFNLFVBQVcsS0FBSyxPQUFPLElBQVk7QUFDekMsZ0JBQVEsS0FBSztBQUNiLGdCQUFRLFlBQVksS0FBSyxPQUFPLFNBQVMsRUFBRTtBQUFBLE1BQy9DLENBQUM7QUFBQSxJQUNULENBQUM7QUFFRCxTQUFLLGlCQUFpQixLQUFLO0FBQUEsRUFDL0I7QUFBQSxFQUVRLDZCQUE2QixjQUE2QjtBQUM5RCxTQUFLLGVBQWU7QUFDcEIsU0FBSyxPQUFPO0FBQUEsRUFDaEI7QUFBQSxFQUVRLG9CQUFvQixTQUF1QjtBQUMvQyxTQUFLLE9BQU87QUFBQSxFQUNoQjtBQUFBLEVBRVEsY0FBYyxTQUF1QjtBQUN6QyxxQ0FBVyxLQUFLLGVBQWUsWUFBWSxXQUFXLEVBQUUsV0FBVyxNQUFNLENBQUM7QUFBQSxFQUM5RTtBQUNKOzs7QTVSOUZBLElBQXFCLFdBQXJCLGNBQXNDLHdCQUFPO0FBQUEsRUFRNUMsTUFBTSxTQUFTO0FBQ2QsVUFBTSxLQUFLLGFBQWE7QUFFeEIsU0FBSyxpQkFBaUIsSUFBSSxlQUFlLElBQUk7QUFDN0MsU0FBSyxrQkFBa0IsSUFBSSxnQkFBZ0IsSUFBSTtBQUMvQyxTQUFLLG1CQUFtQixJQUFJLGtCQUFrQixLQUFLLEtBQUssS0FBSyxVQUFVLEtBQUssZ0JBQWdCLEtBQUssZUFBZTtBQUNoSCxTQUFLLGdCQUFnQixJQUFJLGNBQWMsTUFBTSxLQUFLLGdCQUFnQixLQUFLLGdCQUFnQjtBQUV2RixTQUFLLGNBQWMsSUFBSSxvQkFBb0IsSUFBSSxDQUFDO0FBQ2hELFVBQU0sS0FBSyxlQUFlO0FBQUEsRUFDM0I7QUFBQSxFQUVBLE1BQU0sV0FBVztBQUNoQixTQUFLLGVBQWUsU0FBUztBQUFBLEVBQzlCO0FBQUEsRUFFQSxNQUFNLGlCQUFpQjtBQUN0QixVQUFNLFlBQVksa0JBQWtCO0FBQUEsTUFDbkMsV0FBVyxNQUFNLEtBQUssaUJBQWlCLGdCQUFnQjtBQUFBLE1BQ3ZELFlBQVksTUFBTSxLQUFLLGVBQWUsV0FBVztBQUFBLElBQ2xELENBQUM7QUFDRCxTQUFLLHdCQUF3QixTQUFTO0FBQUEsRUFDdkM7QUFBQSxFQUVBLE1BQU0sZUFBZTtBQUNwQixTQUFLLFdBQVcsT0FBTztBQUFBLE1BQ3RCLENBQUM7QUFBQSxNQUNEO0FBQUEsTUFDQSxNQUFNLEtBQUssU0FBUztBQUFBLElBQ3JCO0FBQUEsRUFDRDtBQUFBLEVBRUEsTUFBTSxlQUFlO0FBQ3BCLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUNqQyxTQUFLLGdCQUFnQixpQkFBaUI7QUFBQSxFQUN2QztBQUNEOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAiZyIsICJlIiwgIm5vcm1hbGl6ZVZhbHVlIiwgIkhlYWRlcnMiLCAicmVzb2x2ZSIsICJtYXRjaCIsICJpIiwgIm1ldGhvZHMiLCAiUmVxdWVzdCIsICJzcGxpdCIsICJSZXNwb25zZSIsICJmZXRjaCIsICJtb2R1bGUiLCAieCIsICJWIiwgIm9wdHMiLCAiYyIsICJpIiwgIlMiLCAibiIsICJVIiwgImQiLCAiYSIsICJiIiwgIm1vZHVsZSIsICJpIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibm9ybWFsaXplIiwgInN0ciIsICJzIiwgInN0YXJ0IiwgImVuZCIsICJpIiwgImUiLCAibCIsICJtb2R1bGUiLCAic3RyIiwgImF0IiwgImMiLCAiZGVmYXVsdFBvcnQiLCAiaSIsICJSIiwgIm4iLCAiY29tcHJlc3MiLCAibGVuZ3RoIiwgInJlcyIsICJlIiwgInYiLCAibW9kdWxlIiwgInV0aWxzIiwgIlVSTCIsICJpIiwgInRvSlNPTiIsICJWIiwgInJlcXVpcmVfbGliIiwgIm1vZHVsZSIsICJTdHJlYW0iLCAiUmVhZGFibGUiLCAiQmxvYiIsICJhIiwgImxlbmd0aCIsICJpIiwgInN0YXJ0IiwgImVuZCIsICJlIiwgImlzQmxvYiIsICJjdCIsICJyZXNvbHZlIiwgInN0ciIsICJwMiIsICJmaW5kIiwgIm1hcCIsICJIZWFkZXJzIiwgInBhaXJzIiwgImtpbmQiLCAiayIsICJpbmRleCIsICJSZXNwb25zZSIsICJvcHRzIiwgIlVSTCIsICJSZXF1ZXN0IiwgImlzRG9tYWluT3JTdWJkb21haW4iLCAiaXNTYW1lUHJvdG9jb2wiLCAiZmV0Y2giLCAiYWJvcnQiLCAiYWJvcnRBbmRGaW5hbGl6ZSIsICJzIiwgInQiLCAiciIsICJlIiwgIm4iLCAidSIsICJhIiwgImMiLCAibCIsICJkIiwgInMiLCAiZiIsICJpIiwgIm8iLCAiaCIsICJfIiwgInAiLCAiZyIsICJqIiwgImsiLCAidyIsICJTIiwgInYiLCAiUiIsICJUIiwgInEiLCAiQyIsICJFIiwgIlAiLCAiVyIsICJPIiwgIkIiLCAiTCIsICJ6IiwgIkEiLCAiRiIsICJtIiwgInkiLCAiUmVhZGFibGVTdHJlYW0iLCAiYiIsICJpc0Z1bmN0aW9uIiwgImVuZCIsICJpc0Z1bmN0aW9uIiwgInN0YXJ0IiwgIkJsb2IiLCAia2luZCIsICJmIiwgImlzRnVuY3Rpb24iLCAic3RhcnQiLCAiZW5kIiwgIm9mZnNldCIsICJSZWFkYWJsZVN0cmVhbSIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwgIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCAiRmlsZSIsICJraW5kIiwgImYiLCAiQmxvYiIsICJGaWxlIiwgIm1vZHVsZSIsICJzIiwgIm0iLCAiaCIsICJkIiwgInciLCAieSIsICJwYXJzZSIsICJzdHIiLCAibWF0Y2giLCAibiIsICJtb2R1bGUiLCAidCIsICJyIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZGVidWciLCAiZGVwcmVjYXRlIiwgImluc3BlY3QiLCAiZiIsICJtb2R1bGUiLCAibW9kdWxlIiwgImkiLCAiaXNPYmplY3QiLCAieCIsICJFdmVudFRhcmdldCIsICJkZWZpbmVFdmVudEF0dHJpYnV0ZSIsICJBYm9ydENvbnRyb2xsZXIiLCAibW9kdWxlIiwgImlzUGxhaW5PYmplY3QiLCAiZ2V0VHlwZSIsICJpc1BsYWluT2JqZWN0X2RlZmF1bHQiLCAiZmlsZUZyb21QYXRoIiwgImlzUGxhaW5PYmplY3RfZGVmYXVsdCIsICJGaWxlIiwgImZzIiwgIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCAiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsICJraW5kIiwgImYiLCAic3RhcnQiLCAiZW5kIiwgIkRPTUV4Y2VwdGlvbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAibWF0Y2giLCAiZSIsICJ2IiwgImZldGNoIiwgInJlc29sdmUiLCAiX2EiLCAiX2EiLCAiZmV0Y2giLCAicCIsICJfX2RlZlByb3AiLCAiaSIsICJpbXBvcnRfd2hhdHdnX2ZldGNoIiwgIk9sbGFtYSIsICJmcyIsICJlIiwgInJlIiwgInMiLCAic3RhcnQiLCAiaSIsICJtYXRjaCIsICJpbmRleCIsICJnZXQiLCAic2VsZiIsICJqIiwgImVzY2FwZSIsICJjbGVhckNhY2hlIiwgInBhcnNlIiwgInJlbmRlciIsICJpc0FycmF5IiwgIndvcmxkIiwgImNvbXB1dGUiLCAiaSIsICJvdXQiLCAibiIsICJyIiwgIm4iLCAibSIsICJrIiwgImkiLCAibWF4IiwgImEiLCAiYiIsICJ0IiwgIm1ldGhvZHMiLCAiZG9jdW1lbnQiLCAiYSIsICJuIiwgInN0YXJ0IiwgImVuZCIsICJtIiwgImkiLCAibWV0aG9kcyIsICJtb2RlbCIsICJwbHVnaW4iLCAibSIsICJrIiwgIndvcmxkIiwgIlZpZXciLCAibmxwIiwgIm1ldGhvZHMiLCAiY29tcHV0ZSIsICJob29rcyIsICJpc09iamVjdCIsICJpc0FycmF5IiwgIm8iLCAiYSIsICJzdHIiLCAiVmlldyIsICJ3b3JsZCIsICJtZXRob2RzIiwgImRvY3VtZW50IiwgImNvbXB1dGUiLCAicGx1Z2luIiwgImRvY3VtZW50IiwgInN0ciIsICJ0IiwgIm1ldGhvZHNfZGVmYXVsdCIsICJtZXRob2RzIiwgIlZpZXciLCAiY29tcHV0ZV9kZWZhdWx0IiwgImNvbXB1dGVfZGVmYXVsdCIsICJtZXRob2RzX2RlZmF1bHQiLCAidCIsICJ4IiwgImkiLCAic3RyIiwgIngiLCAiaW5kZXgiLCAiaGFzU3BhY2UiLCAiaGFzRGFzaCIsICJlbmQiLCAicG9zdCIsICJzdGFydCIsICJkb2N1bWVudCIsICJuIiwgImluZGV4IiwgInN0ciIsICJuIiwgImkiLCAiciIsICJtIiwgImlzQXJyYXkiLCAid29ybGQiLCAibWV0aG9kcyIsICJkb2N1bWVudCIsICJpIiwgIm4iLCAiZm5zIiwgImZucyIsICJpc1RpdGxlQ2FzZSIsICJzdHIiLCAidG9UaXRsZUNhc2UiLCAieCIsICJ0b0xvd2VyQ2FzZSIsICJtIiwgIm91dCIsICJhIiwgImkiLCAibWF0Y2giLCAiZG9jdW1lbnQiLCAibiIsICJzdGFydCIsICJlbmQiLCAiaSIsICJuIiwgImkiLCAibWV0aG9kcyIsICJpbmRleE4iLCAic2VsZiIsICJkb2N1bWVudCIsICJyZW1vdmVfZGVmYXVsdCIsICJtZXRob2RzIiwgInN0ciIsICJzdGFydCIsICJlbmQiLCAidCIsICJpIiwgImhhc0h5cGhlbiIsICJhIiwgImIiLCAibyIsICJhIiwgImIiLCAibiIsICJ0IiwgIm8iLCAibSIsICJzb3J0X2RlZmF1bHQiLCAiaXNBcnJheSIsICJlbmQiLCAicHRycyIsICJhIiwgImF0IiwgImEiLCAibWV0aG9kcyIsICJyZW1vdmVfZGVmYXVsdCIsICJzb3J0X2RlZmF1bHQiLCAiYWRkQVBJIiwgIlZpZXciLCAiYXBpX2RlZmF1bHQiLCAiY29tcHV0ZSIsICJuIiwgImkiLCAiY29tcHV0ZV9kZWZhdWx0IiwgInBsdWdpbl9kZWZhdWx0IiwgImFwaV9kZWZhdWx0IiwgImNvbXB1dGVfZGVmYXVsdCIsICJkb2N1bWVudCIsICJuIiwgInciLCAiaSIsICJpIiwgImJlZm9yZSIsICJpIiwgImJlZm9yZSIsICJoYXNDb250cmFjdGlvbiIsICJpIiwgImFmdGVyIiwgImkiLCAiaSIsICJ3b3JsZCIsICJzdGFydCIsICJlbmQiLCAiaSIsICJsaXN0IiwgImJlZm9yZSIsICJhZnRlciIsICJvIiwgImsiLCAid29ybGQiLCAiZG9jdW1lbnQiLCAibW9kZWwiLCAibWV0aG9kcyIsICJuIiwgImNvbnRyYWN0aW9uc19kZWZhdWx0IiwgImNvbXB1dGVfZGVmYXVsdCIsICJjb250cmFjdGlvbnNfZGVmYXVsdCIsICJjb21wdXRlX2RlZmF1bHQiLCAicGx1Z2luX2RlZmF1bHQiLCAid29ybGQiLCAibW9kZWwiLCAibWV0aG9kcyIsICJzZXRUYWciLCAiaSIsICJ0IiwgImVuZCIsICJrIiwgInN0ciIsICJjb21wdXRlX2RlZmF1bHQiLCAic3RyIiwgInQiLCAicGx1Z2luX2RlZmF1bHQiLCAiY29tcHV0ZV9kZWZhdWx0IiwgIndvcmxkIiwgIm1ldGhvZHMiLCAiVmlldyIsICJ3b3JsZCIsICJtb2RlbCIsICJtZXRob2RzIiwgInNldFRhZyIsICJsZXhpY29uIiwgInQiLCAiZW5kIiwgImkiLCAic3RyIiwgImkiLCAid29ybGQiLCAibW9kZWwiLCAibWV0aG9kcyIsICJzZXRUYWciLCAibGV4aWNvbiIsICJ0IiwgInN0ciIsICJ3b3JsZCIsICJpIiwgImNvbXB1dGVfZGVmYXVsdCIsICJleHBhbmQiLCAic3BsaXQiLCAibWV0aG9kc19kZWZhdWx0IiwgIndvcmxkIiwgIm1ldGhvZHMiLCAibW9kZWwiLCAiayIsICJsZXgiLCAiX211bHRpIiwgIm1vZGVsIiwgInBsdWdpbl9kZWZhdWx0IiwgIm1ldGhvZHNfZGVmYXVsdCIsICJjb21wdXRlX2RlZmF1bHQiLCAid29ybGQiLCAibWV0aG9kcyIsICJtb2RlbCIsICJ0IiwgIm4iLCAiaSIsICJyIiwgInMiLCAiZnMiLCAib3B0cyIsICJuIiwgImkiLCAibyIsICJzdGFydCIsICJzY2FuIiwgImlzT2JqZWN0IiwgImFwaV9kZWZhdWx0IiwgIlZpZXciLCAib3B0cyIsICJsaXN0IiwgImkiLCAibyIsICJwbHVnaW5fZGVmYXVsdCIsICJhcGlfZGVmYXVsdCIsICJuIiwgImZpeFBvaW50ZXJzIiwgImsiLCAib3B0cyIsICJ3b3JsZCIsICJpc09iamVjdCIsICJvcHRzIiwgImZpeFBvaW50ZXJzIiwgInB0cnMiLCAibSIsICJpIiwgIm1ldGhvZHMiLCAib3B0cyIsICJpbmRleE4iLCAiayIsICJhIiwgImIiLCAicG9zdCIsICJkb2N1bWVudCIsICJuIiwgImVuZCIsICJtIiwgImlzQXJyYXkiLCAiYWRkSWRzIiwgIm4iLCAic3RhcnQiLCAiZW5kIiwgIm1ldGhvZHMiLCAibSIsICJzcGxpdEFsbCIsICJvIiwgInAiLCAiaSIsICJ3b3JsZCIsICJpIiwgIm1ldGhvZHMiLCAibWV0aG9kcyIsICJWaWV3IiwgImFwaV9kZWZhdWx0IiwgInN0ciIsICJzdHIiLCAidyIsICJvcHRzIiwgImkiLCAiX2EiLCAiYiIsICJjIiwgInMiLCAic3BsaXQiLCAid29ybGQiLCAiaSIsICJ3IiwgIndvcmxkIiwgInN0ciIsICJpbmRleCIsICJpIiwgInIiLCAib3B0cyIsICJ3b3JsZCIsICJzdHIiLCAiaSIsICJsaW1pdCIsICJpIiwgImoiLCAidCIsICJsZW5ndGgiLCAiaGFzRGFzaCIsICJtZXRob2RzIiwgImluZGV4IiwgImxlbmd0aCIsICJzdHIiLCAiciIsICJ0IiwgInN0YXJ0IiwgInQiLCAiZyIsICJpc0FycmF5IiwgImMiLCAiY3IiLCAidCIsICJpIiwgImciLCAiZW5kIiwgImciLCAiZW5kIiwgInQiLCAiZyIsICJrIiwgIm8iLCAic3RhcnQiLCAiZ2V0R3JvdXAiLCAiciIsICJrIiwgIm4iLCAic3RhcnQiLCAiZW5kIiwgImkiLCAibiIsICJrIiwgInIiLCAiaSIsICJlbmQiLCAic3RhcnQiLCAibWF0Y2hfZGVmYXVsdCIsICJtZXRob2RzIiwgIm1hdGNoX2RlZmF1bHQiLCAibWV0aG9kc19kZWZhdWx0IiwgImxpYl9kZWZhdWx0IiwgInN0ciIsICJvcHRzIiwgIndvcmxkIiwgImtpbGxVbmljb2RlIiwgInBsdWdpbl9kZWZhdWx0IiwgImFwaV9kZWZhdWx0IiwgIm1ldGhvZHNfZGVmYXVsdCIsICJsaWJfZGVmYXVsdCIsICJzdHIiLCAiayIsICJzdGFydCIsICJlbmQiLCAidCIsICJhIiwgImIiLCAib3V0IiwgImkiLCAib3B0cyIsICJ0IiwgInBvc3QiLCAiaSIsICJzIiwgImIiLCAiYyIsICJkIiwgImgiLCAiaiIsICJhIiwgImEiLCAiYiIsICJmbnMiLCAidCIsICJpIiwgImsiLCAibWV0aG9kcyIsICJuIiwgImRlYnVnIiwgImZtdCIsICJkZWJ1Z19kZWZhdWx0IiwgInBvc3QiLCAibSIsICJhIiwgIm4iLCAiaSIsICJ0IiwgImVuZCIsICJpc09iamVjdCIsICJhIiwgImsiLCAiYiIsICJzdHIiLCAidCIsICJvIiwgImxpc3QiLCAiaCIsICJtZXRob2RzIiwgImRlYnVnX2RlZmF1bHQiLCAiaXNPYmplY3QiLCAiZm10IiwgIm9wdHMiLCAibWV0aG9kcyIsICJhZGRBUEkiLCAiVmlldyIsICJhcGlfZGVmYXVsdCIsICJtIiwgIm91dCIsICJ0IiwgInN0ciIsICJtb2RlbCIsICJjIiwgInQiLCAic3RyIiwgIm91dCIsICJvZmZzZXQiLCAiaW5kZXgiLCAic3RhcnQiLCAiZW5kIiwgInBvc3QiLCAiayIsICJpIiwgImRlYnVnIiwgImRlYnVnX2RlZmF1bHQiLCAicGx1Z2luX2RlZmF1bHQiLCAiYXBpX2RlZmF1bHQiLCAiZGVidWdfZGVmYXVsdCIsICJhIiwgImIiLCAibWF4IiwgImkiLCAibSIsICJuIiwgInN0YXJ0IiwgImVuZCIsICJkb2VzTWF0Y2giLCAicCIsICJhIiwgImIiLCAiaSIsICJzcGxpdF9kZWZhdWx0IiwgIm4iLCAiaSIsICJpbmRleCIsICJkb2N1bWVudCIsICJzdGFydCIsICJ0IiwgImdldERvYyIsICJlbmQiLCAiYSIsICJpIiwgInQiLCAibWV0aG9kc19kZWZhdWx0IiwgInNwbGl0X2RlZmF1bHQiLCAiYSIsICJiIiwgIm4iLCAibSIsICJzcGxpdF9kZWZhdWx0IiwgIm8iLCAiYSIsICJiIiwgInN0YXJ0IiwgImVuZCIsICJwIiwgImgiLCAiaXNBcnJheSIsICJnZXREb2MiLCAibSIsICJhZGRJZHMiLCAibiIsICJzdGFydCIsICJtZXRob2RzIiwgImFkZEFQSSIsICJWaWV3IiwgImFwaV9kZWZhdWx0IiwgInBsdWdpbl9kZWZhdWx0IiwgIm1ldGhvZHNfZGVmYXVsdCIsICJhcGlfZGVmYXVsdCIsICJsaWJfZGVmYXVsdCIsICJtZXRob2RzIiwgIlZpZXciLCAib3B0cyIsICJ3b3JsZCIsICJtZXRob2RzIiwgIm8iLCAiYXBpX2RlZmF1bHQiLCAiciIsICJzdHIiLCAidyIsICJuIiwgInBhcnNlIiwgIndvcmxkIiwgIm8iLCAid29ybGQiLCAiaG9va3MiLCAic3RyIiwgImsiLCAibyIsICJob29rcyIsICJpIiwgImsiLCAibSIsICJsaXN0IiwgIm4iLCAic3RyIiwgInJ1bk1hdGNoIiwgImRvY3VtZW50IiwgIm1ldGhvZHMiLCAib3B0cyIsICJuIiwgImkiLCAibSIsICJkb2N1bWVudCIsICJpIiwgIm8iLCAibWV0aG9kcyIsICJvcHRzIiwgIm1vZGVsIiwgImkiLCAiayIsICJsaXN0IiwgImRvY3VtZW50IiwgIndvcmxkIiwgIm1vZGVsIiwgIm1ldGhvZHMiLCAiZ2V0RG9jIiwgInNldFRhZyIsICJ1blRhZyIsICJ0IiwgIm1ldGhvZHNfZGVmYXVsdCIsICJwbHVnaW5fZGVmYXVsdCIsICJsaWJfZGVmYXVsdCIsICJhcGlfZGVmYXVsdCIsICJtZXRob2RzX2RlZmF1bHQiLCAibyIsICJ0YWdTdHJpbmciLCAiaSIsICJpc0FycmF5IiwgInN0ciIsICJ0IiwgIndvcmxkIiwgImkiLCAibyIsICJjYW5CZSIsICJpIiwgImNhbkJlX2RlZmF1bHQiLCAiZSIsICJ0IiwgIm4iLCAiciIsICJpIiwgImMiLCAicyIsICJjIiwgImsiLCAiayIsICJjb21wdXRlIiwgImsiLCAibyIsICJtZXRob2RzX2RlZmF1bHQiLCAiY2FuQmVfZGVmYXVsdCIsICJpc0FycmF5IiwgImZucyIsICJtZXRob2RzIiwgInZlcmJvc2UiLCAid29ybGQiLCAibW9kZWwiLCAiY2FuQmUiLCAibiIsICJpIiwgIlZpZXciLCAiYXBpX2RlZmF1bHQiLCAiYWRkVGFncyIsICJtb2RlbCIsICJtZXRob2RzIiwgImxpYl9kZWZhdWx0IiwgImEiLCAiYiIsICJkb2N1bWVudCIsICJ3b3JsZCIsICJwbHVnaW5fZGVmYXVsdCIsICJtZXRob2RzX2RlZmF1bHQiLCAiYXBpX2RlZmF1bHQiLCAibGliX2RlZmF1bHQiLCAiaSIsICJvIiwgImkiLCAicyIsICJ3b3JsZCIsICJpc1NlbnRlbmNlIiwgImkiLCAiYyIsICJzdHIiLCAibSIsICJpIiwgInNwbGl0IiwgImkiLCAic3BsaXQiLCAibSIsICJtMiIsICJoYXNTb21ldGhpbmciLCAid29ybGQiLCAiaSIsICJoYXNIeXBoZW4iLCAic3RyIiwgIm1vZGVsIiwgInNwbGl0SHlwaGVucyIsICJvIiwgImkiLCAiaSIsICJoIiwgImMiLCAiaXNBcnJheSIsICJzdHIiLCAibW9kZWwiLCAiaSIsICJoYXNIeXBoZW4iLCAic3BsaXRIeXBoZW5zIiwgInMiLCAic3RyIiwgIm1vZGVsIiwgInByZVB1bmN0dWF0aW9uIiwgInBvc3RQdW5jdHVhdGlvbiIsICJlbW90aWNvbnMiLCAicG9zdCIsICJpIiwgImMiLCAiYWZ0ZXIiLCAibW9kZWwiLCAic3RyIiwgInBvc3QiLCAid2hpdGVzcGFjZV9kZWZhdWx0IiwgInN0ciIsICJ3b3JsZCIsICJ1bmljb2RlIiwgInMiLCAiaSIsICJzdHIiLCAic3RyIiwgIndvcmxkIiwgImtpbGxVbmljb2RlIiwgInN0ciIsICJwYXJzZSIsICJ3b3JsZCIsICJtZXRob2RzIiwgIm1vZGVsIiwgInNwbGl0U2VudGVuY2VzIiwgInQiLCAicGFyc2VfZGVmYXVsdCIsICJpc0Fjcm9ueW0iLCAiaGFzTGV0dGVyIiwgInN0ciIsICJtZXRob2RzX2RlZmF1bHQiLCAid2hpdGVzcGFjZV9kZWZhdWx0IiwgInBhcnNlX2RlZmF1bHQiLCAibGV4aWNvbiIsICJhIiwgInciLCAiaCIsICJzdHIiLCAiayIsICJzIiwgInVuaWNvZGVfZGVmYXVsdCIsICJtb2RlbF9kZWZhdWx0IiwgImxleGljb24iLCAidW5pY29kZV9kZWZhdWx0IiwgIndvcmxkIiwgInN0ciIsICJhbGlhc2VzIiwgImhhc0Rhc2giLCAic3RyIiwgImkiLCAidCIsICJpbmRleCIsICJpIiwgInQiLCAiaW5kZXgiLCAiZG9jdW1lbnQiLCAibiIsICJpIiwgIndvcmRDb3VudCIsICJuIiwgImkiLCAidCIsICJpIiwgInQiLCAibWV0aG9kcyIsICJjb21wdXRlX2RlZmF1bHQiLCAicGx1Z2luX2RlZmF1bHQiLCAiY29tcHV0ZV9kZWZhdWx0IiwgIm1ldGhvZHNfZGVmYXVsdCIsICJtb2RlbF9kZWZhdWx0IiwgImNvbXB1dGVfZGVmYXVsdCIsICJhcGkiLCAiVmlldyIsICJhcGlfZGVmYXVsdCIsICJvcHRzIiwgIndvcmxkIiwgImluZGV4IiwgInN0ciIsICJtYXgiLCAicHJlZml4IiwgImlzT2JqZWN0IiwgImRlZmF1bHRzIiwgIm9wdHMiLCAibW9kZWwiLCAic3RyIiwgImxpYl9kZWZhdWx0IiwgIm1vZGVsIiwgInBsdWdpbl9kZWZhdWx0IiwgImFwaV9kZWZhdWx0IiwgImxpYl9kZWZhdWx0IiwgImNvbXB1dGVfZGVmYXVsdCIsICJwbHVnaW5fZGVmYXVsdCIsICJPbGxhbWEiLCAibW9kZWwiLCAidiIsICJpIiwgInN0ciIsICJvdXQiLCAiaiIsICJpIiwgImMiLCAiaSIsICJoYXMiLCAicHJlZml4IiwgImlzX2FycmF5IiwgInB1c2giLCAiZGVmYXVsdHMiLCAidiIsICJmaWx0ZXIiLCAic29ydCIsICJqIiwgIm9wdHMiLCAiaSIsICJmZXRjaCIsICJIZWFkZXJzIiwgIkZvcm1EYXRhIiwgIkJsb2IiLCAiaW1wb3J0X3V0aWwiLCAiQmxvYiIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwgImtpbmQiLCAiZiIsICJGb3JtRGF0YSIsICJpc0Z1bmN0aW9uIiwgIl9Gb3JtRGF0YV9zZXRFbnRyeSIsICJyYXdWYWx1ZSIsICJGaWxlIiwgIm1hdGNoIiwgImkiLCAic3RyIiwgImlzRnVuY3Rpb24iLCAiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsICJraW5kIiwgImYiLCAiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsICJsZW5ndGgiLCAiX0Zvcm1EYXRhRW5jb2Rlcl9nZXRGaWVsZEhlYWRlciIsICJmaWxlRnJvbVBhdGgiLCAiS2VlcEFsaXZlQWdlbnQiLCAiZ2V0TXVsdGlwYXJ0UmVxdWVzdE9wdGlvbnMiLCAib3B0cyIsICJBYm9ydENvbnRyb2xsZXJQb2x5ZmlsbCIsICJGb3JtRGF0YSIsICJCbG9iIiwgIkZpbGUiLCAiRnNSZWFkU3RyZWFtIiwgIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCAiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsICJfYSIsICJpIiwgImUiLCAiZSIsICJzZWxmIiwgIl9hIiwgIl8iLCAic3RyIiwgImluZGV4IiwgImlzRmlsZUxpa2UiLCAiX2EiLCAicCIsICJ4IiwgIm9wdHMiLCAiRm9ybURhdGEiLCAiZGVidWciLCAiX2EiLCAicGFyc2VSZXNwb25zZSIsICJyZXNvbHZlIiwgInAiLCAiZmV0Y2giLCAib3B0cyIsICJQYWdlIiwgIl9lIiwgInJldHJ5TWVzc2FnZSIsICJlIiwgIl8iLCAiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwgImsiLCAibWF0Y2giLCAibiIsICJfYSIsICJfZSIsICJrIiwgImRlYnVnIiwgIl9hIiwgIm1vZGlmaWVkQXJnIiwgImMiLCAiciIsICJ2IiwgIl9hIiwgImcyIiwgIl9hIiwgIl9hIiwgIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCAicmVzb2x2ZSIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwgImluZGV4IiwgImwiLCAiX2EiLCAiaW5wdXRUb29sIiwgInQiLCAiX2EiLCAiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsICJjIiwgImYiLCAiaSIsICJjb250ZW50IiwgInQiLCAibmFtZSIsICJfQWJzdHJhY3RDaGF0Q29tcGxldGlvblJ1bm5lcl9nZXRGaW5hbE1lc3NhZ2UiLCAiX0Fic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJfZ2V0RmluYWxGdW5jdGlvbkNhbGwiLCAiX0Fic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJfZ2V0RmluYWxGdW5jdGlvbkNhbGxSZXN1bHQiLCAieCIsICJ5IiwgIl9BYnN0cmFjdENoYXRDb21wbGV0aW9uUnVubmVyX2NhbGN1bGF0ZVRvdGFsVXNhZ2UiLCAiX0Fic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJfdmFsaWRhdGVQYXJhbXMiLCAiX0Fic3RyYWN0Q2hhdENvbXBsZXRpb25SdW5uZXJfc3RyaW5naWZ5RnVuY3Rpb25DYWxsUmVzdWx0IiwgIm9wdHMiLCAicGFyc2VKU09OIiwgImxlbmd0aCIsICJpbmRleCIsICJzdGFydCIsICJlc2NhcGUiLCAiZSIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwgIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCAiX2EiLCAiX0NoYXRDb21wbGV0aW9uU3RyZWFtX2JlZ2luUmVxdWVzdCIsICJfQ2hhdENvbXBsZXRpb25TdHJlYW1fZ2V0Q2hvaWNlRXZlbnRTdGF0ZSIsICJfQ2hhdENvbXBsZXRpb25TdHJlYW1fYWRkQ2h1bmsiLCAiX2UiLCAiX3IiLCAiX3QiLCAiX0NoYXRDb21wbGV0aW9uU3RyZWFtX2VtaXRUb29sQ2FsbERvbmVFdmVudCIsICJfQ2hhdENvbXBsZXRpb25TdHJlYW1fZW1pdENvbnRlbnREb25lRXZlbnRzIiwgIl9DaGF0Q29tcGxldGlvblN0cmVhbV9lbmRSZXF1ZXN0IiwgIl9DaGF0Q29tcGxldGlvblN0cmVhbV9nZXRBdXRvUGFyc2VhYmxlUmVzcG9uc2VGb3JtYXQiLCAiX0NoYXRDb21wbGV0aW9uU3RyZWFtX2FjY3VtdWxhdGVDaGF0Q29tcGxldGlvbiIsICJpbmRleCIsICJjb250ZW50IiwgInJlZnVzYWwiLCAicmVzdCIsICJfYiIsICJfYyIsICJfZCIsICJyZXNvbHZlIiwgImNodW5rIiwgIm1vZGVsIiwgImkiLCAiaWQiLCAieCIsICJvcHRzIiwgIkNvbXBsZXRpb25zIiwgIkNoYXQiLCAiQ29tcGxldGlvbnMiLCAicmVzb2x2ZSIsICJjaHVuayIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwgIl9hIiwgIngiLCAiaW5kZXgiLCAiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsICJhc3NlcnROZXZlciIsICJfQXNzaXN0YW50U3RyZWFtX2VuZFJlcXVlc3QiLCAiX0Fzc2lzdGFudFN0cmVhbV9oYW5kbGVNZXNzYWdlIiwgIl9Bc3Npc3RhbnRTdHJlYW1faGFuZGxlUnVuU3RlcCIsICJfQXNzaXN0YW50U3RyZWFtX2hhbmRsZUV2ZW50IiwgIl9Bc3Npc3RhbnRTdHJlYW1fYWNjdW11bGF0ZVJ1blN0ZXAiLCAiX0Fzc2lzdGFudFN0cmVhbV9hY2N1bXVsYXRlTWVzc2FnZSIsICJfQXNzaXN0YW50U3RyZWFtX2FjY3VtdWxhdGVDb250ZW50IiwgIl9Bc3Npc3RhbnRTdHJlYW1faGFuZGxlUnVuIiwgIk1lc3NhZ2VzIiwgIl9hIiwgIk1lc3NhZ2VzIiwgIl9hIiwgIkNoYXQiLCAiQ29tcGxldGlvbnMiLCAiX2EiLCAic3RhcnQiLCAibW9kZWwiLCAiaGFzQXV0b1BhcnNlYWJsZUlucHV0IiwgInBhcnNlVG9vbENhbGwiLCAiY29udGVudCIsICJvdXRwdXQiLCAiX2EiLCAiaXNBdXRvUGFyc2FibGVUb29sIiwgInBhcnNlVG9vbENhbGwiLCAiX2EiLCAiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwgIl9hIiwgIl9SZXNwb25zZVN0cmVhbV9iZWdpblJlcXVlc3QiLCAiX1Jlc3BvbnNlU3RyZWFtX2FkZEV2ZW50IiwgIl9SZXNwb25zZVN0cmVhbV9lbmRSZXF1ZXN0IiwgIl9SZXNwb25zZVN0cmVhbV9hY2N1bXVsYXRlUmVzcG9uc2UiLCAicmVzb2x2ZSIsICJldmVudCIsICJfYSIsICJwcm9taXNlcyIsICJGaWxlcyIsICJfYSIsICJGaWxlcyIsICJfYSIsICJvcHRzIiwgIkNvbXBsZXRpb25zIiwgIl9hIiwgIm1vZGVsIiwgIl9hIiwgIm1vZGVsIiwgInBsdWdpbiIsICJpIiwgImltcG9ydF9vYnNpZGlhbiIsICJwbHVnaW4iLCAiX2EiLCAicGx1Z2luIiwgIm1vZGVsIiwgInByb2ZpbGVDZWxsIiwgInByb2ZpbGVEcm9wZG93biIsICJwbHVnaW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgInBsdWdpbiJdCn0K diff --git a/src/settings/provider.ts b/src/settings/provider.ts index cb2af43..702f0f0 100644 --- a/src/settings/provider.ts +++ b/src/settings/provider.ts @@ -3,14 +3,16 @@ import { ProviderType } from 'src/providers'; import Inscribe from 'src/main'; export class ProviderSettingsModal extends Modal { - plugin: Inscribe; - providerType: ProviderType; + private plugin: Inscribe; + private providerType: ProviderType; + private onCloseCallback: () => void; - constructor(app: App, plugin: Inscribe, providerType: ProviderType) { + constructor(app: App, plugin: Inscribe, providerType: ProviderType, onCloseCallback: () => void) { super(app); this.plugin = plugin; this.providerType = providerType; this.modalEl.addClass('inscribe-provider-settings-modal'); + this.onCloseCallback = onCloseCallback; } onOpen() { @@ -129,6 +131,6 @@ export class ProviderSettingsModal extends Modal { onClose() { const { contentEl } = this; contentEl.empty(); - (this.plugin.app as any).setting?.openTabById(this.plugin.manifest.id); + this.onCloseCallback(); } } \ No newline at end of file diff --git a/src/settings/tab.ts b/src/settings/tab.ts index 8b4af31..87898b2 100644 --- a/src/settings/tab.ts +++ b/src/settings/tab.ts @@ -147,7 +147,9 @@ class ProvidersSection { .setIcon(configured ? "cog" : "cog") .setTooltip(configured ? "Provider configured" : "Provider not configured") .onClick(() => { - new ProviderSettingsModal(this.app, this.plugin, type).open() + new ProviderSettingsModal(this.app, this.plugin, type, () => { + this.render(); + }).open(); }); } } diff --git a/styles.css b/styles.css index a60bfc0..164ba47 100644 --- a/styles.css +++ b/styles.css @@ -1,12 +1,3 @@ -/* - -This CSS file will be included with your plugin, and -available in the app when your plugin is enabled. - -If your plugin does not need CSS, delete this file. - -*/ - /* Path Mapping Styles */ .mapping-input-section { margin-bottom: 20px;